]> source.dussan.org Git - vaadin-framework.git/commitdiff
Test case and fix for #2658 - Disabling a tabsheet should not change the selected tab
authorArtur Signell <artur.signell@itmill.com>
Sun, 22 Feb 2009 09:40:01 +0000 (09:40 +0000)
committerArtur Signell <artur.signell@itmill.com>
Sun, 22 Feb 2009 09:40:01 +0000 (09:40 +0000)
svn changeset:6928/svn branch:trunk

src/com/itmill/toolkit/tests/components/tabsheet/TabSheetDisabling.java [new file with mode: 0644]
src/com/itmill/toolkit/ui/TabSheet.java

diff --git a/src/com/itmill/toolkit/tests/components/tabsheet/TabSheetDisabling.java b/src/com/itmill/toolkit/tests/components/tabsheet/TabSheetDisabling.java
new file mode 100644 (file)
index 0000000..f934cb0
--- /dev/null
@@ -0,0 +1,61 @@
+package com.itmill.toolkit.tests.components.tabsheet;\r
+\r
+import com.itmill.toolkit.tests.components.TestBase;\r
+import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.TabSheet;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+import com.itmill.toolkit.ui.Button.ClickListener;\r
+\r
+public class TabSheetDisabling extends TestBase {\r
+\r
+    private static final int NR_BUTTONS = 10;\r
+    private Button buttons[] = new Button[NR_BUTTONS];\r
+    private TabSheet tabSheet;\r
+\r
+    @Override\r
+    public void setup() {\r
+        tabSheet = new TabSheet();\r
+        for (int i = 0; i < NR_BUTTONS; i++) {\r
+            if (i % 2 == 0) {\r
+                buttons[i] = new Button("Disable this tab",\r
+                        new ClickListener() {\r
+\r
+                            public void buttonClick(ClickEvent event) {\r
+                                event.getButton().setEnabled(false);\r
+\r
+                            }\r
+\r
+                        });\r
+            } else {\r
+                buttons[i] = new Button("Hide this tab", new ClickListener() {\r
+\r
+                    public void buttonClick(ClickEvent event) {\r
+                        event.getButton().setVisible(false);\r
+\r
+                    }\r
+\r
+                });\r
+            }\r
+            tabSheet.addTab(buttons[i]);\r
+        }\r
+\r
+        Button button = new Button("Enable/disable", new ClickListener() {\r
+            public void buttonClick(ClickEvent event) {\r
+                tabSheet.setEnabled(!tabSheet.isEnabled());\r
+            }\r
+        });\r
+        addComponent(tabSheet);\r
+        addComponent(button);\r
+    }\r
+\r
+    @Override\r
+    protected String getDescription() {\r
+        return "Switching the tabsheet between disabled and enabled should not change which tab is selected. Disabling the open tab should select the first enabled tab.";\r
+    }\r
+\r
+    @Override\r
+    protected Integer getTicketNumber() {\r
+        return 2658;\r
+    }\r
+\r
+}\r
index 70ba228739420a5fc656a2bb85427e6fc46c9dfe..25a5c65455a4e4cb28966f2116fa004af96a0af6 100644 (file)
@@ -197,8 +197,13 @@ public class TabSheet extends AbstractComponentContainer implements
         for (final Iterator i = getComponentIterator(); i.hasNext();) {
             final Component c = (Component) i.next();
 
+            /*
+             * If we have no selection, if the current selection is invisible or
+             * if the current selection is disabled (but the whole component is
+             * not) we select this tab instead
+             */
             if (selected == null || !selected.isVisible()
-                    || !selected.isEnabled()) {
+                    || (!selected.isEnabled() && this.isEnabled())) {
                 selected = c;
             }
             target.startTag("tab");