org.eclipse.emfforms.internal.swt.treemasterdetail.defaultprovider.DefaultMenuProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.emfforms.internal.swt.treemasterdetail.defaultprovider.DefaultMenuProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2011-2015 EclipseSource Muenchen GmbH 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:
 * Johannes Faltermeier - initial API and implementation
 ******************************************************************************/
package org.eclipse.emfforms.internal.swt.treemasterdetail.defaultprovider;

import java.util.Collection;
import java.util.Collections;

import org.eclipse.emf.ecp.common.spi.ChildrenDescriptorCollector;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emfforms.spi.swt.treemasterdetail.DeleteActionBuilder;
import org.eclipse.emfforms.spi.swt.treemasterdetail.MenuProvider;
import org.eclipse.emfforms.spi.swt.treemasterdetail.TreeMasterDetailMenuListener;
import org.eclipse.emfforms.spi.swt.treemasterdetail.actions.MasterDetailAction;
import org.eclipse.emfforms.spi.swt.treemasterdetail.util.CreateElementCallback;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Menu;

/**
 * The default menu provider.
 *
 * @author Johannes Faltermeier
 *
 */
public final class DefaultMenuProvider implements MenuProvider {

    private ChildrenDescriptorCollector childrenDescriptorCollector;
    private Collection<MasterDetailAction> rightClickActions;
    private CreateElementCallback createElementCallback;
    private DeleteActionBuilder deleteActionBuilder;

    /**
     * Default constructor.
     */
    public DefaultMenuProvider() {
        childrenDescriptorCollector = new ChildrenDescriptorCollector();
        rightClickActions = Collections.<MasterDetailAction>emptySet();
        createElementCallback = new CreateElementCallback() {
            @Override
            public boolean beforeCreateElement(Object newElement) {
                return true;
            }
        };
        deleteActionBuilder = new DefaultDeleteActionBuilder();
    }

    /**
     * Constructor.
     *
     * @param childrenDescriptorCollector the child description collector to use
     * @param rightClickActions the right click actions to use
     * @param createElementCallback the create element callback
     * @param deleteActionBuilder the delete action which will be added to the context menu
     */
    public DefaultMenuProvider(ChildrenDescriptorCollector childrenDescriptorCollector,
            Collection<MasterDetailAction> rightClickActions, CreateElementCallback createElementCallback,
            DeleteActionBuilder deleteActionBuilder) {
        this.childrenDescriptorCollector = childrenDescriptorCollector;
        this.rightClickActions = rightClickActions;
        this.createElementCallback = createElementCallback;
        this.deleteActionBuilder = deleteActionBuilder;
    }

    @Override
    public Menu getMenu(TreeViewer treeViewer, EditingDomain editingDomain) {
        final MenuManager menuMgr = new MenuManager();
        menuMgr.setRemoveAllWhenShown(true);
        menuMgr.addMenuListener(new TreeMasterDetailMenuListener(childrenDescriptorCollector, menuMgr, treeViewer,
                editingDomain, rightClickActions, createElementCallback, deleteActionBuilder));
        final Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
        return menu;
    }

    /**
     *
     * @param deleteActionBuilder the {@link DeleteActionBuilder}
     */
    public void setDeleteAction(DeleteActionBuilder deleteActionBuilder) {
        this.deleteActionBuilder = deleteActionBuilder;
    }

    /**
     *
     * @param createElementCallback the {@link CreateElementCallback}
     */
    public void setCreateElementCallback(CreateElementCallback createElementCallback) {
        this.createElementCallback = createElementCallback;
    }

    /**
     * 
     * @param rightClickActions the {@link MasterDetailAction actions}
     */
    public void setRightClickAction(Collection<MasterDetailAction> rightClickActions) {
        this.rightClickActions = rightClickActions;
    }
}