/*
* Copyright 2000-2016 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.tests.widgetset.client.v7.grid;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.user.client.ui.Button;
import com.vaadin.v7.client.renderers.ButtonRenderer;
import com.vaadin.v7.client.renderers.TextRenderer;
import com.vaadin.v7.client.widget.grid.RendererCellReference;
import com.vaadin.v7.client.widget.grid.datasources.ListDataSource;
import com.vaadin.v7.client.widgets.Grid;
import com.vaadin.v7.client.widgets.Grid.Column;
public class GridRendererChangeWidget
extends PureGWTTestApplication<Grid<String[]>> {
public class MyButtonRenderer extends ButtonRenderer {
private final Button widget = new Button();
private boolean hasInit = false;
private boolean hasBeenDestroyed = false;
private boolean wasAttached = false;
@Override
public void init(RendererCellReference cell) {
if (hasInit || hasBeenDestroyed) {
throw new RuntimeException("Init in an unexpected state.");
}
super.init(cell);
hasInit = true;
}
@Override
public Button createWidget() {
return widget;
}
@Override
public void render(RendererCellReference cell, String text,
Button button) {
if (!hasInit || hasBeenDestroyed) {
throw new RuntimeException("Render in an unexpected state.");
}
if (button != widget) {
throw new RuntimeException("Unexpected button instance");
}
if (button.getParent() != getTestedWidget()) {
throw new RuntimeException("Button not attached!");
}
super.render(cell, text, button);
wasAttached = true;
}
@Override
public void destroy() {
if (!hasInit || !wasAttached) {
throw new RuntimeException("Destroy in an unexpected state");
}
super.destroy();
hasBeenDestroyed = true;
}
public void verify() {
if (!hasInit) {
throw new RuntimeException("Failed. Not initialized");
} else if (!wasAttached) {
throw new RuntimeException("Failed. Not attached");
} else if (widget.getParent() != null) {
throw new RuntimeException("Failed. Not detached");
} else if (!hasBeenDestroyed) {
throw new RuntimeException("Failed. Not destroyed");
}
}
}
public GridRendererChangeWidget() {
super(new Grid<String[]>());
String[] strArr = new String[] { "foo", "bar" };
ListDataSource<String[]> ds = new ListDataSource<String[]>(strArr);
final Grid<String[]> grid = getTestedWidget();
grid.setDataSource(ds);
final Column<String, String[]> first = new Column<String, String[]>() {
@Override
public String getValue(String[] row) {
return row[0];
}
};
grid.addColumn(first).setHeaderCaption("First")
.setRenderer(new MyButtonRenderer());
final Column<String, String[]> second = new Column<String, String[]>() {
@Override
public String getValue(String[] row) {
return row[1];
}
};
grid.addColumn(second).setHeaderCaption("Second")
.setRenderer(new MyButtonRenderer());
addMenuCommand("Change first renderer", new ScheduledCommand() {
boolean isButton = true;
@Override
public void execute() {
if (isButton) {
final MyButtonRenderer r = (MyButtonRenderer) first
.getRenderer();
first.setRenderer(new TextRenderer());
r.verify();
} else {
first.setRenderer(new MyButtonRenderer());
}
isButton = !isButton;
}
}, "Component");
addMenuCommand("Change second renderer", new ScheduledCommand() {
boolean isButton = true;
@Override
public void execute() {
if (isButton) {
MyButtonRenderer r = (MyButtonRenderer) second
.getRenderer();
second.setRenderer(new TextRenderer());
r.verify();
} else {
second.setRenderer(new MyButtonRenderer());
}
isButton = !isButton;
}
}, "Component");
addNorth(grid, 600);
grid.getElement().getStyle().setZIndex(0);
}
}