diff --git a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCModelLoaderControllerImpl.java b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCModelLoaderControllerImpl.java index f7911291..c2075952 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCModelLoaderControllerImpl.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCModelLoaderControllerImpl.java @@ -9,8 +9,8 @@ import com.tagtraum.perf.gcviewer.view.GCViewerGui; import com.tagtraum.perf.gcviewer.view.GCViewerGuiMenuBar; import com.tagtraum.perf.gcviewer.view.model.RecentGCResourcesModel; +import com.tagtraum.perf.gcviewer.view.model.StayOpenCheckBoxMenuItem; -import javax.swing.*; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.event.ActionListener; @@ -98,12 +98,12 @@ private RecentGCResourcesModel getRecentGCResourcesModel() { } private ViewMenuController getViewMenuController() { - Map viewMenuItems + Map viewMenuItems = ((GCViewerGuiMenuBar) this.gcViewerGui.getJMenuBar()).getViewMenuItems(); assert viewMenuItems.size() > 0 : "viewMenuItems is not initialised!!"; - JCheckBoxMenuItem menuItem = viewMenuItems.values().iterator().next(); + StayOpenCheckBoxMenuItem menuItem = viewMenuItems.values().iterator().next(); for (ActionListener actionListener : menuItem.getActionListeners()) { if (actionListener instanceof ViewMenuController) { return (ViewMenuController) actionListener; diff --git a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiBuilder.java b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiBuilder.java index d909f048..973f26f8 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiBuilder.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiBuilder.java @@ -7,7 +7,6 @@ import java.util.TreeMap; import javax.swing.Action; -import javax.swing.JCheckBoxMenuItem; import javax.swing.JComboBox; import javax.swing.JDesktopPane; import javax.swing.JToggleButton; @@ -34,6 +33,7 @@ import com.tagtraum.perf.gcviewer.view.GCViewerGuiToolBar; import com.tagtraum.perf.gcviewer.view.RecentGCResourcesMenu; import com.tagtraum.perf.gcviewer.view.model.GCPreferences; +import com.tagtraum.perf.gcviewer.view.model.StayOpenCheckBoxMenuItem; import com.tagtraum.perf.gcviewer.view.renderer.ConcurrentGcBegionEndRenderer; import com.tagtraum.perf.gcviewer.view.renderer.FullGCLineRenderer; import com.tagtraum.perf.gcviewer.view.renderer.GCRectanglesRenderer; @@ -134,7 +134,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuBar.addToFileMenu(recentResourceNamesMenu); menuBar.addToFileMenu(actions.get(ActionCommands.EXPORT.toString())); menuBar.addToFileMenu(actions.get(ActionCommands.REFRESH.toString())); - menuBar.addToFileMenu(new JCheckBoxMenuItem(actions.get(ActionCommands.WATCH.toString()))); + menuBar.addToFileMenu(new StayOpenCheckBoxMenuItem(actions.get(ActionCommands.WATCH.toString()))); if ( ! OSXSupport.isOSX()) { menuBar.addToFileMenu(actions.get(ActionCommands.EXIT.toString())); } @@ -144,7 +144,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, recentResourceNamesMenu.getRecentResourceNamesModel().addRecentResourceNamesListener(recentResourceNamesMenuController); // view menu - JCheckBoxMenuItem menuItemShowModelMetricsPanel = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_show_data_panel"), true); + StayOpenCheckBoxMenuItem menuItemShowModelMetricsPanel = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_show_data_panel"), true); menuItemShowModelMetricsPanel.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_show_data_panel").charAt(0)); menuItemShowModelMetricsPanel.setIcon(ImageHelper.createEmptyImageIcon(20, 20)); menuItemShowModelMetricsPanel.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_show_data_panel")); @@ -153,7 +153,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuBar.addToViewMenu(GCPreferences.SHOW_MODEL_METRICS_PANEL, menuItemShowModelMetricsPanel); menuBar.addSeparatorToViewMenu(); - JCheckBoxMenuItem menuItemShowDateStamp = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_show_date_stamp"), true); + StayOpenCheckBoxMenuItem menuItemShowDateStamp = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_show_date_stamp"), true); menuItemShowDateStamp.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_show_date_stamp").charAt(0)); menuItemShowDateStamp.setIcon(ImageHelper.createEmptyImageIcon(20, 20)); menuItemShowDateStamp.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_show_date_stamp")); @@ -162,7 +162,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuBar.addToViewMenu(GCPreferences.SHOW_DATE_STAMP, menuItemShowDateStamp); menuBar.addSeparatorToViewMenu(); - JCheckBoxMenuItem menuItemAntiAlias = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_antialias"), true); + StayOpenCheckBoxMenuItem menuItemAntiAlias = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_antialias"), true); menuItemAntiAlias.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_antialias").charAt(0)); menuItemAntiAlias.setIcon(ImageHelper.createEmptyImageIcon(20, 20)); menuItemAntiAlias.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_antialias")); @@ -171,7 +171,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuBar.addToViewMenu(GCPreferences.ANTI_ALIAS, menuItemAntiAlias); menuBar.addSeparatorToViewMenu(); - JCheckBoxMenuItem menuItemFullGCLines = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_full_gc_lines"), true); + StayOpenCheckBoxMenuItem menuItemFullGCLines = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_full_gc_lines"), true); menuItemFullGCLines.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_full_gc_lines").charAt(0)); menuItemFullGCLines.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_full_gc_lines")); menuItemFullGCLines.setIcon(ImageHelper.createMonoColoredImageIcon(FullGCLineRenderer.DEFAULT_LINEPAINT, 20, 20)); @@ -179,7 +179,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuItemFullGCLines.addActionListener(viewMenuController); menuBar.addToViewMenu(GCPreferences.FULL_GC_LINES, menuItemFullGCLines); - JCheckBoxMenuItem menuItemIncGCLines = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_inc_gc_lines"), true); + StayOpenCheckBoxMenuItem menuItemIncGCLines = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_inc_gc_lines"), true); menuItemIncGCLines.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_inc_gc_lines").charAt(0)); menuItemIncGCLines.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_inc_gc_lines")); menuItemIncGCLines.setIcon(ImageHelper.createMonoColoredImageIcon(IncLineRenderer.DEFAULT_LINEPAINT, 20, 20)); @@ -187,7 +187,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuItemIncGCLines.addActionListener(viewMenuController); menuBar.addToViewMenu(GCPreferences.INC_GC_LINES, menuItemIncGCLines); - JCheckBoxMenuItem menuItemGcTimesLine = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_gc_times_line"), true); + StayOpenCheckBoxMenuItem menuItemGcTimesLine = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_gc_times_line"), true); menuItemGcTimesLine.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_gc_times_line").charAt(0)); menuItemGcTimesLine.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_gc_times_line")); menuItemGcTimesLine.setIcon(ImageHelper.createMonoColoredImageIcon(GCTimesRenderer.DEFAULT_LINEPAINT, 20, 20)); @@ -195,7 +195,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuItemGcTimesLine.addActionListener(viewMenuController); menuBar.addToViewMenu(GCPreferences.GC_TIMES_LINE, menuItemGcTimesLine); - JCheckBoxMenuItem menuItemGcTimesRectangle = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_gc_times_rectangles"), true); + StayOpenCheckBoxMenuItem menuItemGcTimesRectangle = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_gc_times_rectangles"), true); menuItemGcTimesRectangle.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_gc_times_rectangles").charAt(0)); menuItemGcTimesRectangle.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_gc_times_rectangles")); menuItemGcTimesRectangle.setIcon(ImageHelper.createMonoColoredImageIcon(GCRectanglesRenderer.DEFAULT_LINEPAINT, 20, 20)); @@ -203,7 +203,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuItemGcTimesRectangle.addActionListener(viewMenuController); menuBar.addToViewMenu(GCPreferences.GC_TIMES_RECTANGLES, menuItemGcTimesRectangle); - JCheckBoxMenuItem menuItemTotalMemory = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_total_memory"), true); + StayOpenCheckBoxMenuItem menuItemTotalMemory = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_total_memory"), true); menuItemTotalMemory.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_total_memory").charAt(0)); menuItemTotalMemory.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_total_memory")); menuItemTotalMemory.setIcon(ImageHelper.createMonoColoredImageIcon(TotalHeapRenderer.DEFAULT_LINEPAINT, 20, 20)); @@ -211,7 +211,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuItemTotalMemory.addActionListener(viewMenuController); menuBar.addToViewMenu(GCPreferences.TOTAL_MEMORY, menuItemTotalMemory); - JCheckBoxMenuItem menuItemTenuredMemory = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_tenured_memory"), true); + StayOpenCheckBoxMenuItem menuItemTenuredMemory = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_tenured_memory"), true); menuItemTenuredMemory.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_tenured_memory").charAt(0)); menuItemTenuredMemory.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_tenured_memory")); menuItemTenuredMemory.setIcon(ImageHelper.createMonoColoredImageIcon(TotalTenuredRenderer.DEFAULT_LINEPAINT, 20, 20)); @@ -219,7 +219,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuItemTenuredMemory.addActionListener(viewMenuController); menuBar.addToViewMenu(GCPreferences.TENURED_MEMORY, menuItemTenuredMemory); - JCheckBoxMenuItem menuItemYoungMemory = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_young_memory"), true); + StayOpenCheckBoxMenuItem menuItemYoungMemory = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_young_memory"), true); menuItemYoungMemory.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_young_memory").charAt(0)); menuItemYoungMemory.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_young_memory")); menuItemYoungMemory.setIcon(ImageHelper.createMonoColoredImageIcon(TotalYoungRenderer.DEFAULT_LINEPAINT, 20, 20)); @@ -227,7 +227,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuItemYoungMemory.addActionListener(viewMenuController); menuBar.addToViewMenu(GCPreferences.YOUNG_MEMORY, menuItemYoungMemory); - JCheckBoxMenuItem menuItemUsedMemory = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_used_memory"), true); + StayOpenCheckBoxMenuItem menuItemUsedMemory = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_used_memory"), true); menuItemUsedMemory.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_used_memory").charAt(0)); menuItemUsedMemory.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_used_memory")); menuItemUsedMemory.setIcon(ImageHelper.createMonoColoredImageIcon(UsedHeapRenderer.DEFAULT_LINEPAINT, 20, 20)); @@ -235,7 +235,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuItemUsedMemory.addActionListener(viewMenuController); menuBar.addToViewMenu(GCPreferences.USED_MEMORY, menuItemUsedMemory); - JCheckBoxMenuItem menuItemUsedTenuredMemory = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_used_tenured_memory"), true); + StayOpenCheckBoxMenuItem menuItemUsedTenuredMemory = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_used_tenured_memory"), true); menuItemUsedTenuredMemory.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_used_tenured_memory").charAt(0)); menuItemUsedTenuredMemory.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_used_tenured_memory")); menuItemUsedTenuredMemory.setIcon(ImageHelper.createMonoColoredImageIcon(UsedTenuredRenderer.DEFAULT_LINEPAINT, 20, 20)); @@ -243,7 +243,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuItemUsedTenuredMemory.addActionListener(viewMenuController); menuBar.addToViewMenu(GCPreferences.USED_TENURED_MEMORY, menuItemUsedTenuredMemory); - JCheckBoxMenuItem menuItemUsedYoungMemory = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_used_young_memory"), true); + StayOpenCheckBoxMenuItem menuItemUsedYoungMemory = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_used_young_memory"), true); menuItemUsedYoungMemory.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_used_young_memory").charAt(0)); menuItemUsedYoungMemory.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_used_young_memory")); menuItemUsedYoungMemory.setIcon(ImageHelper.createMonoColoredImageIcon(UsedYoungRenderer.DEFAULT_LINEPAINT, 20, 20)); @@ -251,7 +251,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuItemUsedYoungMemory.addActionListener(viewMenuController); menuBar.addToViewMenu(GCPreferences.USED_YOUNG_MEMORY, menuItemUsedYoungMemory); - JCheckBoxMenuItem menuItemInitialMarkLevel = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_initial_mark_level"), true); + StayOpenCheckBoxMenuItem menuItemInitialMarkLevel = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_initial_mark_level"), true); menuItemInitialMarkLevel.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_initial_mark_level").charAt(0)); menuItemInitialMarkLevel.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_initial_mark_level")); menuItemInitialMarkLevel.setIcon(ImageHelper.createMonoColoredImageIcon(InitialMarkLevelRenderer.DEFAULT_LINEPAINT, 20, 20)); @@ -259,7 +259,7 @@ private GCViewerGuiMenuBar initMenuBar(Map actions, menuItemInitialMarkLevel.addActionListener(viewMenuController); menuBar.addToViewMenu(GCPreferences.INITIAL_MARK_LEVEL, menuItemInitialMarkLevel); - JCheckBoxMenuItem menuItemConcurrentGcBeginEnd = new JCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_concurrent_collection_begin_end"), true); + StayOpenCheckBoxMenuItem menuItemConcurrentGcBeginEnd = new StayOpenCheckBoxMenuItem(LocalisationHelper.getString("main_frame_menuitem_concurrent_collection_begin_end"), true); menuItemConcurrentGcBeginEnd.setMnemonic(LocalisationHelper.getString("main_frame_menuitem_mnemonic_concurrent_collection_begin_end").charAt(0)); menuItemConcurrentGcBeginEnd.setToolTipText(LocalisationHelper.getString("main_frame_menuitem_hint_concurrent_collection_begin_end")); menuItemConcurrentGcBeginEnd.setIcon(ImageHelper.createMonoColoredImageIcon(ConcurrentGcBegionEndRenderer.CONCURRENT_COLLECTION_BEGIN, 20, 20)); diff --git a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiController.java b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiController.java index 20d56cab..06a97ef7 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiController.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiController.java @@ -8,7 +8,7 @@ import java.util.List; import java.util.Map.Entry; -import javax.swing.JCheckBoxMenuItem; + import javax.swing.JInternalFrame; import javax.swing.SwingUtilities; @@ -21,6 +21,7 @@ import com.tagtraum.perf.gcviewer.view.GCViewerGuiMenuBar; import com.tagtraum.perf.gcviewer.view.model.GCPreferences; import com.tagtraum.perf.gcviewer.view.model.GCResourceGroup; +import com.tagtraum.perf.gcviewer.view.model.StayOpenCheckBoxMenuItem; /** * Main controller class of GCViewer. @@ -34,8 +35,8 @@ void applyPreferences(GCViewerGui gui, GCPreferences preferences) { // default visibility to be able to access it from unittests gui.setPreferences(preferences); if (preferences.isPropertiesLoaded()) { - for (Entry menuEntry : ((GCViewerGuiMenuBar)gui.getJMenuBar()).getViewMenuItems().entrySet()) { - JCheckBoxMenuItem item = menuEntry.getValue(); + for (Entry menuEntry : ((GCViewerGuiMenuBar)gui.getJMenuBar()).getViewMenuItems().entrySet()) { + StayOpenCheckBoxMenuItem item = menuEntry.getValue(); item.setState(preferences.getGcLineProperty(menuEntry.getKey())); // TODO necessary? state is set above; no GCDocument open at this moment @@ -84,8 +85,8 @@ private void closeAllButSelectedDocument(GCViewerGui gui) { */ private GCPreferences copyPreferencesFromGui(GCViewerGui gui) { GCPreferences preferences = gui.getPreferences(); - for (Entry menuEntry : ((GCViewerGuiMenuBar)gui.getJMenuBar()).getViewMenuItems().entrySet()) { - JCheckBoxMenuItem item = menuEntry.getValue(); + for (Entry menuEntry : ((GCViewerGuiMenuBar)gui.getJMenuBar()).getViewMenuItems().entrySet()) { + StayOpenCheckBoxMenuItem item = menuEntry.getValue(); preferences.setGcLineProperty(item.getActionCommand(), item.getState()); } preferences.setWindowWidth(gui.getWidth()); diff --git a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiInternalFrameController.java b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiInternalFrameController.java index d8fb8227..a5096a20 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiInternalFrameController.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/GCViewerGuiInternalFrameController.java @@ -4,7 +4,7 @@ import java.util.Map.Entry; import javax.swing.Action; -import javax.swing.JCheckBoxMenuItem; + import javax.swing.JInternalFrame; import javax.swing.JMenu; import javax.swing.JMenuItem; @@ -18,6 +18,7 @@ import com.tagtraum.perf.gcviewer.view.GCViewerGuiMenuBar; import com.tagtraum.perf.gcviewer.view.GCViewerGuiToolBar; import com.tagtraum.perf.gcviewer.view.model.GCPreferences; +import com.tagtraum.perf.gcviewer.view.model.StayOpenCheckBoxMenuItem; /** * Controller class for internal frames of {@link GCViewerGui}. @@ -29,7 +30,7 @@ public class GCViewerGuiInternalFrameController extends InternalFrameAdapter { @Override public void internalFrameOpened(InternalFrameEvent e) { - JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem(new WindowMenuItemAction(e)); + StayOpenCheckBoxMenuItem menuItem = new StayOpenCheckBoxMenuItem(new WindowMenuItemAction(e)); getMenuBar(e).addToWindowMenuGroup(menuItem); } @@ -126,8 +127,8 @@ private void updateMenuItemState(InternalFrameEvent e) { getToolBar(e).getZoomComboBox().setSelectedItem( (int) (getSelectedGCDocument(e).getModelChart().getScaleFactor() * 1000.0) + "%"); GCPreferences preferences = getSelectedGCDocument(e).getPreferences(); - for (Entry menuEntry : getMenuBar(e).getViewMenuItems().entrySet()) { - JCheckBoxMenuItem item = menuEntry.getValue(); + for (Entry menuEntry : getMenuBar(e).getViewMenuItems().entrySet()) { + StayOpenCheckBoxMenuItem item = menuEntry.getValue(); item.setState(preferences.getGcLineProperty(menuEntry.getKey())); } } diff --git a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/ViewMenuController.java b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/ViewMenuController.java index bd824192..a2d0bcb6 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/ViewMenuController.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/ViewMenuController.java @@ -6,12 +6,12 @@ import java.beans.PropertyChangeListener; import java.util.logging.Logger; -import javax.swing.JCheckBoxMenuItem; import com.tagtraum.perf.gcviewer.view.GCViewerGui; import com.tagtraum.perf.gcviewer.view.GCViewerGuiMenuBar; import com.tagtraum.perf.gcviewer.view.model.GCPreferences; import com.tagtraum.perf.gcviewer.view.model.PropertyChangeEventConsts; +import com.tagtraum.perf.gcviewer.view.model.StayOpenCheckBoxMenuItem; /** * Deals with all actions for the "view". @@ -40,7 +40,7 @@ public void actionPerformed(ActionEvent e) { return; } - boolean state = ((JCheckBoxMenuItem)e.getSource()).getState(); + boolean state = ((StayOpenCheckBoxMenuItem)e.getSource()).getState(); if (GCPreferences.SHOW_MODEL_METRICS_PANEL.equals(e.getActionCommand())) { gui.getSelectedGCDocument().setShowModelMetricsPanel(state); } diff --git a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/WatchStateController.java b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/WatchStateController.java index c7c3d291..beb9b397 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/WatchStateController.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/impl/WatchStateController.java @@ -1,9 +1,10 @@ package com.tagtraum.perf.gcviewer.ctrl.impl; +import com.tagtraum.perf.gcviewer.view.model.StayOpenCheckBoxMenuItem; + import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import javax.swing.JCheckBoxMenuItem; import javax.swing.JToggleButton; /** @@ -14,10 +15,10 @@ */ public class WatchStateController implements ActionListener { - private JCheckBoxMenuItem menuItemWatch; + private StayOpenCheckBoxMenuItem menuItemWatch; private JToggleButton watchToggle; - public WatchStateController(JCheckBoxMenuItem menuItemWatch, JToggleButton watchToggle) { + public WatchStateController(StayOpenCheckBoxMenuItem menuItemWatch, JToggleButton watchToggle) { super(); this.menuItemWatch = menuItemWatch; diff --git a/src/main/java/com/tagtraum/perf/gcviewer/view/GCViewerGuiMenuBar.java b/src/main/java/com/tagtraum/perf/gcviewer/view/GCViewerGuiMenuBar.java index 6e39c6bf..aff4586e 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/view/GCViewerGuiMenuBar.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/view/GCViewerGuiMenuBar.java @@ -7,13 +7,13 @@ import javax.swing.Action; import javax.swing.ButtonGroup; -import javax.swing.JCheckBoxMenuItem; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import com.tagtraum.perf.gcviewer.util.LocalisationHelper; import com.tagtraum.perf.gcviewer.view.model.RecentGCResourcesModel; +import com.tagtraum.perf.gcviewer.view.model.StayOpenCheckBoxMenuItem; import com.tagtraum.perf.gcviewer.view.util.OSXSupport; /** @@ -23,7 +23,7 @@ *

created on: 07.02.2014

*/ public class GCViewerGuiMenuBar extends JMenuBar { - private Map viewMenuItemMap; + private Map viewMenuItemMap; private JMenu fileMenu; private RecentGCResourcesModel recentResourceNamesModel; private JMenu viewMenu; @@ -35,7 +35,7 @@ public class GCViewerGuiMenuBar extends JMenuBar { public GCViewerGuiMenuBar() { super(); - viewMenuItemMap = new HashMap(); + viewMenuItemMap = new HashMap(); fileMenu = new JMenu(LocalisationHelper.getString("main_frame_menu_file")); fileMenu.setMnemonic(LocalisationHelper.getString("main_frame_menu_mnemonic_file").charAt(0)); @@ -82,7 +82,7 @@ public void addToHelpMenu(Action action) { helpMenu.add(action); } - public void addToViewMenu(String key, JCheckBoxMenuItem menuItem) { + public void addToViewMenu(String key, StayOpenCheckBoxMenuItem menuItem) { viewMenu.add(menuItem); viewMenuItemMap.put(key, menuItem); } @@ -98,7 +98,7 @@ public void addToViewMenu(Action action) { * @param key unique key for storage of this menuItem in the internal map * @param menuItem item to be stored in the map */ - public void addToViewMenuInvisible(String key, JCheckBoxMenuItem menuItem) { + public void addToViewMenuInvisible(String key, StayOpenCheckBoxMenuItem menuItem) { viewMenuItemMap.put(key, menuItem); } @@ -114,7 +114,7 @@ public void addToWindowMenu(Action action) { * Add checkbox item to window menu group (only one of these items can be active at a time). * @param menuItem checkbox item to be added */ - public void addToWindowMenuGroup(JCheckBoxMenuItem menuItem) { + public void addToWindowMenuGroup(StayOpenCheckBoxMenuItem menuItem) { windowMenu.add(menuItem); windowMenuCheckBoxGroup.add(menuItem); } @@ -141,7 +141,7 @@ public JMenu getViewMenu() { return viewMenu; } - public Map getViewMenuItems() { + public Map getViewMenuItems() { return Collections.unmodifiableMap(viewMenuItemMap); } @@ -150,19 +150,19 @@ public JMenu getWindowMenu() { } /** - * Returns JCheckBoxMenuItem, which is associated with "WATCH" action command. + * Returns StayOpenCheckBoxMenuItem, which is associated with "WATCH" action command. * * @return "WATCH" menu item */ - public JCheckBoxMenuItem getWatchMenuItem() { + public StayOpenCheckBoxMenuItem getWatchMenuItem() { for (Component component : fileMenu.getMenuComponents()) { - if (component instanceof JCheckBoxMenuItem - && ((JCheckBoxMenuItem) component).getActionCommand().equals(ActionCommands.WATCH.toString())) { + if (component instanceof StayOpenCheckBoxMenuItem + && ((StayOpenCheckBoxMenuItem) component).getActionCommand().equals(ActionCommands.WATCH.toString())) { - return (JCheckBoxMenuItem) component; + return (StayOpenCheckBoxMenuItem) component; } } - throw new IllegalStateException("JCheckBoxMenuItem with actionCommand '" + ActionCommands.WATCH + "' not found"); + throw new IllegalStateException("StayOpenCheckBoxMenuItem with actionCommand '" + ActionCommands.WATCH + "' not found"); } } diff --git a/src/main/java/com/tagtraum/perf/gcviewer/view/model/StayOpenCheckBoxMenuItem.java b/src/main/java/com/tagtraum/perf/gcviewer/view/model/StayOpenCheckBoxMenuItem.java new file mode 100644 index 00000000..7cccab5f --- /dev/null +++ b/src/main/java/com/tagtraum/perf/gcviewer/view/model/StayOpenCheckBoxMenuItem.java @@ -0,0 +1,92 @@ +package com.tagtraum.perf.gcviewer.view.model; + +import javax.swing.Action; +import javax.swing.Icon; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.MenuElement; +import javax.swing.MenuSelectionManager; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +/** + * An extension of JCheckBoxMenuItem that doesn't close the menu when selected. + * + * This code was taken from the blog found at https://tips4java.wordpress.com/2010/09/12/keeping-menus-open/. + * + * @author Darryl + */ +public class StayOpenCheckBoxMenuItem extends JCheckBoxMenuItem { + + private static MenuElement[] path; + + { + getModel().addChangeListener(new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent e) { + if (getModel().isArmed() && isShowing()) { + path = MenuSelectionManager.defaultManager().getSelectedPath(); + } + } + }); + } + + /** + * @see JCheckBoxMenuItem#JCheckBoxMenuItem() + */ + public StayOpenCheckBoxMenuItem() { + super(); + } + + /** + * @see JCheckBoxMenuItem#JCheckBoxMenuItem(Action) + */ + public StayOpenCheckBoxMenuItem(Action a) { + super(a); + } + + /** + * @see JCheckBoxMenuItem#JCheckBoxMenuItem(Icon) + */ + public StayOpenCheckBoxMenuItem(Icon icon) { + super(icon); + } + + /** + * @see JCheckBoxMenuItem#JCheckBoxMenuItem(String) + */ + public StayOpenCheckBoxMenuItem(String text) { + super(text); + } + + /** + * @see JCheckBoxMenuItem#JCheckBoxMenuItem(String, boolean) + */ + public StayOpenCheckBoxMenuItem(String text, boolean selected) { + super(text, selected); + } + + /** + * @see JCheckBoxMenuItem#JCheckBoxMenuItem(String, Icon) + */ + public StayOpenCheckBoxMenuItem(String text, Icon icon) { + super(text, icon); + } + + /** + * @see JCheckBoxMenuItem#JCheckBoxMenuItem(String, Icon, boolean) + */ + public StayOpenCheckBoxMenuItem(String text, Icon icon, boolean selected) { + super(text, icon, selected); + } + + /** + * Overridden to reopen the menu. + * + * @param pressTime the time to "hold down" the button, in milliseconds + */ + @Override + public void doClick(int pressTime) { + super.doClick(pressTime); + MenuSelectionManager.defaultManager().setSelectedPath(path); + } +}