diff --git a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/RefreshWatchDog.java b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/RefreshWatchDog.java index b597b880..c6306ec8 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/RefreshWatchDog.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/RefreshWatchDog.java @@ -18,60 +18,69 @@ * @author Hendrik Schreiber */ public class RefreshWatchDog { - private static final int RELOAD_DELAY = 1000; - - private GCModelLoaderController controller; - private GCDocument gcDocument; - - private java.util.Timer reloadTimer; - - public RefreshWatchDog(GCModelLoaderController controller, GCDocument gcDocument) { - this.controller = controller; - this.gcDocument = gcDocument; - } - - public void start() { - reloadTimer = new java.util.Timer(true); - reloadTimer.schedule(new ModelReloader(), 0, RELOAD_DELAY); - } - - public void stop() { - if (reloadTimer != null) { - reloadTimer.cancel(); - } - } - - private class ModelReloader extends TimerTask implements PropertyChangeListener { - - private GCModelLoaderGroupTracker tracker; - /** initial value must be true for the first start */ - private boolean isFinished = true; - - @Override - public void propertyChange(PropertyChangeEvent evt) { - if ("state".equals(evt.getPropertyName()) - && SwingWorker.StateValue.DONE.equals(evt.getNewValue())) { - - isFinished = true; - tracker.removePropertyChangeListener(this); - } - } - - public void run() { - if (isFinished) { - isFinished = false; - tracker = controller.reload(gcDocument); - - // if no reload takes place, the propertyChangeEvent is fired, before the listener is attached - // => set finished manually to true again. - if (tracker.size() == 0) { - isFinished = true; - } - else { - tracker.addPropertyChangeListener(this); - } - } - } - - } + private static int RELOAD_DELAY = 1000; + + private final GCModelLoaderController controller; + private final GCDocument gcDocument; + + private java.util.Timer reloadTimer; + + public RefreshWatchDog(GCModelLoaderController controller, GCDocument gcDocument) { + this.controller = controller; + this.gcDocument = gcDocument; + } + + public void start() { + reloadTimer = new java.util.Timer(true); + reloadTimer.schedule(new ModelReloader(), 0, RELOAD_DELAY); + } + + public void stop() { + if (reloadTimer != null) { + reloadTimer.cancel(); + } + } + + protected static int getRELOAD_DELAY() { + return RELOAD_DELAY; + } + + protected static void setRELOAD_DELAY(int rELOAD_DELAY) { + RELOAD_DELAY = rELOAD_DELAY; + } + + private class ModelReloader extends TimerTask implements PropertyChangeListener { + + private GCModelLoaderGroupTracker tracker; + /** initial value must be true for the first start */ + private boolean isFinished = true; + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if ("state".equals(evt.getPropertyName()) + && SwingWorker.StateValue.DONE.equals(evt.getNewValue())) { + + isFinished = true; + tracker.removePropertyChangeListener(this); + } + } + + @Override + public void run() { + if (isFinished) { + isFinished = false; + tracker = controller.reload(gcDocument); + + // if no reload takes place, the propertyChangeEvent is fired, before the listener is attached + // => set finished manually to true again. + if (tracker.size() == 0) { + isFinished = true; + } + else { + tracker.addPropertyChangeListener(this); + } + } + } + + } } diff --git a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/Watch.java b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/Watch.java index f977b1f3..6702a6db 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/Watch.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/Watch.java @@ -29,103 +29,115 @@ * Time: 1:59:59 PM */ public class Watch extends AbstractAction { - private Logger logger = Logger.getLogger(Watch.class.getCanonicalName()); - - private static final ImageIcon WATCH_ICON = ImageHelper.loadImageIcon("watch.png"); - private static final ImageIcon CLOCK_ICON = ImageHelper.loadImageIcon("clock.png"); - - private GCModelLoaderController controller; - private GCViewerGui gcViewer; - - private Map timerMap; - - public Watch(GCModelLoaderController controller, GCViewerGui gcViewer) { - this.controller = controller; - this.gcViewer = gcViewer; - this.timerMap = new HashMap(); - - putValue(NAME, LocalisationHelper.getString("main_frame_menuitem_watch")); - putValue(SHORT_DESCRIPTION, LocalisationHelper.getString("main_frame_menuitem_hint_watch")); - putValue(MNEMONIC_KEY, new Integer(LocalisationHelper.getString("main_frame_menuitem_mnemonic_watch").charAt(0))); - putValue(ACTION_COMMAND_KEY, ActionCommands.WATCH.toString()); - putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke('W', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() )); - putValue(SMALL_ICON, WATCH_ICON); - - setEnabled(false); - } - - public void actionPerformed(final ActionEvent ae) { - final AbstractButton source = (AbstractButton)ae.getSource(); - if (source.isSelected()) { - start(); - } - else { - stop(gcViewer.getSelectedGCDocument()); - } - } - - private void start() { - GCDocument gcDocument = gcViewer.getSelectedGCDocument(); - TimerInfo timerInfo = new TimerInfo( - new RefreshWatchDog(controller, gcDocument), - new GCDocumentCloseListener(gcDocument)); - - gcDocument.setWatched(true); - gcDocument.addInternalFrameListener(timerInfo.closeListener); - timerMap.put(gcDocument, timerInfo); - - timerInfo.refreshWatchDog.start(); - putValue(SMALL_ICON, CLOCK_ICON); - } - - private void stop(GCDocument gcDocument) { - gcDocument.setWatched(false); - TimerInfo timerInfo = timerMap.get(gcDocument); - timerInfo.refreshWatchDog.stop(); - - gcDocument.removeInternalFrameListener(timerInfo.closeListener); - - putValue(SMALL_ICON, WATCH_ICON); - } - - public void setEnabled(final boolean newValue) { - super.setEnabled(newValue); - if (!newValue) { - putValue(SMALL_ICON, WATCH_ICON); - } - } - - private class TimerInfo { - RefreshWatchDog refreshWatchDog; - GCDocumentCloseListener closeListener; - - public TimerInfo(RefreshWatchDog refreshWatchDog, GCDocumentCloseListener closeListener) { - this.refreshWatchDog = refreshWatchDog; - this.closeListener = closeListener; - } - } - - private class GCDocumentCloseListener extends InternalFrameAdapter { - private GCDocument gcDocument; - - public GCDocumentCloseListener(GCDocument gcDocument) { - this.gcDocument = gcDocument; - } - - @Override - public void internalFrameActivated(InternalFrameEvent e) { - putValue(SMALL_ICON, CLOCK_ICON); - } - - @Override - public void internalFrameClosing(InternalFrameEvent e) { - stop(this.gcDocument); - } - - @Override - public void internalFrameDeactivated(InternalFrameEvent e) { - putValue(SMALL_ICON, WATCH_ICON); - } - - } + private Logger logger = Logger.getLogger(Watch.class.getCanonicalName()); + + private static final ImageIcon WATCH_ICON = ImageHelper.loadImageIcon("watch.png"); + private static final ImageIcon CLOCK_ICON = ImageHelper.loadImageIcon("clock.png"); + + private GCModelLoaderController controller; + private GCViewerGui gcViewer; + + private Map timerMap; + + public Watch(GCModelLoaderController controller, GCViewerGui gcViewer) { + this.controller = controller; + this.gcViewer = gcViewer; + this.timerMap = new HashMap(); + + putValue(NAME, LocalisationHelper.getString("main_frame_menuitem_watch")); + putValue(SHORT_DESCRIPTION, LocalisationHelper.getString("main_frame_menuitem_hint_watch")); + putValue(MNEMONIC_KEY, new Integer(LocalisationHelper.getString("main_frame_menuitem_mnemonic_watch").charAt(0))); + putValue(ACTION_COMMAND_KEY, ActionCommands.WATCH.toString()); + putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke('W', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() )); + putValue(SMALL_ICON, WATCH_ICON); + + setEnabled(false); + } + + @Override + public void actionPerformed(final ActionEvent ae) { + final AbstractButton source = (AbstractButton)ae.getSource(); + if (source.isSelected()) { + start(); + } + else { + stop(gcViewer.getSelectedGCDocument()); + } + } + + /** + * Added restartIfRunning() method. Sep/11/2016 - Àngel Ollé Bláquez + */ + void restartIfRunning() { + if (gcViewer.getSelectedGCDocument().isWatched()) { + stop(gcViewer.getSelectedGCDocument()); + start(); + } + } + + private void start() { + GCDocument gcDocument = gcViewer.getSelectedGCDocument(); + TimerInfo timerInfo = new TimerInfo( + new RefreshWatchDog(controller, gcDocument), + new GCDocumentCloseListener(gcDocument)); + + gcDocument.setWatched(true); + gcDocument.addInternalFrameListener(timerInfo.closeListener); + timerMap.put(gcDocument, timerInfo); + + timerInfo.refreshWatchDog.start(); + putValue(SMALL_ICON, CLOCK_ICON); + } + + private void stop(GCDocument gcDocument) { + gcDocument.setWatched(false); + TimerInfo timerInfo = timerMap.get(gcDocument); + timerInfo.refreshWatchDog.stop(); + + gcDocument.removeInternalFrameListener(timerInfo.closeListener); + + putValue(SMALL_ICON, WATCH_ICON); + } + + @Override + public void setEnabled(final boolean newValue) { + super.setEnabled(newValue); + if (!newValue) { + putValue(SMALL_ICON, WATCH_ICON); + } + } + + private class TimerInfo { + RefreshWatchDog refreshWatchDog; + GCDocumentCloseListener closeListener; + + public TimerInfo(RefreshWatchDog refreshWatchDog, GCDocumentCloseListener closeListener) { + this.refreshWatchDog = refreshWatchDog; + this.closeListener = closeListener; + } + } + + private class GCDocumentCloseListener extends InternalFrameAdapter { + private final GCDocument gcDocument; + + public GCDocumentCloseListener(GCDocument gcDocument) { + this.gcDocument = gcDocument; + } + + @Override + public void internalFrameActivated(InternalFrameEvent e) { + putValue(SMALL_ICON, CLOCK_ICON); + } + + @Override + public void internalFrameClosing(InternalFrameEvent e) { + stop(this.gcDocument); + } + + @Override + public void internalFrameDeactivated(InternalFrameEvent e) { + putValue(SMALL_ICON, WATCH_ICON); + } + + } } diff --git a/src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/WatchDogReloadDelay.java b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/WatchDogReloadDelay.java new file mode 100644 index 00000000..af6434d7 --- /dev/null +++ b/src/main/java/com/tagtraum/perf/gcviewer/ctrl/action/WatchDogReloadDelay.java @@ -0,0 +1,49 @@ +package com.tagtraum.perf.gcviewer.ctrl.action; + +import java.awt.event.ActionEvent; + +import javax.swing.AbstractAction; + +import com.tagtraum.perf.gcviewer.util.LocalisationHelper; +import com.tagtraum.perf.gcviewer.view.ActionCommands; +import com.tagtraum.perf.gcviewer.view.GCDocument; +import com.tagtraum.perf.gcviewer.view.GCViewerGui; +import com.tagtraum.perf.gcviewer.view.WatchDogReloadDelayView; + +/** + * + * @author Àngel Ollé Blázquez + * + * + */ +public class WatchDogReloadDelay extends AbstractAction { + private static final long serialVersionUID = -4527644600732531177L; + private final WatchDogReloadDelayView view; + private final GCViewerGui gui; + + public WatchDogReloadDelay(final GCViewerGui gui) { + this.gui = gui; + int delay = RefreshWatchDog.getRELOAD_DELAY(); + this.view = new WatchDogReloadDelayView(gui, delay); + + putValue(NAME, LocalisationHelper.getString("main_frame_menuitem_watchdog")); + putValue(SHORT_DESCRIPTION, LocalisationHelper.getString("main_frame_menuitem_hint_watchdog")); + putValue(MNEMONIC_KEY, + new Integer(LocalisationHelper.getString("main_frame_menuitem_mnemonic_watchdog").charAt(0))); + putValue(ACTION_COMMAND_KEY, ActionCommands.ARRANGE.toString()); + setEnabled(true); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (this.view.showDialog()) { + int delay = this.view.getReloadDelayValue(); + RefreshWatchDog.setRELOAD_DELAY(delay); + GCDocument gcDocument = gui.getSelectedGCDocument(); + if (gcDocument != null) { + Watch watch = (Watch) this.gui.getActionMap().get(ActionCommands.WATCH.toString()); + watch.restartIfRunning(); + } + } + } +} 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 243e16e1..4e9491d1 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 @@ -20,271 +20,275 @@ /** * This class is responsible for construction of {@link GCViewerGui}, whose construction is * quite complex. It is a simple implementation of the Builder pattern described in - * "Design Patterns: Elements of Reusable Object-Oriented Software". - * + * "Design Patterns: Elements of Reusable Object-Oriented Software". + * * @author Joerg Wuethrich *

created on: 07.02.2014

*/ public class GCViewerGuiBuilder { - - public void initGCViewerGui(GCViewerGui gui, GCModelLoaderController controller) { - Image iconImage = ImageHelper.loadImage("gcviewericon.gif"); - - gui.setIconImage(iconImage); - Map actionMap = initActionMap(controller, gui, iconImage); - - GCViewerGuiMenuBar menuBar = initMenuBar(actionMap, gui, controller); - GCViewerGuiToolBar toolBar = initToolBar(actionMap); - JDesktopPane desktopPane = initDesktopPane(gui, controller); - - WatchStateController wsListener = new WatchStateController(menuBar.getWatchMenuItem(), toolBar.getWatchToggleButton()); - menuBar.getWatchMenuItem().addActionListener(wsListener); - toolBar.getWatchToggleButton().addActionListener(wsListener); - - gui.setActionMap(actionMap); - gui.setJMenuBar(menuBar); - gui.setToolBar(toolBar); - gui.setDesktopPane(desktopPane); - } - - private Map initActionMap(GCModelLoaderController controller, GCViewerGui gui, Image icon) { - Map actions = new TreeMap(); - - actions.put(ActionCommands.EXIT.toString(), new Exit(gui)); - actions.put(ActionCommands.ABOUT.toString(), new About(gui)); - actions.put(ActionCommands.SHOW_README.toString(), new ReadmeAction(gui)); - actions.put(ActionCommands.SHOW_LICENSE.toString(), new LicenseAction(gui)); - actions.put(ActionCommands.OPEN_FILE.toString(), new OpenFile(controller, gui)); - actions.put(ActionCommands.OPEN_SERIES.toString(), new OpenSeries(controller, gui)); - actions.put(ActionCommands.OPEN_URL.toString(), new OpenURL(controller, gui)); - actions.put(ActionCommands.REFRESH.toString(), new Refresh(controller, gui)); - actions.put(ActionCommands.EXPORT.toString(), new Export(gui)); - actions.put(ActionCommands.ZOOM.toString(), new Zoom(gui)); - actions.put(ActionCommands.ARRANGE.toString(), new Arrange(gui)); - actions.put(ActionCommands.WATCH.toString(), new Watch(controller, gui)); - - - if (OSXSupport.isOSX()) { - OSXSupport.initializeMacOSX(actions.get(ActionCommands.ABOUT.toString()), - actions.get(ActionCommands.EXIT.toString()), - null, - icon, - gui); - - if (OSXSupport.hasOSXFullScreenSupport()) { - actions.put(ActionCommands.OSX_FULLSCREEN.toString(), new OSXFullScreen(gui)); - } - } - - return actions; - } - - private JDesktopPane initDesktopPane(GCViewerGui gui, GCModelLoaderController controller) { - JDesktopPane desktopPane = new DesktopPane(); - desktopPane.setDropTarget(new DropTarget(gui, - DnDConstants.ACTION_COPY, - new FileDropTargetListener(controller, DropFlavor.OPEN))); - - return desktopPane; - } - - private GCViewerGuiMenuBar initMenuBar(Map actions, - GCViewerGui gui, - GCModelLoaderController controller) { - - ViewMenuController viewMenuController = new ViewMenuController(gui); - GCViewerGuiMenuBar menuBar = new GCViewerGuiMenuBar(); - - // file menu - menuBar.addToFileMenu(actions.get(ActionCommands.OPEN_FILE.toString())); - menuBar.addToFileMenu(actions.get(ActionCommands.OPEN_SERIES.toString())); - menuBar.addToFileMenu(actions.get(ActionCommands.OPEN_URL.toString())); - RecentGCResourcesMenu recentResourceNamesMenu = new RecentGCResourcesMenu(); - recentResourceNamesMenu.setIcon(ImageHelper.createEmptyImageIcon(20, 20)); - 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()))); - if ( ! OSXSupport.isOSX()) { - menuBar.addToFileMenu(actions.get(ActionCommands.EXIT.toString())); - } - - RecentGCResourcesMenuController recentResourceNamesMenuController - = new RecentGCResourcesMenuController(controller, recentResourceNamesMenu); - recentResourceNamesMenu.getRecentResourceNamesModel().addRecentResourceNamesListener(recentResourceNamesMenuController); - - // view menu - 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")); - menuItemShowModelMetricsPanel.setActionCommand(GCPreferences.SHOW_MODEL_METRICS_PANEL); - menuItemShowModelMetricsPanel.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.SHOW_MODEL_METRICS_PANEL, menuItemShowModelMetricsPanel); - menuBar.addSeparatorToViewMenu(); - - 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")); - menuItemShowDateStamp.setActionCommand(GCPreferences.SHOW_DATE_STAMP); - menuItemShowDateStamp.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.SHOW_DATE_STAMP, menuItemShowDateStamp); - menuBar.addSeparatorToViewMenu(); - - 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")); - menuItemAntiAlias.setActionCommand(GCPreferences.ANTI_ALIAS); - menuItemAntiAlias.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.ANTI_ALIAS, menuItemAntiAlias); - menuBar.addSeparatorToViewMenu(); - - 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)); - menuItemFullGCLines.setActionCommand(GCPreferences.FULL_GC_LINES); - menuItemFullGCLines.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.FULL_GC_LINES, menuItemFullGCLines); - - 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)); - menuItemIncGCLines.setActionCommand(GCPreferences.INC_GC_LINES); - menuItemIncGCLines.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.INC_GC_LINES, menuItemIncGCLines); - - 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)); - menuItemGcTimesLine.setActionCommand(GCPreferences.GC_TIMES_LINE); - menuItemGcTimesLine.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.GC_TIMES_LINE, menuItemGcTimesLine); - - 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)); - menuItemGcTimesRectangle.setActionCommand(GCPreferences.GC_TIMES_RECTANGLES); - menuItemGcTimesRectangle.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.GC_TIMES_RECTANGLES, menuItemGcTimesRectangle); - - 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)); - menuItemTotalMemory.setActionCommand(GCPreferences.TOTAL_MEMORY); - menuItemTotalMemory.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.TOTAL_MEMORY, menuItemTotalMemory); - - 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)); - menuItemTenuredMemory.setActionCommand(GCPreferences.TENURED_MEMORY); - menuItemTenuredMemory.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.TENURED_MEMORY, menuItemTenuredMemory); - - 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)); - menuItemYoungMemory.setActionCommand(GCPreferences.YOUNG_MEMORY); - menuItemYoungMemory.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.YOUNG_MEMORY, menuItemYoungMemory); - - 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)); - menuItemUsedMemory.setActionCommand(GCPreferences.USED_MEMORY); - menuItemUsedMemory.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.USED_MEMORY, menuItemUsedMemory); - - 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)); - menuItemUsedTenuredMemory.setActionCommand(GCPreferences.USED_TENURED_MEMORY); - menuItemUsedTenuredMemory.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.USED_TENURED_MEMORY, menuItemUsedTenuredMemory); - - 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)); - menuItemUsedYoungMemory.setActionCommand(GCPreferences.USED_YOUNG_MEMORY); - menuItemUsedYoungMemory.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.USED_YOUNG_MEMORY, menuItemUsedYoungMemory); - - 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)); - menuItemInitialMarkLevel.setActionCommand(GCPreferences.INITIAL_MARK_LEVEL); - menuItemInitialMarkLevel.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.INITIAL_MARK_LEVEL, menuItemInitialMarkLevel); - - 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)); - menuItemConcurrentGcBeginEnd.setActionCommand(GCPreferences.CONCURRENT_COLLECTION_BEGIN_END); - menuItemConcurrentGcBeginEnd.addActionListener(viewMenuController); - menuBar.addToViewMenu(GCPreferences.CONCURRENT_COLLECTION_BEGIN_END, menuItemConcurrentGcBeginEnd); - - if (OSXSupport.hasOSXFullScreenSupport()) { - // TODO No saving in properties? - menuBar.addSeparatorToViewMenu(); - menuBar.addToViewMenu(actions.get(ActionCommands.OSX_FULLSCREEN.toString())); - } - - menuBar.addToWindowMenu(actions.get(ActionCommands.ARRANGE.toString())); - menuBar.addSeparatorToWindowMenu(); - - if ( ! OSXSupport.isOSX()) { - // TODO why is the help menu not shown in OSX? -> is there never one? - menuBar.addToHelpMenu(actions.get(ActionCommands.SHOW_README.toString())); - menuBar.addToHelpMenu(actions.get(ActionCommands.SHOW_LICENSE.toString())); - menuBar.addToHelpMenu(actions.get(ActionCommands.ABOUT.toString())); - } - - return menuBar; - } - - private GCViewerGuiToolBar initToolBar(Map actions) { - GCViewerGuiToolBar toolBar = new GCViewerGuiToolBar(); - toolBar.setFloatable(false); - - toolBar.add(actions.get(ActionCommands.OPEN_FILE.toString())); - toolBar.add(actions.get(ActionCommands.OPEN_SERIES.toString())); - toolBar.add(actions.get(ActionCommands.OPEN_URL.toString())); - toolBar.add(actions.get(ActionCommands.EXPORT.toString())); - toolBar.add(actions.get(ActionCommands.REFRESH.toString())); - - JToggleButton watchToggle = new JToggleButton(); - watchToggle.setAction(actions.get(ActionCommands.WATCH.toString())); - watchToggle.setText(""); - toolBar.addWatchToggleButton(watchToggle); - - toolBar.addSeparator(); - - JComboBox zoomComboBox = new JComboBox(new String[] {"1%", "5%", "10%", "50%", "100%", "200%", "300%", "500%", "1000%", "5000%"}); - zoomComboBox.setSelectedIndex(2); - zoomComboBox.setAction(actions.get(ActionCommands.ZOOM.toString())); - zoomComboBox.setEditable(true); - zoomComboBox.setMaximumSize(zoomComboBox.getPreferredSize()); - toolBar.addZoomComboBox(zoomComboBox); - - toolBar.addSeparator(); - - toolBar.add(actions.get(ActionCommands.ABOUT.toString())); - - return toolBar; - } + + public void initGCViewerGui(GCViewerGui gui, GCModelLoaderController controller) { + Image iconImage = ImageHelper.loadImage("gcviewericon.gif"); + + gui.setIconImage(iconImage); + Map actionMap = initActionMap(controller, gui, iconImage); + + GCViewerGuiMenuBar menuBar = initMenuBar(actionMap, gui, controller); + GCViewerGuiToolBar toolBar = initToolBar(actionMap); + JDesktopPane desktopPane = initDesktopPane(gui, controller); + + WatchStateController wsListener = new WatchStateController(menuBar.getWatchMenuItem(), toolBar.getWatchToggleButton()); + menuBar.getWatchMenuItem().addActionListener(wsListener); + toolBar.getWatchToggleButton().addActionListener(wsListener); + + gui.setActionMap(actionMap); + gui.setJMenuBar(menuBar); + gui.setToolBar(toolBar); + gui.setDesktopPane(desktopPane); + } + + private Map initActionMap(GCModelLoaderController controller, GCViewerGui gui, Image icon) { + Map actions = new TreeMap(); + + actions.put(ActionCommands.EXIT.toString(), new Exit(gui)); + actions.put(ActionCommands.ABOUT.toString(), new About(gui)); + actions.put(ActionCommands.SHOW_README.toString(), new ReadmeAction(gui)); + actions.put(ActionCommands.SHOW_LICENSE.toString(), new LicenseAction(gui)); + actions.put(ActionCommands.OPEN_FILE.toString(), new OpenFile(controller, gui)); + actions.put(ActionCommands.OPEN_SERIES.toString(), new OpenSeries(controller, gui)); + actions.put(ActionCommands.OPEN_URL.toString(), new OpenURL(controller, gui)); + actions.put(ActionCommands.REFRESH.toString(), new Refresh(controller, gui)); + actions.put(ActionCommands.EXPORT.toString(), new Export(gui)); + actions.put(ActionCommands.ZOOM.toString(), new Zoom(gui)); + actions.put(ActionCommands.ARRANGE.toString(), new Arrange(gui)); + actions.put(ActionCommands.WATCH.toString(), new Watch(controller, gui)); + actions.put(ActionCommands.WATCHDOGRELOADDELAY.toString(), new WatchDogReloadDelay(gui)); + + + if (OSXSupport.isOSX()) { + OSXSupport.initializeMacOSX(actions.get(ActionCommands.ABOUT.toString()), + actions.get(ActionCommands.EXIT.toString()), + null, + icon, + gui); + + if (OSXSupport.hasOSXFullScreenSupport()) { + actions.put(ActionCommands.OSX_FULLSCREEN.toString(), new OSXFullScreen(gui)); + } + } + + return actions; + } + + private JDesktopPane initDesktopPane(GCViewerGui gui, GCModelLoaderController controller) { + JDesktopPane desktopPane = new DesktopPane(); + desktopPane.setDropTarget(new DropTarget(gui, + DnDConstants.ACTION_COPY, + new FileDropTargetListener(controller, DropFlavor.OPEN))); + + return desktopPane; + } + + private GCViewerGuiMenuBar initMenuBar(Map actions, + GCViewerGui gui, + GCModelLoaderController controller) { + + ViewMenuController viewMenuController = new ViewMenuController(gui); + GCViewerGuiMenuBar menuBar = new GCViewerGuiMenuBar(); + + // file menu + menuBar.addToFileMenu(actions.get(ActionCommands.OPEN_FILE.toString())); + menuBar.addToFileMenu(actions.get(ActionCommands.OPEN_SERIES.toString())); + menuBar.addToFileMenu(actions.get(ActionCommands.OPEN_URL.toString())); + RecentGCResourcesMenu recentResourceNamesMenu = new RecentGCResourcesMenu(); + recentResourceNamesMenu.setIcon(ImageHelper.createEmptyImageIcon(20, 20)); + 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()))); + if ( ! OSXSupport.isOSX()) { + menuBar.addToFileMenu(actions.get(ActionCommands.EXIT.toString())); + } + + RecentGCResourcesMenuController recentResourceNamesMenuController + = new RecentGCResourcesMenuController(controller, recentResourceNamesMenu); + recentResourceNamesMenu.getRecentResourceNamesModel().addRecentResourceNamesListener(recentResourceNamesMenuController); + + // view menu + 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")); + menuItemShowModelMetricsPanel.setActionCommand(GCPreferences.SHOW_MODEL_METRICS_PANEL); + menuItemShowModelMetricsPanel.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.SHOW_MODEL_METRICS_PANEL, menuItemShowModelMetricsPanel); + menuBar.addSeparatorToViewMenu(); + + 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")); + menuItemShowDateStamp.setActionCommand(GCPreferences.SHOW_DATE_STAMP); + menuItemShowDateStamp.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.SHOW_DATE_STAMP, menuItemShowDateStamp); + menuBar.addSeparatorToViewMenu(); + + 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")); + menuItemAntiAlias.setActionCommand(GCPreferences.ANTI_ALIAS); + menuItemAntiAlias.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.ANTI_ALIAS, menuItemAntiAlias); + menuBar.addSeparatorToViewMenu(); + + 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)); + menuItemFullGCLines.setActionCommand(GCPreferences.FULL_GC_LINES); + menuItemFullGCLines.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.FULL_GC_LINES, menuItemFullGCLines); + + 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)); + menuItemIncGCLines.setActionCommand(GCPreferences.INC_GC_LINES); + menuItemIncGCLines.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.INC_GC_LINES, menuItemIncGCLines); + + 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)); + menuItemGcTimesLine.setActionCommand(GCPreferences.GC_TIMES_LINE); + menuItemGcTimesLine.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.GC_TIMES_LINE, menuItemGcTimesLine); + + 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)); + menuItemGcTimesRectangle.setActionCommand(GCPreferences.GC_TIMES_RECTANGLES); + menuItemGcTimesRectangle.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.GC_TIMES_RECTANGLES, menuItemGcTimesRectangle); + + 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)); + menuItemTotalMemory.setActionCommand(GCPreferences.TOTAL_MEMORY); + menuItemTotalMemory.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.TOTAL_MEMORY, menuItemTotalMemory); + + 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)); + menuItemTenuredMemory.setActionCommand(GCPreferences.TENURED_MEMORY); + menuItemTenuredMemory.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.TENURED_MEMORY, menuItemTenuredMemory); + + 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)); + menuItemYoungMemory.setActionCommand(GCPreferences.YOUNG_MEMORY); + menuItemYoungMemory.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.YOUNG_MEMORY, menuItemYoungMemory); + + 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)); + menuItemUsedMemory.setActionCommand(GCPreferences.USED_MEMORY); + menuItemUsedMemory.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.USED_MEMORY, menuItemUsedMemory); + + 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)); + menuItemUsedTenuredMemory.setActionCommand(GCPreferences.USED_TENURED_MEMORY); + menuItemUsedTenuredMemory.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.USED_TENURED_MEMORY, menuItemUsedTenuredMemory); + + 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)); + menuItemUsedYoungMemory.setActionCommand(GCPreferences.USED_YOUNG_MEMORY); + menuItemUsedYoungMemory.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.USED_YOUNG_MEMORY, menuItemUsedYoungMemory); + + 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)); + menuItemInitialMarkLevel.setActionCommand(GCPreferences.INITIAL_MARK_LEVEL); + menuItemInitialMarkLevel.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.INITIAL_MARK_LEVEL, menuItemInitialMarkLevel); + + 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)); + menuItemConcurrentGcBeginEnd.setActionCommand(GCPreferences.CONCURRENT_COLLECTION_BEGIN_END); + menuItemConcurrentGcBeginEnd.addActionListener(viewMenuController); + menuBar.addToViewMenu(GCPreferences.CONCURRENT_COLLECTION_BEGIN_END, menuItemConcurrentGcBeginEnd); + + if (OSXSupport.hasOSXFullScreenSupport()) { + // TODO No saving in properties? + menuBar.addSeparatorToViewMenu(); + menuBar.addToViewMenu(actions.get(ActionCommands.OSX_FULLSCREEN.toString())); + } + + menuBar.addToWindowMenu(actions.get(ActionCommands.ARRANGE.toString())); + menuBar.addSeparatorToWindowMenu(); + + if ( ! OSXSupport.isOSX()) { + // TODO why is the help menu not shown in OSX? -> is there never one? + menuBar.addToHelpMenu(actions.get(ActionCommands.SHOW_README.toString())); + menuBar.addToHelpMenu(actions.get(ActionCommands.SHOW_LICENSE.toString())); + menuBar.addToHelpMenu(actions.get(ActionCommands.ABOUT.toString())); + } + + // Preferences menu + menuBar.addToPreferencesMenu(actions.get(ActionCommands.WATCHDOGRELOADDELAY.toString())); + + return menuBar; + } + + private GCViewerGuiToolBar initToolBar(Map actions) { + GCViewerGuiToolBar toolBar = new GCViewerGuiToolBar(); + toolBar.setFloatable(false); + + toolBar.add(actions.get(ActionCommands.OPEN_FILE.toString())); + toolBar.add(actions.get(ActionCommands.OPEN_SERIES.toString())); + toolBar.add(actions.get(ActionCommands.OPEN_URL.toString())); + toolBar.add(actions.get(ActionCommands.EXPORT.toString())); + toolBar.add(actions.get(ActionCommands.REFRESH.toString())); + + JToggleButton watchToggle = new JToggleButton(); + watchToggle.setAction(actions.get(ActionCommands.WATCH.toString())); + watchToggle.setText(""); + toolBar.addWatchToggleButton(watchToggle); + + toolBar.addSeparator(); + + JComboBox zoomComboBox = new JComboBox(new String[] {"1%", "5%", "10%", "50%", "100%", "200%", "300%", "500%", "1000%", "5000%"}); + zoomComboBox.setSelectedIndex(2); + zoomComboBox.setAction(actions.get(ActionCommands.ZOOM.toString())); + zoomComboBox.setEditable(true); + zoomComboBox.setMaximumSize(zoomComboBox.getPreferredSize()); + toolBar.addZoomComboBox(zoomComboBox); + + toolBar.addSeparator(); + + toolBar.add(actions.get(ActionCommands.ABOUT.toString())); + + return toolBar; + } } diff --git a/src/main/java/com/tagtraum/perf/gcviewer/view/ActionCommands.java b/src/main/java/com/tagtraum/perf/gcviewer/view/ActionCommands.java index 8f7331bf..a7d78a53 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/view/ActionCommands.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/view/ActionCommands.java @@ -2,23 +2,24 @@ /** * Enumeration of all actions used in GCViewer. - * + * * @author Joerg Wuethrich *

created on: 07.02.2014

*/ public enum ActionCommands { - ABOUT, - ARRANGE, - EXIT, - EXPORT, - SHOW_LICENSE, - OPEN_FILE, - OPEN_SERIES, - OPEN_URL, - OPEN_RECENT, - OSX_FULLSCREEN, - SHOW_README, - REFRESH, - WATCH, - ZOOM + ABOUT, + ARRANGE, + EXIT, + EXPORT, + SHOW_LICENSE, + OPEN_FILE, + OPEN_SERIES, + OPEN_URL, + OPEN_RECENT, + OSX_FULLSCREEN, + SHOW_README, + REFRESH, + WATCH, + WATCHDOGRELOADDELAY, + ZOOM } 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 8d6ac43d..b9ddebb9 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/view/GCViewerGuiMenuBar.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/view/GCViewerGuiMenuBar.java @@ -16,152 +16,161 @@ import com.tagtraum.perf.gcviewer.view.util.OSXSupport; /** - * MenuBar for GCViewerGui. - * + * MenuBar for GCViewerGui. + * * @author Joerg Wuethrich *

created on: 07.02.2014

*/ public class GCViewerGuiMenuBar extends JMenuBar { - private Map viewMenuItemMap; - private JMenu fileMenu; - private RecentGCResourcesModel recentResourceNamesModel; - private JMenu viewMenu; - private JMenu windowMenu; - /** control that only one checkbox menuitem inside the window menu can be active at a time */ - private ButtonGroup windowMenuCheckBoxGroup; - private JMenu helpMenu; - - public GCViewerGuiMenuBar() { - super(); - - viewMenuItemMap = new HashMap<>(); - - fileMenu = new JMenu(LocalisationHelper.getString("main_frame_menu_file")); - fileMenu.setMnemonic(LocalisationHelper.getString("main_frame_menu_mnemonic_file").charAt(0)); - add(fileMenu); - - viewMenu = new JMenu(LocalisationHelper.getString("main_frame_menu_view")); - viewMenu.setMnemonic(LocalisationHelper.getString("main_frame_menu_mnemonic_view").charAt(0)); - add(viewMenu); - - windowMenu = new JMenu(LocalisationHelper.getString("main_frame_menu_window")); - windowMenu.setMnemonic(LocalisationHelper.getString("main_frame_menu_mnemonic_window").charAt(0)); - add(windowMenu); - windowMenuCheckBoxGroup = new ButtonGroup(); - - helpMenu = new JMenu(LocalisationHelper.getString("main_frame_menu_help")); - helpMenu.setMnemonic(LocalisationHelper.getString("main_frame_menu_mnemonic_help").charAt(0)); - if ( ! OSXSupport.isOSX()) { - add(helpMenu); - } - } - - public void addSeparatorToViewMenu() { - viewMenu.addSeparator(); - } - - public void addSeparatorToWindowMenu() { - windowMenu.addSeparator(); - } - - public void addToFileMenu(JMenuItem menuItem) { - fileMenu.add(menuItem); - } - - public void addToFileMenu(RecentGCResourcesMenu recentResourceNamesMenu) { - addToFileMenu((JMenuItem) recentResourceNamesMenu); - this.recentResourceNamesModel = recentResourceNamesMenu.getRecentResourceNamesModel(); - } - - public void addToFileMenu(Action action) { - fileMenu.add(action); - } - - public void addToHelpMenu(Action action) { - helpMenu.add(action); - } - - public void addToViewMenu(String key, JCheckBoxMenuItem menuItem) { - viewMenu.add(menuItem); - viewMenuItemMap.put(key, menuItem); - } - - public void addToViewMenu(Action action) { - viewMenu.add(action); - } - - /** - * Adds menuItem to the internal list of view menu items, but doesn't display - * this item. - * - * @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) { - viewMenuItemMap.put(key, menuItem); - } - - /** - * Add action to "window" menu. - * @param action action to be added - */ - public void addToWindowMenu(Action action) { - windowMenu.add(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) { - windowMenu.add(menuItem); - windowMenuCheckBoxGroup.add(menuItem); - } - - /** - * Remove a menuItem from the window menu including removal of the group. - * @param menuItem - */ - public void removeFromWindowMenuGroup(JMenuItem menuItem) { - windowMenu.remove(menuItem); - windowMenuCheckBoxGroup.remove(menuItem); - } - - public JMenu getFileMenu() { - return fileMenu; - } - - public RecentGCResourcesModel getRecentGCResourcesModel() { - assert recentResourceNamesModel != null : "recentResourceNamesModel is not initialized"; - return recentResourceNamesModel; - } - - public JMenu getViewMenu() { - return viewMenu; - } - - public Map getViewMenuItems() { - return Collections.unmodifiableMap(viewMenuItemMap); - } - - public JMenu getWindowMenu() { - return windowMenu; - } - - /** - * Returns MenuItem, which is associated with "WATCH" action command. - * - * @return "WATCH" menu item - */ - public JCheckBoxMenuItem getWatchMenuItem() { - for (Component component : fileMenu.getMenuComponents()) { - if (component instanceof JCheckBoxMenuItem - && ((JCheckBoxMenuItem) component).getActionCommand().equals(ActionCommands.WATCH.toString())) { - - return (JCheckBoxMenuItem) component; - } - } - - throw new IllegalStateException("StayOpenCheckBoxMenuItem with actionCommand '" + ActionCommands.WATCH + "' not found"); - } + private Map viewMenuItemMap; + private JMenu fileMenu; + private RecentGCResourcesModel recentResourceNamesModel; + private JMenu viewMenu; + private JMenu windowMenu; + /** control that only one checkbox menuitem inside the window menu can be active at a time */ + private ButtonGroup windowMenuCheckBoxGroup; + private JMenu helpMenu; + private final JMenu preferencesMenu; + + public GCViewerGuiMenuBar() { + super(); + + viewMenuItemMap = new HashMap<>(); + + fileMenu = new JMenu(LocalisationHelper.getString("main_frame_menu_file")); + fileMenu.setMnemonic(LocalisationHelper.getString("main_frame_menu_mnemonic_file").charAt(0)); + add(fileMenu); + + preferencesMenu = new JMenu(LocalisationHelper.getString("main_frame_menu_preferences")); + preferencesMenu.setMnemonic(LocalisationHelper.getString("main_frame_menu_mnemonic_preferences").charAt(0)); + add(preferencesMenu); + + viewMenu = new JMenu(LocalisationHelper.getString("main_frame_menu_view")); + viewMenu.setMnemonic(LocalisationHelper.getString("main_frame_menu_mnemonic_view").charAt(0)); + add(viewMenu); + + windowMenu = new JMenu(LocalisationHelper.getString("main_frame_menu_window")); + windowMenu.setMnemonic(LocalisationHelper.getString("main_frame_menu_mnemonic_window").charAt(0)); + add(windowMenu); + windowMenuCheckBoxGroup = new ButtonGroup(); + + helpMenu = new JMenu(LocalisationHelper.getString("main_frame_menu_help")); + helpMenu.setMnemonic(LocalisationHelper.getString("main_frame_menu_mnemonic_help").charAt(0)); + if ( ! OSXSupport.isOSX()) { + add(helpMenu); + } + } + + public void addSeparatorToViewMenu() { + viewMenu.addSeparator(); + } + + public void addSeparatorToWindowMenu() { + windowMenu.addSeparator(); + } + + public void addToFileMenu(Action action) { + fileMenu.add(action); + } + + public void addToFileMenu(JMenuItem menuItem) { + fileMenu.add(menuItem); + } + + public void addToFileMenu(RecentGCResourcesMenu recentResourceNamesMenu) { + addToFileMenu((JMenuItem) recentResourceNamesMenu); + this.recentResourceNamesModel = recentResourceNamesMenu.getRecentResourceNamesModel(); + } + + public void addToHelpMenu(Action action) { + helpMenu.add(action); + } + + public void addToViewMenu(Action action) { + viewMenu.add(action); + } + + public void addToViewMenu(String key, JCheckBoxMenuItem menuItem) { + viewMenu.add(menuItem); + viewMenuItemMap.put(key, menuItem); + } + + /** + * Adds menuItem to the internal list of view menu items, but doesn't display + * this item. + * + * @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) { + viewMenuItemMap.put(key, menuItem); + } + + /** + * Add action to "window" menu. + * @param action action to be added + */ + public void addToWindowMenu(Action action) { + windowMenu.add(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) { + windowMenu.add(menuItem); + windowMenuCheckBoxGroup.add(menuItem); + } + + public JMenu getFileMenu() { + return fileMenu; + } + + public RecentGCResourcesModel getRecentGCResourcesModel() { + assert recentResourceNamesModel != null : "recentResourceNamesModel is not initialized"; + return recentResourceNamesModel; + } + + public JMenu getViewMenu() { + return viewMenu; + } + + public Map getViewMenuItems() { + return Collections.unmodifiableMap(viewMenuItemMap); + } + + /** + * Returns MenuItem, which is associated with "WATCH" action command. + * + * @return "WATCH" menu item + */ + public JCheckBoxMenuItem getWatchMenuItem() { + for (Component component : fileMenu.getMenuComponents()) { + if (component instanceof JCheckBoxMenuItem + && ((JCheckBoxMenuItem) component).getActionCommand().equals(ActionCommands.WATCH.toString())) { + + return (JCheckBoxMenuItem) component; + } + } + + throw new IllegalStateException("StayOpenCheckBoxMenuItem with actionCommand '" + ActionCommands.WATCH + "' not found"); + } + + public JMenu getWindowMenu() { + return windowMenu; + } + + /** + * Remove a menuItem from the window menu including removal of the group. + * @param menuItem + */ + public void removeFromWindowMenuGroup(JMenuItem menuItem) { + windowMenu.remove(menuItem); + windowMenuCheckBoxGroup.remove(menuItem); + } + + public void addToPreferencesMenu(Action action) { + preferencesMenu.add(action); + } } diff --git a/src/main/java/com/tagtraum/perf/gcviewer/view/WatchDogReloadDelayView.java b/src/main/java/com/tagtraum/perf/gcviewer/view/WatchDogReloadDelayView.java new file mode 100644 index 00000000..166326c1 --- /dev/null +++ b/src/main/java/com/tagtraum/perf/gcviewer/view/WatchDogReloadDelayView.java @@ -0,0 +1,59 @@ +package com.tagtraum.perf.gcviewer.view; + +import java.awt.Dimension; +import java.awt.GridBagLayout; +import java.text.NumberFormat; + +import javax.swing.JFormattedTextField; +import javax.swing.JFormattedTextField.AbstractFormatter; +import javax.swing.JFormattedTextField.AbstractFormatterFactory; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.text.InternationalFormatter; + +import com.tagtraum.perf.gcviewer.util.LocalisationHelper; + +/** + * + * @author Àngel Ollé Blázquez + * + */ +public class WatchDogReloadDelayView { + private final JFrame parent; + private final JPanel panel; + private final JFormattedTextField reloadDelayField; + + public WatchDogReloadDelayView(JFrame parent, int delay) { + this.parent = parent; + panel = new JPanel(new GridBagLayout()); + + reloadDelayField = new JFormattedTextField(delay); + reloadDelayField.setFormatterFactory(new AbstractFormatterFactory() { + @Override + public AbstractFormatter getFormatter(JFormattedTextField tf) { + NumberFormat format = NumberFormat.getInstance(); + InternationalFormatter formatter = new InternationalFormatter(format); + formatter.setAllowsInvalid(false); + formatter.setMinimum(1); + formatter.setMaximum(Integer.MAX_VALUE); + return formatter; + } + }); + + reloadDelayField.setPreferredSize(new Dimension(50, 25)); + panel.add(reloadDelayField); + + } + + public int getReloadDelayValue() { + return (int) reloadDelayField.getValue(); + } + + public boolean showDialog() { + return JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog(parent, panel, + LocalisationHelper.getString("watchreloaddelay_dialog_title"), JOptionPane.OK_CANCEL_OPTION, + JOptionPane.PLAIN_MESSAGE); + } + +} diff --git a/src/main/resources/localStrings.properties b/src/main/resources/localStrings.properties index 17741d51..11d64933 100644 --- a/src/main/resources/localStrings.properties +++ b/src/main/resources/localStrings.properties @@ -183,10 +183,14 @@ main_frame_menu_mnemonic_file = F main_frame_menu_mnemonic_help = H +main_frame_menu_mnemonic_preferences = P + main_frame_menu_mnemonic_view = V main_frame_menu_mnemonic_window = W +main_frame_menu_preferences = Preferences + main_frame_menu_view = View main_frame_menu_window = Window @@ -271,6 +275,8 @@ main_frame_menuitem_hint_used_young_memory = Part of the young heap that is actu main_frame_menuitem_hint_watch = Watches and reloads the current file, if it changes +main_frame_menuitem_hint_watchdog = Change the watch reload delay value + main_frame_menuitem_hint_young_memory = Part of the heap that constitutes the young generation main_frame_menuitem_inc_gc_lines = Inc GC Lines @@ -335,6 +341,8 @@ main_frame_menuitem_mnemonic_used_young_memory = U main_frame_menuitem_mnemonic_watch = W +main_frame_menuitem_mnemonic_watchdog = W + main_frame_menuitem_mnemonic_young_memory = Y main_frame_menuitem_open_file = Open File @@ -365,6 +373,8 @@ main_frame_menuitem_used_young_memory = Used young Heap main_frame_menuitem_watch = Watch +main_frame_menuitem_watchdog = Watch Reload Delay + main_frame_menuitem_young_memory = Young Generation timeoffset_prompt = Log start time: @@ -374,3 +384,5 @@ urlopen_dialog_add_checkbox = Add URL to current window. urlopen_dialog_hint_add_checkbox = When checked, the new document will be added to
the current window, instead of opened in a new window. urlopen_dialog_title = Open GC URL + +watchreloaddelay_dialog_title = Watch Reload Delay diff --git a/src/main/resources/localStrings_de.properties b/src/main/resources/localStrings_de.properties index 7c372dab..8acdc478 100644 --- a/src/main/resources/localStrings_de.properties +++ b/src/main/resources/localStrings_de.properties @@ -179,10 +179,14 @@ main_frame_menu_mnemonic_file = D main_frame_menu_mnemonic_help = H +main_frame_menu_mnemonic_preferences = N + main_frame_menu_mnemonic_view = A main_frame_menu_mnemonic_window = F +main_frame_menu_preferences = Voreinstellungen + main_frame_menu_view = Ansicht main_frame_menu_window = Fenster @@ -267,6 +271,8 @@ main_frame_menuitem_hint_used_young_memory = Gr\u00F6\u00DFe des benutzten Speic main_frame_menuitem_hint_watch = Beobachtet und aktualisiert die aktuelle Datei, falls sie sich \u00E4ndert +main_frame_menuitem_hint_watchdog = \C4ndern Sie die Uhr neu laden Verz\F6gerungswert + main_frame_menuitem_hint_young_memory = Teil des Heaps, der die junge Generation ausmacht main_frame_menuitem_inc_gc_lines = Inkrementelle GC Linien @@ -330,6 +336,8 @@ main_frame_menuitem_mnemonic_used_young_memory = B main_frame_menuitem_mnemonic_watch = B +main_frame_menuitem_mnemonic_watchdog = B + main_frame_menuitem_mnemonic_young_memory = J main_frame_menuitem_open_file = \u00D6ffne Datei @@ -360,6 +368,8 @@ main_frame_menuitem_used_young_memory = Belegter junger Heap main_frame_menuitem_watch = Beobachten +main_frame_menuitem_watchdog = beobachten reload Verz\F6gerung + main_frame_menuitem_young_memory = Junge Generation timeoffset_prompt = Startzeit des Logs: @@ -369,3 +379,5 @@ urlopen_dialog_add_checkbox = Datei der aktuellen Ansicht hinzuf\u00FCgen. urlopen_dialog_hint_add_checkbox = F\u00FCgt die Datei dem aktuell ausgew\u00E4hlten Fenster als neue
GC-Ansicht hinzu, anstatt ein neues Fenster zu \u00F6ffnen. urlopen_dialog_title = \u00D6ffne GC URL + +watchreloaddelay_dialog_title = beobachten reload Verz\F6gerung diff --git a/src/main/resources/localStrings_fr.properties b/src/main/resources/localStrings_fr.properties index d7958386..4c53c54c 100644 --- a/src/main/resources/localStrings_fr.properties +++ b/src/main/resources/localStrings_fr.properties @@ -179,10 +179,14 @@ main_frame_menu_mnemonic_file = F main_frame_menu_mnemonic_help = A +main_frame_menu_mnemonic_preferences = P + main_frame_menu_mnemonic_view = V main_frame_menu_mnemonic_window = F +main_frame_menu_preferences = Pr�f�rences + main_frame_menu_view = Voir main_frame_menu_window = Fen\u00EAtre @@ -265,6 +269,8 @@ main_frame_menuitem_hint_used_young_memory = Quantit\u00E9 de m\u00E9moire effec main_frame_menuitem_hint_watch = Surveille et recharge le fichier courant si ce dernier subit des modifications +main_frame_menuitem_hint_watchdog = Modifiez la valeur de retard de rechargement de la montre + main_frame_menuitem_hint_young_memory = Par de la m\u00E9moire allou\u00E9e r\u00E9serv\u00E9e pour la nouvelle g\u00E9n\u00E9ration main_frame_menuitem_inc_gc_lines = Rep\u00E8res des GC incr\u00E9mentaux @@ -328,6 +334,8 @@ main_frame_menuitem_mnemonic_used_young_memory = U main_frame_menuitem_mnemonic_watch = S +main_frame_menuitem_mnemonic_watchdog = S + main_frame_menuitem_mnemonic_young_memory = N main_frame_menuitem_open_file = Ouvrir un fichier @@ -356,6 +364,8 @@ main_frame_menuitem_used_young_memory = M\u00E9moire nouvelle utilis\u00E9e main_frame_menuitem_watch = Surveiller +main_frame_menuitem_watchdog = D�lai de rechargement de surveiller + main_frame_menuitem_young_memory = Nouvelle g\u00E9n\u00E9ration timeoffset_prompt = Date d\u00E9marrage du journal : @@ -365,3 +375,5 @@ urlopen_dialog_add_checkbox = Ajouter l''URL \u00E0 la fen\u00EAtre courante. urlopen_dialog_hint_add_checkbox = Si coch\u00E9, le nouveau journal sera ajout\u00E9
\u00E0 la fen\u00EAtre courante, au lieu d''\u00EAtre ouvert dans une nouvelle fen\u00EAtre. urlopen_dialog_title = Ouvrir l''URL d''un journal + +watchreloaddelay_dialog_title = D�lai de rechargement de surveiller diff --git a/src/main/resources/localStrings_sv.properties b/src/main/resources/localStrings_sv.properties index 43410263..f4803aae 100644 --- a/src/main/resources/localStrings_sv.properties +++ b/src/main/resources/localStrings_sv.properties @@ -181,8 +181,12 @@ main_frame_menu_mnemonic_help = H main_frame_menu_mnemonic_view = V +main_frame_menu_mnemonic_preferences = P + main_frame_menu_mnemonic_window = F +main_frame_menu_preferences = Preferenser + main_frame_menu_view = Visa main_frame_menu_window = F\u00F6nster @@ -265,6 +269,8 @@ main_frame_menuitem_hint_used_young_memory = Visar hur mycket minne som \u00E4r main_frame_menuitem_hint_watch = Bevakar och laddar om nuvarande fil vid f\u00F6r\u00E4ndring +main_frame_menuitem_hint_watchdog = \C4ndra klockan reload f\F6rdr\F6jningsv\E4rdet + main_frame_menuitem_hint_young_memory = Del av heapen som utg\u00F6r den unga (young) generationen main_frame_menuitem_inc_gc_lines = Inkrementell GC (linje) @@ -328,6 +334,8 @@ main_frame_menuitem_mnemonic_used_young_memory = A main_frame_menuitem_mnemonic_watch = W +main_frame_menuitem_mnemonic_watchdog = W + main_frame_menuitem_mnemonic_young_memory = Y main_frame_menuitem_open_file = \u00D6ppna @@ -356,6 +364,8 @@ main_frame_menuitem_used_young_memory = Anv\u00E4nt yngre (young) minne main_frame_menuitem_watch = Bevaka +main_frame_menuitem_watchdog = Bevaka reload f\F6rdr\F6jning + main_frame_menuitem_young_memory = Yngre (Young) generationen timeoffset_prompt = Logg-starttid: @@ -365,3 +375,5 @@ urlopen_dialog_add_checkbox = L\u00E4gg till URL till aktuellt f\u00F6nster urlopen_dialog_hint_add_checkbox = Vid markering s\u00E5 kommer det nya dokumentett att l\u00E4ggas
till i aktuellt f\u00F6nster, annars \u00F6ppnas ett nytt urlopen_dialog_title = \u00D6ppna GC-URL + +watchreloaddelay_dialog_title = Bevaka reload f\F6rdr\F6jning