13388 messages in 307 lists

Revision
2210
Author
andrew
Date
2010-03-10 10:17:12 -0600 (Wed, 10 Mar 2010)

Log Message

Support for reloadable tabs

Modified Paths

Added Paths

Diff

Added: trunk/gwt-client/src/main/java/com/extjs/gxt/ui/client/widget/ReloadableTabPanel.java (0 => 2210)

---
trunk/gwt-client/src/main/java/com/extjs/gxt/ui/client/widget/ReloadableTabPanel.java
                           (rev 0)
+++
trunk/gwt-client/src/main/java/com/extjs/gxt/ui/client/widget/ReloadableTabPanel.java
      2010-03-10 16:17:12 UTC (rev 2210)

@@ -0,0 +1,51 @@

+package com.extjs.gxt.ui.client.widget;
+
+import org.mule.galaxy.web.client.util.ShowableTabListener;
+
+import java.util.List;
+
+import com.extjs.gxt.ui.client.event.BaseEvent;
+import com.extjs.gxt.ui.client.event.ComponentEvent;
+import com.extjs.gxt.ui.client.event.Events;
+import com.extjs.gxt.ui.client.event.Listener;
+import com.google.gwt.core.client.GWT;
+
+/**
+ * A fixed tab panel supporting reloads of tabs which are already
selected. Had to put it in
+ * a GXT package because many methods in superclass are
package-private :(
+ */
+public class ReloadableTabPanel extends TabPanel {
+
+    private TabItem lastSelectedItem;
+
+    @Override
+    void onItemClick(TabItem item, ComponentEvent ce) {
+        if (item == lastSelectedItem) {
+            GWT.log("Force reloading the tab " + item.getText(),
null);
+            final List<Listener<? extends BaseEvent>>
listeners = getListeners(Events.Select);
+            for (Listener<? extends BaseEvent> listener :
listeners) {
+                if (listener instanceof ShowableTabListener) {
+                    ShowableTabListener l = (ShowableTabListener)
listener;
+                    String tabName = l.getTabName(item);
+                    l.showTab(tabName);
+                }
+            }
+        } else {
+            super.onItemClick(item, ce);
+        }
+    }
+
+    @Override
+    public void setSelection(TabItem item) {
+        setLastSelectedItem(item);
+        super.setSelection(item);
+    }
+
+    public TabItem getLastSelectedItem() {
+        return lastSelectedItem;
+    }
+
+    public void setLastSelectedItem(TabItem lastSelectedItem) {
+        this.lastSelectedItem = lastSelectedItem;
+    }
+}

Modified: trunk/gwt-client/src/main/java/org/mule/galaxy/web/client/util/ShowableTabListener.java (2209 => 2210)

---
trunk/gwt-client/src/main/java/org/mule/galaxy/web/client/util/ShowableTabListener.java
 2010-03-10 15:39:25 UTC (rev 2209)
+++
trunk/gwt-client/src/main/java/org/mule/galaxy/web/client/util/ShowableTabListener.java
    2010-03-10 16:17:12 UTC (rev 2210)

@@ -3,19 +3,19 @@

*/
 package org.mule.galaxy.web.client.util;
 

-import
com.extjs.gxt.ui.client.event.SelectionListener;

+import org.mule.galaxy.web.client.ErrorPanel;
+import org.mule.galaxy.web.client.Showable;
+
+import java.util.List;
+
+import com.extjs.gxt.ui.client.event.Listener;

import
com.extjs.gxt.ui.client.event.TabPanelEvent;
 import com.extjs.gxt.ui.client.widget.TabItem;
 import com.extjs.gxt.ui.client.widget.TabPanel;
 import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.ui.Widget;
 

-import java.util.List;
-
-import org.mule.galaxy.web.client.ErrorPanel;
-import org.mule.galaxy.web.client.Showable;
-
-public class ShowableTabListener extends
SelectionListener<TabPanelEvent> {

+public class ShowableTabListener implements
Listener<TabPanelEvent> {

   private TabItem previous;
     private List<String> params;
     private List<String> previousParams;

@@ -37,36 +37,6 @@

       this.tabNames = tabNames;
     }
 

-    @Override
-    public void componentSelected(TabPanelEvent ce) {
-        TabItem item = ce.getItem();
-        
-        // Nasty trickery because GXT triggers tab selection
events for every click on the screen
-        if (item.equals(previous) &&
params.equals(previousParams)) {
-            return;
-        }
-        
-        hidePrevious();
-        
-        errorPanel.clearErrorMessage();
-        Widget widget = item.getWidget(0);
-        if (widget instanceof Showable) {
-            ((Showable)widget).showPage(params);
-        }
-        
-        // Update the History token once the tab is selected.
-        int tabIndex = tabPanel.indexOf(item);
-        if (tabNames != null && tabIndex <
tabNames.size()) {
-            String name = tabNames.get(tabIndex);
-            History.newItem(urlBase + "/" + name, false);
-        }
-        
-        previous = item;
-        // Once we've shown a panel, store the previous params. We
aren't going to trigger a new tab  
-        // selection event again until we get new params.
-        previousParams = params;
-        item.layout();
-    }

    /**
      * Update the parameters from a new history event. Call before
calling showTab.

@@ -125,4 +95,45 @@

   protected TabPanel getTabPanel() {
         return tabPanel;
     }

+
+    public void handleEvent(TabPanelEvent event) {
+        TabItem item = event.getItem();
+
+        // Nasty trickery because GXT triggers tab selection
events for every click on the screen
+        if (item.equals(previous) &&
params.equals(previousParams)) {
+            return;
+        }
+
+        hidePrevious();
+
+        errorPanel.clearErrorMessage();
+        Widget widget = item.getWidget(0);
+        if (widget instanceof Showable) {
+            ((Showable)widget).showPage(params);
+        }
+
+        // Update the History token once the tab is selected.
+        int tabIndex = tabPanel.indexOf(item);
+        if (tabNames != null && tabIndex <
tabNames.size()) {
+            String name = tabNames.get(tabIndex);
+            History.newItem(urlBase + "/" + name, false);
+        }
+
+        previous = item;
+        // Once we've shown a panel, store the previous params. We
aren't going to trigger a new tab
+        // selection event again until we get new params.
+        previousParams = params;
+        item.layout();
+    }
+
+    /**
+     * @return tabName as used by History or null if not found
+     */
+    public String getTabName(TabItem item) {
+        int idx = getTabPanel().indexOf(item);
+        if (idx == -1) {
+            return null;
+        }
+        return getTabNames().get(idx);
+    }

}

--------------------------------------------------------------------- To unsubscribe from this list, please visit: http://admin.muleforge.org/manage_email
Recent »
[2411] trunk/web/s... merv@mu... 37 minutes ago
[2410] trunk/api/s... merv@mu... about 2 hours ago
[2409] trunk/api/s... dandiep... 1 day ago
browse the latest messages
Copyright 2006-2009 The Codehaus Foundation
Powered by Codehaus March (Version: 0.2-HEAD)