sdeboy      2003/12/08 00:34:33

  Modified:    src/java/org/apache/log4j/chainsaw/color ColorPanel.java
  Log:
  Changed selected row indicator in colorpanel to an icon.
  
  Revision  Changes    Path
  1.5       +102 -50   
jakarta-log4j/src/java/org/apache/log4j/chainsaw/color/ColorPanel.java
  
  Index: ColorPanel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/color/ColorPanel.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ColorPanel.java   8 Dec 2003 06:00:21 -0000       1.4
  +++ ColorPanel.java   8 Dec 2003 08:34:33 -0000       1.5
  @@ -49,24 +49,17 @@
   
   package org.apache.log4j.chainsaw.color;
   
  -import org.apache.log4j.chainsaw.filter.FilterModel;
  -import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  -import org.apache.log4j.chainsaw.rule.ColorRule;
  -import org.apache.log4j.chainsaw.rule.ExpressionRule;
  -import org.apache.log4j.chainsaw.rule.ExpressionRuleContext;
  -import org.apache.log4j.chainsaw.rule.Rule;
  -
   import java.awt.BorderLayout;
   import java.awt.Color;
   import java.awt.Component;
   import java.awt.Dimension;
   import java.awt.FlowLayout;
  +import java.awt.Graphics;
   import java.awt.GridLayout;
   import java.awt.event.ActionEvent;
   import java.awt.event.ActionListener;
   import java.awt.event.ItemEvent;
   import java.awt.event.ItemListener;
  -
   import java.util.ArrayList;
   import java.util.List;
   import java.util.Vector;
  @@ -77,6 +70,7 @@
   import javax.swing.BoxLayout;
   import javax.swing.DefaultCellEditor;
   import javax.swing.DefaultListModel;
  +import javax.swing.Icon;
   import javax.swing.JButton;
   import javax.swing.JColorChooser;
   import javax.swing.JComboBox;
  @@ -86,10 +80,10 @@
   import javax.swing.JList;
   import javax.swing.JPanel;
   import javax.swing.JScrollPane;
  +import javax.swing.JSeparator;
   import javax.swing.JTable;
   import javax.swing.JTextField;
   import javax.swing.ListCellRenderer;
  -import javax.swing.ListSelectionModel;
   import javax.swing.WindowConstants;
   import javax.swing.border.Border;
   import javax.swing.event.ListSelectionEvent;
  @@ -97,6 +91,13 @@
   import javax.swing.table.DefaultTableModel;
   import javax.swing.table.TableCellRenderer;
   
  +import org.apache.log4j.chainsaw.filter.FilterModel;
  +import org.apache.log4j.chainsaw.icons.ChainsawIcons;
  +import org.apache.log4j.chainsaw.rule.ColorRule;
  +import org.apache.log4j.chainsaw.rule.ExpressionRule;
  +import org.apache.log4j.chainsaw.rule.ExpressionRuleContext;
  +import org.apache.log4j.chainsaw.rule.Rule;
  +
   
   /**
    * Panel which updates a RuleColorizer, allowing the user to build expression-based
  @@ -139,13 +140,17 @@
       data.add(data2);
   
       table = buildTable(data);
  +    table.sizeColumnsToFit(0);
  +    table.getColumnModel().getColumn(1).setPreferredWidth(70);
  +    table.getColumnModel().getColumn(2).setPreferredWidth(70);
  +    table.getColumnModel().getColumn(1).setMaxWidth(70);
  +    table.getColumnModel().getColumn(2).setMaxWidth(70);
       statusBar = new JLabel("Ruleset support not yet implemented");
   
       applyRules("default");
   
       table.setToolTipText("Click to edit");
       table.setRowHeight(20);
  -    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
       table.setColumnSelectionAllowed(false);
   
       table.setPreferredScrollableViewportSize(new Dimension(400, 200));
  @@ -166,21 +171,25 @@
   
       JPanel southPanel = new JPanel();
       southPanel.setLayout(new BoxLayout(southPanel, BoxLayout.Y_AXIS));
  -    southPanel.add(Box.createVerticalStrut(10));
  -
  +    southPanel.add(Box.createVerticalStrut(5));
  +    southPanel.add(new JSeparator());
  +    southPanel.add(Box.createVerticalStrut(5));
       JPanel closePanel = buildClosePanel();
       southPanel.add(closePanel);
   
       JPanel statusPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
       statusPanel.add(statusBar);
       southPanel.add(statusPanel);
  -
       rightPanel.add(rulesPanel, BorderLayout.CENTER);
       rightPanel.add(southPanel, BorderLayout.SOUTH);
       rightOuterPanel.add(rightPanel);
   
       add(ruleSetsPanel, BorderLayout.WEST);
       add(rightOuterPanel, BorderLayout.CENTER);
  +    if (table.getRowCount() > 0) {
  +        table.getSelectionModel().setSelectionInterval(0, 0);
  +    }
  +
     }
   
     public static void main(String[] args) {
  @@ -335,12 +344,12 @@
       }
   
       if (result.toString().equals("")) {
  -      ((JLabel) table.getColumnModel().getColumn(0).getCellRenderer())
  +      ((ExpressionTableCellRenderer) 
table.getColumnModel().getColumn(0).getCellRenderer())
         .setToolTipText("Click to edit");
         statusBar.setText("");
       } else {
         statusBar.setText("Errors - see expression tooltip");
  -      ((JLabel) table.getColumnModel().getColumn(0).getCellRenderer())
  +      ((ExpressionTableCellRenderer) 
table.getColumnModel().getColumn(0).getCellRenderer())
         .setToolTipText("<html>" + result.toString() + "</html>");
       }
   
  @@ -676,8 +685,11 @@
     }
   
     class ColorTableCellRenderer extends JPanel implements TableCellRenderer {
  -    Border selectedBorder;
  -    Border unselectedBorder;
  +    Border border;
  +    
  +    ColorTableCellRenderer() {
  +        setOpaque(true);
  +    }
   
       public Component getTableCellRendererComponent(
         JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
  @@ -685,65 +697,105 @@
         if (value instanceof Color) {
           setBackground((Color) value);
         }
  -
  -      if (isSelected) {
  -        if (selectedBorder == null) {
  -          selectedBorder =
  -            BorderFactory.createMatteBorder(
  -              2, 5, 2, 5, table.getSelectionBackground());
  -        }
  -        setBorder(selectedBorder);
  -      } else {
  -        if (unselectedBorder == null) {
  -          unselectedBorder =
  -            BorderFactory.createMatteBorder(2, 5, 2, 5, table.getBackground());
  -        }
  -        setBorder(unselectedBorder);
  +      if (border == null) {
  +        border = BorderFactory.createMatteBorder(2, 2, 2, 2, table.getBackground());
         }
   
  +      setBorder(border);
  +
         return this;
       }
     }
   
  -  class ExpressionTableCellRenderer extends JLabel implements TableCellRenderer {
  -    Border selectedBorder;
  -    Border unselectedBorder;
  +  class ExpressionTableCellRenderer implements TableCellRenderer {
  +    JPanel panel = new JPanel();
  +    JLabel expressionLabel = new JLabel();
  +    JLabel iconLabel = new JLabel();
  +    Icon selectedIcon = new SelectedIcon(true);
  +    Icon unselectedIcon = new SelectedIcon(false);
   
       ExpressionTableCellRenderer() {
  -      setOpaque(true);
  +      panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
  +      panel.setOpaque(true);
  +      panel.add(iconLabel);
  +      panel.add(Box.createHorizontalStrut(5));
  +      panel.add(expressionLabel);
  +    }
  +    
  +    void setToolTipText(String text) {
  +        panel.setToolTipText(text);
       }
   
       public Component getTableCellRendererComponent(
         JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
         int column) {
  +
         Vector v = tableModel.getDataVector();
         Vector r = (Vector) v.elementAt(row);
  -      setText(value.toString());
  +      expressionLabel.setText(value.toString());
   
         if (r.elementAt(1) instanceof Color) {
  -        setBackground((Color) r.elementAt(1));
  +        expressionLabel.setBackground((Color) r.elementAt(1));
  +        panel.setBackground((Color) r.elementAt(1));
         }
   
         if (r.elementAt(2) instanceof Color) {
  -        setForeground((Color) r.elementAt(2));
  +        expressionLabel.setForeground((Color) r.elementAt(2));
  +        panel.setForeground((Color) r.elementAt(2));
         }
   
         if (isSelected) {
  -        if (selectedBorder == null) {
  -          selectedBorder =
  -            BorderFactory.createMatteBorder(
  -              2, 5, 2, 5, table.getSelectionBackground());
  -        }
  -        setBorder(selectedBorder);
  +          iconLabel.setIcon(selectedIcon);
         } else {
  -        if (unselectedBorder == null) {
  -          unselectedBorder =
  -            BorderFactory.createMatteBorder(2, 5, 2, 5, table.getBackground());
  -        }
  -        setBorder(unselectedBorder);
  +          iconLabel.setIcon(unselectedIcon);
         }
   
  -      return this;
  +      return panel;
       }
  +  }
  +
  +  class SelectedIcon implements Icon {
  +      private boolean isSelected;
  +      private int width = 9;
  +      private int height = 18;
  +      private int[] xPoints = new int[4];
  +      private int[] yPoints = new int[4];
  +
  +      public SelectedIcon(boolean isSelected) {
  +        this.isSelected = isSelected;
  +        xPoints[0] = 0;
  +        yPoints[0] = -1;
  +        xPoints[1] = 0;
  +        yPoints[1] = height;
  +        xPoints[2] = width;
  +        yPoints[2] = height / 2;
  +        xPoints[3] = width;
  +        yPoints[3] = (height / 2) - 1;
  +      }
  +
  +      public int getIconHeight() {
  +        return height;
  +      }
  +
  +      public int getIconWidth() {
  +        return width;
  +      }
  +
  +      public void paintIcon(Component c, Graphics g, int x, int y) {
  +        if (isSelected) {
  +          int length = xPoints.length;
  +          int[] newXPoints = new int[length];
  +          int[] newYPoints = new int[length];
  +
  +          for (int i = 0; i < length; i++) {
  +            newXPoints[i] = xPoints[i] + x;
  +            newYPoints[i] = yPoints[i] + y;
  +          }
  +
  +          g.setColor(Color.black);
  +
  +          g.fillPolygon(newXPoints, newYPoints, length);
  +        }
  +      }
     }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to