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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7cd8913  extracted tutorial frame to its own class
7cd8913 is described below

commit 7cd8913fef3839b33f17ef94b324f082a3bba649
Author: Christian Grobmeier <[email protected]>
AuthorDate: Sat Dec 2 00:15:48 2023 +0100

    extracted tutorial frame to its own class
---
 src/main/java/org/apache/log4j/chainsaw/LogUI.java | 154 +----------------
 .../components/tutorial/TutorialFrame.java         | 189 +++++++++++++++++++++
 2 files changed, 192 insertions(+), 151 deletions(-)

diff --git a/src/main/java/org/apache/log4j/chainsaw/LogUI.java 
b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
index 7640192..dcb53eb 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogUI.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
@@ -23,6 +23,7 @@ import org.apache.log4j.chainsaw.color.RuleColorizer;
 import org.apache.log4j.chainsaw.components.elements.SmallButton;
 import org.apache.log4j.chainsaw.components.elements.SmallToggleButton;
 import org.apache.log4j.chainsaw.components.logpanel.LogPanel;
+import org.apache.log4j.chainsaw.components.tutorial.TutorialFrame;
 import org.apache.log4j.chainsaw.components.welcome.WelcomePanel;
 import org.apache.log4j.chainsaw.dnd.FileDnDTarget;
 import org.apache.log4j.chainsaw.help.HelpManager;
@@ -100,7 +101,7 @@ public class LogUI extends JFrame {
     private static final String MAIN_WINDOW_WIDTH = "main.window.width";
     private static final String MAIN_WINDOW_Y = "main.window.y";
     private static final String MAIN_WINDOW_X = "main.window.x";
-    public static final String LABEL_TUTORIAL_STARTED = "TutorialStarted";
+
     private static final double DEFAULT_MAIN_RECEIVER_SPLIT_LOCATION = 0.85d;
     private final JFrame preferencesFrame = new JFrame();
     private boolean noReceiversDefined;
@@ -621,48 +622,7 @@ public class LogUI extends JFrame {
             SwingHelper.invokeOnEDT(this::showReceiverConfigurationPanel);
         }
 
-        Container container = tutorialFrame.getContentPane();
-        container.setLayout(new BorderLayout());
-
-        final JEditorPane tutorialArea = new JEditorPane();
-        tutorialArea.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
-        tutorialArea.setEditable(false);
-
-        try {
-            tutorialArea.setPage(ChainsawConstants.TUTORIAL_URL);
-            JTextComponentFormatter.applySystemFontAndSize(tutorialArea);
-            container.add(new JScrollPane(tutorialArea), BorderLayout.CENTER);
-        } catch (Exception e) {
-            logger.error("Can't load tutorial", e);
-            statusBar.setMessage("Can't load tutorial");
-        }
-
-        tutorialFrame.setIconImage(new 
ImageIcon(ChainsawIcons.HELP).getImage());
-        tutorialFrame.setSize(new Dimension(640, 480));
-
-        final Action startTutorial = createStartTutorialAction();
-        final Action stopTutorial = createStopTutorialAction(startTutorial);
-        final JToolBar tutorialToolbar = createTutorialToolbar(startTutorial, 
stopTutorial);
-
-        container.add(tutorialToolbar, BorderLayout.NORTH);
-        tutorialArea.addHyperlinkListener(
-            e -> {
-                if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
-                    if (e.getDescription().equals("StartTutorial")) {
-                        startTutorial.actionPerformed(null);
-                    } else if (e.getDescription().equals("StopTutorial")) {
-                        stopTutorial.actionPerformed(null);
-                    } else {
-                        try {
-                            tutorialArea.setPage(e.getURL());
-                        } catch (IOException e1) {
-                            statusBar.setMessage("Failed to change URL for 
tutorial");
-                            logger.error(
-                                "Failed to change the URL for the Tutorial", 
e1);
-                        }
-                    }
-                }
-            });
+        new TutorialFrame(m_receivers, m_receiverListeners, 
this).createTutorialFrame(tutorialFrame, statusBar);
 
         /*
          * loads the saved tab settings and if there are hidden tabs,
@@ -679,111 +639,6 @@ public class LogUI extends JFrame {
 
     }
 
-    private Action createStopTutorialAction(Action startTutorial) {
-        final Action stopTutorial =
-            new AbstractAction(
-                "Stop Tutorial", new 
ImageIcon(ChainsawIcons.ICON_STOP_RECEIVER)) {
-                public void actionPerformed(ActionEvent e) {
-                    if (
-                        JOptionPane.showConfirmDialog(
-                            null,
-                            "This will stop all of the \"Generator\" receivers 
used in the Tutorial, but leave any other Receiver untouched.  Is that ok?",
-                            "Confirm", JOptionPane.YES_NO_OPTION) == 
JOptionPane.YES_OPTION) {
-                        new Thread(
-                            () -> {
-                                for( ChainsawReceiver rx : m_receivers ){
-                                    if( rx instanceof Generator ){
-                                        rx.shutdown();
-                                    }
-                                }
-                            }).start();
-                        setEnabled(false);
-                        startTutorial.putValue(LABEL_TUTORIAL_STARTED, 
Boolean.FALSE);
-                    }
-                }
-            };
-
-        stopTutorial.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Removes all of the Tutorials Generator Receivers, leaving all 
other Receivers untouched");
-
-        stopTutorial.setEnabled(false);
-        return stopTutorial;
-    }
-
-    private Action createStartTutorialAction() {
-        final Action startTutorial =
-            new AbstractAction(
-                "Start Tutorial", new 
ImageIcon(ChainsawIcons.ICON_RESUME_RECEIVER)) {
-                public void actionPerformed(ActionEvent e) {
-                    if (
-                        JOptionPane.showConfirmDialog(
-                            null,
-                            "This will start 3 \"Generator\" receivers for use 
in the Tutorial.  Is that ok?",
-                            "Confirm", JOptionPane.YES_NO_OPTION) == 
JOptionPane.YES_OPTION) {
-                        // Create and start generators
-                        Generator[] generators = {
-                            new Generator("Generator 1"),
-                            new Generator("Generator 2"),
-                            new Generator("Generator 3"),
-                        };
-
-                        for( Generator gen : generators ){
-                            addReceiver(gen);
-                            gen.start();
-                        }
-
-                        putValue(LABEL_TUTORIAL_STARTED, Boolean.TRUE);
-                    } else {
-                        putValue(LABEL_TUTORIAL_STARTED, Boolean.FALSE);
-                    }
-                }
-            };
-        startTutorial.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Begins the Tutorial, starting up some Generator Receivers so you 
can see Chainsaw in action");
-        return startTutorial;
-    }
-
-    private JToolBar createTutorialToolbar(Action startTutorial, Action 
stopTutorial) {
-        final SmallToggleButton startButton = new 
SmallToggleButton(startTutorial);
-        PropertyChangeListener pcl =
-            evt -> {
-                stopTutorial.setEnabled(
-                    
startTutorial.getValue(LABEL_TUTORIAL_STARTED).equals(Boolean.TRUE));
-                startButton.setSelected(stopTutorial.isEnabled());
-            };
-
-        startTutorial.addPropertyChangeListener(pcl);
-        stopTutorial.addPropertyChangeListener(pcl);
-
-        addReceiverEventListener(new ReceiverEventListener() {
-            @Override
-            public void receiverAdded(ChainsawReceiver rx) {}
-
-            @Override
-            public void receiverRemoved(ChainsawReceiver rx1) {
-                int count = 0;
-                for( ChainsawReceiver rx : m_receivers ){
-                    if( rx instanceof Generator ){
-                        count++;
-                    }
-                }
-
-                if (count == 0) {
-                    startTutorial.putValue(LABEL_TUTORIAL_STARTED, 
Boolean.FALSE);
-                }
-            }
-        });
-
-        final SmallButton stopButton = new SmallButton(stopTutorial);
-
-        final JToolBar tutorialToolbar = new JToolBar();
-        tutorialToolbar.setFloatable(false);
-        tutorialToolbar.add(startButton);
-        tutorialToolbar.add(stopButton);
-        return tutorialToolbar;
-    }
 
     /**
      * Display the log tree pane, using the last known divider location
@@ -1434,9 +1289,6 @@ public class LogUI extends JFrame {
         return applicationPreferenceModel;
     }
 
-    /**
-     * DOCUMENT ME!
-     */
     public void setupTutorial() {
         SwingUtilities.invokeLater(
             () -> {
diff --git 
a/src/main/java/org/apache/log4j/chainsaw/components/tutorial/TutorialFrame.java
 
b/src/main/java/org/apache/log4j/chainsaw/components/tutorial/TutorialFrame.java
new file mode 100644
index 0000000..23b1786
--- /dev/null
+++ 
b/src/main/java/org/apache/log4j/chainsaw/components/tutorial/TutorialFrame.java
@@ -0,0 +1,189 @@
+package org.apache.log4j.chainsaw.components.tutorial;
+
+import org.apache.log4j.chainsaw.ChainsawConstants;
+import org.apache.log4j.chainsaw.ChainsawStatusBar;
+import org.apache.log4j.chainsaw.Generator;
+import org.apache.log4j.chainsaw.JTextComponentFormatter;
+import org.apache.log4j.chainsaw.LogUI;
+import org.apache.log4j.chainsaw.ReceiverEventListener;
+import org.apache.log4j.chainsaw.components.elements.SmallButton;
+import org.apache.log4j.chainsaw.components.elements.SmallToggleButton;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import javax.swing.*;
+import javax.swing.event.HyperlinkEvent;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.beans.PropertyChangeListener;
+import java.io.IOException;
+import java.util.List;
+
+public class TutorialFrame {
+    public static final String LABEL_TUTORIAL_STARTED = "TutorialStarted";
+
+    private final Logger logger = LogManager.getLogger(TutorialFrame.class);
+
+    private List<ChainsawReceiver> receivers;
+    private List<ReceiverEventListener> receiverEventListeners;
+    private LogUI logUI;
+    private final JFrame tutorialFrame = new JFrame("Chainsaw Tutorial");
+    public TutorialFrame(List<ChainsawReceiver> receivers, 
List<ReceiverEventListener> receiverEventListeners, LogUI logUI) {
+        this.receivers = receivers;
+        this.receiverEventListeners = receiverEventListeners;
+        this.logUI = logUI;
+    }
+
+    public void createTutorialFrame(ChainsawStatusBar statusBar) {
+        Container container = tutorialFrame.getContentPane();
+        container.setLayout(new BorderLayout());
+
+        final JEditorPane tutorialArea = new JEditorPane();
+        tutorialArea.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
+        tutorialArea.setEditable(false);
+
+        try {
+            tutorialArea.setPage(ChainsawConstants.TUTORIAL_URL);
+            JTextComponentFormatter.applySystemFontAndSize(tutorialArea);
+            container.add(new JScrollPane(tutorialArea), BorderLayout.CENTER);
+        } catch (Exception e) {
+            logger.error("Can't load tutorial", e);
+            statusBar.setMessage("Can't load tutorial");
+        }
+
+        tutorialFrame.setIconImage(new 
ImageIcon(ChainsawIcons.HELP).getImage());
+        tutorialFrame.setSize(new Dimension(640, 480));
+
+        final Action startTutorial = createStartTutorialAction();
+        final Action stopTutorial = createStopTutorialAction(startTutorial);
+        final JToolBar tutorialToolbar = createTutorialToolbar(startTutorial, 
stopTutorial);
+
+        container.add(tutorialToolbar, BorderLayout.NORTH);
+        tutorialArea.addHyperlinkListener(
+            e -> {
+                if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+                    if (e.getDescription().equals("StartTutorial")) {
+                        startTutorial.actionPerformed(null);
+                    } else if (e.getDescription().equals("StopTutorial")) {
+                        stopTutorial.actionPerformed(null);
+                    } else {
+                        try {
+                            tutorialArea.setPage(e.getURL());
+                        } catch (IOException e1) {
+                            statusBar.setMessage("Failed to change URL for 
tutorial");
+                            logger.error(
+                                "Failed to change the URL for the Tutorial", 
e1);
+                        }
+                    }
+                }
+            });
+    }
+
+    private Action createStopTutorialAction(Action startTutorial) {
+        final Action stopTutorial =
+            new AbstractAction(
+                "Stop Tutorial", new 
ImageIcon(ChainsawIcons.ICON_STOP_RECEIVER)) {
+                public void actionPerformed(ActionEvent e) {
+                    if (
+                        JOptionPane.showConfirmDialog(
+                            null,
+                            "This will stop all of the \"Generator\" receivers 
used in the Tutorial, but leave any other Receiver untouched.  Is that ok?",
+                            "Confirm", JOptionPane.YES_NO_OPTION) == 
JOptionPane.YES_OPTION) {
+                        new Thread(
+                            () -> {
+                                for( ChainsawReceiver rx : receivers){
+                                    if( rx instanceof Generator){
+                                        rx.shutdown();
+                                    }
+                                }
+                            }).start();
+                        setEnabled(false);
+                        startTutorial.putValue(LABEL_TUTORIAL_STARTED, 
Boolean.FALSE);
+                    }
+                }
+            };
+
+        stopTutorial.putValue(
+            Action.SHORT_DESCRIPTION,
+            "Removes all of the Tutorials Generator Receivers, leaving all 
other Receivers untouched");
+
+        stopTutorial.setEnabled(false);
+        return stopTutorial;
+    }
+
+    private Action createStartTutorialAction() {
+        final Action startTutorial =
+            new AbstractAction(
+                "Start Tutorial", new 
ImageIcon(ChainsawIcons.ICON_RESUME_RECEIVER)) {
+                public void actionPerformed(ActionEvent e) {
+                    if (
+                        JOptionPane.showConfirmDialog(
+                            null,
+                            "This will start 3 \"Generator\" receivers for use 
in the Tutorial.  Is that ok?",
+                            "Confirm", JOptionPane.YES_NO_OPTION) == 
JOptionPane.YES_OPTION) {
+                        // Create and start generators
+                        Generator[] generators = {
+                            new Generator("Generator 1"),
+                            new Generator("Generator 2"),
+                            new Generator("Generator 3"),
+                        };
+
+                        for( Generator gen : generators ){
+                            logUI.addReceiver(gen);
+                            gen.start();
+                        }
+
+                        putValue(LABEL_TUTORIAL_STARTED, Boolean.TRUE);
+                    } else {
+                        putValue(LABEL_TUTORIAL_STARTED, Boolean.FALSE);
+                    }
+                }
+            };
+        startTutorial.putValue(
+            Action.SHORT_DESCRIPTION,
+            "Begins the Tutorial, starting up some Generator Receivers so you 
can see Chainsaw in action");
+        return startTutorial;
+    }
+
+    private JToolBar createTutorialToolbar(Action startTutorial, Action 
stopTutorial) {
+        final SmallToggleButton startButton = new 
SmallToggleButton(startTutorial);
+        PropertyChangeListener pcl =
+            evt -> {
+                stopTutorial.setEnabled(
+                    
startTutorial.getValue(LABEL_TUTORIAL_STARTED).equals(Boolean.TRUE));
+                startButton.setSelected(stopTutorial.isEnabled());
+            };
+
+        startTutorial.addPropertyChangeListener(pcl);
+        stopTutorial.addPropertyChangeListener(pcl);
+
+        receiverEventListeners.add(new ReceiverEventListener() {
+            @Override
+            public void receiverAdded(ChainsawReceiver rx) {}
+
+            @Override
+            public void receiverRemoved(ChainsawReceiver rx1) {
+                int count = 0;
+                for( ChainsawReceiver rx : receivers){
+                    if( rx instanceof Generator ){
+                        count++;
+                    }
+                }
+
+                if (count == 0) {
+                    startTutorial.putValue(LABEL_TUTORIAL_STARTED, 
Boolean.FALSE);
+                }
+            }
+        });
+
+        final SmallButton stopButton = new SmallButton(stopTutorial);
+
+        final JToolBar tutorialToolbar = new JToolBar();
+        tutorialToolbar.setFloatable(false);
+        tutorialToolbar.add(startButton);
+        tutorialToolbar.add(stopButton);
+        return tutorialToolbar;
+    }
+}

Reply via email to