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