blob: 8cd993dce471129c3aef500ef00b220c0cf358f4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2013 Tasktop Technologies and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.builds.ui.view;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.mylyn.builds.core.IBuildServer;
import org.eclipse.mylyn.builds.ui.BuildsUi;
import org.eclipse.mylyn.builds.ui.BuildsUiUtil;
import org.eclipse.mylyn.commons.repositories.ui.RepositoryUi;
import org.eclipse.mylyn.tasks.ui.TasksUiImages;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IWorkbenchCommandConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;
/**
* @author Steffen Pingel
*/
public class NewBuildServerMenuAction extends Action implements IMenuCreator {
private MenuManager manager;
private Menu menu;
public NewBuildServerMenuAction() {
setMenuCreator(this);
setToolTipText("New Build Server Location");
setImageDescriptor(TasksUiImages.REPOSITORY_NEW);
}
private void addActions(IMenuManager manager) { // add repository action
NewBuildServerAction action = new NewBuildServerAction();
manager.add(action);
// open repository configuration actions
boolean separatorAdded = false;
for (final IBuildServer server : BuildsUi.getModel().getServers()) {
if (!separatorAdded) {
manager.add(new Separator());
separatorAdded = true;
}
Action openAction = new Action() {
@Override
public void run() {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
BuildsUiUtil.openPropertiesDialog(server);
}
});
}
};
openAction.setText(NLS.bind("Properties for {0}", server.getLocation().getLabel()));
manager.add(openAction);
}
manager.add(new Separator());
manager.add(createShowRepositoriesViewItem());
}
private IContributionItem createShowRepositoriesViewItem() {
CommandContributionItemParameter parm = new CommandContributionItemParameter(PlatformUI.getWorkbench(),
RepositoryUi.ID_VIEW_REPOSITORIES, IWorkbenchCommandConstants.VIEWS_SHOW_VIEW,
CommandContributionItem.STYLE_PUSH);
Map<String, String> targetId = new HashMap<String, String>();
targetId.put(IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_PARM_ID, RepositoryUi.ID_VIEW_REPOSITORIES);
parm.parameters = targetId;
parm.label = "Show Repositories View";
if (parm.label.length() > 0) {
parm.mnemonic = parm.label.substring(0, 1);
}
//parm.icon = BuildImages.VIEW_BUILDS;
return new CommandContributionItem(parm);
}
public void dispose() {
if (menu != null) {
menu.dispose();
menu = null;
}
if (manager != null) {
manager.dispose();
manager = null;
}
}
public Menu getMenu(Control parent) {
initMenuManager();
menu = manager.createContextMenu(parent);
return menu;
}
public Menu getMenu(Menu parent) {
initMenuManager();
menu = new Menu(parent);
manager.fill(menu, 0);
return menu;
}
private void initMenuManager() {
dispose();
manager = new MenuManager();
addActions(manager);
}
@Override
public void run() {
new NewBuildServerAction().run();
}
}