You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rm...@apache.org on 2022/06/20 14:45:42 UTC

[logging-chainsaw] 03/04: Toolbar/statusbar/receiver works

This is an automated email from the ASF dual-hosted git repository.

rmiddleton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-chainsaw.git

commit a473f38b26a2ad9e32c222f2fcfcdf310fb9a1db
Author: Robert Middleton <ro...@rm5248.com>
AuthorDate: Mon Jun 20 10:00:16 2022 -0400

    Toolbar/statusbar/receiver works
---
 .../chainsaw/ApplicationPreferenceModelPanel.java  | 10 +++-
 .../log4j/chainsaw/ChainsawToolBarAndMenus.java    | 65 +++++++++++-----------
 src/main/java/org/apache/log4j/chainsaw/LogUI.java | 57 +++++++++++++------
 .../apache/log4j/chainsaw/color/RuleColorizer.java |  7 ++-
 .../log4j/chainsaw/prefs/SettingsManager.java      | 15 ++++-
 5 files changed, 99 insertions(+), 55 deletions(-)

diff --git a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
index 9678a08..dc6439b 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
@@ -34,6 +34,8 @@ import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Locale;
+import org.apache.commons.configuration2.AbstractConfiguration;
+import org.apache.log4j.chainsaw.prefs.SettingsManager;
 
 
 /**
@@ -170,19 +172,21 @@ public class ApplicationPreferenceModelPanel extends AbstractPreferencePanel {
          *
          */
         private void setupListeners() {
+            final AbstractConfiguration config = SettingsManager.getInstance().getGlobalConfiguration();
+
             topPlacement.addActionListener(
                 e -> uncommittedPreferenceModel.setTabPlacement(SwingConstants.TOP));
             bottomPlacement.addActionListener(
                 e -> uncommittedPreferenceModel.setTabPlacement(SwingConstants.BOTTOM));
 
             statusBar.addActionListener(
-                e -> uncommittedPreferenceModel.setStatusBar(statusBar.isSelected()));
+                e -> config.setProperty("statusBar",statusBar.isSelected()));
 
             toolBar.addActionListener(
-                e -> uncommittedPreferenceModel.setToolbar(toolBar.isSelected()));
+                e -> config.setProperty("toolbar",toolBar.isSelected()));
 
             receivers.addActionListener(
-                e -> uncommittedPreferenceModel.setReceivers(receivers.isSelected()));
+                e -> config.setProperty("showReceivers",receivers.isSelected()));
 
             uncommittedPreferenceModel.addPropertyChangeListener(
                 "tabPlacement",
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
index 7fbeff3..c8e3988 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
@@ -33,6 +33,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import org.apache.commons.configuration2.AbstractConfiguration;
+import org.apache.commons.configuration2.event.ConfigurationEvent;
 import org.apache.log4j.chainsaw.prefs.SettingsManager;
 
 
@@ -67,6 +68,8 @@ class ChainsawToolBarAndMenus implements ChangeListener {
     private final Collection lookAndFeelMenus = new ArrayList();
     private final JCheckBoxMenuItem toggleShowReceiversCheck =
         new JCheckBoxMenuItem();
+    private final JCheckBoxMenuItem toggleShowToolbarCheck =
+            new JCheckBoxMenuItem();
     private final JCheckBoxMenuItem toggleLogTreeMenuItem =
         new JCheckBoxMenuItem();
     private final JCheckBoxMenuItem toggleScrollToBottomMenuItem =
@@ -132,20 +135,22 @@ class ChainsawToolBarAndMenus implements ChangeListener {
                 toggleLogTreeAction, toggleScrollToBottomAction, changeModelAction,
             };
 
-//        logui.getApplicationPreferenceModel().addPropertyChangeListener(
-//            "statusBar",
-//            evt -> {
-//                boolean value = (Boolean) evt.getNewValue();
-//                toggleStatusBarCheck.setSelected(value);
-//            });
-//
-//        logui.getApplicationPreferenceModel().addPropertyChangeListener(
-//            "receivers",
-//            evt -> {
-//                boolean value = (Boolean) evt.getNewValue();
-//                showReceiversButton.setSelected(value);
-//                toggleShowReceiversCheck.setSelected(value);
-//            });
+            SettingsManager.getInstance().getGlobalConfiguration().addEventListener(ConfigurationEvent.SET_PROPERTY,
+            evt -> {
+                if( evt.getPropertyName().equals( "statusBar" ) ){
+                    boolean value = (Boolean) evt.getPropertyValue();
+                    toggleStatusBarCheck.setSelected(value);
+                }
+            });
+
+            SettingsManager.getInstance().getGlobalConfiguration().addEventListener(ConfigurationEvent.SET_PROPERTY,
+            evt -> {
+                if( evt.getPropertyName().equals( "showReceivers" ) ){
+                    boolean value = (Boolean) evt.getPropertyValue();
+                    showReceiversButton.setSelected(value);
+                    toggleShowReceiversCheck.setSelected(value);
+                }
+            });
     }
 
     /**
@@ -389,16 +394,8 @@ class ChainsawToolBarAndMenus implements ChangeListener {
 
         AbstractConfiguration configuration = SettingsManager.getInstance().getGlobalConfiguration();
 
-        final JCheckBoxMenuItem showToolbarCheck =
-            new JCheckBoxMenuItem(toggleToolbarAction);
-        showToolbarCheck.setSelected(configuration.getBoolean("toolbar", true));
-
-//        logui.getApplicationPreferenceModel().addPropertyChangeListener(
-//            "toolbar",
-//            evt -> {
-//                boolean value = (Boolean) evt.getNewValue();
-//                showToolbarCheck.setSelected(value);
-//            });
+        toggleShowToolbarCheck.setAction(toggleToolbarAction);
+        toggleShowToolbarCheck.setSelected(configuration.getBoolean("toolbar", true));
 
         menuShowWelcome.setAction(toggleWelcomeVisibleAction);
 
@@ -439,8 +436,9 @@ class ChainsawToolBarAndMenus implements ChangeListener {
         final Action toggleStatusBarAction =
             new AbstractAction("Show Status bar") {
                 public void actionPerformed(ActionEvent arg0) {
-//                    logui.getApplicationPreferenceModel().setStatusBar(
-//                        toggleStatusBarCheck.isSelected());
+                    boolean isSelected = toggleStatusBarCheck.isSelected();
+                    SettingsManager.getInstance().getGlobalConfiguration()
+                            .setProperty("statusBar", isSelected);
                 }
             };
 
@@ -478,7 +476,7 @@ class ChainsawToolBarAndMenus implements ChangeListener {
         activeTabMenu.add(toggleScrollToBottomMenuItem);
         activeTabMenu.add(menuItemUseRightMouse);
 
-        viewMenu.add(showToolbarCheck);
+        viewMenu.add(toggleShowToolbarCheck);
         viewMenu.add(toggleStatusBarCheck);
         viewMenu.add(toggleShowReceiversCheck);
         viewMenu.add(menuShowWelcome);
@@ -624,8 +622,12 @@ class ChainsawToolBarAndMenus implements ChangeListener {
         final Action action =
             new AbstractAction("Show Receivers") {
                 public void actionPerformed(ActionEvent arg0) {
-//                    logui.getApplicationPreferenceModel().setReceivers(
-//                        !logui.getApplicationPreferenceModel().isReceivers());
+                    // Since this action can be triggered from either a button
+                    // or a check box, get the current value and invert it.
+                    boolean currentValue = SettingsManager.getInstance().getGlobalConfiguration()
+                            .getBoolean("showReceivers", false);
+                    SettingsManager.getInstance().getGlobalConfiguration()
+                            .setProperty("showReceivers", !currentValue);
                 }
             };
 
@@ -672,8 +674,9 @@ class ChainsawToolBarAndMenus implements ChangeListener {
         final Action action =
             new AbstractAction("Show Toolbar") {
                 public void actionPerformed(ActionEvent e) {
-//                    logui.getApplicationPreferenceModel().setToolbar(
-//                        !logui.getApplicationPreferenceModel().isToolbar());
+                    boolean isSelected = toggleShowToolbarCheck.isSelected();
+                    SettingsManager.getInstance().getGlobalConfiguration()
+                            .setProperty("toolbar", isSelected);
                 }
             };
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogUI.java b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
index 1283669..2903ec2 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogUI.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
@@ -61,6 +61,7 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 import org.apache.commons.configuration2.AbstractConfiguration;
+import org.apache.commons.configuration2.event.ConfigurationEvent;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.zeroconf.ZeroConfPlugin;
 import org.apache.logging.log4j.core.LoggerContext;
@@ -523,8 +524,6 @@ public class LogUI extends JFrame {
         initGUI();
         loadSettings();
 
-        initPrefModelListeners();
-
         if (m_receivers.size() == 0) {
             noReceiversDefined = true;
         }
@@ -755,6 +754,9 @@ public class LogUI extends JFrame {
         final PopupListener tabPopupListener = new PopupListener(tabPopup);
         getTabbedPane().addMouseListener(tabPopupListener);
 
+
+        initPrefModelListeners();
+
 //        this.handler.addPropertyChangeListener(
 //            "dataRate",
 //            evt -> {
@@ -1013,13 +1015,34 @@ public class LogUI extends JFrame {
 //                    }
 //                }));
 //
-//        applicationPreferenceModel.addPropertyChangeListener(
-//            "statusBar",
-//            evt -> {
-//                boolean value = (Boolean) evt.getNewValue();
-//                setStatusBarVisible(value);
-//            });
-//        setStatusBarVisible(applicationPreferenceModel.isStatusBar());
+        sm.getGlobalConfiguration().addEventListener(ConfigurationEvent.SET_PROPERTY,
+            evt -> {
+                if( evt.getPropertyName().equals( "statusBar" ) ){
+                    boolean value = (Boolean) evt.getPropertyValue();
+                    statusBar.setVisible(value);
+                }
+            });
+        boolean showStatusBar = sm.getGlobalConfiguration().getBoolean("statusBar", true);
+        setStatusBarVisible(showStatusBar);
+
+        sm.getGlobalConfiguration().addEventListener(ConfigurationEvent.SET_PROPERTY,
+            evt -> {
+                if( evt.getPropertyName().equals( "showReceivers" ) ){
+                    boolean value = (Boolean) evt.getPropertyValue();
+                    if( value ){
+                        showReceiverPanel();
+                    }else{
+                        hideReceiverPanel();
+                    }
+                }
+            });
+        boolean showReceivers = sm.getGlobalConfiguration().getBoolean("showReceivers", false);
+        setStatusBarVisible(showStatusBar);
+        if( showReceivers ){
+            showReceiverPanel();
+        }else{
+            hideReceiverPanel();
+        }
 //
 //        applicationPreferenceModel.addPropertyChangeListener(
 //            "receivers",
@@ -1039,12 +1062,13 @@ public class LogUI extends JFrame {
 ////    }
 //
 //
-//        applicationPreferenceModel.addPropertyChangeListener(
-//            "toolbar",
-//            evt -> {
-//                boolean value = (Boolean) evt.getNewValue();
-//                toolbar.setVisible(value);
-//            });
+        sm.getGlobalConfiguration().addEventListener(ConfigurationEvent.SET_PROPERTY,
+            evt -> {
+                if( evt.getPropertyName().equals( "toolbar" ) ){
+                    boolean value = (Boolean) evt.getPropertyValue();
+                    toolbar.setVisible(value);
+                }
+            });
         boolean showToolbar = sm.getGlobalConfiguration().getBoolean("toolbar", true);
         toolbar.setVisible(showToolbar);
 
@@ -1310,7 +1334,8 @@ public class LogUI extends JFrame {
      * Shutsdown by ensuring the Appender gets a chance to close.
      */
     public boolean shutdown() {
-        if (getApplicationPreferenceModel().isConfirmExit()) {
+        boolean confirmExit = sm.getGlobalConfiguration().getBoolean("confirmExit", true);
+        if (confirmExit) {
             if (
                 JOptionPane.showConfirmDialog(
                     LogUI.this, "Are you sure you want to exit Chainsaw?",
diff --git a/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java b/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java
index cf982ec..4965cdc 100644
--- a/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java
@@ -243,9 +243,10 @@ public class RuleColorizer implements Colorizer {
     
     public void loadColorSettings(AbstractConfiguration configuration) {
         // When we save/load the rule, we really need to load a map of rules
-        // There's no real good way to do this, so we will do this the somewhat Qt-ish
-        // way and have a key that first tells us how many entries we need to read,
-        // and read the entries based off of their number
+        // There's no real good way to do this, so we will do this the somewhat
+        // dumb way and just load up to 32 color rules, since that seems like
+        // a good number
+//        configuration.get
 //        configuration.getInt( "colors.", 0)
 //        if (!doLoadColorSettings(name)) {
 //            doLoadColorSettings(ChainsawConstants.DEFAULT_COLOR_RULE_NAME);
diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java
index a4a6357..c844ade 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java
@@ -42,9 +42,9 @@ import org.apache.logging.log4j.Logger;
  * @author Scott Deboy &lt;sdeboy@apache.org&gt;
  */
 public final class SettingsManager {
+    private static final Logger logger = LogManager.getLogger();
     private static final SettingsManager instance = new SettingsManager();
     private static final String GLOBAL_SETTINGS_FILE_NAME = "chainsaw.settings.properties";
-    private static final Logger logger = LogManager.getLogger();
 
     private PropertiesConfiguration m_configuration;
     private FileBasedConfigurationBuilder<PropertiesConfiguration> m_builder;
@@ -78,8 +78,19 @@ public final class SettingsManager {
         try{
             PropertiesConfiguration config = m_builder.getConfiguration();
             m_configuration = config;
+            return;
+        }catch( ConfigurationException ex ){
+        }
+
+        // If we get here, it is likely that we have not opened the file.
+        // Force a save to create the file
+        try{
+            m_builder.save();
+            PropertiesConfiguration config = m_builder.getConfiguration();
+            m_configuration = config;
+            return;
         }catch( ConfigurationException ex ){
-            logger.error( "Can't load properties??" );
+            ex.printStackTrace();
         }
     }