aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2007-10-11 07:43:18 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2007-10-11 07:43:18 +0000
commit47642ef4c920842af9c88b9fa7ec87ea5da6a9f9 (patch)
treec8f4d74e5d99f28d6f37f4954a4b0bb37e888f1a /src
parentbb9f23d205a2092ffb1199d52bc8cd57c95c2eb7 (diff)
downloadvaadin-framework-47642ef4c920842af9c88b9fa7ec87ea5da6a9f9.tar.gz
vaadin-framework-47642ef4c920842af9c88b9fa7ec87ea5da6a9f9.zip
Added some server side components (which configure their superclass) and test.
svn changeset:2487/svn branch:trunk
Diffstat (limited to 'src')
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetSet.java12
-rw-r--r--src/com/itmill/toolkit/tests/TestForPreconfiguredComponents.java194
-rw-r--r--src/com/itmill/toolkit/ui/CheckBox.java8
-rw-r--r--src/com/itmill/toolkit/ui/NativeSelect.java22
-rw-r--r--src/com/itmill/toolkit/ui/OptionGroup.java19
-rw-r--r--src/com/itmill/toolkit/ui/TwinColSelect.java57
6 files changed, 308 insertions, 4 deletions
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);
+ }
+
+}