com.synflow.ngDesign.ui.internal.handlers.NewMenuHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.synflow.ngDesign.ui.internal.handlers.NewMenuHandler.java

Source

/*******************************************************************************
 * Copyright (c) 2015 Synflow SAS.
 * 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:
 *    Matthieu Wipliez - initial API and implementation and/or initial documentation
 *******************************************************************************/
package com.synflow.ngDesign.ui.internal.handlers;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionContext;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.navigator.INavigatorContentService;

import com.synflow.ngDesign.ui.internal.navigator.ProjectExplorer;
import com.synflow.ngDesign.ui.internal.navigator.ProjectExplorerNewActionProvider;

/**
 * This class defines a handler for "new" menu. Shows a New menu using the ProjectExplorerNewActionProvider.
 * 
 * @author Matthieu Wipliez
 *
 */
public class NewMenuHandler extends AbstractHandler {

    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
        IWorkbenchPart part = HandlerUtil.getActivePartChecked(event);
        IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
        if (ProjectExplorer.VIEW_ID.equals(part.getSite().getId())) {
            ProjectExplorer explorer = (ProjectExplorer) part.getAdapter(ProjectExplorer.class);
            INavigatorContentService service = explorer.getNavigatorContentService();

            // creates and fills a menu manager
            MenuManager menuManager = new MenuManager();
            ProjectExplorerNewActionProvider provider = new ProjectExplorerNewActionProvider();

            ISelection selection = HandlerUtil.getCurrentSelectionChecked(event);
            provider.setContext(new ActionContext(selection));
            provider.init(window, service);
            provider.fillContextMenu(menuManager);

            // create context menu and show it
            TreeViewer commonViewer = explorer.getCommonViewer();
            showMenu(menuManager, commonViewer.getTree());
        }

        return null;
    }

    private void showMenu(MenuManager menuManager, Tree tree) {
        Menu menu = menuManager.createContextMenu(tree);

        TreeItem[] items = tree.getSelection();
        Rectangle rect;
        if (items.length > 0) {
            rect = items[0].getBounds();
        } else {
            rect = new Rectangle(41, 0, 0, 18);
        }
        Point location = tree.toDisplay(rect.x, rect.y + rect.height);
        menu.setLocation(location);

        menu.setVisible(true);
    }

}