]> source.dussan.org Git - vaadin-framework.git/commitdiff
merged [18197],[18217] from 6.5 branch
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Tue, 12 Apr 2011 07:48:20 +0000 (07:48 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Tue, 12 Apr 2011 07:48:20 +0000 (07:48 +0000)
svn changeset:18218/svn branch:6.6

src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
src/com/vaadin/ui/Table.java
tests/src/com/vaadin/tests/components/table/ColumnReorderEvent.java [new file with mode: 0644]

index c16741523def0153db227e96aee86a1ca849fb74..8efd582fe62366fcd8a116a50f20322bb4741819 100644 (file)
@@ -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
index 89f50f01abdd2b728e5b8bf6f5ebb00b57eba266..290aa1cf09809e269945c7a26f173b211219c7f4 100644 (file)
@@ -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 (file)
index 0000000..4c1fc70
--- /dev/null
@@ -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;
+    }
+
+}