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]