use of org.knime.workbench.editor2.actions.AddAnnotationAction in project knime-core by knime.
the class WorkflowContextMenuProvider method buildContextMenu.
/**
* {@inheritDoc}
*/
@Override
public void buildContextMenu(final IMenuManager manager) {
final String FLOW_VAR_PORT_GRP = "Flow Variable Ports";
// add the groups (grouped by separators) in their order first
manager.add(new Separator(IWorkbenchActionConstants.GROUP_APP));
manager.add(new Separator(FLOW_VAR_PORT_GRP));
GEFActionConstants.addStandardActionGroups(manager);
IAction action;
action = m_actionRegistry.getAction("cut");
manager.appendToGroup(GEFActionConstants.GROUP_EDIT, action);
((UpdateAction) action).update();
action = m_actionRegistry.getAction("copy");
manager.appendToGroup(GEFActionConstants.GROUP_EDIT, action);
((UpdateAction) action).update();
action = m_actionRegistry.getAction(PasteActionContextMenu.ID);
manager.appendToGroup(GEFActionConstants.GROUP_EDIT, action);
((UpdateAction) action).update();
action = m_actionRegistry.getAction("undo");
manager.appendToGroup(GEFActionConstants.GROUP_EDIT, action);
((UpdateAction) action).update();
action = m_actionRegistry.getAction("redo");
manager.appendToGroup(GEFActionConstants.GROUP_EDIT, action);
((UpdateAction) action).update();
action = m_actionRegistry.getAction("delete");
manager.appendToGroup(GEFActionConstants.GROUP_EDIT, action);
((UpdateAction) action).update();
// Add (some) available actions from the registry to the context menu
// manager
// openDialog
action = m_actionRegistry.getAction(OpenDialogAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
((AbstractNodeAction) action).update();
// execute
action = m_actionRegistry.getAction(ExecuteAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
((AbstractNodeAction) action).update();
// execute and open first view
action = m_actionRegistry.getAction(ExecuteAndOpenViewAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
((AbstractNodeAction) action).update();
// cancel execution
action = m_actionRegistry.getAction(CancelAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
((AbstractNodeAction) action).update();
// show some menu items on LoopEndNodes only
List parts = m_viewer.getSelectedEditParts();
if (parts.size() == 1) {
EditPart p = (EditPart) parts.get(0);
if (p instanceof NodeContainerEditPart) {
NodeContainerUI container = (NodeContainerUI) ((NodeContainerEditPart) p).getModel();
if (container instanceof SingleNodeContainerUI) {
SingleNodeContainerUI snc = (SingleNodeContainerUI) container;
Wrapper.unwrapOptional(snc, SingleNodeContainer.class).ifPresent(sncImpl -> {
if (sncImpl.isModelCompatibleTo(LoopEndNode.class)) {
// pause loop execution
IAction loopAction;
loopAction = m_actionRegistry.getAction(PauseLoopExecutionAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, loopAction);
((AbstractNodeAction) loopAction).update();
// step loop execution
loopAction = m_actionRegistry.getAction(StepLoopAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, loopAction);
((AbstractNodeAction) loopAction).update();
// resume loop execution
loopAction = m_actionRegistry.getAction(ResumeLoopAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, loopAction);
((AbstractNodeAction) loopAction).update();
}
});
}
}
}
// reset
action = m_actionRegistry.getAction(ResetAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
((AbstractNodeAction) action).update();
// set name and description
action = m_actionRegistry.getAction(SetNodeDescriptionAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
((AbstractNodeAction) action).update();
// add workflow annotation
action = m_actionRegistry.getAction(AddAnnotationAction.ID);
AddAnnotationAction aaa = (AddAnnotationAction) action;
aaa.setLocation(m_lastLocation.x, m_lastLocation.y);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
((AbstractNodeAction) action).update();
// collapse metanodes
action = m_actionRegistry.getAction(CollapseMetaNodeAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
((AbstractNodeAction) action).update();
action = m_actionRegistry.getAction(EncapsulateSubNodeAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
((AbstractNodeAction) action).update();
// insert "select loop" if loop nodes are selected
boolean addSelectLoop = true;
for (Object p : parts) {
if (!(p instanceof NodeContainerEditPart)) {
addSelectLoop = false;
break;
}
NodeContainerUI nc = ((NodeContainerEditPart) p).getNodeContainer();
if (!(nc instanceof SingleNodeContainerUI)) {
addSelectLoop = false;
break;
}
if (!((SingleNodeContainerUI) nc).isMemberOfScope()) {
addSelectLoop = false;
break;
}
}
if (addSelectLoop) {
action = m_actionRegistry.getAction(SelectLoopAction.ID);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
((AbstractNodeAction) action).update();
}
IMenuManager metanodeMenuMgr = null;
IMenuManager subnodeMenuMgr = null;
IMenuManager subnodeViewMgr = null;
// depending on the current selection: add the actions for the port
// views and the node views
// also check whether this node part is a meta-node
// if so offer the "edit meta-node" option
// all these feature are only offered if exactly 1 part is selected
parts = m_viewer.getSelectedEditParts();
// by now, we only support one part...
if (parts.size() == 1) {
EditPart p = (EditPart) parts.get(0);
if (p instanceof WorkflowInPortBarEditPart) {
WorkflowInPortBarEditPart root = (WorkflowInPortBarEditPart) p;
manager.add(new Separator("outPortViews"));
for (Object o : p.getChildren()) {
EditPart child = (EditPart) o;
if (child instanceof WorkflowInPortEditPart && ((WorkflowInPortEditPart) child).isSelected()) {
final WorkflowManager wm = Wrapper.unwrapWFM(((WorkflowPortBar) root.getModel()).getWorkflowManager());
action = new OpenWorkflowPortViewAction(wm, ((WorkflowInPortEditPart) child).getIndex(), wm.getNrInPorts());
manager.appendToGroup("outPortViews", action);
((WorkflowInPortEditPart) child).setSelected(false);
}
}
}
if (p instanceof NodeContainerEditPart) {
NodeContainerUI container = null;
container = (NodeContainerUI) ((NodeContainerEditPart) p).getModel();
if (!(container instanceof WorkflowManagerUI)) {
action = m_actionRegistry.getAction(ToggleFlowVarPortsAction.ID);
manager.appendToGroup(FLOW_VAR_PORT_GRP, action);
((AbstractNodeAction) action).update();
}
// add for node views option if applicable
int numNodeViews = container.getNrViews();
for (int i = 0; i < numNodeViews; i++) {
action = new OpenViewAction(unwrapNC(container), i);
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
}
// add interactive view options
if (container.hasInteractiveView()) {
action = new OpenInteractiveViewAction(unwrapNC(container));
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
} else {
// TODO for subnodes move to submenu?
if (wraps(container, NativeNodeContainer.class)) {
InteractiveWebViewsResult interactiveWebViewsResult = unwrapNC(container).getInteractiveWebViews();
for (int i = 0; i < interactiveWebViewsResult.size(); i++) {
action = new OpenInteractiveWebViewAction(unwrapNC(container), interactiveWebViewsResult.get(i));
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
}
}
}
if (container instanceof WorkflowManagerUI) {
metanodeMenuMgr = getMetaNodeMenuManager(metanodeMenuMgr, manager);
// OPEN META NODE
action = new OpenSubworkflowEditorAction((NodeContainerEditPart) p);
metanodeMenuMgr.appendToGroup(GROUP_METANODE, action);
// EXPAND META NODE
action = m_actionRegistry.getAction(ExpandMetaNodeAction.ID);
metanodeMenuMgr.appendToGroup(GROUP_METANODE, action);
((AbstractNodeAction) action).update();
// RECONFIGURE META NODE
if (parts.size() == 1) {
action = m_actionRegistry.getAction(MetaNodeReconfigureAction.ID);
metanodeMenuMgr.appendToGroup(GROUP_METANODE, action);
((AbstractNodeAction) action).update();
}
// WRAP
action = m_actionRegistry.getAction(ConvertMetaNodeToSubNodeAction.ID);
metanodeMenuMgr.appendToGroup(GROUP_METANODE, action);
((AbstractNodeAction) action).update();
}
// SUBNODE
if (container instanceof SubNodeContainerUI) {
subnodeMenuMgr = getSubNodeMenuManager(subnodeMenuMgr, manager);
// OPEN SUBNODE
action = new OpenSubNodeEditorAction((NodeContainerEditPart) p);
subnodeMenuMgr.appendToGroup(GROUP_SUBNODE, action);
// EXPAND SUBNODE
action = m_actionRegistry.getAction(ExpandSubNodeAction.ID);
subnodeMenuMgr.appendToGroup(GROUP_SUBNODE, action);
((AbstractNodeAction) action).update();
// RECONFIGURE SUBNODE
action = m_actionRegistry.getAction(SubNodeReconfigureAction.ID);
subnodeMenuMgr.appendToGroup(GROUP_SUBNODE, action);
((AbstractNodeAction) action).update();
// UNWRAP
action = m_actionRegistry.getAction(ConvertSubNodeToMetaNodeAction.ID);
subnodeMenuMgr.appendToGroup(GROUP_SUBNODE, action);
((AbstractNodeAction) action).update();
if (wraps(container, SubNodeContainer.class)) {
InteractiveWebViewsResult interactiveWebViewsResult = unwrapNC(container).getInteractiveWebViews();
if (interactiveWebViewsResult.size() > 0) {
subnodeViewMgr = getSingleSubNodeViewsMenuManager(subnodeViewMgr, subnodeMenuMgr);
for (int i = 0; i < interactiveWebViewsResult.size(); i++) {
action = new OpenInteractiveWebViewAction(unwrapNC(container), interactiveWebViewsResult.get(i));
subnodeViewMgr.appendToGroup(GROUP_SUBNODE_VIEWS, action);
}
}
action = new OpenSubnodeWebViewAction(Wrapper.unwrap(container, SubNodeContainer.class));
manager.appendToGroup(IWorkbenchActionConstants.GROUP_APP, action);
}
}
// add port views
manager.add(new Separator("outPortViews"));
int numOutPorts = container.getNrOutPorts();
for (int i = 0; i < numOutPorts; i++) {
if (i == 0 && !(container instanceof WorkflowManagerUI)) {
// skip the implicit flow var ports on "normal" nodes
continue;
}
if (wraps(container, NodeContainer.class)) {
action = new OpenPortViewAction(unwrapNC(container), i, numOutPorts);
manager.appendToGroup("outPortViews", action);
}
}
}
}
boolean addMetaNodeActions = false;
boolean addSubNodeActions = false;
for (Object p : parts) {
if (p instanceof NodeContainerEditPart) {
NodeContainerUI model = ((NodeContainerEditPart) p).getNodeContainer();
if (model instanceof WorkflowManagerUI) {
addMetaNodeActions = true;
} else if (model instanceof SubNodeContainerUI) {
addSubNodeActions = true;
}
}
}
if (addMetaNodeActions) {
metanodeMenuMgr = getMetaNodeMenuManager(metanodeMenuMgr, manager);
// SAVE AS TEMPLATE
action = m_actionRegistry.getAction(SaveAsMetaNodeTemplateAction.ID);
metanodeMenuMgr.appendToGroup(GROUP_METANODE_LINKS, action);
((AbstractNodeAction) action).update();
// CHECK UPDATE
action = m_actionRegistry.getAction(CheckUpdateMetaNodeLinkAction.ID);
metanodeMenuMgr.appendToGroup(GROUP_METANODE_LINKS, action);
((AbstractNodeAction) action).update();
// DISCONNECT
action = m_actionRegistry.getAction(DisconnectMetaNodeLinkAction.ID);
metanodeMenuMgr.appendToGroup(GROUP_METANODE_LINKS, action);
((AbstractNodeAction) action).update();
// LINK TYPE
action = m_actionRegistry.getAction(ChangeMetaNodeLinkAction.ID);
metanodeMenuMgr.appendToGroup(GROUP_METANODE_LINKS, action);
((AbstractNodeAction) action).update();
// REVEAL TEMPLATE
action = m_actionRegistry.getAction(RevealMetaNodeTemplateAction.ID);
metanodeMenuMgr.appendToGroup(GROUP_METANODE_LINKS, action);
((AbstractNodeAction) action).update();
// LOCK
if (Boolean.getBoolean(KNIMEConstants.PROPERTY_SHOW_METANODE_LOCK_ACTION)) {
action = m_actionRegistry.getAction(LockMetaNodeAction.ID);
metanodeMenuMgr.appendToGroup(GROUP_METANODE, action);
((AbstractNodeAction) action).update();
}
}
if (addSubNodeActions) {
subnodeMenuMgr = getSubNodeMenuManager(subnodeMenuMgr, manager);
// SAVE AS TEMPLATE (SUBNODE)
action = m_actionRegistry.getAction(SaveAsSubNodeTemplateAction.ID);
subnodeMenuMgr.appendToGroup(GROUP_SUBNODE_LINKS, action);
((AbstractNodeAction) action).update();
// CHECK UPDATE (SUBNODE)
action = m_actionRegistry.getAction(CheckUpdateMetaNodeLinkAction.ID);
subnodeMenuMgr.appendToGroup(GROUP_SUBNODE_LINKS, action);
((AbstractNodeAction) action).update();
// DISCONNECT LINK (SUBNODE)
action = m_actionRegistry.getAction(DisconnectSubNodeLinkAction.ID);
subnodeMenuMgr.appendToGroup(GROUP_SUBNODE_LINKS, action);
((AbstractNodeAction) action).update();
// CHANGE LINK (SUBNODE)
action = m_actionRegistry.getAction(ChangeSubNodeLinkAction.ID);
subnodeMenuMgr.appendToGroup(GROUP_SUBNODE_LINKS, action);
((AbstractNodeAction) action).update();
// REVEAL TEMPLATE (SUBNODE)
action = m_actionRegistry.getAction(RevealSubNodeTemplateAction.ID);
subnodeMenuMgr.appendToGroup(GROUP_SUBNODE_LINKS, action);
((AbstractNodeAction) action).update();
// LOCK SUBNODE
if (Boolean.getBoolean(KNIMEConstants.PROPERTY_SHOW_METANODE_LOCK_ACTION)) {
action = m_actionRegistry.getAction(LockSubNodeAction.ID);
subnodeMenuMgr.appendToGroup(GROUP_SUBNODE, action);
((AbstractNodeAction) action).update();
}
}
manager.updateAll(true);
}
use of org.knime.workbench.editor2.actions.AddAnnotationAction in project knime-core by knime.
the class WorkflowEditor method createActions.
/**
* Creates the editor actions.
*
* @see org.eclipse.gef.ui.parts.GraphicalEditor#createActions()
*/
@Override
protected void createActions() {
LOGGER.debug("creating editor actions...");
// super already does something for us...
super.createActions();
// Stack actions
StackAction undo = new UndoAction(this);
StackAction redo = new RedoAction(this);
// Editor Actions
WorkbenchPartAction delete = new NodeConnectionContainerDeleteAction(this);
WorkbenchPartAction save = new SaveAction(this);
WorkbenchPartAction saveAs = new SaveAsAction(this);
WorkbenchPartAction print = new PrintAction(this);
WorkbenchPartAction hideNodeName = new HideNodeNamesAction(this);
WorkbenchPartAction showNodeIdAction = new ShowNodeIdsAction(this);
// node actions
//
AbstractNodeAction openDialog = new OpenDialogAction(this);
AbstractNodeAction execute = new ExecuteAction(this);
AbstractNodeAction executeAll = new ExecuteAllAction(this);
AbstractNodeAction cancelAll = new CancelAllAction(this);
AbstractNodeAction cancel = new CancelAction(this);
AbstractNodeAction pause = new PauseLoopExecutionAction(this);
AbstractNodeAction step = new StepLoopAction(this);
AbstractNodeAction resume = new ResumeLoopAction(this);
AbstractNodeAction executeAndView = new ExecuteAndOpenViewAction(this);
AbstractNodeAction reset = new ResetAction(this);
AbstractNodeAction selectScope = new SelectLoopAction(this);
AbstractNodeAction setNameAndDescription = new SetNodeDescriptionAction(this);
AbstractNodeAction toggleFlowVarPorts = new ToggleFlowVarPortsAction(this);
AbstractNodeAction defaultOpenView = new DefaultOpenViewAction(this);
AbstractNodeAction metaNodeReConfigure = new MetaNodeReconfigureAction(this);
AbstractNodeAction metaNodeChangeLink = new ChangeMetaNodeLinkAction(this);
AbstractNodeAction defineMetaNodeTemplate = new SaveAsMetaNodeTemplateAction(this);
AbstractNodeAction checkUpdateMetaNodeLink = new CheckUpdateMetaNodeLinkAction(this);
AbstractNodeAction revealMetaNodeTemplate = new RevealMetaNodeTemplateAction(this);
AbstractNodeAction disconnectMetaNodeLink = new DisconnectMetaNodeLinkAction(this);
AbstractNodeAction lockMetaLink = new LockMetaNodeAction(this);
AbstractNodeAction subNodeReConfigure = new SubNodeReconfigureAction(this);
AbstractNodeAction subNodeChangeLink = new ChangeSubNodeLinkAction(this);
AbstractNodeAction defineSubNodeTemplate = new SaveAsSubNodeTemplateAction(this);
AbstractNodeAction checkUpdateSubNodeLink = new CheckUpdateMetaNodeLinkAction(this);
AbstractNodeAction revealSubNodeTemplate = new RevealSubNodeTemplateAction(this);
AbstractNodeAction disconnectSubNodeLink = new DisconnectSubNodeLinkAction(this);
AbstractNodeAction lockSubLink = new LockSubNodeAction(this);
// new annotation action
AddAnnotationAction annotation = new AddAnnotationAction(this);
// copy / cut / paste action
CopyAction copy = new CopyAction(this);
CutAction cut = new CutAction(this);
PasteAction paste = new PasteAction(this);
PasteActionContextMenu pasteContext = new PasteActionContextMenu(this);
CollapseMetaNodeAction collapse = new CollapseMetaNodeAction(this);
EncapsulateSubNodeAction encapsulate = new EncapsulateSubNodeAction(this);
ExpandMetaNodeAction expand = new ExpandMetaNodeAction(this);
ExpandSubNodeAction expandSub = new ExpandSubNodeAction(this);
ConvertMetaNodeToSubNodeAction wrap = new ConvertMetaNodeToSubNodeAction(this);
ConvertSubNodeToMetaNodeAction unWrap = new ConvertSubNodeToMetaNodeAction(this);
// register the actions
m_actionRegistry.registerAction(undo);
m_actionRegistry.registerAction(redo);
m_actionRegistry.registerAction(delete);
m_actionRegistry.registerAction(save);
m_actionRegistry.registerAction(saveAs);
m_actionRegistry.registerAction(print);
m_actionRegistry.registerAction(openDialog);
m_actionRegistry.registerAction(execute);
m_actionRegistry.registerAction(executeAll);
m_actionRegistry.registerAction(cancelAll);
m_actionRegistry.registerAction(cancel);
m_actionRegistry.registerAction(pause);
m_actionRegistry.registerAction(step);
m_actionRegistry.registerAction(resume);
m_actionRegistry.registerAction(executeAndView);
m_actionRegistry.registerAction(reset);
m_actionRegistry.registerAction(selectScope);
m_actionRegistry.registerAction(toggleFlowVarPorts);
m_actionRegistry.registerAction(setNameAndDescription);
m_actionRegistry.registerAction(defaultOpenView);
m_actionRegistry.registerAction(copy);
m_actionRegistry.registerAction(cut);
m_actionRegistry.registerAction(paste);
m_actionRegistry.registerAction(pasteContext);
m_actionRegistry.registerAction(hideNodeName);
m_actionRegistry.registerAction(showNodeIdAction);
m_actionRegistry.registerAction(collapse);
m_actionRegistry.registerAction(encapsulate);
m_actionRegistry.registerAction(expand);
m_actionRegistry.registerAction(expandSub);
m_actionRegistry.registerAction(wrap);
m_actionRegistry.registerAction(unWrap);
m_actionRegistry.registerAction(metaNodeReConfigure);
m_actionRegistry.registerAction(metaNodeChangeLink);
m_actionRegistry.registerAction(defineMetaNodeTemplate);
m_actionRegistry.registerAction(checkUpdateMetaNodeLink);
m_actionRegistry.registerAction(revealMetaNodeTemplate);
m_actionRegistry.registerAction(disconnectMetaNodeLink);
m_actionRegistry.registerAction(lockMetaLink);
m_actionRegistry.registerAction(subNodeReConfigure);
m_actionRegistry.registerAction(subNodeChangeLink);
m_actionRegistry.registerAction(defineSubNodeTemplate);
m_actionRegistry.registerAction(checkUpdateSubNodeLink);
m_actionRegistry.registerAction(revealSubNodeTemplate);
m_actionRegistry.registerAction(disconnectSubNodeLink);
m_actionRegistry.registerAction(lockSubLink);
m_actionRegistry.registerAction(annotation);
// remember ids for later updates via 'updateActions'
m_editorActions = new ArrayList<String>();
m_editorActions.add(undo.getId());
m_editorActions.add(redo.getId());
m_editorActions.add(delete.getId());
m_editorActions.add(save.getId());
m_editorActions.add(saveAs.getId());
m_editorActions.add(openDialog.getId());
m_editorActions.add(execute.getId());
m_editorActions.add(executeAll.getId());
m_editorActions.add(cancelAll.getId());
m_editorActions.add(executeAndView.getId());
m_editorActions.add(reset.getId());
m_editorActions.add(setNameAndDescription.getId());
m_editorActions.add(toggleFlowVarPorts.getId());
m_editorActions.add(defaultOpenView.getId());
m_editorActions.add(hideNodeName.getId());
m_editorActions.add(showNodeIdAction.getId());
m_editorActions.add(collapse.getId());
m_editorActions.add(expand.getId());
m_editorActions.add(unWrap.getId());
m_editorActions.add(copy.getId());
m_editorActions.add(cut.getId());
m_editorActions.add(paste.getId());
m_editorActions.add(metaNodeReConfigure.getId());
m_editorActions.add(subNodeReConfigure.getId());
m_editorActions.add(metaNodeChangeLink.getId());
m_editorActions.add(defineMetaNodeTemplate.getId());
m_editorActions.add(checkUpdateMetaNodeLink.getId());
m_editorActions.add(annotation.getId());
}
Aggregations