blob: 7827e944ff166e4d58a49947cb2e01e2d2360446 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2006, 2019 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.internal.r.console.ui.page;
import static org.eclipse.statet.ecommons.ui.actions.UIActions.ADDITIONS_GROUP_ID;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.help.IContextProvider;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.swt.events.HelpEvent;
import org.eclipse.swt.events.HelpListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.IConsoleView;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;
import org.eclipse.ui.services.IServiceLocator;
import org.eclipse.statet.jcommons.collections.ImCollections;
import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
import org.eclipse.statet.ecommons.ui.util.UIAccess;
import org.eclipse.statet.internal.r.console.ui.Messages;
import org.eclipse.statet.nico.core.runtime.IRemoteEngineController;
import org.eclipse.statet.nico.ui.NicoUI;
import org.eclipse.statet.nico.ui.console.NIConsole;
import org.eclipse.statet.nico.ui.console.NIConsolePage;
import org.eclipse.statet.r.console.core.RConsoleTool;
import org.eclipse.statet.r.console.core.RProcess;
import org.eclipse.statet.r.console.ui.IRConsoleHelpContextIds;
import org.eclipse.statet.r.console.ui.RConsole;
import org.eclipse.statet.r.console.ui.tools.ChangeWorkingDirectoryWizard;
import org.eclipse.statet.r.core.RCodeStyleSettings;
import org.eclipse.statet.r.core.pkgmanager.RPkgUtils;
import org.eclipse.statet.r.ui.RUIHelp;
import org.eclipse.statet.r.ui.editors.IRSourceEditor;
import org.eclipse.statet.r.ui.pkgmanager.OpenRPkgManagerHandler;
import org.eclipse.statet.r.ui.pkgmanager.StartAction;
import org.eclipse.statet.r.ui.rhelp.OpenRHelpHandler;
import org.eclipse.statet.rj.renv.core.REnv;
import org.eclipse.statet.rj.renv.runtime.RPkgManager;
public class RConsolePage extends NIConsolePage {
private IContextProvider helpContextProvider;
public RConsolePage(final RConsole console, final IConsoleView view) {
super(console, view);
}
@Override
public RConsole getConsole() {
return (RConsole) super.getConsole();
}
@Override
public void createControl(final Composite parent) {
super.createControl(parent);
}
@Override
protected RInputConfigurator createInputEditorConfigurator() {
return new RInputConfigurator(this, (IRSourceEditor) getInputGroup());
}
@Override
protected RConsoleEditor createInputGroup() {
return new RConsoleEditor(this);
}
@Override
protected void initActions(final IServiceLocator serviceLocator, final HandlerCollection handlers) {
super.initActions(serviceLocator, handlers);
final IContextService contextService= serviceLocator.getService(IContextService.class);
contextService.activateContext("org.eclipse.statet.r.actionSets.RSessionTools"); //$NON-NLS-1$
this.helpContextProvider= RUIHelp.createEnrichedRHelpContextProvider(
getInputGroup().getViewer(), IRConsoleHelpContextIds.R_CONSOLE );
getInputGroup().getViewer().getTextWidget().addHelpListener(new HelpListener() {
@Override
public void helpRequested(final HelpEvent e) {
PlatformUI.getWorkbench().getHelpSystem().displayHelp(RConsolePage.this.helpContextProvider.getContext(null));
}
});
}
@Override
protected void contributeToActionBars(final IServiceLocator serviceLocator,
final IActionBars actionBars, final HandlerCollection handlers) {
super.contributeToActionBars(serviceLocator, actionBars, handlers);
final IMenuManager menuManager= actionBars.getMenuManager();
menuManager.appendToGroup(NICO_CONTROL_MENU_ID,
new CommandContributionItem(new CommandContributionItemParameter(
getSite(), null, NicoUI.PAUSE_COMMAND_ID, null,
null, null, null,
null, null, null,
CommandContributionItem.STYLE_CHECK, null, false)));
if (getConsole().getProcess().isProvidingFeatureSet(IRemoteEngineController.FEATURE_SET_ID)) {
menuManager.appendToGroup(NICO_CONTROL_MENU_ID,
new CommandContributionItem(new CommandContributionItemParameter(
getSite(), null, NicoUI.DISCONNECT_COMMAND_ID, null,
null, null, null,
null, null, null,
CommandContributionItem.STYLE_PUSH, null, false)));
menuManager.appendToGroup(NICO_CONTROL_MENU_ID,
new CommandContributionItem(new CommandContributionItemParameter(
getSite(), null, NicoUI.RECONNECT_COMMAND_ID, null,
null, null, null,
null, null, null,
CommandContributionItem.STYLE_PUSH, null, false)));
}
menuManager.insertBefore(ADDITIONS_GROUP_ID, new Separator("workspace")); //$NON-NLS-1$
menuManager.appendToGroup("workspace", //$NON-NLS-1$
new ChangeWorkingDirectoryWizard.ChangeAction(this));
menuManager.insertBefore(ADDITIONS_GROUP_ID, new Separator("view")); //$NON-NLS-1$
final RProcess process= (RProcess) getConsole().getProcess();
final REnv rEnv= process.getREnv();
if (process.isProvidingFeatureSet(RConsoleTool.R_DATA_FEATURESET_ID) && rEnv != null) {
menuManager.appendToGroup(NICO_CONTROL_MENU_ID,
new CommandContributionItem(new CommandContributionItemParameter(
getSite(), null, "org.eclipse.statet.r.commands.OpenRPkgManager", null, //$NON-NLS-1$
null, null, null,
"Open Package Manager", "P", null,
CommandContributionItem.STYLE_PUSH, null, false )));
final MenuManager rEnvMenu= new MenuManager("R &Environment");
menuManager.appendToGroup(NICO_CONTROL_MENU_ID, rEnvMenu);
rEnvMenu.add(new CommandContributionItem(new CommandContributionItemParameter(
getSite(), null, "org.eclipse.statet.r.commands.OpenRPkgManager", null, //$NON-NLS-1$
null, null, null,
"Open Package Manager", "P", null,
CommandContributionItem.STYLE_PUSH, null, false )));
if (RPkgUtils.DEBUG) {
rEnvMenu.add(new HandlerContributionItem(new CommandContributionItemParameter(
getSite(), null, HandlerContributionItem.NO_COMMAND_ID, null,
null, null, null,
"Open Package Manager - Clean", null, null, //$NON-NLS-1$
CommandContributionItem.STYLE_PUSH, null, false ),
new OpenRPkgManagerHandler() {
@Override
protected int getRequestFlags() {
return RPkgManager.RESET;
}
}));
rEnvMenu.add(new HandlerContributionItem(new CommandContributionItemParameter(
getSite(), null, HandlerContributionItem.NO_COMMAND_ID, null,
null, null, null,
"Open Package Manager - Install 'zic'", null, null, //$NON-NLS-1$
CommandContributionItem.STYLE_PUSH, null, false ),
new OpenRPkgManagerHandler() {
@Override
protected StartAction getStartAction() {
return new StartAction(StartAction.INSTALL, ImCollections.newList("zic")); //$NON-NLS-1$
}
}));
}
rEnvMenu.add(new HandlerContributionItem(new CommandContributionItemParameter(
getSite(), null, HandlerContributionItem.NO_COMMAND_ID, null,
null, null, null,
"Open R Help", "H", null,
CommandContributionItem.STYLE_PUSH, null, false ),
new OpenRHelpHandler(rEnv, process, true) ));
rEnvMenu.add(new Separator());
rEnvMenu.add(new CommandContributionItem(new CommandContributionItemParameter(
getSite(), null, "org.eclipse.statet.r.commands.UpdateREnvIndex", null, //$NON-NLS-1$
null, null, null,
"Update &index (changes)", null, null,
CommandContributionItem.STYLE_PUSH, null, false )));
rEnvMenu.add(new CommandContributionItem(new CommandContributionItemParameter(
getSite(), null, "org.eclipse.statet.r.commands.ResetREnvIndex", null, //$NON-NLS-1$
null, null, null,
"Reset inde&x (completely)", null, null,
CommandContributionItem.STYLE_PUSH, null, false)));
}
}
@Override
protected void fillOutputContextMenu(final IMenuManager menuManager) {
super.fillOutputContextMenu(menuManager);
menuManager.appendToGroup("view", //$NON-NLS-1$
new CommandContributionItem(new CommandContributionItemParameter(
getSite(), null, NIConsole.ADJUST_OUTPUT_WIDTH_COMMAND_ID, null,
null, null, null,
Messages.AdjustWidth_label, Messages.AdjustWidth_mnemonic, null,
CommandContributionItem.STYLE_PUSH, null, false )));
}
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(final Class<T> adapterType) {
if (adapterType == IContextProvider.class) {
return (T) this.helpContextProvider;
}
if (adapterType == REnv.class) {
return (T) getTool().getAdapter(REnv.class);
}
return super.getAdapter(adapterType);
}
@Override
protected void handleSettingsChanged(final Set<String> groupIds, final Map<String, Object> options) {
super.handleSettingsChanged(groupIds, options);
if (groupIds.contains(RCodeStyleSettings.INDENT_GROUP_ID)
&& UIAccess.isOkToUse(getOutputViewer())) {
final RCodeStyleSettings codeStyle= (getConsole()).getRCodeStyle();
if (codeStyle.isDirty()) {
getOutputViewer().setTabWidth(codeStyle.getTabSize());
}
}
}
@Override
protected void collectContextMenuPreferencePages(final List<String> pageIds) {
super.collectContextMenuPreferencePages(pageIds);
pageIds.add("org.eclipse.statet.r.preferencePages.REditorOptions"); //$NON-NLS-1$
pageIds.add("org.eclipse.statet.r.preferencePages.RTextStyles"); //$NON-NLS-1$
}
}