blob: 6bcf54ac23583159e153bd8f593caee8baab0308 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002-2006 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
******************************************************************************/
/**
* This class contains static functions needed for labels.
*/
qx.OO.defineClass( "org.eclipse.swt.LinkUtil" );
qx.Class.init = function( widget ) {
widget.setTabIndex( -1 );
widget.setUserData( "nextTabIndex", 0 );
widget.addEventListener( "changeTabIndex",
org.eclipse.swt.LinkUtil._onTabIndexChange );
}
qx.Class.destroy = function( widget ) {
org.eclipse.swt.LinkUtil.clear( widget );
if( widget.hasEventListeners( "changeTabIndex" ) ) {
widget.removeEventListener( "changeTabIndex",
org.eclipse.swt.LinkUtil._onTabIndexChange );
}
}
qx.Class.clear = function( widget ) {
if( widget && ! widget.isDisposed() ) {
var children = widget.getChildren();
var child = children[ 0 ];
while( child ) {
widget.remove( child );
if( child.hasEventListeners( "mousedown" ) ) {
child.removeEventListener( "mousedown",
org.eclipse.swt.LinkUtil._onMouseDown );
}
if( child.hasEventListeners( "keydown" ) ) {
child.removeEventListener( "keydown",
org.eclipse.swt.LinkUtil._onKeyDown );
}
child.dispose();
child = children[ 0 ];
}
}
}
qx.Class.setSelectionListener = function( widget, value ) {
widget.setUserData( "widgetSelectedListener", value );
}
qx.Class.addText = function( widget, text ) {
if( widget ) {
var newChild = org.eclipse.swt.LinkUtil._createLabel( widget, text );
newChild.setAppearance( "link-text" );
// TODO [rst] setAppearance() resets property wrap !
newChild.setWrap( false );
widget.add( newChild );
}
}
qx.Class.addLink = function( widget, text, index ) {
if( widget ) {
var newChild = org.eclipse.swt.LinkUtil._createLabel( widget, text );
newChild.setAppearance( "link-ref" );
newChild.setUserData( "index", index );
// TODO [rst] setAppearance() resets property wrap !
newChild.setWrap( false );
widget.add( newChild );
var tabIndex = widget.getUserData( "nextTabIndex" );
newChild.setTabIndex( tabIndex++ );
widget.setUserData( "nextTabIndex", tabIndex );
newChild.addEventListener( "mousedown",
org.eclipse.swt.LinkUtil._onMouseDown,
newChild );
newChild.addEventListener( "keydown",
org.eclipse.swt.LinkUtil._onKeyDown,
newChild );
}
}
qx.Class._createLabel = function( parent, text ) {
// replace spaces with nbsp
var replaced = text.replace( /\s/, "\xA0" );
var label = new qx.ui.basic.Label( replaced );
label.setWrap( false );
return label;
}
qx.Class._onMouseDown = function( evt ) {
var parent = this.getParent();
if( parent.getUserData( "widgetSelectedListener" ) ) {
var req = org.eclipse.swt.Request.getInstance();
var wm = org.eclipse.swt.WidgetManager.getInstance();
var id = wm.findIdByWidget( parent );
var index = this.getUserData( "index" );
req.addEvent( "org.eclipse.swt.events.widgetSelected", id );
req.addEvent( "org.eclipse.swt.events.widgetSelected.index", index );
req.send();
}
}
qx.Class._onKeyDown = function( evt ) {
var keyId = evt.getKeyIdentifier();
if( keyId == "Enter" ) {
var parent = this.getParent();
if( parent.getUserData( "widgetSelectedListener" ) ) {
var req = org.eclipse.swt.Request.getInstance();
var wm = org.eclipse.swt.WidgetManager.getInstance();
var id = wm.findIdByWidget( parent );
var index = this.getUserData( "index" );
req.addEvent( "org.eclipse.swt.events.widgetSelected", id );
req.addEvent( "org.eclipse.swt.events.widgetSelected.index", index );
req.send();
}
}
}
qx.Class._onTabIndexChange = function( evt ) {
var tabIndex = evt.getData();
if( tabIndex >= 0 ) {
var target = evt.getCurrentTarget();
var children = target.getChildren();
for( var i = 0; i < children.length; i++ ) {
child = children[ i ];
child.setTabIndex( tabIndex++ );
}
target.setUserData( "nextTabIndex", tabIndex );
target.setTabIndex( -1 );
}
}