blob: a27cd0fb3062231346776514bd43629c627fc7cd [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2012, 2020 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.rtm.base.ui.editors;
import static org.eclipse.statet.rtm.base.ui.RtModelUIPlugin.RUN_R_TASK_COMMAND_ID;
import org.eclipse.core.commands.IHandler2;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.menus.CommandContributionItemParameter;
import org.eclipse.ui.services.IServiceLocator;
import org.eclipse.ui.statushandlers.StatusManager;
import org.eclipse.statet.ecommons.emf.ui.forms.EFEditor;
import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
import org.eclipse.statet.internal.rtm.base.ui.actions.RunRTaskHandler;
import org.eclipse.statet.internal.rtm.base.ui.editors.RCodeGenEditorInput;
import org.eclipse.statet.internal.rtm.base.ui.editors.RTaskGenManager;
import org.eclipse.statet.rtm.base.ui.IRtDescriptor;
import org.eclipse.statet.rtm.base.ui.RTaskSnippet;
import org.eclipse.statet.rtm.base.ui.RtModelUIPlugin;
public abstract class RTaskEditor extends EFEditor {
public static final String MAIN_PAGE_ID= "Main"; //$NON-NLS-1$
private final RTaskGenManager rCodeGenAdapter;
/**
* This creates a model editor.
*
* @param descriptor
*/
public RTaskEditor(final IRtDescriptor descriptor) {
super(descriptor);
this.rCodeGenAdapter= new RTaskGenManager(this);
getEditingDomain().getResourceSet().eAdapters().add(this.rCodeGenAdapter);
}
@Override
public IRtDescriptor getModelDescriptor() {
return (IRtDescriptor) super.getModelDescriptor();
}
@Override
protected RtFormToolkit createToolkit(final Display display) {
return new RtFormToolkit(RtModelUIPlugin.getInstance().getFormColors(display));
}
/**
* This is the method used by the framework to install your own controls.
* @generated
*/
@Override
public void addPages() {
// Only creates the other pages if there is something that can be edited
//
if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
try {
// Create a page for the selection tree view.
// { final ViewerPane viewerPane= new ViewerPane(getSite().getPage(), AbstractRTaskEditor.this) {
// @Override
// public Viewer createViewer(final Composite composite) {
// final Tree tree= new Tree(composite, SWT.MULTI);
// final TreeViewer newTreeViewer= new TreeViewer(tree);
// return newTreeViewer;
// }
// @Override
// public void requestActivation() {
// super.requestActivation();
// setCurrentViewerPane(this);
// }
// };
// viewerPane.createControl(getContainer());
//
// this.selectionViewer= (TreeViewer)viewerPane.getViewer();
// this.selectionViewer.setContentProvider(new AdapterFactoryContentProvider(this.adapterFactory));
//
// this.selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(this.adapterFactory));
// this.selectionViewer.setInput(this.editingDomain.getResourceSet());
// this.selectionViewer.setSelection(new StructuredSelection(this.editingDomain.getResourceSet().getResources().get(0)), true);
// viewerPane.setTitle(this.editingDomain.getResourceSet());
//
// new AdapterFactoryTreeEditor(this.selectionViewer.getTree(), this.adapterFactory);
//
// createContextMenuFor(this.selectionViewer);
// final int pageIndex= addPage(viewerPane.getControl());
// setPageText(pageIndex, Messages.RTaskEditor_FirstPage_label);
// }
addFormPages();
final RCodePage rCodePage= new RCodePage(this);
addPage(rCodePage, new RCodeGenEditorInput(this.rCodeGenAdapter.getCodeFragment()));
}
catch (final PartInitException e) {
StatusManager.getManager().handle(new Status(IStatus.ERROR, RtModelUIPlugin.BUNDLE_ID, 0,
"An error occured when creating the pages for the R task editor.", e ));
}
getSite().getShell().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
if (getPageCount() > 0) {
setActivePage(0);
}
}
});
}
}
protected abstract void addFormPages() throws PartInitException;
/**
* This is used to track the active viewer.
* @generated
*/
@Override
protected void pageChange(final int pageIndex) {
super.pageChange(pageIndex);
// if (this.contentOutlinePage != null) {
// handleContentOutlineSelection(this.contentOutlinePage.getSelection());
// }
}
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(final Class<T> adapterType) {
if (adapterType == RTaskSnippet.class) {
return (T) this.rCodeGenAdapter.getRTaskSnippet();
}
return super.getAdapter(adapterType);
}
// @Override
// public IContentOutlinePage createContentOutlinePage() {
// final EFRawOutlinePage page= new EFRawOutlinePage(this);
// Listen to selection so that we can handle it is a special way
// page.addSelectionChangedListener(new ISelectionChangedListener() {
// // This ensures that we handle selections correctly
// @Override
// public void selectionChanged(final SelectionChangedEvent event) {
// handleContentOutlineSelection(event.getSelection());
// }
// });
//
// return page;
// }
/**
* This deals with how we want selection in the outliner to affect the other views.
* @generated
*/
// public void handleContentOutlineSelection(final ISelection selection) {
// if (this.currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
// final Iterator<?> selectedElements= ((IStructuredSelection)selection).iterator();
// if (selectedElements.hasNext()) {
// // Get the first selected element
// final Object selectedElement= selectedElements.next();
//
// // If it's the selection viewer, then we want it to select the same selection as this selection
// if (this.currentViewerPane.getViewer() == this.selectionViewer) {
// final ArrayList<Object> selectionList= new ArrayList<Object>();
// selectionList.add(selectedElement);
// while (selectedElements.hasNext()) {
// selectionList.add(selectedElements.next());
// }
//
// // Set the selection to the widget
// this.selectionViewer.setSelection(new StructuredSelection(selectionList));
// }
// else {
// // Set the input to the widget
// if (this.currentViewerPane.getViewer().getInput() != selectedElement) {
// this.currentViewerPane.getViewer().setInput(selectedElement);
// this.currentViewerPane.setTitle(selectedElement);
// }
// }
// }
// }
// }
@Override
protected void operationFailed(final String operation, final Exception e) {
StatusManager.getManager().handle(new Status(IStatus.ERROR, RtModelUIPlugin.BUNDLE_ID, 0,
NLS.bind("An error occurred when ''{0}'' in R task editor.", operation),
e ));
}
@Override
protected void createActions(final IServiceLocator locator, final HandlerCollection handlers) {
super.createActions(locator, handlers);
final IContextService contextService= locator.getService(IContextService.class);
contextService.activateContext(RtModelUIPlugin.R_TASK_EDITOR_CONTEXT_ID);
final IHandlerService handlerService= locator.getService(IHandlerService.class);
{ final IHandler2 handler= new RunRTaskHandler(this);
handlers.add(RUN_R_TASK_COMMAND_ID, handler);
handlerService.activateHandler(RUN_R_TASK_COMMAND_ID, handler);
}
}
@Override
protected void contributeToPages(final IToolBarManager manager) {
super.contributeToPages(manager);
{ final IHandler2 handler= this.handlers.get(RUN_R_TASK_COMMAND_ID);
manager.add(new HandlerContributionItem(new CommandContributionItemParameter(getSite(),
null, RUN_R_TASK_COMMAND_ID, HandlerContributionItem.STYLE_PUSH ),
handler ));
}
}
}