Merge "Keep 'My' menu selected if a 'My' menu item opens project screen"
This commit is contained in:
commit
00a6bc5329
gerrit-gwtui/src/main/java/com/google/gerrit/client
@ -39,8 +39,8 @@ import com.google.gerrit.client.ui.LinkMenuBar;
|
|||||||
import com.google.gerrit.client.ui.LinkMenuItem;
|
import com.google.gerrit.client.ui.LinkMenuItem;
|
||||||
import com.google.gerrit.client.ui.MorphingTabPanel;
|
import com.google.gerrit.client.ui.MorphingTabPanel;
|
||||||
import com.google.gerrit.client.ui.PatchLink;
|
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.Screen;
|
||||||
import com.google.gerrit.client.ui.ScreenLoadEvent;
|
|
||||||
import com.google.gerrit.common.PageLinks;
|
import com.google.gerrit.common.PageLinks;
|
||||||
import com.google.gerrit.common.data.GerritConfig;
|
import com.google.gerrit.common.data.GerritConfig;
|
||||||
import com.google.gerrit.common.data.GitwebConfig;
|
import com.google.gerrit.common.data.GitwebConfig;
|
||||||
@ -51,7 +51,6 @@ import com.google.gerrit.reviewdb.client.Account;
|
|||||||
import com.google.gerrit.reviewdb.client.AccountDiffPreference;
|
import com.google.gerrit.reviewdb.client.AccountDiffPreference;
|
||||||
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
|
import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
|
||||||
import com.google.gerrit.reviewdb.client.AuthType;
|
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.aria.client.Roles;
|
||||||
import com.google.gwt.core.client.EntryPoint;
|
import com.google.gwt.core.client.EntryPoint;
|
||||||
import com.google.gwt.core.client.GWT;
|
import com.google.gwt.core.client.GWT;
|
||||||
@ -216,6 +215,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.
|
* Update the current history token after a screen change.
|
||||||
* <p>
|
* <p>
|
||||||
@ -629,22 +632,21 @@ public class Gerrit implements EntryPoint {
|
|||||||
addDiffLink(diffBar, C.menuDiffPatchSets(), PatchScreen.TopView.PATCH_SETS);
|
addDiffLink(diffBar, C.menuDiffPatchSets(), PatchScreen.TopView.PATCH_SETS);
|
||||||
addDiffLink(diffBar, C.menuDiffFiles(), PatchScreen.TopView.FILES);
|
addDiffLink(diffBar, C.menuDiffFiles(), PatchScreen.TopView.FILES);
|
||||||
|
|
||||||
final LinkMenuBar projectsBar = new LinkMenuBar() {
|
final LinkMenuBar projectsBar = new LinkMenuBar();
|
||||||
@Override
|
|
||||||
public void onScreenLoad(ScreenLoadEvent event) {
|
|
||||||
if (event.getScreen() instanceof ProjectScreen) {
|
|
||||||
menuLeft.selectTab(menuLeft.getWidgetIndex(this));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
menuBars.put(GerritTopMenu.PROJECTS.menuName, projectsBar);
|
menuBars.put(GerritTopMenu.PROJECTS.menuName, projectsBar);
|
||||||
addLink(projectsBar, C.menuProjectsList(), PageLinks.ADMIN_PROJECTS);
|
addLink(projectsBar, C.menuProjectsList(), PageLinks.ADMIN_PROJECTS);
|
||||||
addProjectLink(projectsBar, C.menuProjectsInfo(), ProjectScreen.INFO);
|
projectsBar.addItem(new ProjectLinkMenuItem(C.menuProjectsInfo(), ProjectScreen.INFO));
|
||||||
addProjectLink(projectsBar, C.menuProjectsBranches(), ProjectScreen.BRANCH);
|
projectsBar.addItem(new ProjectLinkMenuItem(C.menuProjectsBranches(), ProjectScreen.BRANCH));
|
||||||
addProjectLink(projectsBar, C.menuProjectsAccess(), ProjectScreen.ACCESS);
|
projectsBar.addItem(new ProjectLinkMenuItem(C.menuProjectsAccess(), ProjectScreen.ACCESS));
|
||||||
final LinkMenuItem dashboardsMenuItem =
|
final LinkMenuItem dashboardsMenuItem =
|
||||||
addProjectLink(projectsBar, C.menuProjectsDashboards(),
|
new ProjectLinkMenuItem(C.menuProjectsDashboards(),
|
||||||
ProjectScreen.DASHBOARDS);
|
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());
|
menuLeft.add(projectsBar, C.menuProjects());
|
||||||
|
|
||||||
if (signedIn) {
|
if (signedIn) {
|
||||||
@ -879,32 +881,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,
|
private static void addDiffLink(final LinkMenuBar m, final String text,
|
||||||
final PatchScreen.Type type) {
|
final PatchScreen.Type type) {
|
||||||
m.addItem(new LinkMenuItem(text, "") {
|
m.addItem(new LinkMenuItem(text, "") {
|
||||||
@ -937,7 +913,7 @@ public class Gerrit implements EntryPoint {
|
|||||||
if (item.getId() != null) {
|
if (item.getId() != null) {
|
||||||
a.getElement().setAttribute("id", item.getId());
|
a.getElement().setAttribute("id", item.getId());
|
||||||
}
|
}
|
||||||
m.add(a);
|
m.addItem(a);
|
||||||
} else {
|
} else {
|
||||||
Anchor atag = anchor(item.getName(), isAbsolute(item.getUrl())
|
Anchor atag = anchor(item.getName(), isAbsolute(item.getUrl())
|
||||||
? item.getUrl()
|
? item.getUrl()
|
||||||
|
@ -41,10 +41,12 @@ public class LinkMenuBar extends Composite implements ScreenLoadHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addItem(final LinkMenuItem i) {
|
public void addItem(final LinkMenuItem i) {
|
||||||
|
i.setMenuBar(this);
|
||||||
add(i);
|
add(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void insertItem(final LinkMenuItem i, int beforeIndex) {
|
public void insertItem(final LinkMenuItem i, int beforeIndex) {
|
||||||
|
i.setMenuBar(this);
|
||||||
insert(i, beforeIndex);
|
insert(i, beforeIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,8 @@ import com.google.gwt.aria.client.Roles;
|
|||||||
import com.google.gwt.dom.client.AnchorElement;
|
import com.google.gwt.dom.client.AnchorElement;
|
||||||
|
|
||||||
public class LinkMenuItem extends InlineHyperlink implements ScreenLoadHandler {
|
public class LinkMenuItem extends InlineHyperlink implements ScreenLoadHandler {
|
||||||
|
private LinkMenuBar bar;
|
||||||
|
|
||||||
public LinkMenuItem(final String text, final String targetHistoryToken) {
|
public LinkMenuItem(final String text, final String targetHistoryToken) {
|
||||||
super(text, targetHistoryToken);
|
super(text, targetHistoryToken);
|
||||||
setStyleName(Gerrit.RESOURCES.css().menuItem());
|
setStyleName(Gerrit.RESOURCES.css().menuItem());
|
||||||
@ -32,11 +34,20 @@ public class LinkMenuItem extends InlineHyperlink implements ScreenLoadHandler {
|
|||||||
AnchorElement.as(getElement()).blur();
|
AnchorElement.as(getElement()).blur();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setMenuBar(LinkMenuBar bar) {
|
||||||
|
this.bar = bar;
|
||||||
|
}
|
||||||
|
|
||||||
public void onScreenLoad(ScreenLoadEvent event) {
|
public void onScreenLoad(ScreenLoadEvent event) {
|
||||||
if (event.getScreen().getToken().equals(getTargetHistoryToken())){
|
if (match(event.getScreen().getToken())) {
|
||||||
|
Gerrit.selectMenu(bar);
|
||||||
addStyleName(Gerrit.RESOURCES.css().activeRow());
|
addStyleName(Gerrit.RESOURCES.css().activeRow());
|
||||||
} else {
|
} else {
|
||||||
removeStyleName(Gerrit.RESOURCES.css().activeRow());
|
removeStyleName(Gerrit.RESOURCES.css().activeRow());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean match(String token) {
|
||||||
|
return token.equals(getTargetHistoryToken());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
// Copyright (C) 2014 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 com.google.gerrit.client.Dispatcher;
|
||||||
|
import com.google.gerrit.client.admin.ProjectScreen;
|
||||||
|
import com.google.gerrit.reviewdb.client.Project;
|
||||||
|
|
||||||
|
public class ProjectLinkMenuItem extends LinkMenuItem {
|
||||||
|
private final String panel;
|
||||||
|
|
||||||
|
public ProjectLinkMenuItem(String text, String panel) {
|
||||||
|
super(text, "");
|
||||||
|
this.panel = panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user