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