From: GiWoong Kim Date: Thu, 13 Feb 2014 04:25:11 +0000 (+0900) Subject: menu: refactoring for popup menu creation X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.1~492 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=df0455727fa8ca5ae22bbb2f188d2a70b5eeda20;p=sdk%2Femulator%2Fqemu.git menu: refactoring for popup menu creation define return value for item creation delete unused code & etc Change-Id: Id22405af6308e1a9a5ae95282c03f67ba561be1b Signed-off-by: GiWoong Kim --- diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java index 46c97c3a82..404d9477bb 100755 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java @@ -1,7 +1,7 @@ /** * Emulator Skin Process * - * Copyright (C) 2011 - 2013 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (C) 2011 - 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: * GiWoong Kim @@ -192,7 +192,7 @@ public class EmulatorSkin { this.pressedKeyEventList = new LinkedList(); this.isOnTop = isOnTop; - this.isOnInterpolation = false; + this.isOnInterpolation = true; this.isOnKbd = false; this.isKeyWindow = false; @@ -1280,8 +1280,15 @@ public class EmulatorSkin { getShell().getDisplay().asyncExec(new Runnable() { @Override public void run() { - getPopupMenu().hostKbdOnItem.setSelection(isOnKbd); - getPopupMenu().hostKbdOffItem.setSelection(!isOnKbd); + MenuItem item = getPopupMenu().hostKbdOnItem; + if (item != null) { + item.setSelection(isOnKbd); + } + + item = getPopupMenu().hostKbdOffItem; + if (item != null) { + item.setSelection(!isOnKbd); + } } }); } @@ -1336,10 +1343,10 @@ public class EmulatorSkin { public void widgetSelected(SelectionEvent e) { isOnTop = popupMenu.onTopItem.getSelection(); - logger.info("Select Always On Top : " + isOnTop); + logger.info("Select top most : " + isOnTop); if (SkinUtil.setTopMost(shell, isOnTop) == false) { - logger.info("failed to Always On Top"); + logger.info("failed to top most"); popupMenu.onTopItem.setSelection(isOnTop = false); } else { @@ -1515,7 +1522,8 @@ public class EmulatorSkin { if (item.getSelection()) { boolean on = item.equals(popupMenu.interpolationHighItem); isOnInterpolation = on; - logger.info("Scale interpolation : " + isOnInterpolation); + + logger.info("Select scale interpolation : " + isOnInterpolation); communicator.sendToQEMU(SendCommand.SEND_INTERPOLATION_STATE, new BooleanData(on, SendCommand.SEND_INTERPOLATION_STATE.toString()), @@ -1645,7 +1653,8 @@ public class EmulatorSkin { if (item.getSelection()) { boolean on = item.equals(popupMenu.hostKbdOnItem); isOnKbd = on; - logger.info("Host Keyboard : " + isOnKbd); + + logger.info("Select host keyboard : " + isOnKbd); communicator.sendToQEMU(SendCommand.SEND_HOST_KBD_STATE, new BooleanData(on, SendCommand.SEND_HOST_KBD_STATE.toString()), false); diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkinMain.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkinMain.java index ff11a55b18..4f352b3bc3 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkinMain.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkinMain.java @@ -1,7 +1,7 @@ /** * Emulator Skin Main * - * Copyright (C) 2011 - 2013 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (C) 2011 - 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: * GiWoong Kim @@ -245,9 +245,9 @@ public class EmulatorSkinMain { ImageRegistry.getInstance().initialize(config, skinPath); /* load Always on Top value */ - String onTopVal = config.getSkinProperty( - SkinPropertiesConstants.WINDOW_ONTOP, Boolean.FALSE.toString()); - boolean isOnTop = Boolean.parseBoolean(onTopVal); + boolean isOnTop = Boolean.parseBoolean(config.getSkinProperty( + SkinPropertiesConstants.WINDOW_ONTOP, + Boolean.FALSE.toString())); /* create a skin */ EmulatorSkin skin = null; @@ -261,6 +261,11 @@ public class EmulatorSkinMain { skin = new EmulatorSdlSkin(config, skinInfo, isOnTop); } + /* load Interpolation value */ + skin.isOnInterpolation = Boolean.parseBoolean(config.getSkinProperty( + SkinPropertiesConstants.WINDOW_INTERPOLATION, + Boolean.TRUE.toString())); + /* create a qemu communicator */ int uid = config.getArgInt(ArgsConstants.UID); communicator = new SocketCommunicator(config, uid, skin); diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java index 2a7dbfab91..f1a9113208 100755 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java @@ -45,7 +45,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.MenuItem; import org.tizen.emulator.skin.EmulatorSkin; import org.tizen.emulator.skin.comm.ICommunicator; import org.tizen.emulator.skin.comm.ICommunicator.SendCommand; @@ -54,7 +53,6 @@ import org.tizen.emulator.skin.comm.sock.data.ISendData; import org.tizen.emulator.skin.comm.sock.data.StartData; import org.tizen.emulator.skin.config.EmulatorConfig; import org.tizen.emulator.skin.config.EmulatorConfig.ArgsConstants; -import org.tizen.emulator.skin.config.EmulatorConfig.SkinPropertiesConstants; import org.tizen.emulator.skin.image.ImageRegistry.ResourceImageName; import org.tizen.emulator.skin.log.SkinLogger; import org.tizen.emulator.skin.util.IOUtil; @@ -178,24 +176,10 @@ public class SocketCommunicator implements ICommunicator { logger.info("send startData"); sendToQEMU(SendCommand.SEND_SKIN_OPENED, startData, false); - /* default interpolation */ skin.getShell().getDisplay().asyncExec(new Runnable() { @Override public void run() { - skin.isOnInterpolation = Boolean.parseBoolean(config.getSkinProperty( - SkinPropertiesConstants.WINDOW_INTERPOLATION, - Boolean.TRUE.toString())); - - MenuItem item = skin.getPopupMenu().interpolationHighItem; - if (item != null) { - item.setSelection(skin.isOnInterpolation); - } - - item = skin.getPopupMenu().interpolationLowItem; - if (item != null) { - item.setSelection(!skin.isOnInterpolation); - } - + /* send a state for display interpolation */ BooleanData dataInterpolation = new BooleanData( skin.isOnInterpolation, SendCommand.SEND_INTERPOLATION_STATE.toString()); diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/PopupMenu.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/PopupMenu.java index 5044200754..517eba484a 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/PopupMenu.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/PopupMenu.java @@ -1,7 +1,7 @@ /** * Right Click Popup Menu * - * Copyright (C) 2013 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (C) 2013 - 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: * GiWoong Kim @@ -37,6 +37,7 @@ import java.util.logging.Logger; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; @@ -125,40 +126,48 @@ public class PopupMenu { PopupMenuType itemProperties = config.getDbiContents().getPopupMenu(); /* Emulator detail info menu */ - createDetailInfoItem(menu); + detailInfoItem = createDetailInfoItem(menu); - new MenuItem(menu, SWT.SEPARATOR); + if (detailInfoItem != null) { + new MenuItem(menu, SWT.SEPARATOR); + } /* Always on top menu */ if (SwtUtil.isMacPlatform() == false) { /* not supported on mac */ - if (itemProperties == null || itemProperties.getTopmostItem() == null) { - createOnTopItem(menu, TOPMOST_MENUITEM_NAME); + if (itemProperties == null || + itemProperties.getTopmostItem() == null) { + onTopItem = createOnTopItem(menu, TOPMOST_MENUITEM_NAME); } else { MenuItemType topmostMenuType = itemProperties.getTopmostItem(); if (topmostMenuType.isVisible() == true) { - createOnTopItem(menu, (topmostMenuType.getItemName().isEmpty()) ? + onTopItem = createOnTopItem(menu, + (topmostMenuType.getItemName().isEmpty()) ? TOPMOST_MENUITEM_NAME : topmostMenuType.getItemName()); } } } /* Rotate menu */ - if (itemProperties == null || itemProperties.getRotateItem() == null) { - createRotateItem(menu, ROTATE_MENUITEM_NAME); + if (itemProperties == null || + itemProperties.getRotateItem() == null) { + rotateItem = createRotateItem(menu, ROTATE_MENUITEM_NAME); } else { MenuItemType rotationMenuType = itemProperties.getRotateItem(); if (rotationMenuType.isVisible() == true) { - createRotateItem(menu, (rotationMenuType.getItemName().isEmpty()) ? + rotateItem = createRotateItem(menu, + (rotationMenuType.getItemName().isEmpty()) ? ROTATE_MENUITEM_NAME : rotationMenuType.getItemName()); } else { + /* do not rotate */ skin.getEmulatorSkinState().setCurrentRotationId( RotationInfo.PORTRAIT.id()); } } /* Scale menu */ - if (itemProperties == null || itemProperties.getScaleItem() == null) { - createScaleItem(menu, SCALE_MENUITEM_NAME, null); + if (itemProperties == null || + itemProperties.getScaleItem() == null) { + scaleItem = createScaleItem(menu, SCALE_MENUITEM_NAME, null); } else { ScaleItemType scaleMenuType = itemProperties.getScaleItem(); if (scaleMenuType.isVisible() == true) { @@ -167,15 +176,16 @@ public class PopupMenu { List factors = scaleMenuType.getFactorItem(); if (factors == null || factors.size() == 0) { - logger.info("create a default Scale menu"); + logger.info("create a predefined Scale menu"); - createScaleItem(menu, menuName, null); + scaleItem = createScaleItem(menu, menuName, null); } else { logger.info("create a custom Scale menu"); - createScaleItem(menu, menuName, factors); + scaleItem = createScaleItem(menu, menuName, factors); } } else { + /* do not scaling */ skin.getEmulatorSkinState().setCurrentScale(100); } } @@ -185,12 +195,14 @@ public class PopupMenu { } /* Key Window menu */ - if (itemProperties == null || itemProperties.getKeywindowItem() == null) { - createKeyWindowItem(menu, KEYWINDOW_MENUITEM_NAME); + if (itemProperties == null || + itemProperties.getKeywindowItem() == null) { + keyWindowItem = createKeyWindowItem(menu, KEYWINDOW_MENUITEM_NAME); } else { MenuItemType keywindowMenuType = itemProperties.getKeywindowItem(); if (keywindowMenuType.isVisible() == true) { - createKeyWindowItem(menu, (keywindowMenuType.getItemName().isEmpty()) ? + keyWindowItem = createKeyWindowItem(menu, + (keywindowMenuType.getItemName().isEmpty()) ? KEYWINDOW_MENUITEM_NAME : keywindowMenuType.getItemName()); } } @@ -203,15 +215,17 @@ public class PopupMenu { Menu advancedSubMenu = new Menu(menu.getShell(), SWT.DROP_DOWN); { /* Screen shot menu */ - createScreenShotItem(advancedSubMenu, SCREENSHOT_MENUITEM_NAME); + screenshotItem = createScreenShotItem( + advancedSubMenu, SCREENSHOT_MENUITEM_NAME); /* VirtIO Keyboard menu */ - if (itemProperties == null || itemProperties.getHostKeyboardItem() == null) { - createHostKbdItem(advancedSubMenu, HOSTKBD_MENUITEM_NAME); + if (itemProperties == null || + itemProperties.getHostKeyboardItem() == null) { + hostKbdItem = createHostKbdItem(advancedSubMenu, HOSTKBD_MENUITEM_NAME); } else { MenuItemType hostKbdMenuType = itemProperties.getHostKeyboardItem(); if (hostKbdMenuType.isVisible() == true) { - createHostKbdItem(advancedSubMenu, + hostKbdItem = createHostKbdItem(advancedSubMenu, (hostKbdMenuType.getItemName().isEmpty()) ? HOSTKBD_MENUITEM_NAME : hostKbdMenuType.getItemName()); } @@ -226,43 +240,56 @@ public class PopupMenu { Menu diagnosisSubMenu = new Menu(advancedSubMenu.getShell(), SWT.DROP_DOWN); { /* Ram Dump menu */ - createRamDumpItem(diagnosisSubMenu, RAMDUMP_MENUITEM_NAME); + ramdumpItem = createRamDumpItem( + diagnosisSubMenu, RAMDUMP_MENUITEM_NAME); } diagnosisItem.setMenu(diagnosisSubMenu); } - new MenuItem(advancedSubMenu, SWT.SEPARATOR); + if (screenshotItem != null || hostKbdItem != null || diagnosisItem != null) { + new MenuItem(advancedSubMenu, SWT.SEPARATOR); + } /* About menu */ - createAboutItem(advancedSubMenu, ABOUT_MENUITEM_NAME); + aboutItem = createAboutItem( + advancedSubMenu, ABOUT_MENUITEM_NAME); - new MenuItem(advancedSubMenu, SWT.SEPARATOR); + if (aboutItem != null) { + new MenuItem(advancedSubMenu, SWT.SEPARATOR); + } /* Force close menu */ - createForceCloseItem(advancedSubMenu, FORCECLOSE_MENUITEM_NAME); + forceCloseItem = createForceCloseItem( + advancedSubMenu, FORCECLOSE_MENUITEM_NAME); } advancedItem.setMenu(advancedSubMenu); /* Shell menu */ - if (itemProperties == null || itemProperties.getShellItem() == null) { - createShellItem(menu, SDBSHELL_MENUITEM_NAME); + if (itemProperties == null || + itemProperties.getShellItem() == null) { + shellItem = createShellItem(menu, SDBSHELL_MENUITEM_NAME); } else { MenuItemType shellMenuType = itemProperties.getShellItem(); if (shellMenuType.isVisible() == true) { - createShellItem(menu, (shellMenuType.getItemName().isEmpty()) ? + shellItem = createShellItem(menu, + (shellMenuType.getItemName().isEmpty()) ? SDBSHELL_MENUITEM_NAME : shellMenuType.getItemName()); } } - new MenuItem(menu, SWT.SEPARATOR); + if (keyWindowItem != null || advancedItem != null || shellItem != null) { + new MenuItem(menu, SWT.SEPARATOR); + } /* Emulator Control Panel menu */ - if (itemProperties == null || itemProperties.getControlPanelItem() == null) { - createEcpItem(menu, ECP_MENUITEM_NAME); + if (itemProperties == null || + itemProperties.getControlPanelItem() == null) { + ecpItem = createEcpItem(menu, ECP_MENUITEM_NAME); } else { MenuItemType ecpMenuType = itemProperties.getControlPanelItem(); if (ecpMenuType.isVisible() == true) { - createEcpItem(menu, (ecpMenuType.getItemName().isEmpty()) ? + ecpItem = createEcpItem(menu, + (ecpMenuType.getItemName().isEmpty()) ? ECP_MENUITEM_NAME : ecpMenuType.getItemName()); } } @@ -272,44 +299,80 @@ public class PopupMenu { } /* Close menu */ - createCloseItem(menu, CLOSE_MENUITEM_NAME); + closeItem = createCloseItem(menu, CLOSE_MENUITEM_NAME); } - private void createDetailInfoItem(Menu menu) { - detailInfoItem = new MenuItem(menu, SWT.PUSH); - detailInfoItem.setText(SkinUtil.makeEmulatorName(config)); - detailInfoItem.setImage(imageRegistry.getIcon(IconName.DETAIL_INFO)); + private MenuItem createMenuItem(Menu menu, int style, + String name, Image image, SelectionAdapter listener, boolean selected) { + MenuItem item = new MenuItem(menu, style); + + if (name != null) { + item.setText(name); + } + + if (image != null) { + item.setImage(image); + } - SelectionAdapter detailInfoListener = skin.createDetailInfoMenuListener(); - detailInfoItem.addSelectionListener(detailInfoListener); + if (listener != null) { + item.addSelectionListener(listener); + } + + item.setSelection(selected); + + return item; } - private void createOnTopItem(Menu menu, String name) { - onTopItem = new MenuItem(menu, SWT.CHECK); - onTopItem.setText(name); - onTopItem.setSelection(skin.isOnTop); + private MenuItem createDetailInfoItem(Menu menu) { + return createMenuItem(menu, SWT.PUSH, + SkinUtil.makeEmulatorName(config), + imageRegistry.getIcon(IconName.DETAIL_INFO), + skin.createDetailInfoMenuListener(), + false); + } - SelectionAdapter topMostListener = skin.createTopMostMenuListener(); - onTopItem.addSelectionListener(topMostListener); + private MenuItem createOnTopItem(Menu menu, String name) { + return createMenuItem(menu, SWT.CHECK, + name, + null, + skin.createTopMostMenuListener(), + skin.isOnTop); } - private void createRotateItem(Menu menu, String name) { - rotateItem = new MenuItem(menu, SWT.CASCADE); - rotateItem.setText(name); - rotateItem.setImage(imageRegistry.getIcon(IconName.ROTATE)); + private MenuItem createRotateItem(Menu menu, String name) { + MenuItem item = createMenuItem(menu, SWT.CASCADE, + name, + imageRegistry.getIcon(IconName.ROTATE), + null, + false); - Menu rotateSubMenu = skin.createRotateMenu(); - rotateItem.setMenu(rotateSubMenu); + item.setMenu(skin.createRotateMenu()); + + return item; } - private void createScaleItem(Menu menu, String name, + private MenuItem createScaleItem(Menu menu, String name, List factors) { - scaleItem = new MenuItem(menu, SWT.CASCADE); - scaleItem.setText(name); - scaleItem.setImage(imageRegistry.getIcon(IconName.SCALE)); + MenuItem item = createMenuItem(menu, SWT.CASCADE, + name, + imageRegistry.getIcon(IconName.SCALE), + null, + false); + + item.setMenu(createScaleSubItem(menu, factors)); + + return item; + } + + private Menu createScaleSubItem(Menu menu, + List factors) { + SelectionAdapter scaleListener = + skin.createScaleMenuListener(); + + Menu subMenu = new Menu(menu.getShell(), SWT.DROP_DOWN); if (factors == null) { - /* use default factor array */ + /* use predefined factor array */ ScaleItemType.FactorItem actual = new ScaleItemType.FactorItem(); actual.setItemName("1x"); actual.setValue(100); @@ -329,193 +392,202 @@ public class PopupMenu { factors = Arrays.asList(actual, threeQuater, half, quater); } - SelectionAdapter scaleListener = skin.createScaleMenuListener(); - - Menu scaleSubMenu = new Menu(menu.getShell(), SWT.DROP_DOWN); - { - MenuItem matchedItem = null; + MenuItem matchedItem = null; + for (ScaleItemType.FactorItem factor : factors) { + String factorName = factor.getItemName(); + if (factorName == null || factorName.isEmpty()) { + factorName = factor.getValue() + "%"; + } - for (ScaleItemType.FactorItem factor : factors) { - final MenuItem menuItem = new MenuItem(scaleSubMenu, SWT.RADIO); - menuItem.setText(factor.getItemName()); - menuItem.setData(factor.getValue()); + final MenuItem factorItem = createMenuItem(subMenu, SWT.RADIO, + factorName, + null, + scaleListener, + false); - if (skin.getEmulatorSkinState().getCurrentScale() - == (Integer) menuItem.getData()) { - matchedItem = menuItem; - } + factorItem.setData(factor.getValue()); - menuItem.addSelectionListener(scaleListener); + if (skin.getEmulatorSkinState().getCurrentScale() + == (Integer) factorItem.getData()) { + matchedItem = factorItem; } + } + if (matchedItem == null) { + matchedItem = subMenu.getItem(0); if (matchedItem == null) { - matchedItem = scaleSubMenu.getItem(0); - if (matchedItem == null) { - return; - } - skin.getEmulatorSkinState().setCurrentScale( - (Integer) matchedItem.getData()); + return null; } - matchedItem.setSelection(true); - - /* interpolation menu */ - createInterpolationItem(scaleSubMenu, INTERPOLATION_MENUITEM_NAME); + skin.getEmulatorSkinState().setCurrentScale( + (Integer) matchedItem.getData()); } - scaleItem.setMenu(scaleSubMenu); - } + matchedItem.setSelection(true); - private void createInterpolationItem(Menu menu, String name) { - interpolationItem = new MenuItem(menu, SWT.CASCADE); - interpolationItem.setText(name); + /* interpolation menu */ + interpolationItem = createInterpolationItem( + subMenu, INTERPOLATION_MENUITEM_NAME); - Menu interpolationSubMenu = new Menu(menu.getShell(), SWT.DROP_DOWN); - { - createInterpolationHighLowItem(interpolationSubMenu); - } - interpolationItem.setMenu(interpolationSubMenu); + return subMenu; } - private void createInterpolationHighLowItem(Menu menu) { - interpolationHighItem = new MenuItem(menu, SWT.RADIO); - interpolationHighItem.setText("High"); - interpolationHighItem.setSelection(skin.isOnInterpolation); + private MenuItem createInterpolationItem(Menu menu, String name) { + MenuItem item = createMenuItem(menu, SWT.CASCADE, + name, null, null, false); - interpolationLowItem = new MenuItem(menu, SWT.RADIO); - interpolationLowItem.setText("Low"); - interpolationLowItem.setSelection(!skin.isOnInterpolation); + item.setMenu(createInterpolationSubItem(menu)); - SelectionAdapter interpolationListener = skin.createInterpolationMenuListener(); - interpolationHighItem.addSelectionListener(interpolationListener); - interpolationLowItem.addSelectionListener(interpolationListener); + return item; } - private void createKeyWindowItem(Menu menu, String name) { - /* load Key Window layout */ - SelectionAdapter keyWindowListener = skin.createKeyWindowMenuListener(); + private Menu createInterpolationSubItem(Menu menu) { + SelectionAdapter interpolationListener = + skin.createInterpolationMenuListener(); + + Menu subMenu = new Menu(menu.getShell(), SWT.DROP_DOWN); + + interpolationHighItem = createMenuItem(subMenu, SWT.RADIO, + "High", null, + interpolationListener, + skin.isOnInterpolation); + interpolationLowItem = createMenuItem(subMenu, SWT.RADIO, + "Low", null, + interpolationListener, + !skin.isOnInterpolation); + + return subMenu; + } + + private MenuItem createKeyWindowItem(Menu menu, String name) { + /* load Key Window layouts */ String pathLayoutRoot = skin.skinInfo.getSkinPath() + File.separator + SpecialKeyWindow.KEYWINDOW_LAYOUT_ROOT; ArrayList layouts = getKeyWindowLayoutList(pathLayoutRoot); + MenuItem item = null; if (layouts != null && layouts.size() != 0) { - keyWindowItem = new MenuItem(menu, SWT.CASCADE); - keyWindowItem.setText(name); + item = createMenuItem(menu, SWT.CASCADE, + name, null, null, false); + + item.setMenu(createKeyWindowSubItem(menu, layouts)); + } else { /* no need to create sub menu for general key window */ + item = createMenuItem(menu, SWT.CHECK, + name, + null, + skin.createKeyWindowMenuListener(), + skin.isKeyWindow); + } - Menu keywindowSubMenu = new Menu(menu.getShell(), SWT.DROP_DOWN); - { - MenuItem keywindowLayoutItem = null; + return item; + } - for (int i = 0; i < layouts.size(); i++) { - File dir = layouts.get(i); + private Menu createKeyWindowSubItem(Menu menu, + ArrayList layouts) { + SelectionAdapter keyWindowListener = + skin.createKeyWindowMenuListener(); - keywindowLayoutItem = new MenuItem(keywindowSubMenu, SWT.CHECK); - keywindowLayoutItem.setText(dir.getName()); - if (i == 0) { - keywindowLayoutItem.setSelection(true); - } + Menu subMenu = new Menu(menu.getShell(), SWT.DROP_DOWN); - keywindowLayoutItem.addSelectionListener(keyWindowListener); - } - } - - keyWindowItem.setMenu(keywindowSubMenu); - } else { /* general key window */ - keyWindowItem = new MenuItem(menu, SWT.CHECK); - keyWindowItem.setText(name); - keyWindowItem.setSelection(skin.isKeyWindow); + for (int i = 0; i < layouts.size(); i++) { + File dir = layouts.get(i); - keyWindowItem.addSelectionListener(keyWindowListener); + createMenuItem(subMenu, SWT.CHECK, + dir.getName(), + null, + keyWindowListener, + (i == 0) ? true : false); } - } - - private void createScreenShotItem(Menu menu, String name) { - screenshotItem = new MenuItem(menu, SWT.PUSH); - screenshotItem.setText(name); - screenshotItem.setImage(imageRegistry.getIcon(IconName.SCREENSHOT)); - SelectionAdapter screenshotListener = skin.createScreenshotMenuListener(); - screenshotItem.addSelectionListener(screenshotListener); + return subMenu; } - private void createHostKbdItem(Menu menu, String name) { - hostKbdItem = new MenuItem(menu, SWT.CASCADE); - hostKbdItem.setText(name); - hostKbdItem.setImage(imageRegistry.getIcon(IconName.HOST_KBD)); - - Menu hostKbdSubMenu = new Menu(menu.getShell(), SWT.DROP_DOWN); - { - createKbdOnOffItem(hostKbdSubMenu); - } - hostKbdItem.setMenu(hostKbdSubMenu); + private MenuItem createScreenShotItem(Menu menu, String name) { + return createMenuItem(menu, SWT.PUSH, + name, + imageRegistry.getIcon(IconName.SCREENSHOT), + skin.createScreenshotMenuListener(), + false); } - private void createKbdOnOffItem(Menu menu) { - hostKbdOnItem = new MenuItem(menu, SWT.RADIO); - hostKbdOnItem.setText("On"); - hostKbdOnItem.setSelection(skin.isOnKbd); + private MenuItem createHostKbdItem(Menu menu, String name) { + MenuItem item = createMenuItem(menu, SWT.CASCADE, + name, + imageRegistry.getIcon(IconName.HOST_KBD), + null, + false); - hostKbdOffItem = new MenuItem(menu, SWT.RADIO); - hostKbdOffItem.setText("Off"); - hostKbdOffItem.setSelection(!skin.isOnKbd); + item.setMenu(createKbdSubItem(menu)); - SelectionAdapter hostKbdListener = skin.createHostKbdMenuListener(); - hostKbdOnItem.addSelectionListener(hostKbdListener); - hostKbdOffItem.addSelectionListener(hostKbdListener); + return item; } - private void createRamDumpItem(Menu menu, String name) { - ramdumpItem = new MenuItem(menu, SWT.PUSH); - ramdumpItem.setText(name); + private Menu createKbdSubItem(Menu menu) { + SelectionAdapter hostKbdListener = + skin.createHostKbdMenuListener(); - SelectionAdapter ramdumpListener = skin.createRamdumpMenuListener(); - ramdumpItem.addSelectionListener(ramdumpListener); - } - - private void createAboutItem(Menu menu, String name) { - aboutItem = new MenuItem(menu, SWT.PUSH); - aboutItem.setText(name); - aboutItem.setImage(imageRegistry.getIcon(IconName.ABOUT)); + Menu subMenu = new Menu(menu.getShell(), SWT.DROP_DOWN); - SelectionAdapter aboutListener = skin.createAboutMenuListener(); - aboutItem.addSelectionListener(aboutListener); - } + hostKbdOnItem = createMenuItem(subMenu, SWT.RADIO, + "On", null, + hostKbdListener, + skin.isOnKbd); - private void createForceCloseItem(Menu menu, String name) { - forceCloseItem = new MenuItem(menu, SWT.PUSH); - forceCloseItem.setText(name); - forceCloseItem.setImage(imageRegistry.getIcon(IconName.FORCE_CLOSE)); + hostKbdOffItem = createMenuItem(subMenu, SWT.RADIO, + "Off", null, + hostKbdListener, + !skin.isOnKbd); - SelectionAdapter forceCloseListener = skin.createForceCloseMenuListener(); - forceCloseItem.addSelectionListener(forceCloseListener); + return subMenu; } - private void createShellItem(Menu menu, String name) { - shellItem = new MenuItem(menu, SWT.PUSH); - shellItem.setText(name); - shellItem.setImage(imageRegistry.getIcon(IconName.SHELL)); + private MenuItem createRamDumpItem(Menu menu, String name) { + return createMenuItem(menu, SWT.PUSH, + name, + null, + skin.createRamdumpMenuListener(), + false); + } - SelectionAdapter shellListener = skin.createShellMenuListener(); - shellItem.addSelectionListener(shellListener); + private MenuItem createAboutItem(Menu menu, String name) { + return createMenuItem(menu, SWT.PUSH, + name, + imageRegistry.getIcon(IconName.ABOUT), + skin.createAboutMenuListener(), + false); } - private void createEcpItem(Menu menu, String name) { - ecpItem = new MenuItem(menu, SWT.PUSH); - ecpItem.setText(name); - ecpItem.setImage(imageRegistry.getIcon(IconName.ECP)); + private MenuItem createForceCloseItem(Menu menu, String name) { + return createMenuItem(menu, SWT.PUSH, + name, + imageRegistry.getIcon(IconName.FORCE_CLOSE), + skin.createForceCloseMenuListener(), + false); + } - SelectionAdapter ecpListener = skin.createEcpMenuListener(); - ecpItem.addSelectionListener(ecpListener); + private MenuItem createShellItem(Menu menu, String name) { + return createMenuItem(menu, SWT.PUSH, + name, + imageRegistry.getIcon(IconName.SHELL), + skin.createShellMenuListener(), + false); } - private void createCloseItem(Menu menu, String name) { - closeItem = new MenuItem(menu, SWT.PUSH); - closeItem.setText(name); - closeItem.setImage(imageRegistry.getIcon(IconName.CLOSE)); + private MenuItem createEcpItem(Menu menu, String name) { + return createMenuItem(menu, SWT.PUSH, + name, + imageRegistry.getIcon(IconName.ECP), + skin.createEcpMenuListener(), + false); + } - SelectionAdapter closeListener = skin.createCloseMenuListener(); - closeItem.addSelectionListener(closeListener); + private MenuItem createCloseItem(Menu menu, String name) { + return createMenuItem(menu, SWT.PUSH, + name, + imageRegistry.getIcon(IconName.CLOSE), + skin.createCloseMenuListener(), + false); } public Menu getMenuRoot() {