blob: 26ca3fd5060f2845272695536d9ea24709bdb8b3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2011 Innoopract Informationssysteme GmbH and others.
* 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
******************************************************************************/
qx.Class.define( "org.eclipse.swt.TabUtil", {
statics : {
createTabItem : function( id, parentId, index ) {
var widgetManager = org.eclipse.swt.WidgetManager.getInstance();
var tabFolder = widgetManager.findWidgetById( parentId );
var tabItem = new qx.ui.pageview.tabview.Button();
tabItem.setTabIndex( null );
tabItem.setLabel( "(empty)" );
tabItem.getLabelObject().setMode( "html" );
tabItem.setLabel( "" );
tabItem.setEnableElementFocus( false );
tabItem.addEventListener( "changeFocused", org.eclipse.swt.TabUtil._onTabItemChangeFocus );
tabItem.addEventListener( "changeChecked", org.eclipse.swt.TabUtil._onTabItemSelected );
tabItem.addEventListener( "click", org.eclipse.swt.TabUtil._onTabItemClick );
tabFolder.getBar().addAt( tabItem, index );
var tabViewPage = new qx.ui.pageview.tabview.Page( tabItem );
tabFolder.getPane().add( tabViewPage );
widgetManager.add( tabViewPage, id + "pg" );
return tabItem;
},
releaseTabItem : function( tabItem ) {
var tabFolder = tabItem.getParent().getParent();
tabItem.removeEventListener( "changeFocused", org.eclipse.swt.TabUtil._onTabItemChangeFocus );
tabItem.removeEventListener( "changeChecked", org.eclipse.swt.TabUtil._onTabItemSelected );
tabItem.removeEventListener( "click", org.eclipse.swt.TabUtil._onTabItemClick );
var widgetManager = org.eclipse.swt.WidgetManager.getInstance();
var itemId = widgetManager.findIdByWidget( tabItem );
widgetManager.dispose( itemId + "pg" );
widgetManager.dispose( itemId );
},
_onTabItemChangeFocus : function( evt ) {
// Focus the tabFolder the item belongs to when the item is focused
if( evt.getTarget().getFocused() ) {
evt.getTarget().getParent().getParent().focus();
}
},
_onTabItemClick : function( evt ) {
// Focus the tabFolder the item belongs to when the item is clicked
var folder = evt.getTarget().getParent().getParent();
if( !folder.getFocused() ) {
folder.focus();
}
},
_onTabItemSelected : function( evt ) {
var tab = evt.getTarget();
if( !org.eclipse.swt.EventUtil.getSuspended() && tab.getChecked() ) {
var widgetManager = org.eclipse.swt.WidgetManager.getInstance();
// TODO [rst] Add item parameter in doWidgetSelected
var itemId = widgetManager.findIdByWidget( tab );
var req = org.eclipse.swt.Request.getInstance();
req.addParameter( "org.eclipse.swt.events.widgetSelected.item", itemId );
var id = widgetManager.findIdByWidget( tab.getParent().getParent() );
org.eclipse.swt.EventUtil.doWidgetSelected( id, 0, 0, 0, 0 );
}
},
onTabFolderKeyPress : function( evt ) {
var folder = evt.getTarget();
if( folder.classname == "qx.ui.pageview.tabview.TabView" ) {
var manager = folder.getBar().getManager();
var item = manager.getSelected();
if( item != null ) {
switch( evt.getKeyIdentifier() ) {
case "Left":
manager.selectPrevious( item );
org.eclipse.swt.TabUtil.markTabItemFocused( folder, evt.getTarget() );
evt.stopPropagation();
break;
case "Right":
manager.selectNext( item );
org.eclipse.swt.TabUtil.markTabItemFocused( folder, evt.getTarget() );
evt.stopPropagation();
break;
}
}
}
},
onTabFolderChangeFocused : function( evt ) {
var folder = evt.getTarget();
var item = folder.getBar().getManager().getSelected();
org.eclipse.swt.TabUtil.markTabItemFocused( folder, item );
},
markTabItemFocused : function( folder, item ) {
var items = folder.getBar().getManager().getItems();
for( var i = 0; i < items.length; i++ ) {
items[i].removeState( "focused" );
}
// add state to the selected item if the tabFolder is focused
if( item != null && folder.getFocused() ) {
item.addState( "focused" );
}
}
}
});