Gridarta Editor
MenuUtils.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2023 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.gui.utils;
21 
22 import java.awt.Component;
23 import javax.swing.AbstractButton;
24 import javax.swing.JMenu;
25 import javax.swing.JMenuBar;
26 import javax.swing.JMenuItem;
27 import javax.swing.JSeparator;
28 import javax.swing.MenuElement;
30 import net.sf.japi.swing.action.ActionBuilder;
31 import net.sf.japi.swing.action.ActionBuilderFactory;
32 import org.jetbrains.annotations.NotNull;
33 import org.jetbrains.annotations.Nullable;
34 
39 public class MenuUtils {
40 
44  @NotNull
45  private static final ActionBuilder ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder("net.sf.gridarta");
46 
50  private MenuUtils() {
51  }
52 
58  public static void disposeMenuElement(@NotNull final MenuElement menuElement) {
59  if (menuElement instanceof AbstractButton) {
60  ((AbstractButton) menuElement).setAction(null);
61  }
62 
63  for (final MenuElement child : menuElement.getSubElements()) {
64  disposeMenuElement(child);
65  }
66  }
67 
72  public static void removeAll(@NotNull final JMenu menu) {
73  for (final MenuElement child : menu.getSubElements()) {
74  disposeMenuElement(child);
75  }
76  menu.removeAll();
77  }
78 
83  public static void removeAllToSeparator(@NotNull final JMenu menu) {
84  while (true) {
85  final Component menuItem = menu.getMenuComponent(0);
86  if (menuItem == null || menuItem instanceof JSeparator) {
87  break;
88  }
89  menu.remove(0);
90  if (menuItem instanceof MenuElement) {
91  disposeMenuElement((MenuElement) menuItem);
92  }
93  }
94  }
95 
100  public static void removeAllFromSeparator(@NotNull final JMenu menu) {
101  while (true) {
102  final int menuComponentCount = menu.getMenuComponentCount();
103  if (menuComponentCount <= 0) {
104  break;
105  }
106  final Component menuItem = menu.getMenuComponent(menuComponentCount - 1);
107  if (menuItem == null || menuItem instanceof JSeparator) {
108  break;
109  }
110  menu.remove(menuComponentCount - 1);
111  if (menuItem instanceof MenuElement) {
112  disposeMenuElement((MenuElement) menuItem);
113  }
114  }
115  }
116 
123  @Nullable
124  public static JMenu getMenu(@NotNull final JMenuBar menuBar, @NotNull final String name) {
125  final JMenuItem menuItem = ACTION_BUILDER.find(menuBar, name);
126  return menuItem instanceof JMenu ? (JMenu) menuItem : null;
127  }
128 
135  @Nullable
136  public static JMenu findMenu(@NotNull final MenuElement menuElement, @NotNull final String key) {
137  for (final MenuElement subMenuElement : menuElement.getSubElements()) {
138  if (subMenuElement instanceof JMenu) {
139  final JMenu subMenu = (JMenu) subMenuElement;
140  if (ActionUtils.getActionId(subMenu.getAction()).equals(key)) {
141  return subMenu;
142  }
143 
144  final JMenu ret = findMenu(subMenu, key);
145  if (ret != null) {
146  return ret;
147  }
148  }
149  }
150  return null;
151  }
152 
153 }
name
name
Definition: ArchetypeTypeSetParserTest-ignoreDefaultAttribute1-result.txt:2
net.sf.gridarta.utils.ActionUtils.getActionId
static String getActionId(@NotNull final Action action)
Returns an Action's ID string.
Definition: ActionUtils.java:90
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.gui.utils.MenuUtils.getMenu
static JMenu getMenu(@NotNull final JMenuBar menuBar, @NotNull final String name)
Returns a named JMenu entry of a JMenuBar.
Definition: MenuUtils.java:124
net.sf.gridarta.gui.utils.MenuUtils.MenuUtils
MenuUtils()
Private constructor to prevent instantiation.
Definition: MenuUtils.java:50
net.sf.gridarta.gui.utils.MenuUtils.removeAll
static void removeAll(@NotNull final JMenu menu)
Remove all menu entries.
Definition: MenuUtils.java:72
net.sf
net.sf.gridarta.utils.ActionUtils
Utility class implementing Action related functions.
Definition: ActionUtils.java:33
net.sf.gridarta.gui.utils.MenuUtils.disposeMenuElement
static void disposeMenuElement(@NotNull final MenuElement menuElement)
Remove all actions attached to menu entries in a given menu element and its children.
Definition: MenuUtils.java:58
net.sf.gridarta.gui.utils.MenuUtils.removeAllToSeparator
static void removeAllToSeparator(@NotNull final JMenu menu)
Remove all menu entries up to (but not including) the first separator.
Definition: MenuUtils.java:83
net
net.sf.gridarta.gui.utils.MenuUtils.ACTION_BUILDER
static final ActionBuilder ACTION_BUILDER
The ActionBuilder.
Definition: MenuUtils.java:45
net.sf.gridarta.gui.utils.MenuUtils.findMenu
static JMenu findMenu(@NotNull final MenuElement menuElement, @NotNull final String key)
Returns a JMenu by action key.
Definition: MenuUtils.java:136
net.sf.gridarta.gui.utils.MenuUtils
Utility class implementing menu related functions.
Definition: MenuUtils.java:39
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.gui.utils.MenuUtils.removeAllFromSeparator
static void removeAllFromSeparator(@NotNull final JMenu menu)
Remove all menu entries from (but not including) the last separator.
Definition: MenuUtils.java:100