浏览代码

Add ability to remove menu items. Use it in server list ui.

Change-Id: I55bb7e3d1b5ca6d59d260c063c0b40b663bcc9ce
Reviewed-on: http://gerrit.dmdirc.com/3908
Reviewed-by: Chris Smith <chris@dmdirc.com>
Automatic-Compile: DMDirc Build Manager
changes/08/3908/3
Greg Holmes 9 年前
父节点
当前提交
29777f57de

+ 1
- 4
serverlistdialog/plugin.config 查看文件

@@ -23,7 +23,4 @@ version:
23 23
   friendly=0.2
24 24
 
25 25
 requires:
26
-  parent=ui_swing
27
-
28
-persistent:
29
-  *
26
+  parent=ui_swing

+ 1
- 1
serverlistdialog/src/com/dmdirc/addons/serverlistdialog/ServerListController.java 查看文件

@@ -61,7 +61,7 @@ public class ServerListController {
61 61
      * Removes the 'Server lists' menu item from the app's main menu.
62 62
      */
63 63
     public void removeMenu() {
64
-        // TODO: Add ability to remove items to MenuBar, remove the server list item when unloaded.
64
+        menuBar.removeMenuItem("Server", "Server lists");
65 65
     }
66 66
 
67 67
     /**

+ 5
- 2
serverlistdialog/src/com/dmdirc/addons/serverlistdialog/ServerListDialogPlugin.java 查看文件

@@ -40,7 +40,11 @@ public class ServerListDialogPlugin extends BasePlugin {
40 40
         super.onUnload();
41 41
 
42 42
         controller.removeMenu();
43
-        controller = null;
43
+    }
44
+
45
+    @Override
46
+    public void onLoad() {
47
+        controller.addMenu();
44 48
     }
45 49
 
46 50
     @Override
@@ -49,7 +53,6 @@ public class ServerListDialogPlugin extends BasePlugin {
49 53
         setObjectGraph(graph.plus(new ServerListModule()));
50 54
 
51 55
         controller = getObjectGraph().get(ServerListController.class);
52
-        controller.addMenu();
53 56
     }
54 57
 
55 58
 }

+ 46
- 7
ui_swing/src/com/dmdirc/addons/ui_swing/components/menubar/MenuBar.java 查看文件

@@ -25,7 +25,11 @@ package com.dmdirc.addons.ui_swing.components.menubar;
25 25
 import com.dmdirc.addons.ui_swing.components.MDIBar;
26 26
 import com.dmdirc.addons.ui_swing.framemanager.windowmenu.WindowMenuFrameManager;
27 27
 
28
+import com.google.common.base.Optional;
29
+
28 30
 import java.awt.Component;
31
+import java.util.HashMap;
32
+import java.util.Map;
29 33
 
30 34
 import javax.inject.Inject;
31 35
 import javax.inject.Singleton;
@@ -47,6 +51,8 @@ public class MenuBar extends JMenuBar {
47 51
     private static final long serialVersionUID = 1;
48 52
     /** Normal menu count. */
49 53
     private final int menuItemCount;
54
+    /** Stores a list of tokens used to remove added menu items. */
55
+    private final Map<String, JMenuItem> menuItems;
50 56
 
51 57
     /**
52 58
      * Instantiates a new menu bar.
@@ -66,7 +72,7 @@ public class MenuBar extends JMenuBar {
66 72
             final WindowMenuFrameManager windowMenu,
67 73
             final HelpMenu helpMenu,
68 74
             final MDIBar mdiBar) {
69
-
75
+        menuItems = new HashMap<>();
70 76
         setLayout(new MigLayout("ins 0, fillx"));
71 77
 
72 78
         add(serverMenu);
@@ -98,20 +104,53 @@ public class MenuBar extends JMenuBar {
98 104
      * @param menuItem   Menu item to add
99 105
      */
100 106
     public void addMenuItem(final String parentMenu, final JMenuItem menuItem) {
107
+        Optional<JMenu> menu = getParentMenuItem(parentMenu);
108
+        if (!menu.isPresent()) {
109
+            menu = Optional.fromNullable(new JMenu(parentMenu));
110
+            add(menu.get());
111
+        }
112
+        menu.get().add(menuItem, 0);
113
+    }
114
+
115
+    public void removeMenuItem(final String parentMenu, final String childItem) {
116
+        Optional<JMenu> menu = getParentMenuItem(parentMenu);
117
+        if (menu.isPresent()) {
118
+            Optional<JMenuItem> menuItem = getChildItem(menu.get(), childItem);
119
+            if (menuItem.isPresent()) {
120
+                menu.get().remove(menuItem.get());
121
+            }
122
+        }
123
+    }
124
+
125
+    private Optional<JMenu> getParentMenuItem(final String name) {
101 126
         JMenu menu = null;
102 127
         for (int i = 0; i < getMenuCount(); i++) {
103 128
             menu = getMenu(i);
104
-            if (menu != null && menu.getText().equals(parentMenu)) {
129
+            if (menu != null && menu.getText().equals(name)) {
105 130
                 break;
106 131
             }
107 132
             menu = null;
108 133
         }
109
-        if (menu == null) {
110
-            menu = new JMenu(parentMenu);
111
-            add(menu);
112
-        }
134
+        return Optional.fromNullable(menu);
135
+    }
113 136
 
114
-        menu.add(menuItem, 0);
137
+    private Optional<JMenuItem> getChildItem(final JMenu menu, final String name) {
138
+        Component child = null;
139
+        for (int i = 0; i < menu.getMenuComponentCount(); i++) {
140
+            child = menu.getMenuComponent(i);
141
+            if (child instanceof JMenuItem) {
142
+                final JMenuItem childMenu = (JMenuItem) child;
143
+                if (childMenu != null && childMenu.getText().equals(name)) {
144
+                    break;
145
+                }
146
+            }
147
+            child = null;
148
+        }
149
+        if (child instanceof JMenuItem) {
150
+            return Optional.fromNullable((JMenuItem) child);
151
+        } else {
152
+            return Optional.absent();
153
+        }
115 154
     }
116 155
 
117 156
 }

正在加载...
取消
保存