Refactor ProjectMenu hiding to use ScreenEvents
Using ScreenEvents allows the visibility logic to be contained
to the project links instead of being spread-out throughout the
Gerrit class.
Change-Id: Iab50ee7c613a880d9b471af37f663804cba36d66
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
index fc0825a..db280ac 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
@@ -27,7 +27,6 @@
import com.google.gerrit.client.changes.ChangeListScreen;
import com.google.gerrit.client.patches.PatchScreen;
import com.google.gerrit.client.rpc.GerritCallback;
-import com.google.gerrit.client.ui.HidingMenuBar;
import com.google.gerrit.client.ui.LinkMenuBar;
import com.google.gerrit.client.ui.LinkMenuItem;
import com.google.gerrit.client.ui.MorphingTabPanel;
@@ -105,14 +104,13 @@
private static MorphingTabPanel menuLeft;
private static LinkMenuBar menuRight;
private static LinkMenuBar diffBar;
- private static HidingMenuBar projectsBar;
+ private static LinkMenuBar projectsBar;
private static RootPanel siteHeader;
private static RootPanel siteFooter;
private static SearchPanel searchPanel;
private static final Dispatcher dispatcher = new Dispatcher();
private static ViewSite<Screen> body;
private static PatchScreen patchScreen;
- private static Project.NameKey projectKey;
private static String lastChangeListToken;
static {
@@ -190,18 +188,12 @@
patchScreen = (PatchScreen) view;
menuLeft.setVisible(diffBar, true);
menuLeft.selectTab(menuLeft.getWidgetIndex(diffBar));
- } else if (view instanceof ProjectScreen) {
- projectKey = ((ProjectScreen) view).getProjectKey();
- menuLeft.selectTab(menuLeft.getWidgetIndex(projectsBar));
- projectsBar.setHideableItemsVisible(true);
} else {
if (patchScreen != null && menuLeft.getSelectedWidget() == diffBar) {
menuLeft.selectTab(isSignedIn() ? 1 : 0);
}
patchScreen = null;
menuLeft.setVisible(diffBar, false);
- projectKey = null;
- projectsBar.setHideableItemsVisible(false);
}
}
@@ -668,14 +660,12 @@
addDiffLink(diffBar, C.menuDiffPatchSets(), PatchScreen.TopView.PATCH_SETS);
addDiffLink(diffBar, C.menuDiffFiles(), PatchScreen.TopView.FILES);
- projectKey = null;
- projectsBar = new HidingMenuBar();
+ projectsBar = new LinkMenuBar();
addLink(projectsBar, C.menuProjectsList(), PageLinks.ADMIN_PROJECTS);
addProjectLink(projectsBar, C.menuProjectsInfo(), ProjectScreen.INFO);
addProjectLink(projectsBar, C.menuProjectsBranches(), ProjectScreen.BRANCH);
addProjectLink(projectsBar, C.menuProjectsAccess(), ProjectScreen.ACCESS);
addProjectLink(projectsBar, C.menuProjectsDashboards(), ProjectScreen.DASHBOARDS);
- projectsBar.setHideableItemsVisible(false);
menuLeft.add(projectsBar, C.menuProjects());
if (signedIn) {
@@ -813,15 +803,18 @@
});
}
- private static void addProjectLink(final HidingMenuBar m, final String text,
+ private static void addProjectLink(final LinkMenuBar m, final String text,
final String panel) {
- m.addHideableItem(new LinkMenuItem(text, "") {
+ m.addItem(new LinkMenuItem(text, "") {
@Override
public void onScreenLoad(ScreenLoadEvent event) {
Screen screen = event.getScreen();
if (screen instanceof ProjectScreen) {
Project.NameKey projectKey = ((ProjectScreen)screen).getProjectKey();
setTargetHistoryToken(Dispatcher.toProjectAdmin(projectKey, panel));
+ setVisible(true);
+ } else {
+ setVisible(false);
}
super.onScreenLoad(event);
}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/HidingMenuBar.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/HidingMenuBar.java
deleted file mode 100644
index e3f402f..0000000
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/HidingMenuBar.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (C) 2012 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.client.ui;
-
-import java.util.HashSet;
-import java.util.Set;
-
-public class HidingMenuBar extends LinkMenuBar {
- Set<LinkMenuItem> hideableItems = new HashSet<LinkMenuItem>();
-
- public void addHideableItem(final LinkMenuItem item) {
- hideableItems.add(item);
- addItem(item);
- }
-
- public void setHideableItemsVisible(boolean visible) {
- for(LinkMenuItem item: hideableItems) {
- item.setVisible(visible);
- }
- }
-}