]> source.dussan.org Git - vaadin-framework.git/commitdiff
Added some server side components (which configure their superclass) and test.
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 11 Oct 2007 07:43:18 +0000 (07:43 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 11 Oct 2007 07:43:18 +0000 (07:43 +0000)
svn changeset:2487/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetSet.java
src/com/itmill/toolkit/tests/TestForPreconfiguredComponents.java [new file with mode: 0644]
src/com/itmill/toolkit/ui/CheckBox.java [new file with mode: 0644]
src/com/itmill/toolkit/ui/NativeSelect.java [new file with mode: 0644]
src/com/itmill/toolkit/ui/OptionGroup.java [new file with mode: 0644]
src/com/itmill/toolkit/ui/TwinColSelect.java [new file with mode: 0644]

index 2be55b48346f297077f4a7e0c214eb7a7dd99f20..801350c9114de84b9009eb941722ea238ba28aee 100644 (file)
@@ -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 (file)
index 0000000..d473fd0
--- /dev/null
@@ -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 (file)
index 0000000..6bfef06
--- /dev/null
@@ -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 (file)
index 0000000..5aa16fc
--- /dev/null
@@ -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 (file)
index 0000000..e16042a
--- /dev/null
@@ -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 (file)
index 0000000..ec12993
--- /dev/null
@@ -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);
+       }
+
+}