better renderer for the "done" column header BLD200409170519
authorlebedkov@netbeans.org
Thu, 16 Sep 2004 19:10:35 +0000
changeset 52353cf16f40f7b5
parent 5234 db1db66fb430
child 5236 bb43ec7774e3
better renderer for the "done" column header
tasklist.bugs/manifest.mf
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTasksTreeTable.java
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/usertasks-1_0.dtd
tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/treetable/SortingHeaderRenderer.java
     1.1 --- a/tasklist.bugs/manifest.mf	Thu Sep 16 19:09:24 2004 +0000
     1.2 +++ b/tasklist.bugs/manifest.mf	Thu Sep 16 19:10:35 2004 +0000
     1.3 @@ -9,3 +9,6 @@
     1.4    org.netbeans.tasklistapi/1 = @tl.api.impl@
     1.5  OpenIDE-Module-Layer: org/netbeans/modules/tasklist/bugs/mf-layer.xml
     1.6  OpenIDE-Module-Public-Packages: -
     1.7 +
     1.8 +Name: org/netbeans/modules/tasklist/bugs/issues/IssuesLoader.class
     1.9 +OpenIDE-Module-Class: Loader
     2.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTasksTreeTable.java	Thu Sep 16 19:09:24 2004 +0000
     2.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/UserTasksTreeTable.java	Thu Sep 16 19:10:35 2004 +0000
     2.3 @@ -1,14 +1,20 @@
     2.4  package org.netbeans.modules.tasklist.usertasks;
     2.5  
     2.6 +import java.awt.Component;
     2.7  import java.awt.Rectangle;
     2.8  import java.util.ArrayList;
     2.9  import java.util.List;
    2.10  import java.util.logging.Level;
    2.11  import java.util.logging.Logger;
    2.12 +import javax.swing.ImageIcon;
    2.13 +import javax.swing.JTable;
    2.14  
    2.15  import javax.swing.ListSelectionModel;
    2.16 +import javax.swing.UIManager;
    2.17  import javax.swing.event.ListSelectionEvent;
    2.18  import javax.swing.event.ListSelectionListener;
    2.19 +import javax.swing.table.DefaultTableCellRenderer;
    2.20 +import javax.swing.table.JTableHeader;
    2.21  import javax.swing.table.TableColumn;
    2.22  import javax.swing.table.TableColumnModel;
    2.23  import javax.swing.tree.TreePath;
    2.24 @@ -33,6 +39,7 @@
    2.25  import org.openide.explorer.ExplorerManager;
    2.26  import org.openide.nodes.Node;
    2.27  import org.netbeans.modules.tasklist.usertasks.treetable.BooleanTableCellRenderer;
    2.28 +import org.netbeans.modules.tasklist.usertasks.treetable.SortingHeaderRenderer;
    2.29  
    2.30  /**
    2.31   * TT for user tasks
    2.32 @@ -161,8 +168,13 @@
    2.33          
    2.34          tcm.getColumn(1).setCellRenderer(
    2.35              new PriorityTableCellRenderer());
    2.36 +        SortingHeaderRenderer r = new SortingHeaderRenderer();
    2.37 +        r.setIcon(new ImageIcon(
    2.38 +            UserTasksTreeTable.class.getResource("checkbox.gif"))); // NOI18N
    2.39 +        tcm.getColumn(2).setHeaderRenderer(r);
    2.40          tcm.getColumn(2).setCellRenderer(
    2.41              new BooleanTableCellRenderer());
    2.42 +        tcm.getColumn(2).setMinWidth(17);
    2.43          tcm.getColumn(3).setCellRenderer(
    2.44              new PercentsTableCellRenderer());
    2.45          DurationTableCellRenderer dr = new DurationTableCellRenderer();
     3.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/usertasks-1_0.dtd	Thu Sep 16 19:09:24 2004 +0000
     3.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/translators/usertasks-1_0.dtd	Thu Sep 16 19:10:35 2004 +0000
     3.3 @@ -14,7 +14,6 @@
     3.4  -->
     3.5  
     3.6  <!--
     3.7 -    Author     : Tim Lebedkov
     3.8      Description: export format for user tasks
     3.9  -->
    3.10  
     4.1 --- a/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/treetable/SortingHeaderRenderer.java	Thu Sep 16 19:09:24 2004 +0000
     4.2 +++ b/tasklist.usertasks/src/org/netbeans/modules/tasklist/usertasks/treetable/SortingHeaderRenderer.java	Thu Sep 16 19:10:35 2004 +0000
     4.3 @@ -13,24 +13,108 @@
     4.4  
     4.5  package org.netbeans.modules.tasklist.usertasks.treetable;
     4.6  
     4.7 +import java.awt.BorderLayout;
     4.8  import java.awt.Component;
     4.9 +import java.awt.Dimension;
    4.10 +import java.awt.FlowLayout;
    4.11  import java.awt.Font;
    4.12 +import java.awt.Insets;
    4.13 +import javax.swing.BoxLayout;
    4.14 +import javax.swing.Icon;
    4.15  
    4.16  import javax.swing.ImageIcon;
    4.17  import javax.swing.JLabel;
    4.18 +import javax.swing.JPanel;
    4.19  import javax.swing.JTable;
    4.20  import javax.swing.SwingConstants;
    4.21  import javax.swing.UIManager;
    4.22 +import javax.swing.border.CompoundBorder;
    4.23 +import javax.swing.border.EmptyBorder;
    4.24  import javax.swing.table.DefaultTableCellRenderer;
    4.25  import javax.swing.table.JTableHeader;
    4.26 +import javax.swing.table.TableCellRenderer;
    4.27  import javax.swing.table.TableColumnModel;
    4.28 +import org.netbeans.modules.tasklist.usertasks.UTUtils;
    4.29  
    4.30  /**
    4.31   * Cell renderer for sorting column header.
    4.32   * Originally copied from org.openide.explorer.view.TreeTableView
    4.33   */
    4.34 -public class SortingHeaderRenderer extends DefaultTableCellRenderer {
    4.35 -
    4.36 +public class SortingHeaderRenderer extends JPanel implements TableCellRenderer {
    4.37 +    /**
    4.38 +     * A simple layout for an icon and a label
    4.39 +     *               
    4.40 +     *        [-----]
    4.41 +     * [----] [-----]
    4.42 +     * [Icon] [Label]
    4.43 +     * [----] [-----]
    4.44 +     *        [-----]
    4.45 +     */
    4.46 +    private static class IconAndLabelLayout implements java.awt.LayoutManager {
    4.47 +        private Component icon, label;
    4.48 +        
    4.49 +        /**
    4.50 +         * Constructor
    4.51 +         *
    4.52 +         * @param icon icon component
    4.53 +         * @param label label component
    4.54 +         */
    4.55 +        public IconAndLabelLayout(Component icon, Component label) {
    4.56 +            this.icon = icon;
    4.57 +            this.label = label;
    4.58 +        }
    4.59 +        
    4.60 +        public java.awt.Dimension preferredLayoutSize(java.awt.Container parent) {
    4.61 +            Dimension d = new Dimension();
    4.62 +            Dimension iconPref = icon.getPreferredSize();
    4.63 +            Dimension labelPref = label.getPreferredSize();
    4.64 +            d.width = iconPref.width + labelPref.width + 2;
    4.65 +            d.height = Math.max(iconPref.height, labelPref.height);
    4.66 +            return d;
    4.67 +        }
    4.68 +        
    4.69 +        public void removeLayoutComponent(Component comp) {
    4.70 +        }
    4.71 +        
    4.72 +        public void addLayoutComponent(String name, Component comp) {
    4.73 +        }
    4.74 +        
    4.75 +        public void layoutContainer(java.awt.Container parent) {
    4.76 +            Dimension iconPref = icon.getPreferredSize();
    4.77 +            Dimension labelPref = label.getPreferredSize();
    4.78 +            Insets insets = parent.getInsets();
    4.79 +            
    4.80 +            int y = (parent.getHeight() - insets.top - insets.bottom -
    4.81 +                iconPref.height) / 2;
    4.82 +            int x = (parent.getWidth() - insets.left - insets.right -
    4.83 +                iconPref.width - 2 - labelPref.width) / 2;
    4.84 +            if (y < 0)
    4.85 +                y = 0;
    4.86 +            if (x < 0)
    4.87 +                x = 0;
    4.88 +            
    4.89 +            x += insets.left;
    4.90 +            y += insets.top;
    4.91 +            
    4.92 +            int w = parent.getWidth() - iconPref.width - 2;
    4.93 +            if (w < 0)
    4.94 +                w = 0;
    4.95 +            
    4.96 +            icon.setBounds(x, y, iconPref.width, iconPref.height);
    4.97 +            
    4.98 +            if (iconPref.width != 0)
    4.99 +                x = x + iconPref.width + 2;
   4.100 +            label.setBounds(x, 0, w, parent.getHeight());
   4.101 +            
   4.102 +            UTUtils.LOGGER.fine("icon " + icon.getBounds().toString());
   4.103 +            UTUtils.LOGGER.fine("label" + label.getBounds().toString());
   4.104 +        }
   4.105 +        
   4.106 +        public java.awt.Dimension minimumLayoutSize(java.awt.Container parent) {
   4.107 +            return new Dimension(0, 0);
   4.108 +        }
   4.109 +    }
   4.110 +    
   4.111      private static final long serialVersionUID = 1;
   4.112  
   4.113      private static ImageIcon SORT_DESC_ICON =
   4.114 @@ -39,13 +123,25 @@
   4.115      private static ImageIcon SORT_ASC_ICON = 
   4.116          new ImageIcon(org.openide.util.Utilities.loadImage(
   4.117          "org/netbeans/modules/tasklist/usertasks/treetable/columnsSortedAsc.gif")); // NOI18N
   4.118 +
   4.119 +    private JLabel label = new JLabel();
   4.120 +    private DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
   4.121      
   4.122      /**
   4.123       * Constructor
   4.124       */
   4.125      public SortingHeaderRenderer() {
   4.126 -	setHorizontalAlignment(JLabel.CENTER);
   4.127 -        setHorizontalTextPosition(SwingConstants.LEFT);
   4.128 +/*        setBorder(new CompoundBorder(
   4.129 +            UIManager.getBorder("TableHeader.cellBorder"), 
   4.130 +            new EmptyBorder(0, 2, 0, 2)));*/
   4.131 +        
   4.132 +        renderer.setHorizontalTextPosition(SwingConstants.LEFT);
   4.133 +        renderer.setOpaque(false);
   4.134 +        
   4.135 +        add(label);
   4.136 +        add(renderer);
   4.137 +        
   4.138 +        setLayout(new SortingHeaderRenderer.IconAndLabelLayout(label, renderer));
   4.139      }
   4.140      
   4.141      public Component getTableCellRendererComponent(JTable table, Object value,
   4.142 @@ -55,28 +151,46 @@
   4.143              if (header != null) {
   4.144                  setForeground(header.getForeground());
   4.145                  setBackground(header.getBackground());
   4.146 -                setFont(header.getFont());
   4.147 +                renderer.setFont(header.getFont());
   4.148              }
   4.149              TableColumnModel tcm = header.getColumnModel();
   4.150              int modelIndex = tcm.getColumn(column).getModelIndex();
   4.151              SortingModel tableModel = ((TreeTable) table).getSortingModel();
   4.152              if (tableModel != null) {
   4.153                  if (tableModel.getSortedColumn() == modelIndex) {
   4.154 -                    this.setIcon(
   4.155 +                    renderer.setIcon(
   4.156                          tableModel.isSortOrderDescending() ? 
   4.157                          SORT_DESC_ICON : SORT_ASC_ICON);
   4.158 -                    this.setFont(this.getFont().deriveFont(Font.BOLD));
   4.159 +                    renderer.setFont(this.getFont().deriveFont(Font.BOLD));
   4.160                  } else {
   4.161 -                    this.setIcon(null);
   4.162 +                    renderer.setIcon(null);
   4.163                  }
   4.164              }
   4.165          }
   4.166  
   4.167 -        setText((value == null) ? "" : value.toString());
   4.168 +        renderer.setText((value == null) ? "" : value.toString());
   4.169          setBorder(UIManager.getBorder("TableHeader.cellBorder"));
   4.170          
   4.171          return this;
   4.172      }
   4.173 +    
   4.174 +    /**
   4.175 +     * Sets an icon
   4.176 +     *
   4.177 +     * @param new icon
   4.178 +     */
   4.179 +    public void setIcon(Icon icon) {
   4.180 +        label.setIcon(icon);
   4.181 +    }
   4.182 +    
   4.183 +    /**
   4.184 +     * Returns the icon
   4.185 +     *
   4.186 +     * @return icon
   4.187 +     */
   4.188 +    public Icon getIcon() {
   4.189 +        return label.getIcon();
   4.190 +    }
   4.191  }
   4.192  
   4.193