psmith 2003/12/13 21:04:19
Modified: src/java/org/apache/log4j/chainsaw
ChainsawToolBarAndMenus.java LogUI.java
AbstractPreferencePanel.java
ApplicationPreferenceModel.java
ApplicationPreferenceModelPanel.java
src/java/org/apache/log4j/chainsaw/prefs default.properties
Log:
Refactored more of the View preferences into the PreferencesModel.
Revision Changes Path
1.25 +25 -46
jakarta-log4j/src/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
Index: ChainsawToolBarAndMenus.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- ChainsawToolBarAndMenus.java 12 Dec 2003 10:27:47 -0000 1.24
+++ ChainsawToolBarAndMenus.java 14 Dec 2003 05:04:19 -0000 1.25
@@ -56,6 +56,8 @@
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -75,11 +77,9 @@
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JSlider;
-import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
-import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
@@ -136,9 +136,9 @@
new JRadioButtonMenuItem("Icon");
private final JRadioButtonMenuItem levelDisplayText =
new JRadioButtonMenuItem("Text");
- private final JRadioButtonMenuItem tabsBottom =
- new JRadioButtonMenuItem("Bottom");
- private final JRadioButtonMenuItem tabsTop = new JRadioButtonMenuItem("Top");
+// 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;
@@ -186,6 +186,13 @@
toggleDetailPaneAction, showPreferencesAction, showColorPanelAction,
undockAction, toggleLogTreeAction, changeModelAction,
};
+
+ logui.getApplicationPreferenceModel().addPropertyChangeListener("statusBar",
new PropertyChangeListener() {
+
+ public void propertyChange(PropertyChangeEvent evt) {
+ boolean value = ((Boolean)evt.getNewValue()).booleanValue();
+ toggleStatusBarCheck.setSelected(value);
+ }});
}
/**
@@ -458,18 +465,14 @@
final Action toggleStatusBarAction =
new AbstractAction("Show Status bar") {
public void actionPerformed(ActionEvent arg0) {
- if (toggleStatusBarCheck.isSelected()) {
- logui.addStatusBar();
- } else {
- logui.removeStatusBar();
- }
+
logui.getApplicationPreferenceModel().setStatusBar(toggleStatusBarCheck.isSelected());
}
};
toggleStatusBarAction.putValue(
Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_B));
toggleStatusBarCheck.setAction(toggleStatusBarAction);
- toggleStatusBarCheck.setSelected(true);
+
toggleStatusBarCheck.setSelected(logui.getApplicationPreferenceModel().isStatusBar());
activeTabMenu.add(pause);
activeTabMenu.add(toggleCyclicMenuItem);
@@ -492,27 +495,6 @@
viewMenu.add(menuItemClose);
viewMenu.addSeparator();
- ButtonGroup tabPlacementGroup = new ButtonGroup();
- JMenu tabMenu = new JMenu("Tabs");
- tabMenu.setMnemonic('a');
-
- tabPlacementGroup.add(tabsTop);
- tabPlacementGroup.add(tabsBottom);
-
- tabsTop.addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- logui.getTabbedPane().setTabPlacement(JTabbedPane.TOP);
- }
- });
-
- tabsBottom.addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- logui.getTabbedPane().setTabPlacement(JTabbedPane.BOTTOM);
- }
- });
-
final JMenu lookAndFeelMenu = new JMenu("Look & Feel");
lookAndFeelMenu.setMnemonic('L');
@@ -570,10 +552,7 @@
levelDisplayText.setSelected(true);
}
- tabMenu.add(tabsTop);
- tabMenu.add(tabsBottom);
- viewMenu.add(tabMenu);
viewMenu.add(lookAndFeelMenu);
viewMenu.addSeparator();
viewMenu.add(showAppPrefs);
@@ -892,17 +871,17 @@
}
private void scanState() {
- switch (logui.getTabbedPane().getTabPlacement()) {
- case SwingConstants.TOP:
- tabsTop.setSelected(true);
-
- break;
-
- case SwingConstants.BOTTOM:
- tabsBottom.setSelected(true);
-
- break;
- }
+// switch (logui.getTabbedPane().getTabPlacement()) {
+// case SwingConstants.TOP:
+// tabsTop.setSelected(true);
+//
+// break;
+//
+// case SwingConstants.BOTTOM:
+// tabsBottom.setSelected(true);
+//
+// break;
+// }
toggleStatusBarCheck.setSelected(logui.isStatusBarVisible());
toggleShowReceiversCheck.setSelected(logui.isReceiverPanelVisible());
1.53 +53 -42 jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java
Index: LogUI.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogUI.java,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- LogUI.java 13 Dec 2003 02:57:23 -0000 1.52
+++ LogUI.java 14 Dec 2003 05:04:19 -0000 1.53
@@ -95,6 +95,7 @@
import javax.swing.JToolBar;
import javax.swing.JWindow;
import javax.swing.KeyStroke;
+import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
@@ -168,7 +169,7 @@
private ReceiversPanel receiversPanel;
private ChainsawTabbedPane tabbedPane;
private JToolBar toolbar;
- private ChainsawStatusBar statusBar;
+ private final ChainsawStatusBar statusBar = new ChainsawStatusBar();
private final ApplicationPreferenceModel applicationPreferenceModel = new
ApplicationPreferenceModel();
private final ApplicationPreferenceModelPanel applicationPreferenceModelPanel =
new ApplicationPreferenceModelPanel(applicationPreferenceModel);
private final Map tableModelMap = new HashMap();
@@ -315,18 +316,12 @@
*
*/
private void initGUI() {
- statusBar = new ChainsawStatusBar();
+ welcomePanel = new WelcomePanel(this);
receiversPanel = new ReceiversPanel(this);
setToolBarAndMenus(new ChainsawToolBarAndMenus(this));
toolbar = getToolBarAndMenus().getToolbar();
setJMenuBar(getToolBarAndMenus().getMenubar());
setTabbedPane(new ChainsawTabbedPane());
- preferencesFrame.setTitle("'Application-wide Preferences");
- preferencesFrame.setIconImage(
- ((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
- preferencesFrame.getContentPane().add(applicationPreferenceModelPanel);
-
- preferencesFrame.setSize(640, 480);
applicationPreferenceModelPanel.setOkCancelActionListener(
new ActionListener() {
@@ -345,11 +340,6 @@
* DOCUMENT ME!
*/
public void loadSettings(LoadSettingsEvent event) {
- if (event.asBoolean(LogUI.STATUS_BAR)) {
- addStatusBar();
- } else {
- removeStatusBar();
- }
setLocation(
event.asInt(LogUI.MAIN_WINDOW_X), event.asInt(LogUI.MAIN_WINDOW_Y));
@@ -377,9 +367,6 @@
event.saveSetting(LogUI.LOOK_AND_FEEL, lookAndFeelClassName);
}
- event.saveSetting(
- LogUI.STATUS_BAR, isStatusBarVisible() ? Boolean.TRUE : Boolean.FALSE);
-
if (configURLToUse != null) {
event.saveSetting(LogUI.CONFIG_FILE_TO_USE, configURLToUse.toString());
}
@@ -391,7 +378,7 @@
* table columns, and sets itself viewable.
*/
public void activateViewer() {
- welcomePanel = new WelcomePanel(this);
+ initGUI();
applicationPreferenceModel.addPropertyChangeListener("identifierExpression",
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
@@ -405,6 +392,33 @@
}
} );
+ applicationPreferenceModel.addPropertyChangeListener("tabPlacement", new
PropertyChangeListener() {
+
+ public void propertyChange(final PropertyChangeEvent evt) {
+ SwingUtilities.invokeLater(new Runnable() {
+
+ public void run() {
+ int placement = ((Integer)evt.getNewValue()).intValue();
+ switch (placement) {
+ case SwingConstants.TOP :
+ case SwingConstants.BOTTOM:
+ tabbedPane.setTabPlacement(placement);
+ break;
+
+ default :
+ break;
+ }
+ }});
+ }});
+
+ applicationPreferenceModel.addPropertyChangeListener("statusBar", new
PropertyChangeListener() {
+
+ public void propertyChange(PropertyChangeEvent evt) {
+ boolean value = ((Boolean)evt.getNewValue()).booleanValue();
+ setStatusBarVisible(value);
+ }});
+
+ setStatusBarVisible(applicationPreferenceModel.isStatusBar());
final SocketNodeEventListener socketListener =
new SocketNodeEventListener() {
@@ -413,7 +427,7 @@
}
public void socketClosedEvent(Exception e) {
- statusBar.setMessage("Collection lost! :: " + e.getMessage());
+ statusBar.setMessage("Connection lost! :: " + e.getMessage());
}
};
@@ -509,7 +523,6 @@
noReceiversDefined = true;
}
- initGUI();
List utilList = UtilLoggingLevel.getAllPossibleLevels();
@@ -642,6 +655,12 @@
exit();
}
});
+ preferencesFrame.setTitle("'Application-wide Preferences");
+ preferencesFrame.setIconImage(
+ ((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
+ preferencesFrame.getContentPane().add(applicationPreferenceModelPanel);
+
+ preferencesFrame.setSize(640, 480);
getSettingsManager().configure(
new SettingsListener() {
public void loadSettings(LoadSettingsEvent event) {
@@ -656,7 +675,7 @@
//required because of SettingsListener interface..not used during load
}
});
-
+
pack();
final JPopupMenu tabPopup = new JPopupMenu();
@@ -1212,31 +1231,22 @@
return null;
}
- void removeStatusBar() {
+ /**
+ * @param b
+ */
+ private void setStatusBarVisible(final boolean visible) {
+ LogLog.debug("Setting StatusBar to " + visible);
SwingUtilities.invokeLater(
- new Runnable() {
- public void run() {
- getContentPane().remove(statusBar);
- getContentPane().validate();
- getContentPane().repaint();
- }
- });
+ new Runnable() {
+ public void run() {
+ statusBar.setVisible(visible);
+ }
+ });
+
}
boolean isStatusBarVisible() {
- return getContentPane().isAncestorOf(statusBar);
- }
-
- void addStatusBar() {
- removeStatusBar();
- SwingUtilities.invokeLater(
- new Runnable() {
- public void run() {
- getContentPane().add(statusBar, BorderLayout.SOUTH);
- getContentPane().validate();
- getContentPane().repaint();
- }
- });
+ return statusBar.isVisible();
}
/**
@@ -1307,7 +1317,8 @@
UIManager.setLookAndFeel(lookAndFeelClassName);
SwingUtilities.updateComponentTreeUI(this);
SwingUtilities.updateComponentTreeUI(preferencesFrame);
- } catch (Exception e) {
+ applicationPreferenceModelPanel.notifyOfLookAndFeelChange();
+ } catch (Exception e) {
LogLog.error("Failed to change L&F", e);
}
}
1.2 +18 -2
jakarta-log4j/src/java/org/apache/log4j/chainsaw/AbstractPreferencePanel.java
Index: AbstractPreferencePanel.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/AbstractPreferencePanel.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractPreferencePanel.java 11 Dec 2003 22:31:29 -0000 1.1
+++ AbstractPreferencePanel.java 14 Dec 2003 05:04:19 -0000 1.2
@@ -52,6 +52,7 @@
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionListener;
+import java.util.Enumeration;
import javax.swing.BorderFactory;
import javax.swing.Box;
@@ -61,6 +62,7 @@
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
+import javax.swing.SwingUtilities;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
@@ -100,7 +102,7 @@
private final JButton cancelButton = new JButton("Cancel");
private ActionListener okCancelListener;
private Component currentlyDisplayedPanel = null;
-
+ private final JTree prefTree = new JTree();
/**
* Setup and layout for the components
*/
@@ -110,7 +112,8 @@
setLayout(new BorderLayout(5, 5));
setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
- final JTree prefTree = new JTree(createTreeModel());
+ prefTree.setModel(createTreeModel());
+
prefTree.setRootVisible(false);
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
@@ -192,6 +195,19 @@
selectedPrefPanel.repaint();
}
+ public void notifyOfLookAndFeelChange() {
+ SwingUtilities.updateComponentTreeUI(this);
+
+ Enumeration enum =
((DefaultMutableTreeNode)prefTree.getModel().getRoot()).breadthFirstEnumeration();
+ while (enum.hasMoreElements()) {
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode) enum.nextElement();
+ if (node.getUserObject() instanceof Component) {
+ Component c = (Component) node.getUserObject();
+ SwingUtilities.updateComponentTreeUI(c);
+ }
+ }
+ }
+
public void setOkCancelActionListener(ActionListener l)
{
this.okCancelListener = l;
1.5 +41 -1
jakarta-log4j/src/java/org/apache/log4j/chainsaw/ApplicationPreferenceModel.java
Index: ApplicationPreferenceModel.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ApplicationPreferenceModel.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ApplicationPreferenceModel.java 12 Dec 2003 02:25:53 -0000 1.4
+++ ApplicationPreferenceModel.java 14 Dec 2003 05:04:19 -0000 1.5
@@ -67,12 +67,15 @@
class ApplicationPreferenceModel implements SettingsListener {
private boolean showNoReceiverWarning ;
+ private boolean statusBar;
+
private int responsiveness;
private String identifierExpression = Constants.HOSTNAME_KEY + " - " +
Constants.APPLICATION_KEY;
private final PropertyChangeSupport propertySupport =
new PropertyChangeSupport(this);
+ private int tabPlacement;
/**
* @param listener
@@ -193,7 +196,8 @@
setShowNoReceiverWarning(event.asBoolean("showNoReceiverWarning"));
setIdentifierExpression(event.getSetting("identifierExpression"));
setResponsiveness(event.asInt("Responsiveness"));
-
+ setTabPlacement(event.asInt("tabPlacement"));
+ setStatusBar(event.asBoolean("statusBar"));
}
/* (non-Javadoc)
@@ -203,6 +207,8 @@
event.saveSetting("showNoReceiverWarning", isShowNoReceiverWarning());
event.saveSetting("identifierExpression", getIdentifierExpression());
event.saveSetting("Responsiveness", getResponsiveness());
+ event.saveSetting("tabPlacement", getTabPlacement());
+ event.saveSetting("statusBar", isStatusBar());
}
/**
@@ -214,6 +220,8 @@
setIdentifierExpression(model.getIdentifierExpression());
setShowNoReceiverWarning(model.isShowNoReceiverWarning());
setResponsiveness(model.getResponsiveness());
+ setTabPlacement(model.getTabPlacement());
+ setStatusBar(model.isStatusBar());
}
/**
* @return Returns the responsiveness.
@@ -231,4 +239,36 @@
this.responsiveness = responsiveness;
firePropertyChange("responsiveness", oldvalue, responsiveness);
}
+
+ /**
+ * @param i
+ */
+ public void setTabPlacement(int i) {
+ int oldValue = this.tabPlacement;
+ this.tabPlacement = i;
+ firePropertyChange("tabPlacement",oldValue,this.tabPlacement);
+ }
+ /**
+ * @return Returns the tabPlacement.
+ */
+ public final int getTabPlacement() {
+ return tabPlacement;
+ }
+
+ /**
+ * @return Returns the statusBar.
+ */
+ public final boolean isStatusBar() {
+ return statusBar;
+ }
+
+ /**
+ * @param statusBar The statusBar to set.
+ */
+ public final void setStatusBar(boolean statusBar) {
+ boolean oldValue = this.statusBar;
+ this.statusBar = statusBar;
+ firePropertyChange("statusBar", oldValue, this.statusBar);
+ }
+
}
1.4 +95 -2
jakarta-log4j/src/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
Index: ApplicationPreferenceModelPanel.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ApplicationPreferenceModelPanel.java 12 Dec 2003 09:05:03 -0000 1.3
+++ ApplicationPreferenceModelPanel.java 14 Dec 2003 05:04:19 -0000 1.4
@@ -59,12 +59,15 @@
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
+import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.JRadioButton;
import javax.swing.JSlider;
import javax.swing.JTextField;
+import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.tree.DefaultMutableTreeNode;
@@ -151,13 +154,103 @@
DefaultMutableTreeNode general = new DefaultMutableTreeNode(
new GeneralAllPrefPanel());
-
+ DefaultMutableTreeNode visuals = new DefaultMutableTreeNode(
+ new VisualsPrefPanel());
+
rootNode.add(general);
-
+ rootNode.add(visuals);
+
return model;
}
+ public class VisualsPrefPanel extends BasicPrefPanel {
+
+ private final JRadioButton topPlacement = new JRadioButton("Top");
+ private final JRadioButton bottomPlacement = new JRadioButton("Bottom");
+
+ private final JCheckBox statusBar = new JCheckBox("Show Status bar");
+
+ private VisualsPrefPanel() {
+ super("Visuals");
+ setupComponents();
+ setupListeners();
+ }
+
+ /**
+ *
+ */
+ private void setupListeners() {
+ topPlacement.addActionListener(new ActionListener() {
+
+ public void actionPerformed(ActionEvent e) {
+ uncommittedPreferenceModel.setTabPlacement(SwingConstants.TOP);
+ }});
+ bottomPlacement.addActionListener(new ActionListener() {
+
+ public void actionPerformed(ActionEvent e) {
+ uncommittedPreferenceModel.setTabPlacement(SwingConstants.BOTTOM);
+ }});
+
+ statusBar.addActionListener(new ActionListener() {
+
+ public void actionPerformed(ActionEvent e) {
+ uncommittedPreferenceModel.setStatusBar(statusBar.isSelected());
+ }});
+
+ uncommittedPreferenceModel.addPropertyChangeListener("tabPlacement", new
PropertyChangeListener() {
+
+ public void propertyChange(PropertyChangeEvent evt) {
+ int value = ((Integer)evt.getNewValue()).intValue();
+ switch (value) {
+ case SwingConstants.TOP :
+ topPlacement.setSelected(true);
+ break;
+ case SwingConstants.BOTTOM :
+ bottomPlacement.setSelected(true);
+ break;
+
+ default :
+ break;
+ }
+ }});
+
+ uncommittedPreferenceModel.addPropertyChangeListener("statusBar", new
PropertyChangeListener() {
+
+ public void propertyChange(PropertyChangeEvent evt) {
+ statusBar.setSelected(((Boolean)evt.getNewValue()).booleanValue());
+
+ }});
+ }
+
+ /**
+ *
+ */
+ private void setupComponents() {
+ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+
+
+
+ Box tabPlacementBox = new Box(BoxLayout.Y_AXIS);
+
+
tabPlacementBox.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
"Tab Placement"));
+
+ ButtonGroup tabPlacementGroup = new ButtonGroup();
+
+ tabPlacementGroup.add(topPlacement);
+ tabPlacementGroup.add(bottomPlacement);
+
+
+ tabPlacementBox.add(topPlacement);
+ tabPlacementBox.add(bottomPlacement);
+
+ add(tabPlacementBox);
+ add(statusBar);
+
+
+ }
+
+ }
/**
* @author psmith
*
1.6 +2 -2
jakarta-log4j/src/java/org/apache/log4j/chainsaw/prefs/default.properties
Index: default.properties
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/prefs/default.properties,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- default.properties 12 Dec 2003 09:05:03 -0000 1.5
+++ default.properties 14 Dec 2003 05:04:19 -0000 1.6
@@ -8,11 +8,11 @@
main.window.y=50
main.window.width=640
main.window.height=480
-tab.placement=3
+tabPlacement=3
Responsiveness=1
table.columns.order=ID,Timestamp,Level,Logger,Thread,Message,NDC,MDC,Throwable,Class,Method,File,Line,Properties
table.columns.widths=50,150,50,100,150,300,150,100,300,150,100,100,100,100
-StatusBar=true
+statusBar=true
level.display=icons
SavedConfigs.Size=0
DateFormat.1=HH:mm:ss
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]