]> source.dussan.org Git - vaadin-framework.git/commitdiff
ApplicationConnection publishes javascript function itmill.forceSync().
authorMarc Englund <marc.englund@itmill.com>
Fri, 18 Jan 2008 08:57:52 +0000 (08:57 +0000)
committerMarc Englund <marc.englund@itmill.com>
Fri, 18 Jan 2008 08:57:52 +0000 (08:57 +0000)
FeatureBrowser contains example.

svn changeset:3577/svn branch:trunk

src/com/itmill/toolkit/demo/featurebrowser/FeatureBrowser.java
src/com/itmill/toolkit/demo/featurebrowser/JavaScriptAPIExample.java [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java

index 983aa9dd23de9a7ae7b2d22eca3dbb7bae4987e4..c1989d597a26c0a4b52bc1b9cad45cc146832513 100644 (file)
@@ -99,6 +99,10 @@ public class FeatureBrowser extends com.itmill.toolkit.Application implements
                     EmbeddedBrowserExample.class },
             // Windowing
             { "Misc", "Windowing", "About windowing", WindowingExample.class },
+            // JavaScript API
+            { "Misc", "JavaScript API",
+                    "JavaScript to IT Mill Toolkit communication",
+                    JavaScriptAPIExample.class },
     // END
     };
 
diff --git a/src/com/itmill/toolkit/demo/featurebrowser/JavaScriptAPIExample.java b/src/com/itmill/toolkit/demo/featurebrowser/JavaScriptAPIExample.java
new file mode 100644 (file)
index 0000000..032d9aa
--- /dev/null
@@ -0,0 +1,94 @@
+/* \r
+@ITMillApache2LicenseForJavaFiles@\r
+ */\r
+\r
+package com.itmill.toolkit.demo.featurebrowser;\r
+\r
+import java.util.Date;\r
+\r
+import com.itmill.toolkit.terminal.PaintException;\r
+import com.itmill.toolkit.terminal.PaintTarget;\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.RichTextArea;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+\r
+/**\r
+ * An example using a RichTextArea to edit a Label in XHTML-mode.\r
+ * \r
+ */\r
+public class JavaScriptAPIExample extends CustomComponent {\r
+\r
+    public static final String txt = "<A href=\"javascript:itmill.forceSync();\">javascript:itmill.forceSync();</A>";\r
+\r
+    private final OrderedLayout main;\r
+    private final Label l;\r
+    private final RichTextArea editor = new RichTextArea();\r
+\r
+    public JavaScriptAPIExample() {\r
+        // main layout\r
+        main = new OrderedLayout();\r
+        main.setMargin(true);\r
+        setCompositionRoot(main);\r
+        // Add the label\r
+        l = new Label(txt);\r
+        l.setContentMode(Label.CONTENT_XHTML);\r
+        main.addComponent(l);\r
+        // Edit button with inline click-listener\r
+        Button b = new Button("Edit", new Button.ClickListener() {\r
+            public void buttonClick(ClickEvent event) {\r
+                // swap Label <-> RichTextArea\r
+                if (main.getComponentIterator().next() == l) {\r
+                    editor.setValue(l.getValue());\r
+                    main.replaceComponent(l, editor);\r
+                    event.getButton().setCaption("Save");\r
+                } else {\r
+                    l.setValue(editor.getValue());\r
+                    main.replaceComponent(editor, l);\r
+                    event.getButton().setCaption("Edit");\r
+                }\r
+            }\r
+        });\r
+        main.addComponent(b);\r
+        main.setComponentAlignment(b, OrderedLayout.ALIGNMENT_RIGHT,\r
+                OrderedLayout.ALIGNMENT_VERTICAL_CENTER);\r
+\r
+        // \r
+        Label l = new Label(\r
+                "This label will update it's value AFTER it's rendered to the client. "\r
+                        + "The client will be synchronized on reload, when you click a button, "\r
+                        + "or when itmill.forceSync() is called.") {\r
+\r
+            public void paintContent(PaintTarget target) throws PaintException {\r
+\r
+                super.paintContent(target);\r
+                Delay d = new Delay(this);\r
+                d.start();\r
+            }\r
+\r
+        };\r
+        main.addComponent(l);\r
+\r
+    }\r
+\r
+    private class Delay extends Thread {\r
+        Label label;\r
+\r
+        public Delay(Label l) {\r
+            label = l;\r
+        }\r
+\r
+        public void run() {\r
+            try {\r
+                Thread.sleep(500);\r
+                label.setValue(new Date().toString());\r
+                join();\r
+            } catch (Exception e) {\r
+                e.printStackTrace();\r
+            }\r
+        }\r
+\r
+    }\r
+}\r
index d6a7c3a36ff1ec8282224b4e67a99b725a985960..1c016d560a53dceee36fa7dd11ab7c25d7bc75fc 100755 (executable)
@@ -89,6 +89,8 @@ public class ApplicationConnection {
             initializeTestingTools(getTestServerUri(), this);
         }
 
+        initializeClientHooks();
+
         makeUidlRequest("repaintAll=1");
         applicationRunning = true;
 
@@ -136,6 +138,21 @@ public class ApplicationConnection {
          $wnd.itmill.startTT(testServerUri, client);
     }-*/;
 
+    /**
+     * Publishes functions for use from javascript.
+     * <ul>
+     * <li><code>itmill.forceSync()</code> sends pending variable changes, in
+     * effect synchronizing the server and client state.</li>
+     * </ul>
+     */
+    private native void initializeClientHooks()
+    /*-{
+        var app = this;
+        $wnd.itmill.forceSync = function() {
+            app.@com.itmill.toolkit.terminal.gwt.client.ApplicationConnection::sendPendingVariableChanges()();
+        }
+    }-*/;
+
     public static Console getConsole() {
         return console;
     }