View Javadoc
1   /*
2   
3       dsh-eventlist-view  Views for event lists.
4       Copyright (c) 2010-2019 held jointly by the individual authors.
5   
6       This library is free software; you can redistribute it and/or modify it
7       under the terms of the GNU Lesser General Public License as published
8       by the Free Software Foundation; either version 3 of the License, or (at
9       your option) any later version.
10  
11      This library is distributed in the hope that it will be useful, but WITHOUT
12      ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or
13      FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14      License for more details.
15  
16      You should have received a copy of the GNU Lesser General Public License
17      along with this library;  if not, write to the Free Software Foundation,
18      Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA.
19  
20      > http://www.fsf.org/licensing/licenses/lgpl.html
21      > http://www.opensource.org/licenses/lgpl-license.php
22  
23  */
24  package org.dishevelled.eventlist.view;
25  
26  import ca.odell.glazedlists.EventList;
27  
28  import ca.odell.glazedlists.gui.TableFormat;
29  
30  import org.dishevelled.iconbundle.IconSize;
31  
32  import org.dishevelled.iconbundle.tango.TangoProject;
33  
34  import org.dishevelled.identify.IdTableCellRenderer;
35  
36  /**
37   * Identifiable elements table.
38   *
39   * @param <E> model element type
40   * @author  Michael Heuer
41   */
42  public class IdElementsTable<E>
43      extends ElementsTable<E>
44  {
45      /** Identifiable table cell renderer. */
46      private final IdTableCellRenderer tableCellRenderer = new IdTableCellRenderer(DEFAULT_ICON_SIZE);
47  
48      /** Default icon size, {@link TangoProject#EXTRA_SMALL}. */
49      public static final IconSize DEFAULT_ICON_SIZE = TangoProject.EXTRA_SMALL;
50  
51  
52      /**
53       * Create a new identifiable elements table view with the specified model, table format, and column class.
54       *
55       * @param model model, must not be null
56       * @param tableFormat table format, must not be null
57       * @param columnClass column class, must not be null
58       */
59      public IdElementsTable(final EventList<E> model,
60                             final TableFormat<E> tableFormat,
61                             final Class<? extends E> columnClass)
62      {
63          super(model, tableFormat);
64          if (columnClass == null)
65          {
66              throw new IllegalArgumentException("columnClass must not be null");
67          }
68          getTable().setDefaultRenderer(columnClass, tableCellRenderer);
69          updateRowHeight();
70      }
71  
72      /**
73       * Create a new identifiable elements table view with the specified label text, model, table format,
74       * and column class.
75       *
76       * @param labelText label text
77       * @param model model, must not be null
78       * @param tableFormat table format, must not be null
79       * @param columnClass column class, must not be null
80       */
81      public IdElementsTable(final String labelText,
82                             final EventList<E> model,
83                             final TableFormat<E> tableFormat,
84                             final Class<? extends E> columnClass)
85      {
86          super(labelText, model, tableFormat);
87          if (columnClass == null)
88          {
89              throw new IllegalArgumentException("columnClass must not be null");
90          }
91          getTable().setDefaultRenderer(columnClass, tableCellRenderer);
92          updateRowHeight();
93      }
94  
95  
96      /**
97       * Return the icon size for this identifiable elements table.
98       *
99       * @return the icon size for this identifiable elements table
100      */
101     public final IconSize getIconSize()
102     {
103         return tableCellRenderer.getIconSize();
104     }
105 
106     /**
107      * Set the icon size for this identifiable elements table to <code>iconSize</code>.
108      * Defaults to {@link #DEFAULT_ICON_SIZE}.
109      *
110      * <p>This is a bound property.</p>
111      *
112      * @param iconSize icon size for this identifiable elements table, must not be null
113      */
114     public final void setIconSize(final IconSize iconSize)
115     {
116         IconSize oldIconSize = tableCellRenderer.getIconSize();
117         tableCellRenderer.setIconSize(iconSize);
118         updateRowHeight();
119         firePropertyChange("iconSize", oldIconSize, iconSize);
120     }
121 
122     /**
123      * Update row height, called when the icon size changes.
124      *
125      * @since 2.1
126      */
127     protected void updateRowHeight()
128     {
129         getTable().setRowHeight(getIconSize().getHeight() + 4);
130     }
131 }