sdeboy 2003/06/19 23:57:41 Modified: src/java/org/apache/log4j/chainsaw LogUI.java FileSaveAction.java ChainsawTabbedPane.java FileMenu.java FileLoadAction.java ChainsawToolBarAndMenus.java Log: - Updated code that applies the Look & Feel - ensured L&F is set prior to any UI component creation and removed unneeded L&F updateComponentTreeUI code in the individual components - Fixed welcome panel menu disabling once welcome panel was closed Revision Changes Path 1.112 +33 -27 jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/LogUI.java Index: LogUI.java =================================================================== RCS file: /home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/LogUI.java,v retrieving revision 1.111 retrieving revision 1.112 diff -u -r1.111 -r1.112 --- LogUI.java 20 Jun 2003 04:49:12 -0000 1.111 +++ LogUI.java 20 Jun 2003 06:57:39 -0000 1.112 @@ -201,7 +201,7 @@ private JPanel receiversPanel; ChainsawTabbedPane tabbedPane; private JToolBar toolbar; - private final ChainsawStatusBar statusBar = new ChainsawStatusBar(); + private ChainsawStatusBar statusBar; private final Map tableModelMap = new HashMap(); private final Map tableMap = new HashMap(); final List pausedList = new Vector(); @@ -283,10 +283,12 @@ * */ private void initGUI() { + statusBar = new ChainsawStatusBar(); receiversPanel = new ReceiversPanel(this); tbms = new ChainsawToolBarAndMenus(this); toolbar = tbms.getToolbar(); setJMenuBar(tbms.getMenubar()); + tabbedPane = new ChainsawTabbedPane(); } /** @@ -294,17 +296,6 @@ * etc etc. */ public void loadSettings(LoadSettingsEvent event) { - lookAndFeelClassName = event.getSetting(LogUI.LOOK_AND_FEEL); - - if (lookAndFeelClassName != null) { - SwingUtilities.invokeLater( - new Runnable() { - public void run() { - applyLookAndFeel(lookAndFeelClassName); - } - }); - } - if (event.asBoolean(LogUI.STATUS_BAR)) { addStatusBar(); } else { @@ -344,12 +335,30 @@ * layout, table columns, and sets itself viewable. */ public void activateViewer() { + sm.configure( + new SettingsListener() { + public void loadSettings(LoadSettingsEvent event) { + lookAndFeelClassName = event.getSetting(LogUI.LOOK_AND_FEEL); + + if (lookAndFeelClassName != null) { + applyLookAndFeel(lookAndFeelClassName); + } + } + + public void saveSettings(SaveSettingsEvent event) { + //required because of SettingsListener interface..not used during load + } + }); + + if ( PluginRegistry.getPlugins( LogManager.getLoggerRepository(), Receiver.class).size() == 0) { noReceiversDefined = true; } + initGUI(); + /** * Get all the SocketReceivers and configure a new SocketNodeEventListener * so we can get notified of new Sockets @@ -374,8 +383,6 @@ item.addSocketNodeEventListener(socketListener); } - initGUI(); - List utilList = UtilLoggingLevel.getAllPossibleLevels(); // TODO: Replace the array list creating with the standard way of retreiving the Level set. (TBD) @@ -411,14 +418,16 @@ getContentPane().setLayout(new BorderLayout()); - tabbedPane = new ChainsawTabbedPane(); tabbedPane.addChangeListener(tbms); - tabbedPane.addChangeListener(new ChangeListener() { - //received a statechange event - selection changed - remove icon from selected index - public void stateChanged(ChangeEvent e) { - tabbedPane.setIconAt(tabbedPane.getSelectedIndex(), null); - } - }); + tabbedPane.addChangeListener( + new ChangeListener() { + //received a statechange event - selection changed - remove icon from selected index + public void stateChanged(ChangeEvent e) { + if (tabbedPane.getSelectedComponent() instanceof ChainsawTabbedPane) { + tabbedPane.setIconAt(tabbedPane.getSelectedIndex(), null); + } + } + }); KeyStroke ksRight = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, Event.CTRL_MASK); @@ -944,7 +953,8 @@ SwingUtilities.invokeLater( new Runnable() { public void run() { - tabbedPane.addANewTab(ident, thisPanel, new ImageIcon(ChainsawIcons.TOOL_TIP)); + tabbedPane.addANewTab( + ident, thisPanel, new ImageIcon(ChainsawIcons.TOOL_TIP)); } }); @@ -1057,12 +1067,7 @@ try { UIManager.setLookAndFeel(lookAndFeelClassName); SwingUtilities.updateComponentTreeUI(this); - SwingUtilities.updateComponentTreeUI(receiversPanel); - tbms.lookAndFeelUpdated(); - if (tbms != null) { - tbms.stateChange(); - } } catch (Exception e) { LogLog.error("Failed to change L&F", e); } @@ -2183,6 +2188,7 @@ private final String ident; private int lastCount; private int currentCount; + //the tabIconHandler is associated with a new tab, and a new tab always //has new events private boolean hasNewEvents = true; 1.11 +0 -6 jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/FileSaveAction.java Index: FileSaveAction.java =================================================================== RCS file: /home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/FileSaveAction.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- FileSaveAction.java 18 Jun 2003 19:10:21 -0000 1.10 +++ FileSaveAction.java 20 Jun 2003 06:57:40 -0000 1.11 @@ -103,12 +103,6 @@ this.parent = parent; } - void lookAndFeelUpdated() { - if (chooser !=null) { - SwingUtilities.updateComponentTreeUI(chooser); - } - } - /* * When the user chooses the Save action, * a File chooser is presented to allow them to 1.3 +79 -22 jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ChainsawTabbedPane.java Index: ChainsawTabbedPane.java =================================================================== RCS file: /home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ChainsawTabbedPane.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ChainsawTabbedPane.java 19 Jun 2003 05:50:12 -0000 1.2 +++ ChainsawTabbedPane.java 20 Jun 2003 06:57:40 -0000 1.3 @@ -1,4 +1,53 @@ /* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by the Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "log4j" and "Apache Software Foundation" must not be used to + * endorse or promote products derived from this software without prior + * written permission. For written permission, please contact + * [EMAIL PROTECTED] + * + * 5. Products derived from this software may not be called "Apache", nor may + * "Apache" appear in their name, without prior written permission of the + * Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of the Apache Software Foundation. For more information on the + * Apache Software Foundation, please see <http://www.apache.org/>. + * + */ + +/* * @author Paul Smith <[EMAIL PROTECTED]> * */ @@ -10,10 +59,11 @@ import javax.swing.JComponent; import javax.swing.JTabbedPane; + /** - * The only reason this class is needed is because + * The only reason this class is needed is because * of a stupid 'issue' with the JTabbedPane. - * + * * If the currently selected tab is the first tab, * and we insert a new tab at the front, then as * far as the JTabbedPane is concerned, NO STATE has @@ -21,16 +71,15 @@ * the same (even though the TAB is different - go figure) * and therefore no ChangeEvent is generated and sent * to listeners. Thanks very much Sun! - * + * * @see http://developer.java.sun.com/developer/bugParade/bugs/4253819.html * @author Paul Smith <[EMAIL PROTECTED]> + * @author Scott Deboy <[EMAIL PROTECTED]> * */ class ChainsawTabbedPane extends JTabbedPane { - - /** - * + * */ public ChainsawTabbedPane() { super(); @@ -43,27 +92,24 @@ super(tabPlacement); setBorder(null); } - + /** * Returns true if this TabbedPane has an instance of the WelcomePanel * in it * @return true/false */ boolean containsWelcomePanel() { - return indexOfTab("Welcome")>-1; + return indexOfTab("Welcome") > -1; } - - - /** - * Our custom implementation of inserting a new tab, + * Our custom implementation of inserting a new tab, * this method ALWAYS inserts it at the front because * we get an ArrayIndexOutOfBoundsException otherwise * under some JDK implementations. - * + * * This method also causes a fireStateChange() to be - * called so that listeners get notified of the event. + * called so that listeners get notified of the event. * See the class level comments for the reason why... * @param name * @param component @@ -71,27 +117,38 @@ public void addANewTab(String name, JComponent component, Icon icon) { int selectedIndex = getSelectedIndex(); super.insertTab(name, icon, component, null, 0); - setSelectedIndex(selectedIndex+1); + + if (getTabCount() >= (selectedIndex + 1)) { + setSelectedIndex(selectedIndex + 1); + } + super.fireStateChanged(); } public void setSelectedTab(int index) { - setSelectedIndex(index); - getSelectedComponent().setVisible(true); + if (getTabCount() >= index) { + setSelectedIndex(index); + } + + getSelectedComponent().setVisible(true); getSelectedComponent().validate(); super.fireStateChanged(); } - - public void addANewTab(String name, JComponent component, Icon icon, String tooltip) { + + public void addANewTab( + String name, JComponent component, Icon icon, String tooltip) { int selectedIndex = getSelectedIndex(); super.insertTab(name, icon, component, tooltip, 0); - setSelectedIndex(selectedIndex+1); + + if (getTabCount() >= (selectedIndex + 1)) { + setSelectedIndex(selectedIndex + 1); + } + super.fireStateChanged(); } - + public void remove(Component component) { super.remove(component); super.fireStateChanged(); } - } 1.11 +0 -6 jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/FileMenu.java Index: FileMenu.java =================================================================== RCS file: /home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/FileMenu.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- FileMenu.java 18 Jun 2003 01:55:41 -0000 1.10 +++ FileMenu.java 20 Jun 2003 06:57:40 -0000 1.11 @@ -64,12 +64,6 @@ add(menuItemExit); } - void lookAndFeelUpdated() { - ((FileSaveAction)saveAction).lookAndFeelUpdated(); - ((FileLoadAction)loadLog4JAction).lookAndFeelUpdated(); - ((FileLoadAction)loadUtilLoggingAction).lookAndFeelUpdated(); - } - Action getLog4JFileOpenAction() { return loadLog4JAction;} Action getUtilLoggingJFileOpenAction() { return loadUtilLoggingAction;} Action getFileSaveAction() { return saveAction;} 1.12 +0 -5 jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/FileLoadAction.java Index: FileLoadAction.java =================================================================== RCS file: /home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/FileLoadAction.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- FileLoadAction.java 18 Jun 2003 02:07:54 -0000 1.11 +++ FileLoadAction.java 20 Jun 2003 06:57:40 -0000 1.12 @@ -164,9 +164,4 @@ } } } - void lookAndFeelUpdated() { - if (chooser!=null) { - SwingUtilities.updateComponentTreeUI(chooser); - } - } } 1.45 +1 -9 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.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- ChainsawToolBarAndMenus.java 18 Jun 2003 22:24:01 -0000 1.44 +++ ChainsawToolBarAndMenus.java 20 Jun 2003 06:57:40 -0000 1.45 @@ -394,10 +394,6 @@ return toolbar; } - void lookAndFeelUpdated() { - fileMenu.lookAndFeelUpdated(); - } - private Action createClearAction() { final Action action = new AbstractAction("Clear") { @@ -1022,11 +1018,7 @@ logui.getStatusBar().clear(); findTextField.setEnabled(false); - if (logui.tabbedPane.containsWelcomePanel()) { - closeAction.setEnabled(true); - } else { - closeAction.setEnabled(false); - } + closeAction.setEnabled(true); } else { fileMenu.getFileSaveAction().setEnabled(true); findTextField.setEnabled(true);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]