/******************************************************************************* * 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(); } }