/*
* MainMenu.java
*
* This file is part of TDA - Thread Dump Analysis Tool.
*
* TDA is free software; you can redistribute it and/or modify
* it under the terms of the Lesser GNU General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* TDA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* Lesser GNU General Public License for more details.
*
* TDA should have received a copy of the Lesser GNU General Public License
* along with Foobar; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* $Id: MainMenu.java,v 1.38 2008-09-18 14:44:10 irockel Exp $
*/
package com.pironet.tda;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import com.pironet.tda.utils.PrefManager;
import com.pironet.tda.utils.ResourceManager;
/**
* provides instances of the main menu (though there is typically only one).
*
* @author irockel
*/
public class MainMenu extends JMenuBar {
private JMenuItem closeMenuItem;
private JMenuItem longMenuItem;
private JMenuItem recentFilesMenu;
private JMenuItem recentSessionsMenu;
private JMenuItem closeAllMenuItem;
private JMenuItem expandAllMenuItem;
private JMenuItem collapseAllMenuItem;
private TDA listener;
private JToolBar toolBar;
private JButton closeToolBarButton;
private JMenuItem saveSessionMenuItem;
private JButton findLRThreadsButton;
private JButton expandButton;
private JButton collapseButton;
/**
* Creates a new instance of the MainMenu
*/
public MainMenu(TDA listener) {
this.listener = listener;
createMenuBar();
}
/**
* get the close file menu item
*/
public JMenuItem getCloseMenuItem() {
return(closeMenuItem);
}
/**
* get the close file menu item
*/
public JButton getCloseToolBarButton() {
return(closeToolBarButton);
}
/**
* get the close file menu item
*/
public JButton getExpandButton() {
return(expandButton);
}
/**
* get the close file menu item
*/
public JButton getCollapseButton() {
return(collapseButton);
}
/**
* get the close file menu item
*/
public JButton getFindLRThreadsToolBarButton() {
return(findLRThreadsButton);
}
/**
* get the close all file menu item
*/
public JMenuItem getCloseAllMenuItem() {
return(closeAllMenuItem);
}
public JMenuItem getLongMenuItem() {
return(longMenuItem);
}
/**
* get the close all file menu item
*/
public JMenuItem getExpandAllMenuItem() {
return(expandAllMenuItem);
}
public JMenuItem getCollapseAllMenuItem() {
return(collapseAllMenuItem);
}
public JMenuItem getSaveSessionMenuItem() {
return(saveSessionMenuItem);
}
/**
* create the top level menu bar
*/
private void createMenuBar() {
add(createFileMenu());
add(createViewMenu());
add(createToolsMenu());
add(createHelpMenu());
}
private JMenu createFileMenu() {
JMenuItem menuItem;
JMenu menu;
//Build the first menu.
menu = new JMenu(ResourceManager.translate("file.menu"));
menu.setMnemonic(KeyStroke.getKeyStroke(ResourceManager.translate("file.menu.mnem")).getKeyCode());
menu.getAccessibleContext().setAccessibleDescription(ResourceManager.translate("file.menu.description"));
menu.addMenuListener(listener);
//a group of JMenuItems
menuItem = new JMenuItem(ResourceManager.translate("file.open"),
KeyStroke.getKeyStroke(ResourceManager.translate("file.open.mnem")).getKeyCode());
menuItem.setIcon(TDA.createImageIcon("FileOpen.gif"));
menuItem.setAccelerator(KeyStroke.getKeyStroke(
ResourceManager.translate("file.open.accel")));
menuItem.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("file.open.description"));
menuItem.addActionListener(listener);
menu.add(menuItem);
closeMenuItem = new JMenuItem(ResourceManager.translate("file.close"),
KeyStroke.getKeyStroke(ResourceManager.translate("file.close.mnem")).getKeyCode());
closeMenuItem.setIcon(TDA.createImageIcon("CloseFile.gif"));
closeMenuItem.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("file.open.description"));
closeMenuItem.addActionListener(listener);
closeMenuItem.setEnabled(false);
menu.add(closeMenuItem);
closeAllMenuItem = new JMenuItem(ResourceManager.translate("file.closeall"),
KeyStroke.getKeyStroke(ResourceManager.translate("file.closeall.mnem")).getKeyCode());
closeAllMenuItem.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("file.closeall.description"));
closeAllMenuItem.addActionListener(listener);
closeAllMenuItem.setEnabled(false);
menu.add(closeAllMenuItem);
createRecentFileMenu();
menu.add(recentFilesMenu);
menu.addSeparator();
menuItem = new JMenuItem(ResourceManager.translate("file.getfromclipboard"),
KeyStroke.getKeyStroke(ResourceManager.translate("file.getfromclipboard.mnem")).getKeyCode());
menuItem.setIcon(TDA.createImageIcon("Empty.gif"));
menuItem.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("file.getfromclipboard.description"));
menuItem.setAccelerator(KeyStroke.getKeyStroke(
ResourceManager.translate("file.getfromclipboard.accel")));
menuItem.addActionListener(listener);
menu.add(menuItem);
menu.addSeparator();
saveSessionMenuItem = new JMenuItem(ResourceManager.translate("file.savesession"),
KeyStroke.getKeyStroke(ResourceManager.translate("file.savesession.mnem")).getKeyCode());
saveSessionMenuItem.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("file.savesession.description"));
saveSessionMenuItem.addActionListener(listener);
menu.add(saveSessionMenuItem);
saveSessionMenuItem.setEnabled(false);
menuItem = new JMenuItem(ResourceManager.translate("file.opensession"),
KeyStroke.getKeyStroke(ResourceManager.translate("file.opensession.mnem")).getKeyCode());
menuItem.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("file.opensession.description"));
menuItem.addActionListener(listener);
menu.add(menuItem);
createRecentSessionsMenu();
menu.add(recentSessionsMenu);
menu.addSeparator();
menuItem = new JMenuItem(ResourceManager.translate("file.exit"),
KeyStroke.getKeyStroke(ResourceManager.translate("file.exit.mnem")).getKeyCode());
menuItem.setAccelerator(KeyStroke.getKeyStroke(
ResourceManager.translate("file.exit.accel")));
menuItem.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("file.exit.description"));
menuItem.addActionListener(listener);
menu.add(menuItem);
return(menu);
}
/**
* Build tools menu in the menu bar.
*/
private JMenu createViewMenu() {
JMenuItem menuItem;
JMenu menu;
menu = new JMenu(ResourceManager.translate("view.menu"));
menu.setMnemonic(KeyStroke.getKeyStroke(ResourceManager.translate("view.menu.mnem")).getKeyCode());
menu.getAccessibleContext().setAccessibleDescription(ResourceManager.translate("view.menu.description"));
add(menu);
expandAllMenuItem = new JMenuItem(ResourceManager.translate("view.expand"),
KeyStroke.getKeyStroke(ResourceManager.translate("view.expand.mnem")).getKeyCode());
expandAllMenuItem.setIcon(TDA.createImageIcon("Expanded.gif"));
expandAllMenuItem.setAccelerator(KeyStroke.getKeyStroke(
ResourceManager.translate("view.expand.accel")));
expandAllMenuItem.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("view.expand.description"));
expandAllMenuItem.addActionListener(listener);
expandAllMenuItem.setEnabled(false);
menu.add(expandAllMenuItem);
collapseAllMenuItem = new JMenuItem(ResourceManager.translate("view.collapse"),
KeyStroke.getKeyStroke(ResourceManager.translate("view.collapse.mnem")).getKeyCode());
collapseAllMenuItem.setIcon(TDA.createImageIcon("Collapsed.gif"));
collapseAllMenuItem.setAccelerator(KeyStroke.getKeyStroke(
ResourceManager.translate("view.collapse.accel")));
collapseAllMenuItem.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("view.collapse.description"));
collapseAllMenuItem.setEnabled(false);
collapseAllMenuItem.addActionListener(listener);
menu.add(collapseAllMenuItem);
menu.addSeparator();
menuItem = new JCheckBoxMenuItem(ResourceManager.translate("view.showtoolbar"), PrefManager.get().getShowToolbar());
menuItem.setMnemonic(KeyStroke.getKeyStroke(ResourceManager.translate("view.showtoolbar.mnem")).getKeyCode());
menuItem.addActionListener(listener);
menuItem.setIcon(TDA.createImageIcon("Empty.gif"));
menu.add(menuItem);
return(menu);
}
/**
* Build tools menu in the menu bar.
*/
private JMenu createToolsMenu() {
JMenuItem menuItem;
JMenu menu;
menu = new JMenu(ResourceManager.translate("tools.menu"));
menu.setMnemonic(KeyStroke.getKeyStroke(ResourceManager.translate("tools.menu.mnem")).getKeyCode());
menu.getAccessibleContext().setAccessibleDescription(ResourceManager.translate("tools.menu.description"));
add(menu);
longMenuItem = new JMenuItem(ResourceManager.translate("tools.longrunning"),
KeyStroke.getKeyStroke(ResourceManager.translate("tools.longrunning.mnem")).getKeyCode());
longMenuItem.setIcon(TDA.createImageIcon("FindLRThreads.gif"));
longMenuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_L, ActionEvent.ALT_MASK));
longMenuItem.getAccessibleContext().setAccessibleDescription(
"Find long running threads...");
longMenuItem.addActionListener(listener);
longMenuItem.setEnabled(false);
menu.add(longMenuItem);
menu.addSeparator();
menuItem = new JMenuItem("Thread Filters",
KeyEvent.VK_F);
menuItem.setIcon(TDA.createImageIcon("Filters.gif"));
menuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_F, ActionEvent.ALT_MASK));
menuItem.getAccessibleContext().setAccessibleDescription(
"Setup Filter");
menuItem.addActionListener(listener);
menu.add(menuItem);
menuItem = new JMenuItem("Categories",
KeyEvent.VK_F);
menuItem.setIcon(TDA.createImageIcon("CustomCat.gif"));
menuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_G, ActionEvent.ALT_MASK));
menuItem.getAccessibleContext().setAccessibleDescription(
"Setup Categories");
menuItem.addActionListener(listener);
menu.add(menuItem);
menu.addSeparator();
menuItem = new JMenuItem(ResourceManager.translate("file.preferences"),
KeyStroke.getKeyStroke(ResourceManager.translate("file.preferences.mnem")).getKeyCode());
menuItem.setIcon(TDA.createImageIcon("Preferences.gif"));
menuItem.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("file.preferences.description"));
menuItem.addActionListener(listener);
menu.add(menuItem);
/*menu.addSeparator();
menuItem = new JMenuItem("Load Configuration Set...",
KeyEvent.VK_F);
menuItem.setIcon(TDA.createImageIcon("Empty.gif"));
menuItem.getAccessibleContext().setAccessibleDescription(
"Load Configuration Set");
menuItem.addActionListener(listener);
menu.add(menuItem);*/
return(menu);
}
/**
* Build help menu in the menu bar.
*/
private JMenu createHelpMenu() {
JMenuItem menuItem;
JMenu menu;
menu = new JMenu(ResourceManager.translate("help.menu"));
menu.setMnemonic(KeyStroke.getKeyStroke(ResourceManager.translate("help.menu.mnem")).getKeyCode());
menu.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("help.menu.description"));
menuItem = new JMenuItem(ResourceManager.translate("help.contents"),
KeyStroke.getKeyStroke(ResourceManager.translate("help.contents.mnem")).getKeyCode());
menuItem.setIcon(TDA.createImageIcon("Help.gif"));
menuItem.getAccessibleContext().setAccessibleDescription(
ResourceManager.translate("help.contents.description"));
menuItem.setAccelerator(KeyStroke.getKeyStroke(
ResourceManager.translate("help.contents.accel")));
menuItem.addActionListener(listener);
menu.add(menuItem);
menuItem = new JMenuItem("Release Notes",null);
menuItem.getAccessibleContext().setAccessibleDescription(
"Release Notes");
menuItem.addActionListener(listener);
menu.add(menuItem);
menuItem = new JMenuItem("License",null);
menuItem.getAccessibleContext().setAccessibleDescription(
"TDA Distribution License");
menuItem.addActionListener(listener);
menu.add(menuItem);
menu.addSeparator();
menuItem = new JMenuItem("About TDA",
KeyEvent.VK_A);
menuItem.setIcon(TDA.createImageIcon("About.gif"));
menuItem.getAccessibleContext().setAccessibleDescription(
"About Thread Dump Analyzer");
menuItem.addActionListener(listener);
menu.add(menuItem);
return(menu);
}
/**
* create the menu for opening recently selected files.
*/
private void createRecentFileMenu() {
String[] recentFiles = PrefManager.get().getRecentFiles();
recentFilesMenu = new JMenu(ResourceManager.translate("file.recentfiles"));
recentFilesMenu.setMnemonic(KeyStroke.getKeyStroke(ResourceManager.translate("file.recentfiles.mnem")).getKeyCode());
if(recentFiles.length > 1) {
for(int i = 1; i < recentFiles.length; i++) {
if(!recentFiles[i].equals("")) {
JMenuItem item = new JMenuItem(recentFiles[i]);
((JMenu) recentFilesMenu).add(item);
item.addActionListener(listener);
}
}
} else {
recentFilesMenu.setEnabled(false);
}
}
/**
* create the menu for opening recently selected files.
*/
private void createRecentSessionsMenu() {
String[] recentFiles = PrefManager.get().getRecentSessions();
recentSessionsMenu = new JMenu(ResourceManager.translate("file.recentsessions"));
recentSessionsMenu.setMnemonic(KeyStroke.getKeyStroke(ResourceManager.translate("file.recentsessions.mnem")).getKeyCode());
if(recentFiles.length > 1) {
for(int i = 1; i < recentFiles.length; i++) {
if(!recentFiles[i].equals("")) {
JMenuItem item = new JMenuItem(recentFiles[i]);
((JMenu) recentSessionsMenu).add(item);
item.addActionListener(listener);
}
}
} else {
recentSessionsMenu.setEnabled(false);
}
}
/**
* creates and returns a toolbar for the main menu with most
* important entries.
* @return toolbar instance, is created on demand.
*/
public JToolBar getToolBar() {
if(toolBar == null) {
createToolBar();
}
return toolBar;
}
/**
* create a toolbar showing the most important main menu entries.
*/
private void createToolBar() {
toolBar = new JToolBar("TDA Toolbar");
if(listener.runningAsJConsolePlugin || listener.runningAsVisualVMPlugin) {
toolBar.add(createToolBarButton("Request a Thread Dump", "FileOpen.gif"));
toolBar.setFloatable(false);
} else {
toolBar.add(createToolBarButton("Open Logfile", "FileOpen.gif"));
closeToolBarButton = createToolBarButton("Close selected Logfile", "CloseFile.gif");
closeToolBarButton.setEnabled(false);
toolBar.add(closeToolBarButton);
}
toolBar.addSeparator();
toolBar.add(createToolBarButton("Preferences", "Preferences.gif"));
toolBar.addSeparator();
expandButton = createToolBarButton("Expand all nodes", "Expanded.gif");
expandButton.setEnabled(false);
toolBar.add(expandButton);
collapseButton = createToolBarButton("Collapse all nodes", "Collapsed.gif");
collapseButton.setEnabled(false);
toolBar.add(collapseButton);
toolBar.addSeparator();
findLRThreadsButton = createToolBarButton("Find long running threads", "FindLRThreads.gif");
findLRThreadsButton.setEnabled(false);
toolBar.add(findLRThreadsButton);
toolBar.add(createToolBarButton("Filters", "Filters.gif"));
toolBar.add(createToolBarButton("Custom Categories", "CustomCat.gif"));
toolBar.addSeparator();
toolBar.add(createToolBarButton("Help","Help.gif"));
}
/**
* create a toolbar button with tooltip and given icon.
* @param text tooltip text
* @param fileName filename for the icon to load
* @return toolbar button
*/
private JButton createToolBarButton(String text, String fileName) {
JButton toolbarButton = new JButton(TDA.createImageIcon(fileName));
if(text != null) {
toolbarButton.setToolTipText(text);
}
toolbarButton.addActionListener(listener);
toolbarButton.setFocusable(false);
return(toolbarButton);
}
/**
* disable all menu items
*/
public void disableMenu() {
this.getLongMenuItem().setEnabled(false);
this.getCloseMenuItem().setEnabled(false);
this.getSaveSessionMenuItem().setEnabled(false);
this.getCloseToolBarButton().setEnabled(false);
this.getExpandButton().setEnabled(false);
this.getCollapseButton().setEnabled(false);
this.getFindLRThreadsToolBarButton().setEnabled(false);
this.getCloseAllMenuItem().setEnabled(false);
this.getExpandAllMenuItem().setEnabled(false);
this.getCollapseAllMenuItem().setEnabled(false);
}
/**
* Enable all menu items
*/
public void enableMenu() {
this.getLongMenuItem().setEnabled(true);
this.getSaveSessionMenuItem().setEnabled(true);
this.getExpandButton().setEnabled(true);
this.getCollapseButton().setEnabled(true);
this.getFindLRThreadsToolBarButton().setEnabled(true);
this.getCloseAllMenuItem().setEnabled(true);
this.getExpandAllMenuItem().setEnabled(true);
this.getCollapseAllMenuItem().setEnabled(true);
}
}