--- /dev/null
+/**\r
+ * \r
+ */\r
+package com.itmill.toolkit.tests;\r
+\r
+import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.CustomComponent;\r
+import com.itmill.toolkit.ui.Label;\r
+import com.itmill.toolkit.ui.OrderedLayout;\r
+import com.itmill.toolkit.ui.Panel;\r
+import com.itmill.toolkit.ui.Window;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+\r
+/**\r
+ * @author marc\r
+ * \r
+ */\r
+public class TestComponentAddAndRecursion extends CustomComponent {\r
+ Panel p;\r
+ Panel p2;\r
+ Label l;\r
+ Label l2;\r
+ Panel p3;\r
+\r
+ public TestComponentAddAndRecursion() {\r
+\r
+ OrderedLayout main = new OrderedLayout();\r
+ setCompositionRoot(main);\r
+\r
+ l = new Label("A");\r
+ l2 = new Label("B");\r
+ p = new Panel("p");\r
+ p.addComponent(l);\r
+ p.addComponent(l2);\r
+ main.addComponent(p);\r
+ p2 = new Panel("p2");\r
+ p2.addComponent(l);\r
+ main.addComponent(p2);\r
+ p3 = new Panel("p3");\r
+ p2.addComponent(p3);\r
+\r
+ Button b = new Button("move B", new Button.ClickListener() {\r
+\r
+ public void buttonClick(ClickEvent event) {\r
+ p2.addComponent(l2);\r
+ }\r
+\r
+ });\r
+ main.addComponent(b);\r
+ b = new Button("move p", new Button.ClickListener() {\r
+\r
+ public void buttonClick(ClickEvent event) {\r
+ p3.addComponent(p);\r
+ }\r
+\r
+ });\r
+ main.addComponent(b);\r
+ b = new Button("add to both", new Button.ClickListener() {\r
+\r
+ public void buttonClick(ClickEvent event) {\r
+ Label l = new Label("both");\r
+ p.addComponent(l);\r
+ p2.addComponent(l);\r
+ }\r
+\r
+ });\r
+ main.addComponent(b);\r
+ b = new Button("recurse", new Button.ClickListener() {\r
+\r
+ public void buttonClick(ClickEvent event) {\r
+ try {\r
+ p3.addComponent(p2);\r
+ getWindow().showNotification("ERROR",\r
+ "This should have failed",\r
+ Window.Notification.TYPE_ERROR_MESSAGE);\r
+ } catch (Exception e) {\r
+ getWindow().showNotification("OK", "threw, as expected",\r
+ Window.Notification.TYPE_ERROR_MESSAGE);\r
+ }\r
+ }\r
+\r
+ });\r
+ main.addComponent(b);\r
+ b = new Button("recurse2", new Button.ClickListener() {\r
+\r
+ public void buttonClick(ClickEvent event) {\r
+ Panel p = new Panel("dynamic");\r
+ p.addComponent(p2);\r
+ try {\r
+ p3.addComponent(p);\r
+ getWindow().showNotification("ERROR",\r
+ "This should have failed",\r
+ Window.Notification.TYPE_ERROR_MESSAGE);\r
+ } catch (Exception e) {\r
+ getWindow().showNotification("OK", "threw, as expected",\r
+ Window.Notification.TYPE_ERROR_MESSAGE);\r
+ }\r
+ }\r
+\r
+ });\r
+ main.addComponent(b);\r
+ /*\r
+ * And that's it! The framework will display the main window and its\r
+ * contents when the application is accessed with the terminal.\r
+ */\r
+ }\r
+}\r