]> source.dussan.org Git - vaadin-framework.git/commitdiff
replaceChildComponent fixed for IFormLayout,IGridLayout,IPopupView,ISplitPanel,IView...
authorArtur Signell <artur.signell@itmill.com>
Thu, 13 Nov 2008 14:41:46 +0000 (14:41 +0000)
committerArtur Signell <artur.signell@itmill.com>
Thu, 13 Nov 2008 14:41:46 +0000 (14:41 +0000)
Testcase for #2204.

svn changeset:5892/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/IFormLayout.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IPopupView.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ISplitPanel.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IView.java
src/com/itmill/toolkit/tests/tickets/Ticket2204.java [new file with mode: 0644]

index 6a7f32f777210e3a30718e12dcc4b87a6e441065..9504edcae7e959629e1fbb86872d0b2dd2b099e0 100644 (file)
@@ -127,7 +127,6 @@ public class IFormLayout extends FlexTable implements Container {
                         client);
                 setWidget(i, 0, newCap);
                 setWidget(i, 1, newComponent);
-                client.unregisterPaintable((Paintable) oldComponent);
                 break;
             }
         }
index 1878ccbb697cd3d94726b96868f9184995e59297..fa332ed04a5792f14f206d27ee82d8e656bb1fbd 100644 (file)
@@ -538,7 +538,6 @@ public class IGridLayout extends SimplePanel implements Paintable, Container {
         }
 
         componentContainer.setWidget(newComponent);
-        client.unregisterPaintable((Paintable) oldComponent);
         widgetToComponentContainer.put(newComponent, componentContainer);
 
         paintableToCell.put((Paintable) newComponent, paintableToCell
index 640d4dafc65c9a9d33ee5f526cf096fd2cca19b9..04e90dfaa25c5dad775a74de0214aa64484e75aa 100644 (file)
@@ -273,10 +273,6 @@ public class IPopupView extends HTML implements Paintable {
         public void replaceChildComponent(Widget oldComponent,
                 Widget newComponent) {
 
-            if (oldComponent != null) {
-                client.unregisterPaintable((Paintable) oldComponent);
-            }
-
             popupComponentWidget = newComponent;
 
             setWidget(popupComponentWidget);
index 767db1b8f4279189d763977bad88b5dd524e1170..c59218ad301c651723d1b70701707d9842836144 100644 (file)
@@ -480,7 +480,11 @@ public class ISplitPanel extends ComplexPanel implements Container,
     }
 
     public void replaceChildComponent(Widget oldComponent, Widget newComponent) {
-        // TODO Auto-generated method stub
+        if (oldComponent == firstChild) {
+            setFirstWidget(newComponent);
+        } else if (oldComponent == secondChild) {
+            setSecondWidget(newComponent);
+        }
     }
 
     public boolean requestLayout(Set<Paintable> child) {
index 9ceeb78e1940eb347162ad49f97a671d0b16137f..d5cffde209b719dda4b842ecf63b7dc55916499e 100644 (file)
@@ -473,7 +473,13 @@ public class IView extends SimplePanel implements Container,
     }
 
     public void replaceChildComponent(Widget oldComponent, Widget newComponent) {
-        // TODO Auto-generated method stub
+        // TODO This is untested as no layouts require this
+        if (oldComponent != layout) {
+            return;
+        }
+
+        setWidget(newComponent);
+        layout = (Paintable) newComponent;
     }
 
     public boolean requestLayout(Set<Paintable> child) {
diff --git a/src/com/itmill/toolkit/tests/tickets/Ticket2204.java b/src/com/itmill/toolkit/tests/tickets/Ticket2204.java
new file mode 100644 (file)
index 0000000..c19070d
--- /dev/null
@@ -0,0 +1,136 @@
+package com.itmill.toolkit.tests.tickets;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.itmill.toolkit.Application;
+import com.itmill.toolkit.terminal.Sizeable;
+import com.itmill.toolkit.ui.Accordion;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.Component;
+import com.itmill.toolkit.ui.ComponentContainer;
+import com.itmill.toolkit.ui.CoordinateLayout;
+import com.itmill.toolkit.ui.GridLayout;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.Layout;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.RichTextArea;
+import com.itmill.toolkit.ui.SplitPanel;
+import com.itmill.toolkit.ui.TabSheet;
+import com.itmill.toolkit.ui.Window;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Button.ClickListener;
+
+public class Ticket2204 extends Application {
+
+    private List<RichTextArea> textAreas = new ArrayList<RichTextArea>();
+    private TabSheet ts;
+    private Map<ComponentContainer, Component> containerToComponent = new HashMap<ComponentContainer, Component>();
+    private RichTextArea rta;
+    private List<Class<? extends ComponentContainer>> classes = new ArrayList<Class<? extends ComponentContainer>>();
+
+    public void init() {
+        classes.add(OrderedLayout.class);
+        classes.add(GridLayout.class);
+        classes.add(Accordion.class);
+        classes.add(TabSheet.class);
+        classes.add(Panel.class);
+        classes.add(CoordinateLayout.class);
+        classes.add(SplitPanel.class);
+
+        Window w = new Window(getClass().getSimpleName());
+        setMainWindow(w);
+        // setTheme("tests-tickets");
+        createUI((OrderedLayout) w.getLayout());
+    }
+
+    private void createUI(OrderedLayout layout) {
+        ts = new TabSheet();
+        layout.addComponent(ts);
+
+        for (Class c : classes) {
+            ts.addTab(createComponent(c), c.getSimpleName(), null);
+        }
+        rta = new RichTextArea();
+        rta.setVisible(false);
+        ts.addTab(rta, "Hidden rta", null);
+
+        Button b = new Button("Show area", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                showHide();
+            }
+        });
+
+        layout.addComponent(b);
+
+        b = new Button("Show tab", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                showTab();
+            }
+        });
+
+        layout.addComponent(b);
+
+    }
+
+    protected void showTab() {
+        rta.setVisible(!rta.isVisible());
+
+    }
+
+    protected void showHide() {
+        Component c = containerToComponent.get(ts.getSelectedTab());
+        c.setVisible(!c.isVisible());
+    }
+
+    private Component createComponent(Class c) {
+        RichTextArea textArea = new RichTextArea();
+        textArea.setVisible(false);
+        textArea.setCaption("This is the textArea");
+        textArea.setWidth("200px");
+        textArea.setHeight("100px");
+        textAreas.add(textArea);
+        ComponentContainer cc = null;
+
+        try {
+            cc = (ComponentContainer) c.newInstance();
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            return null;
+        }
+        // if (c == OrderedLayout.class) {
+        // cc = new OrderedLayout();
+        // } else
+        if (c == Accordion.class) {
+            // Label l = new Label("Filler");
+            // l.setCaption("Filler label");
+            // cc.addComponent(l);
+        }
+        if (c == CoordinateLayout.class) {
+            ((Sizeable) cc).setHeight("100px");
+        }
+
+        containerToComponent.put(cc, textArea);
+        cc.addComponent(textArea);
+        if (c == SplitPanel.class) {
+            ((Sizeable) cc).setWidth("300px");
+            ((Sizeable) cc).setHeight("300px");
+            cc.addComponent(new Label("Label"));
+        }
+        if (c == Panel.class) {
+            Layout layout = ((Panel) cc).getLayout();
+            containerToComponent.put(cc, layout);
+            layout.setVisible(false);
+            textArea.setVisible(true);
+            return cc;
+        }
+
+        return cc;
+    }
+}