|
@@ -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
|
}
|