Package org.jbpm.ui.editor

Source Code of org.jbpm.ui.editor.OutlineViewer$GPDEditPartFactory

package org.jbpm.ui.editor;

import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.Viewport;
import org.eclipse.draw2d.parts.ScrollableThumbnail;
import org.eclipse.draw2d.parts.Thumbnail;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartFactory;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.ui.parts.ContentOutlinePage;
import org.eclipse.gef.ui.parts.TreeViewer;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.PageBook;
import org.jbpm.ui.SharedImages;
import org.jbpm.ui.common.model.GraphElement;
import org.jbpm.ui.common.model.GroupElement;
import org.jbpm.ui.common.model.ProcessDefinition;
import org.jbpm.ui.common.model.Variable;
import org.jbpm.ui.common.part.tree.GroupElementTreeEditPart;
import org.jbpm.ui.common.part.tree.OutlineRootTreeEditPart;
import org.jbpm.ui.common.part.tree.VariableTreeEditPart;

public class OutlineViewer extends ContentOutlinePage implements ISelectionListener {
    private DesignerGraphicalEditorPart editor;
    private PageBook pageBook;
    private Control treeview;
    private Canvas overview;
    private Thumbnail thumbnail;

    //private IAction moveItemUpAction;
    private IAction showOverviewAction;
    private IAction showTreeviewAction;

    public OutlineViewer(DesignerGraphicalEditorPart editor) {
        super(new TreeViewer());
        this.editor = editor;
    }

    @Override
    public void createControl(Composite parent) {
        createToolBar();
        createPageBook(parent);
        getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(this);
    }

    @Override
    public void dispose() {
        if (null != thumbnail) {
            thumbnail.deactivate();
        }
        getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(this);
        super.dispose();
    }

    public void selectionChanged(IWorkbenchPart part, ISelection selection) {
        if (!(selection instanceof IStructuredSelection)) {
            return;
        }
        IStructuredSelection structuredSelection = (IStructuredSelection) selection;
        Object selectedObject = structuredSelection.getFirstElement();
        if (!(selectedObject instanceof EditPart))
            return;
        EditPart source = (EditPart) selectedObject;
        select((GraphElement) source.getModel());
    }
   
    public void select(GraphElement element) {
        EditPart target = (EditPart) getViewer().getEditPartRegistry().get(element);
        if (target != null) {
            getViewer().select(target);
        }
    }

    private void createToolBar() {
        IToolBarManager tbm = getSite().getActionBars().getToolBarManager();
        //createMoveItemUpAction(tbm);
        createShowOverviewAction(tbm);
        createShowTreeviewAction(tbm);
    }

    private void createShowOverviewAction(IToolBarManager tbm) {
        showOverviewAction = new Action() {
            @Override
            public void run() {
                showOverview();
            }
        };
        showOverviewAction.setImageDescriptor(SharedImages.getImageDescriptor("icons/overview.gif"));
        tbm.add(showOverviewAction);
    }

    /*
    private GraphElement getModelSelection() {
        AbstractTreeEditPart selectedEditPart = (AbstractTreeEditPart) ((IStructuredSelection) getViewer().getSelection()).getFirstElement();
        if (selectedEditPart == null) {
            return null;
        }
        return (GraphElement) selectedEditPart.getModel();
    }
    private void updateUpButton() {
        GraphElement selection = getModelSelection();
        if (selection == null || selection.getParent() == null) {
            moveItemUpAction.setEnabled(false);
        } else {
            List<? extends GraphElement> children = selection.getParent().getChildren(selection.getClass());
            moveItemUpAction.setEnabled(children.indexOf(selection) > 0);
        }
    }
    private void createMoveItemUpAction(IToolBarManager tbm) {
        getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                updateUpButton();
            }
        });
        moveItemUpAction = new Action() {
            @Override
            public void run() {
                IStructuredSelection structuredSelection = (IStructuredSelection) getViewer().getSelection();
                AbstractTreeEditPart selectedEditPart = (AbstractTreeEditPart) structuredSelection.getFirstElement();
                GraphElement selection = (GraphElement) selectedEditPart.getModel();
                List<? extends GraphElement> children = selection.getParent().getChildren(selection.getClass());
                int index = children.indexOf(selection);
                selection.getParent().swapChilds(selection, children.get(index-1));
                getViewer().select(selectedEditPart);
            }
        };
        moveItemUpAction.setEnabled(false);
        moveItemUpAction.setImageDescriptor(SharedImages.getImageDescriptor("icons/up.gif"));
        tbm.add(moveItemUpAction);
    }
    */

    private void showOverview() {
        showTreeviewAction.setChecked(false);
        showOverviewAction.setChecked(true);
        pageBook.showPage(overview);
        thumbnail.setVisible(true);
    }

    private void createShowTreeviewAction(IToolBarManager tbm) {
        showTreeviewAction = new Action() {
            @Override
            public void run() {
                showTreeview();
            }
        };
        showTreeviewAction.setImageDescriptor(SharedImages.getImageDescriptor("icons/treeview.gif"));
        tbm.add(showTreeviewAction);
    }

    private void showTreeview() {
        showTreeviewAction.setChecked(true);
        showOverviewAction.setChecked(false);
        pageBook.showPage(treeview);
        thumbnail.setVisible(false);
    }

    private void createPageBook(Composite parent) {
        pageBook = new PageBook(parent, SWT.NONE);
        createTreeview(pageBook);
        createOverview(pageBook);
        showTreeview();
    }

    private void createOverview(Composite parent) {
        ScalableFreeformRootEditPart rootEditPart = (ScalableFreeformRootEditPart) editor.getGraphicalViewer().getRootEditPart();
        overview = new Canvas(parent, SWT.NONE);
        LightweightSystem lws = new LightweightSystem(overview);
        thumbnail = new ScrollableThumbnail((Viewport) rootEditPart.getFigure());
        thumbnail.setBorder(new MarginBorder(3));
        thumbnail.setSource(rootEditPart.getLayer(LayerConstants.PRINTABLE_LAYERS));
        lws.setContents(thumbnail);
    }

    private void createTreeview(Composite parent) {
        treeview = getViewer().createControl(parent);
        getSite().setSelectionProvider(getViewer());
        //getViewer().setContextMenu(createContextMenu());
        getViewer().setEditDomain(editor.getEditDomain());
        getViewer().setEditPartFactory(new GPDEditPartFactory());
        getViewer().setContents(editor.getEditor().getDefinition());
    }

    /*
    private MenuManager createContextMenu() {
        MenuManager menuManager = new OutlineContextMenuProvider(getViewer());
        getSite().registerContextMenu("org.jbpm.ui.outline.contextmenu", menuManager, getViewer());
        return menuManager;
    }
    private class OutlineContextMenuProvider extends ContextMenuProvider {

        public OutlineContextMenuProvider(EditPartViewer viewer) {
            super(viewer);
        }

        @Override
        public void buildContextMenu(IMenuManager menu) {
            menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
        }
    }
    */


    private static class GPDEditPartFactory implements EditPartFactory {
        private boolean firstTime = true;

        public EditPart createEditPart(EditPart context, Object model) {
            if (firstTime && model instanceof ProcessDefinition) {
                firstTime = false;
                EditPart rootEditPart = new OutlineRootTreeEditPart();
                rootEditPart.setModel(model);
                return rootEditPart;
            }
            GraphElement element = (GraphElement) model;
            if (element instanceof Variable) {
                return new VariableTreeEditPart((Variable) element);
            }
            if (element instanceof GroupElement) {
                return new GroupElementTreeEditPart((GroupElement) element);
            }
            return element.getTypeDefinition().createTreeEditPart(element);
        }
    }

    public CommandStack getCommandStack() {
        return editor.getCommandStack();
    }

    @Override
    public Control getControl() {
        return pageBook;
    }


}
TOP

Related Classes of org.jbpm.ui.editor.OutlineViewer$GPDEditPartFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.