aboutsummaryrefslogtreecommitdiffstats
path: root/client/src
diff options
context:
space:
mode:
authorPekka Hyvönen <pekka@vaadin.com>2015-03-22 22:20:57 +0200
committerPekka Hyvönen <pekka@vaadin.com>2015-03-22 22:20:57 +0200
commit16c67cfab9b3dd2dbf324caa612fa3a2d15550d0 (patch)
tree028c2f0acd484b9cd93131d5972eae8d36c580bc /client/src
parent8d5b8042358e8eea8db30a3114cd02993244abb2 (diff)
downloadvaadin-framework-16c67cfab9b3dd2dbf324caa612fa3a2d15550d0.tar.gz
vaadin-framework-16c67cfab9b3dd2dbf324caa612fa3a2d15550d0.zip
Grid column hiding info from client to server #(17023)
Fixes mismatched client-server API regarding ColumnVisibilityChangeEvent Adds and removes the column hiding toggle as needed when columns added / removed. Known bug when a hidable column added, column toggle won't get the caption of column. Change-Id: I708e19432dc822f713bf11f5b8e6eadb528a3961
Diffstat (limited to 'client/src')
-rw-r--r--client/src/com/vaadin/client/connectors/GridConnector.java35
-rw-r--r--client/src/com/vaadin/client/widget/grid/events/ColumnVisibilityChangeEvent.java2
-rw-r--r--client/src/com/vaadin/client/widgets/Grid.java37
3 files changed, 65 insertions, 9 deletions
diff --git a/client/src/com/vaadin/client/connectors/GridConnector.java b/client/src/com/vaadin/client/connectors/GridConnector.java
index 0807690023..7c568e02e5 100644
--- a/client/src/com/vaadin/client/connectors/GridConnector.java
+++ b/client/src/com/vaadin/client/connectors/GridConnector.java
@@ -56,6 +56,8 @@ import com.vaadin.client.widget.grid.events.BodyClickHandler;
import com.vaadin.client.widget.grid.events.BodyDoubleClickHandler;
import com.vaadin.client.widget.grid.events.ColumnReorderEvent;
import com.vaadin.client.widget.grid.events.ColumnReorderHandler;
+import com.vaadin.client.widget.grid.events.ColumnVisibilityChangeEvent;
+import com.vaadin.client.widget.grid.events.ColumnVisibilityChangeHandler;
import com.vaadin.client.widget.grid.events.GridClickEvent;
import com.vaadin.client.widget.grid.events.GridDoubleClickEvent;
import com.vaadin.client.widget.grid.events.SelectAllEvent;
@@ -388,6 +390,33 @@ public class GridConnector extends AbstractHasComponentsConnector implements
}
};
+ private ColumnVisibilityChangeHandler<JsonObject> columnVisibilityChangeHandler = new ColumnVisibilityChangeHandler<JsonObject>() {
+
+ @Override
+ public void onVisibilityChange(
+ ColumnVisibilityChangeEvent<JsonObject> event) {
+ if (!columnsUpdatedFromState) {
+ Column<?, JsonObject> column = event.getColumn();
+ if (column instanceof CustomGridColumn) {
+ getRpcProxy(GridServerRpc.class).columnVisibilityChanged(
+ ((CustomGridColumn) column).id, column.isHidden(),
+ event.isUserOriginated());
+ for (GridColumnState state : getState().columns) {
+ if (state.id.equals(((CustomGridColumn) column).id)) {
+ state.hidden = event.isHidden();
+ break;
+ }
+ }
+ } else {
+ getLogger().warning(
+ "Visibility changed for a unknown column type in Grid: "
+ + column.toString() + ", type "
+ + column.getClass());
+ }
+ }
+ }
+ };
+
private static class CustomDetailsGenerator implements DetailsGenerator {
private final Map<Integer, ComponentConnector> indexToDetailsMap = new HashMap<Integer, ComponentConnector>();
@@ -713,6 +742,8 @@ public class GridConnector extends AbstractHasComponentsConnector implements
getWidget().setEditorHandler(new CustomEditorHandler());
getWidget().addColumnReorderHandler(columnReorderHandler);
+ getWidget().addColumnVisibilityChangeHandler(
+ columnVisibilityChangeHandler);
getWidget().setDetailsGenerator(customDetailsGenerator);
getLayoutManager().registerDependency(this, getWidget().getElement());
@@ -734,7 +765,7 @@ public class GridConnector extends AbstractHasComponentsConnector implements
if (!columnIdToColumn.containsKey(state.id)) {
addColumnFromStateChangeEvent(state);
}
- updateColumnFromState(columnIdToColumn.get(state.id), state);
+ updateColumnFromStateChangeEvent(state);
}
}
@@ -947,7 +978,9 @@ public class GridConnector extends AbstractHasComponentsConnector implements
private void updateColumnFromStateChangeEvent(GridColumnState columnState) {
CustomGridColumn column = columnIdToColumn.get(columnState.id);
+ columnsUpdatedFromState = true;
updateColumnFromState(column, columnState);
+ columnsUpdatedFromState = false;
if (columnState.rendererConnector != column.getRendererConnector()) {
throw new UnsupportedOperationException(
diff --git a/client/src/com/vaadin/client/widget/grid/events/ColumnVisibilityChangeEvent.java b/client/src/com/vaadin/client/widget/grid/events/ColumnVisibilityChangeEvent.java
index 10bfbfad68..4c25f7a61b 100644
--- a/client/src/com/vaadin/client/widget/grid/events/ColumnVisibilityChangeEvent.java
+++ b/client/src/com/vaadin/client/widget/grid/events/ColumnVisibilityChangeEvent.java
@@ -60,7 +60,7 @@ public class ColumnVisibilityChangeEvent<T> extends
}
/**
- * Is the column hidden or visible.
+ * Was the column set hidden or visible.
*
* @return <code>true</code> if the column was hidden <code>false</code> if
* it was set visible
diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java
index 3e201277a0..3b26c8be57 100644
--- a/client/src/com/vaadin/client/widgets/Grid.java
+++ b/client/src/com/vaadin/client/widgets/Grid.java
@@ -68,7 +68,6 @@ import com.google.gwt.user.client.ui.HasEnabled;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.ResizeComposite;
import com.google.gwt.user.client.ui.ToggleButton;
-import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.DeferredWorker;
@@ -1926,7 +1925,8 @@ public class Grid<T> extends ResizeComposite implements
*/
private void setCellFocus(int rowIndex, int columnIndexDOM,
RowContainer container) {
- if (rowIndex == rowWithFocus && cellFocusRange.contains(columnIndexDOM)
+ if (rowIndex == rowWithFocus
+ && cellFocusRange.contains(columnIndexDOM)
&& container == this.containerWithFocus) {
refreshRow(rowWithFocus);
return;
@@ -1955,10 +1955,12 @@ public class Grid<T> extends ResizeComposite implements
++i;
} while (cell != null);
}
- int columnIndex = getColumns().indexOf(getVisibleColumn(columnIndexDOM));
+ int columnIndex = getColumns().indexOf(
+ getVisibleColumn(columnIndexDOM));
if (columnIndex >= escalator.getColumnConfiguration()
.getFrozenColumnCount()) {
- escalator.scrollToColumn(columnIndexDOM, ScrollDestination.ANY, 10);
+ escalator.scrollToColumn(columnIndexDOM, ScrollDestination.ANY,
+ 10);
}
if (this.containerWithFocus == container) {
@@ -3048,7 +3050,7 @@ public class Grid<T> extends ResizeComposite implements
* UI and functionality related to hiding columns with toggles in the
* sidebar.
*/
- private final class ColumnHider extends VerticalPanel {
+ private final class ColumnHider extends FlowPanel {
ColumnHider() {
setStyleName("column-hiding-panel");
@@ -3073,7 +3075,7 @@ public class Grid<T> extends ResizeComposite implements
}
private ToggleButton createToggle(final Column<?, T> column) {
- ToggleButton toggle = new ToggleButton(column.headerCaption);
+ ToggleButton toggle = new ToggleButton();
toggle.addStyleName("column-hiding-toggle");
toggle.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@@ -3082,6 +3084,7 @@ public class Grid<T> extends ResizeComposite implements
column.setHidden(!event.getValue(), true);
}
});
+ updateColumnHidingToggleCaption(column, toggle);
columnToHidingToggleMap.put(column, toggle);
return toggle;
}
@@ -3119,7 +3122,19 @@ public class Grid<T> extends ResizeComposite implements
}
private void updateColumnHidingToggleCaption(Column<?, T> column) {
- columnToHidingToggleMap.get(column).setText(column.headerCaption);
+ updateColumnHidingToggleCaption(column,
+ columnToHidingToggleMap.get(column));
+ }
+
+ private void updateColumnHidingToggleCaption(Column<?, T> column,
+ ToggleButton toggle) {
+ String caption = column.headerCaption;
+ if (caption == null || caption.isEmpty()) {
+ // TODO what if the content is a widget?
+ HeaderCell cell = getDefaultHeaderRow().getCell(column);
+ caption = cell.getText();
+ }
+ toggle.setText(caption);
}
}
@@ -5001,6 +5016,10 @@ public class Grid<T> extends ResizeComposite implements
Set<String> events = new HashSet<String>();
events.addAll(getConsumedEventsForRenderer(column.getRenderer()));
+ if (column.isHidable()) {
+ columnHider.updateColumnHidable(column);
+ }
+
sinkEvents(events);
}
@@ -5061,6 +5080,10 @@ public class Grid<T> extends ResizeComposite implements
((Column<?, T>) column).setGrid(null);
columns.remove(columnIndex);
+
+ if (column.isHidable()) {
+ columnHider.updateColumnHidable(column);
+ }
}
/**