modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java | 8 - modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java | 17 +- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java | 61 +++++----- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTopView.java | 11 - 4 files changed, 53 insertions(+), 44 deletions(-)
New commits: commit 92f76547ae768f78379d0abbd9fde4b3d0e375e8 Author: Ian Springer ian.springer@redhat.com Date: Tue Aug 10 17:33:32 2010 -0400
fix bookmarks/history for group tabs
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java index 9b07011..bc79260 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java @@ -151,12 +151,14 @@ public class SubTabLayout extends VLayout {
- public void selectTab(String title) { + public boolean selectTab(String title) { + boolean foundTab = false; currentlySelected = title; int i = 0; for (String sub : subtabs.keySet()) { if (sub.equals(title)) { currentIndex = i; + foundTab = true; break; } i++; @@ -167,11 +169,11 @@ public class SubTabLayout extends VLayout { ((Button)buttonBar.getMember(currentIndex)).select(); draw(subtabs.get(title)); } + + return foundTab; }
- - // ------- Event support ------- // Done with a separate handler manager from parent class on purpose (compatibility issue)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java index a8bc6cd..b12304c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java @@ -18,7 +18,6 @@ */ package org.rhq.enterprise.gui.coregui.client.components.tab;
-import com.google.gwt.event.shared.DefaultHandlerRegistration; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.event.shared.HandlerRegistration; import com.smartgwt.client.widgets.tab.Tab; @@ -26,15 +25,12 @@ import com.smartgwt.client.widgets.tab.TabSet; import com.smartgwt.client.widgets.tab.events.TabSelectedEvent; import com.smartgwt.client.widgets.tab.events.TabSelectedHandler;
-import java.util.ArrayList; - /** * @author Greg Hinkle */ public class TwoLevelTabSet extends TabSet implements TabSelectedHandler, TwoLevelTabSelectedHandler {
- public void setTabs(TwoLevelTab... tabs) { super.setTabs(tabs); for (TwoLevelTab tab : tabs) { @@ -48,9 +44,6 @@ public class TwoLevelTabSet extends TabSet implements TabSelectedHandler, TwoLev }
- - - // ------- Event support ------- // Done with a separate handler manager from parent class on purpose (compatibility issue)
@@ -80,5 +73,15 @@ public class TwoLevelTabSet extends TabSet implements TabSelectedHandler, TwoLev
m.fireEvent(tabSelectedEvent); } + + public Tab getTabByTitle(String title) { + Tab[] tabs = getTabs(); + for (Tab tab : tabs) { + if (tab.getTitle().equals(title)) { + return tab; + } + } + return null; + } }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java index 7ce23a7..1204539 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java @@ -25,7 +25,6 @@ import com.google.gwt.user.client.History; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Side; import com.smartgwt.client.widgets.layout.VLayout; -import com.smartgwt.client.widgets.tab.Tab;
import org.rhq.core.domain.authz.Permission; import org.rhq.core.domain.resource.ResourceType; @@ -36,7 +35,6 @@ import org.rhq.core.domain.resource.group.ResourceGroup; import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite; import org.rhq.enterprise.gui.coregui.client.BookmarkableView; import org.rhq.enterprise.gui.coregui.client.CoreGUI; -import org.rhq.enterprise.gui.coregui.client.ViewId; import org.rhq.enterprise.gui.coregui.client.ViewPath; import org.rhq.enterprise.gui.coregui.client.components.tab.TwoLevelTab; import org.rhq.enterprise.gui.coregui.client.components.tab.TwoLevelTabSelectedEvent; @@ -51,11 +49,12 @@ import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTyp * Right panel of the group view. * * @author Greg Hinkle + * @author Ian Springer */ public class ResourceGroupDetailView extends VLayout implements BookmarkableView, TwoLevelTabSelectedHandler { + private static final String DEFAULT_TAB_NAME = "Inventory";
private ResourceGroupComposite groupComposite; - private ResourceType groupType; private ResourcePermission permissions;
private TwoLevelTab summaryTab; @@ -70,8 +69,6 @@ public class ResourceGroupDetailView extends VLayout implements BookmarkableView
private ResourceGroupTitleBar titleBar;
- private ViewId tabView; - private ViewId subtabView;
@Override protected void onDraw() { @@ -95,7 +92,7 @@ public class ResourceGroupDetailView extends VLayout implements BookmarkableView monitoringTab = new TwoLevelTab("Monitoring", "/images/icons/Monitor_grey_16.png"); monitoringTab.registerSubTabs("Graphs", "Tables", "Traits", "Availability", "Schedules", "Call Time");
- inventoryTab = new TwoLevelTab("Inventory", "/images/icons/Inventory_grey_16.png"); + inventoryTab = new TwoLevelTab(DEFAULT_TAB_NAME, "/images/icons/Inventory_grey_16.png"); inventoryTab.registerSubTabs("Overview", "Members", "Connection Settings");
operationsTab = new TwoLevelTab("Operations", "/images/icons/Operation_grey_16.png"); @@ -123,6 +120,7 @@ public class ResourceGroupDetailView extends VLayout implements BookmarkableView // CoreGUI.addBreadCrumb(getPlace()); }
+ public void onGroupSelected(ResourceGroupComposite groupComposite) {
this.groupComposite = groupComposite; @@ -183,7 +181,6 @@ public class ResourceGroupDetailView extends VLayout implements BookmarkableView new ResourceTypeRepository.TypeLoadedCallback() { public void onTypesLoaded(ResourceType type) { group.setResourceType(type); - ResourceGroupDetailView.this.groupType = type; GWTServiceLookup.getAuthorizationService().getImplicitGroupPermissions( group.getId(), new AsyncCallback<Set<Permission>>() { public void onFailure(Throwable caught) { @@ -242,34 +239,44 @@ public class ResourceGroupDetailView extends VLayout implements BookmarkableView
}
+ public void onTabSelected(TwoLevelTabSelectedEvent tabSelectedEvent) { + // Switch tabs directly, rather than letting the history framework do it, to avoid redrawing the outer views. + selectTab(tabSelectedEvent.getId(), tabSelectedEvent.getSubTabId()); String tabPath = "/" + tabSelectedEvent.getId() + "/" + tabSelectedEvent.getSubTabId(); - // System.out.println("TAB: " + currentView.getPath() + tabPath); - - if (groupComposite != null) { - String path = "ResourceGroup/" + groupComposite.getResourceGroup().getId() + tabPath; - History.newItem(path, false); - } + String path = "ResourceGroup/" + this.groupComposite.getResourceGroup().getId() + tabPath; + + // But still add an item to the history, specifying false to tell it not to fire an event. + History.newItem(path, false); }
- public void renderView(ViewPath viewPath) { - if (viewPath.isEnd()) { - // default - } else { - tabView = viewPath.getCurrent(); - subtabView = viewPath.getNext(); - - for (Tab t : topTabSet.getTabs()) { - TwoLevelTab tab = (TwoLevelTab) t;
- if (tab.getTitle().equals(tabView.getPath())) { - topTabSet.selectTab(tabView.getPath()); + public void renderView(ViewPath viewPath) { + // e.g. #ResourceGroup/10010/Inventory/Overview + String tabName = (!viewPath.isEnd()) ? viewPath.getCurrent().getPath() : null; // e.g. "Inventory" + String subTabName = (viewPath.viewsLeft() >= 1) ? viewPath.getNext().getPath() : null; // e.g. "Overview" + selectTab(tabName, subTabName); + }
- tab.getLayout().selectTab(subtabView.getPath());
- } + public void selectTab(String tabName, String subtabName) { + if (tabName == null) { + tabName = DEFAULT_TAB_NAME; + } + TwoLevelTab tab = (TwoLevelTab)this.topTabSet.getTabByTitle(tabName); + if (tab == null) { + CoreGUI.getErrorHandler().handleError("Invalid tab name: " + tabName); + // TODO: Should we fire a history event here to redirect to a valid bookmark? + tab = (TwoLevelTab)this.topTabSet.getTabByTitle(DEFAULT_TAB_NAME); + } + this.topTabSet.selectTab(tab); + if (subtabName != null) { + if (!tab.getLayout().selectTab(subtabName)) { + CoreGUI.getErrorHandler().handleError("Invalid subtab name: " + subtabName); + // TODO: Should we fire a history event here to redirect to a valid bookmark? + return; } + tab.getLayout().selectTab(subtabName); } - } } \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTopView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTopView.java index f45b169..d16d403 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTopView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTopView.java @@ -123,15 +123,12 @@ public class ResourceGroupTopView extends HLayout implements BookmarkableView { Integer groupId = Integer.parseInt(viewPath.getCurrent().getPath());
if (currentGroup == null || currentGroup.getResourceGroup().getId() != groupId) { - + // The previous bookmark did not already point to this group. setSelectedGroup(groupId, viewPath); - - this.treeView.setSelectedGroup(groupId); - - viewPath.next(); - - this.detailView.renderView(viewPath); } + + viewPath.next(); + this.detailView.renderView(viewPath); }
}