psmith 2003/09/22 00:02:59
Modified: src/java/org/apache/log4j/chainsaw LogUI.java
Log:
When the Tutorial is kicked off, it is now located in a separate
floating JFrame which resizes everything to sit next
to the main GUI like a real help/tutorial should.
Also some changes due to the addition of the Receiver icon.
Revision Changes Path
1.33 +80 -24 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.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- LogUI.java 19 Sep 2003 03:56:56 -0000 1.32
+++ LogUI.java 22 Sep 2003 07:02:59 -0000 1.33
@@ -53,6 +53,7 @@
import org.apache.log4j.LogManager;
import org.apache.log4j.Priority;
import org.apache.log4j.UtilLoggingLevel;
+import org.apache.log4j.chainsaw.help.Tutorial;
import org.apache.log4j.chainsaw.icons.ChainsawIcons;
import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent;
import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent;
@@ -69,6 +70,7 @@
import java.awt.BorderLayout;
import java.awt.Component;
+import java.awt.Container;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.Point;
@@ -105,12 +107,15 @@
import javax.swing.AbstractAction;
import javax.swing.Action;
+import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JDialog;
+import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
+import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.JWindow;
import javax.swing.KeyStroke;
@@ -119,6 +124,8 @@
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
/**
@@ -173,6 +180,7 @@
private ChainsawAbout aboutBox;
private final SettingsManager sm = SettingsManager.getInstance();
private String lookAndFeelClassName;
+ private final JFrame tutorialFrame = new JFrame("Chainsaw Tutorial");
/**
* Set to true, if and only if the GUI has completed
@@ -202,6 +210,7 @@
* when the user has requested Chainsaw to exit.
*/
private EventListenerList shutdownListenerList = new EventListenerList();
+ private WelcomePanel welcomePanel;
/**
* Constructor which builds up all the visual elements of the frame
@@ -260,14 +269,6 @@
* @param args
*/
public static void main(String[] args) {
- // TODO remove this when ready
- JOptionPane.showMessageDialog(
- null,
- "Chainsaw v2 is currently going through some refactoring work at present.\n\n"
- + "Some features, most notably filtering and colouring, may be inoperable at
this time.\n\n"
- + "The Log4J Dev team apologises for this inconvenience, but be assured this
functionality will be back very shortly.",
- "Apologise", JOptionPane.WARNING_MESSAGE);
-
showSplash();
LogUI logUI = new LogUI();
@@ -347,6 +348,8 @@
* layout, table columns, and sets itself viewable.
*/
public void activateViewer() {
+ welcomePanel = new WelcomePanel(this);
+
final SocketNodeEventListener socketListener =
new SocketNodeEventListener() {
public void socketOpened(String remoteInfo) {
@@ -586,6 +589,8 @@
getContentPane().add(toolbar, BorderLayout.NORTH);
getContentPane().add(panePanel, BorderLayout.CENTER);
getContentPane().add(statusBar, BorderLayout.SOUTH);
+ receiversPanel.setVisible(false);
+ getContentPane().add(receiversPanel, BorderLayout.EAST);
addWindowListener(
new WindowAdapter() {
@@ -621,6 +626,37 @@
if (noReceiversDefined) {
showNoReceiversWarningPanel();
}
+
+ Container container = tutorialFrame.getContentPane();
+ final JEditorPane tutorialArea = new JEditorPane();
+ tutorialArea.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
+ tutorialArea.setEditable(false);
+
+ try {
+ tutorialArea.setPage(getWelcomePanel().getTutorialURL());
+ container.add(new JScrollPane(tutorialArea));
+ } catch (Exception e) {
+ LogLog.error("Error occurred loading the Tutorial", e);
+ }
+
+ tutorialFrame.setSize(new Dimension(640, 480));
+
+ tutorialArea.addHyperlinkListener(
+ new HyperlinkListener() {
+ public void hyperlinkUpdate(HyperlinkEvent e) {
+ if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+ if (e.getDescription().equals("StartTutorial")) {
+ new Thread(new Tutorial()).start();
+ } else {
+ try {
+ tutorialArea.setPage(e.getURL());
+ } catch (IOException e1) {
+ LogLog.error("Failed to change the URL for the Tutorial", e1);
+ }
+ }
+ }
+ }
+ });
}
/**
@@ -768,8 +804,8 @@
void addWelcomePanel() {
getTabbedPane().addANewTab(
- "Welcome", WelcomePanel.getInstance(), new ImageIcon(
- ChainsawIcons.ABOUT), "Welcome/Help");
+ "Welcome", welcomePanel, new ImageIcon(ChainsawIcons.ABOUT),
+ "Welcome/Help");
}
void removeWelcomePanel() {
@@ -783,14 +819,9 @@
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
- if (getContentPane().isAncestorOf(receiversPanel)) {
- getContentPane().remove(receiversPanel);
- } else {
- getContentPane().add(receiversPanel, BorderLayout.EAST);
- }
-
- getContentPane().invalidate();
- getContentPane().validate();
+ receiversPanel.setVisible(!receiversPanel.isVisible());
+ receiversPanel.invalidate();
+ receiversPanel.validate();
getToolBarAndMenus().stateChange();
}
@@ -798,7 +829,7 @@
}
boolean isReceiverPanelVisible() {
- return getContentPane().isAncestorOf(receiversPanel);
+ return receiversPanel.isVisible();
}
public ChainsawStatusBar getStatusBar() {
@@ -1075,12 +1106,19 @@
addWelcomePanel();
// TODO ensure the Welcome Panel is the selected tab
- WelcomePanel.getInstance().setURL(url);
+ getWelcomePanel().setURL(url);
}
/**
- * @return
- */
+ * @return
+ */
+ private WelcomePanel getWelcomePanel() {
+ return welcomePanel;
+ }
+
+ /**
+ * @return
+ */
public boolean isLogTreePanelVisible() {
if (getCurrentLogPanel() == null) {
return false;
@@ -1143,6 +1181,24 @@
}
/**
+ *
+ */
+ public void setupTutorial() {
+ Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
+ setLocation(0, getLocation().y);
+
+ double chainsawwidth = 0.7;
+ double tutorialwidth = 1 - chainsawwidth;
+ setSize((int) (screen.width * chainsawwidth), getSize().height);
+
+ Dimension size = getSize();
+ Point loc = getLocation();
+ tutorialFrame.setSize((int) (screen.width * tutorialwidth), size.height);
+ tutorialFrame.setLocation(loc.x + size.width, loc.y);
+ tutorialFrame.setVisible(true);
+ }
+
+ /**
* This class handles the recption of the Event batches
* and creates new LogPanels if the identifier is not in use
* otherwise it ignores the event batch.
@@ -1227,7 +1283,7 @@
new Runnable() {
public void run() {
getTabbedPane().addANewTab(
- ident, thisPanel, new ImageIcon(ChainsawIcons.TOOL_TIP));
+ ident, thisPanel, new ImageIcon(ChainsawIcons.ANIM_RADIO_TOWER));
}
});
@@ -1254,7 +1310,7 @@
//the tabIconHandler is associated with a new tab, and a new tab always
//has new events
private boolean hasNewEvents = true;
- ImageIcon NEW_EVENTS = new ImageIcon(ChainsawIcons.TOOL_TIP);
+ ImageIcon NEW_EVENTS = new ImageIcon(ChainsawIcons.ANIM_RADIO_TOWER);
ImageIcon HAS_EVENTS = new ImageIcon(ChainsawIcons.INFO);
public TabIconHandler(final String ident) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]