Hi Guys,

I have not disappeared, just didn't touch a line of code for two weeks while 
on holiday :-)

I couldn't sign up to JIRA as it gave me a big long error message when I tried 
to do so. I will keep on trying but if you could take a look at the patch in 
the mean time it would be great.

Cheers,

Scott.
Index: pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/TableView.java
===================================================================
--- pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/TableView.java	(revision 821620)
+++ pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/TableView.java	(working copy)
@@ -50,6 +50,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;
@@ -291,6 +293,74 @@
         }
 
         /**
+         * Sets the minimum and maximum widths the column can size to.
+         *
+         * @param minimumWidth Column width cannot be smaller than this size.
+         * @param maximumWidth Column width cannot be greater than this size.
+         */
+        public void setWidthLimits(int minimumWidth, int maximumWidth) {
+
+            if (maximumWidth < minimumWidth)
+                throw new IllegalArgumentException("Maximum column width is smaller than minimum column width.");
+
+            boolean fireEvent = false;
+
+            int previousMinimumWidth = this.minimumWidth;
+            int previousMaximumWidth = this.maximumWidth;
+
+            if (minimumWidth != this.minimumWidth) {
+                this.minimumWidth = minimumWidth;
+                fireEvent = true;
+            }
+
+            if (maximumWidth != this.maximumWidth) {
+                this.maximumWidth = maximumWidth;
+                fireEvent = true;
+            }
+
+            if (fireEvent && tableView != null) {
+                tableView.tableViewColumnListeners.columnWidthLimitsChanged(this, previousMinimumWidth,
+                                                                            previousMaximumWidth);
+            }
+        }
+        
+        /**
+         * 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 minimumWidth Minimum column width.
+         */
+        public void setMinimumWidth(int minimumWidth) {
+            setWidthLimits(minimumWidth, this.maximumWidth);
+        }
+
+        /**
+         * 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 maximumWidth Maximum column width.
+         */
+        public void setMaximumWidth(int maximumWidth) {
+            setWidthLimits(this.minimumWidth, maximumWidth);
+        }
+
+        /**
          * Returns the column's filter.
          *
          * @return
@@ -923,6 +993,13 @@
         }
 
         @Override
+        public void columnWidthLimitsChanged(Column column, int  previousMinimumWidth, int previousMaximumWidth) {
+            for (TableViewColumnListener listener : this) {
+                listener.columnWidthLimitsChanged(column, previousMinimumWidth, previousMaximumWidth);
+            }
+        }
+
+        @Override
         public void columnFilterChanged(Column column, Object previousFilter) {
             for (TableViewColumnListener listener : this) {
                 listener.columnFilterChanged(column, previousFilter);
Index: pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTableViewSkin.java
===================================================================
--- pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTableViewSkin.java	(revision 821620)
+++ pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTableViewSkin.java	(working copy)
@@ -145,8 +145,11 @@
                     }
                 }
 
-                preferredWidth += columnWidth;
+                preferredWidth += Math.min(Math.max(columnWidth, column.getMinimumWidth()), column.getMaximumWidth());
             }
+            else {
+                preferredWidth += column.getMinimumWidth();
+            }
         }
 
         // Include space for vertical gridlines; even if we are not painting them,
@@ -225,6 +228,7 @@
                     }
                 }
 
+                columnWidth = Math.min(Math.max(columnWidth, column.getMinimumWidth()), column.getMaximumWidth());
                 columnWidths.add(columnWidth);
                 fixedWidth += columnWidth;
             }
@@ -239,7 +243,8 @@
             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()));
             }
         }
 
@@ -1239,6 +1244,11 @@
     }
 
     @Override
+    public void columnWidthLimitsChanged(TableView.Column column, int previousMinimumWidth, int previousMaximumWidth) {
+        invalidateComponent();
+    }
+
+    @Override
     public void columnFilterChanged(TableView.Column column, Object previousFilter) {
         // No-op
     }
Index: pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTableViewHeaderSkin.java
===================================================================
--- pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTableViewHeaderSkin.java	(revision 821620)
+++ pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraTableViewHeaderSkin.java	(working copy)
@@ -817,6 +817,11 @@
     }
 
     @Override
+    public void columnWidthLimitsChanged(TableView.Column column, int  previousMinimumWidth, int previousMaximumWidth) {
+        invalidateComponent();
+    }
+
+    @Override
     public void columnFilterChanged(TableView.Column column, Object previousFilter) {
         // No-op
     }
Index: pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/TableViewColumnListener.java
===================================================================
--- pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/TableViewColumnListener.java	(revision 821620)
+++ pivot_svn/trunk/wtk/src/org/apache/pivot/wtk/TableViewColumnListener.java	(working copy)
@@ -65,6 +65,15 @@
     public void columnWidthChanged(TableView.Column column, int previousWidth, boolean previousRelative);
 
     /**
+     * Called when a column's minimum width has changed.
+     *
+     * @param column
+     * @param previousMinimumWidth
+     * @param previousMaximumWidth
+     */
+    public void columnWidthLimitsChanged(TableView.Column column, int previousMinimumWidth, int previousMaximumWidth);
+
+    /**
      * Called when a column's filter has changed.
      *
      * @param column

Reply via email to