From 255e2c1a5c8d32776434b6400fd83c788423c877 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Thu, 13 Nov 2008 14:41:46 +0000 Subject: [PATCH] replaceChildComponent fixed for IFormLayout,IGridLayout,IPopupView,ISplitPanel,IView (#2204). Testcase for #2204. svn changeset:5892/svn branch:trunk --- .../terminal/gwt/client/ui/IFormLayout.java | 1 - .../terminal/gwt/client/ui/IGridLayout.java | 1 - .../terminal/gwt/client/ui/IPopupView.java | 4 - .../terminal/gwt/client/ui/ISplitPanel.java | 6 +- .../toolkit/terminal/gwt/client/ui/IView.java | 8 +- .../toolkit/tests/tickets/Ticket2204.java | 136 ++++++++++++++++++ 6 files changed, 148 insertions(+), 8 deletions(-) create mode 100644 src/com/itmill/toolkit/tests/tickets/Ticket2204.java diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IFormLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IFormLayout.java index 6a7f32f777..9504edcae7 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IFormLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IFormLayout.java @@ -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; } } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java index 1878ccbb69..fa332ed04a 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java @@ -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 diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IPopupView.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IPopupView.java index 640d4dafc6..04e90dfaa2 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IPopupView.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IPopupView.java @@ -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); diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ISplitPanel.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ISplitPanel.java index 767db1b8f4..c59218ad30 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ISplitPanel.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ISplitPanel.java @@ -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 child) { diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IView.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IView.java index 9ceeb78e19..d5cffde209 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IView.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IView.java @@ -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 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 index 0000000000..c19070d332 --- /dev/null +++ b/src/com/itmill/toolkit/tests/tickets/Ticket2204.java @@ -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 textAreas = new ArrayList(); + private TabSheet ts; + private Map containerToComponent = new HashMap(); + private RichTextArea rta; + private List> classes = new ArrayList>(); + + 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; + } +} -- 2.39.5