Keep 'My' menu selected if a 'My' menu item opens project screen

If a project screen is shown the 'Projects' menu is automatically
selected. This is bad for custom 'My' menu items that link to a
project screen because in this case the user expects that the 'My'
menu stays selected.

Change-Id: I894853392bd8b0efa6ad5708c101c0be3132eda9
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
Edwin Kempin
2014-04-02 16:23:52 +02:00
parent a2bf824fa1
commit 12adc00874
4 changed files with 79 additions and 43 deletions

View File

@@ -38,8 +38,8 @@ import com.google.gerrit.client.ui.LinkMenuBar;
import com.google.gerrit.client.ui.LinkMenuItem;
import com.google.gerrit.client.ui.MorphingTabPanel;
import com.google.gerrit.client.ui.PatchLink;
import com.google.gerrit.client.ui.ProjectLinkMenuItem;
import com.google.gerrit.client.ui.Screen;
import com.google.gerrit.client.ui.ScreenLoadEvent;
import com.google.gerrit.common.PageLinks;
import com.google.gerrit.common.data.GerritConfig;
import com.google.gerrit.common.data.GitwebConfig;
@@ -50,7 +50,6 @@ import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.AccountDiffPreference;
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
import com.google.gerrit.reviewdb.client.AuthType;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gwt.aria.client.Roles;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
@@ -214,6 +213,10 @@ public class Gerrit implements EntryPoint {
}
}
public static void selectMenu(LinkMenuBar bar) {
menuLeft.selectTab(menuLeft.getWidgetIndex(bar));
}
/**
* Update the current history token after a screen change.
* <p>
@@ -619,22 +622,21 @@ public class Gerrit implements EntryPoint {
addDiffLink(diffBar, C.menuDiffPatchSets(), PatchScreen.TopView.PATCH_SETS);
addDiffLink(diffBar, C.menuDiffFiles(), PatchScreen.TopView.FILES);
final LinkMenuBar projectsBar = new LinkMenuBar() {
@Override
public void onScreenLoad(ScreenLoadEvent event) {
if (event.getScreen() instanceof ProjectScreen) {
menuLeft.selectTab(menuLeft.getWidgetIndex(this));
}
}
};
final LinkMenuBar projectsBar = new LinkMenuBar();
menuBars.put(GerritTopMenu.PROJECTS.menuName, projectsBar);
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);
projectsBar.addItem(new ProjectLinkMenuItem(C.menuProjectsInfo(), ProjectScreen.INFO));
projectsBar.addItem(new ProjectLinkMenuItem(C.menuProjectsBranches(), ProjectScreen.BRANCH));
projectsBar.addItem(new ProjectLinkMenuItem(C.menuProjectsAccess(), ProjectScreen.ACCESS));
final LinkMenuItem dashboardsMenuItem =
addProjectLink(projectsBar, C.menuProjectsDashboards(),
ProjectScreen.DASHBOARDS);
new ProjectLinkMenuItem(C.menuProjectsDashboards(),
ProjectScreen.DASHBOARDS) {
protected boolean match(String token) {
return super.match(token) ||
(!getTargetHistoryToken().isEmpty() && ("/admin" + token).startsWith(getTargetHistoryToken()));
}
};
projectsBar.addItem(dashboardsMenuItem);
menuLeft.add(projectsBar, C.menuProjects());
if (signedIn) {
@@ -848,32 +850,6 @@ public class Gerrit implements EntryPoint {
});
}
private static LinkMenuItem addProjectLink(final LinkMenuBar m, final String text,
final String panel) {
LinkMenuItem i = new LinkMenuItem(text, "") {
@Override
public void onScreenLoad(ScreenLoadEvent event) {
Screen screen = event.getScreen();
Project.NameKey projectKey;
if (screen instanceof ProjectScreen) {
projectKey = ((ProjectScreen)screen).getProjectKey();
} else {
projectKey = ProjectScreen.getSavedKey();
}
if (projectKey != null) {
setVisible(true);
setTargetHistoryToken(Dispatcher.toProjectAdmin(projectKey, panel));
} else {
setVisible(false);
}
super.onScreenLoad(event);
}
};
m.addItem(i);
return i;
}
private static void addDiffLink(final LinkMenuBar m, final String text,
final PatchScreen.Type type) {
m.addItem(new LinkMenuItem(text, "") {
@@ -906,7 +882,7 @@ public class Gerrit implements EntryPoint {
if (item.getId() != null) {
a.getElement().setAttribute("id", item.getId());
}
m.add(a);
m.addItem(a);
} else {
Anchor atag = anchor(item.getName(), isAbsolute(item.getUrl())
? item.getUrl()