if (selected) {
item.open();
item.setContent(tabUidl.getChildUIDL(0));
+ } else if (tabUidl.getChildCount() > 0) {
+ // updating a drawn child on hidden tab
+ Paintable paintable = client.getPaintable(tabUidl.getChildUIDL(0));
+ paintable.updateFromUIDL(tabUidl.getChildUIDL(0), client);
}
}
public void setContent(UIDL contentUidl) {
final Paintable newPntbl = client.getPaintable(contentUidl);
+ // due hack #1 in ITabsheetBase
+ ((Widget) newPntbl).setVisible(true);
if (getPaintable() == null) {
add((Widget) newPntbl, content);
} else if (getPaintable() != newPntbl) {
if (selected) {
renderContent(tabUidl.getChildUIDL(0));
tb.selectTab(index);
+ } else if (tabUidl.getChildCount() > 0) {
+ // updating a drawn child on hidden tab
+ Paintable paintable = client.getPaintable(tabUidl.getChildUIDL(0));
+ paintable.updateFromUIDL(tabUidl.getChildUIDL(0), client);
}
// Add place-holder content
tp.add(new Label(""));
import java.util.Set;
import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.Widget;
import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
import com.itmill.toolkit.terminal.gwt.client.Paintable;
import com.itmill.toolkit.terminal.gwt.client.UIDL;
final boolean selected = tab.getBooleanAttribute("selected");
if (selected) {
selectTab(index, tab.getChildUIDL(0));
+ } else if (tab.getChildCount() > 0) {
+ // updating a drawn child on hidden tab
+ Paintable paintable = client.getPaintable(tab
+ .getChildUIDL(0));
+ // TODO widget may flash on screen
+ paintable.updateFromUIDL(tab.getChildUIDL(0), client);
+ // Hack #1 in ITabsheetBase: due ITabsheets content has no
+ // wrappers for each tab, we need to hide the actual widgets
+ ((Widget) paintable).setVisible(false);
}
index++;
}
*/
private boolean tabsHidden;
+ private LinkedList paintedTabs = new LinkedList();
+
/**
* Constructs a new Tabsheet. Tabsheet is immediate by default.
*/
if (c.equals(selected)) {
target.addAttribute("selected", true);
c.paint(target);
+ paintedTabs.add(c);
+ } else if (paintedTabs.contains(c)) {
+ c.paint(target);
} else {
- /*
- * Component is kind of painted (caption, enabled, icon ...)
- * without paint methdod, so we must manually clear unpainted
- * flag.
- */
c.requestRepaintRequests();
}
target.endTag("tab");
requestRepaint();
}
+ public void detach() {
+ super.detach();
+ paintedTabs.clear();
+ }
+
}