Browse Source

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 years ago
parent
commit
29777f57de

+ 1
- 4
serverlistdialog/plugin.config View File

23
   friendly=0.2
23
   friendly=0.2
24
 
24
 
25
 requires:
25
 requires:
26
-  parent=ui_swing
27
-
28
-persistent:
29
-  *
26
+  parent=ui_swing

+ 1
- 1
serverlistdialog/src/com/dmdirc/addons/serverlistdialog/ServerListController.java View File

61
      * Removes the 'Server lists' menu item from the app's main menu.
61
      * Removes the 'Server lists' menu item from the app's main menu.
62
      */
62
      */
63
     public void removeMenu() {
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 View File

40
         super.onUnload();
40
         super.onUnload();
41
 
41
 
42
         controller.removeMenu();
42
         controller.removeMenu();
43
-        controller = null;
43
+    }
44
+
45
+    @Override
46
+    public void onLoad() {
47
+        controller.addMenu();
44
     }
48
     }
45
 
49
 
46
     @Override
50
     @Override
49
         setObjectGraph(graph.plus(new ServerListModule()));
53
         setObjectGraph(graph.plus(new ServerListModule()));
50
 
54
 
51
         controller = getObjectGraph().get(ServerListController.class);
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 View File

25
 import com.dmdirc.addons.ui_swing.components.MDIBar;
25
 import com.dmdirc.addons.ui_swing.components.MDIBar;
26
 import com.dmdirc.addons.ui_swing.framemanager.windowmenu.WindowMenuFrameManager;
26
 import com.dmdirc.addons.ui_swing.framemanager.windowmenu.WindowMenuFrameManager;
27
 
27
 
28
+import com.google.common.base.Optional;
29
+
28
 import java.awt.Component;
30
 import java.awt.Component;
31
+import java.util.HashMap;
32
+import java.util.Map;
29
 
33
 
30
 import javax.inject.Inject;
34
 import javax.inject.Inject;
31
 import javax.inject.Singleton;
35
 import javax.inject.Singleton;
47
     private static final long serialVersionUID = 1;
51
     private static final long serialVersionUID = 1;
48
     /** Normal menu count. */
52
     /** Normal menu count. */
49
     private final int menuItemCount;
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
      * Instantiates a new menu bar.
58
      * Instantiates a new menu bar.
66
             final WindowMenuFrameManager windowMenu,
72
             final WindowMenuFrameManager windowMenu,
67
             final HelpMenu helpMenu,
73
             final HelpMenu helpMenu,
68
             final MDIBar mdiBar) {
74
             final MDIBar mdiBar) {
69
-
75
+        menuItems = new HashMap<>();
70
         setLayout(new MigLayout("ins 0, fillx"));
76
         setLayout(new MigLayout("ins 0, fillx"));
71
 
77
 
72
         add(serverMenu);
78
         add(serverMenu);
98
      * @param menuItem   Menu item to add
104
      * @param menuItem   Menu item to add
99
      */
105
      */
100
     public void addMenuItem(final String parentMenu, final JMenuItem menuItem) {
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
         JMenu menu = null;
126
         JMenu menu = null;
102
         for (int i = 0; i < getMenuCount(); i++) {
127
         for (int i = 0; i < getMenuCount(); i++) {
103
             menu = getMenu(i);
128
             menu = getMenu(i);
104
-            if (menu != null && menu.getText().equals(parentMenu)) {
129
+            if (menu != null && menu.getText().equals(name)) {
105
                 break;
130
                 break;
106
             }
131
             }
107
             menu = null;
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
 }

Loading…
Cancel
Save