/******************************************************************************* * Copyright (c) 2002, 2009 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 ******************************************************************************/ package org.eclipse.swt.internal.widgets.tabitemkit; import java.io.IOException; import org.eclipse.rwt.internal.lifecycle.JSConst; import org.eclipse.rwt.lifecycle.*; import org.eclipse.swt.internal.widgets.ItemLCAUtil; import org.eclipse.swt.internal.widgets.WidgetAdapter; import org.eclipse.swt.widgets.*; public class TabItemLCA extends AbstractWidgetLCA { private static final String PROP_SELECTED = "selected"; private static final String JS_FUNC_TAB_SELECTED = "org.eclipse.swt.TabUtil.tabSelected"; private static final String QX_EVENT_CHANGE_CHECKED = "changeChecked"; public void preserveValues( final Widget widget ) { TabItem item = ( TabItem )widget; ItemLCAUtil.preserve( item ); IWidgetAdapter adapter = WidgetUtil.getAdapter( widget ); adapter.preserve( PROP_SELECTED, Boolean.valueOf( isSelected( item ) ) ); WidgetLCAUtil.preserveToolTipText( item, item.getToolTipText() ); WidgetLCAUtil.preserveCustomVariant( item ); } public void readData( final Widget widget ) { // TODO [rh] same hack as in CTabFolderLCA#readData // Read selected item and process selection event final TabItem item = ( TabItem )widget; if( WidgetLCAUtil.wasEventSent( item, JSConst.EVENT_WIDGET_SELECTED_ITEM ) ) { ProcessActionRunner.add( new Runnable() { public void run() { TabFolder folder = item.getParent(); folder.setSelection( item ); ControlLCAUtil.processSelection( folder, item, false ); } } ); } } public void renderInitialization( final Widget widget ) throws IOException { TabItem tabItem = ( TabItem )widget; JSWriter writer = JSWriter.getWriterFor( widget ); TabFolder parent = tabItem.getParent(); Object[] args = new Object[] { WidgetUtil.getId( tabItem ), WidgetUtil.getId( parent ), new Integer( parent.indexOf( tabItem ) ) }; writer.callStatic( "org.eclipse.swt.TabUtil.createTabItem", args ); writer.addListener( QX_EVENT_CHANGE_CHECKED, JS_FUNC_TAB_SELECTED ); } public void renderChanges( final Widget widget ) throws IOException { TabItem tabItem = ( TabItem )widget; setJSParent( tabItem ); ItemLCAUtil.writeChanges( tabItem ); writeSelection( tabItem ); WidgetLCAUtil.writeToolTip( tabItem, tabItem.getToolTipText() ); WidgetLCAUtil.writeCustomVariant( tabItem ); } public void renderDispose( final Widget widget ) throws IOException { JSWriter writer = JSWriter.getWriterFor( widget ); writer.removeListener( QX_EVENT_CHANGE_CHECKED, JS_FUNC_TAB_SELECTED ); Object[] args = new Object[]{ WidgetUtil.getId( widget ), }; writer.callStatic( "org.eclipse.swt.TabUtil.releaseTabItem", args ); writer.dispose(); } ////////////////// // helping methods private void writeSelection( final TabItem item ) throws IOException { JSWriter writer = JSWriter.getWriterFor( item ); Boolean newValue = Boolean.valueOf( isSelected( item ) ); writer.set( PROP_SELECTED, "checked", newValue, Boolean.FALSE ); } private boolean isSelected( final TabItem tabItem ) { TabFolder parent = tabItem.getParent(); int selectionIndex = parent.getSelectionIndex(); return selectionIndex != -1 && parent.getItem( selectionIndex ) == tabItem; } private static void setJSParent( final TabItem tabItem ) { Control control = tabItem.getControl(); if( control != null ) { StringBuffer replacementId = new StringBuffer(); replacementId.append( WidgetUtil.getId( tabItem ) ); replacementId.append( "pg" ); WidgetAdapter controlAdapter = ( WidgetAdapter )WidgetUtil.getAdapter( control ); controlAdapter.setJSParent( replacementId.toString() ); } } }