Revision: 9804
Author: jlaba...@google.com
Date: Thu Mar 3 09:02:50 2011
Log: Fixing a bug in TabLayoutPanel where calling setTabText() removes the
tab from the panel. r9689 fixed some edge cases in TabLayoutPanel such as
calling tabContents.removeFromParent(), but it introduced this bug.
Issue: 6034
Review at http://gwt-code-reviews.appspot.com/1368806
Review by: sbruba...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=9804
Modified:
/trunk/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
/trunk/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java Tue
Feb 8 07:19:49 2011
+++ /trunk/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java Thu
Mar 3 09:02:50 2011
@@ -100,6 +100,7 @@
private class Tab extends SimplePanel {
private Element inner;
+ private boolean replacingWidget;
public Tab(Widget child) {
super(Document.get().createDivElement());
@@ -123,8 +124,11 @@
* ensure consistency.
*/
int index = tabs.indexOf(this);
- if (index < 0) {
- // This tab is no longer in the panel, so just remove the widget.
+ if (replacingWidget || index < 0) {
+ /*
+ * The tab contents are being replaced, or this tab is no longer
in the
+ * panel, so just remove the widget.
+ */
return super.remove(w);
} else {
// Delegate to the TabLayoutPanel.
@@ -139,6 +143,13 @@
removeStyleDependentName("selected");
}
}
+
+ @Override
+ public void setWidget(Widget w) {
+ replacingWidget = true;
+ super.setWidget(w);
+ replacingWidget = false;
+ }
@Override
protected com.google.gwt.user.client.Element getContainerElement() {
=======================================
--- /trunk/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
Tue Feb 8 07:19:49 2011
+++ /trunk/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
Thu Mar 3 09:02:50 2011
@@ -399,6 +399,23 @@
handler.assertOnBeforeSelectionFired(false);
handler.assertOnSelectionFired(false);
}
+
+ /**
+ * Issue 6034: setTabText() removes the tab.
+ */
+ public void testSetTabText() {
+ TabLayoutPanel p = new TabLayoutPanel(1, Unit.EM);
+ Label[] labels = new Label[3];
+ for (int i = 0; i < labels.length; i++) {
+ labels[i] = new Label("content" + i);
+ p.add(labels[i]);
+ }
+
+ // Set the text of tab 1.
+ p.setTabText(1, "new text");
+ assertEquals(3, p.getWidgetCount());
+ assertEquals("new text", ((HasText) p.getTabWidget(1)).getText());
+ }
/**
* Test that {@link TabLayoutPanel} calls widget.setVisible(true/false)
on
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors