/******************************************************************************* * Copyright (c) 2002, 2010 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.menuitemkit; import java.io.IOException; import org.eclipse.rwt.internal.lifecycle.JSConst; import org.eclipse.rwt.lifecycle.*; import org.eclipse.swt.events.ArmEvent; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.internal.graphics.ResourceFactory; import org.eclipse.swt.internal.widgets.Props; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; final class MenuItemLCAUtil { static final String PROP_ENABLED = "enabled"; static final String PROP_SELECTION_LISTENERS = "selectionListeners"; static final String PROP_SELECTION = "selection"; static final String JS_PROP_SELECTION = "selection"; static void newItem( final MenuItem menuItem, final String jsClass, final String type ) throws IOException { JSWriter writer = JSWriter.getWriterFor( menuItem ); writer.newWidget( jsClass, new String[]{ type } ); int index = menuItem.getParent().indexOf( menuItem ); writer.call( menuItem.getParent(), "addMenuItemAt", new Object[]{ menuItem, new Integer( index ) } ); } static void preserveEnabled( final MenuItem menuItem ) { IWidgetAdapter adapter = WidgetUtil.getAdapter( menuItem ); adapter.preserve( Props.ENABLED, Boolean.valueOf( menuItem.getEnabled() ) ); } static void writeEnabled( final MenuItem menuItem ) throws IOException { Boolean newValue = Boolean.valueOf( menuItem.getEnabled() ); JSWriter writer = JSWriter.getWriterFor( menuItem ); Boolean defValue = Boolean.TRUE; writer.set( PROP_ENABLED, JSConst.QX_FIELD_ENABLED, newValue, defValue ); } static void writeImageAndText( final MenuItem menuItem ) throws IOException { String text = menuItem.getText(); if( WidgetLCAUtil.hasChanged( menuItem, Props.TEXT, text ) ) { JSWriter writer = JSWriter.getWriterFor( menuItem ); // Strip accelerator text int index = text.indexOf( "\t" ); if( index != -1 ) { text = text.substring( 0, index ); } text = WidgetLCAUtil.escapeText( text, true ); writer.set( "text", text.equals( "" ) ? null : text ); } writeImage( menuItem ); } static void writeImage( final MenuItem item ) throws IOException { Image image = item.getImage(); if( WidgetLCAUtil.hasChanged( item, Props.IMAGE, image, null ) ) { String imagePath = ResourceFactory.getImagePath( image ); JSWriter writer = JSWriter.getWriterFor( item ); Rectangle bounds = image != null ? image.getBounds() : null; Object[] args = new Object[]{ imagePath, new Integer( bounds != null ? bounds.width : 0 ), new Integer( bounds != null ? bounds.height : 0 ) }; writer.set( "image", args ); } } static void writeSelectionListener( final MenuItem menuItem ) throws IOException { boolean hasListener = SelectionEvent.hasListener( menuItem ); Boolean newValue = Boolean.valueOf( hasListener ); String prop = PROP_SELECTION_LISTENERS; if( WidgetLCAUtil.hasChanged( menuItem, prop, newValue, Boolean.FALSE ) ) { JSWriter writer = JSWriter.getWriterFor( menuItem ); writer.set( "hasSelectionListener", newValue ); } } static void writeSelection( final MenuItem menuItem ) throws IOException { JSWriter writer = JSWriter.getWriterFor( menuItem ); writer.set( PROP_SELECTION, JS_PROP_SELECTION, Boolean.valueOf( menuItem.getSelection() ), Boolean.FALSE ); } static void processArmEvent( final MenuItem menuItem ) { Menu menu = menuItem.getParent(); String eventId = JSConst.EVENT_MENU_SHOWN; if( WidgetLCAUtil.wasEventSent( menu, eventId ) ) { if( ArmEvent.hasListener( menuItem ) ) { ArmEvent event = new ArmEvent( menuItem ); event.processEvent(); } } } }