Author: knopp
Date: Sat May 24 03:15:19 2008
New Revision: 659783

URL: http://svn.apache.org/viewvc?rev=659783&view=rev
Log:
WICKET-1660

Modified:
    
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/AbstractTab.java
    
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/ITab.java
    
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/PanelCachingTab.java
    
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java

Modified: 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/AbstractTab.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/AbstractTab.java?rev=659783&r1=659782&r2=659783&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/AbstractTab.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/AbstractTab.java
 Sat May 24 03:15:19 2008
@@ -54,6 +54,11 @@
                return title;
        }
 
+       public boolean isVisible()
+       {
+               return true;
+       }
+       
        /**
         * @see 
org.apache.wicket.extensions.markup.html.tabs.ITab#getPanel(java.lang.String)
         */

Modified: 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/ITab.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/ITab.java?rev=659783&r1=659782&r2=659783&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/ITab.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/ITab.java
 Sat May 24 03:15:19 2008
@@ -42,4 +42,11 @@
         * @return a Panel object that will be placed as the content panel
         */
        Panel<?> getPanel(final String panelId);
+       
+       /**
+        * Returns whether this tab should be visible
+        * 
+        * @return 
+        */
+       boolean isVisible();
 }
\ No newline at end of file

Modified: 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/PanelCachingTab.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/PanelCachingTab.java?rev=659783&r1=659782&r2=659783&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/PanelCachingTab.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/PanelCachingTab.java
 Sat May 24 03:15:19 2008
@@ -32,7 +32,7 @@
 {
        private static final long serialVersionUID = 1L;
 
-       private Panel panel;
+       private Panel<?> panel;
        private ITab delegate;
 
        /**
@@ -49,7 +49,7 @@
        /**
         * @see org.apache.wicket.extensions.markup.html.tabs.ITab#getTitle()
         */
-       public IModel getTitle()
+       public IModel<String> getTitle()
        {
                return delegate.getTitle();
        }
@@ -57,7 +57,7 @@
        /**
         * @see 
org.apache.wicket.extensions.markup.html.tabs.ITab#getPanel(java.lang.String)
         */
-       public Panel getPanel(final String panelId)
+       public Panel<?> getPanel(final String panelId)
        {
                if (panel == null)
                {
@@ -65,4 +65,12 @@
                }
                return panel;
        }
+       
+       /**
+        * @see org.apache.wicket.extensions.markup.html.tabs.ITab#isVisible()
+        */
+       public boolean isVisible()
+       {
+               return true;
+       }
 }
\ No newline at end of file

Modified: 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java?rev=659783&r1=659782&r2=659783&view=diff
==============================================================================
--- 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
 (original)
+++ 
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
 Sat May 24 03:15:19 2008
@@ -172,7 +172,7 @@
         * @param tabIndex
         * @return new loop item
         */
-       protected LoopItem newTabContainer(int tabIndex)
+       protected LoopItem newTabContainer(final int tabIndex)
        {
                return new LoopItem(tabIndex)
                {
@@ -199,6 +199,12 @@
                                }
                                tag.put("class", cssClass.trim());
                        }
+                       
+                       @Override
+                       public boolean isVisible()
+                       {
+                               return getTabs().get(tabIndex).isVisible();
+                       }
 
                };
        }
@@ -208,12 +214,20 @@
        @Override
        protected void onBeforeRender()
        {
-               super.onBeforeRender();
                if (!hasBeenRendered() && getSelectedTab() == -1)
-               {
-                       // select the first tab by default
-                       setSelectedTab(0);
-               }
+        {
+            List<ITab> tabs = getTabs();
+            for (int i = 0; i < tabs.size(); ++i)
+            {
+                ITab tab = tabs.get(i);
+                if (tab.isVisible())
+                {
+                    setSelectedTab(i);
+                    break;
+                }
+            }
+        }
+        super.onBeforeRender();
        }
 
        /**
@@ -320,20 +334,25 @@
 
                ITab tab = tabs.get(index);
 
-               Panel<?> panel = tab.getPanel(TAB_PANEL_ID);
+               final Component<?> component;
+               
+               if (tab.isVisible())            
+                       component = tab.getPanel(TAB_PANEL_ID);
+               else
+                       component = new WebMarkupContainer<Void>(TAB_PANEL_ID);
 
-               if (panel == null)
+               if (component == null)
                {
                        throw new WicketRuntimeException("ITab.getPanel() 
returned null. TabbedPanel [" +
                                getPath() + "] ITab index [" + index + "]");
 
                }
 
-               if (!panel.getId().equals(TAB_PANEL_ID))
+               if (!component.getId().equals(TAB_PANEL_ID))
                {
                        throw new WicketRuntimeException(
                                "ITab.getPanel() returned a panel with invalid 
id [" +
-                                       panel.getId() +
+                                       component.getId() +
                                        "]. You must always return a panel with 
id equal to the provided panelId parameter. TabbedPanel [" +
                                        getPath() + "] ITab index [" + index + 
"]");
                }
@@ -341,11 +360,11 @@
 
                if (get(TAB_PANEL_ID) == null)
                {
-                       add(panel);
+                       add(component);
                }
                else
                {
-                       replace(panel);
+                       replace(component);
                }
        }
 


Reply via email to