/*******************************************************************************
* Copyright (c) 2011, 2013 Wind River Systems, Inc. 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:
* Wind River Systems - initial API and implementation
* Tobias Schwarz (Wind River) - [368243] [UI] Allow dynamic new wizard contributions
*******************************************************************************/
package org.eclipse.tcf.te.ui.views.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.tcf.te.ui.help.IContextHelpIds;
import org.eclipse.tcf.te.ui.interfaces.ImageConsts;
import org.eclipse.tcf.te.ui.views.interfaces.IUIConstants;
import org.eclipse.tcf.te.ui.views.nls.Messages;
import org.eclipse.tcf.te.ui.wizards.newWizard.NewWizardRegistry;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.internal.actions.CommandAction;
import org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction;
import org.eclipse.ui.navigator.CommonActionProvider;
import org.eclipse.ui.navigator.ICommonActionExtensionSite;
import org.eclipse.ui.navigator.ICommonMenuConstants;
import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
import org.eclipse.ui.navigator.WizardActionGroup;
import org.eclipse.ui.wizards.IWizardDescriptor;
/**
* Action provider implementation providing the "New >" content menu
* content.
*/
@SuppressWarnings("restriction")
public class NewActionProvider extends CommonActionProvider {
// Reference to the action showing the "Other..." dialog (context menu)
private CommandAction newWizardCommandAction = null;
// Reference to the action showing the "Other..." dialog (toolbar)
private CommandAction newWizardCommandActionToolbar = null;
// Reference to the action group managing the context sensitive new wizards
private WizardActionGroup newWizardActionGroup = null;
/* (non-Javadoc)
* @see org.eclipse.ui.navigator.CommonActionProvider#init(org.eclipse.ui.navigator.ICommonActionExtensionSite)
*/
@Override
public void init(ICommonActionExtensionSite site) {
super.init(site);
if (site.getViewSite() instanceof ICommonViewerWorkbenchSite) {
// To initialize the actions, the workbench window instance is required
IWorkbenchWindow window = ((ICommonViewerWorkbenchSite)site.getViewSite()).getWorkbenchWindow();
// Initialize the actions
newWizardCommandAction = new CommandAction(window, "org.eclipse.tcf.te.ui.command.newWizards"); //$NON-NLS-1$
newWizardCommandAction.setImageDescriptor(null);
newWizardCommandAction.setDisabledImageDescriptor(null);
newWizardCommandAction.setText(Messages.NewActionProvider_NewWizardCommandAction_label);
newWizardCommandAction.setToolTipText(Messages.NewActionProvider_NewWizardCommandAction_tooltip);
window.getWorkbench().getHelpSystem().setHelp(newWizardCommandAction, IContextHelpIds.NEW_TARGET_WIZARD);
newWizardCommandActionToolbar = new CommandAction(window, "org.eclipse.tcf.te.ui.command.newWizards"); //$NON-NLS-1$
newWizardCommandActionToolbar.setImageDescriptor(org.eclipse.tcf.te.ui.activator.UIPlugin.getImageDescriptor(ImageConsts.NEW_TARGET_WIZARD_ENABLED));
newWizardCommandActionToolbar.setDisabledImageDescriptor(org.eclipse.tcf.te.ui.activator.UIPlugin.getImageDescriptor(ImageConsts.NEW_TARGET_WIZARD_DISABLED));
newWizardCommandActionToolbar.setText(Messages.NewActionProvider_NewWizardCommandAction_label);
newWizardCommandActionToolbar.setToolTipText(Messages.NewActionProvider_NewWizardCommandAction_tooltip);
window.getWorkbench().getHelpSystem().setHelp(newWizardCommandActionToolbar, IContextHelpIds.NEW_TARGET_WIZARD);
newWizardActionGroup = new WizardActionGroup(window,
NewWizardRegistry.getInstance(),
WizardActionGroup.TYPE_NEW,
site.getContentService());
}
}
/* (non-Javadoc)
* @see org.eclipse.ui.actions.ActionGroup#dispose()
*/
@Override
public void dispose() {
if (newWizardCommandAction != null) {
newWizardCommandAction.dispose();
newWizardCommandAction = null;
}
if (newWizardActionGroup != null) {
newWizardActionGroup.dispose();
newWizardActionGroup = null;
}
super.dispose();
}
/* (non-Javadoc)
* @see org.eclipse.ui.actions.ActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager)
*/
@Override
public void fillContextMenu(IMenuManager menu) {
// If none of the actions got created, there is nothing to do here
if (newWizardCommandAction == null && newWizardActionGroup == null) {
return;
}
// Create the new sub menu
IMenuManager newMenu = new MenuManager(Messages.NewActionProvider_NewMenu_label,
org.eclipse.tcf.te.ui.activator.UIPlugin.getImageDescriptor(ImageConsts.NEW_TARGET_WIZARD_ENABLED),
IUIConstants.ID_EXPLORER + ".menu.new"); //$NON-NLS-1$
// Add the context sensitive wizards (commonWizard element)
if (newWizardActionGroup != null) {
newWizardActionGroup.setContext(getContext());
newWizardActionGroup.fillContextMenu(newMenu);
}
IWorkbenchWindow window = ((ICommonViewerWorkbenchSite)getActionSite().getViewSite()).getWorkbenchWindow();
for (IWizardDescriptor wizard : NewWizardRegistry.getInstance().getCommonWizards(getContext().getSelection())) {
IAction action = new WizardShortcutAction(window, wizard);
newMenu.add(action);
}
// Add the standard additions marker
newMenu.add(new Separator(ICommonMenuConstants.GROUP_ADDITIONS));
// Add the "Other..." dialog action
if (newWizardCommandAction != null) {
newMenu.add(new Separator());
newMenu.add(newWizardCommandAction);
}
// The menu will be appended after the GROUP_NEW group.
menu.insertAfter(ICommonMenuConstants.GROUP_NEW, newMenu);
}
/* (non-Javadoc)
* @see org.eclipse.ui.actions.ActionGroup#fillActionBars(org.eclipse.ui.IActionBars)
*/
@Override
public void fillActionBars(IActionBars actionBars) {
// If none of the actions got created, there is nothing to do here
if (newWizardCommandActionToolbar == null) {
return;
}
// Get the toolbar manager
IToolBarManager toolbar = actionBars.getToolBarManager();
// Check for the newWizard action in the toolbar. If found,
// drop out immediately to avoid adding the items to the toolbar
// again and again
if (toolbar.find("org.eclipse.tcf.te.ui.command.newWizards") != null) { //$NON-NLS-1$
return;
}
// Add the items to the toolbar
toolbar.insertAfter(ICommonMenuConstants.GROUP_NEW, newWizardCommandActionToolbar);
}
}