aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2011-04-12 07:48:20 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2011-04-12 07:48:20 +0000
commita6197b4df19e4c93fec76821a9b627b4be0d25ca (patch)
tree14f0fca5aac2a944f619012e58ad734aa8691f9c
parent54f73079ed9ee35f78b9f8fd481d4e2dcef9f722 (diff)
downloadvaadin-framework-a6197b4df19e4c93fec76821a9b627b4be0d25ca.tar.gz
vaadin-framework-a6197b4df19e4c93fec76821a9b627b4be0d25ca.zip
merged [18197],[18217] from 6.5 branch
svn changeset:18218/svn branch:6.6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java4
-rw-r--r--src/com/vaadin/ui/Table.java75
-rw-r--r--tests/src/com/vaadin/tests/components/table/ColumnReorderEvent.java97
3 files changed, 173 insertions, 3 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
index c16741523d..8efd582fe6 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
@@ -107,6 +107,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
public static final String HEADER_CLICK_EVENT_ID = "handleHeaderClick";
public static final String FOOTER_CLICK_EVENT_ID = "handleFooterClick";
public static final String COLUMN_RESIZE_EVENT_ID = "columnResize";
+ public static final String COLUMN_REORDER_EVENT_ID = "columnReorder";
private static final double CACHE_RATE_DEFAULT = 2;
@@ -1329,6 +1330,9 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
}
}
client.updateVariable(paintableId, "columnorder", columnOrder, false);
+ if (client.hasEventListeners(this, COLUMN_REORDER_EVENT_ID)) {
+ client.sendPendingVariableChanges();
+ }
}
@Override
diff --git a/src/com/vaadin/ui/Table.java b/src/com/vaadin/ui/Table.java
index 89f50f01ab..290aa1cf09 100644
--- a/src/com/vaadin/ui/Table.java
+++ b/src/com/vaadin/ui/Table.java
@@ -2117,6 +2117,9 @@ public class Table extends AbstractSelect implements Action.Container,
idsTemp[i] = columnIdMap.get(ids[i].toString());
}
setColumnOrder(idsTemp);
+ if (hasListeners(ColumnReorderEvent.class)) {
+ fireEvent(new ColumnReorderEvent(this));
+ }
} catch (final Exception e) {
// FIXME: Handle exception
logger.log(Level.FINER,
@@ -3850,7 +3853,7 @@ public class Table extends AbstractSelect implements Action.Container,
new Class[] { HeaderClickEvent.class });
} catch (final java.lang.NoSuchMethodException e) {
// This should never happen
- throw new java.lang.RuntimeException();
+ throw new java.lang.RuntimeException(e);
}
}
@@ -3890,7 +3893,7 @@ public class Table extends AbstractSelect implements Action.Container,
new Class[] { FooterClickEvent.class });
} catch (final java.lang.NoSuchMethodException e) {
// This should never happen
- throw new java.lang.RuntimeException();
+ throw new java.lang.RuntimeException(e);
}
}
@@ -4081,7 +4084,7 @@ public class Table extends AbstractSelect implements Action.Container,
new Class[] { ColumnResizeEvent.class });
} catch (final java.lang.NoSuchMethodException e) {
// This should never happen
- throw new java.lang.RuntimeException();
+ throw new java.lang.RuntimeException(e);
}
}
@@ -4176,4 +4179,70 @@ public class Table extends AbstractSelect implements Action.Container,
removeListener(VScrollTable.COLUMN_RESIZE_EVENT_ID,
ColumnResizeEvent.class, listener);
}
+
+ /**
+ * This event is fired when a columns are reordered by the end user user.
+ */
+ public static class ColumnReorderEvent extends Component.Event {
+ public static final Method METHOD;
+
+ static {
+ try {
+ METHOD = ColumnReorderListener.class.getDeclaredMethod(
+ "columnReorder",
+ new Class[] { ColumnReorderEvent.class });
+ } catch (final java.lang.NoSuchMethodException e) {
+ // This should never happen
+ throw new java.lang.RuntimeException(e);
+ }
+ }
+
+ /**
+ * Constructor
+ *
+ * @param source
+ * The source of the event
+ */
+ public ColumnReorderEvent(Component source) {
+ super(source);
+ }
+
+ }
+
+ /**
+ * Interface for listening to column reorder events.
+ */
+ public interface ColumnReorderListener extends Serializable {
+
+ /**
+ * This method is triggered when the column has been reordered
+ *
+ * @param event
+ */
+ public void columnReorder(ColumnReorderEvent event);
+ }
+
+ /**
+ * Adds a column reorder listener to the Table. A column reorder listener is
+ * called when a user reorders columns.
+ *
+ * @param listener
+ * The listener to attach to the Table
+ */
+ public void addListener(ColumnReorderListener listener) {
+ addListener(VScrollTable.COLUMN_REORDER_EVENT_ID,
+ ColumnReorderEvent.class, listener, ColumnReorderEvent.METHOD);
+ }
+
+ /**
+ * Removes a column reorder listener from the Table.
+ *
+ * @param listener
+ * The listener to remove
+ */
+ public void removeListener(ColumnReorderListener listener) {
+ removeListener(VScrollTable.COLUMN_REORDER_EVENT_ID,
+ ColumnReorderEvent.class, listener);
+ }
+
}
diff --git a/tests/src/com/vaadin/tests/components/table/ColumnReorderEvent.java b/tests/src/com/vaadin/tests/components/table/ColumnReorderEvent.java
new file mode 100644
index 0000000000..4c1fc70e5e
--- /dev/null
+++ b/tests/src/com/vaadin/tests/components/table/ColumnReorderEvent.java
@@ -0,0 +1,97 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Table;
+
+@SuppressWarnings("serial")
+public class ColumnReorderEvent extends TestBase {
+
+ private Label order = new Label("Column order");
+
+ @Override
+ protected void setup() {
+
+ HorizontalLayout widths = new HorizontalLayout();
+ widths.setSpacing(true);
+ widths.setWidth("50%");
+
+ order.setCaption("Column 1 width");
+ widths.addComponent(order);
+
+ addComponent(widths);
+
+ Table table1 = initTable();
+ addComponent(table1);
+
+ order.setValue(aToString(table1.getVisibleColumns()));
+
+ }
+
+ private String aToString(Object[] visibleColumns) {
+ StringBuilder sb = new StringBuilder();
+ for (Object object : visibleColumns) {
+ sb.append(object.toString());
+ sb.append(" | ");
+ }
+ return sb.toString();
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Test ColumnReorderEvents";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 6283;
+ }
+
+ private static final int ROWS = 100;
+
+ private Table initTable() {
+ final Table table = new Table();
+ table.setWidth("100%");
+ table.setImmediate(true);
+
+ IndexedContainer idx = new IndexedContainer();
+ idx.addContainerProperty("firstname", String.class, null);
+ idx.addContainerProperty("lastname", String.class, null);
+
+ Item i = idx.addItem(1);
+ i.getItemProperty("firstname").setValue("John");
+ i.getItemProperty("lastname").setValue("Johnson");
+
+ i = idx.addItem(2);
+ i.getItemProperty("firstname").setValue("Jane");
+ i.getItemProperty("lastname").setValue("Janeine");
+
+ for (int index = 3; index < ROWS; index++) {
+ i = idx.addItem(index);
+ i.getItemProperty("firstname").setValue("Jane");
+ i.getItemProperty("lastname").setValue("Janeine");
+ }
+
+ idx.addContainerProperty("property", String.class, "foobar");
+
+ table.setContainerDataSource(idx);
+
+ table.setColumnHeader("firstname", "FirstName");
+ table.setColumnHeader("lastname", "LastName");
+
+ table.addListener(new Table.ColumnReorderListener() {
+ public void columnReorder(
+ com.vaadin.ui.Table.ColumnReorderEvent event) {
+ order.setValue(aToString(table.getVisibleColumns()));
+ }
+ });
+
+ table.setColumnReorderingAllowed(true);
+
+ return table;
+ }
+
+}