Browse Source

merged [18197],[18217] from 6.5 branch

svn changeset:18218/svn branch:6.6
tags/6.7.0.beta1
Matti Tahvonen 13 years ago
parent
commit
a6197b4df1

+ 4
- 0
src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java View 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

+ 72
- 3
src/com/vaadin/ui/Table.java View 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);
}

}

+ 97
- 0
tests/src/com/vaadin/tests/components/table/ColumnReorderEvent.java View File

@@ -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;
}

}

Loading…
Cancel
Save