This repository has been archived by the owner on Jan 15, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathserver-context-menu-provider.ts
46 lines (40 loc) · 2.33 KB
/
server-context-menu-provider.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/********************************************************************************
* Copyright (c) 2019 EclipseSource and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
* with the GNU Classpath Exception which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
********************************************************************************/
import { inject, injectable } from "inversify";
import { Action, LabeledAction, Point, SModelElement, subtract, TYPES } from "sprotty/lib";
import { isSelected } from "../../utils/smodel-util";
import { ContextActions, isSetContextActionsAction, RequestContextActions } from "../context-actions/action-definitions";
import { GLSPActionDispatcher } from "../request-response/glsp-action-dispatcher";
import { IContextMenuItemProvider } from "./menu-providers";
export namespace ServerContextMenu {
export const KEY = "context-menu";
}
@injectable()
export class ServerContextMenuItemProvider implements IContextMenuItemProvider {
constructor(@inject(TYPES.IActionDispatcher) protected actionDispatcher: GLSPActionDispatcher) { }
getItems(root: Readonly<SModelElement>, lastMousePosition?: Point): Promise<LabeledAction[]> {
const selectedElementIds = Array.from(root.index.all().filter(isSelected).map(e => e.id));
const localPosition = lastMousePosition ? root.root.parentToLocal(subtract(lastMousePosition, root.root.canvasBounds)) : undefined;
const requestAction = new RequestContextActions(selectedElementIds, localPosition, { [ContextActions.UI_CONTROL_KEY]: ServerContextMenu.KEY });
return this.actionDispatcher.requestUntil(requestAction).then(response => this.getContextActionsFromResponse(response));
}
getContextActionsFromResponse(action: Action): LabeledAction[] {
if (isSetContextActionsAction(action)) {
return action.actions;
}
return [];
}
}