blob: 6dc269b62c78b1a939d55ecff67a4a927d1521de [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Innoopract Informationssysteme GmbH - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
/**
* Maps widget id's to their respective object references. Allows for
* adding, removing and disposing of widgets and their id. In addition
* the mapping of widgets and their respective id's can be queried.
*
* TODO [tb] : use ObjectRegistry/WidgetUtil instead, remove class
*
*/
rwt.qx.Class.define( "rwt.remote.WidgetManager", {
type : "singleton",
extend : rwt.qx.Object,
construct : function() {
this.base( arguments );
},
members : {
/**
* Disposes of the widget that is registered with the given id. The widget
* is disconnected from its parent, its 'dispose' method is called and it is
* removed from this WidgetManager (see remove).
* No action is taken if there is no widget registered for the given id or
* the widget was already disposed of.
*/
dispose : function( id ) {
var widget = this.findWidgetById( id );
if( widget != null ) {
this.remove( widget );
if( !widget.getDisposed() ) {
this._removeToolTipPopup( widget );
widget.destroy();
}
}
},
/**
* Registers the given widget under the given id at the WidgetManager.
*/
add : function( widget, id, isControl, adapter ) {
if( isControl === true ) {
widget.setUserData( "isControl", true );
}
rwt.remote.ObjectRegistry.add( id, widget, adapter );
},
/**
* Unregisters the given widget at the WidgetManager. Note that the widget is
* not disposed of.
*/
remove : function( widget ) {
var id = this.findIdByWidget( widget );
rwt.remote.ObjectRegistry.remove( id );
},
/**
* Returns the widget for the given id or null if there is no widget
* registered for the given id exists.
*/
findWidgetById : function( id ) {
return rwt.remote.ObjectRegistry.getObject( id );
},
/**
* Returns the id (string) for the given widget or null if the widget is not
* registered.
*/
findIdByWidget : function( widget ) {
return rwt.remote.ObjectRegistry.getId( widget );
},
/**
* Determines whether the given widget represents a server-side instance of
* Control (or one of its subclasses)
*/
isControl : function( widget ) {
var data = null;
if( widget != null ) {
data = widget.getUserData( "isControl" );
}
return data === true;
},
/**
* Returns the nearest SWT-control in the hierarchy for the given qxWidget
* or null if no parent control could be found. If the given qxWidget
* represents a control, it is returned.
*/
findControl : function( qxWidget ) {
var parent = qxWidget;
while( parent != null && !this.isControl( parent ) ) {
parent = parent.getParent ? parent.getParent() : null;
}
return parent;
},
findEnabledControl : function( qxWidget ) {
var parent = qxWidget;
while( parent != null && !( this.isControl( parent ) && parent.getEnabled() ) ) {
parent = parent.getParent ? parent.getParent() : null;
}
return parent;
},
////////////////////
// ToolTip handling
/**
* Sets the toolTipText for the given widget. An empty or null toolTipText
* removes the tool tip of the widget.
*/
setToolTip : function( widget, toolTipText ) {
if( toolTipText != null && toolTipText !== "" ) {
widget.setUserData( "toolTipText", toolTipText );
var toolTip = rwt.widgets.base.WidgetToolTip.getInstance();
widget.setToolTip( toolTip );
// make sure "boundToWidget" is initialized:
if( toolTip.getParent() != null ) {
if( toolTip.getBoundToWidget() == widget ) {
toolTip.updateText( widget );
}
}
} else {
this._removeToolTipPopup( widget );
}
},
_removeToolTipPopup : function( widget ) {
widget.setToolTip( null );
widget.setUserData( "toolTipText", null );
}
}
} );