psmith 2003/06/16 20:58:05
Modified: src/java/org/apache/log4j/chainsaw
ChainsawToolBarAndMenus.java
Log:
Modified the show Receivers action to show all the receivers
in a Tree component, together with whether they are active or not.
Currently only really renderes SocketReceivers correctly while I
nut out some UI elements first.
WIP.
Revision Changes Path
1.34 +1228 -773
jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
Index: ChainsawToolBarAndMenus.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- ChainsawToolBarAndMenus.java 16 Jun 2003 07:24:40 -0000 1.33
+++ ChainsawToolBarAndMenus.java 17 Jun 2003 03:58:05 -0000 1.34
@@ -46,7 +46,6 @@
* Apache Software Foundation, please see <http://www.apache.org/>.
*
*/
-
/*
* Created on May 3, 2003
*
@@ -55,25 +54,13 @@
*/
package org.apache.log4j.chainsaw;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent;
-import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent;
-import org.apache.log4j.chainsaw.prefs.SettingsListener;
-import org.apache.log4j.chainsaw.prefs.SettingsManager;
-import org.apache.log4j.helpers.LogLog;
-import org.apache.log4j.net.MulticastReceiver;
-import org.apache.log4j.net.SocketReceiver;
-import org.apache.log4j.net.UDPReceiver;
-import org.apache.log4j.plugins.PluginRegistry;
-import org.apache.log4j.plugins.Receiver;
-
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
+import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -83,18 +70,17 @@
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
-
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
+import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
@@ -114,6 +100,7 @@
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
+import javax.swing.JTree;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
@@ -128,6 +115,24 @@
import javax.swing.event.DocumentListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeCellRenderer;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreeNode;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent;
+import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent;
+import org.apache.log4j.chainsaw.prefs.SettingsListener;
+import org.apache.log4j.chainsaw.prefs.SettingsManager;
+import org.apache.log4j.helpers.LogLog;
+import org.apache.log4j.net.MulticastReceiver;
+import org.apache.log4j.net.SocketReceiver;
+import org.apache.log4j.net.UDPReceiver;
+import org.apache.log4j.plugins.PluginRegistry;
+import org.apache.log4j.plugins.Receiver;
/**
@@ -135,44 +140,53 @@
* @author Paul Smith <[EMAIL PROTECTED]>
*
*/
-class ChainsawToolBarAndMenus implements ChangeListener, SettingsListener {
+class ChainsawToolBarAndMenus implements ChangeListener, SettingsListener
+{
+ //~ Static fields/initializers ==============================================
+
private static final String SETTING_RESPONSIVENESS = "Responsiveness";
private static final String SETTING_TAB_PLACEMENT = "tab.placement";
- private LogUI logui;
- private final JToolBar toolbar;
- private final JMenuBar menuBar;
- private final JMenu viewMenu = new JMenu("View");
- private final Collection lookAndFeelMenus = new ArrayList();
- private final Action lockToolbarAction;
- private final Action toggleToolbarAction;
- private final Action pauseAction;
+
+ //~ Instance fields =========================================================
+
+ final JTextField findTextField;
private final Action clearAction;
private final Action closeAction;
- private final Action toggleDetailPaneAction;
private final Action findNextAction;
+ private final Action lockToolbarAction;
+ private final Action pauseAction;
private final Action showPreferencesAction;
- private final Action undockAction;
private final Action showReceiversAction;
+ private final Action toggleDetailPaneAction;
+ private final Action toggleToolbarAction;
+ private final Action undockAction;
+ private final Collection lookAndFeelMenus = new ArrayList();
private final FileMenu fileMenu;
- private final SmallToggleButton pauseButton = new SmallToggleButton();
- private final SmallToggleButton detailPaneButton = new SmallToggleButton();
- private final SmallButton clearButton = new SmallButton();
- private final JSlider responsiveSlider;
- final JTextField findTextField;
- private final JRadioButtonMenuItem tabsTop = new JRadioButtonMenuItem("Top");
private final JCheckBoxMenuItem toggleStatusBarCheck =
new JCheckBoxMenuItem();
- private final JRadioButtonMenuItem tabsBottom =
- new JRadioButtonMenuItem("Bottom");
+ private final JMenu viewMenu = new JMenu("View");
+ private final JMenuBar menuBar;
private final JRadioButtonMenuItem levelDisplayIcon =
new JRadioButtonMenuItem("Icon");
private final JRadioButtonMenuItem levelDisplayText =
new JRadioButtonMenuItem("Text");
- private String levelDisplay = ChainsawConstants.LEVEL_DISPLAY_ICONS;
+ private final JRadioButtonMenuItem tabsBottom =
+ new JRadioButtonMenuItem("Bottom");
+ private final JRadioButtonMenuItem tabsTop = new JRadioButtonMenuItem("Top");
+ private final JSlider responsiveSlider;
+ private final JToolBar toolbar;
+ private LogUI logui;
+ private final SmallButton clearButton = new SmallButton();
+ private final SmallToggleButton detailPaneButton = new SmallToggleButton();
+ private final SmallToggleButton pauseButton = new SmallToggleButton();
private String lastFind = "";
+ private String levelDisplay = ChainsawConstants.LEVEL_DISPLAY_ICONS;
private final Action[] logPanelSpecificActions;
- ChainsawToolBarAndMenus(final LogUI logui) {
+ //~ Constructors ============================================================
+
+ ChainsawToolBarAndMenus(final LogUI logui)
+ {
this.logui = logui;
toolbar = new JToolBar(JToolBar.HORIZONTAL);
menuBar = new JMenuBar();
@@ -194,337 +208,381 @@
createToolbar();
logPanelSpecificActions =
- new Action[] {
+ new Action[]
+ {
pauseAction, findNextAction, clearAction, fileMenu.getFileSaveAction(),
toggleDetailPaneAction, showPreferencesAction, undockAction
};
}
+ //~ Methods =================================================================
+
/**
- * @return
+ * DOCUMENT ME!
+ *
+ * @param event DOCUMENT ME!
*/
- private Action createShowReceiversAction() {
- final JDialog receiversWindow = new JDialog(logui, "Receivers", false);
-
- // TODO Change this into a TreeModel, looks nicer by Receiver type
- final ReceiversTableModel model = new ReceiversTableModel();
- model.refresh();
-
- final JTable table = new JTable();
- table.setModel(model);
- table.getColumnModel().getColumn(0).setCellRenderer(
- new DefaultTableCellRenderer() {
- public void setValue(Object value) {
- // TODO Other receiver types/refactor
- if (value instanceof SocketReceiver) {
- SocketReceiver s = (SocketReceiver) value;
- super.setValue(s.getName() + "::" + s.getPort());
- } else if (value instanceof UDPReceiver) {
- UDPReceiver u = (UDPReceiver) value;
- super.setValue(u.getName() + "::" + u.getPort());
- } else if (value instanceof MulticastReceiver) {
- MulticastReceiver m = (MulticastReceiver) value;
- super.setValue(m.getName() + "::" + m.getPort());
- } else {
- super.setValue(value);
- }
- }
-
- private final Color background = new Color(255, 255, 254);
- private final Color COLOR_ODD = new Color(230, 230, 230);
-
- public Component getTableCellRendererComponent(
- JTable table, Object value, boolean isSelected, boolean hasFocus,
- int row, int column) {
- Component c =
- super.getTableCellRendererComponent(
- table, value, isSelected, hasFocus, row, column);
-
- if ((row % 2) != 0) {
- c.setBackground(COLOR_ODD);
- } else {
- c.setBackground(background);
- }
-
- return c;
- }
- });
-
- table.setCellSelectionEnabled(false);
- table.setRowSelectionAllowed(false);
- table.setShowGrid(false);
- table.setColumnSelectionAllowed(false);
- table.setEnabled(false);
+ public void loadSettings(LoadSettingsEvent event)
+ {
+ try
+ {
+ levelDisplay = event.getSetting(ChainsawConstants.LEVEL_DISPLAY);
- final Container container = receiversWindow.getContentPane();
- container.add(new JScrollPane(table));
- receiversWindow.setSize(320, 240);
+ if (levelDisplay.equals(ChainsawConstants.LEVEL_DISPLAY_ICONS))
+ {
+ levelDisplayIcon.setSelected(true);
+ }
+ else
+ {
+ levelDisplayText.setSelected(true);
+ }
- final Action action =
- new AbstractAction("Show Receivers...") {
- public void actionPerformed(ActionEvent arg0) {
- model.refresh();
+ final int responsiveness =
+ event.asInt(ChainsawToolBarAndMenus.SETTING_RESPONSIVENESS);
+ final int tabPlacement =
+ event.asInt(ChainsawToolBarAndMenus.SETTING_TAB_PLACEMENT);
- if (!receiversWindow.isVisible()) {
- receiversWindow.setVisible(true);
+ SwingUtilities.invokeLater(
+ new Runnable()
+ {
+ public void run()
+ {
+ responsiveSlider.setValue(responsiveness);
+ logui.tabbedPane.setTabPlacement(tabPlacement);
+ scanState();
}
-
- receiversWindow.setLocationRelativeTo(logui);
- }
- };
-
- action.putValue(Action.MNEMONIC_KEY,new Integer(KeyEvent.VK_E));
- action.putValue(
- Action.SHORT_DESCRIPTION,
- "Shows the currently configured Log4j Receivers");
-
- return action;
+ });
+ }
+ catch (NullPointerException e)
+ {
+ LogLog.error("error decoding setting", e);
+ }
}
- JToolBar getToolbar() {
- return toolbar;
- }
+ /**
+ * DOCUMENT ME!
+ *
+ * @param event DOCUMENT ME!
+ */
+ public void saveSettings(SaveSettingsEvent event)
+ {
+ event.saveSetting(
+ ChainsawToolBarAndMenus.SETTING_RESPONSIVENESS,
+ responsiveSlider.getValue());
- JMenuBar getMenubar() {
- return menuBar;
+ event.saveSetting(
+ ChainsawToolBarAndMenus.SETTING_TAB_PLACEMENT,
+ logui.tabbedPane.getTabPlacement());
+
+ event.saveSetting(ChainsawConstants.LEVEL_DISPLAY, levelDisplay);
}
- public void stateChanged(ChangeEvent e) {
+ /**
+ * DOCUMENT ME!
+ */
+ public void stateChange()
+ {
scanState();
}
- public void stateChange() {
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void stateChanged(ChangeEvent e)
+ {
scanState();
}
- private void scanState() {
- switch (logui.tabbedPane.getTabPlacement()) {
- case SwingConstants.TOP:
- tabsTop.setSelected(true);
+ JMenuBar getMenubar()
+ {
+ return menuBar;
+ }
- break;
+ JToolBar getToolbar()
+ {
+ return toolbar;
+ }
- case SwingConstants.BOTTOM:
- tabsBottom.setSelected(true);
+ JToolBar createDockwindowToolbar(
+ final JFrame dockablePanel, final LogUI.LogPanel logPanel)
+ {
+ final JToolBar toolbar = new JToolBar();
+ toolbar.setFloatable(false);
- break;
- }
+ final String ident = dockablePanel.getTitle();
+ final Action dockPauseAction =
+ new AbstractAction("Pause")
+ {
+ public void actionPerformed(ActionEvent evt)
+ {
+ System.out.println("trying to pause '" + ident + "'");
- toggleStatusBarCheck.setSelected(logui.isStatusBarVisible());
+ if (!logui.pausedList.contains(ident))
+ {
+ logui.pausedList.add(ident);
+ }
+ else
+ {
+ logui.pausedList.remove(ident);
+ }
+ }
+ };
- /**
- * We get the currently selected LogPanel, and if null, deactivate some
- * actions
- */
- LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
+ dockPauseAction.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_P));
+ dockPauseAction.putValue(
+ Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F12"));
+ dockPauseAction.putValue(
+ Action.SHORT_DESCRIPTION,
+ "Halts the display, while still allowing events to stream in the background");
+ dockPauseAction.putValue(
+ Action.SMALL_ICON, new ImageIcon(ChainsawIcons.PAUSE));
- boolean activateLogPanelActions = true;
+ final SmallToggleButton dockPauseButton =
+ new SmallToggleButton(dockPauseAction);
+ dockPauseButton.setText("");
- if (logPanel == null) {
- activateLogPanelActions = false;
- logui.getStatusBar().clear();
- findTextField.setEnabled(false);
+ if (logui.pausedList.contains(ident))
+ {
+ dockPauseButton.getModel().setSelected(true);
+ }
+ else
+ {
+ dockPauseButton.getModel().setSelected(false);
+ }
- if (logui.tabbedPane.containsWelcomePanel()) {
- closeAction.setEnabled(true);
- } else {
- closeAction.setEnabled(false);
- }
- } else {
- fileMenu.getFileSaveAction().setEnabled(true);
- findTextField.setEnabled(true);
+ dockPauseButton.setText("");
- if (logui.pausedList.contains(logPanel.getIdentifier())) {
- pauseButton.getModel().setSelected(true);
- logui.getStatusBar().setPaused(true);
- } else {
- pauseButton.getModel().setSelected(false);
- logui.getStatusBar().setPaused(false);
- }
+ toolbar.add(dockPauseButton);
- detailPaneButton.getModel().setSelected(logPanel.isDetailPaneVisible());
- }
+ Action dockShowPrefsAction =
+ new AbstractAction("")
+ {
+ public void actionPerformed(ActionEvent arg0)
+ {
+ logPanel.showPreferences();
+ }
+ };
- for (int i = 0; i < logPanelSpecificActions.length; i++) {
- logPanelSpecificActions[i].setEnabled(activateLogPanelActions);
- }
+ dockShowPrefsAction.putValue(
+ Action.SHORT_DESCRIPTION,
+ showPreferencesAction.getValue(Action.SHORT_DESCRIPTION));
+ dockShowPrefsAction.putValue(
+ Action.SMALL_ICON, showPreferencesAction.getValue(Action.SMALL_ICON));
- String currentLookAndFeel =
- UIManager.getLookAndFeel().getClass().getName();
- String currentLookAndFeelName = UIManager.getLookAndFeel().getName();
+ toolbar.add(new SmallButton(dockShowPrefsAction));
+ toolbar.addSeparator();
- for (Iterator iter = lookAndFeelMenus.iterator(); iter.hasNext();) {
- JRadioButtonMenuItem element = (JRadioButtonMenuItem) iter.next();
+ final Action undockedClearAction =
+ new AbstractAction("Clear")
+ {
+ public void actionPerformed(ActionEvent arg0)
+ {
+ logPanel.clearModel();
+ }
+ };
- if (element.getText().equals(currentLookAndFeelName)) {
- element.setSelected(true);
- } else {
- element.setSelected(false);
- }
- }
- }
+ undockedClearAction.putValue(
+ Action.SMALL_ICON, new ImageIcon(ChainsawIcons.DELETE));
+ undockedClearAction.putValue(
+ Action.SHORT_DESCRIPTION, "Removes all the events from the current view");
- private void find(boolean next) {
- LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
+ final SmallButton dockClearButton = new SmallButton(undockedClearAction);
+ dockClearButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+ KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, InputEvent.CTRL_MASK),
+ undockedClearAction.getValue(Action.NAME));
+ dockClearButton.getActionMap().put(
+ undockedClearAction.getValue(Action.NAME), undockedClearAction);
- if (logPanel != null) {
- localFind(next, logPanel, findTextField);
- }
- }
+ dockClearButton.setText("");
+ toolbar.add(dockClearButton);
+ toolbar.addSeparator();
- private void localFind(
- boolean next, final LogUI.LogPanel logPanel,
- final JTextField theFindTextField) {
- if (!theFindTextField.getText().equals("")) {
- if (
- (lastFind.length() == 0)
- || (lastFind.length() > theFindTextField.getText().length())) {
- logPanel.findFromTop(theFindTextField.getText());
- } else {
- if (next) {
- logPanel.findNext(theFindTextField.getText());
- } else {
- logPanel.find(theFindTextField.getText());
+ final JTextField findField = createFindField();
+ findField.getDocument().addDocumentListener(
+ new DocumentListener()
+ {
+ public void insertUpdate(DocumentEvent e)
+ {
+ findInUndocked(false);
}
- }
-
- lastFind = theFindTextField.getText();
- } else {
- theFindTextField.requestFocus();
- }
- }
- private void createFindDocListener(final JTextField field) {
- field.getDocument().addDocumentListener(
- new DocumentListener() {
- public void insertUpdate(DocumentEvent e) {
- find(false);
+ public void removeUpdate(DocumentEvent e)
+ {
+ findInUndocked(false);
}
- public void removeUpdate(DocumentEvent e) {
- find(false);
+ public void changedUpdate(DocumentEvent e)
+ {
+ findInUndocked(false);
}
- public void changedUpdate(DocumentEvent e) {
- find(false);
+ private void findInUndocked(boolean next)
+ {
+ localFind(next, logPanel, findField);
}
});
- }
- private Action setupFindFieldsAndActions() {
- createFindDocListener(findTextField);
+ final Action undockedFindAction =
+ new AbstractAction()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ localFind(true, logPanel, findField);
+ }
+ };
- final Action action =
- new AbstractAction("Find Next") {
- public void actionPerformed(ActionEvent e) {
- find(true);
+ undockedFindAction.putValue(Action.NAME, "Find");
+ undockedFindAction.putValue(
+ Action.SHORT_DESCRIPTION, "Finds the next occurrence within this view");
+ undockedFindAction.putValue(
+ Action.SMALL_ICON, new ImageIcon(ChainsawIcons.FIND));
+
+ SmallButton undockedFindNextButton = new SmallButton(undockedFindAction);
+
+ undockedFindNextButton.setAction(undockedFindAction);
+ undockedFindNextButton.setText("");
+ undockedFindNextButton.getActionMap().put(
+ undockedFindAction.getValue(Action.NAME), undockedFindAction);
+ undockedFindNextButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+ KeyStroke.getKeyStroke("F3"), undockedFindAction.getValue(Action.NAME));
+
+ toolbar.add(undockedFindNextButton);
+ toolbar.add(findField);
+
+ toolbar.addSeparator();
+
+ Action redockAction =
+ new AbstractAction("", ChainsawIcons.ICON_DOCK)
+ {
+ public void actionPerformed(ActionEvent arg0)
+ {
+ logPanel.dock();
}
};
- // action.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_F));
- action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F3"));
- action.putValue(
- Action.SHORT_DESCRIPTION, "Finds the next occurrence of the Find string");
- action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.FIND));
+ redockAction.putValue(
+ Action.SHORT_DESCRIPTION,
+ "Docks this window back with the main Chainsaw window");
- return action;
+ SmallButton redockButton = new SmallButton(redockAction);
+ toolbar.add(redockButton);
+
+ return toolbar;
}
- private Action createUndockAction() {
- Action action =
- new AbstractAction("Undock", ChainsawIcons.ICON_UNDOCK) {
- public void actionPerformed(ActionEvent arg0) {
+ private Action createClearAction()
+ {
+ final Action action =
+ new AbstractAction("Clear")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
- if (logPanel != null) {
- logPanel.undock();
+ if (logPanel == null)
+ {
+ return;
}
+
+ logPanel.clearModel();
}
};
+ action.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_P));
action.putValue(
- Action.SHORT_DESCRIPTION,
- "Undocks the current Log panel into it's own window");
+ Action.ACCELERATOR_KEY,
+ KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, InputEvent.CTRL_MASK));
+ action.putValue(
+ Action.SHORT_DESCRIPTION, "Removes all the events from the current view");
+ action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.DELETE));
- // TODO think of some mnemonics and HotKeys for this action
return action;
}
- private Action createToggleToolbarAction() {
- /**
- * -== Begin of Show/Hide toolbar action
- */
- final Action toggleToolbarAction =
- new AbstractAction("Show Toolbar") {
- private boolean hide = false;
-
- public void actionPerformed(ActionEvent e) {
- hide = !hide;
-
- Runnable runnable = null;
-
- if (hide) {
- runnable =
- new Runnable() {
- public void run() {
- logui.getContentPane().remove(toolbar);
- logui.getRootPane().repaint();
- logui.getRootPane().revalidate();
- }
- };
- } else {
- runnable =
- new Runnable() {
- public void run() {
- logui.getContentPane().add(toolbar, BorderLayout.NORTH);
- logui.getRootPane().repaint();
- logui.getRootPane().revalidate();
- }
- };
+ private Action createCloseHelpAction()
+ {
+ final Action action =
+ new AbstractAction()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ if (logui.tabbedPane.containsWelcomePanel())
+ {
+ logui.removeWelcomePanel();
+ closeAction.putValue(Action.NAME, "Show Welcome tab");
+ }
+ else
+ {
+ logui.addWelcomePanel();
+ closeAction.putValue(Action.NAME, "Close Welcome tab");
}
-
- SwingUtilities.invokeLater(runnable);
}
};
- toggleToolbarAction.putValue(
- Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_T));
+ action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F1"));
- return toggleToolbarAction;
+ // action.putValue(Action.ACCELERATOR_KEY,
KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.ALT_MASK));
+ action.putValue(Action.SHORT_DESCRIPTION, "Removes the Welcome tab");
+ action.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_C));
+ action.putValue(Action.NAME, "Close Welcome tab");
+
+ return action;
}
- private Action createShowPreferencesAction() {
- Action showPreferences =
- new AbstractAction("", ChainsawIcons.ICON_PREFERENCES) {
- public void actionPerformed(ActionEvent arg0) {
- LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
+ private void createFindDocListener(final JTextField field)
+ {
+ field.getDocument().addDocumentListener(
+ new DocumentListener()
+ {
+ public void insertUpdate(DocumentEvent e)
+ {
+ find(false);
+ }
- if (logPanel != null) {
- logPanel.showPreferences();
- }
+ public void removeUpdate(DocumentEvent e)
+ {
+ find(false);
}
- };
- showPreferences.putValue(
- Action.SHORT_DESCRIPTION, "Define display and color filters...");
+ public void changedUpdate(DocumentEvent e)
+ {
+ find(false);
+ }
+ });
+ }
- // TODO think of good mnemonics and HotKey for this action
- return showPreferences;
+ private JTextField createFindField()
+ {
+ JTextField tf = new JTextField();
+ Dimension fixedSize = new Dimension(132, 24);
+ tf.setPreferredSize(fixedSize);
+ tf.setMaximumSize(fixedSize);
+ tf.setMinimumSize(fixedSize);
+ tf.setToolTipText("type in a simple string to find events");
+
+ return tf;
}
- private Action createLockableToolbarAction() {
+ private Action createLockableToolbarAction()
+ {
final Action lockToolbarAction =
- new AbstractAction("Lock Toolbar") {
+ new AbstractAction("Lock Toolbar")
+ {
private boolean lock = true;
- public void actionPerformed(ActionEvent e) {
+ public void actionPerformed(ActionEvent e)
+ {
lock = !lock;
final boolean isLocked = lock;
Runnable runnable = null;
runnable =
- new Runnable() {
- public void run() {
+ new Runnable()
+ {
+ public void run()
+ {
toolbar.setFloatable(!isLocked);
toolbar.repaint();
}
@@ -536,188 +594,254 @@
return lockToolbarAction;
}
- private Action createPauseAction() {
- final Action pauseAction =
- new AbstractAction("Pause") {
- public void actionPerformed(ActionEvent evt) {
- LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
+ private void createMenuBar()
+ {
+ JMenu activeTabMenu = new JMenu("Current tab");
- if (logPanel == null) {
- return;
- }
+ JMenuItem menuItemUseRightMouse =
+ new JMenuItem(
+ "Other options available via panel's right mouse button popup menu");
+ menuItemUseRightMouse.setEnabled(false);
+ activeTabMenu.add(menuItemUseRightMouse);
- String ident = logPanel.getIdentifier();
- System.out.println("trying to pause '" + ident + "'");
+ viewMenu.setMnemonic('V');
- if (!logui.pausedList.contains(ident)) {
- logui.pausedList.add(ident);
- } else {
- logui.pausedList.remove(ident);
- }
+ JCheckBoxMenuItem lockToolbarCheck =
+ new JCheckBoxMenuItem(lockToolbarAction);
+ lockToolbarCheck.setSelected(true);
- scanState();
- }
- };
+ JCheckBoxMenuItem showToolbarCheck =
+ new JCheckBoxMenuItem(toggleToolbarAction);
+ showToolbarCheck.setSelected(true);
- pauseAction.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_P));
- pauseAction.putValue(
- Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F12"));
- pauseAction.putValue(
- Action.SHORT_DESCRIPTION,
- "Halts the display, while still allowing events to stream in the background");
- pauseAction.putValue(
- Action.SMALL_ICON, new ImageIcon(ChainsawIcons.PAUSE));
+ JMenuItem menuItemClose = new JMenuItem(closeAction);
+ JCheckBoxMenuItem pause = new JCheckBoxMenuItem(pauseAction);
+ JMenuItem menuPrefs = new JMenuItem(showPreferencesAction);
+ menuPrefs.setText(
+ showPreferencesAction.getValue(Action.SHORT_DESCRIPTION).toString());
- return pauseAction;
- }
+ JMenuItem menuUndock = new JMenuItem(undockAction);
- private Action createToggleDetailPaneAction() {
- Action action =
- new AbstractAction("Show Detail Pane") {
- boolean enabled = true;
+ viewMenu.add(menuUndock);
+ viewMenu.add(pause);
- public void actionPerformed(ActionEvent evt) {
- LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
+ JCheckBoxMenuItem toggleDetailMenuItem =
+ new JCheckBoxMenuItem(toggleDetailPaneAction);
+ toggleDetailMenuItem.setSelected(true);
- if (logPanel == null) {
- return;
+ final Action toggleStatusBarAction =
+ new AbstractAction("Show Status bar")
+ {
+ public void actionPerformed(ActionEvent arg0)
+ {
+ if (toggleStatusBarCheck.isSelected())
+ {
+ logui.addStatusBar();
}
-
- logPanel.toggleDetailPanel();
- scanState();
- }
- };
-
- action.putValue("enabled", Boolean.TRUE);
- action.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_D));
- action.putValue(
- Action.ACCELERATOR_KEY,
- KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.ALT_MASK));
- action.putValue(Action.SHORT_DESCRIPTION, "Hides/Shows the Detail Pane");
- action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.INFO));
-
- return action;
- }
-
- private Action createCloseHelpAction() {
- final Action action =
- new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- if (logui.tabbedPane.containsWelcomePanel()) {
- logui.removeWelcomePanel();
- closeAction.putValue(Action.NAME, "Show Welcome tab");
- } else {
- logui.addWelcomePanel();
- closeAction.putValue(Action.NAME, "Close Welcome tab");
+ else
+ {
+ logui.removeStatusBar();
}
}
};
- action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F1"));
+ toggleStatusBarAction.putValue(
+ Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_B));
+ toggleStatusBarCheck.setAction(toggleStatusBarAction);
+ toggleStatusBarCheck.setSelected(true);
+ viewMenu.add(toggleDetailMenuItem);
+ viewMenu.add(menuPrefs);
- // action.putValue(Action.ACCELERATOR_KEY,
KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.ALT_MASK));
- action.putValue(Action.SHORT_DESCRIPTION, "Removes the Welcome tab");
- action.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_C));
- action.putValue(Action.NAME, "Close Welcome tab");
+ viewMenu.addSeparator();
- return action;
- }
+ viewMenu.add(new JMenuItem(clearAction));
+ viewMenu.addSeparator();
+ viewMenu.add(showToolbarCheck);
+ viewMenu.add(toggleStatusBarCheck);
+ viewMenu.add(menuItemClose);
+ viewMenu.addSeparator();
- private Action createClearAction() {
- final Action action =
- new AbstractAction("Clear") {
- public void actionPerformed(ActionEvent e) {
- LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
+ ButtonGroup levelIconGroup = new ButtonGroup();
+ JMenu levelIconMenu = new JMenu("Display Level column as");
+ levelIconMenu.setMnemonic('l');
- if (logPanel == null) {
- return;
- }
+ levelIconGroup.add(levelDisplayIcon);
+ levelIconGroup.add(levelDisplayText);
- logPanel.clearModel();
+ levelDisplayIcon.addActionListener(
+ new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ levelDisplay = ChainsawConstants.LEVEL_DISPLAY_ICONS;
+ SettingsManager.getInstance().saveSettings();
+ SettingsManager.getInstance().loadSettings();
}
- };
-
- action.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_P));
- action.putValue(
- Action.ACCELERATOR_KEY,
- KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, InputEvent.CTRL_MASK));
- action.putValue(
- Action.SHORT_DESCRIPTION, "Removes all the events from the current view");
- action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.DELETE));
+ });
- return action;
- }
+ levelDisplayText.addActionListener(
+ new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ levelDisplay = ChainsawConstants.LEVEL_DISPLAY_TEXT;
+ SettingsManager.getInstance().saveSettings();
+ SettingsManager.getInstance().loadSettings();
+ }
+ });
- private void createToolbar() {
- Insets buttonMargins = new Insets(1, 1, 1, 1);
+ ButtonGroup tabPlacementGroup = new ButtonGroup();
+ JMenu tabMenu = new JMenu("Tabs");
+ tabMenu.setMnemonic('a');
- FileMenu fileMenu = (FileMenu) menuBar.getMenu(0);
+ tabPlacementGroup.add(tabsTop);
+ tabPlacementGroup.add(tabsBottom);
- JButton fileOpenButton =
- new SmallButton(fileMenu.getLog4JFileOpenAction());
- fileOpenButton.setMargin(buttonMargins);
+ tabsTop.addActionListener(
+ new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ logui.tabbedPane.setTabPlacement(JTabbedPane.TOP);
+ }
+ });
- JButton fileSaveButton = new SmallButton(fileMenu.getFileSaveAction());
- fileSaveButton.setMargin(buttonMargins);
+ tabsBottom.addActionListener(
+ new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ logui.tabbedPane.setTabPlacement(JTabbedPane.BOTTOM);
+ }
+ });
- fileOpenButton.setText("");
- fileSaveButton.setText("");
+ JMenu responsiveNess =
+ new JMenu(ChainsawToolBarAndMenus.SETTING_RESPONSIVENESS);
+ responsiveNess.setMnemonic('R');
- toolbar.add(fileOpenButton);
- toolbar.add(fileSaveButton);
- toolbar.addSeparator();
+ responsiveNess.add(createResponsivenessSlider());
- pauseButton.setAction(pauseAction);
- pauseButton.setText("");
+ final JMenu lookAndFeelMenu = new JMenu("Look & Feel");
+ lookAndFeelMenu.setMnemonic('L');
- //
pauseButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F12"),pauseAction.getValue(Action.NAME)
);
- pauseButton.getActionMap().put(
- pauseAction.getValue(Action.NAME), pauseAction);
+ UIManager.LookAndFeelInfo[] lookAndFeels =
+ UIManager.getInstalledLookAndFeels();
- detailPaneButton.setAction(toggleDetailPaneAction);
- detailPaneButton.setText("");
- detailPaneButton.getActionMap().put(
- toggleDetailPaneAction.getValue(Action.NAME), toggleDetailPaneAction);
- detailPaneButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
- KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.ALT_MASK),
- toggleDetailPaneAction.getValue(Action.NAME));
+ final ButtonGroup lookAndFeelGroup = new ButtonGroup();
- SmallButton prefsButton = new SmallButton(showPreferencesAction);
- SmallButton undockButton = new SmallButton(undockAction);
- undockButton.setText("");
+ for (int i = 0; i < lookAndFeels.length; i++)
+ {
+ final UIManager.LookAndFeelInfo lfInfo = lookAndFeels[i];
+ final JRadioButtonMenuItem lfItemMenu =
+ new JRadioButtonMenuItem(lfInfo.getName());
+ lfItemMenu.addActionListener(
+ new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ SwingUtilities.invokeLater(
+ new Runnable()
+ {
+ public void run()
+ {
+ logui.setLookAndFeel(lfInfo.getClassName());
+ }
+ });
+ }
+ });
+ lookAndFeelGroup.add(lfItemMenu);
+ lookAndFeelMenu.add(lfItemMenu);
+ lookAndFeelMenus.add(lfItemMenu);
+ }
- toolbar.add(undockButton);
- toolbar.add(pauseButton);
- toolbar.add(detailPaneButton);
- toolbar.add(prefsButton);
- toolbar.addSeparator();
+ levelIconMenu.add(levelDisplayIcon);
+ levelIconMenu.add(levelDisplayText);
- toolbar.add(clearButton);
- clearButton.setAction(clearAction);
- clearButton.setText("");
- toolbar.addSeparator();
+ if (levelDisplay.equals(ChainsawConstants.LEVEL_DISPLAY_ICONS))
+ {
+ levelDisplayIcon.setSelected(true);
+ }
+ else
+ {
+ levelDisplayText.setSelected(true);
+ }
- JButton findNextButton = new SmallButton(findNextAction);
- findNextButton.setText("");
- findNextButton.getActionMap().put(
- findNextAction.getValue(Action.NAME), findNextAction);
- findNextButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
- (KeyStroke) findNextAction.getValue(Action.ACCELERATOR_KEY),
- findNextAction.getValue(Action.NAME));
+ tabMenu.add(tabsTop);
+ tabMenu.add(tabsBottom);
- toolbar.add(findNextButton);
+ viewMenu.add(levelIconMenu);
+ viewMenu.add(tabMenu);
+ viewMenu.add(responsiveNess);
+ viewMenu.addSeparator();
+ viewMenu.add(showReceiversAction);
+ viewMenu.add(lookAndFeelMenu);
- Box findBox = Box.createHorizontalBox();
- findBox.add(findTextField);
- toolbar.add(findBox);
+ JMenu helpMenu = new JMenu("Help");
+ helpMenu.setMnemonic('H');
- toolbar.add(Box.createHorizontalGlue());
+ JMenuItem about = new JMenuItem("About Chainsaw v2...");
+ about.setMnemonic('A');
+ about.addActionListener(
+ new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ logui.showAboutBox();
+ }
+ });
- toolbar.setMargin(buttonMargins);
- toolbar.setFloatable(false);
+ helpMenu.add(about);
+
+ menuBar.add(fileMenu);
+ menuBar.add(viewMenu);
+ menuBar.add(activeTabMenu);
+ menuBar.add(helpMenu);
+ }
+
+ private Action createPauseAction()
+ {
+ final Action pauseAction =
+ new AbstractAction("Pause")
+ {
+ public void actionPerformed(ActionEvent evt)
+ {
+ LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
+
+ if (logPanel == null)
+ {
+ return;
+ }
+
+ String ident = logPanel.getIdentifier();
+ System.out.println("trying to pause '" + ident + "'");
+
+ if (!logui.pausedList.contains(ident))
+ {
+ logui.pausedList.add(ident);
+ }
+ else
+ {
+ logui.pausedList.remove(ident);
+ }
+
+ scanState();
+ }
+ };
+
+ pauseAction.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_P));
+ pauseAction.putValue(
+ Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F12"));
+ pauseAction.putValue(
+ Action.SHORT_DESCRIPTION,
+ "Halts the display, while still allowing events to stream in the background");
+ pauseAction.putValue(
+ Action.SMALL_ICON, new ImageIcon(ChainsawIcons.PAUSE));
+
+ return pauseAction;
}
- private JComponent createResponsivenessSlider() {
+ private JComponent createResponsivenessSlider()
+ {
JPanel responsiveNessPanel = new JPanel();
BoxLayout layout = new BoxLayout(responsiveNessPanel, BoxLayout.Y_AXIS);
@@ -737,16 +861,22 @@
responsiveSlider.setPaintTrack(true);
responsiveSlider.setInverted(true);
responsiveSlider.getModel().addChangeListener(
- new ChangeListener() {
- public void stateChanged(ChangeEvent e) {
- if (responsiveSlider.getValueIsAdjusting()) {
+ new ChangeListener()
+ {
+ public void stateChanged(ChangeEvent e)
+ {
+ if (responsiveSlider.getValueIsAdjusting())
+ {
/**
* We'll wait until it stops.
*/
- } else {
+ }
+ else
+ {
int value = responsiveSlider.getValue();
- if (value == 0) {
+ if (value == 0)
+ {
value = 100;
}
@@ -768,399 +898,547 @@
return responsiveNessPanel;
}
- private void createMenuBar() {
- JMenu activeTabMenu = new JMenu("Current tab");
-
- JMenuItem menuItemUseRightMouse =
- new JMenuItem(
- "Other options available via panel's right mouse button popup menu");
- menuItemUseRightMouse.setEnabled(false);
- activeTabMenu.add(menuItemUseRightMouse);
+ private Action createShowPreferencesAction()
+ {
+ Action showPreferences =
+ new AbstractAction("", ChainsawIcons.ICON_PREFERENCES)
+ {
+ public void actionPerformed(ActionEvent arg0)
+ {
+ LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
- viewMenu.setMnemonic('V');
+ if (logPanel != null)
+ {
+ logPanel.showPreferences();
+ }
+ }
+ };
- JCheckBoxMenuItem lockToolbarCheck =
- new JCheckBoxMenuItem(lockToolbarAction);
- lockToolbarCheck.setSelected(true);
+ showPreferences.putValue(
+ Action.SHORT_DESCRIPTION, "Define display and color filters...");
- JCheckBoxMenuItem showToolbarCheck =
- new JCheckBoxMenuItem(toggleToolbarAction);
- showToolbarCheck.setSelected(true);
+ // TODO think of good mnemonics and HotKey for this action
+ return showPreferences;
+ }
- JMenuItem menuItemClose = new JMenuItem(closeAction);
- JCheckBoxMenuItem pause = new JCheckBoxMenuItem(pauseAction);
- JMenuItem menuPrefs = new JMenuItem(showPreferencesAction);
- menuPrefs.setText(
- showPreferencesAction.getValue(Action.SHORT_DESCRIPTION).toString());
+ /**
+ * @return
+ */
+ private Action createShowReceiversAction()
+ {
+ final JDialog receiversWindow = new JDialog(logui, "Receivers", false);
- JMenuItem menuUndock = new JMenuItem(undockAction);
+ final JTree tree = new JTree(ReceiversTreeModel.create());
+ tree.setCellRenderer(new ReceiverTreeCellRenderer());
- viewMenu.add(menuUndock);
- viewMenu.add(pause);
+ final Container container = receiversWindow.getContentPane();
+ JComponent component = tree;
+ container.add(new JScrollPane(component));
+ receiversWindow.setSize(320, 240);
- JCheckBoxMenuItem toggleDetailMenuItem =
- new JCheckBoxMenuItem(toggleDetailPaneAction);
- toggleDetailMenuItem.setSelected(true);
+ final Action action =
+ new AbstractAction("Show Receivers...")
+ {
+ public void actionPerformed(ActionEvent arg0)
+ {
+ tree.setModel(ReceiversTreeModel.create());
- final Action toggleStatusBarAction =
- new AbstractAction("Show Status bar") {
- public void actionPerformed(ActionEvent arg0) {
- if (toggleStatusBarCheck.isSelected()) {
- logui.addStatusBar();
- } else {
- logui.removeStatusBar();
+ if (!receiversWindow.isVisible())
+ {
+ receiversWindow.setVisible(true);
}
+
+ receiversWindow.setLocationRelativeTo(logui);
}
};
- toggleStatusBarAction.putValue(
- Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_B));
- toggleStatusBarCheck.setAction(toggleStatusBarAction);
- toggleStatusBarCheck.setSelected(true);
- viewMenu.add(toggleDetailMenuItem);
- viewMenu.add(menuPrefs);
+ action.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_E));
+ action.putValue(
+ Action.SHORT_DESCRIPTION,
+ "Shows the currently configured Log4j Receivers");
- viewMenu.addSeparator();
+ return action;
+ }
- viewMenu.add(new JMenuItem(clearAction));
- viewMenu.addSeparator();
- viewMenu.add(showToolbarCheck);
- viewMenu.add(toggleStatusBarCheck);
- viewMenu.add(menuItemClose);
- viewMenu.addSeparator();
+ private Action createToggleDetailPaneAction()
+ {
+ Action action =
+ new AbstractAction("Show Detail Pane")
+ {
+ boolean enabled = true;
- ButtonGroup levelIconGroup = new ButtonGroup();
- JMenu levelIconMenu = new JMenu("Display Level column as");
- levelIconMenu.setMnemonic('l');
+ public void actionPerformed(ActionEvent evt)
+ {
+ LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
- levelIconGroup.add(levelDisplayIcon);
- levelIconGroup.add(levelDisplayText);
+ if (logPanel == null)
+ {
+ return;
+ }
- levelDisplayIcon.addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- levelDisplay = ChainsawConstants.LEVEL_DISPLAY_ICONS;
- SettingsManager.getInstance().saveSettings();
- SettingsManager.getInstance().loadSettings();
+ logPanel.toggleDetailPanel();
+ scanState();
}
- });
+ };
- levelDisplayText.addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- levelDisplay = ChainsawConstants.LEVEL_DISPLAY_TEXT;
- SettingsManager.getInstance().saveSettings();
- SettingsManager.getInstance().loadSettings();
- }
- });
+ action.putValue("enabled", Boolean.TRUE);
+ action.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_D));
+ action.putValue(
+ Action.ACCELERATOR_KEY,
+ KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.ALT_MASK));
+ action.putValue(Action.SHORT_DESCRIPTION, "Hides/Shows the Detail Pane");
+ action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.INFO));
- ButtonGroup tabPlacementGroup = new ButtonGroup();
- JMenu tabMenu = new JMenu("Tabs");
- tabMenu.setMnemonic('a');
+ return action;
+ }
- tabPlacementGroup.add(tabsTop);
- tabPlacementGroup.add(tabsBottom);
+ private Action createToggleToolbarAction()
+ {
+ /**
+ * -== Begin of Show/Hide toolbar action
+ */
+ final Action toggleToolbarAction =
+ new AbstractAction("Show Toolbar")
+ {
+ private boolean hide = false;
- tabsTop.addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- logui.tabbedPane.setTabPlacement(JTabbedPane.TOP);
- }
- });
+ public void actionPerformed(ActionEvent e)
+ {
+ hide = !hide;
- tabsBottom.addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- logui.tabbedPane.setTabPlacement(JTabbedPane.BOTTOM);
- }
- });
+ Runnable runnable = null;
- JMenu responsiveNess =
- new JMenu(ChainsawToolBarAndMenus.SETTING_RESPONSIVENESS);
- responsiveNess.setMnemonic('R');
+ if (hide)
+ {
+ runnable =
+ new Runnable()
+ {
+ public void run()
+ {
+ logui.getContentPane().remove(toolbar);
+ logui.getRootPane().repaint();
+ logui.getRootPane().revalidate();
+ }
+ };
+ }
+ else
+ {
+ runnable =
+ new Runnable()
+ {
+ public void run()
+ {
+ logui.getContentPane().add(toolbar, BorderLayout.NORTH);
+ logui.getRootPane().repaint();
+ logui.getRootPane().revalidate();
+ }
+ };
+ }
- responsiveNess.add(createResponsivenessSlider());
+ SwingUtilities.invokeLater(runnable);
+ }
+ };
- final JMenu lookAndFeelMenu = new JMenu("Look & Feel");
- lookAndFeelMenu.setMnemonic('L');
+ toggleToolbarAction.putValue(
+ Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_T));
- UIManager.LookAndFeelInfo[] lookAndFeels =
- UIManager.getInstalledLookAndFeels();
+ return toggleToolbarAction;
+ }
- final ButtonGroup lookAndFeelGroup = new ButtonGroup();
+ private void createToolbar()
+ {
+ Insets buttonMargins = new Insets(1, 1, 1, 1);
- for (int i = 0; i < lookAndFeels.length; i++) {
- final UIManager.LookAndFeelInfo lfInfo = lookAndFeels[i];
- final JRadioButtonMenuItem lfItemMenu =
- new JRadioButtonMenuItem(lfInfo.getName());
- lfItemMenu.addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- SwingUtilities.invokeLater(
- new Runnable() {
- public void run() {
- logui.setLookAndFeel(lfInfo.getClassName());
- }
- });
- }
- });
- lookAndFeelGroup.add(lfItemMenu);
- lookAndFeelMenu.add(lfItemMenu);
- lookAndFeelMenus.add(lfItemMenu);
- }
+ FileMenu fileMenu = (FileMenu) menuBar.getMenu(0);
- levelIconMenu.add(levelDisplayIcon);
- levelIconMenu.add(levelDisplayText);
+ JButton fileOpenButton =
+ new SmallButton(fileMenu.getLog4JFileOpenAction());
+ fileOpenButton.setMargin(buttonMargins);
- if (levelDisplay.equals(ChainsawConstants.LEVEL_DISPLAY_ICONS)) {
- levelDisplayIcon.setSelected(true);
- } else {
- levelDisplayText.setSelected(true);
- }
+ JButton fileSaveButton = new SmallButton(fileMenu.getFileSaveAction());
+ fileSaveButton.setMargin(buttonMargins);
- tabMenu.add(tabsTop);
- tabMenu.add(tabsBottom);
+ fileOpenButton.setText("");
+ fileSaveButton.setText("");
- viewMenu.add(levelIconMenu);
- viewMenu.add(tabMenu);
- viewMenu.add(responsiveNess);
- viewMenu.addSeparator();
- viewMenu.add(showReceiversAction);
- viewMenu.add(lookAndFeelMenu);
+ toolbar.add(fileOpenButton);
+ toolbar.add(fileSaveButton);
+ toolbar.addSeparator();
- JMenu helpMenu = new JMenu("Help");
- helpMenu.setMnemonic('H');
+ pauseButton.setAction(pauseAction);
+ pauseButton.setText("");
- JMenuItem about = new JMenuItem("About Chainsaw v2...");
- about.setMnemonic('A');
- about.addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- logui.showAboutBox();
- }
- });
+ //
pauseButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F12"),pauseAction.getValue(Action.NAME)
);
+ pauseButton.getActionMap().put(
+ pauseAction.getValue(Action.NAME), pauseAction);
- helpMenu.add(about);
+ detailPaneButton.setAction(toggleDetailPaneAction);
+ detailPaneButton.setText("");
+ detailPaneButton.getActionMap().put(
+ toggleDetailPaneAction.getValue(Action.NAME), toggleDetailPaneAction);
+ detailPaneButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+ KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.ALT_MASK),
+ toggleDetailPaneAction.getValue(Action.NAME));
- menuBar.add(fileMenu);
- menuBar.add(viewMenu);
- menuBar.add(activeTabMenu);
- menuBar.add(helpMenu);
- }
+ SmallButton prefsButton = new SmallButton(showPreferencesAction);
+ SmallButton undockButton = new SmallButton(undockAction);
+ undockButton.setText("");
- JToolBar createDockwindowToolbar(
- final JFrame dockablePanel, final LogUI.LogPanel logPanel) {
- final JToolBar toolbar = new JToolBar();
- toolbar.setFloatable(false);
+ toolbar.add(undockButton);
+ toolbar.add(pauseButton);
+ toolbar.add(detailPaneButton);
+ toolbar.add(prefsButton);
+ toolbar.addSeparator();
- final String ident = dockablePanel.getTitle();
- final Action dockPauseAction =
- new AbstractAction("Pause") {
- public void actionPerformed(ActionEvent evt) {
- System.out.println("trying to pause '" + ident + "'");
+ toolbar.add(clearButton);
+ clearButton.setAction(clearAction);
+ clearButton.setText("");
+ toolbar.addSeparator();
- if (!logui.pausedList.contains(ident)) {
- logui.pausedList.add(ident);
- } else {
- logui.pausedList.remove(ident);
- }
- }
- };
+ JButton findNextButton = new SmallButton(findNextAction);
+ findNextButton.setText("");
+ findNextButton.getActionMap().put(
+ findNextAction.getValue(Action.NAME), findNextAction);
+ findNextButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+ (KeyStroke) findNextAction.getValue(Action.ACCELERATOR_KEY),
+ findNextAction.getValue(Action.NAME));
- dockPauseAction.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_P));
- dockPauseAction.putValue(
- Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F12"));
- dockPauseAction.putValue(
- Action.SHORT_DESCRIPTION,
- "Halts the display, while still allowing events to stream in the background");
- dockPauseAction.putValue(
- Action.SMALL_ICON, new ImageIcon(ChainsawIcons.PAUSE));
+ toolbar.add(findNextButton);
- final SmallToggleButton dockPauseButton =
- new SmallToggleButton(dockPauseAction);
- dockPauseButton.setText("");
+ Box findBox = Box.createHorizontalBox();
+ findBox.add(findTextField);
+ toolbar.add(findBox);
- if (logui.pausedList.contains(ident)) {
- dockPauseButton.getModel().setSelected(true);
- } else {
- dockPauseButton.getModel().setSelected(false);
- }
+ toolbar.add(Box.createHorizontalGlue());
- dockPauseButton.setText("");
+ toolbar.setMargin(buttonMargins);
+ toolbar.setFloatable(false);
+ }
- toolbar.add(dockPauseButton);
+ private Action createUndockAction()
+ {
+ Action action =
+ new AbstractAction("Undock", ChainsawIcons.ICON_UNDOCK)
+ {
+ public void actionPerformed(ActionEvent arg0)
+ {
+ LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
- Action dockShowPrefsAction =
- new AbstractAction("") {
- public void actionPerformed(ActionEvent arg0) {
- logPanel.showPreferences();
+ if (logPanel != null)
+ {
+ logPanel.undock();
+ }
}
};
- dockShowPrefsAction.putValue(
+ action.putValue(
Action.SHORT_DESCRIPTION,
- showPreferencesAction.getValue(Action.SHORT_DESCRIPTION));
- dockShowPrefsAction.putValue(
- Action.SMALL_ICON, showPreferencesAction.getValue(Action.SMALL_ICON));
+ "Undocks the current Log panel into it's own window");
- toolbar.add(new SmallButton(dockShowPrefsAction));
- toolbar.addSeparator();
+ // TODO think of some mnemonics and HotKeys for this action
+ return action;
+ }
- final Action undockedClearAction =
- new AbstractAction("Clear") {
- public void actionPerformed(ActionEvent arg0) {
- logPanel.clearModel();
- }
- };
+ private void find(boolean next)
+ {
+ LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
- undockedClearAction.putValue(
- Action.SMALL_ICON, new ImageIcon(ChainsawIcons.DELETE));
- undockedClearAction.putValue(
- Action.SHORT_DESCRIPTION, "Removes all the events from the current view");
+ if (logPanel != null)
+ {
+ localFind(next, logPanel, findTextField);
+ }
+ }
- final SmallButton dockClearButton = new SmallButton(undockedClearAction);
- dockClearButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
- KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, InputEvent.CTRL_MASK),
- undockedClearAction.getValue(Action.NAME));
- dockClearButton.getActionMap().put(
- undockedClearAction.getValue(Action.NAME), undockedClearAction);
+ private void localFind(
+ boolean next, final LogUI.LogPanel logPanel,
+ final JTextField theFindTextField)
+ {
+ if (!theFindTextField.getText().equals(""))
+ {
+ if (
+ (lastFind.length() == 0)
+ || (lastFind.length() > theFindTextField.getText().length()))
+ {
+ logPanel.findFromTop(theFindTextField.getText());
+ }
+ else
+ {
+ if (next)
+ {
+ logPanel.findNext(theFindTextField.getText());
+ }
+ else
+ {
+ logPanel.find(theFindTextField.getText());
+ }
+ }
+
+ lastFind = theFindTextField.getText();
+ }
+ else
+ {
+ theFindTextField.requestFocus();
+ }
+ }
- dockClearButton.setText("");
- toolbar.add(dockClearButton);
- toolbar.addSeparator();
+ private void scanState()
+ {
+ switch (logui.tabbedPane.getTabPlacement())
+ {
+ case SwingConstants.TOP :
+ tabsTop.setSelected(true);
- final JTextField findField = createFindField();
- findField.getDocument().addDocumentListener(
- new DocumentListener() {
- public void insertUpdate(DocumentEvent e) {
- findInUndocked(false);
- }
+ break;
- public void removeUpdate(DocumentEvent e) {
- findInUndocked(false);
- }
+ case SwingConstants.BOTTOM :
+ tabsBottom.setSelected(true);
- public void changedUpdate(DocumentEvent e) {
- findInUndocked(false);
- }
+ break;
+ }
- private void findInUndocked(boolean next) {
- localFind(next, logPanel, findField);
- }
- });
+ toggleStatusBarCheck.setSelected(logui.isStatusBarVisible());
- final Action undockedFindAction =
- new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- localFind(true, logPanel, findField);
- }
- };
+ /**
+ * We get the currently selected LogPanel, and if null, deactivate some
+ * actions
+ */
+ LogUI.LogPanel logPanel = logui.getCurrentLogPanel();
- undockedFindAction.putValue(Action.NAME, "Find");
- undockedFindAction.putValue(
- Action.SHORT_DESCRIPTION, "Finds the next occurrence within this view");
- undockedFindAction.putValue(
- Action.SMALL_ICON, new ImageIcon(ChainsawIcons.FIND));
+ boolean activateLogPanelActions = true;
- SmallButton undockedFindNextButton = new SmallButton(undockedFindAction);
+ if (logPanel == null)
+ {
+ activateLogPanelActions = false;
+ logui.getStatusBar().clear();
+ findTextField.setEnabled(false);
- undockedFindNextButton.setAction(undockedFindAction);
- undockedFindNextButton.setText("");
- undockedFindNextButton.getActionMap().put(
- undockedFindAction.getValue(Action.NAME), undockedFindAction);
- undockedFindNextButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
- KeyStroke.getKeyStroke("F3"), undockedFindAction.getValue(Action.NAME));
+ if (logui.tabbedPane.containsWelcomePanel())
+ {
+ closeAction.setEnabled(true);
+ }
+ else
+ {
+ closeAction.setEnabled(false);
+ }
+ }
+ else
+ {
+ fileMenu.getFileSaveAction().setEnabled(true);
+ findTextField.setEnabled(true);
- toolbar.add(undockedFindNextButton);
- toolbar.add(findField);
+ if (logui.pausedList.contains(logPanel.getIdentifier()))
+ {
+ pauseButton.getModel().setSelected(true);
+ logui.getStatusBar().setPaused(true);
+ }
+ else
+ {
+ pauseButton.getModel().setSelected(false);
+ logui.getStatusBar().setPaused(false);
+ }
- toolbar.addSeparator();
+ detailPaneButton.getModel().setSelected(logPanel.isDetailPaneVisible());
+ }
- Action redockAction =
- new AbstractAction("", ChainsawIcons.ICON_DOCK) {
- public void actionPerformed(ActionEvent arg0) {
- logPanel.dock();
- }
- };
+ for (int i = 0; i < logPanelSpecificActions.length; i++)
+ {
+ logPanelSpecificActions[i].setEnabled(activateLogPanelActions);
+ }
- redockAction.putValue(
- Action.SHORT_DESCRIPTION,
- "Docks this window back with the main Chainsaw window");
+ String currentLookAndFeel =
+ UIManager.getLookAndFeel().getClass().getName();
+ String currentLookAndFeelName = UIManager.getLookAndFeel().getName();
- SmallButton redockButton = new SmallButton(redockAction);
- toolbar.add(redockButton);
+ for (Iterator iter = lookAndFeelMenus.iterator(); iter.hasNext();)
+ {
+ JRadioButtonMenuItem element = (JRadioButtonMenuItem) iter.next();
- return toolbar;
+ if (element.getText().equals(currentLookAndFeelName))
+ {
+ element.setSelected(true);
+ }
+ else
+ {
+ element.setSelected(false);
+ }
+ }
}
- private JTextField createFindField() {
- JTextField tf = new JTextField();
- Dimension fixedSize = new Dimension(132, 24);
- tf.setPreferredSize(fixedSize);
- tf.setMaximumSize(fixedSize);
- tf.setMinimumSize(fixedSize);
- tf.setToolTipText("type in a simple string to find events");
+ private Action setupFindFieldsAndActions()
+ {
+ createFindDocListener(findTextField);
- return tf;
+ final Action action =
+ new AbstractAction("Find Next")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ find(true);
+ }
+ };
+
+ // action.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_F));
+ action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F3"));
+ action.putValue(
+ Action.SHORT_DESCRIPTION, "Finds the next occurrence of the Find string");
+ action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.FIND));
+
+ return action;
}
- public void loadSettings(LoadSettingsEvent event) {
- try {
- levelDisplay = event.getSetting(ChainsawConstants.LEVEL_DISPLAY);
+ //~ Inner Classes ===========================================================
- if (levelDisplay.equals(ChainsawConstants.LEVEL_DISPLAY_ICONS)) {
- levelDisplayIcon.setSelected(true);
- } else {
- levelDisplayText.setSelected(true);
- }
+ /**
+ * DOCUMENT ME!
+ *
+ * @author $author$
+ * @version $Revision$
+ */
+ public static class ReceiverTreeCellRenderer extends DefaultTreeCellRenderer
+ {
+ //~ Instance fields =======================================================
+
+ protected Color m_bkNonSelectionColor;
+ protected Color m_bkSelectionColor;
+ protected Color m_borderSelectionColor;
+ protected Color m_textNonSelectionColor;
+ protected Color m_textSelectionColor;
+ private Icon activeReceiverIcon =
+ new ImageIcon(ChainsawIcons.ICON_ACTIVE_RECEIVER);
+ private Icon inactiveReceiverIcon =
+ new ImageIcon(ChainsawIcons.ICON_INACTIVE_RECEIVER);
+ private Icon rootIcon = new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT);
+ private boolean m_selected;
- final int responsiveness =
- event.asInt(ChainsawToolBarAndMenus.SETTING_RESPONSIVENESS);
- final int tabPlacement =
- event.asInt(ChainsawToolBarAndMenus.SETTING_TAB_PLACEMENT);
+ //~ Constructors ==========================================================
- SwingUtilities.invokeLater(
- new Runnable() {
- public void run() {
- responsiveSlider.setValue(responsiveness);
- logui.tabbedPane.setTabPlacement(tabPlacement);
- scanState();
- }
- });
- } catch (NullPointerException e) {
- LogLog.error("error decoding setting", e);
+ public ReceiverTreeCellRenderer()
+ {
+ super();
+
+ // m_textSelectionColor = UIManager.getColor("Tree.selectionForeground");
+ // m_textNonSelectionColor = UIManager.getColor("Tree.textForeground");
+ // m_bkSelectionColor = UIManager.getColor("Tree.selectionBackground");
+ // m_bkNonSelectionColor = UIManager.getColor("Tree.textBackground");
+ // m_borderSelectionColor =
UIManager.getColor("Tree.selectionBorderColor");
+ // setOpaque(false);
}
- }
- public void saveSettings(SaveSettingsEvent event) {
- event.saveSetting(
- ChainsawToolBarAndMenus.SETTING_RESPONSIVENESS,
- responsiveSlider.getValue());
+ //~ Methods ===============================================================
- event.saveSetting(
- ChainsawToolBarAndMenus.SETTING_TAB_PLACEMENT,
- logui.tabbedPane.getTabPlacement());
+ /**
+ * DOCUMENT ME!
+ *
+ * @param tree DOCUMENT ME!
+ * @param value DOCUMENT ME!
+ * @param selected DOCUMENT ME!
+ * @param expanded DOCUMENT ME!
+ * @param leaf DOCUMENT ME!
+ * @param row DOCUMENT ME!
+ * @param hasFocus DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public Component getTreeCellRendererComponent(
+ JTree tree, Object value, boolean selected, boolean expanded,
+ boolean leaf, int row, boolean hasFocus)
+ {
+ super.getTreeCellRendererComponent(
+ tree, value, selected, expanded, leaf, row, hasFocus);
+
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
+ Object obj = node.getUserObject();
+ setText(obj.toString());
+
+ if (tree.getModel().getRoot().equals(value))
+ {
+ setIcon(rootIcon);
+ }
+ else if (obj instanceof SocketReceiver)
+ {
+ SocketReceiver receiver = (SocketReceiver) obj;
+ setText(receiver.getName() + "::" + receiver.getPort());
+
+ if (receiver.isActive())
+ {
+ setIcon(activeReceiverIcon);
+ }
+ else
+ {
+ setIcon(inactiveReceiverIcon);
+ }
+ }
- event.saveSetting(ChainsawConstants.LEVEL_DISPLAY, levelDisplay);
+ return this;
+ }
}
- public static class ReceiversTableModel extends AbstractTableModel {
+ /**
+ * DOCUMENT ME!
+ *
+ * @author $author$
+ * @version $Revision$
+ */
+ public static class ReceiversTableModel extends AbstractTableModel
+ {
+ //~ Instance fields =======================================================
+
private List receivers;
- public Object getValueAt(int row, int col) {
- return receivers.get(row);
- }
+ //~ Methods ===============================================================
- public int getColumnCount() {
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public int getColumnCount()
+ {
return 1;
}
- public int getRowCount() {
+ /**
+ * DOCUMENT ME!
+ *
+ * @param column DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public String getColumnName(int column)
+ {
+ return "Receiver Details";
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public int getRowCount()
+ {
return receivers.size();
}
- public void refresh() {
- synchronized (this) {
+ /**
+ * DOCUMENT ME!
+ *
+ * @param row DOCUMENT ME!
+ * @param col DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public Object getValueAt(int row, int col)
+ {
+ return receivers.get(row);
+ }
+
+ /**
+ * DOCUMENT ME!
+ */
+ public void refresh()
+ {
+ synchronized (this)
+ {
receivers =
PluginRegistry.getPlugins(
LogManager.getLoggerRepository(), Receiver.class);
@@ -1168,9 +1446,64 @@
fireTableDataChanged();
}
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @author $author$
+ * @version $Revision$
+ */
+ public static class ReceiversTreeModel extends DefaultTreeModel
+ {
+ //~ Constructors ==========================================================
+
+ public ReceiversTreeModel()
+ {
+ super(new DefaultMutableTreeNode("Receivers"));
+ }
- public String getColumnName(int column) {
- return "Receiver Details";
+ //~ Methods ===============================================================
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public static final TreeModel create()
+ {
+ ReceiversTreeModel model = new ReceiversTreeModel();
+
+ Collection receivers =
+ PluginRegistry.getPlugins(
+ LogManager.getLoggerRepository(), Receiver.class);
+
+ for (Iterator iter = receivers.iterator(); iter.hasNext();)
+ {
+ Receiver item = (Receiver) iter.next();
+ DefaultMutableTreeNode receiverNode = new DefaultMutableTreeNode(item);
+
+ if (item instanceof SocketReceiver)
+ {
+ for (
+ Iterator iterator =
+ ((SocketReceiver) item).getConnectedSocketDetails().iterator();
+ iterator.hasNext();)
+ {
+ Object details = (Object) iterator.next();
+ receiverNode.add(new DefaultMutableTreeNode(details));
+ }
+ }
+
+ model.getRootNode().add(receiverNode);
+ }
+
+ return model;
+ }
+
+ DefaultMutableTreeNode getRootNode()
+ {
+ return (DefaultMutableTreeNode) getRoot();
}
}
@@ -1186,14 +1519,20 @@
* @author Paul Smith <[EMAIL PROTECTED]>
*
*/
- class SmallButton extends JButton implements MouseListener {
- protected Border m_raised = new SoftBevelBorder(BevelBorder.RAISED);
- protected Border m_lowered = new SoftBevelBorder(BevelBorder.LOWERED);
+ class SmallButton extends JButton implements MouseListener
+ {
+ //~ Instance fields =======================================================
+
protected Border m_inactive = new EmptyBorder(3, 3, 3, 3);
protected Border m_border = m_inactive;
+ protected Border m_lowered = new SoftBevelBorder(BevelBorder.LOWERED);
+ protected Border m_raised = new SoftBevelBorder(BevelBorder.RAISED);
protected Insets m_ins = new Insets(4, 4, 4, 4);
- public SmallButton() {
+ //~ Constructors ==========================================================
+
+ public SmallButton()
+ {
super();
setBorder(m_inactive);
setMargin(m_ins);
@@ -1201,7 +1540,8 @@
addMouseListener(this);
}
- public SmallButton(Action act) {
+ public SmallButton(Action act)
+ {
this();
setAction(act);
setRequestFocusEnabled(false);
@@ -1210,39 +1550,90 @@
addMouseListener(this);
}
- public float getAlignmentY() {
+ //~ Methods ===============================================================
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public float getAlignmentY()
+ {
return 0.5f;
}
- public Border getBorder() {
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public Border getBorder()
+ {
return m_border;
}
- public Insets getInsets() {
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public Insets getInsets()
+ {
return m_ins;
}
- public void mousePressed(MouseEvent e) {
- m_border = m_lowered;
- setBorder(m_lowered);
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mouseClicked(MouseEvent e)
+ {
}
- public void mouseReleased(MouseEvent e) {
- m_border = m_inactive;
- setBorder(m_inactive);
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mouseEntered(MouseEvent e)
+ {
+ if (isEnabled())
+ {
+ m_border = m_raised;
+ setBorder(m_raised);
+ }
}
- public void mouseClicked(MouseEvent e) {
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mouseExited(MouseEvent e)
+ {
+ m_border = m_inactive;
+ setBorder(m_inactive);
}
- public void mouseEntered(MouseEvent e) {
- if (isEnabled()) {
- m_border = m_raised;
- setBorder(m_raised);
- }
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mousePressed(MouseEvent e)
+ {
+ m_border = m_lowered;
+ setBorder(m_lowered);
}
- public void mouseExited(MouseEvent e) {
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mouseReleased(MouseEvent e)
+ {
m_border = m_inactive;
setBorder(m_inactive);
}
@@ -1260,15 +1651,21 @@
* @author Paul Smith <[EMAIL PROTECTED]>
*/
class SmallToggleButton extends JToggleButton implements ItemListener,
- MouseListener {
+ MouseListener
+ {
+ //~ Instance fields =======================================================
+
+ protected Border m_highlighted = new SoftBevelBorder(BevelBorder.RAISED);
protected Border m_raised = BorderFactory.createEmptyBorder();
protected Border m_inactive = m_raised;
- protected Border m_highlighted = new SoftBevelBorder(BevelBorder.RAISED);
+ protected Border m_border = m_inactive;
protected Border m_lowered = new SoftBevelBorder(BevelBorder.LOWERED);
protected Insets m_ins = new Insets(4, 4, 4, 4);
- protected Border m_border = m_inactive;
- public SmallToggleButton() {
+ //~ Constructors ==========================================================
+
+ public SmallToggleButton()
+ {
super();
setHorizontalAlignment(CENTER);
setBorder(isSelected() ? m_lowered : m_raised);
@@ -1279,48 +1676,106 @@
setText("");
}
- public SmallToggleButton(Action action) {
+ public SmallToggleButton(Action action)
+ {
this();
setAction(action);
}
- public float getAlignmentY() {
+ //~ Methods ===============================================================
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public float getAlignmentY()
+ {
return 0.5f;
}
- public Insets getInsets() {
- return m_ins;
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public Border getBorder()
+ {
+ return m_border;
}
- public Border getBorder() {
- return m_border;
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public Insets getInsets()
+ {
+ return m_ins;
}
- public void itemStateChanged(ItemEvent e) {
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void itemStateChanged(ItemEvent e)
+ {
setBorder(isSelected() ? m_lowered : m_raised);
}
- public void mousePressed(MouseEvent e) {
- m_border = m_lowered;
- setBorder(m_lowered);
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mouseClicked(MouseEvent e)
+ {
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mouseEntered(MouseEvent e)
+ {
+ if (isEnabled())
+ {
+ m_border = m_highlighted;
+ setBorder(m_highlighted);
+ }
}
- public void mouseReleased(MouseEvent e) {
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mouseExited(MouseEvent e)
+ {
m_border = m_inactive;
setBorder(m_inactive);
}
- public void mouseClicked(MouseEvent e) {
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mousePressed(MouseEvent e)
+ {
+ m_border = m_lowered;
+ setBorder(m_lowered);
}
- public void mouseEntered(MouseEvent e) {
- if (isEnabled()) {
- m_border = m_highlighted;
- setBorder(m_highlighted);
- }
- }
-
- public void mouseExited(MouseEvent e) {
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void mouseReleased(MouseEvent e)
+ {
m_border = m_inactive;
setBorder(m_inactive);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]