]> source.dussan.org Git - vaadin-framework.git/commitdiff
merged [9380] from 6.1
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 26 Oct 2009 16:21:01 +0000 (16:21 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 26 Oct 2009 16:21:01 +0000 (16:21 +0000)
svn changeset:9381/svn branch:6.2

src/com/vaadin/terminal/gwt/client/ui/VPopupView.java
src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextArea.java
src/com/vaadin/tests/components/popupview/PopupViewWithRTE.java [new file with mode: 0644]

index c0fe8fd8d1cab53d2314424122f89fef4b09a62a..8e8a640e47fd0fd2e2053cb51ea44f0272076432 100644 (file)
@@ -14,6 +14,7 @@ import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.Focusable;
 import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HasWidgets;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.PopupPanel;
 import com.google.gwt.user.client.ui.RootPanel;
@@ -28,6 +29,7 @@ import com.vaadin.terminal.gwt.client.VCaption;
 import com.vaadin.terminal.gwt.client.VCaptionWrapper;
 import com.vaadin.terminal.gwt.client.VTooltip;
 import com.vaadin.terminal.gwt.client.RenderInformation.Size;
+import com.vaadin.terminal.gwt.client.ui.richtextarea.VRichTextArea;
 
 public class VPopupView extends HTML implements Container, Iterable<Widget> {
 
@@ -274,6 +276,9 @@ public class VPopupView extends HTML implements Container, Iterable<Widget> {
             // Notify children with focus
             if ((popupComponentWidget instanceof Focusable)) {
                 ((Focusable) popupComponentWidget).setFocus(false);
+            } else {
+
+                checkForRTE(popupComponentWidget);
             }
 
             // Notify children that have used the keyboard
@@ -286,6 +291,19 @@ public class VPopupView extends HTML implements Container, Iterable<Widget> {
             activeChildren.clear();
         }
 
+        private void checkForRTE(Widget popupComponentWidget2) {
+            if (popupComponentWidget2 instanceof VRichTextArea) {
+                ((VRichTextArea) popupComponentWidget2)
+                        .synchronizeContentToServer();
+            } else if (popupComponentWidget2 instanceof HasWidgets) {
+                HasWidgets hw = (HasWidgets) popupComponentWidget2;
+                Iterator<Widget> iterator = hw.iterator();
+                while (iterator.hasNext()) {
+                    checkForRTE(iterator.next());
+                }
+            }
+        }
+
         @Override
         public boolean remove(Widget w) {
 
index c4f27dd974013814bcc4c3f12662e7639dbe089b..9a825347ac5a4752aa404653e0feaa90d6f6184e 100644 (file)
@@ -28,9 +28,9 @@ import com.vaadin.terminal.gwt.client.ui.Field;
 
 /**
  * This class implements a basic client side rich text editor component.
- *
+ * 
  * @author IT Mill Ltd.
- *
+ * 
  */
 public class VRichTextArea extends Composite implements Paintable, Field,
         ChangeHandler, BlurHandler, KeyPressHandler {
@@ -132,15 +132,21 @@ public class VRichTextArea extends Composite implements Paintable, Field,
 
     // TODO is this really used, or does everything go via onBlur() only?
     public void onChange(ChangeEvent event) {
+        synchronizeContentToServer();
+    }
+
+    /**
+     * Method is public to let popupview force synchronization on close.
+     */
+    public void synchronizeContentToServer() {
+        final String html = rta.getHTML();
         if (client != null && id != null) {
-            client.updateVariable(id, "text", rta.getText(), immediate);
+            client.updateVariable(id, "text", html, immediate);
         }
     }
 
     public void onBlur(BlurEvent event) {
-        final String html = rta.getHTML();
-        client.updateVariable(id, "text", html, immediate);
-
+        synchronizeContentToServer();
     }
 
     /**
diff --git a/src/com/vaadin/tests/components/popupview/PopupViewWithRTE.java b/src/com/vaadin/tests/components/popupview/PopupViewWithRTE.java
new file mode 100644 (file)
index 0000000..06319a5
--- /dev/null
@@ -0,0 +1,50 @@
+package com.vaadin.tests.components.popupview;\r
+\r
+import com.vaadin.tests.components.TestBase;\r
+import com.vaadin.ui.Component;\r
+import com.vaadin.ui.PopupView;\r
+import com.vaadin.ui.RichTextArea;\r
+import com.vaadin.ui.VerticalLayout;\r
+import com.vaadin.ui.PopupView.Content;\r
+\r
+public class PopupViewWithRTE extends TestBase {\r
+\r
+    @Override\r
+    protected String getDescription() {\r
+        return "Rich text editor should work properly in popupview. Try to edit text below.";\r
+    }\r
+\r
+    @Override\r
+    protected Integer getTicketNumber() {\r
+        return 3043;\r
+    }\r
+\r
+    @Override\r
+    protected void setup() {\r
+        PopupView pv = new PopupView(new Content() {\r
+\r
+            RichTextArea rte = new RichTextArea();\r
+\r
+            VerticalLayout vl = new VerticalLayout();\r
+\r
+            public String getMinimizedValueAsHTML() {\r
+                Object value = rte.getValue();\r
+                if (value == null || "".equals(value)) {\r
+                    value = "Initial <b>content</b> for <h3>rte</h3>.";\r
+                    rte.setValue(value);\r
+                    rte.setHeight("150px");\r
+                    rte.setWidth("100%");\r
+                    vl.addComponent(rte);\r
+                    vl.setWidth("600px");\r
+                }\r
+                return value.toString();\r
+            }\r
+\r
+            public Component getPopupComponent() {\r
+                return vl;\r
+            }\r
+        });\r
+        getLayout().addComponent(pv);\r
+    }\r
+\r
+}\r