Package org.fusesource.ide.camel.editor.editor

Source Code of org.fusesource.ide.camel.editor.editor.RiderEditorContextMenuProvider

/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by 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.fusesource.ide.camel.editor.editor;

import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.fusesource.ide.camel.editor.handlers.AutoLayoutAction;
import org.fusesource.ide.camel.editor.handlers.DeleteNodeAction;
import org.fusesource.ide.camel.editor.handlers.DeleteRouteAction;
import org.fusesource.ide.camel.editor.provider.generated.AddNodeMenuFactory;
import org.fusesource.ide.camel.model.AbstractNode;
import org.fusesource.ide.camel.model.RouteSupport;
import org.fusesource.ide.camel.model.generated.Route;


/**
* @author lhein
*/
public class RiderEditorContextMenuProvider extends ContextMenuProvider {

  /** The editor's action registry. */
  private ActionRegistry actionRegistry;
  private final RiderDesignEditor editor;
  private final INodeViewer nodeViewer;

  /**
   * Instantiate a new menu context provider for the specified EditPartViewer
   * and ActionRegistry.
   *
   * @param editor
   * @param viewer  the editor's graphical viewer
   * @param registry  the editor's action registry
   * @throws IllegalArgumentException if registry is <tt>null</tt>.
   */
  public RiderEditorContextMenuProvider(RiderDesignEditor editor, INodeViewer nodeViewer, EditPartViewer viewer, ActionRegistry registry) {
    super(viewer);
    this.editor = editor;
    this.nodeViewer = nodeViewer;
    if (registry == null) {
      throw new IllegalArgumentException();
    }
    actionRegistry = registry;
  }

  public ActionRegistry getActionRegistry() {
    return actionRegistry;
  }

  public RiderDesignEditor getEditor() {
    return editor;
  }

  public INodeViewer getNodeViewer() {
    return nodeViewer;
  }

  /**
   * Called when the context menu is about to show. Actions,
   * whose state is enabled, will appear in the context menu.
   * @see org.eclipse.gef.ContextMenuProvider#buildContextMenu(org.eclipse.jface.action.IMenuManager)
   */
  @Override
  public void buildContextMenu(IMenuManager menu) {
    // add the delete route if a route is selected
    AbstractNode node = nodeViewer.getSelectedNode();
    if (node == null) {
      // lets choose the root container
      node = editor.getModel();
    }

    if (node != null && node instanceof Route) {
      DeleteRouteAction deleteRouteAction = new DeleteRouteAction();
      deleteRouteAction.setSelectedRoute((RouteSupport)node);
      menu.add(deleteRouteAction);
    }

    // add a separator
    menu.add(new Separator());

    final AddNodeMenuFactory factory = new AddNodeMenuFactory();
    final MenuManager subMenu = new MenuManager("Add", factory.getImageDescriptor("add.png"), "org.fusesource.ide.actions.add");
    menu.add(subMenu);

    subMenu.setRemoveAllWhenShown(true);
    subMenu.addMenuListener(new IMenuListener() {

      @Override
      public void menuAboutToShow(IMenuManager manager) {
        AbstractNode node = nodeViewer.getSelectedNode();
        if (node == null) {
          // lets choose the root container
          node = editor.getModel();
        }
        boolean enabled = node != null;
        subMenu.setVisible(enabled);

        factory.fillMenu(editor, subMenu, node);
      }
    });
    // add the delete item
    if (node != null && node instanceof Route == false) {
      DeleteNodeAction deleteNodeAction = new DeleteNodeAction();
      deleteNodeAction.setSelectedNode(node);
      menu.add(deleteNodeAction);
    }

    // add a separator
    menu.add(new Separator());
    // auto layout action
    menu.add(new AutoLayoutAction());
  }

  /**
   * retrieves an action for a given id
   *
   * @param actionId  the action id
   * @return  the action or null if not found
   */
  private IAction getAction(String actionId) {
    return actionRegistry.getAction(actionId);
  }
}
TOP

Related Classes of org.fusesource.ide.camel.editor.editor.RiderEditorContextMenuProvider

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.