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]

Reply via email to