org.eclipse.pde.emfforms.internal.editor.EmfContentOutlinePage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.pde.emfforms.internal.editor.EmfContentOutlinePage.java

Source

/**
 * Copyright (c) 2009 Anyware Technologies 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:
 *     Anyware Technologies - initial API and implementation
 *
 * $Id: EmfContentOutlinePage.java,v 1.1 2009/09/12 12:57:54 bcabe Exp $
 */
package org.eclipse.pde.emfforms.internal.editor;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.ui.dnd.*;
import org.eclipse.emf.edit.ui.provider.*;
import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.pde.emfforms.editor.EmfFormEditor;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;

public class EmfContentOutlinePage extends ContentOutlinePage {

    private EmfFormEditor<? extends EObject> editor;

    /**
     * This is the content outline page's viewer.
     */
    protected TreeViewer contentOutlineViewer;

    protected IStatusLineManager contentOutlineStatusLineManager;

    private Object viewerInput;

    private ViewerComparator viewerComparator;

    public EmfContentOutlinePage(EmfFormEditor<? extends EObject> editor) {
        this.editor = editor;
    }

    @Override
    public void createControl(Composite parent) {
        super.createControl(parent);
        contentOutlineViewer = getTreeViewer();
        contentOutlineViewer.addSelectionChangedListener(this);

        // Set up the tree viewer.
        contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(editor.getAdapterFactory()));
        contentOutlineViewer.setLabelProvider(
                new DecoratingLabelProvider(new AdapterFactoryLabelProvider(editor.getAdapterFactory()),
                        PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
        contentOutlineViewer.setInput(viewerInput);
        contentOutlineViewer.setComparator(viewerComparator);
        contentOutlineViewer.addFilter(new ViewerFilter() {
            @Override
            public boolean select(Viewer viewer, Object parentElement, Object element) {
                return (!(AdapterFactoryEditingDomain.unwrap(element) instanceof String));
            }
        });

        // Make sure our popups work.
        createContextMenuFor(contentOutlineViewer);

        if (!editor.getEditingDomain().getResourceSet().getResources().isEmpty()) {
            // Select the root object in the view.
            contentOutlineViewer.setSelection(
                    new StructuredSelection(editor.getEditingDomain().getResourceSet().getResources().get(0)),
                    true);
        }

    }

    @Override
    public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager,
            IStatusLineManager statusLineManager) {
        super.makeContributions(menuManager, toolBarManager, statusLineManager);
        contentOutlineStatusLineManager = statusLineManager;
    }

    @Override
    public void setActionBars(IActionBars actionBars) {
        super.setActionBars(actionBars);
        if (editor.getActionBarContributor() != null) {
            editor.getActionBarContributor().shareGlobalActions(this, actionBars);
        }
    }

    /**
     * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
     */
    protected void createContextMenuFor(StructuredViewer viewer) {
        MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
        contextMenu.add(new Separator("additions")); //$NON-NLS-1$
        contextMenu.setRemoveAllWhenShown(true);
        // TODO
        // contextMenu.addMenuListener(this);
        Menu menu = contextMenu.createContextMenu(viewer.getControl());
        viewer.getControl().setMenu(menu);
        editor.getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));

        int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
        Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
        viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
        viewer.addDropSupport(dndOperations, transfers,
                new EditingDomainViewerDropAdapter(editor.getEditingDomain(), viewer));
    }

    public void setViewerInput(Object viewerInput) {
        this.viewerInput = viewerInput;
    }

    public void setViewerComparator(ViewerComparator comparator) {
        this.viewerComparator = comparator;
    }

    public TreeViewer getViewer() {
        return contentOutlineViewer;
    }

}