summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2015-07-04 16:25:43 +0300
committerVaadin Code Review <review@vaadin.com>2015-08-21 11:12:42 +0000
commitd40df1dc68f166bc23609d631420a34d1a0f2adf (patch)
treec5823e68deec8d5fab0d4822cb9d2d7a74528887 /server
parent5c56d140bebc5aaf23790c6abb081f5f2b2a5cf6 (diff)
downloadvaadin-framework-d40df1dc68f166bc23609d631420a34d1a0f2adf.tar.gz
vaadin-framework-d40df1dc68f166bc23609d631420a34d1a0f2adf.zip
Column collapse events for Table (#6914)
Change-Id: Ifeb081086a4231f75f07f4d26c56ec22e72ce5d1
Diffstat (limited to 'server')
-rw-r--r--server/src/com/vaadin/ui/Table.java89
1 files changed, 87 insertions, 2 deletions
diff --git a/server/src/com/vaadin/ui/Table.java b/server/src/com/vaadin/ui/Table.java
index 42c4beab6c..2cd4084ad9 100644
--- a/server/src/com/vaadin/ui/Table.java
+++ b/server/src/com/vaadin/ui/Table.java
@@ -69,6 +69,7 @@ import com.vaadin.shared.util.SharedUtil;
import com.vaadin.ui.declarative.DesignAttributeHandler;
import com.vaadin.ui.declarative.DesignContext;
import com.vaadin.ui.declarative.DesignException;
+import com.vaadin.util.ReflectTools;
/**
* <p>
@@ -1310,6 +1311,8 @@ public class Table extends AbstractSelect implements Action.Container,
* the desired collapsedness.
* @throws IllegalStateException
* if column collapsing is not allowed
+ * @throws IllegalArgumentException
+ * if the property id does not exist
*/
public void setColumnCollapsed(Object propertyId, boolean collapsed)
throws IllegalStateException {
@@ -1319,11 +1322,19 @@ public class Table extends AbstractSelect implements Action.Container,
if (collapsed && noncollapsibleColumns.contains(propertyId)) {
throw new IllegalStateException("The column is noncollapsible!");
}
+ if (!getContainerPropertyIds().contains(propertyId)) {
+ throw new IllegalArgumentException("Property '" + propertyId
+ + "' was not found in the container");
+ }
if (collapsed) {
- collapsedColumns.add(propertyId);
+ if (collapsedColumns.add(propertyId)) {
+ fireColumnCollapseEvent(propertyId);
+ }
} else {
- collapsedColumns.remove(propertyId);
+ if (collapsedColumns.remove(propertyId)) {
+ fireColumnCollapseEvent(propertyId);
+ }
}
// Assures the visual refresh
@@ -3182,6 +3193,10 @@ public class Table extends AbstractSelect implements Action.Container,
}
}
+ private void fireColumnCollapseEvent(Object propertyId) {
+ fireEvent(new ColumnCollapseEvent(this, propertyId));
+ }
+
private void fireColumnResizeEvent(Object propertyId, int previousWidth,
int currentWidth) {
/*
@@ -5742,6 +5757,53 @@ public class Table extends AbstractSelect implements Action.Container,
}
/**
+ * This event is fired when the collapse state of a column changes
+ */
+ public static class ColumnCollapseEvent extends Component.Event {
+
+ public static final Method METHOD = ReflectTools.findMethod(
+ ColumnCollapseListener.class, "columnCollapseStateChange",
+ ColumnCollapseEvent.class);
+ private Object propertyId;
+
+ /**
+ * Constructor
+ *
+ * @param source
+ * The source of the event
+ * @param propertyId
+ * The id of the coumn
+ */
+ public ColumnCollapseEvent(Component source, Object propertyId) {
+ super(source);
+ this.propertyId = propertyId;
+ }
+
+ /**
+ * Gets the id of the column whose collapse state changed
+ *
+ * @return the property id of the column
+ */
+ public Object getPropertyId() {
+ return propertyId;
+ }
+ }
+
+ /**
+ * Interface for listening to column collapse events.
+ */
+ public interface ColumnCollapseListener extends Serializable {
+
+ /**
+ * This method is triggered when the collapse state for a column has
+ * changed
+ *
+ * @param event
+ */
+ public void columnCollapseStateChange(ColumnCollapseEvent event);
+ }
+
+ /**
* Adds a column reorder listener to the Table. A column reorder listener is
* called when a user reorders columns.
*
@@ -5783,6 +5845,29 @@ public class Table extends AbstractSelect implements Action.Container,
}
/**
+ * Adds a column collapse listener to the Table. A column collapse listener
+ * is called when the collapsed state of a column changes.
+ *
+ * @param listener
+ * The listener to attach
+ */
+ public void addColumnCollapseListener(ColumnCollapseListener listener) {
+ addListener(TableConstants.COLUMN_COLLAPSE_EVENT_ID,
+ ColumnCollapseEvent.class, listener, ColumnCollapseEvent.METHOD);
+ }
+
+ /**
+ * Removes a column reorder listener from the Table.
+ *
+ * @param listener
+ * The listener to remove
+ */
+ public void removeColumnCollapseListener(ColumnCollapseListener listener) {
+ removeListener(TableConstants.COLUMN_COLLAPSE_EVENT_ID,
+ ColumnCollapseEvent.class, listener);
+ }
+
+ /**
* Set the item description generator which generates tooltips for cells and
* rows in the Table
*