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 <code>onModuleLoad()</code>.
return w;
}
+
private void addVariableToQueue(String paintableId, String variableName,
String encodedValue, boolean immediate) {
String id = paintableId + "_" + variableName;
return true;
}
+ public void delegateCaptionToParent(Widget component, UIDL uidl) {
+ Layout parent = getParentLayout(component);
+ if (parent != null) parent.updateCaption(component, uidl);
+ }
+
+
}
* 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.
* </p>
*
* @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);
}
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;
public class TkHorizontalLayout extends HorizontalPanel implements Paintable, Layout {
+ private HashMap componentToWrapper = new HashMap();
+
public void updateFromUIDL(UIDL uidl, Client client) {
// Ensure correct implementation
}
}
+
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);
}
}
- 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);
+ }
+ }
}
-
+
+
}
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);
- }
+
+
}
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;
public class TkVerticalLayout extends VerticalPanel implements Paintable, Layout {
+ private HashMap componentToWrapper = new HashMap();
+
public void updateFromUIDL(UIDL uidl, Client client) {
// Ensure correct implementation
}
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);
}
}
- 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);
+ }
+ }
}
+
+
}