psmith 2003/12/19 20:54:20
Modified: src/java/org/apache/log4j/chainsaw/messages
MessageCenter.java
Log:
moved out a lot of code in the constructor to individual methods
as a tidy up.
Also added a Toolbar and popup menu to the Message Center's
frame.
Revision Changes Path
1.2 +123 -43
jakarta-log4j/src/java/org/apache/log4j/chainsaw/messages/MessageCenter.java
Index: MessageCenter.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/messages/MessageCenter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MessageCenter.java 20 Dec 2003 00:19:25 -0000 1.1
+++ MessageCenter.java 20 Dec 2003 04:54:20 -0000 1.2
@@ -49,25 +49,37 @@
package org.apache.log4j.chainsaw.messages;
+import org.apache.log4j.Layout;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.log4j.TTCCLayout;
+import org.apache.log4j.chainsaw.ChainsawConstants;
+import org.apache.log4j.chainsaw.PopupListener;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.spi.LoggingEvent;
+
+import java.awt.BorderLayout;
import java.awt.Component;
+import java.awt.event.ActionEvent;
+
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
import javax.swing.DefaultListCellRenderer;
import javax.swing.ImageIcon;
+import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
+import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
+import javax.swing.JToolBar;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
-
-import org.apache.log4j.Layout;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.TTCCLayout;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.log4j.spi.LoggingEvent;
+import javax.swing.event.ListDataEvent;
+import javax.swing.event.ListDataListener;
/**
@@ -102,17 +114,50 @@
new PropertyChangeSupport(this);
private JFrame window = new JFrame("Message Center");
private JScrollPane pane = new JScrollPane(messageList);
+ private final JToolBar toolbar = new JToolBar();
+ private JPopupMenu popupMenu = new JPopupMenu();
+ private PopupListener popupListener = new PopupListener(popupMenu);
+ private Action clearAction;
private MessageCenter() {
- messageList.setModel(appender.getModel());
- messageList.setCellRenderer(listCellRenderer);
- window.getContentPane().add(pane);
- window.setSize(480, 240);
- window.setIconImage(new ImageIcon(ChainsawIcons.WINDOW_ICON).getImage());
- logger.addAppender(appender);
- logger.setAdditivity(false);
- logger.setLevel(Level.DEBUG);
-
+ setupActions();
+ setupFrame();
+ setupLogger();
+ setupListeners();
+ setupPopMenu();
+ setupToolbar();
+ }
+
+ /**
+ *
+ */
+ private void setupPopMenu() {
+ popupMenu.add(clearAction);
+ }
+
+ /**
+ *
+ */
+ private void setupToolbar() {
+ JButton clearButton = new JButton(clearAction);
+ clearButton.setText(null);
+ toolbar.add(clearButton);
+
+ toolbar.setFloatable(false);
+ }
+
+ private void setupActions() {
+ clearAction =
+ new AbstractAction("Clear") {
+ public void actionPerformed(ActionEvent e) {
+ appender.clearModel();
+ }
+ };
+ clearAction.putValue(
+ Action.SMALL_ICON, new ImageIcon(ChainsawIcons.DELETE));
+ }
+
+ private void setupListeners() {
propertySupport.addPropertyChangeListener(
"visible",
new PropertyChangeListener() {
@@ -130,12 +175,50 @@
messageList.setCellRenderer(new LayoutListCellRenderer(layout));
}
});
+ messageList.addMouseListener(popupListener);
+
+ appender.getModel().addListDataListener(
+ new ListDataListener() {
+ public void contentsChanged(ListDataEvent e) {
+ updateActions();
+ }
+
+ public void intervalAdded(ListDataEvent e) {
+ updateActions();
+ }
+
+ public void intervalRemoved(ListDataEvent e) {
+ updateActions();
+ }
+ });
}
- public static void main(String[] args) {
- MessageCenter center = MessageCenter.getInstance();
+ /**
+ *
+ */
+ private void updateActions() {
+ clearAction.putValue(
+ "enabled",
+ (appender.getModel().getSize() > 0) ? Boolean.TRUE : Boolean.FALSE);
+ }
+
+ private void setupLogger() {
+ logger.addAppender(appender);
+ logger.setAdditivity(false);
+ logger.setLevel(Level.DEBUG);
+ }
+
+ private void setupFrame() {
+ window.getContentPane().setLayout(new BorderLayout());
+
+ messageList.setModel(appender.getModel());
+ messageList.setCellRenderer(listCellRenderer);
+
+ window.getContentPane().add(pane, BorderLayout.CENTER);
+ window.getContentPane().add(toolbar, BorderLayout.NORTH);
- center.addMessage("Hello World");
+ window.setSize(480, 240);
+ window.setIconImage(new ImageIcon(ChainsawIcons.WINDOW_ICON).getImage());
}
public ListModel getModel() {
@@ -150,19 +233,6 @@
logger.info(message);
}
- /* (non-Javadoc)
- * @see org.apache.log4j.Appender#close()
- */
- public void close() {
- }
-
- /* (non-Javadoc)
- * @see org.apache.log4j.Appender#requiresLayout()
- */
- public boolean requiresLayout() {
- return false;
- }
-
public void setVisible(boolean vis) {
boolean oldValue = this.visible;
this.visible = vis;
@@ -193,6 +263,19 @@
}
/**
+ * Returns the logger that can be used to log
+ * messages to display within the Message Center.
+ * @return
+ */
+ public final Logger getLogger() {
+ return this.logger;
+ }
+
+ /**
+ * This class simply renders an event by delegating the effort to a
+ * Log4j layout instance.
+ *
+ * @author Paul Smith <[EMAIL PROTECTED]>
*/
private static class LayoutListCellRenderer extends DefaultListCellRenderer
implements ListCellRenderer {
@@ -214,17 +297,14 @@
boolean cellHasFocus) {
value = layout.format((LoggingEvent) value);
- return super.getListCellRendererComponent(
- list, value, index, isSelected, cellHasFocus);
- }
- }
+ Component c =
+ super.getListCellRendererComponent(
+ list, value, index, isSelected, cellHasFocus);
+ c.setBackground(
+ ((index % 2) == 0) ? ChainsawConstants.COLOR_EVEN_ROW
+ : ChainsawConstants.COLOR_ODD_ROW);
- /**
- * Returns the logger that can be used to log
- * messages to display within the Message Center.
- * @return
- */
- public final Logger getLogger() {
- return this.logger;
+ return c;
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]