/*******************************************************************************
* Copyright (c) 2011 Red Hat, Inc.
* All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.bpmn2.modeler.ui.views;
import org.eclipse.bpmn2.BaseElement;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DragSourceAdapter;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
/**
* This sample class demonstrates how to plug-in a new workbench view. The view shows data obtained from the model. The
* sample creates a dummy model on the fly, but a real implementation would connect to the model available either in
* this or another plug-in (e.g. the workspace). The view is connected to the model using a content provider.
* <p>
* The view uses a label provider to define how model objects should be presented in the view. Each view can present the
* same model objects using different labels and icons, if needed. Alternatively, a single label provider can be shared
* between views in order to ensure that objects of the same type are presented in the same way everywhere.
* <p>
*/
public class BPMN2ModelView extends ViewPart {
private final class BpmnModelDragSourceLisener extends DragSourceAdapter {
@Override
public void dragStart(DragSourceEvent event) {
if (((IStructuredSelection) viewer.getSelection()).getFirstElement() instanceof TreeObject) {
IStructuredSelection iStructuredSelection = (IStructuredSelection) viewer.getSelection();
TreeObject treeObject = (TreeObject) iStructuredSelection.getFirstElement();
BaseElement baseElement = treeObject.getBaseElement();
LocalSelectionTransfer.getTransfer().setSelection(new StructuredSelection(baseElement));
}
}
}
/**
* The ID of the view as specified by the extension.
*/
public static final String ID = "org.eclipse.bpmn2.modeler.ui.views.BPMN2ModelView";
private TreeViewer viewer;
private ISelectionListener listener;
/**
* The constructor.
*/
public BPMN2ModelView() {
}
/**
* This is a callback that will allow us to create the viewer and initialize it.
*/
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
final ViewContentProvider contentProvider = new ViewContentProvider();
viewer.setContentProvider(contentProvider);
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setInput(getViewSite());
viewer.addDragSupport(DND.DROP_MOVE | DND.DROP_COPY, new Transfer[] { LocalSelectionTransfer.getTransfer() },
new BpmnModelDragSourceLisener());
listener = new BpmnModelViewerSelectionListener(viewer);
getSite().getPage().addSelectionListener(listener);
// Create the help context id for the viewer's control
PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), "org.eclipse.bpmn2.modeler.ui.viewer");
}
@Override
public void dispose() {
getSite().getPage().removeSelectionListener(listener);
super.dispose();
}
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
viewer.getControl().setFocus();
}
}