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);
-    }
-  }
-}