
org.eclipse.debug.ui.actions.ContextualLaunchAction Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.eclipse.debug.ui Show documentation
Show all versions of org.eclipse.debug.ui Show documentation
This is org.eclipse.debug.ui jar used by Scout SDK
The newest version!
/*******************************************************************************
* Copyright (c) 2000, 2013 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.ui.actions;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.core.expressions.Expression;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.actions.LaunchConfigurationAction;
import org.eclipse.debug.internal.ui.actions.LaunchShortcutAction;
import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager;
import org.eclipse.debug.internal.ui.launchConfigurations.LaunchShortcutExtension;
import org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.ILaunchGroup;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MenuAdapter;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.activities.WorkbenchActivityHelper;
/**
* An action delegate that builds a context menu with applicable launch shortcuts
* for a specific launch mode.
*
* This class can be sub-classed and contributed as an object contribution pop-up
* menu extension action. When invoked, it becomes a sub-menu that dynamically
* builds a list of applicable launch shortcuts for the current selection.
* Each launch shortcut may have optional information to support a context menu action.
*
*
* Clients may subclass this class.
*
* @since 3.0
*/
public abstract class ContextualLaunchAction implements IObjectActionDelegate, IMenuCreator {
private IAction fDelegateAction;
private String fMode;
// default launch group for this mode (null category)
private ILaunchGroup fGroup = null;
// map of launch groups by (non-null) categories, for this mode
private Map fGroupsByCategory = null;
// whether to re-fill the menu (reset on selection change)
private boolean fFillMenu = true;
/**
* Constructs a contextual launch action for the given launch mode.
*
* @param mode launch mode
*/
public ContextualLaunchAction(String mode) {
fMode = mode;
ILaunchGroup[] groups = DebugUITools.getLaunchGroups();
fGroupsByCategory = new HashMap(3);
for (int i = 0; i < groups.length; i++) {
ILaunchGroup group = groups[i];
if (group.getMode().equals(mode)) {
if (group.getCategory() == null) {
fGroup = group;
} else {
fGroupsByCategory.put(group.getCategory(), group);
}
}
}
}
/*
* @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
*/
@Override
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
// We don't have a need for the active part.
}
/* (non-Javadoc)
* @see org.eclipse.jface.action.IMenuCreator#dispose()
*/
@Override
public void dispose() {
// nothing to do
}
/* (non-Javadoc)
* @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Control)
*/
@Override
public Menu getMenu(Control parent) {
// never called
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Menu)
*/
@Override
public Menu getMenu(Menu parent) {
//Create the new menu. The menu will get filled when it is about to be shown. see fillMenu(Menu).
Menu menu = new Menu(parent);
/**
* Add listener to re-populate the menu each time
* it is shown because MenuManager.update(boolean, boolean)
* doesn't dispose pull-down ActionContribution items for each popup menu.
*/
menu.addMenuListener(new MenuAdapter() {
@Override
public void menuShown(MenuEvent e) {
if (fFillMenu) {
Menu m = (Menu)e.widget;
MenuItem[] items = m.getItems();
for (int i=0; i < items.length; i++) {
items[i].dispose();
}
fillMenu(m);
fFillMenu = false;
}
}
});
return menu;
}
/*
* @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
*/
@Override
public void run(IAction action) {
// Never called because we become a menu.
}
/*
* @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
*/
@Override
public void selectionChanged(IAction action, ISelection selection) {
// if the selection is an IResource, save it and enable our action
if (selection instanceof IStructuredSelection) {
fFillMenu = true;
if (fDelegateAction != action) {
fDelegateAction = action;
fDelegateAction.setMenuCreator(this);
}
//enable our menu
action.setEnabled(true);
return;
}
action.setEnabled(false);
}
/**
* Returns the launch manager
* @return the launch manager
* @since 3.3
*/
protected ILaunchManager getLaunchManager() {
return DebugPlugin.getDefault().getLaunchManager();
}
/**
* Fills the menu with applicable launch shortcuts
* @param menu The menu to fill
*/
protected void fillMenu(Menu menu) {
IStructuredSelection ss = SelectedResourceManager.getDefault().getCurrentSelection();
int accelerator = 1;
if(!ss.isEmpty()) {
try {
//try to add the shared config it the context is one.
ILaunchConfiguration config = getLaunchConfigurationManager().isSharedConfig(ss.getFirstElement());
if(config != null && config.exists() && config.supportsMode(fMode)) {
IAction action = new LaunchConfigurationAction(config, fMode, config.getName(), DebugUITools.getDefaultImageDescriptor(config), accelerator++);
ActionContributionItem item = new ActionContributionItem(action);
item.fill(menu, -1);
}
}
catch (CoreException ce) {}
}
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy