psmith 2003/10/02 16:05:36
Modified: src/java/org/apache/log4j/chainsaw
LogPanelPreferencePanel.java
Log:
Added the column selector panel, although
it doesn't actually have any functionality hooked up yet.
Revision Changes Path
1.4 +169 -46
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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- LogPanelPreferencePanel.java 2 Oct 2003 08:30:04 -0000 1.3
+++ LogPanelPreferencePanel.java 2 Oct 2003 23:05:36 -0000 1.4
@@ -49,14 +49,12 @@
package org.apache.log4j.chainsaw;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-
import java.awt.BorderLayout;
import java.awt.Color;
+import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Iterator;
@@ -65,14 +63,20 @@
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
+import javax.swing.DefaultListModel;
import javax.swing.JButton;
+import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
+import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTree;
+import javax.swing.ListCellRenderer;
+import javax.swing.UIManager;
+import javax.swing.border.Border;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
@@ -83,6 +87,8 @@
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+
/**
* GUI panel used to manipulate the PreferenceModel for a Log Panel
@@ -97,6 +103,7 @@
private final LogPanelPreferenceModel uncommitedPreferenceModel =
new LogPanelPreferenceModel();
private ActionListener okCancelListener;
+ private Component currentlyDisplayedPanel = null;
public LogPanelPreferencePanel(LogPanelPreferenceModel model) {
this.committedPreferenceModel = model;
@@ -190,10 +197,15 @@
* @param panel
*/
protected void setDisplayedPrefPanel(JComponent panel) {
+ if (currentlyDisplayedPanel != null) {
+ selectedPrefPanel.remove(currentlyDisplayedPanel);
+ }
+
selectedPrefPanel.add(panel, BorderLayout.CENTER);
- selectedPrefPanel.invalidate();
- selectedPrefPanel.validate();
+ currentlyDisplayedPanel = panel;
titleLabel.setText(panel.toString());
+ selectedPrefPanel.revalidate();
+ selectedPrefPanel.repaint();
}
public void setOkCancelActionListener(ActionListener l) {
@@ -222,7 +234,12 @@
DefaultMutableTreeNode formatting =
new DefaultMutableTreeNode(new FormattingPanel());
+
+ DefaultMutableTreeNode columns =
+ new DefaultMutableTreeNode(new ColumnSelectorPanel());
+
rootNode.add(formatting);
+ rootNode.add(columns);
return model;
}
@@ -237,7 +254,14 @@
public static void main(String[] args) {
JFrame f = new JFrame("Preferences Panel Test Bed");
LogPanelPreferenceModel model = new LogPanelPreferenceModel();
- f.getContentPane().add(new LogPanelPreferencePanel(model));
+ LogPanelPreferencePanel panel = new LogPanelPreferencePanel(model);
+ f.getContentPane().add(panel);
+ panel.setOkCancelActionListener(
+ new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ System.exit(1);
+ }
+ });
f.setSize(640, 480);
f.show();
@@ -277,7 +301,8 @@
ButtonGroup bgDateFormat = new ButtonGroup();
final JRadioButton rdISO =
- new JRadioButton("<html><b>Fast</b> ISO 8601 format (yyyy-MM-dd
HH:mm:ss)</html>");
+ new JRadioButton(
+ "<html><b>Fast</b> ISO 8601 format (yyyy-MM-dd HH:mm:ss)</html>");
rdISO.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
@@ -295,56 +320,154 @@
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);
- bgDateFormat.add(rdFormat);
- rdFormat.addActionListener(new ActionListener(){
-
- public void actionPerformed(ActionEvent e) {
- getModel().setDateFormatPattern(format);
- }});
- getModel().addPropertyChangeListener(
- "dateFormatPattern",
- new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt) {
-
rdFormat.setSelected(getModel().getDateFormatPattern().equals(format));
- }
- });
- dateFormatPanel.add(rdFormat);
- }
+ for (
+ Iterator iter = LogPanelPreferenceModel.DATE_FORMATS.iterator();
+ iter.hasNext();) {
+ final String format = (String) iter.next();
+ final JRadioButton rdFormat = new JRadioButton(format);
+ bgDateFormat.add(rdFormat);
+ rdFormat.addActionListener(
+ new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ getModel().setDateFormatPattern(format);
+ }
+ });
+ getModel().addPropertyChangeListener(
+ "dateFormatPattern",
+ new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ rdFormat.setSelected(
+ getModel().getDateFormatPattern().equals(format));
+ }
+ });
+ dateFormatPanel.add(rdFormat);
+ }
+
add(dateFormatPanel);
-
+
JPanel levelFormatPanel = new JPanel();
levelFormatPanel.setLayout(
- new BoxLayout(levelFormatPanel, BoxLayout.Y_AXIS));
- levelFormatPanel.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(), "Level"));
+ new BoxLayout(levelFormatPanel, BoxLayout.Y_AXIS));
+ levelFormatPanel.setBorder(
+ BorderFactory.createTitledBorder(
+ BorderFactory.createEtchedBorder(), "Level"));
+
ButtonGroup bgLevel = new ButtonGroup();
final JRadioButton rdLevelIcons = new JRadioButton("Icons");
- final JRadioButton rdLevelText = new JRadioButton("Text");
- bgLevel.add(rdLevelIcons);
- bgLevel.add(rdLevelText);
-
- ActionListener levelIconListener = new ActionListener(){
-
- public void actionPerformed(ActionEvent e) {
- getModel().setLevelIcons(rdLevelIcons.isSelected());
-
- } };
- rdLevelIcons.addActionListener(levelIconListener);
- rdLevelText.addActionListener(levelIconListener);
-
- rdLevelIcons.setSelected(getModel().isLevelIcons());
-
- levelFormatPanel.add(rdLevelIcons);
- levelFormatPanel.add(rdLevelText);
-
+ final JRadioButton rdLevelText = new JRadioButton("Text");
+ bgLevel.add(rdLevelIcons);
+ bgLevel.add(rdLevelText);
+
+ ActionListener levelIconListener =
+ new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ getModel().setLevelIcons(rdLevelIcons.isSelected());
+ }
+ };
+
+ rdLevelIcons.addActionListener(levelIconListener);
+ rdLevelText.addActionListener(levelIconListener);
+
+ rdLevelIcons.setSelected(getModel().isLevelIcons());
+
+ levelFormatPanel.add(rdLevelIcons);
+ levelFormatPanel.add(rdLevelText);
+
add(levelFormatPanel);
add(Box.createVerticalGlue());
}
public String toString() {
return "Formatting";
+ }
+ }
+
+ /**
+ * A ListCellRenderer that display a check box if the value
+ * has been "checked".
+ *
+ * Borrowed heavily from the excellent book "Swing, 2nd Edition" by
+ * Matthew Robinson & Pavel Vorobiev.
+ *
+ * @author Paul Smith
+ *
+ */
+ public class CheckListCellRenderer extends JCheckBox
+ implements ListCellRenderer {
+ private final Border noFocusBorder =
+ BorderFactory.createEmptyBorder(1, 1, 1, 1);
+
+ /**
+ *
+ */
+ public CheckListCellRenderer() {
+ super();
+ setOpaque(true);
+ setBorder(noFocusBorder);
+ }
+
+ /* (non-Javadoc)
+ * @see
javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList,
java.lang.Object, int, boolean, boolean)
+ */
+ public Component getListCellRendererComponent(
+ JList list, Object value, int index, boolean isSelected,
+ boolean cellHasFocus) {
+ setText(value.toString());
+ setBackground(
+ isSelected ? list.getSelectionBackground() : list.getBackground());
+ setForeground(
+ isSelected ? list.getSelectionForeground() : list.getForeground());
+ setFont(list.getFont());
+ setBorder(
+ cellHasFocus ? UIManager.getBorder("List.focusCellHighlightBorder")
+ : noFocusBorder);
+
+ // TODO check the model if this is selected
+ return this;
+ }
+ }
+
+ /**
+ * Allows the user to choose which columns to display.
+ *
+ * @author Paul Smith
+ *
+ */
+ public class ColumnSelectorPanel extends BasicPrefPanel {
+ ColumnSelectorPanel() {
+ initComponents();
+ }
+
+ private void initComponents() {
+ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+
+ Box columnBox = new Box(BoxLayout.Y_AXIS);
+
+ //
columnBox.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
"Displayed Columns"));
+ final JList columnList = new JList();
+ columnList.setVisibleRowCount(10);
+
+ DefaultListModel listModel = new DefaultListModel();
+
+ for (
+ Iterator iter = ChainsawColumns.getColumnsNames().iterator();
+ iter.hasNext();) {
+ String name = (String) iter.next();
+ listModel.addElement(name);
+ }
+
+ columnList.setModel(listModel);
+
+ CheckListCellRenderer cellRenderer = new CheckListCellRenderer();
+ columnList.setCellRenderer(cellRenderer);
+ columnBox.add(new JScrollPane(columnList));
+
+ add(columnBox);
+ add(Box.createVerticalGlue());
+ }
+
+ public String toString() {
+ return "<html>Columns <i>(Work in progress)</i></html>";
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]