From d85c15fe4a8bb39965082226fb89bd21dcea07f4 Mon Sep 17 00:00:00 2001 From: Joonas Lehtinen Date: Thu, 14 Jun 2007 12:16:12 +0000 Subject: [PATCH] svn changeset:1717/svn branch:trunk --- .../toolkit/terminal/gwt/client/Client.java | 8 +++ .../toolkit/terminal/gwt/client/Layout.java | 5 +- .../gwt/client/ui/TkHorizontalLayout.java | 40 +++++++++++--- .../terminal/gwt/client/ui/TkLabel.java | 52 +++++-------------- .../gwt/client/ui/TkVerticalLayout.java | 38 +++++++++++--- 5 files changed, 87 insertions(+), 56 deletions(-) diff --git a/src/com/itmill/toolkit/terminal/gwt/client/Client.java b/src/com/itmill/toolkit/terminal/gwt/client/Client.java index b03ac55cf1..17e7ff622f 100755 --- a/src/com/itmill/toolkit/terminal/gwt/client/Client.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/Client.java @@ -17,6 +17,7 @@ import com.google.gwt.json.client.JSONValue; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; import com.itmill.toolkit.terminal.gwt.client.ui.TkButton; +import com.itmill.toolkit.terminal.gwt.client.ui.TkLabel; /** * Entry point classes define onModuleLoad(). @@ -158,6 +159,7 @@ public class Client implements EntryPoint { return w; } + private void addVariableToQueue(String paintableId, String variableName, String encodedValue, boolean immediate) { String id = paintableId + "_" + variableName; @@ -243,4 +245,10 @@ public class Client implements EntryPoint { return true; } + public void delegateCaptionToParent(Widget component, UIDL uidl) { + Layout parent = getParentLayout(component); + if (parent != null) parent.updateCaption(component, uidl); + } + + } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/Layout.java b/src/com/itmill/toolkit/terminal/gwt/client/Layout.java index f3053e29ad..7a897c0f99 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/Layout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/Layout.java @@ -34,14 +34,13 @@ public interface Layout extends Paintable { * Each component is responsible for maintaining its caption, description * and error message. In most cases components doesn't want to do that and * those elements reside outside of the component. Because of this layouts - * should provide service for it's childen to show those elements for them. + * msut provide service for it's childen to show those elements for them. *

* * @param component * Child component that requests the service. * @param uidl * UIDL of the child component. - * @return true iff this layout updated caption succesfully. */ - boolean updateCaption(Widget component, UIDL uidl); + void updateCaption(Widget component, UIDL uidl); } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkHorizontalLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkHorizontalLayout.java index 47ee39fad7..61aa86f5d8 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkHorizontalLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkHorizontalLayout.java @@ -1,9 +1,11 @@ package com.itmill.toolkit.terminal.gwt.client.ui; +import java.util.HashMap; import java.util.Iterator; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Widget; +import com.itmill.toolkit.terminal.gwt.client.CaptionWrapper; import com.itmill.toolkit.terminal.gwt.client.Client; import com.itmill.toolkit.terminal.gwt.client.Layout; import com.itmill.toolkit.terminal.gwt.client.Paintable; @@ -11,6 +13,8 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL; public class TkHorizontalLayout extends HorizontalPanel implements Paintable, Layout { + private HashMap componentToWrapper = new HashMap(); + public void updateFromUIDL(UIDL uidl, Client client) { // Ensure correct implementation @@ -27,7 +31,13 @@ public class TkHorizontalLayout extends HorizontalPanel implements Paintable, La } } + public void replaceChildComponent(Widget from, Widget to) { + CaptionWrapper wrapper = (CaptionWrapper) componentToWrapper.get(from); + if (wrapper != null) { + componentToWrapper.remove(from); + from = wrapper; + } int index = getWidgetIndex(from); if (index >= 0) { remove(index); @@ -35,16 +45,30 @@ public class TkHorizontalLayout extends HorizontalPanel implements Paintable, La } } - public boolean hasChildComponent(Widget paintable) { - return getWidgetIndex(paintable) >= 0; + public boolean hasChildComponent(Widget component) { + return getWidgetIndex(component) >= 0 || componentToWrapper.get(component) != null; } - public boolean updateCaption(Widget component, UIDL uidl) { - - if (!hasChildComponent(component) || uidl == null) return false; + public void updateCaption(Widget component, UIDL uidl) { - - return false; + CaptionWrapper wrapper = (CaptionWrapper) componentToWrapper.get(component); + if (CaptionWrapper.isNeeded(uidl)) { + if (wrapper == null) { + wrapper = new CaptionWrapper(component); + componentToWrapper.put(component, wrapper); + } + wrapper.updateCaption(uidl); + } else { + if (wrapper != null) { + int index = getWidgetIndex(wrapper); + if (index >= 0) { + remove(index); + insert(wrapper.getWidget(), index); + } + componentToWrapper.remove(component); + } + } } - + + } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkLabel.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkLabel.java index 80916d432b..596a53b733 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkLabel.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkLabel.java @@ -1,50 +1,26 @@ package com.itmill.toolkit.terminal.gwt.client.ui; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Label; import com.itmill.toolkit.terminal.gwt.client.Client; import com.itmill.toolkit.terminal.gwt.client.Paintable; import com.itmill.toolkit.terminal.gwt.client.UIDL; -public class TkLabel extends Composite implements Paintable{ - - com.google.gwt.user.client.ui.Label caption = new com.google.gwt.user.client.ui.Label();; - HTML content = new HTML(); - - public TkLabel() { - VerticalPanel panel = new VerticalPanel(); - panel.add(caption); - panel.add(content); - initWidget(panel); - setStyleName("itmtk-label"); - caption.setStyleName("itmtk-label-caption"); - content.setStyleName("itmtk-label-content"); - } - +public class TkLabel extends Label implements Paintable { + public void updateFromUIDL(UIDL uidl, Client client) { - try{ - UIDL child = uidl.getChildUIDL(0).getChildUIDL(0); - if(child.hasAttribute("xmlns") && - child.getStringAttribute("xmlns"). - equals("http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd")) { - setContent(child.getChildString(0)); - } else { - setContent("Terminals Label compoent can't handle this content type."); - } + + if (client.replaceComponentWithCorrectImplementation(this, uidl)) + return; + client.delegateCaptionToParent(this, uidl); + + try { + setText(uidl.getChildString(0)); } catch (Exception e) { - setContent(uidl.getChildString(0)); + setText(""); + } - if(uidl.hasAttribute("caption")) - setCaption(uidl.getStringAttribute("caption")); - else - caption.setVisible(false); } - public void setContent(String c) { - content.setHTML(c); - } - public void setCaption(String c) { - caption.setText(c); - } + + } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkVerticalLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkVerticalLayout.java index e61f1b0fa1..086ea8c9ea 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkVerticalLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkVerticalLayout.java @@ -1,9 +1,11 @@ package com.itmill.toolkit.terminal.gwt.client.ui; +import java.util.HashMap; import java.util.Iterator; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; +import com.itmill.toolkit.terminal.gwt.client.CaptionWrapper; import com.itmill.toolkit.terminal.gwt.client.Client; import com.itmill.toolkit.terminal.gwt.client.Layout; import com.itmill.toolkit.terminal.gwt.client.Paintable; @@ -11,6 +13,8 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL; public class TkVerticalLayout extends VerticalPanel implements Paintable, Layout { + private HashMap componentToWrapper = new HashMap(); + public void updateFromUIDL(UIDL uidl, Client client) { // Ensure correct implementation @@ -28,6 +32,11 @@ public class TkVerticalLayout extends VerticalPanel implements Paintable, Layout } public void replaceChildComponent(Widget from, Widget to) { + CaptionWrapper wrapper = (CaptionWrapper) componentToWrapper.get(from); + if (wrapper != null) { + componentToWrapper.remove(from); + from = wrapper; + } int index = getWidgetIndex(from); if (index >= 0) { remove(index); @@ -35,16 +44,31 @@ public class TkVerticalLayout extends VerticalPanel implements Paintable, Layout } } - public boolean hasChildComponent(Widget paintable) { - return getWidgetIndex(paintable) >= 0; + public boolean hasChildComponent(Widget component) { + return getWidgetIndex(component) >= 0 || componentToWrapper.get(component) != null; } - public boolean updateCaption(Widget component, UIDL uidl) { - - if (!hasChildComponent(component) || uidl == null) return false; + public void updateCaption(Widget component, UIDL uidl) { - - return false; + CaptionWrapper wrapper = (CaptionWrapper) componentToWrapper.get(component); + if (CaptionWrapper.isNeeded(uidl)) { + if (wrapper == null) { + int index = getWidgetIndex(component); + wrapper = new CaptionWrapper(component); + insert(wrapper.getWidget(), index); + componentToWrapper.put(component, wrapper); + } + wrapper.updateCaption(uidl); + } else { + if (wrapper != null) { + int index = getWidgetIndex(wrapper); + remove(index); + insert(wrapper.getWidget(), index); + componentToWrapper.remove(component); + } + } } + + } -- 2.39.5