From: Matti Tahvonen Date: Thu, 11 Oct 2007 07:43:18 +0000 (+0000) Subject: Added some server side components (which configure their superclass) and test. X-Git-Tag: 6.7.0.beta1~5869 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=47642ef4c920842af9c88b9fa7ec87ea5da6a9f9;p=vaadin-framework.git Added some server side components (which configure their superclass) and test. svn changeset:2487/svn branch:trunk --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetSet.java b/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetSet.java index 2be55b4834..801350c911 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetSet.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetSet.java @@ -190,10 +190,14 @@ public class DefaultWidgetSet implements WidgetSet { } else if ("tree".equals(tag)) { return "com.itmill.toolkit.terminal.gwt.client.ui.ITree"; } else if ("select".equals(tag)) { - if ("optiongroup".equals(uidl.getStringAttribute("style"))) { - return "com.itmill.toolkit.terminal.gwt.client.ui.IOptionGroup"; - } else if ("twincol".equals(uidl.getStringAttribute("style"))) { - return "com.itmill.toolkit.terminal.gwt.client.ui.ITwinColSelect"; + if(uidl.hasAttribute("type")) { + String type = uidl.getStringAttribute("type"); + if(type.equals("twincol")) + return "com.itmill.toolkit.terminal.gwt.client.ui.ITwinColSelect"; + if(type.equals("optiongroup")) + return "com.itmill.toolkit.terminal.gwt.client.ui.IOptionGroup"; + if(type.equals("native")) + return "com.itmill.toolki.terminal.gwt.client.ui.ISelect"; } else { return "com.itmill.toolkit.terminal.gwt.client.ui.IFilterSelect"; } diff --git a/src/com/itmill/toolkit/tests/TestForPreconfiguredComponents.java b/src/com/itmill/toolkit/tests/TestForPreconfiguredComponents.java new file mode 100644 index 0000000000..d473fd08db --- /dev/null +++ b/src/com/itmill/toolkit/tests/TestForPreconfiguredComponents.java @@ -0,0 +1,194 @@ +package com.itmill.toolkit.tests; + +import sun.tools.jconsole.CreateMBeanDialog; + +import com.itmill.toolkit.event.Action; +import com.itmill.toolkit.event.Action.Handler; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.CheckBox; +import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.NativeSelect; +import com.itmill.toolkit.ui.OptionGroup; +import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Select; +import com.itmill.toolkit.ui.Tree; +import com.itmill.toolkit.ui.TwinColSelect; +import com.itmill.toolkit.ui.Button.ClickEvent; +import com.itmill.toolkit.ui.Button.ClickListener; + +/** + * Some test cases for trees. Events panel logs events that happen server side. + * + * @author IT Mill Ltd. + */ +public class TestForPreconfiguredComponents extends CustomComponent implements + Handler { + + private static final String[] firstnames = new String[] { "John", "Mary", + "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" }; + + private static final String[] lastnames = new String[] { "Torvalds", + "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding", + "Einstein" }; + + private OrderedLayout main = new OrderedLayout(); + + private Action[] actions = new Action[] { new Action("edit"), + new Action("delete") }; + + private Panel al; + + private Tree contextTree; + + public TestForPreconfiguredComponents() { + + setCompositionRoot(main); + createNewView(); + } + + public void createNewView() { + main.removeAllComponents(); + main + .addComponent(new Label( + "In TK5 we introduce some \"new\" componens. Earlier one" + + " usually used setStyle or some other methods on possibly " + + "multiple steps to configure component for ones needs. These new " + + "server side components are mostly just classes that in constructor " + + "set base class to state that programmer wants. This ought to help " + + "newcomers and make code more readable.")); + + main.addComponent(new Button("commit")); + + Panel test = createTestBench(new CheckBox()); + test.setCaption("CheckBox (configured from button)"); + main.addComponent(test); + + Select s = new TwinColSelect(); + fillSelect(s, 20); + test = createTestBench(s); + test.setCaption("TwinColSelect (configured from select)"); + main.addComponent(test); + + s = new NativeSelect(); + fillSelect(s, 20); + test = createTestBench(s); + test.setCaption("Native (configured from select)"); + main.addComponent(test); + + s = new OptionGroup(); + fillSelect(s, 20); + test = createTestBench(s); + test.setCaption("OptionGroup (configured from select)"); + main.addComponent(test); + + s = new OptionGroup(); + fillSelect(s, 20); + s.setMultiSelect(true); + test = createTestBench(s); + test.setCaption("OptionGroup + multiselect manually (configured from select)"); + main.addComponent(test); + + +// Tree t = createTestTree(); +// t.setCaption("with actions"); +// t.setImmediate(true); +// t.addActionHandler(this); +// Panel ol = (Panel) createTestBench(t); +// al = new Panel("action log"); +// ol.addComponent(al); +// main.addComponent(ol); +// contextTree = t; + + Button b = new Button("refresh view", this, "createNewView"); + main.addComponent(b); + + } + + public static void fillSelect(Select s, int items) { + for (int i = 0; i < items; i++) { + String name = firstnames[(int) (Math.random() * (firstnames.length - 1))] + + " " + + lastnames[(int) (Math.random() * (lastnames.length - 1))]; + s.addItem(name); + } + } + + public Tree createTestTree() { + Tree t = new Tree("Tree"); + String[] names = new String[100]; + for (int i = 0; i < names.length; i++) + names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))] + + " " + + lastnames[(int) (Math.random() * (lastnames.length - 1))]; + + // Create tree + t = new Tree("Organization Structure"); + for (int i = 0; i < 100; i++) { + t.addItem(names[i]); + String parent = names[(int) (Math.random() * (names.length - 1))]; + if (t.containsId(parent)) + t.setParent(names[i], parent); + } + + // Forbid childless people to have children (makes them leaves) + for (int i = 0; i < 100; i++) + if (!t.hasChildren(names[i])) + t.setChildrenAllowed(names[i], false); + return t; + } + + public Panel createTestBench(Component t) { + Panel ol = new Panel(); + ol.setLayout(new OrderedLayout(OrderedLayout.ORIENTATION_HORIZONTAL)); + + ol.addComponent(t); + + final OrderedLayout ol2 = new OrderedLayout(OrderedLayout.ORIENTATION_HORIZONTAL); + final Panel status = new Panel("Events"); + final Button clear = new Button("clear event log"); + clear.addListener(new ClickListener() { + public void buttonClick(ClickEvent event) { + status.removeAllComponents(); + status.addComponent(ol2); + } + }); + ol2.addComponent(clear); + final Button commit = new Button("commit changes"); + ol2.addComponent(commit); + status.addComponent(ol2); + + status.setHeight(300); + status.setWidth(400); + + ol.addComponent(status); + + t.addListener(new Listener() { + public void componentEvent(Event event) { + status + .addComponent(new Label(event.getClass() + .getSimpleName())); + status.addComponent(new Label("selected: " + + event.getSource().toString())); + } + }); + + return ol; + } + + public Action[] getActions(Object target, Object sender) { + return actions; + } + + public void handleAction(Action action, Object sender, Object target) { + if (action == actions[1]) { + al.addComponent(new Label("Delete selected on " + target)); + contextTree.removeItem(target); + + } else { + al.addComponent(new Label("Edit selected on " + target)); + } + } +} diff --git a/src/com/itmill/toolkit/ui/CheckBox.java b/src/com/itmill/toolkit/ui/CheckBox.java new file mode 100644 index 0000000000..6bfef06817 --- /dev/null +++ b/src/com/itmill/toolkit/ui/CheckBox.java @@ -0,0 +1,8 @@ +package com.itmill.toolkit.ui; + +public class CheckBox extends Button { + public CheckBox() { + super(); + setSwitchMode(true); + } +} diff --git a/src/com/itmill/toolkit/ui/NativeSelect.java b/src/com/itmill/toolkit/ui/NativeSelect.java new file mode 100644 index 0000000000..5aa16fcb87 --- /dev/null +++ b/src/com/itmill/toolkit/ui/NativeSelect.java @@ -0,0 +1,22 @@ +/** + * + */ +package com.itmill.toolkit.ui; + +import com.itmill.toolkit.terminal.PaintException; +import com.itmill.toolkit.terminal.PaintTarget; + +/** + * Since TK5 default select is customized component with mane advanced features + * over terminals native select components. Sometimes "native" select may still + * be the best option. Terminal renders this select with its native select + * widget. + */ +public class NativeSelect extends Select { + + public void paintContent(PaintTarget target) throws PaintException { + target.addAttribute("type", "native"); + super.paintContent(target); + } + +} diff --git a/src/com/itmill/toolkit/ui/OptionGroup.java b/src/com/itmill/toolkit/ui/OptionGroup.java new file mode 100644 index 0000000000..e16042a5fb --- /dev/null +++ b/src/com/itmill/toolkit/ui/OptionGroup.java @@ -0,0 +1,19 @@ +/** + * + */ +package com.itmill.toolkit.ui; + +import com.itmill.toolkit.terminal.PaintException; +import com.itmill.toolkit.terminal.PaintTarget; + +/** + * Configures select to be used as an option group. + */ +public class OptionGroup extends Select { + + public void paintContent(PaintTarget target) throws PaintException { + target.addAttribute("type", "optiongroup"); + super.paintContent(target); + } + +} diff --git a/src/com/itmill/toolkit/ui/TwinColSelect.java b/src/com/itmill/toolkit/ui/TwinColSelect.java new file mode 100644 index 0000000000..ec129934ce --- /dev/null +++ b/src/com/itmill/toolkit/ui/TwinColSelect.java @@ -0,0 +1,57 @@ +/** + * + */ +package com.itmill.toolkit.ui; + +import java.util.Collection; + +import com.itmill.toolkit.data.Container; +import com.itmill.toolkit.terminal.PaintException; +import com.itmill.toolkit.terminal.PaintTarget; + +/** + * Multiselect component with two lists: left side for available items and right side for + * selected items. + */ +public class TwinColSelect extends Select { + + /** + * + */ + public TwinColSelect() { + super(); + setMultiSelect(true); + } + + /** + * @param caption + */ + public TwinColSelect(String caption) { + super(caption); + setMultiSelect(true); + } + + /** + * @param caption + * @param dataSource + */ + public TwinColSelect(String caption, Container dataSource) { + super(caption, dataSource); + setMultiSelect(true); + } + + /** + * @param caption + * @param options + */ + public TwinColSelect(String caption, Collection options) { + super(caption, options); + setMultiSelect(true); + } + + public void paintContent(PaintTarget target) throws PaintException { + target.addAttribute("type", "twincol"); + super.paintContent(target); + } + +}