@eclipse-glsp/client 2.2.0-next.360 → 2.2.0-next.364
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/features/tools/marquee-selection/marquee-behavior.d.ts +15 -3
- package/lib/features/tools/marquee-selection/marquee-behavior.d.ts.map +1 -1
- package/lib/features/tools/marquee-selection/marquee-behavior.js +61 -9
- package/lib/features/tools/marquee-selection/marquee-behavior.js.map +1 -1
- package/lib/features/tools/marquee-selection/marquee-mouse-tool.d.ts +7 -9
- package/lib/features/tools/marquee-selection/marquee-mouse-tool.d.ts.map +1 -1
- package/lib/features/tools/marquee-selection/marquee-mouse-tool.js +19 -48
- package/lib/features/tools/marquee-selection/marquee-mouse-tool.js.map +1 -1
- package/lib/features/tools/marquee-selection/marquee-selection-module.d.ts.map +1 -1
- package/lib/features/tools/marquee-selection/marquee-selection-module.js +2 -0
- package/lib/features/tools/marquee-selection/marquee-selection-module.js.map +1 -1
- package/package.json +3 -3
- package/src/features/tools/marquee-selection/marquee-behavior.spec.ts +2 -1
- package/src/features/tools/marquee-selection/marquee-behavior.ts +66 -8
- package/src/features/tools/marquee-selection/marquee-mouse-tool.ts +25 -67
- package/src/features/tools/marquee-selection/marquee-selection-module.ts +2 -0
|
@@ -13,20 +13,32 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import { Bounds, Point, PointToPointLine } from '@eclipse-glsp/sprotty';
|
|
16
|
+
import { Bounds, DOMHelper, GModelElement, GModelRoot, Point, PointToPointLine, TypeGuard } from '@eclipse-glsp/sprotty';
|
|
17
|
+
import { GEdge } from '../../../model';
|
|
18
|
+
import { BoundsAwareModelElement } from '../../../utils/gmodel-util';
|
|
17
19
|
import { DrawMarqueeAction } from './marquee-tool-feedback';
|
|
18
20
|
export interface IMarqueeBehavior {
|
|
19
21
|
readonly entireElement: boolean;
|
|
20
22
|
readonly entireEdge: boolean;
|
|
21
23
|
}
|
|
22
24
|
export declare class MarqueeUtil {
|
|
25
|
+
protected marqueeBehavior: IMarqueeBehavior;
|
|
26
|
+
protected domHelper: DOMHelper;
|
|
23
27
|
protected startPoint: Point;
|
|
24
28
|
protected currentPoint: Point;
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
constructor(marqueeBehavior: IMarqueeBehavior, domHelper: DOMHelper);
|
|
30
|
+
isContinuousMode(element: GModelElement, event: MouseEvent): boolean;
|
|
31
|
+
getMarkableNodes(root: GModelRoot): BoundsAwareModelElement[];
|
|
32
|
+
protected isMarkableNode(): TypeGuard<BoundsAwareModelElement>;
|
|
33
|
+
getMarkableEdges(root: GModelRoot): GEdge[];
|
|
34
|
+
protected isMarkableEdge(): TypeGuard<GEdge>;
|
|
27
35
|
updateStartPoint(position: Point): void;
|
|
28
36
|
updateCurrentPoint(position: Point): void;
|
|
37
|
+
isMarked(element: BoundsAwareModelElement | GEdge): boolean;
|
|
29
38
|
drawMarqueeAction(): DrawMarqueeAction;
|
|
39
|
+
protected isMarkedEdge(edge: GEdge): boolean;
|
|
40
|
+
protected isMarkedNode(node: BoundsAwareModelElement): boolean;
|
|
41
|
+
protected getNodeBounds(node: BoundsAwareModelElement): Bounds;
|
|
30
42
|
isEdgePathMarked(path: string | null): boolean;
|
|
31
43
|
isEdgeMarked(points: Point[]): boolean;
|
|
32
44
|
isNodeMarked(elementBounds: Bounds): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marquee-behavior.d.ts","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-behavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAElF,OAAO,
|
|
1
|
+
{"version":3,"file":"marquee-behavior.d.ts","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-behavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAElF,OAAO,EACH,MAAM,EACN,SAAS,EACT,aAAa,EACb,UAAU,EAEV,KAAK,EACL,gBAAgB,EAEhB,SAAS,EAIZ,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAmD,MAAM,4BAA4B,CAAC;AAEtH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAChC;AAED,qBACa,WAAW;IAOhB,SAAS,CAAC,eAAe,EAAE,gBAAgB;IAClB,SAAS,CAAC,SAAS,EAAE,SAAS;IAP3D,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC;IAC5B,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC;gBAKhB,eAAe,EAAE,gBAA8D,EACtD,SAAS,EAAE,SAAS;IAG3D,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO;IAIpE,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,uBAAuB,EAAE;IAI7D,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,uBAAuB,CAAC;IAI9D,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,KAAK,EAAE;IAI3C,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,KAAK,CAAC;IAI5C,gBAAgB,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI;IAIvC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI;IAIzC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,GAAG,KAAK,GAAG,OAAO;IAI3D,iBAAiB,IAAI,iBAAiB;IAItC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO;IAU5C,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO;IAI9D,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM;IAI9D,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAc9C,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO;IAItC,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAY5C,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO;IAStD,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO;IAStD,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,OAAO;IAY7D,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO;IAI9E,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAY5C,SAAS,CAAC,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAc1G,SAAS,CAAC,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAc1G,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;CAGxE"}
|
|
@@ -14,18 +14,45 @@
|
|
|
14
14
|
*
|
|
15
15
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
16
16
|
********************************************************************************/
|
|
17
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
+
};
|
|
23
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
24
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
|
+
};
|
|
26
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
27
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
28
|
+
};
|
|
17
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
30
|
exports.MarqueeUtil = void 0;
|
|
19
31
|
const sprotty_1 = require("@eclipse-glsp/sprotty");
|
|
32
|
+
const inversify_1 = require("inversify");
|
|
33
|
+
const model_1 = require("../../../model");
|
|
34
|
+
const gmodel_util_1 = require("../../../utils/gmodel-util");
|
|
35
|
+
const viewpoint_util_1 = require("../../../utils/viewpoint-util");
|
|
20
36
|
const marquee_tool_feedback_1 = require("./marquee-tool-feedback");
|
|
21
|
-
class MarqueeUtil {
|
|
22
|
-
constructor(marqueeBehavior) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
37
|
+
let MarqueeUtil = class MarqueeUtil {
|
|
38
|
+
constructor(marqueeBehavior = { entireElement: false, entireEdge: false }, domHelper) {
|
|
39
|
+
this.marqueeBehavior = marqueeBehavior;
|
|
40
|
+
this.domHelper = domHelper;
|
|
41
|
+
}
|
|
42
|
+
isContinuousMode(element, event) {
|
|
43
|
+
return event.shiftKey;
|
|
44
|
+
}
|
|
45
|
+
getMarkableNodes(root) {
|
|
46
|
+
return (0, gmodel_util_1.getMatchingElements)(root.index, this.isMarkableNode());
|
|
47
|
+
}
|
|
48
|
+
isMarkableNode() {
|
|
49
|
+
return (0, sprotty_1.typeGuard)((0, sprotty_1.toTypeGuard)(sprotty_1.GNode), gmodel_util_1.isSelectableAndBoundsAware);
|
|
50
|
+
}
|
|
51
|
+
getMarkableEdges(root) {
|
|
52
|
+
return (0, gmodel_util_1.getMatchingElements)(root.index, this.isMarkableEdge());
|
|
53
|
+
}
|
|
54
|
+
isMarkableEdge() {
|
|
55
|
+
return (0, sprotty_1.typeGuard)((0, sprotty_1.toTypeGuard)(model_1.GEdge), sprotty_1.isSelectable);
|
|
29
56
|
}
|
|
30
57
|
updateStartPoint(position) {
|
|
31
58
|
this.startPoint = position;
|
|
@@ -33,9 +60,27 @@ class MarqueeUtil {
|
|
|
33
60
|
updateCurrentPoint(position) {
|
|
34
61
|
this.currentPoint = position;
|
|
35
62
|
}
|
|
63
|
+
isMarked(element) {
|
|
64
|
+
return element instanceof model_1.GEdge ? this.isMarkedEdge(element) : this.isMarkedNode(element);
|
|
65
|
+
}
|
|
36
66
|
drawMarqueeAction() {
|
|
37
67
|
return marquee_tool_feedback_1.DrawMarqueeAction.create({ startPoint: this.startPoint, endPoint: this.currentPoint });
|
|
38
68
|
}
|
|
69
|
+
isMarkedEdge(edge) {
|
|
70
|
+
const domId = this.domHelper.createUniqueDOMElementId(edge);
|
|
71
|
+
const domEdge = document.getElementById(domId);
|
|
72
|
+
if (!domEdge || domEdge.getAttribute('transform') || !domEdge.children[0]) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
const path = domEdge.children[0].getAttribute('d');
|
|
76
|
+
return this.isEdgePathMarked(path);
|
|
77
|
+
}
|
|
78
|
+
isMarkedNode(node) {
|
|
79
|
+
return this.isNodeMarked(this.getNodeBounds(node));
|
|
80
|
+
}
|
|
81
|
+
getNodeBounds(node) {
|
|
82
|
+
return (0, viewpoint_util_1.toAbsoluteBounds)(node);
|
|
83
|
+
}
|
|
39
84
|
isEdgePathMarked(path) {
|
|
40
85
|
if (!path) {
|
|
41
86
|
return false;
|
|
@@ -123,6 +168,13 @@ class MarqueeUtil {
|
|
|
123
168
|
isBetween(x, lower, upper) {
|
|
124
169
|
return lower <= x && x <= upper;
|
|
125
170
|
}
|
|
126
|
-
}
|
|
171
|
+
};
|
|
127
172
|
exports.MarqueeUtil = MarqueeUtil;
|
|
173
|
+
exports.MarqueeUtil = MarqueeUtil = __decorate([
|
|
174
|
+
(0, inversify_1.injectable)(),
|
|
175
|
+
__param(0, (0, inversify_1.inject)(sprotty_1.TYPES.IMarqueeBehavior)),
|
|
176
|
+
__param(0, (0, inversify_1.optional)()),
|
|
177
|
+
__param(1, (0, inversify_1.inject)(sprotty_1.TYPES.DOMHelper)),
|
|
178
|
+
__metadata("design:paramtypes", [Object, sprotty_1.DOMHelper])
|
|
179
|
+
], MarqueeUtil);
|
|
128
180
|
//# sourceMappingURL=marquee-behavior.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marquee-behavior.js","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-behavior.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF
|
|
1
|
+
{"version":3,"file":"marquee-behavior.js","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-behavior.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,32 +13,30 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import { Action,
|
|
16
|
+
import { Action, GModelElement, GModelRoot, KeyListener } from '@eclipse-glsp/sprotty';
|
|
17
17
|
import { DragAwareMouseListener } from '../../../base/drag-aware-mouse-listener';
|
|
18
|
+
import { GEdge } from '../../../model';
|
|
18
19
|
import { BoundsAwareModelElement } from '../../../utils/gmodel-util';
|
|
19
20
|
import { BaseEditTool } from '../base-tools';
|
|
20
|
-
import {
|
|
21
|
+
import { MarqueeUtil } from './marquee-behavior';
|
|
21
22
|
export declare class MarqueeMouseTool extends BaseEditTool {
|
|
22
23
|
static ID: string;
|
|
23
|
-
protected
|
|
24
|
-
protected marqueeBehavior: IMarqueeBehavior;
|
|
24
|
+
protected marqueeUtil: MarqueeUtil;
|
|
25
25
|
protected shiftKeyListener: ShiftKeyListener;
|
|
26
26
|
get id(): string;
|
|
27
27
|
enable(): void;
|
|
28
28
|
get isEditTool(): boolean;
|
|
29
29
|
}
|
|
30
30
|
export declare class MarqueeMouseListener extends DragAwareMouseListener {
|
|
31
|
-
protected domHelper: DOMHelper;
|
|
32
31
|
protected marqueeUtil: MarqueeUtil;
|
|
33
32
|
protected nodes: BoundsAwareModelElement[];
|
|
34
|
-
protected edges:
|
|
33
|
+
protected edges: GEdge[];
|
|
35
34
|
protected previouslySelected: string[];
|
|
36
35
|
protected isActive: boolean;
|
|
37
|
-
constructor(
|
|
36
|
+
constructor(root: GModelRoot, marqueeUtil: MarqueeUtil);
|
|
38
37
|
mouseDown(target: GModelElement, event: MouseEvent): Action[];
|
|
39
38
|
mouseMove(target: GModelElement, event: MouseEvent): Action[];
|
|
40
|
-
mouseUp(
|
|
41
|
-
isEdgeMarked(element: SVGElement): boolean;
|
|
39
|
+
mouseUp(target: GModelElement, event: MouseEvent): Action[];
|
|
42
40
|
}
|
|
43
41
|
export declare class ShiftKeyListener extends KeyListener {
|
|
44
42
|
keyUp(element: GModelElement, event: KeyboardEvent): Action[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marquee-mouse-tool.d.ts","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-mouse-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,
|
|
1
|
+
{"version":3,"file":"marquee-mouse-tool.d.ts","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-mouse-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAuC,MAAM,uBAAuB,CAAC;AAE5H,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAGjF,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAmD,MAAM,4BAA4B,CAAC;AAEtH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,qBACa,gBAAiB,SAAQ,YAAY;IAC9C,MAAM,CAAC,EAAE,SAA6B;IAEjB,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;IAExD,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAA0B;IAEtE,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,MAAM,IAAI,IAAI;IAQd,IAAa,UAAU,IAAI,OAAO,CAEjC;CACJ;AAED,qBAAa,oBAAqB,SAAQ,sBAAsB;IAQxD,SAAS,CAAC,WAAW,EAAE,WAAW;IAPtC,SAAS,CAAC,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC3C,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;IACzB,SAAS,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IACvC,SAAS,CAAC,QAAQ,UAAS;gBAGvB,IAAI,EAAE,UAAU,EACN,WAAW,EAAE,WAAW;IAQ7B,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;IAS7D,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;IAY7D,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;CAMvE;AAED,qBACa,gBAAiB,SAAQ,WAAW;IACpC,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,EAAE;CAMzE"}
|
|
@@ -31,7 +31,6 @@ const inversify_1 = require("inversify");
|
|
|
31
31
|
const drag_aware_mouse_listener_1 = require("../../../base/drag-aware-mouse-listener");
|
|
32
32
|
const css_feedback_1 = require("../../../base/feedback/css-feedback");
|
|
33
33
|
const tool_1 = require("../../../base/tool-manager/tool");
|
|
34
|
-
const model_1 = require("../../../model");
|
|
35
34
|
const gmodel_util_1 = require("../../../utils/gmodel-util");
|
|
36
35
|
const viewpoint_util_1 = require("../../../utils/viewpoint-util");
|
|
37
36
|
const base_tools_1 = require("../base-tools");
|
|
@@ -46,7 +45,7 @@ let MarqueeMouseTool = MarqueeMouseTool_1 = class MarqueeMouseTool extends base_
|
|
|
46
45
|
return MarqueeMouseTool_1.ID;
|
|
47
46
|
}
|
|
48
47
|
enable() {
|
|
49
|
-
this.toDisposeOnDisable.push(this.mouseTool.registerListener(new MarqueeMouseListener(this.
|
|
48
|
+
this.toDisposeOnDisable.push(this.mouseTool.registerListener(new MarqueeMouseListener(this.editorContext.modelRoot, this.marqueeUtil)), this.keyTool.registerListener(this.shiftKeyListener), this.createFeedbackEmitter().add((0, css_feedback_1.cursorFeedbackAction)(css_feedback_1.CursorCSS.MARQUEE), (0, css_feedback_1.cursorFeedbackAction)()).submit());
|
|
50
49
|
}
|
|
51
50
|
get isEditTool() {
|
|
52
51
|
return false;
|
|
@@ -55,73 +54,45 @@ let MarqueeMouseTool = MarqueeMouseTool_1 = class MarqueeMouseTool extends base_
|
|
|
55
54
|
exports.MarqueeMouseTool = MarqueeMouseTool;
|
|
56
55
|
MarqueeMouseTool.ID = 'glsp.marquee-mouse-tool';
|
|
57
56
|
__decorate([
|
|
58
|
-
(0, inversify_1.inject)(
|
|
59
|
-
__metadata("design:type",
|
|
60
|
-
], MarqueeMouseTool.prototype, "
|
|
61
|
-
__decorate([
|
|
62
|
-
(0, inversify_1.inject)(sprotty_1.TYPES.IMarqueeBehavior),
|
|
63
|
-
(0, inversify_1.optional)(),
|
|
64
|
-
__metadata("design:type", Object)
|
|
65
|
-
], MarqueeMouseTool.prototype, "marqueeBehavior", void 0);
|
|
57
|
+
(0, inversify_1.inject)(marquee_behavior_1.MarqueeUtil),
|
|
58
|
+
__metadata("design:type", marquee_behavior_1.MarqueeUtil)
|
|
59
|
+
], MarqueeMouseTool.prototype, "marqueeUtil", void 0);
|
|
66
60
|
exports.MarqueeMouseTool = MarqueeMouseTool = MarqueeMouseTool_1 = __decorate([
|
|
67
61
|
(0, inversify_1.injectable)()
|
|
68
62
|
], MarqueeMouseTool);
|
|
69
63
|
class MarqueeMouseListener extends drag_aware_mouse_listener_1.DragAwareMouseListener {
|
|
70
|
-
constructor(
|
|
64
|
+
constructor(root, marqueeUtil) {
|
|
71
65
|
super();
|
|
66
|
+
this.marqueeUtil = marqueeUtil;
|
|
72
67
|
this.isActive = false;
|
|
73
|
-
|
|
74
|
-
this.
|
|
75
|
-
this.
|
|
76
|
-
.all()
|
|
77
|
-
.map(e => e)
|
|
78
|
-
.filter(e => (0, sprotty_1.isSelectable)(e))
|
|
79
|
-
.filter(e => e instanceof sprotty_1.GNode));
|
|
80
|
-
const sEdges = Array.from(root.index
|
|
81
|
-
.all()
|
|
82
|
-
.filter(e => e instanceof model_1.GEdge)
|
|
83
|
-
.filter(e => (0, sprotty_1.isSelectable)(e))
|
|
84
|
-
.map(e => e.id));
|
|
85
|
-
this.edges = Array.from(document.querySelectorAll('g')).filter(e => sEdges.includes(this.domHelper.findSModelIdByDOMElement(e)));
|
|
68
|
+
// pre-calculate all markable node and edges to improve performance
|
|
69
|
+
this.nodes = this.marqueeUtil.getMarkableNodes(root);
|
|
70
|
+
this.edges = this.marqueeUtil.getMarkableEdges(root);
|
|
86
71
|
}
|
|
87
72
|
mouseDown(target, event) {
|
|
88
73
|
this.isActive = true;
|
|
89
74
|
this.marqueeUtil.updateStartPoint((0, viewpoint_util_1.getAbsolutePosition)(target, event));
|
|
90
75
|
if (event.ctrlKey) {
|
|
91
|
-
this.previouslySelected =
|
|
92
|
-
.all()
|
|
93
|
-
.filter(gmodel_util_1.isSelectableAndBoundsAware)
|
|
94
|
-
.map(e => e)
|
|
95
|
-
.filter(e => (0, sprotty_1.isSelected)(e))
|
|
96
|
-
.map(e => e.id));
|
|
76
|
+
this.previouslySelected = (0, gmodel_util_1.getMatchingElements)(target.index, (0, sprotty_1.typeGuard)(gmodel_util_1.isSelectableAndBoundsAware, sprotty_1.isSelected)).map(e => e.id);
|
|
97
77
|
}
|
|
98
78
|
return [];
|
|
99
79
|
}
|
|
100
80
|
mouseMove(target, event) {
|
|
101
81
|
this.marqueeUtil.updateCurrentPoint((0, viewpoint_util_1.getAbsolutePosition)(target, event));
|
|
102
82
|
if (this.isActive) {
|
|
103
|
-
const nodeIdsSelected = this.nodes.filter(e => this.marqueeUtil.
|
|
104
|
-
const edgeIdsSelected = this.edges.filter(e => this.
|
|
105
|
-
const
|
|
106
|
-
|
|
83
|
+
const nodeIdsSelected = this.nodes.filter(e => this.marqueeUtil.isMarked(e)).map(e => e.id);
|
|
84
|
+
const edgeIdsSelected = this.edges.filter(e => this.marqueeUtil.isMarked(e)).map(e => e.id);
|
|
85
|
+
const currentSelected = nodeIdsSelected.concat(edgeIdsSelected);
|
|
86
|
+
const selection = currentSelected.concat(this.previouslySelected);
|
|
87
|
+
return [sprotty_1.SelectAction.setSelection(selection), this.marqueeUtil.drawMarqueeAction()];
|
|
107
88
|
}
|
|
108
89
|
return [];
|
|
109
90
|
}
|
|
110
|
-
mouseUp(
|
|
91
|
+
mouseUp(target, event) {
|
|
111
92
|
this.isActive = false;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return [marquee_tool_feedback_1.RemoveMarqueeAction.create(), tool_1.EnableDefaultToolsAction.create()];
|
|
116
|
-
}
|
|
117
|
-
isEdgeMarked(element) {
|
|
118
|
-
if (!element.getAttribute('transform')) {
|
|
119
|
-
if (element.children[0]) {
|
|
120
|
-
const path = element.children[0].getAttribute('d');
|
|
121
|
-
return this.marqueeUtil.isEdgePathMarked(path);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
return false;
|
|
93
|
+
return this.marqueeUtil.isContinuousMode(target, event)
|
|
94
|
+
? [marquee_tool_feedback_1.RemoveMarqueeAction.create()]
|
|
95
|
+
: [marquee_tool_feedback_1.RemoveMarqueeAction.create(), tool_1.EnableDefaultToolsAction.create()];
|
|
125
96
|
}
|
|
126
97
|
}
|
|
127
98
|
exports.MarqueeMouseListener = MarqueeMouseListener;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marquee-mouse-tool.js","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-mouse-tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,
|
|
1
|
+
{"version":3,"file":"marquee-mouse-tool.js","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-mouse-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marquee-selection-module.d.ts","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-selection-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EAAE,aAAa,EAAiE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"marquee-selection-module.d.ts","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-selection-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EAAE,aAAa,EAAiE,MAAM,uBAAuB,CAAC;AAQrH,eAAO,MAAM,0BAA0B,eAatC,CAAC"}
|
|
@@ -22,8 +22,10 @@ const marquee_tool_1 = require("./marquee-tool");
|
|
|
22
22
|
const marquee_tool_feedback_1 = require("./marquee-tool-feedback");
|
|
23
23
|
const model_1 = require("./model");
|
|
24
24
|
const view_1 = require("./view");
|
|
25
|
+
const marquee_behavior_1 = require("./marquee-behavior");
|
|
25
26
|
exports.marqueeSelectionToolModule = new sprotty_1.FeatureModule((bind, unbind, isBound, rebind) => {
|
|
26
27
|
const context = { bind, unbind, isBound, rebind };
|
|
28
|
+
context.bind(marquee_behavior_1.MarqueeUtil).toSelf().inSingletonScope();
|
|
27
29
|
(0, sprotty_1.bindAsService)(context, sprotty_1.TYPES.IDefaultTool, marquee_tool_1.MarqueeTool);
|
|
28
30
|
(0, sprotty_1.bindAsService)(context, sprotty_1.TYPES.ITool, marquee_mouse_tool_1.MarqueeMouseTool);
|
|
29
31
|
(0, sprotty_1.configureCommand)(context, marquee_tool_feedback_1.DrawMarqueeCommand);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marquee-selection-module.js","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-selection-module.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,mDAAqH;AACrH,6DAAwD;AACxD,iDAA6C;AAC7C,mEAA4F;AAC5F,mCAAsC;AACtC,iCAAqC;
|
|
1
|
+
{"version":3,"file":"marquee-selection-module.js","sourceRoot":"","sources":["../../../../src/features/tools/marquee-selection/marquee-selection-module.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,mDAAqH;AACrH,6DAAwD;AACxD,iDAA6C;AAC7C,mEAA4F;AAC5F,mCAAsC;AACtC,iCAAqC;AACrC,yDAAiD;AAEpC,QAAA,0BAA0B,GAAG,IAAI,uBAAa,CACvD,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,8BAAW,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACtD,IAAA,uBAAa,EAAC,OAAO,EAAE,eAAK,CAAC,YAAY,EAAE,0BAAW,CAAC,CAAC;IACxD,IAAA,uBAAa,EAAC,OAAO,EAAE,eAAK,CAAC,KAAK,EAAE,qCAAgB,CAAC,CAAC;IAEtD,IAAA,0BAAgB,EAAC,OAAO,EAAE,0CAAkB,CAAC,CAAC;IAC9C,IAAA,0BAAgB,EAAC,OAAO,EAAE,4CAAoB,CAAC,CAAC;IAEhD,IAAA,+BAAqB,EAAC,OAAO,EAAE,+BAAO,EAAE,mBAAW,EAAE,kBAAW,CAAC,CAAC;AACtE,CAAC,EACD,EAAE,SAAS,EAAE,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAChD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eclipse-glsp/client",
|
|
3
|
-
"version": "2.2.0-next.
|
|
3
|
+
"version": "2.2.0-next.364+da6434f",
|
|
4
4
|
"description": "A sprotty-based client for GLSP",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eclipse",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"watch": "tsc -w"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@eclipse-glsp/sprotty": "2.2.0-next.
|
|
49
|
+
"@eclipse-glsp/sprotty": "2.2.0-next.364+da6434f",
|
|
50
50
|
"autocompleter": "^9.1.2",
|
|
51
51
|
"file-saver": "^2.0.5",
|
|
52
52
|
"lodash": "4.17.21",
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"publishConfig": {
|
|
64
64
|
"access": "public"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "da6434f64afe86219cc211b2163cc46d37cd2205"
|
|
67
67
|
}
|
|
@@ -14,12 +14,13 @@
|
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
16
|
|
|
17
|
+
import { DOMHelper } from '@eclipse-glsp/sprotty';
|
|
17
18
|
import { expect } from 'chai';
|
|
18
19
|
import { IMarqueeBehavior, MarqueeUtil } from './marquee-behavior';
|
|
19
20
|
|
|
20
21
|
describe('MarqueeUtil', () => {
|
|
21
22
|
function initUtil(marqueeBehavior?: IMarqueeBehavior): MarqueeUtil {
|
|
22
|
-
const util = new MarqueeUtil(marqueeBehavior);
|
|
23
|
+
const util = new MarqueeUtil(marqueeBehavior, new DOMHelper());
|
|
23
24
|
util.updateStartPoint({ x: 0, y: 0 });
|
|
24
25
|
util.updateCurrentPoint({ x: 0, y: 0 });
|
|
25
26
|
return util;
|
|
@@ -14,7 +14,24 @@
|
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
Bounds,
|
|
19
|
+
DOMHelper,
|
|
20
|
+
GModelElement,
|
|
21
|
+
GModelRoot,
|
|
22
|
+
GNode,
|
|
23
|
+
Point,
|
|
24
|
+
PointToPointLine,
|
|
25
|
+
TYPES,
|
|
26
|
+
TypeGuard,
|
|
27
|
+
isSelectable,
|
|
28
|
+
toTypeGuard,
|
|
29
|
+
typeGuard
|
|
30
|
+
} from '@eclipse-glsp/sprotty';
|
|
31
|
+
import { inject, injectable, optional } from 'inversify';
|
|
32
|
+
import { GEdge } from '../../../model';
|
|
33
|
+
import { BoundsAwareModelElement, getMatchingElements, isSelectableAndBoundsAware } from '../../../utils/gmodel-util';
|
|
34
|
+
import { toAbsoluteBounds } from '../../../utils/viewpoint-util';
|
|
18
35
|
import { DrawMarqueeAction } from './marquee-tool-feedback';
|
|
19
36
|
|
|
20
37
|
export interface IMarqueeBehavior {
|
|
@@ -22,17 +39,36 @@ export interface IMarqueeBehavior {
|
|
|
22
39
|
readonly entireEdge: boolean;
|
|
23
40
|
}
|
|
24
41
|
|
|
42
|
+
@injectable()
|
|
25
43
|
export class MarqueeUtil {
|
|
26
44
|
protected startPoint: Point;
|
|
27
45
|
protected currentPoint: Point;
|
|
28
|
-
protected marqueeBehavior: IMarqueeBehavior;
|
|
29
46
|
|
|
30
|
-
constructor(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
47
|
+
constructor(
|
|
48
|
+
@inject(TYPES.IMarqueeBehavior)
|
|
49
|
+
@optional()
|
|
50
|
+
protected marqueeBehavior: IMarqueeBehavior = { entireElement: false, entireEdge: false },
|
|
51
|
+
@inject(TYPES.DOMHelper) protected domHelper: DOMHelper
|
|
52
|
+
) {}
|
|
53
|
+
|
|
54
|
+
isContinuousMode(element: GModelElement, event: MouseEvent): boolean {
|
|
55
|
+
return event.shiftKey;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
getMarkableNodes(root: GModelRoot): BoundsAwareModelElement[] {
|
|
59
|
+
return getMatchingElements(root.index, this.isMarkableNode());
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
protected isMarkableNode(): TypeGuard<BoundsAwareModelElement> {
|
|
63
|
+
return typeGuard(toTypeGuard(GNode), isSelectableAndBoundsAware);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
getMarkableEdges(root: GModelRoot): GEdge[] {
|
|
67
|
+
return getMatchingElements(root.index, this.isMarkableEdge());
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
protected isMarkableEdge(): TypeGuard<GEdge> {
|
|
71
|
+
return typeGuard(toTypeGuard(GEdge), isSelectable);
|
|
36
72
|
}
|
|
37
73
|
|
|
38
74
|
updateStartPoint(position: Point): void {
|
|
@@ -43,10 +79,32 @@ export class MarqueeUtil {
|
|
|
43
79
|
this.currentPoint = position;
|
|
44
80
|
}
|
|
45
81
|
|
|
82
|
+
isMarked(element: BoundsAwareModelElement | GEdge): boolean {
|
|
83
|
+
return element instanceof GEdge ? this.isMarkedEdge(element) : this.isMarkedNode(element);
|
|
84
|
+
}
|
|
85
|
+
|
|
46
86
|
drawMarqueeAction(): DrawMarqueeAction {
|
|
47
87
|
return DrawMarqueeAction.create({ startPoint: this.startPoint, endPoint: this.currentPoint });
|
|
48
88
|
}
|
|
49
89
|
|
|
90
|
+
protected isMarkedEdge(edge: GEdge): boolean {
|
|
91
|
+
const domId = this.domHelper.createUniqueDOMElementId(edge);
|
|
92
|
+
const domEdge = document.getElementById(domId) as unknown as SVGElement | undefined;
|
|
93
|
+
if (!domEdge || domEdge.getAttribute('transform') || !domEdge.children[0]) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
const path = domEdge.children[0].getAttribute('d');
|
|
97
|
+
return this.isEdgePathMarked(path);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
protected isMarkedNode(node: BoundsAwareModelElement): boolean {
|
|
101
|
+
return this.isNodeMarked(this.getNodeBounds(node));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
protected getNodeBounds(node: BoundsAwareModelElement): Bounds {
|
|
105
|
+
return toAbsoluteBounds(node);
|
|
106
|
+
}
|
|
107
|
+
|
|
50
108
|
isEdgePathMarked(path: string | null): boolean {
|
|
51
109
|
if (!path) {
|
|
52
110
|
return false;
|
|
@@ -13,35 +13,23 @@
|
|
|
13
13
|
*
|
|
14
14
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
********************************************************************************/
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
DOMHelper,
|
|
19
|
-
GModelElement,
|
|
20
|
-
GModelRoot,
|
|
21
|
-
GNode,
|
|
22
|
-
KeyListener,
|
|
23
|
-
SelectAction,
|
|
24
|
-
TYPES,
|
|
25
|
-
isSelectable,
|
|
26
|
-
isSelected
|
|
27
|
-
} from '@eclipse-glsp/sprotty';
|
|
28
|
-
import { inject, injectable, optional } from 'inversify';
|
|
16
|
+
import { Action, GModelElement, GModelRoot, KeyListener, SelectAction, isSelected, typeGuard } from '@eclipse-glsp/sprotty';
|
|
17
|
+
import { inject, injectable } from 'inversify';
|
|
29
18
|
import { DragAwareMouseListener } from '../../../base/drag-aware-mouse-listener';
|
|
30
19
|
import { CursorCSS, cursorFeedbackAction } from '../../../base/feedback/css-feedback';
|
|
31
20
|
import { EnableDefaultToolsAction } from '../../../base/tool-manager/tool';
|
|
32
21
|
import { GEdge } from '../../../model';
|
|
33
|
-
import { BoundsAwareModelElement,
|
|
34
|
-
import { getAbsolutePosition
|
|
22
|
+
import { BoundsAwareModelElement, getMatchingElements, isSelectableAndBoundsAware } from '../../../utils/gmodel-util';
|
|
23
|
+
import { getAbsolutePosition } from '../../../utils/viewpoint-util';
|
|
35
24
|
import { BaseEditTool } from '../base-tools';
|
|
36
|
-
import {
|
|
25
|
+
import { MarqueeUtil } from './marquee-behavior';
|
|
37
26
|
import { RemoveMarqueeAction } from './marquee-tool-feedback';
|
|
38
27
|
|
|
39
28
|
@injectable()
|
|
40
29
|
export class MarqueeMouseTool extends BaseEditTool {
|
|
41
30
|
static ID = 'glsp.marquee-mouse-tool';
|
|
42
31
|
|
|
43
|
-
@inject(
|
|
44
|
-
@inject(TYPES.IMarqueeBehavior) @optional() protected marqueeBehavior: IMarqueeBehavior;
|
|
32
|
+
@inject(MarqueeUtil) protected marqueeUtil: MarqueeUtil;
|
|
45
33
|
|
|
46
34
|
protected shiftKeyListener: ShiftKeyListener = new ShiftKeyListener();
|
|
47
35
|
|
|
@@ -51,7 +39,7 @@ export class MarqueeMouseTool extends BaseEditTool {
|
|
|
51
39
|
|
|
52
40
|
enable(): void {
|
|
53
41
|
this.toDisposeOnDisable.push(
|
|
54
|
-
this.mouseTool.registerListener(new MarqueeMouseListener(this.
|
|
42
|
+
this.mouseTool.registerListener(new MarqueeMouseListener(this.editorContext.modelRoot, this.marqueeUtil)),
|
|
55
43
|
this.keyTool.registerListener(this.shiftKeyListener),
|
|
56
44
|
this.createFeedbackEmitter().add(cursorFeedbackAction(CursorCSS.MARQUEE), cursorFeedbackAction()).submit()
|
|
57
45
|
);
|
|
@@ -63,46 +51,26 @@ export class MarqueeMouseTool extends BaseEditTool {
|
|
|
63
51
|
}
|
|
64
52
|
|
|
65
53
|
export class MarqueeMouseListener extends DragAwareMouseListener {
|
|
66
|
-
protected domHelper: DOMHelper;
|
|
67
|
-
protected marqueeUtil: MarqueeUtil;
|
|
68
54
|
protected nodes: BoundsAwareModelElement[];
|
|
69
|
-
protected edges:
|
|
55
|
+
protected edges: GEdge[];
|
|
70
56
|
protected previouslySelected: string[];
|
|
71
57
|
protected isActive = false;
|
|
72
58
|
|
|
73
|
-
constructor(
|
|
59
|
+
constructor(
|
|
60
|
+
root: GModelRoot,
|
|
61
|
+
protected marqueeUtil: MarqueeUtil
|
|
62
|
+
) {
|
|
74
63
|
super();
|
|
75
|
-
|
|
76
|
-
this.
|
|
77
|
-
this.
|
|
78
|
-
root.index
|
|
79
|
-
.all()
|
|
80
|
-
.map(e => e as BoundsAwareModelElement)
|
|
81
|
-
.filter(e => isSelectable(e))
|
|
82
|
-
.filter(e => e instanceof GNode)
|
|
83
|
-
);
|
|
84
|
-
const sEdges = Array.from(
|
|
85
|
-
root.index
|
|
86
|
-
.all()
|
|
87
|
-
.filter(e => e instanceof GEdge)
|
|
88
|
-
.filter(e => isSelectable(e))
|
|
89
|
-
.map(e => e.id)
|
|
90
|
-
);
|
|
91
|
-
this.edges = Array.from(document.querySelectorAll('g')).filter(e => sEdges.includes(this.domHelper.findSModelIdByDOMElement(e)));
|
|
64
|
+
// pre-calculate all markable node and edges to improve performance
|
|
65
|
+
this.nodes = this.marqueeUtil.getMarkableNodes(root);
|
|
66
|
+
this.edges = this.marqueeUtil.getMarkableEdges(root);
|
|
92
67
|
}
|
|
93
68
|
|
|
94
69
|
override mouseDown(target: GModelElement, event: MouseEvent): Action[] {
|
|
95
70
|
this.isActive = true;
|
|
96
71
|
this.marqueeUtil.updateStartPoint(getAbsolutePosition(target, event));
|
|
97
72
|
if (event.ctrlKey) {
|
|
98
|
-
this.previouslySelected =
|
|
99
|
-
target.root.index
|
|
100
|
-
.all()
|
|
101
|
-
.filter(isSelectableAndBoundsAware)
|
|
102
|
-
.map(e => e as SelectableBoundsAware)
|
|
103
|
-
.filter(e => isSelected(e))
|
|
104
|
-
.map(e => e.id)
|
|
105
|
-
);
|
|
73
|
+
this.previouslySelected = getMatchingElements(target.index, typeGuard(isSelectableAndBoundsAware, isSelected)).map(e => e.id);
|
|
106
74
|
}
|
|
107
75
|
return [];
|
|
108
76
|
}
|
|
@@ -110,30 +78,20 @@ export class MarqueeMouseListener extends DragAwareMouseListener {
|
|
|
110
78
|
override mouseMove(target: GModelElement, event: MouseEvent): Action[] {
|
|
111
79
|
this.marqueeUtil.updateCurrentPoint(getAbsolutePosition(target, event));
|
|
112
80
|
if (this.isActive) {
|
|
113
|
-
const nodeIdsSelected = this.nodes.filter(e => this.marqueeUtil.
|
|
114
|
-
const edgeIdsSelected = this.edges.filter(e => this.
|
|
115
|
-
const
|
|
116
|
-
|
|
81
|
+
const nodeIdsSelected = this.nodes.filter(e => this.marqueeUtil.isMarked(e)).map(e => e.id);
|
|
82
|
+
const edgeIdsSelected = this.edges.filter(e => this.marqueeUtil.isMarked(e)).map(e => e.id);
|
|
83
|
+
const currentSelected = nodeIdsSelected.concat(edgeIdsSelected);
|
|
84
|
+
const selection = currentSelected.concat(this.previouslySelected);
|
|
85
|
+
return [SelectAction.setSelection(selection), this.marqueeUtil.drawMarqueeAction()];
|
|
117
86
|
}
|
|
118
87
|
return [];
|
|
119
88
|
}
|
|
120
89
|
|
|
121
|
-
override mouseUp(
|
|
90
|
+
override mouseUp(target: GModelElement, event: MouseEvent): Action[] {
|
|
122
91
|
this.isActive = false;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return [RemoveMarqueeAction.create(), EnableDefaultToolsAction.create()];
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
isEdgeMarked(element: SVGElement): boolean {
|
|
130
|
-
if (!element.getAttribute('transform')) {
|
|
131
|
-
if (element.children[0]) {
|
|
132
|
-
const path = element.children[0].getAttribute('d');
|
|
133
|
-
return this.marqueeUtil.isEdgePathMarked(path);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return false;
|
|
92
|
+
return this.marqueeUtil.isContinuousMode(target, event)
|
|
93
|
+
? [RemoveMarqueeAction.create()]
|
|
94
|
+
: [RemoveMarqueeAction.create(), EnableDefaultToolsAction.create()];
|
|
137
95
|
}
|
|
138
96
|
}
|
|
139
97
|
|
|
@@ -19,10 +19,12 @@ import { MarqueeTool } from './marquee-tool';
|
|
|
19
19
|
import { DrawMarqueeCommand, MARQUEE, RemoveMarqueeCommand } from './marquee-tool-feedback';
|
|
20
20
|
import { MarqueeNode } from './model';
|
|
21
21
|
import { MarqueeView } from './view';
|
|
22
|
+
import { MarqueeUtil } from './marquee-behavior';
|
|
22
23
|
|
|
23
24
|
export const marqueeSelectionToolModule = new FeatureModule(
|
|
24
25
|
(bind, unbind, isBound, rebind) => {
|
|
25
26
|
const context = { bind, unbind, isBound, rebind };
|
|
27
|
+
context.bind(MarqueeUtil).toSelf().inSingletonScope();
|
|
26
28
|
bindAsService(context, TYPES.IDefaultTool, MarqueeTool);
|
|
27
29
|
bindAsService(context, TYPES.ITool, MarqueeMouseTool);
|
|
28
30
|
|