You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@logging.apache.org by ps...@apache.org on 2007/08/23 09:14:16 UTC

svn commit: r568858 - in /logging/chainsaw/trunk/src: changes/changes.xml main/java/org/apache/log4j/chainsaw/ChainsawTabbedPane.java main/java/org/apache/log4j/chainsaw/LogUI.java main/java/org/apache/log4j/chainsaw/SavableTabSetting.java

Author: psmith
Date: Thu Aug 23 00:14:15 2007
New Revision: 568858

URL: http://svn.apache.org/viewvc?rev=568858&view=rev
Log:
Bug 42883 Applied patch provided by Isuru to remember hidden log panels.

Added:
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/SavableTabSetting.java
Modified:
    logging/chainsaw/trunk/src/changes/changes.xml
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawTabbedPane.java
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java

Modified: logging/chainsaw/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/changes/changes.xml?rev=568858&r1=568857&r2=568858&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/changes/changes.xml (original)
+++ logging/chainsaw/trunk/src/changes/changes.xml Thu Aug 23 00:14:15 2007
@@ -33,6 +33,9 @@
 	<action dev="psmith" issue="43158" type="add due-to="Isuru Suriarachchi" due-to-email="">
 		Added ability to remember last created receivers in an xml file, and load them at startup.
 	</action>
+	<action dev="psmith" issue="ASF Bugzilla Bug 42883" type="add due-to="Isuru Suriarachchi" due-to-email="">
+		Added ability to remember hidden log panels.
+	</action>
     </release>
   </body>
 </document>

Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawTabbedPane.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawTabbedPane.java?rev=568858&r1=568857&r2=568858&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawTabbedPane.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/ChainsawTabbedPane.java Thu Aug 23 00:14:15 2007
@@ -21,12 +21,23 @@
 */
 package org.apache.log4j.chainsaw;
 
+import org.apache.log4j.chainsaw.prefs.SettingsManager;
+import org.apache.log4j.chainsaw.prefs.SettingsListener;
+import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent;
+import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent;
+
 import java.awt.Component;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.FileReader;
 
 import javax.swing.Icon;
 import javax.swing.JComponent;
 import javax.swing.JTabbedPane;
 
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+
 
 /**
  * The only reason this class is needed is because
@@ -47,7 +58,11 @@
  * @author Scott Deboy <sd...@apache.org>
  *
  */
-class ChainsawTabbedPane extends JTabbedPane {
+
+class ChainsawTabbedPane extends JTabbedPane implements SettingsListener {
+  public SavableTabSetting tabSetting;
+  public static final String WELCOME_TAB = "Welcome";
+  public static final String DRAG_DROP_TAB = "Drag & Drop XML log files here";
   /**
    *
    * Create the tabbed pane.  
@@ -103,5 +118,64 @@
   public void remove(Component component) {
     super.remove(component);
     super.fireStateChanged();
+  }
+
+  /**
+   * Saves the state of the currently active tabs to an XML file.
+   * Only considers the Welcome, Drag and Drop and chainsaw-log
+   * panels as they are the panel which are always running. Saves
+   * whether they are hidden or not....
+   */
+
+  public void saveSettings(SaveSettingsEvent event){
+   File file = new File(SettingsManager.getInstance().getSettingsDirectory(), "tab-settings.xml");
+   XStream stream = new XStream(new DomDriver());
+   try {
+     FileWriter writer = new FileWriter(file);
+     int count = super.getTabCount();
+     String title;
+     SavableTabSetting setting = new SavableTabSetting();
+     for(int i = 0 ; i < count ; i++){
+       title = super.getTitleAt(i);
+       if(title.equals("Welcome")){
+         setting.setWelcome(true);
+       } else if (title.equals("Drag & Drop XML log files here")){
+         setting.setDragdrop(true);
+       } else if (title.equals("chainsaw-log")){
+         setting.setChainsawLog(true);
+       }
+     }
+
+     stream.toXML(setting, writer);
+     writer.close();
+
+   } catch (Exception e) {
+     e.printStackTrace();
+   }
+  }
+
+  /**
+   * Loads the saved tab setting by reading the XML file.
+   * If the file doesn't exist, all three panels should be
+   * shown as the default setting....
+   */
+
+  public void loadSettings(LoadSettingsEvent event){
+    File file = new File(SettingsManager.getInstance().getSettingsDirectory(), "tab-settings.xml");
+    XStream stream = new XStream(new DomDriver());
+    try {
+      if (file.exists()) {
+        FileReader reader = new FileReader(file);
+        tabSetting = (SavableTabSetting) stream.fromXML(reader);
+        reader.close();
+      } else {
+        tabSetting = new SavableTabSetting();
+        tabSetting.setWelcome(true);
+        tabSetting.setDragdrop(true);
+        tabSetting.setChainsawLog(true);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
   }
 }

Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java?rev=568858&r1=568857&r2=568858&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java Thu Aug 23 00:14:15 2007
@@ -436,6 +436,8 @@
     setJMenuBar(getToolBarAndMenus().getMenubar());
     
     setTabbedPane(new ChainsawTabbedPane());
+    getSettingsManager().addSettingsListener(getTabbedPane());
+    getSettingsManager().configure(getTabbedPane());
     
     /**
      * This adds Drag & Drop capability to Chainsaw
@@ -487,7 +489,7 @@
   private void addDragDropPanel(){
     final JLabel lbl  = new JLabel();
     lbl.setEnabled(false);
-    final String dndTitle = "Drag & Drop XML log files here";
+    final String dndTitle = ChainsawTabbedPane.DRAG_DROP_TAB;
     SwingUtilities.invokeLater(new Runnable() {
     	public void run() {
     	    ensureWelcomePanelVisible();
@@ -849,9 +851,9 @@
           if (selectedComp instanceof LogPanel) {
             currentName = getCurrentLogPanel().getIdentifier();
           } else if (selectedComp instanceof WelcomePanel) {
-            currentName = "Welcome";
+            currentName = ChainsawTabbedPane.WELCOME_TAB;
           } else {
-            currentName = "Drag & Drop XML log files here";
+            currentName = ChainsawTabbedPane.DRAG_DROP_TAB;
           }
 
           int count = getTabbedPane().getTabCount();
@@ -1075,6 +1077,20 @@
           }
         }
       });
+
+    /**
+     * loads the saved tab settings and if there are hidden tabs,
+     * hide those tabs out of currently loaded tabs..
+     */
+
+    if (!getTabbedPane().tabSetting.isWelcome()){
+      displayPanel(ChainsawTabbedPane.WELCOME_TAB, false);
+    }
+    if (!getTabbedPane().tabSetting.isDragdrop()){
+      displayPanel(ChainsawTabbedPane.DRAG_DROP_TAB, false);
+    }
+    tbms.stateChange();
+
   }
 
   /**
@@ -1439,16 +1455,16 @@
 
   void addWelcomePanel() {
     getTabbedPane().insertTab(
-      "Welcome",  new ImageIcon(ChainsawIcons.ABOUT),welcomePanel,
+      ChainsawTabbedPane.WELCOME_TAB,  new ImageIcon(ChainsawIcons.ABOUT),welcomePanel,
       "Welcome/Help", 0);
     getTabbedPane().setSelectedComponent(welcomePanel);
-    getPanelMap().put("Welcome", welcomePanel);
+    getPanelMap().put(ChainsawTabbedPane.WELCOME_TAB, welcomePanel);
   }
 
   void removeWelcomePanel() {
     if (getTabbedPane().containsWelcomePanel()) {
       getTabbedPane().remove(
-        getTabbedPane().getComponentAt(getTabbedPane().indexOfTab("Welcome")));
+        getTabbedPane().getComponentAt(getTabbedPane().indexOfTab(ChainsawTabbedPane.WELCOME_TAB)));
     }
   }
 
@@ -1504,7 +1520,7 @@
       int index = getTabbedPane().indexOfTab(panelName);
 
       if ((index == -1) && display) {
-        if (panelName.equals("Drag & Drop XML log files here")){
+        if (panelName.equals(ChainsawTabbedPane.DRAG_DROP_TAB)){
           addDragDropPanel();
         } else {
           getTabbedPane().addTab(panelName, p);
@@ -1922,6 +1938,9 @@
             getTabbedPane().addANewTab(
               ident, thisPanel, new ImageIcon(ChainsawIcons.ANIM_RADIO_TOWER));
             thisPanel.receiveEventBatch(ident, events);
+            if(!getTabbedPane().tabSetting.isChainsawLog()){
+              displayPanel("chainsaw-log", false);
+            }
           }
         });
 

Added: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/SavableTabSetting.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/SavableTabSetting.java?rev=568858&view=auto
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/SavableTabSetting.java (added)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/SavableTabSetting.java Thu Aug 23 00:14:15 2007
@@ -0,0 +1,36 @@
+package org.apache.log4j.chainsaw;
+
+/**
+ * This class is used to in saving and loading the tab settings
+ * of Chainsaw....
+ */
+
+public class SavableTabSetting {
+    private boolean welcome = false;
+    private boolean dragdrop = false;
+    private boolean chainsawLog = false;
+
+    public void setDragdrop(boolean dragdrop) {
+        this.dragdrop = dragdrop;
+    }
+
+    public void setWelcome(boolean welcome) {
+        this.welcome = welcome;
+    }
+
+    public void setChainsawLog(boolean chainsawLog) {
+        this.chainsawLog = chainsawLog;
+    }
+
+    public boolean isWelcome() {
+        return welcome;
+    }
+
+    public boolean isDragdrop() {
+        return dragdrop;
+    }
+
+    public boolean isChainsawLog() {
+        return chainsawLog;
+    }
+}