package scrum.client.test;
import ilarkesto.gwt.client.AAction;
import ilarkesto.gwt.client.ButtonWidget;
import ilarkesto.gwt.client.DropdownMenuButtonWidget;
import ilarkesto.gwt.client.FloatingFlowPanel;
import ilarkesto.gwt.client.Gwt;
import ilarkesto.gwt.client.ImageAnchor;
import ilarkesto.gwt.client.MultiSelectionWidget;
import ilarkesto.gwt.client.NavigatorWidget;
import ilarkesto.gwt.client.TableBuilder;
import ilarkesto.gwt.client.ToolbarWidget;
import ilarkesto.gwt.client.editor.AIntegerEditorModel;
import ilarkesto.gwt.client.editor.ATextEditorModel;
import ilarkesto.gwt.client.editor.IntegerEditorWidget;
import scrum.client.ScrumGwt;
import scrum.client.collaboration.Wiki;
import scrum.client.common.ABlockWidget;
import scrum.client.common.AScrumAction;
import scrum.client.common.AScrumWidget;
import scrum.client.common.BlockHeaderWidget;
import scrum.client.common.BlockListWidget;
import scrum.client.common.BlockWidgetFactory;
import scrum.client.img.Img;
import scrum.client.project.EstimationBarWidget;
import scrum.client.project.SelectProjectServiceCall;
import scrum.client.workspace.PagePanel;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.Widget;
public class WidgetsTesterWidget extends AScrumWidget {
private PagePanel page;
@Override
protected Widget onInitialization() {
page = new PagePanel();
page.setStyleName("WidgetsTesterWidget");
textTextarea();
testDropdown();
testActions();
testPagePanel();
testFloatingFlowPanel();
testTextConverter();
testBlockList();
testFields();
testMultiSelection();
testNavigator();
testToolbar();
testButtons();
// testImageAnchor();
return page;
}
private void textTextarea() {
final TextArea ta = new TextArea();
Button btn = new Button("check", new ClickHandler() {
public void onClick(ClickEvent event) {
int cursorPos = ta.getCursorPos();
Gwt.confirm("cursorPos: " + cursorPos);
}
});
addTest("Textarea", Gwt.createFlowPanel(ta, btn));
}
private void testDropdown() {
DropdownMenuButtonWidget empty = new DropdownMenuButtonWidget();
addActions(empty);
DropdownMenuButtonWidget label = new DropdownMenuButtonWidget();
label.setLabel("My Dropdown");
addActions(label);
DropdownMenuButtonWidget icon = new DropdownMenuButtonWidget();
icon.setIcon("emoticons/smile.png");
addActions(icon);
addTest("Dropdown", TableBuilder.row(false, 10, empty, label, icon));
}
private void addActions(DropdownMenuButtonWidget dropdown) {
dropdown.addAction(new DummyAction("Item 1"));
dropdown.addAction(new DummyAction("Item 2"));
dropdown.addAction(new DummyAction("Item 3"));
dropdown.addAction(new DummyAction("Item 4"));
dropdown.addAction(new DummyAction("Item 5"));
}
private void testPagePanel() {
PagePanel page = new PagePanel();
page.addHeader("Header");
page.addSection("section 1");
page.addSection("section 2");
page.addHeader("Another Header", new Label("extra stuff in the header"));
page.addSection("section 3");
addTest("PagePanel", page);
}
private void testActions() {
ToolbarWidget toolbar = new ToolbarWidget();
toolbar.addButton(new AAction() {
@Override
protected void onExecute() {
new SelectProjectServiceCall("invalidprojectid").execute();
}
@Override
public String getLabel() {
return "Produce Server Error";
}
});
addTest("Actions", toolbar);
}
private void testFloatingFlowPanel() {
FloatingFlowPanel panel = new FloatingFlowPanel();
panel.add(Gwt.createDiv("title", "Item 1"));
panel.add(Gwt.createDiv("title", "Item 2"));
panel.add(Gwt.createDiv("title", "Item 3"), true);
panel.add(Gwt.createDiv("title", "Item 4"), true);
addTest("FloatingFlowPanel", panel);
}
private void testTextConverter() {
StringBuilder html = new StringBuilder();
html.append(Wiki.toHtml("[Wiki] r1 aaaa t5 aaaa (r3) aaaa r3. aaaa r3: aaaa [t12] aaar7 aaaa r7x aaaa t9"))
.append("<hr>");
html.append(Wiki.toHtml("<b>html?</b> C&A\nnew line")).append("<hr>");
addTest("TextConverter", new HTML(html.toString()));
}
private void testBlockList() {
final BlockListWidget<String> list = new BlockListWidget<String>(TestBlock.FACTORY);
list.setObjects("Element A", "Element B", "Element C", "Element D", "Element E");
list.update();
addTest("BlockList", list);
}
private static class TestBlock extends ABlockWidget<String> {
@Override
protected void onInitializationHeader(BlockHeaderWidget header) {
header.insertPrefixIcon().setWidget(Img.bundle.hyperlink().createImage());
header.setDragHandle("dmy666");
header.setCenter(getObject());
header.appendCenterSuffix("Suffix");
header.insertSuffixCell(new EstimationBarWidget(null), "120px", true, null, false);
header.addToolbarAction(new DummyAction("Function 1"));
header.addToolbarAction(new DummyAction("Function 2"));
header.addMenuAction(new DummyAction("Function 3"));
header.addMenuAction(new DummyAction("Function 4"));
header.addMenuAction(new DummyAction("Function 5"));
}
@Override
protected void onUpdateHeader(BlockHeaderWidget header) {}
@Override
protected Widget onExtendedInitialization() {
HTML content = new HTML(
"<h3>"
+ getObject()
+ "</h3><p>Das ist der Content. Das ist der Content. Das ist der Content. Das ist der Content. </p>");
return content;
}
public static BlockWidgetFactory<String> FACTORY = new BlockWidgetFactory<String>() {
public TestBlock createBlock() {
return new TestBlock();
}
};
}
private String fieldsText = "test";
private String fieldsRichText = "test";
private Integer fieldsInt = 5;
private void testFields() {
TableBuilder tb = ScrumGwt.createFieldTable();
tb.addFieldRow("TextPropertyEditorWidget", new ATextEditorModel() {
@Override
public void setValue(String value) {
fieldsText = value;
}
@Override
public String getValue() {
return fieldsText;
}
});
tb.addFieldRow("RichtextEditorWidget", new ATextEditorModel() {
@Override
public void setValue(String value) {
fieldsRichText = value;
}
@Override
public String getValue() {
return fieldsRichText;
}
@Override
public boolean isRichtext() {
return true;
}
});
tb.addFieldRow("IntegerEditorWidget", new IntegerEditorWidget(new AIntegerEditorModel() {
@Override
public void setValue(Integer value) {
fieldsInt = value;
}
@Override
public Integer getValue() {
return fieldsInt;
}
@Override
public void increment() {
fieldsInt++;
}
@Override
public void decrement() {
fieldsInt--;
}
}));
addTest("FieldsWidget", tb.createTable());
}
private void testMultiSelection() {
MultiSelectionWidget<String> ms = new MultiSelectionWidget<String>();
ms.add("Item 1");
ms.add("Item 2");
ms.add("Item 3");
ms.update();
addTest("MultiSelectionWidget", ms);
}
private void testNavigator() {
NavigatorWidget navigator = new NavigatorWidget();
navigator.addItem("Item 1", "1", null);
navigator.addItem("Item 2", "2", null);
navigator.addItem("Item 3", "3", null);
addTest("NavigatorWidget", navigator);
}
private void testToolbar() {
ToolbarWidget toolbar = new ToolbarWidget();
toolbar.add(new ButtonWidget(createAction(Img.bundle.hyperlink().createImage(), "icon and text")));
toolbar.add(new ButtonWidget(createAction("text only")));
toolbar.add(new ButtonWidget(createAction(Img.bundle.hyperlink().createImage(), null)));
addTest("ToolbarWidget", toolbar);
}
private void testButtons() {
addTest("ButtonWidget:text-only", new ButtonWidget(createAction("text only")));
addTest("ButtonWidget:icon-only", new ButtonWidget(createAction(Img.bundle.hyperlink().createImage(), null)));
addTest("ButtonWidget:icon-text", new ButtonWidget(createAction(Img.bundle.hyperlink().createImage(),
"icon and text")));
addTest("ButtonWidget:nonexecutable", new ButtonWidget(createAction(Img.bundle.hyperlink().createImage(),
"icon and text", false)));
FlowPanel multipleButtons = new FlowPanel();
multipleButtons.add(new ButtonWidget(createAction("Button 1")).update());
multipleButtons.add(new ButtonWidget(createAction("Button 2")).update());
multipleButtons.add(new ButtonWidget(createAction("Button 3")).update());
addTest("multiple ButtonWidgets", multipleButtons);
}
private void testImageAnchor() {
ImageAnchor a = new ImageAnchor(Img.bundle.hyperlink().createImage(), "click");
addTest("ImageAnchor", a);
}
@Override
protected void onUpdate() {
}
private void addTest(String title, Widget content) {
Gwt.update(content);
SimplePanel sectionContent = new SimplePanel();
sectionContent.setStyleName("test-content");
sectionContent.setWidget(content);
page.addHeader(title);
page.addSection(sectionContent);
}
private AAction createAction(String label) {
return createAction(null, label);
}
private AAction createAction(final Image icon, final String label) {
return createAction(icon, label, true);
}
private AAction createAction(final Image icon, final String label, final boolean executable) {
return new AAction() {
@Override
protected void onExecute() {}
@Override
public String getLabel() {
return label;
}
@Override
public Image getIcon() {
return icon;
}
@Override
public boolean isExecutable() {
return executable;
}
@Override
public String getTooltip() {
return "Tooltip for " + getLabel();
}
};
}
static class DummyAction extends AScrumAction {
private String label;
public DummyAction(String label) {
this.label = label;
}
@Override
public String getLabel() {
return label;
}
@Override
public boolean isExecutable() {
return true;
}
@Override
public String getTooltip() {
return "Tooltip for " + label;
}
@Override
protected void onExecute() {}
}
}