summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Hyvönen <pekka@vaadin.com>2015-03-23 13:42:07 +0200
committerPekka Hyvönen <pekka@vaadin.com>2015-03-31 13:51:09 +0000
commit0e7755958b46434185cb1e6e2ec8aa6932b32f34 (patch)
tree4e39eb62bcab3c2a03a3cc5d7b98e60e1ab943fb
parent844b2c6c41d57d4db1238eb6096f225c9fdb8314 (diff)
downloadvaadin-framework-0e7755958b46434185cb1e6e2ec8aa6932b32f34.tar.gz
vaadin-framework-0e7755958b46434185cb1e6e2ec8aa6932b32f34.zip
API for column hiding toggle caption in Grid (#17272)
Fixes column toggle not getting a caption when a hidable column is added. Fixes column toggle not getting a caption on columns with widget in header. Change-Id: Ie10ada793a3635302603f684f232cadaef74a982
-rw-r--r--client/src/com/vaadin/client/connectors/GridConnector.java1
-rw-r--r--client/src/com/vaadin/client/widgets/Grid.java52
-rw-r--r--server/src/com/vaadin/ui/Grid.java46
-rw-r--r--shared/src/com/vaadin/shared/ui/grid/GridColumnState.java3
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeatures.java31
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnReorderTest.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnVisibilityTest.java50
7 files changed, 159 insertions, 26 deletions
diff --git a/client/src/com/vaadin/client/connectors/GridConnector.java b/client/src/com/vaadin/client/connectors/GridConnector.java
index 0e2ee0046b..5554664566 100644
--- a/client/src/com/vaadin/client/connectors/GridConnector.java
+++ b/client/src/com/vaadin/client/connectors/GridConnector.java
@@ -1197,6 +1197,7 @@ public class GridConnector extends AbstractHasComponentsConnector implements
column.setHidden(state.hidden);
column.setHidable(state.hidable);
+ column.setHidingToggleCaption(state.hidingToggleCaption);
column.setEditable(state.editable);
column.setEditorConnector((AbstractFieldConnector) state.editorConnector);
diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java
index 20b8844623..f9c6ed28fe 100644
--- a/client/src/com/vaadin/client/widgets/Grid.java
+++ b/client/src/com/vaadin/client/widgets/Grid.java
@@ -3096,7 +3096,7 @@ public class Grid<T> extends ResizeComposite implements
column.setHidden(!event.getValue(), true);
}
});
- updateColumnHidingToggleCaption(column, toggle);
+ updateHidingToggleCaption(column, toggle);
columnToHidingToggleMap.put(column, toggle);
return toggle;
}
@@ -3133,22 +3133,20 @@ public class Grid<T> extends ResizeComposite implements
hasValue.setStyleName("hidden", hidden);
}
- private void updateColumnHidingToggleCaption(Column<?, T> column) {
- updateColumnHidingToggleCaption(column,
+ private void updateHidingToggleCaption(Column<?, T> column) {
+ updateHidingToggleCaption(column,
columnToHidingToggleMap.get(column));
}
- private void updateColumnHidingToggleCaption(Column<?, T> column,
+ private void updateHidingToggleCaption(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();
+ String caption = column.getHidingToggleCaption();
+ if (caption == null) {
+ caption = column.headerCaption;
+ // the caption might still be null, but that is the users fault
}
toggle.setText(caption);
}
-
}
/**
@@ -3782,6 +3780,8 @@ public class Grid<T> extends ResizeComposite implements
private String headerCaption = "";
+ private String hidingToggleCaption = null;
+
private double minimumWidthPx = GridConstants.DEFAULT_MIN_WIDTH;
private double maximumWidthPx = GridConstants.DEFAULT_MAX_WIDTH;
private int expandRatio = GridConstants.DEFAULT_EXPAND_RATIO;
@@ -3891,7 +3891,7 @@ public class Grid<T> extends ResizeComposite implements
if (row != null) {
row.getCell(this).setText(headerCaption);
if (isHidable()) {
- grid.columnHider.updateColumnHidingToggleCaption(this);
+ grid.columnHider.updateHidingToggleCaption(this);
}
}
}
@@ -4143,6 +4143,36 @@ public class Grid<T> extends ResizeComposite implements
return hidable;
}
+ /**
+ * Sets the hiding toggle's caption for this column. Shown in the toggle
+ * for this column in the grid's sidebar when the column is
+ * {@link #isHidable() hidable}.
+ * <p>
+ * Defaults to <code>null</code>, when will use whatever is set with
+ * {@link #setHeaderCaption(String)}.
+ *
+ * @since
+ * @param hidingToggleCaption
+ * the caption for the hiding toggle for this column
+ */
+ public void setHidingToggleCaption(String hidingToggleCaption) {
+ this.hidingToggleCaption = hidingToggleCaption;
+ if (isHidable()) {
+ grid.columnHider.updateHidingToggleCaption(this);
+ }
+ }
+
+ /**
+ * Gets the hiding toggle caption for this column.
+ *
+ * @since
+ * @see #setHidingToggleCaption(String)
+ * @return the hiding toggle's caption for this column
+ */
+ public String getHidingToggleCaption() {
+ return hidingToggleCaption;
+ }
+
@Override
public String toString() {
String details = "";
diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java
index 2cb7ab352a..cd97e90e2e 100644
--- a/server/src/com/vaadin/ui/Grid.java
+++ b/server/src/com/vaadin/ui/Grid.java
@@ -2286,6 +2286,46 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
}
/**
+ * Gets the caption of the hiding toggle for this column.
+ *
+ * @since
+ * @see #setHidingToggleCaption(String)
+ * @return the caption for the hiding toggle for this column
+ * @throws IllegalStateException
+ * if the column is no longer attached to any grid
+ */
+ public String getHidingToggleCaption() throws IllegalStateException {
+ checkColumnIsAttached();
+ return state.hidingToggleCaption;
+ }
+
+ /**
+ * Sets the caption of the hiding toggle for this column. Shown in the
+ * toggle for this column in the grid's sidebar when the column is
+ * {@link #isHidable() hidable}.
+ * <p>
+ * By default, before triggering this setter, a user friendly version of
+ * the column's {@link #getPropertyId() property id} is used.
+ * <p>
+ * <em>NOTE:</em> setting this to <code>null</code> or empty string
+ * might cause the hiding toggle to not render correctly.
+ *
+ * @since
+ * @param hidingToggleCaption
+ * the text to show in the column hiding toggle
+ * @return the column itself
+ * @throws IllegalStateException
+ * if the column is no longer attached to any grid
+ */
+ public Column setHidingToggleCaption(String hidingToggleCaption)
+ throws IllegalStateException {
+ checkColumnIsAttached();
+ state.hidingToggleCaption = hidingToggleCaption;
+ grid.markAsDirty();
+ return this;
+ }
+
+ /**
* Returns the width (in pixels). By default a column is 100px wide.
*
* @return the width in pixels of the column
@@ -3860,8 +3900,10 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
header.addColumn(datasourcePropertyId);
footer.addColumn(datasourcePropertyId);
- column.setHeaderCaption(SharedUtil.propertyIdToHumanFriendly(String
- .valueOf(datasourcePropertyId)));
+ String humanFriendlyPropertyId = SharedUtil
+ .propertyIdToHumanFriendly(String.valueOf(datasourcePropertyId));
+ column.setHeaderCaption(humanFriendlyPropertyId);
+ column.setHidingToggleCaption(humanFriendlyPropertyId);
return column;
}
diff --git a/shared/src/com/vaadin/shared/ui/grid/GridColumnState.java b/shared/src/com/vaadin/shared/ui/grid/GridColumnState.java
index b966c53352..5aa9ea9b65 100644
--- a/shared/src/com/vaadin/shared/ui/grid/GridColumnState.java
+++ b/shared/src/com/vaadin/shared/ui/grid/GridColumnState.java
@@ -82,4 +82,7 @@ public class GridColumnState implements Serializable {
/** Can the column be hidden by the UI. */
public boolean hidable = false;
+
+ /** The caption for the column hiding toggle. */
+ public String hidingToggleCaption;
}
diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeatures.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeatures.java
index d3b1237cf9..6f4c7df38c 100644
--- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeatures.java
+++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeatures.java
@@ -768,17 +768,23 @@ public class GridBasicFeatures extends AbstractComponentTest<Grid> {
new Command<Grid, String>() {
boolean wasHidable;
+ boolean wasHidden;
+ String wasColumnHidingToggleCaption;
@Override
public void execute(Grid grid, String value, Object data) {
String columnProperty = getColumnProperty((Integer) data);
- if (grid.getColumn(columnProperty) == null) {
- grid.addColumn(columnProperty);
- grid.getColumn(columnProperty).setHidable(
- wasHidable);
+ Column column = grid.getColumn(columnProperty);
+ if (column == null) {
+ column = grid.addColumn(columnProperty);
+ column.setHidable(wasHidable);
+ column.setHidden(wasHidden);
+ column.setHidingToggleCaption(wasColumnHidingToggleCaption);
} else {
- wasHidable = grid.getColumn(columnProperty)
- .isHidable();
+ wasHidable = column.isHidable();
+ wasHidden = column.isHidden();
+ wasColumnHidingToggleCaption = column
+ .getHidingToggleCaption();
grid.removeColumn(columnProperty);
}
}
@@ -840,6 +846,19 @@ public class GridBasicFeatures extends AbstractComponentTest<Grid> {
grid.getColumn(propertyId).setHidden(hidden);
}
}, getColumnProperty(c));
+ createClickAction("Change hiding toggle caption",
+ getColumnProperty(c), new Command<Grid, String>() {
+ int count = 0;
+
+ @Override
+ public void execute(Grid grid, String value, Object data) {
+ final String columnProperty = getColumnProperty((Integer) data);
+ grid.getColumn(columnProperty)
+ .setHidingToggleCaption(
+ columnProperty + " caption "
+ + count++);
+ }
+ }, null, c);
createCategory("Column " + c + " Width", getColumnProperty(c));
diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnReorderTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnReorderTest.java
index 68ba5f5c54..d779a5c81a 100644
--- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnReorderTest.java
+++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnReorderTest.java
@@ -369,7 +369,7 @@ public class GridColumnReorderTest extends GridBasicClientFeaturesTest {
assertColumnHeaderOrder(1, 3, 4, 5, 2);
// when then
- dragAndDropColumnHeader(0, 1, 3, CellSide.RIGHT);
+ dragAndDropColumnHeader(0, 1, 4, CellSide.LEFT);
assertColumnHeaderOrder(1, 4, 3, 5, 2);
dragAndDropColumnHeader(0, 2, 4, CellSide.LEFT);
diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnVisibilityTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnVisibilityTest.java
index 37eda1c28f..7942650576 100644
--- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnVisibilityTest.java
+++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnVisibilityTest.java
@@ -24,7 +24,6 @@ import static org.junit.Assert.assertTrue;
import java.util.List;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
@@ -139,12 +138,15 @@ public class GridColumnVisibilityTest extends GridBasicFeaturesTest {
}
@Test
- @Ignore
- // known issue, column caption not passed to toggle when added again
- public void testColumnHiding_whenHidableColumnAdded_toggleAdded() {
+ public void testColumnHiding_whenHidableColumnAdded_toggleWithCorrectCaptionAdded() {
selectMenuPath("Component", "Size", "Width", "100%");
toggleColumnHidable(0);
toggleColumnHidable(1);
+ toggleColumnHidingToggleCaptionChange(0);
+ getSidebarOpenButton().click();
+ assertEquals("Column 0 caption 0", getColumnHidingToggle(0).getText());
+ getSidebarOpenButton().click();
+
addRemoveColumn(0);
addRemoveColumn(4);
addRemoveColumn(5);
@@ -163,7 +165,43 @@ public class GridColumnVisibilityTest extends GridBasicFeaturesTest {
assertColumnHeaderOrder(1, 2, 3, 11, 0);
getSidebarOpenButton().click();
- assertNotNull(getColumnHidingToggle(0));
+ assertEquals("Column 0 caption 0", getColumnHidingToggle(0).getText());
+ }
+
+ @Test
+ public void testColumnHidingToggleCaption_settingToggleCaption_updatesToggle() {
+ toggleColumnHidable(1);
+ getSidebarOpenButton().click();
+ assertEquals("column 1", getGridElement().getHeaderCell(0, 1).getText()
+ .toLowerCase());
+ assertEquals("Column 1", getColumnHidingToggle(1).getText());
+
+ toggleColumnHidingToggleCaptionChange(1);
+ assertEquals("column 1", getGridElement().getHeaderCell(0, 1).getText()
+ .toLowerCase());
+ assertEquals("Column 1 caption 0", getColumnHidingToggle(1).getText());
+
+ toggleColumnHidingToggleCaptionChange(1);
+ assertEquals("Column 1 caption 1", getColumnHidingToggle(1).getText());
+ }
+
+ @Test
+ public void testColumnHidingToggleCaption_settingWidgetToHeader_toggleCaptionStays() {
+ toggleColumnHidable(1);
+ getSidebarOpenButton().click();
+ assertEquals("column 1", getGridElement().getHeaderCell(0, 1).getText()
+ .toLowerCase());
+ assertEquals("Column 1", getColumnHidingToggle(1).getText());
+
+ selectMenuPath("Component", "Columns", "Column 1", "Header Type",
+ "Widget Header");
+
+ assertEquals("Column 1", getColumnHidingToggle(1).getText());
+ }
+
+ private void toggleColumnHidingToggleCaptionChange(int index) {
+ selectMenuPath("Component", "Columns", "Column " + index,
+ "Change hiding toggle caption");
}
@Test
@@ -264,7 +302,7 @@ public class GridColumnVisibilityTest extends GridBasicFeaturesTest {
List<WebElement> elements = sidebar.findElements(By
.className("column-hiding-toggle"));
for (WebElement e : elements) {
- if (("Column " + columnIndex).equalsIgnoreCase(e.getText())) {
+ if ((e.getText().toLowerCase()).startsWith("column " + columnIndex)) {
return e;
}
}