Hi Guys,

Attached is a patch that implements the Minimum/Maximum column width 
properties. I don't know that it is as correct as it should be but I am sure 
that can be fixed :-)

Cheers,

Scott.
Index: TableView.java
===================================================================
--- TableView.java	(revision 816372)
+++ TableView.java	(working copy)
@@ -48,6 +48,8 @@
         private String name = null;
         private Object headerData = null;
         private int width = 0;
+        private int minimumWidth = 0;
+        private int maximumWidth = Integer.MAX_VALUE;
         private boolean relative = false;
         private Object filter = null;
         private CellRenderer cellRenderer = DEFAULT_CELL_RENDERER;
@@ -287,7 +289,62 @@
                 }
             }
         }
+        
+        /** Gets the minimum width the column is allowed to be.
+         * 
+         *  @return Minimum column width.
+         */
+        public int getMinimumWidth()
+        {
+            return minimumWidth;
+        }
 
+        /** Sets the minimum width the column is allowed to be.
+         *
+         *  @param minWidth Minimum column width.
+         */
+        public void setMinimumWidth( int minWidth )
+        {
+            if ( minWidth != minimumWidth )
+            {
+                int prevWidth = minimumWidth;
+
+                minimumWidth = minWidth;
+
+                if ( tableView != null )
+                    tableView.tableViewColumnListeners.columnMinimumWidthChanged( this, prevWidth );
+            }
+        }
+
+        /** Get the maximum width the column is allowed to be.
+         *
+         *  @return Maximum column width.
+         */
+        public int getMaximumWidth()
+        {
+            return maximumWidth;
+        }
+
+        /** Set the maximum width the column is allowed to be.
+         *
+         *  @param maxWidth Maximum column width.
+         */
+        public void setMaximumWidth( int maxWidth )
+        {
+            if ( maxWidth < minimumWidth )
+                throw new IllegalArgumentException( "Maximum column width is smaller than minimum column width." );
+
+            if ( maximumWidth != maxWidth )
+            {
+                int prevWidth = maximumWidth;
+
+                maximumWidth = maxWidth;
+
+                if ( tableView != null )
+                    tableView.tableViewColumnListeners.columnMaximumWidthChanged( this, prevWidth );
+            }
+        }
+
         /**
          * Returns the column's filter.
          *
@@ -883,6 +940,20 @@
         }
 
         @Override
+        public void columnMinimumWidthChanged(Column column, int previousMinimumWidth) {
+            for (TableViewColumnListener listener : this) {
+                listener.columnMinimumWidthChanged(column, previousMinimumWidth);
+            }
+        }
+
+        @Override
+        public void columnMaximumWidthChanged(Column column, int previousMaximumWidth) {
+            for (TableViewColumnListener listener : this) {
+                listener.columnMaximumWidthChanged(column, previousMaximumWidth);
+            }
+        }
+
+        @Override
         public void columnFilterChanged(Column column, Object previousFilter) {
             for (TableViewColumnListener listener : this) {
                 listener.columnFilterChanged(column, previousFilter);
Index: skin/terra/TerraTableViewSkin.java
===================================================================
--- skin/terra/TerraTableViewSkin.java	(revision 816372)
+++ skin/terra/TerraTableViewSkin.java	(working copy)
@@ -148,7 +148,7 @@
                     }
                 }
 
-                preferredWidth += columnWidth;
+                preferredWidth += Math.min( Math.max( columnWidth, column.getMinimumWidth() ), column.getMaximumWidth());
 
                 // Include space for vertical gridlines; even if we are
                 // not painting them, the header does
@@ -156,6 +156,10 @@
                     preferredWidth++;
                 }
             }
+            else
+            {
+                preferredWidth += column.getMinimumWidth();
+            }
         }
 
         return preferredWidth;
@@ -217,7 +221,8 @@
                     }
                 }
 
-                columnWidths.add(columnWidth);
+                columnWidth = Math.min( Math.max( columnWidth, column.getMinimumWidth() ), column.getMaximumWidth() );
+                columnWidths.add( columnWidth );
                 fixedWidth += columnWidth;
             }
         }
@@ -231,7 +236,7 @@
             if (column.isRelative()) {
                 int columnWidth = (int)Math.round((double)(column.getWidth()
                     * variableWidth) / (double)relativeWidth);
-                columnWidths.update(i ,columnWidth);
+                columnWidths.update(i , Math.min( Math.max( columnWidth, column.getMinimumWidth() ), column.getMaximumWidth() ));
             }
         }
 
@@ -1097,6 +1102,16 @@
     }
 
     @Override
+    public void columnMinimumWidthChanged(TableView.Column column, int previousMinimumWidth)  {
+        invalidateComponent();
+    }
+
+    @Override
+    public void columnMaximumWidthChanged(TableView.Column column, int previousMaximumWidth)  {
+        invalidateComponent();
+    }
+
+    @Override
     public void columnFilterChanged(TableView.Column column, Object previousFilter) {
         // No-op
     }
Index: skin/terra/TerraTableViewHeaderSkin.java
===================================================================
--- skin/terra/TerraTableViewHeaderSkin.java	(revision 816372)
+++ skin/terra/TerraTableViewHeaderSkin.java	(working copy)
@@ -842,6 +842,16 @@
     }
 
     @Override
+    public void columnMinimumWidthChanged(TableView.Column column, int previousMinimumWidth)  {
+        invalidateComponent();
+    }
+
+    @Override
+    public void columnMaximumWidthChanged(TableView.Column column, int previousMaximumWidth)  {
+        invalidateComponent();
+    }
+
+    @Override
     public void columnFilterChanged(TableView.Column column, Object previousFilter) {
         // No-op
     }
Index: TableViewColumnListener.java
===================================================================
--- TableViewColumnListener.java	(revision 816372)
+++ TableViewColumnListener.java	(working copy)
@@ -65,6 +65,22 @@
     public void columnWidthChanged(TableView.Column column, int previousWidth, boolean previousRelative);
 
     /**
+     * Called when a column's minimum width has changed.
+     *
+     * @param column
+     * @param previousMinimumWidth
+     */
+    public void columnMinimumWidthChanged(TableView.Column column, int previousMinimumWidth );
+
+    /**
+     * Called when a column's maximum width has changed.
+     *
+     * @param column
+     * @param previousMaximumWidth
+     */
+    public void columnMaximumWidthChanged(TableView.Column column, int previousMaximumWidth );
+
+    /**
      * Called when a column's filter has changed.
      *
      * @param column

Reply via email to