psmith 2003/12/16 18:06:50 Modified: src/java/org/apache/log4j/chainsaw LogPanelPreferencePanel.java LogPanel.java LogPanelPreferenceModel.java Log: Exposed the logger Tree panel visibilty though the pref gui and the popup menu using the standard pattern. Revision Changes Path 1.17 +535 -374 jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferencePanel.java Index: LogPanelPreferencePanel.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferencePanel.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- LogPanelPreferencePanel.java 16 Dec 2003 21:57:40 -0000 1.16 +++ LogPanelPreferencePanel.java 17 Dec 2003 02:06:50 -0000 1.17 @@ -87,427 +87,588 @@ * * @author Paul Smith */ -public class LogPanelPreferencePanel extends AbstractPreferencePanel { - private final LogPanelPreferenceModel committedPreferenceModel; - private final LogPanelPreferenceModel uncommittedPreferenceModel = new LogPanelPreferenceModel(); - private JTextField loggerPrecision = new JTextField(5); - - public LogPanelPreferencePanel(LogPanelPreferenceModel model) { - this.committedPreferenceModel = model; - initComponents(); - - getOkButton().addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - uncommittedPreferenceModel.setLoggerPrecision(loggerPrecision.getText()); - committedPreferenceModel.apply(uncommittedPreferenceModel); - hidePanel(); - } - }); - - getCancelButton().addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - hidePanel(); - } - }); - } - - /** - * Ensures this panels DISPLAYED model is in sync with - * the model initially passed to the constructor. - * - */ - public void updateModel() { - this.uncommittedPreferenceModel.apply(committedPreferenceModel); - } - - protected TreeModel createTreeModel() { - final DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode( - "Preferences"); - DefaultTreeModel model = new DefaultTreeModel(rootNode); - - DefaultMutableTreeNode formatting = new DefaultMutableTreeNode(new FormattingPanel()); - - DefaultMutableTreeNode columns = new DefaultMutableTreeNode(new ColumnSelectorPanel()); - - rootNode.add(formatting); - rootNode.add(columns); - - return model; - } - - /** - * @return - */ - private LogPanelPreferenceModel getModel() { - return uncommittedPreferenceModel; - } - - public static void main(String[] args) { - JFrame f = new JFrame("Preferences Panel Test Bed"); - LogPanelPreferenceModel model = new LogPanelPreferenceModel(); - LogPanelPreferencePanel panel = new LogPanelPreferencePanel(model); - f.getContentPane().add(panel); - - model.addPropertyChangeListener(new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - LogLog.warn(evt.toString()); - } - }); - panel.setOkCancelActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - System.exit(1); - } - }); - - f.setSize(640, 480); - f.show(); - } - - /** - * Provides preference gui's for all the Formatting options - * available for the columns etc. - */ - private class FormattingPanel extends BasicPrefPanel { - private final JCheckBox toolTips = new JCheckBox( - "Show Event Detail Tooltips"); - private final JCheckBox detailPanelVisible = new JCheckBox( - "Show Event Detail panel"); - private final JCheckBox scrollToBottom= new JCheckBox( - "Scroll to bottom (view tracks with new events)"); - private JRadioButton rdCustom = new JRadioButton("Custom Format"); - private JTextField customFormatText = new JTextField("", 10); - private final JRadioButton rdISO = new JRadioButton( - "<html><b>Fast</b> ISO 8601 format (yyyy-MM-dd HH:mm:ss)</html>"); - private final JRadioButton rdLevelIcons = new JRadioButton("Icons"); - private final JRadioButton rdLevelText = new JRadioButton("Text"); - - private FormattingPanel() { - super("Formatting"); - this.initComponents(); - setupListeners(); +public class LogPanelPreferencePanel extends AbstractPreferencePanel +{ + //~ Instance fields ========================================================= + + private final LogPanelPreferenceModel committedPreferenceModel; + private JTextField loggerPrecision = new JTextField(5); + private final LogPanelPreferenceModel uncommittedPreferenceModel = + new LogPanelPreferenceModel(); + + //~ Constructors ============================================================ + + public LogPanelPreferencePanel(LogPanelPreferenceModel model) + { + this.committedPreferenceModel = model; + initComponents(); + + getOkButton().addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + uncommittedPreferenceModel.setLoggerPrecision( + loggerPrecision.getText()); + committedPreferenceModel.apply(uncommittedPreferenceModel); + hidePanel(); } + }); - /** - * - */ - private void setupListeners() + getCancelButton().addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) { - rdCustom.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - customFormatText.setEnabled(rdCustom.isSelected()); - customFormatText.setText(""); - customFormatText.grabFocus(); - } - }); - getModel().addPropertyChangeListener("dateFormatPattern", - new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - /** - * we need to make sure we are not reacting to the user typing, so only do this - * if the text box is not the same as the model - */ - if (getModel().isCustomDateFormat() && - !customFormatText.getText().equals(evt.getNewValue() - .toString())) { - customFormatText.setText(getModel() - .getDateFormatPattern()); - rdCustom.setSelected(true); - customFormatText.setEnabled(true); - } else { - rdCustom.setSelected(false); - } - } - }); - - - rdISO.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - getModel().setDateFormatPattern("ISO8601"); - customFormatText.setEnabled(rdCustom.isSelected()); - } - }); - getModel().addPropertyChangeListener("dateFormatPattern", - new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - rdISO.setSelected(getModel().isUseISO8601Format()); - } - }); - - - customFormatText.getDocument().addDocumentListener(new DocumentListener() { - public void textChanged() { - getModel().setDateFormatPattern(customFormatText.getText()); - } - - public void changedUpdate(DocumentEvent e) { - textChanged(); - } - - public void insertUpdate(DocumentEvent e) { - textChanged(); - } - - public void removeUpdate(DocumentEvent e) { - textChanged(); - } - }); - - ActionListener levelIconListener = new ActionListener() { - public void actionPerformed(ActionEvent e) { - getModel().setLevelIcons(rdLevelIcons.isSelected()); - } - }; + hidePanel(); + } + }); + } - rdLevelIcons.addActionListener(levelIconListener); - rdLevelText.addActionListener(levelIconListener); + //~ Methods ================================================================= - getModel().addPropertyChangeListener("levelIcons", - new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - boolean value = ((Boolean) evt.getNewValue()).booleanValue(); - rdLevelIcons.setSelected(value); - rdLevelText.setSelected(!value); - } - }); - toolTips.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - getModel().setToolTips(toolTips.isSelected()); - } - }); - getModel().addPropertyChangeListener("toolTips", - new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - boolean value = ((Boolean) evt.getNewValue()).booleanValue(); - toolTips.setSelected(value); - } - }); - - detailPanelVisible.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - getModel().setDetailPaneVisible(detailPanelVisible.isSelected()); - } - }); + /** + * DOCUMENT ME! + * + * @param args DOCUMENT ME! + */ + public static void main(String[] args) + { + JFrame f = new JFrame("Preferences Panel Test Bed"); + LogPanelPreferenceModel model = new LogPanelPreferenceModel(); + LogPanelPreferencePanel panel = new LogPanelPreferencePanel(model); + f.getContentPane().add(panel); + + model.addPropertyChangeListener(new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent evt) + { + LogLog.warn(evt.toString()); + } + }); + panel.setOkCancelActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + System.exit(1); + } + }); - getModel().addPropertyChangeListener("detailPaneVisible", - new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - boolean value = ((Boolean) evt.getNewValue()).booleanValue(); - detailPanelVisible.setSelected(value); - } - }); - - scrollToBottom.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - getModel().setScrollToBottom(scrollToBottom.isSelected()); - } - }); + f.setSize(640, 480); + f.show(); + } + + /** + * Ensures this panels DISPLAYED model is in sync with + * the model initially passed to the constructor. + * + */ + public void updateModel() + { + this.uncommittedPreferenceModel.apply(committedPreferenceModel); + } + + protected TreeModel createTreeModel() + { + final DefaultMutableTreeNode rootNode = + new DefaultMutableTreeNode("Preferences"); + DefaultTreeModel model = new DefaultTreeModel(rootNode); + + DefaultMutableTreeNode visuals = + new DefaultMutableTreeNode(new VisualsPrefPanel()); + DefaultMutableTreeNode formatting = + new DefaultMutableTreeNode(new FormattingPanel()); + DefaultMutableTreeNode columns = + new DefaultMutableTreeNode(new ColumnSelectorPanel()); + + rootNode.add(visuals); + rootNode.add(formatting); + rootNode.add(columns); + + return model; + } + + /** + * DOCUMENT ME! + * + * @return + */ + private LogPanelPreferenceModel getModel() + { + return uncommittedPreferenceModel; + } + + //~ Inner Classes =========================================================== + + /** + * Allows the user to choose which columns to display. + * + * @author Paul Smith + * + */ + public class ColumnSelectorPanel extends BasicPrefPanel + { + //~ Constructors ========================================================== + + ColumnSelectorPanel() + { + super("Columns"); + initComponents(); + } - getModel().addPropertyChangeListener("scrollToBottom", - new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - boolean value = ((Boolean) evt.getNewValue()).booleanValue(); - scrollToBottom.setSelected(value); - } - }); - - - } + //~ Methods =============================================================== - private void initComponents() { - setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + private void initComponents() + { + setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - add(toolTips); - add(detailPanelVisible); - add(scrollToBottom); + Box columnBox = new Box(BoxLayout.Y_AXIS); - JPanel dateFormatPanel = new JPanel(); - dateFormatPanel.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createEtchedBorder(), "Timestamp")); - dateFormatPanel.setLayout(new BoxLayout(dateFormatPanel, - BoxLayout.Y_AXIS)); - dateFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + // columnBox.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Displayed Columns")); + final JList columnList = new JList(); + columnList.setVisibleRowCount(10); - customFormatText.setPreferredSize(new Dimension(100, 20)); - customFormatText.setMaximumSize(customFormatText.getPreferredSize()); - customFormatText.setMinimumSize(customFormatText.getPreferredSize()); - customFormatText.setEnabled(false); + final ModifiableListModel listModel = new ModifiableListModel(); + for ( + Iterator iter = ChainsawColumns.getColumnsNames().iterator(); + iter.hasNext();) + { + String name = (String) iter.next(); + listModel.addElement(name); + } - rdCustom.setSelected(getModel().isCustomDateFormat()); + columnList.setModel(listModel); + CheckListCellRenderer cellRenderer = new CheckListCellRenderer() + { + protected boolean isSelected(Object value) + { + return LogPanelPreferencePanel.this.getModel().isColumnVisible( + value.toString()); + } + }; + getModel().addPropertyChangeListener( + "visibleColumns", new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent evt) + { + listModel.fireContentsChanged(); + } + }); - ButtonGroup bgDateFormat = new ButtonGroup(); + columnList.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + if ( + (e.getClickCount() > 1) + && ((e.getModifiers() & MouseEvent.BUTTON1_MASK) > 0)) + { + int i = columnList.locationToIndex(e.getPoint()); + + if (i >= 0) + { + Object column = listModel.get(i); + getModel().toggleColumn(column.toString()); + } + } + else + { + } + } + }); + columnList.setCellRenderer(cellRenderer); + columnBox.add(new JScrollPane(columnList)); - rdISO.setAlignmentX(0); - rdISO.setSelected(getModel().isUseISO8601Format()); + add(columnBox); + add(Box.createVerticalGlue()); + } + } - bgDateFormat.add(rdISO); - dateFormatPanel.add(rdISO); + /** + * Provides preference gui's for all the Formatting options + * available for the columns etc. + */ + private class FormattingPanel extends BasicPrefPanel + { + //~ Instance fields ======================================================= + + private JTextField customFormatText = new JTextField("", 10); + private JRadioButton rdCustom = new JRadioButton("Custom Format"); + private final JRadioButton rdISO = + new JRadioButton( + "<html><b>Fast</b> ISO 8601 format (yyyy-MM-dd HH:mm:ss)</html>"); + private final JRadioButton rdLevelIcons = new JRadioButton("Icons"); + private final JRadioButton rdLevelText = new JRadioButton("Text"); + + //~ Constructors ========================================================== + + private FormattingPanel() + { + super("Formatting"); + this.initComponents(); + setupListeners(); + } - for (Iterator iter = LogPanelPreferenceModel.DATE_FORMATS.iterator(); - iter.hasNext();) { - final String format = (String) iter.next(); - final JRadioButton rdFormat = new JRadioButton(format); - rdFormat.setAlignmentX(0); - - bgDateFormat.add(rdFormat); - rdFormat.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - getModel().setDateFormatPattern(format); - customFormatText.setEnabled(rdCustom.isSelected()); - } - }); - getModel().addPropertyChangeListener("dateFormatPattern", - new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - rdFormat.setSelected(getModel() - .getDateFormatPattern() - .equals(format)); - } - }); + //~ Methods =============================================================== - dateFormatPanel.add(rdFormat); + private void initComponents() + { + setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + + JPanel dateFormatPanel = new JPanel(); + dateFormatPanel.setBorder( + BorderFactory.createTitledBorder( + BorderFactory.createEtchedBorder(), "Timestamp")); + dateFormatPanel.setLayout( + new BoxLayout(dateFormatPanel, BoxLayout.Y_AXIS)); + dateFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + + customFormatText.setPreferredSize(new Dimension(100, 20)); + customFormatText.setMaximumSize(customFormatText.getPreferredSize()); + customFormatText.setMinimumSize(customFormatText.getPreferredSize()); + customFormatText.setEnabled(false); + + rdCustom.setSelected(getModel().isCustomDateFormat()); + + ButtonGroup bgDateFormat = new ButtonGroup(); + + rdISO.setAlignmentX(0); + rdISO.setSelected(getModel().isUseISO8601Format()); + + bgDateFormat.add(rdISO); + dateFormatPanel.add(rdISO); + + for ( + Iterator iter = LogPanelPreferenceModel.DATE_FORMATS.iterator(); + iter.hasNext();) + { + final String format = (String) iter.next(); + final JRadioButton rdFormat = new JRadioButton(format); + rdFormat.setAlignmentX(0); + + bgDateFormat.add(rdFormat); + rdFormat.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + getModel().setDateFormatPattern(format); + customFormatText.setEnabled(rdCustom.isSelected()); } - - // add a custom date format - if (getModel().isCustomDateFormat()) { - customFormatText.setText(getModel().getDateFormatPattern()); - customFormatText.setEnabled(true); + }); + getModel().addPropertyChangeListener( + "dateFormatPattern", new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent evt) + { + rdFormat.setSelected( + getModel().getDateFormatPattern().equals(format)); } + }); + dateFormatPanel.add(rdFormat); + } - rdCustom.setAlignmentX(0); - bgDateFormat.add(rdCustom); - - Box customBox = Box.createHorizontalBox(); - - // Following does not work in JDK 1.3.1 - // customBox.setAlignmentX(0); - customBox.add(rdCustom); - customBox.add(customFormatText); - customBox.add(Box.createHorizontalGlue()); - dateFormatPanel.add(customBox); - - // dateFormatPanel.add(Box.createVerticalGlue()); - add(dateFormatPanel); - - JPanel levelFormatPanel = new JPanel(); - levelFormatPanel.setLayout(new BoxLayout(levelFormatPanel, - BoxLayout.Y_AXIS)); - levelFormatPanel.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createEtchedBorder(), "Level")); - levelFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT); - - ButtonGroup bgLevel = new ButtonGroup(); - bgLevel.add(rdLevelIcons); - bgLevel.add(rdLevelText); - + // add a custom date format + if (getModel().isCustomDateFormat()) + { + customFormatText.setText(getModel().getDateFormatPattern()); + customFormatText.setEnabled(true); + } + + rdCustom.setAlignmentX(0); + bgDateFormat.add(rdCustom); + + Box customBox = Box.createHorizontalBox(); + + // Following does not work in JDK 1.3.1 + // customBox.setAlignmentX(0); + customBox.add(rdCustom); + customBox.add(customFormatText); + customBox.add(Box.createHorizontalGlue()); + dateFormatPanel.add(customBox); + + // dateFormatPanel.add(Box.createVerticalGlue()); + add(dateFormatPanel); + + JPanel levelFormatPanel = new JPanel(); + levelFormatPanel.setLayout( + new BoxLayout(levelFormatPanel, BoxLayout.Y_AXIS)); + levelFormatPanel.setBorder( + BorderFactory.createTitledBorder( + BorderFactory.createEtchedBorder(), "Level")); + levelFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + + ButtonGroup bgLevel = new ButtonGroup(); + bgLevel.add(rdLevelIcons); + bgLevel.add(rdLevelText); + + rdLevelIcons.setSelected(getModel().isLevelIcons()); + + levelFormatPanel.add(rdLevelIcons); + levelFormatPanel.add(rdLevelText); + + add(levelFormatPanel); + + JPanel loggerFormatPanel = new JPanel(); + loggerFormatPanel.setLayout( + new BoxLayout(loggerFormatPanel, BoxLayout.Y_AXIS)); + loggerFormatPanel.setBorder( + BorderFactory.createTitledBorder( + BorderFactory.createEtchedBorder(), "Logger")); + loggerFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + + final JLabel precisionLabel = + new JLabel("Precision (package depth displayed)"); + final JLabel precisionLabel2 = + new JLabel("leave blank to display full logger"); + + loggerFormatPanel.add(precisionLabel); + loggerFormatPanel.add(precisionLabel2); - rdLevelIcons.setSelected(getModel().isLevelIcons()); + JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT)); - levelFormatPanel.add(rdLevelIcons); - levelFormatPanel.add(rdLevelText); + p.add(loggerPrecision); + loggerFormatPanel.add(p); - add(levelFormatPanel); + add(loggerFormatPanel); - toolTips.setSelected(getModel().isToolTips()); + add(Box.createVerticalGlue()); + } + /** + * DOCUMENT ME! + */ + private void setupListeners() + { + rdCustom.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + customFormatText.setEnabled(rdCustom.isSelected()); + customFormatText.setText(""); + customFormatText.grabFocus(); + } + }); + getModel().addPropertyChangeListener( + "dateFormatPattern", new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent evt) + { + /** + * we need to make sure we are not reacting to the user typing, so only do this + * if the text box is not the same as the model + */ + if ( + getModel().isCustomDateFormat() + && !customFormatText.getText().equals( + evt.getNewValue().toString())) + { + customFormatText.setText(getModel().getDateFormatPattern()); + rdCustom.setSelected(true); + customFormatText.setEnabled(true); + } + else + { + rdCustom.setSelected(false); + } + } + }); + rdISO.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + getModel().setDateFormatPattern("ISO8601"); + customFormatText.setEnabled(rdCustom.isSelected()); + } + }); + getModel().addPropertyChangeListener( + "dateFormatPattern", new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent evt) + { + rdISO.setSelected(getModel().isUseISO8601Format()); + } + }); - detailPanelVisible.setSelected(getModel().isDetailPaneVisible()); + customFormatText.getDocument().addDocumentListener( + new DocumentListener() + { + public void textChanged() + { + getModel().setDateFormatPattern(customFormatText.getText()); + } + + public void changedUpdate(DocumentEvent e) + { + textChanged(); + } + + public void insertUpdate(DocumentEvent e) + { + textChanged(); + } + + public void removeUpdate(DocumentEvent e) + { + textChanged(); + } + }); + ActionListener levelIconListener = new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + getModel().setLevelIcons(rdLevelIcons.isSelected()); + } + }; - JPanel loggerFormatPanel = new JPanel(); - loggerFormatPanel.setLayout(new BoxLayout(loggerFormatPanel, - BoxLayout.Y_AXIS)); - loggerFormatPanel.setBorder(BorderFactory.createTitledBorder( - BorderFactory.createEtchedBorder(), "Logger")); - loggerFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + rdLevelIcons.addActionListener(levelIconListener); + rdLevelText.addActionListener(levelIconListener); - final JLabel precisionLabel = new JLabel( - "Precision (package depth displayed)"); - final JLabel precisionLabel2 = new JLabel( - "leave blank to display full logger"); + getModel().addPropertyChangeListener( + "levelIcons", new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent evt) + { + boolean value = ((Boolean) evt.getNewValue()).booleanValue(); + rdLevelIcons.setSelected(value); + rdLevelText.setSelected(!value); + } + }); + } + } - loggerFormatPanel.add(precisionLabel); - loggerFormatPanel.add(precisionLabel2); + /** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$, $Date$ + * + * @author psmith + * + */ + private class VisualsPrefPanel extends BasicPrefPanel + { + //~ Instance fields ======================================================= + + private final JCheckBox detailPanelVisible = + new JCheckBox("Show Event Detail panel"); + + private final JCheckBox loggerTreePanel = + new JCheckBox("Show Logger Tree panel"); + private final JCheckBox scrollToBottom = + new JCheckBox("Scroll to bottom (view tracks with new events)"); + private final JCheckBox toolTips = + new JCheckBox("Show Event Detail Tooltips"); - JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT)); + //~ Constructors ========================================================== - p.add(loggerPrecision); - loggerFormatPanel.add(p); + /** + * Creates a new VisualsPrefPanel object. + */ + private VisualsPrefPanel() + { + super("Visuals"); + initPanelComponents(); + setupListeners(); + } - add(loggerFormatPanel); + //~ Methods =============================================================== - add(Box.createVerticalGlue()); - } + /** + * DOCUMENT ME! + */ + private void initPanelComponents() + { + setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + + add(toolTips); + add(detailPanelVisible); + add(loggerTreePanel); + add(scrollToBottom); + + toolTips.setSelected(getModel().isToolTips()); + detailPanelVisible.setSelected(getModel().isDetailPaneVisible()); + loggerTreePanel.setSelected(getModel().isLogTreePanelVisible()); } /** - * Allows the user to choose which columns to display. - * - * @author Paul Smith - * - */ - public class ColumnSelectorPanel extends BasicPrefPanel { - ColumnSelectorPanel() { - super("Columns"); - initComponents(); - } - - private void initComponents() { - setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); - - Box columnBox = new Box(BoxLayout.Y_AXIS); + * DOCUMENT ME! + */ + private void setupListeners() + { + toolTips.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + getModel().setToolTips(toolTips.isSelected()); + } + }); + getModel().addPropertyChangeListener( + "toolTips", new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent evt) + { + boolean value = ((Boolean) evt.getNewValue()).booleanValue(); + toolTips.setSelected(value); + } + }); - // columnBox.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Displayed Columns")); - final JList columnList = new JList(); - columnList.setVisibleRowCount(10); + detailPanelVisible.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + getModel().setDetailPaneVisible(detailPanelVisible.isSelected()); + } + }); - final ModifiableListModel listModel = new ModifiableListModel(); + getModel().addPropertyChangeListener( + "detailPaneVisible", new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent evt) + { + boolean value = ((Boolean) evt.getNewValue()).booleanValue(); + detailPanelVisible.setSelected(value); + } + }); - for (Iterator iter = ChainsawColumns.getColumnsNames().iterator(); - iter.hasNext();) { - String name = (String) iter.next(); - listModel.addElement(name); - } + scrollToBottom.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + getModel().setScrollToBottom(scrollToBottom.isSelected()); + } + }); - columnList.setModel(listModel); + getModel().addPropertyChangeListener( + "scrollToBottom", new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent evt) + { + boolean value = ((Boolean) evt.getNewValue()).booleanValue(); + scrollToBottom.setSelected(value); + } + }); - CheckListCellRenderer cellRenderer = new CheckListCellRenderer() { - protected boolean isSelected(Object value) { - return LogPanelPreferencePanel.this.getModel() - .isColumnVisible(value.toString()); - } - }; - - getModel().addPropertyChangeListener("visibleColumns", - new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - listModel.fireContentsChanged(); - } - }); - - columnList.addMouseListener(new MouseAdapter() { - public void mouseClicked(MouseEvent e) { - if ((e.getClickCount() > 1) && - ((e.getModifiers() & MouseEvent.BUTTON1_MASK) > 0)) { - int i = columnList.locationToIndex(e.getPoint()); - - if (i >= 0) { - Object column = listModel.get(i); - getModel().toggleColumn(column.toString()); - } - } else { - } - } - }); - columnList.setCellRenderer(cellRenderer); - columnBox.add(new JScrollPane(columnList)); + loggerTreePanel.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + getModel().setLogTreePanelVisible(loggerTreePanel.isSelected()); + } + }); - add(columnBox); - add(Box.createVerticalGlue()); - } + getModel().addPropertyChangeListener( + "logTreePanelVisible", new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent evt) + { + boolean value = ((Boolean) evt.getNewValue()).booleanValue(); + loggerTreePanel.setSelected(value); + } + }); } + } } 1.40 +21 -0 jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanel.java Index: LogPanel.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanel.java,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- LogPanel.java 16 Dec 2003 21:57:40 -0000 1.39 +++ LogPanel.java 17 Dec 2003 02:06:50 -0000 1.40 @@ -841,6 +841,23 @@ } }); + final JCheckBoxMenuItem menuItemLoggerTree = new JCheckBoxMenuItem("Logger Tree panel"); + menuItemLoggerTree.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent e) + { + getPreferenceModel().setLogTreePanelVisible(menuItemLoggerTree.isSelected()); + + }}); + getPreferenceModel().addPropertyChangeListener("logTreePanelVisible", new PropertyChangeListener() { + + public void propertyChange(PropertyChangeEvent evt) + { + boolean value = ((Boolean)evt.getNewValue()).booleanValue(); + menuItemLoggerTree.setSelected(value); + }}); + + menuItemFocusOn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { if (currentPoint != null) { @@ -974,6 +991,7 @@ p.add(menuItemToggleDetails); p.add(menuItemToggleToolTips); p.add(menuItemScrollBottom); + p.add(menuItemLoggerTree); p.add(new JSeparator()); p.add(menuItemToggleDock); @@ -1385,6 +1403,9 @@ getPreferenceModel().isScrollToBottom()); event.saveSetting("detailPaneVisible", getPreferenceModel().isDetailPaneVisible()); + event.saveSetting("logTreePanelVisible", + getPreferenceModel().isLogTreePanelVisible()); + saveColumnSettings(); saveColorSettings(); 1.10 +1 -0 jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java Index: LogPanelPreferenceModel.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- LogPanelPreferenceModel.java 16 Dec 2003 11:16:34 -0000 1.9 +++ LogPanelPreferenceModel.java 17 Dec 2003 02:06:50 -0000 1.10 @@ -168,6 +168,7 @@ setToolTips(that.isToolTips()); setScrollToBottom(that.isScrollToBottom()); setDetailPaneVisible(that.isDetailPaneVisible()); + setLogTreePanelVisible(that.isLogTreePanelVisible()); /** * First, iterate and ADD new columns, (this means notifications of adds go out first
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]