menu: refactoring for popup menu creation 59/16559/2
authorGiWoong Kim <giwoong.kim@samsung.com>
Thu, 13 Feb 2014 04:25:11 +0000 (13:25 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Fri, 21 Feb 2014 04:02:08 +0000 (13:02 +0900)
define return value for item creation
delete unused code & etc

Change-Id: Id22405af6308e1a9a5ae95282c03f67ba561be1b
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java
tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkinMain.java
tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java
tizen/src/skin/client/src/org/tizen/emulator/skin/menu/PopupMenu.java

index 46c97c3a82616843196818b1e8747fba39416f8b..404d9477bbaf5ab4821ba075fa83b5404b7ea2fa 100755 (executable)
@@ -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 <giwoong.kim@samsung.com>
@@ -192,7 +192,7 @@ public class EmulatorSkin {
                this.pressedKeyEventList = new LinkedList<KeyEventData>();
 
                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);
index ff11a55b183ffb7f4f1ca779545e2ae57c6c1ca4..4f352b3bc3c0e2b75bab535602423fb0efde5f04 100644 (file)
@@ -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 <giwoong.kim@samsung.com>
@@ -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);
index 2a7dbfab91085074b6767ed05692519dcb91418d..f1a9113208823e0adbf0c5754ed3b01b830b0b94 100755 (executable)
@@ -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());
index 50442007543247b5ce8e34cbd3e1856e18ae84e8..517eba484ac996358911b4a3fcd4a168b1ada492 100644 (file)
@@ -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 <giwoong.kim@samsung.com>
@@ -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<ScaleItemType.FactorItem> 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<ScaleItemType.FactorItem> 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<ScaleItemType.FactorItem> 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<File> 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<File> 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() {