@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.
@@ -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
- protected marqueeBehavior: IMarqueeBehavior;
26
- constructor(marqueeBehavior?: IMarqueeBehavior);
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,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACxE,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,qBAAa,WAAW;IACpB,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC;IAC5B,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC;IAC9B,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;gBAEhC,eAAe,CAAC,EAAE,gBAAgB;IAQ9C,gBAAgB,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI;IAIvC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI;IAIzC,iBAAiB,IAAI,iBAAiB;IAItC,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"}
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
- if (marqueeBehavior) {
24
- this.marqueeBehavior = marqueeBehavior;
25
- }
26
- else {
27
- this.marqueeBehavior = { entireElement: false, entireEdge: false };
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":"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"}
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, DOMHelper, GModelElement, GModelRoot, KeyListener } from '@eclipse-glsp/sprotty';
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 { IMarqueeBehavior, MarqueeUtil } from './marquee-behavior';
21
+ import { MarqueeUtil } from './marquee-behavior';
21
22
  export declare class MarqueeMouseTool extends BaseEditTool {
22
23
  static ID: string;
23
- protected domHelper: DOMHelper;
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: SVGGElement[];
33
+ protected edges: GEdge[];
35
34
  protected previouslySelected: string[];
36
35
  protected isActive: boolean;
37
- constructor(domHelper: DOMHelper, root: GModelRoot, marqueeBehavior: IMarqueeBehavior | undefined);
36
+ constructor(root: GModelRoot, marqueeUtil: MarqueeUtil);
38
37
  mouseDown(target: GModelElement, event: MouseEvent): Action[];
39
38
  mouseMove(target: GModelElement, event: MouseEvent): Action[];
40
- mouseUp(_target: GModelElement, event: MouseEvent): Action[];
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,EACH,MAAM,EACN,SAAS,EACT,aAAa,EACb,UAAU,EAEV,WAAW,EAKd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAIjF,OAAO,EAAE,uBAAuB,EAAqD,MAAM,4BAA4B,CAAC;AAExH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGnE,qBACa,gBAAiB,SAAQ,YAAY;IAC9C,MAAM,CAAC,EAAE,SAA6B;IAEb,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IACZ,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAExF,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;IAC5D,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;IACnC,SAAS,CAAC,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC3C,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;IAC/B,SAAS,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IACvC,SAAS,CAAC,QAAQ,UAAS;gBAEf,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,GAAG,SAAS;IAqBxF,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;IAgB7D,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;IAW7D,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;IAQrE,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;CAS7C;AAED,qBACa,gBAAiB,SAAQ,WAAW;IACpC,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,EAAE;CAMzE"}
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.domHelper, this.editorContext.modelRoot, this.marqueeBehavior)), this.keyTool.registerListener(this.shiftKeyListener), this.createFeedbackEmitter().add((0, css_feedback_1.cursorFeedbackAction)(css_feedback_1.CursorCSS.MARQUEE), (0, css_feedback_1.cursorFeedbackAction)()).submit());
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)(sprotty_1.TYPES.DOMHelper),
59
- __metadata("design:type", sprotty_1.DOMHelper)
60
- ], MarqueeMouseTool.prototype, "domHelper", void 0);
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(domHelper, root, marqueeBehavior) {
64
+ constructor(root, marqueeUtil) {
71
65
  super();
66
+ this.marqueeUtil = marqueeUtil;
72
67
  this.isActive = false;
73
- this.domHelper = domHelper;
74
- this.marqueeUtil = new marquee_behavior_1.MarqueeUtil(marqueeBehavior);
75
- this.nodes = Array.from(root.index
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 = Array.from(target.root.index
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.isNodeMarked((0, viewpoint_util_1.toAbsoluteBounds)(e))).map(e => e.id);
104
- const edgeIdsSelected = this.edges.filter(e => this.isEdgeMarked(e)).map(e => this.domHelper.findSModelIdByDOMElement(e));
105
- const selected = nodeIdsSelected.concat(edgeIdsSelected);
106
- return [sprotty_1.SelectAction.setSelection(selected.concat(this.previouslySelected)), this.marqueeUtil.drawMarqueeAction()];
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(_target, event) {
91
+ mouseUp(target, event) {
111
92
  this.isActive = false;
112
- if (event.shiftKey) {
113
- return [marquee_tool_feedback_1.RemoveMarqueeAction.create()];
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":"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"}
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;AAOrH,eAAO,MAAM,0BAA0B,eAYtC,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;AAExB,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,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"}
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.360+0c1c838",
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.360+0c1c838",
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": "0c1c838eb8a0ffb9a647a7f617bdf9602086d0af"
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 { Bounds, Point, PointToPointLine } from '@eclipse-glsp/sprotty';
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(marqueeBehavior?: IMarqueeBehavior) {
31
- if (marqueeBehavior) {
32
- this.marqueeBehavior = marqueeBehavior;
33
- } else {
34
- this.marqueeBehavior = { entireElement: false, entireEdge: false };
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
- Action,
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, SelectableBoundsAware, isSelectableAndBoundsAware } from '../../../utils/gmodel-util';
34
- import { getAbsolutePosition, toAbsoluteBounds } from '../../../utils/viewpoint-util';
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 { IMarqueeBehavior, MarqueeUtil } from './marquee-behavior';
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(TYPES.DOMHelper) protected domHelper: DOMHelper;
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.domHelper, this.editorContext.modelRoot, this.marqueeBehavior)),
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: SVGGElement[];
55
+ protected edges: GEdge[];
70
56
  protected previouslySelected: string[];
71
57
  protected isActive = false;
72
58
 
73
- constructor(domHelper: DOMHelper, root: GModelRoot, marqueeBehavior: IMarqueeBehavior | undefined) {
59
+ constructor(
60
+ root: GModelRoot,
61
+ protected marqueeUtil: MarqueeUtil
62
+ ) {
74
63
  super();
75
- this.domHelper = domHelper;
76
- this.marqueeUtil = new MarqueeUtil(marqueeBehavior);
77
- this.nodes = Array.from(
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 = Array.from(
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.isNodeMarked(toAbsoluteBounds(e))).map(e => e.id);
114
- const edgeIdsSelected = this.edges.filter(e => this.isEdgeMarked(e)).map(e => this.domHelper.findSModelIdByDOMElement(e));
115
- const selected = nodeIdsSelected.concat(edgeIdsSelected);
116
- return [SelectAction.setSelection(selected.concat(this.previouslySelected)), this.marqueeUtil.drawMarqueeAction()];
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(_target: GModelElement, event: MouseEvent): Action[] {
90
+ override mouseUp(target: GModelElement, event: MouseEvent): Action[] {
122
91
  this.isActive = false;
123
- if (event.shiftKey) {
124
- return [RemoveMarqueeAction.create()];
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