@eclipse-glsp/client 2.2.0-next.358 → 2.2.0-next.360

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,8 +13,9 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
- import { Action, GModelElement, Point } from '@eclipse-glsp/sprotty';
16
+ import { Action, DisposableCollection, GModelElement, GModelRoot, Point } from '@eclipse-glsp/sprotty';
17
17
  import { DragAwareMouseListener } from '../../base/drag-aware-mouse-listener';
18
+ import { EditorContextService } from '../../base/editor-context-service';
18
19
  import { FeedbackEmitter } from '../../base/feedback/feedback-emitter';
19
20
  import { MoveableElement } from '../../utils/gmodel-util';
20
21
  import { FeedbackAwareTool } from '../tools/base-tools';
@@ -27,14 +28,17 @@ export declare class MouseTrackingElementPositionListener extends DragAwareMouse
27
28
  protected elementId: string;
28
29
  protected tool: PositioningTool;
29
30
  protected cursorPosition: 'top-left' | 'middle';
31
+ protected editorContext?: EditorContextService | undefined;
30
32
  protected moveGhostFeedback: FeedbackEmitter;
31
33
  protected tracker: ChangeBoundsTracker;
32
- constructor(elementId: string, tool: PositioningTool, cursorPosition?: 'top-left' | 'middle');
34
+ protected toDispose: DisposableCollection;
35
+ constructor(elementId: string, tool: PositioningTool, cursorPosition?: 'top-left' | 'middle', editorContext?: EditorContextService | undefined);
33
36
  protected getTrackedElement(target: GModelElement, event: MouseEvent): MoveableElement | undefined;
34
37
  mouseMove(ctx: GModelElement, event: MouseEvent): Action[];
35
38
  protected initialize(element: MoveableElement, target: GModelElement, event: MouseEvent): void;
36
39
  protected initializeElementPosition(element: MoveableElement, target: GModelElement, event: MouseEvent): Point;
37
40
  protected addMoveFeedback(move: TrackedMove, ctx: GModelElement, event: MouseEvent): void;
41
+ protected modelRootChanged(root: Readonly<GModelRoot>): void;
38
42
  dispose(): void;
39
43
  }
40
44
  //# sourceMappingURL=mouse-tracking-element-position-listener.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mouse-tracking-element-position-listener.d.ts","sourceRoot":"","sources":["../../../src/features/element-template/mouse-tracking-element-position-listener.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAElF,OAAO,EAAE,MAAM,EAAa,aAAa,EAAc,KAAK,EAA6B,MAAM,uBAAuB,CAAC;AACvH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAEnF,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAEhG,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;CACrD;AAED,qBAAa,oCAAqC,SAAQ,sBAAsB;IAKxE,SAAS,CAAC,SAAS,EAAE,MAAM;IAC3B,SAAS,CAAC,IAAI,EAAE,eAAe;IAC/B,SAAS,CAAC,cAAc,EAAE,UAAU,GAAG,QAAQ;IANnD,SAAS,CAAC,iBAAiB,EAAE,eAAe,CAAC;IAC7C,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAC;gBAGzB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,eAAe,EACrB,cAAc,GAAE,UAAU,GAAG,QAAqB;IAOhE,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS;IAKzF,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;IA2BnE,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAK9F,SAAS,CAAC,yBAAyB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,KAAK;IAO9G,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAKhF,OAAO,IAAI,IAAI;CAI3B"}
1
+ {"version":3,"file":"mouse-tracking-element-position-listener.d.ts","sourceRoot":"","sources":["../../../src/features/element-template/mouse-tracking-element-position-listener.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAElF,OAAO,EACH,MAAM,EAEN,oBAAoB,EACpB,aAAa,EACb,UAAU,EAEV,KAAK,EAGR,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAEnF,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAEhG,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;CACrD;AAED,qBAAa,oCAAqC,SAAQ,sBAAsB;IAMxE,SAAS,CAAC,SAAS,EAAE,MAAM;IAC3B,SAAS,CAAC,IAAI,EAAE,eAAe;IAC/B,SAAS,CAAC,cAAc,EAAE,UAAU,GAAG,QAAQ;IAC/C,SAAS,CAAC,aAAa,CAAC;IAR5B,SAAS,CAAC,iBAAiB,EAAE,eAAe,CAAC;IAC7C,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACvC,SAAS,CAAC,SAAS,uBAA8B;gBAGnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,eAAe,EACrB,cAAc,GAAE,UAAU,GAAG,QAAqB,EAClD,aAAa,CAAC,kCAAsB;IAYlD,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS;IAKzF,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;IA2BnE,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAK9F,SAAS,CAAC,yBAAyB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,KAAK;IAO9G,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAKzF,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI;IAKnD,OAAO,IAAI,IAAI;CAI3B"}
@@ -22,13 +22,20 @@ const css_feedback_1 = require("../../base/feedback/css-feedback");
22
22
  const viewpoint_util_1 = require("../../utils/viewpoint-util");
23
23
  const change_bounds_tool_feedback_1 = require("../tools/change-bounds/change-bounds-tool-feedback");
24
24
  class MouseTrackingElementPositionListener extends drag_aware_mouse_listener_1.DragAwareMouseListener {
25
- constructor(elementId, tool, cursorPosition = 'top-left') {
25
+ constructor(elementId, tool, cursorPosition = 'top-left', editorContext) {
26
26
  super();
27
27
  this.elementId = elementId;
28
28
  this.tool = tool;
29
29
  this.cursorPosition = cursorPosition;
30
+ this.editorContext = editorContext;
31
+ this.toDispose = new sprotty_1.DisposableCollection();
30
32
  this.tracker = this.tool.changeBoundsManager.createTracker();
31
33
  this.moveGhostFeedback = this.tool.createFeedbackEmitter();
34
+ this.toDispose.push(this.moveGhostFeedback);
35
+ const modelRootChangedListener = editorContext === null || editorContext === void 0 ? void 0 : editorContext.onModelRootChanged(newRoot => this.modelRootChanged(newRoot));
36
+ if (modelRootChangedListener) {
37
+ this.toDispose.push(modelRootChangedListener);
38
+ }
32
39
  }
33
40
  getTrackedElement(target, event) {
34
41
  const element = target.root.index.getById(this.elementId);
@@ -71,8 +78,12 @@ class MouseTrackingElementPositionListener extends drag_aware_mouse_listener_1.D
71
78
  this.moveGhostFeedback.add(css_feedback_1.ModifyCSSFeedbackAction.create({ elements: [this.elementId], remove: [css_feedback_1.CSS_HIDDEN] }));
72
79
  this.tool.changeBoundsManager.addMoveFeedback(this.moveGhostFeedback, move, ctx, event);
73
80
  }
81
+ modelRootChanged(root) {
82
+ // stop the tracking once we receive a new model root and ensure proper alignment with next next mouse move
83
+ this.tracker.stopTracking();
84
+ }
74
85
  dispose() {
75
- this.moveGhostFeedback.dispose();
86
+ this.toDispose.dispose();
76
87
  super.dispose();
77
88
  }
78
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mouse-tracking-element-position-listener.js","sourceRoot":"","sources":["../../../src/features/element-template/mouse-tracking-element-position-listener.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mouse-tracking-element-position-listener.js","sourceRoot":"","sources":["../../../src/features/element-template/mouse-tracking-element-position-listener.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
- import { Action, AnchorComputerRegistry, GModelElement, TriggerEdgeCreationAction } from '@eclipse-glsp/sprotty';
16
+ import { Action, AnchorComputerRegistry, Args, GModelElement, TriggerEdgeCreationAction } from '@eclipse-glsp/sprotty';
17
17
  import { GLSPActionDispatcher } from '../../../base/action-dispatcher';
18
18
  import { DragAwareMouseListener } from '../../../base/drag-aware-mouse-listener';
19
19
  import { FeedbackEmitter } from '../../../base/feedback/feedback-emitter';
@@ -51,7 +51,18 @@ export declare class EdgeCreationToolMouseListener extends DragAwareMouseListene
51
51
  protected cursorFeedback: FeedbackEmitter;
52
52
  protected feedbackEdgeFeedback: FeedbackEmitter;
53
53
  constructor(triggerAction: TriggerEdgeCreationAction, actionDispatcher: GLSPActionDispatcher, typeHintProvider: ITypeHintProvider, tool: EdgeCreationTool, dragSensitivity?: number | undefined);
54
- nonDraggingMouseUp(_element: GModelElement, event: MouseEvent): Action[];
54
+ nonDraggingMouseUp(element: GModelElement, event: MouseEvent): Action[];
55
+ /**
56
+ * Determines wether the tool should run in continuous mode (also called stamp mode) or not.
57
+ * If continuous mode is enabled, the tool will stay after a successful creation.
58
+ * The user can then create more elements of the same type without having to re-trigger the tool.
59
+ * By default, continuous mode is enabled if the user holds the CTRL key.
60
+ * @param element the current model element
61
+ * @param event
62
+ */
63
+ protected isContinuousMode(element: GModelElement, event: MouseEvent): boolean;
64
+ protected getCreateOperation(element: GModelElement, event: MouseEvent, sourceElementId: string, targetElementId: string): Action;
65
+ protected getCreateEdgeOperationArgs(ctx: GModelElement, event: MouseEvent): Args | undefined;
55
66
  protected isSourceSelected(): boolean;
56
67
  protected isTargetSelected(): boolean;
57
68
  mouseOver(target: GModelElement, event: MouseEvent): Action[];
@@ -1 +1 @@
1
- {"version":3,"file":"edge-creation-tool.d.ts","sourceRoot":"","sources":["../../../../src/features/tools/edge-creation/edge-creation-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EACH,MAAM,EACN,sBAAsB,EAEtB,aAAa,EAGb,yBAAyB,EAI5B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE1E,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjD;;GAEG;AACH,qBACa,gBAAiB,SAAQ,gBAAgB,CAAC,yBAAyB,CAAC;IAC7E,MAAM,CAAC,EAAE,SAAsB;IAEC,SAAS,CAAC,cAAc,EAAE,sBAAsB,CAAC;IAChD,SAAS,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAC/C,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IAErD,SAAS,CAAC,eAAe,sCAAgC;IAEzD,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,QAAQ,IAAI,IAAI;IAMhB,SAAS,CAAC,YAAY,IAAI,IAAI;IAO9B,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAWlC,SAAS,CAAC,iBAAiB,IAAI,IAAI;CAItC;AAED,qBAAa,6BAA8B,SAAQ,sBAAsB;IAWjE,SAAS,CAAC,aAAa,EAAE,yBAAyB;IAClD,SAAS,CAAC,gBAAgB,EAAE,oBAAoB;IAChD,SAAS,CAAC,gBAAgB,EAAE,iBAAiB;IAC7C,SAAS,CAAC,IAAI,EAAE,gBAAgB;IAChC,SAAS,CAAC,eAAe,CAAC;IAd9B,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACxC,SAAS,CAAC,aAAa,UAAS;IAChC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC;IAC3B,SAAS,CAAC,mBAAmB,UAAS;IACtC,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC;IAC1C,SAAS,CAAC,oBAAoB,EAAE,eAAe,CAAC;gBAGlC,aAAa,EAAE,yBAAyB,EACxC,gBAAgB,EAAE,oBAAoB,EACtC,gBAAgB,EAAE,iBAAiB,EACnC,IAAI,EAAE,gBAAgB,EACtB,eAAe,CAAC,oBAAQ;IAS7B,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;IAsCjF,SAAS,CAAC,gBAAgB,IAAI,OAAO;IAIrC,SAAS,CAAC,gBAAgB,IAAI,OAAO;IAI5B,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;IAsBtE,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAUtC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO;IA2B5F,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAKvC,OAAO,IAAI,IAAI;CAS3B"}
1
+ {"version":3,"file":"edge-creation-tool.d.ts","sourceRoot":"","sources":["../../../../src/features/tools/edge-creation/edge-creation-tool.ts"],"names":[],"mappings":"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"}
@@ -99,7 +99,7 @@ class EdgeCreationToolMouseListener extends drag_aware_mouse_listener_1.DragAwar
99
99
  this.cursorFeedback = tool.createFeedbackEmitter();
100
100
  this.feedbackEdgeFeedback = tool.createFeedbackEmitter();
101
101
  }
102
- nonDraggingMouseUp(_element, event) {
102
+ nonDraggingMouseUp(element, event) {
103
103
  const result = [];
104
104
  if (event.button === 0) {
105
105
  if (!this.isSourceSelected()) {
@@ -114,13 +114,8 @@ class EdgeCreationToolMouseListener extends drag_aware_mouse_listener_1.DragAwar
114
114
  this.target = this.currentTarget.id;
115
115
  }
116
116
  if (this.source && this.target) {
117
- result.push(sprotty_1.CreateEdgeOperation.create({
118
- elementTypeId: this.triggerAction.elementTypeId,
119
- sourceElementId: this.source,
120
- targetElementId: this.target,
121
- args: this.triggerAction.args
122
- }));
123
- if (!(0, sprotty_1.isCtrlOrCmd)(event)) {
117
+ result.push(this.getCreateOperation(element, event, this.source, this.target));
118
+ if (!this.isContinuousMode(element, event)) {
124
119
  result.push(tool_1.EnableDefaultToolsAction.create());
125
120
  }
126
121
  else {
@@ -134,6 +129,28 @@ class EdgeCreationToolMouseListener extends drag_aware_mouse_listener_1.DragAwar
134
129
  }
135
130
  return result;
136
131
  }
132
+ /**
133
+ * Determines wether the tool should run in continuous mode (also called stamp mode) or not.
134
+ * If continuous mode is enabled, the tool will stay after a successful creation.
135
+ * The user can then create more elements of the same type without having to re-trigger the tool.
136
+ * By default, continuous mode is enabled if the user holds the CTRL key.
137
+ * @param element the current model element
138
+ * @param event
139
+ */
140
+ isContinuousMode(element, event) {
141
+ return (0, sprotty_1.isCtrlOrCmd)(event);
142
+ }
143
+ getCreateOperation(element, event, sourceElementId, targetElementId) {
144
+ return sprotty_1.CreateEdgeOperation.create({
145
+ elementTypeId: this.triggerAction.elementTypeId,
146
+ sourceElementId,
147
+ targetElementId,
148
+ args: this.getCreateEdgeOperationArgs(element, event)
149
+ });
150
+ }
151
+ getCreateEdgeOperationArgs(ctx, event) {
152
+ return Object.assign({}, this.triggerAction.args);
153
+ }
137
154
  isSourceSelected() {
138
155
  return this.source !== undefined;
139
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"edge-creation-tool.js","sourceRoot":"","sources":["../../../../src/features/tools/edge-creation/edge-creation-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edge-creation-tool.js","sourceRoot":"","sources":["../../../../src/features/tools/edge-creation/edge-creation-tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;kFAckF;AAClF,mDAY+B;AAC/B,yCAAyD;AAEzD,uFAAiF;AACjF,sEAAsF;AAEtF,0DAA2E;AAC3E,0CAAuC;AAGvC,8CAAiD;AACjD,qEAA4F;AAC5F,+EAAmF;AAEnF;;GAEG;AAEI,IAAM,gBAAgB,wBAAtB,MAAM,gBAAiB,SAAQ,6BAA2C;IAA1E;;QAOO,oBAAe,GAAG,mCAAyB,CAAC,EAAE,CAAC;IAkC7D,CAAC;IAhCG,IAAI,EAAE;QACF,OAAO,kBAAgB,CAAC,EAAE,CAAC;IAC/B,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAES,YAAY;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE;aAC5C,GAAG,CAAC,IAAA,mCAAoB,EAAC,wBAAS,CAAC,qBAAqB,CAAC,EAAE,IAAA,mCAAoB,GAAE,CAAC;aAClF,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAES,gBAAgB;QACtB,MAAM,gBAAgB,GAAG,IAAI,6BAA6B,CACtD,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,EACrB,IAAI,EACJ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAC1C,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACtG,CAAC;IAES,iBAAiB;QACvB,MAAM,mBAAmB,GAAG,IAAI,gEAAkC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC5G,CAAC;;AAxCQ,4CAAgB;AAClB,mBAAE,GAAG,kBAAkB,AAArB,CAAsB;AAEW;IAAzC,IAAA,kBAAM,EAAC,gCAAsB,CAAC;8BAA2B,gCAAsB;wDAAC;AACtC;IAA1C,IAAA,kBAAM,EAAC,eAAK,CAAC,iBAAiB,CAAC;;0DAA+C;AACrC;IAAzC,IAAA,oBAAQ,GAAE;IAAE,IAAA,kBAAM,EAAC,eAAK,CAAC,IAAI,CAAC;;8CAAsB;2BAL5C,gBAAgB;IAD5B,IAAA,sBAAU,GAAE;GACA,gBAAgB,CAyC5B;AAED,MAAa,6BAA8B,SAAQ,kDAAsB;IAUrE,YACc,aAAwC,EACxC,gBAAsC,EACtC,gBAAmC,EACnC,IAAsB,EACtB,eAAwB;QAElC,KAAK,CAAC,eAAe,CAAC,CAAC;QANb,kBAAa,GAAb,aAAa,CAA2B;QACxC,qBAAgB,GAAhB,gBAAgB,CAAsB;QACtC,qBAAgB,GAAhB,gBAAgB,CAAmB;QACnC,SAAI,GAAJ,IAAI,CAAkB;QACtB,oBAAe,GAAf,eAAe,CAAS;QAX5B,kBAAa,GAAG,KAAK,CAAC;QAEtB,wBAAmB,GAAG,KAAK,CAAC;QAYlC,IAAI,CAAC,SAAS,GAAG,IAAI,aAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACnD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC7D,CAAC;IAEQ,kBAAkB,CAAC,OAAsB,EAAE,KAAiB;QACjE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;oBACpC,IAAI,CAAC,oBAAoB;yBACpB,GAAG,CACA,+CAAsB,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EACzG,iDAAwB,CAAC,MAAM,EAAE,CACpC;yBACA,MAAM,EAAE,CAAC;gBAClB,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBAClD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACxC,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/E,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;oBACzC,MAAM,CAAC,IAAI,CAAC,+BAAwB,CAAC,MAAM,EAAE,CAAC,CAAC;gBACnD,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;YACL,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,+BAAwB,CAAC,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACO,gBAAgB,CAAC,OAAsB,EAAE,KAAiB;QAChE,OAAO,IAAA,qBAAW,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAES,kBAAkB,CAAC,OAAsB,EAAE,KAAiB,EAAE,eAAuB,EAAE,eAAuB;QACpH,OAAO,6BAAmB,CAAC,MAAM,CAAC;YAC9B,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa;YAC/C,eAAe;YACf,eAAe;YACf,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC;SACxD,CAAC,CAAC;IACP,CAAC;IAES,0BAA0B,CAAC,GAAkB,EAAE,KAAiB;QACtE,yBAAY,IAAI,CAAC,aAAa,CAAC,IAAI,EAAG;IAC1C,CAAC;IAES,gBAAgB;QACtB,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IACrC,CAAC;IAES,gBAAgB;QACtB,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IACrC,CAAC;IAEQ,SAAS,CAAC,MAAqB,EAAE,KAAiB;QACvD,MAAM,gBAAgB,GAAG,IAAA,6BAAmB,EAAC,MAAM,EAAE,uBAAa,CAAC,CAAC;QACpE,IAAI,gBAAgB,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1C,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAC;YACtC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;oBAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;gBACrE,CAAC;qBAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;oBAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;gBACrE,CAAC;gBACD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC3B,OAAO,CAAC,IAAA,mCAAoB,EAAC,wBAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAChE,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC/B,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAES,kBAAkB;QACxB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACnC,CAAC,CAAC,IAAA,mCAAoB,EAAC,wBAAS,CAAC,oBAAoB,CAAC;gBACtD,CAAC,CAAC,IAAA,mCAAoB,EAAC,wBAAS,CAAC,oBAAoB,CAAC,CAAC;YAC3D,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,OAAO,IAAA,mCAAoB,EAAC,wBAAS,CAAC,qBAAqB,CAAC,CAAC;IACjE,CAAC;IAES,UAAU,CAAC,OAAkC,EAAE,IAAyB;;QAC9E,IAAI,CAAC,OAAO,IAAI,CAAC,IAAA,uBAAa,EAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;YACnF,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,aAAa,GAAG,MAAA,IAAI,CAAC,MAAM,mCAAI,OAAO,CAAC;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAExD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,4BAA4B;QAC5B,IAAI,CAAC,gBAAgB;aAChB,OAAO,CAAC,gCAAsB,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;aACvG,IAAI,CAAC,MAAM,CAAC,EAAE;YACX,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;gBACpC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACrC,CAAC;QACL,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1E,gFAAgF;QAChF,mFAAmF;QACnF,OAAO,KAAK,CAAC;IACjB,CAAC;IAES,SAAS,CAAC,UAAkB;;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACnE,OAAO,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,mCAAI,KAAK,CAAC;IACtC,CAAC;IAEQ,OAAO;QACZ,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC9B,KAAK,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;CACJ;AAjKD,sEAiKC"}
@@ -16,6 +16,7 @@
16
16
  import { Action, Args, Disposable, GModelElement, GhostElement, IModelFactory, TriggerNodeCreationAction } from '@eclipse-glsp/sprotty';
17
17
  import '../../../../css/ghost-element.css';
18
18
  import { DragAwareMouseListener } from '../../../base/drag-aware-mouse-listener';
19
+ import { EditorContextService } from '../../../base/editor-context-service';
19
20
  import { FeedbackEmitter } from '../../../base/feedback/feedback-emitter';
20
21
  import { MoveableElement } from '../../../utils/gmodel-util';
21
22
  import { MouseTrackingElementPositionListener, PositioningTool } from '../../element-template/mouse-tracking-element-position-listener';
@@ -36,10 +37,13 @@ export declare class NodeCreationTool extends BaseCreationTool<TriggerNodeCreati
36
37
  protected createNodeCreationListener(ghostElement: GhostElement): Disposable;
37
38
  protected createNodeCreationCursorFeedback(): FeedbackEmitter;
38
39
  }
40
+ export interface ContainerPositioningTool extends PositioningTool {
41
+ readonly containerManager: ContainerManager;
42
+ }
39
43
  export declare class NodeInsertTrackingListener extends MouseTrackingElementPositionListener {
40
44
  protected elementTypeId: string;
41
- protected tool: NodeCreationTool;
42
- constructor(elementId: string, elementTypeId: string, tool: NodeCreationTool, cursorPosition?: 'top-left' | 'middle');
45
+ protected tool: ContainerPositioningTool;
46
+ constructor(elementId: string, elementTypeId: string, tool: ContainerPositioningTool, cursorPosition?: 'top-left' | 'middle', editorContext?: EditorContextService);
43
47
  protected addMoveFeedback(move: TrackedMove, ctx: GModelElement, event: MouseEvent): void;
44
48
  }
45
49
  export declare class NodeCreationToolMouseListener extends DragAwareMouseListener {
@@ -52,6 +56,16 @@ export declare class NodeCreationToolMouseListener extends DragAwareMouseListene
52
56
  constructor(triggerAction: TriggerNodeCreationAction, tool: NodeCreationTool, ghostElement: GhostElement);
53
57
  get elementTypeId(): string;
54
58
  nonDraggingMouseUp(ctx: GModelElement, event: MouseEvent): Action[];
59
+ /**
60
+ * Determines wether the tool should run in continuous mode (also called stamp mode) or not.
61
+ * If continuous mode is enabled, the tool will stay after a successful creation.
62
+ * The user can then create more elements of the same type without having to re-trigger the tool.
63
+ * By default, continuous mode is enabled if the user holds the CTRL key.
64
+ * @param ctx the current model context
65
+ * @param event
66
+ */
67
+ protected isContinuousMode(ctx: GModelElement, event: MouseEvent): boolean;
68
+ protected getCreateOperation(ctx: GModelElement, event: MouseEvent, insert: TrackedInsert): Action;
55
69
  protected getCreateNodeOperationArgs(insert: TrackedInsert, ctx: GModelElement, event: MouseEvent): Args | undefined;
56
70
  protected createGhostElement(ghostElement: GhostElement): string;
57
71
  protected getGhostElement(ctx: GModelElement, event: MouseEvent): MoveableElement | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"node-creation-tool.d.ts","sourceRoot":"","sources":["../../../../src/features/tools/node-creation/node-creation-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-creation-tool.d.ts","sourceRoot":"","sources":["../../../../src/features/tools/node-creation/node-creation-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAClF,OAAO,EACH,MAAM,EACN,IAAI,EAIJ,UAAU,EAEV,aAAa,EACb,YAAY,EACZ,aAAa,EAGb,yBAAyB,EAI5B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,mCAAmC,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,oCAAoC,EAAE,eAAe,EAAE,MAAM,iEAAiE,CAAC;AAExI,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGtE,qBACa,gBAAiB,SAAQ,gBAAgB,CAAC,yBAAyB,CAAE,YAAW,eAAe;IACxG,MAAM,CAAC,EAAE,SAAsB;IAE/B,SAAS,CAAC,eAAe,sCAAgC;IAE5B,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IACrD,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACzC,YAAY,EAAE,aAAa,CAAC;IAEzD,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,QAAQ,IAAI,IAAI;IAOhB,SAAS,CAAC,qBAAqB,IAAI,aAAa;IAIhD,SAAS,CAAC,yBAAyB,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,UAAU;IAW5G,SAAS,CAAC,0BAA0B,CAAC,YAAY,EAAE,YAAY,GAAG,UAAU;IAK5E,SAAS,CAAC,gCAAgC,IAAI,eAAe;CAGhE;AAED,MAAM,WAAW,wBAAyB,SAAQ,eAAe;IAC7D,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC/C;AAED,qBAAa,0BAA2B,SAAQ,oCAAoC;IAG5E,SAAS,CAAC,aAAa,EAAE,MAAM;cACZ,IAAI,EAAE,wBAAwB;gBAFjD,SAAS,EAAE,MAAM,EACP,aAAa,EAAE,MAAM,EACZ,IAAI,EAAE,wBAAwB,EACjD,cAAc,GAAE,UAAU,GAAG,QAAqB,EAClD,aAAa,CAAC,EAAE,oBAAoB;cAKrB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;CAOrG;AAED,qBAAa,6BAA8B,SAAQ,sBAAsB;IAMjE,SAAS,CAAC,aAAa,EAAE,yBAAyB;IAClD,SAAS,CAAC,IAAI,EAAE,gBAAgB;IAChC,SAAS,CAAC,YAAY,EAAE,YAAY;IAPxC,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC;IAC1C,SAAS,CAAC,oBAAoB,EAAE,eAAe,CAAC;IAChD,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;gBAGnB,aAAa,EAAE,yBAAyB,EACxC,IAAI,EAAE,gBAAgB,EACtB,YAAY,EAAE,YAAY;IASxC,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEQ,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE;IAuB5E;;;;;;;OAOG;IACH,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO;IAI1E,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM;IAQlG,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS;IAgBpH,SAAS,CAAC,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM;IAUhE,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS;IAK7F,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,aAAa;IAQhF,SAAS,CAAC,yBAAyB,IAAI,IAAI;IAIlC,OAAO,IAAI,IAAI;CAI3B"}
@@ -58,7 +58,7 @@ let NodeCreationTool = NodeCreationTool_1 = class NodeCreationTool extends base_
58
58
  return new insert_indicator_1.InsertIndicator();
59
59
  }
60
60
  createGhostElementTracker(ghostElement, position) {
61
- const trackingListener = new NodeInsertTrackingListener((0, add_template_element_1.getTemplateElementId)(ghostElement.template), this.triggerAction.elementTypeId, this, position);
61
+ const trackingListener = new NodeInsertTrackingListener((0, add_template_element_1.getTemplateElementId)(ghostElement.template), this.triggerAction.elementTypeId, this, position, this.editorContext);
62
62
  return new sprotty_1.DisposableCollection(trackingListener, this.mouseTool.registerListener(trackingListener));
63
63
  }
64
64
  createNodeCreationListener(ghostElement) {
@@ -87,8 +87,8 @@ exports.NodeCreationTool = NodeCreationTool = NodeCreationTool_1 = __decorate([
87
87
  (0, inversify_1.injectable)()
88
88
  ], NodeCreationTool);
89
89
  class NodeInsertTrackingListener extends mouse_tracking_element_position_listener_1.MouseTrackingElementPositionListener {
90
- constructor(elementId, elementTypeId, tool, cursorPosition = 'top-left') {
91
- super(elementId, tool, cursorPosition);
90
+ constructor(elementId, elementTypeId, tool, cursorPosition = 'top-left', editorContext) {
91
+ super(elementId, tool, cursorPosition, editorContext);
92
92
  this.elementTypeId = elementTypeId;
93
93
  this.tool = tool;
94
94
  }
@@ -116,17 +116,12 @@ class NodeCreationToolMouseListener extends drag_aware_mouse_listener_1.DragAwar
116
116
  return this.triggerAction.elementTypeId;
117
117
  }
118
118
  nonDraggingMouseUp(ctx, event) {
119
- var _a;
120
119
  const result = [];
121
120
  const insert = this.getTrackedInsert(ctx, event);
122
121
  if (insert.valid) {
123
- result.push(sprotty_1.CreateNodeOperation.create(this.elementTypeId, {
124
- location: insert.location,
125
- containerId: (_a = insert.container) === null || _a === void 0 ? void 0 : _a.id,
126
- args: this.getCreateNodeOperationArgs(insert, ctx, event)
127
- }));
122
+ result.push(this.getCreateOperation(ctx, event, insert));
128
123
  }
129
- if ((0, sprotty_1.isCtrlOrCmd)(event)) {
124
+ if (this.isContinuousMode(ctx, event)) {
130
125
  // we continue in stamp mode so we keep the ghost but dispose everything else
131
126
  this.disposeAllButGhostElement();
132
127
  return result;
@@ -141,6 +136,25 @@ class NodeCreationToolMouseListener extends drag_aware_mouse_listener_1.DragAwar
141
136
  result.push(tool_1.EnableDefaultToolsAction.create());
142
137
  return result;
143
138
  }
139
+ /**
140
+ * Determines wether the tool should run in continuous mode (also called stamp mode) or not.
141
+ * If continuous mode is enabled, the tool will stay after a successful creation.
142
+ * The user can then create more elements of the same type without having to re-trigger the tool.
143
+ * By default, continuous mode is enabled if the user holds the CTRL key.
144
+ * @param ctx the current model context
145
+ * @param event
146
+ */
147
+ isContinuousMode(ctx, event) {
148
+ return (0, sprotty_1.isCtrlOrCmd)(event);
149
+ }
150
+ getCreateOperation(ctx, event, insert) {
151
+ var _a;
152
+ return sprotty_1.CreateNodeOperation.create(this.elementTypeId, {
153
+ location: insert.location,
154
+ containerId: (_a = insert.container) === null || _a === void 0 ? void 0 : _a.id,
155
+ args: this.getCreateNodeOperationArgs(insert, ctx, event)
156
+ });
157
+ }
144
158
  getCreateNodeOperationArgs(insert, ctx, event) {
145
159
  let args = Object.assign({}, this.triggerAction.args);
146
160
  const ghostElement = this.getGhostElement(ctx, event);
@@ -1 +1 @@
1
- {"version":3,"file":"node-creation-tool.js","sourceRoot":"","sources":["../../../../src/features/tools/node-creation/node-creation-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-creation-tool.js","sourceRoot":"","sources":["../../../../src/features/tools/node-creation/node-creation-tool.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-glsp/client",
3
- "version": "2.2.0-next.358+398cecf",
3
+ "version": "2.2.0-next.360+0c1c838",
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.358+398cecf",
49
+ "@eclipse-glsp/sprotty": "2.2.0-next.360+0c1c838",
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": "398cecff300762208594edadf1dea75ab42de5a3"
66
+ "gitHead": "0c1c838eb8a0ffb9a647a7f617bdf9602086d0af"
67
67
  }
@@ -14,8 +14,19 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
 
17
- import { Action, Dimension, GModelElement, MoveAction, Point, isBoundsAware, isMoveable } from '@eclipse-glsp/sprotty';
17
+ import {
18
+ Action,
19
+ Dimension,
20
+ DisposableCollection,
21
+ GModelElement,
22
+ GModelRoot,
23
+ MoveAction,
24
+ Point,
25
+ isBoundsAware,
26
+ isMoveable
27
+ } from '@eclipse-glsp/sprotty';
18
28
  import { DragAwareMouseListener } from '../../base/drag-aware-mouse-listener';
29
+ import { EditorContextService } from '../../base/editor-context-service';
19
30
  import { CSS_HIDDEN, ModifyCSSFeedbackAction } from '../../base/feedback/css-feedback';
20
31
  import { FeedbackEmitter } from '../../base/feedback/feedback-emitter';
21
32
  import { MoveableElement } from '../../utils/gmodel-util';
@@ -32,15 +43,22 @@ export interface PositioningTool extends FeedbackAwareTool {
32
43
  export class MouseTrackingElementPositionListener extends DragAwareMouseListener {
33
44
  protected moveGhostFeedback: FeedbackEmitter;
34
45
  protected tracker: ChangeBoundsTracker;
46
+ protected toDispose = new DisposableCollection();
35
47
 
36
48
  constructor(
37
49
  protected elementId: string,
38
50
  protected tool: PositioningTool,
39
- protected cursorPosition: 'top-left' | 'middle' = 'top-left'
51
+ protected cursorPosition: 'top-left' | 'middle' = 'top-left',
52
+ protected editorContext?: EditorContextService
40
53
  ) {
41
54
  super();
42
55
  this.tracker = this.tool.changeBoundsManager.createTracker();
43
56
  this.moveGhostFeedback = this.tool.createFeedbackEmitter();
57
+ this.toDispose.push(this.moveGhostFeedback);
58
+ const modelRootChangedListener = editorContext?.onModelRootChanged(newRoot => this.modelRootChanged(newRoot));
59
+ if (modelRootChangedListener) {
60
+ this.toDispose.push(modelRootChangedListener);
61
+ }
44
62
  }
45
63
 
46
64
  protected getTrackedElement(target: GModelElement, event: MouseEvent): MoveableElement | undefined {
@@ -92,8 +110,13 @@ export class MouseTrackingElementPositionListener extends DragAwareMouseListener
92
110
  this.tool.changeBoundsManager.addMoveFeedback(this.moveGhostFeedback, move, ctx, event);
93
111
  }
94
112
 
113
+ protected modelRootChanged(root: Readonly<GModelRoot>): void {
114
+ // stop the tracking once we receive a new model root and ensure proper alignment with next next mouse move
115
+ this.tracker.stopTracking();
116
+ }
117
+
95
118
  override dispose(): void {
96
- this.moveGhostFeedback.dispose();
119
+ this.toDispose.dispose();
97
120
  super.dispose();
98
121
  }
99
122
  }
@@ -16,6 +16,7 @@
16
16
  import {
17
17
  Action,
18
18
  AnchorComputerRegistry,
19
+ Args,
19
20
  CreateEdgeOperation,
20
21
  GModelElement,
21
22
  RequestCheckEdgeAction,
@@ -109,7 +110,7 @@ export class EdgeCreationToolMouseListener extends DragAwareMouseListener {
109
110
  this.feedbackEdgeFeedback = tool.createFeedbackEmitter();
110
111
  }
111
112
 
112
- override nonDraggingMouseUp(_element: GModelElement, event: MouseEvent): Action[] {
113
+ override nonDraggingMouseUp(element: GModelElement, event: MouseEvent): Action[] {
113
114
  const result: Action[] = [];
114
115
  if (event.button === 0) {
115
116
  if (!this.isSourceSelected()) {
@@ -126,15 +127,8 @@ export class EdgeCreationToolMouseListener extends DragAwareMouseListener {
126
127
  this.target = this.currentTarget.id;
127
128
  }
128
129
  if (this.source && this.target) {
129
- result.push(
130
- CreateEdgeOperation.create({
131
- elementTypeId: this.triggerAction.elementTypeId,
132
- sourceElementId: this.source,
133
- targetElementId: this.target,
134
- args: this.triggerAction.args
135
- })
136
- );
137
- if (!isCtrlOrCmd(event)) {
130
+ result.push(this.getCreateOperation(element, event, this.source, this.target));
131
+ if (!this.isContinuousMode(element, event)) {
138
132
  result.push(EnableDefaultToolsAction.create());
139
133
  } else {
140
134
  this.dispose();
@@ -147,6 +141,31 @@ export class EdgeCreationToolMouseListener extends DragAwareMouseListener {
147
141
  return result;
148
142
  }
149
143
 
144
+ /**
145
+ * Determines wether the tool should run in continuous mode (also called stamp mode) or not.
146
+ * If continuous mode is enabled, the tool will stay after a successful creation.
147
+ * The user can then create more elements of the same type without having to re-trigger the tool.
148
+ * By default, continuous mode is enabled if the user holds the CTRL key.
149
+ * @param element the current model element
150
+ * @param event
151
+ */
152
+ protected isContinuousMode(element: GModelElement, event: MouseEvent): boolean {
153
+ return isCtrlOrCmd(event);
154
+ }
155
+
156
+ protected getCreateOperation(element: GModelElement, event: MouseEvent, sourceElementId: string, targetElementId: string): Action {
157
+ return CreateEdgeOperation.create({
158
+ elementTypeId: this.triggerAction.elementTypeId,
159
+ sourceElementId,
160
+ targetElementId,
161
+ args: this.getCreateEdgeOperationArgs(element, event)
162
+ });
163
+ }
164
+
165
+ protected getCreateEdgeOperationArgs(ctx: GModelElement, event: MouseEvent): Args | undefined {
166
+ return { ...this.triggerAction.args };
167
+ }
168
+
150
169
  protected isSourceSelected(): boolean {
151
170
  return this.source !== undefined;
152
171
  }
@@ -34,6 +34,7 @@ import {
34
34
  import { inject, injectable } from 'inversify';
35
35
  import '../../../../css/ghost-element.css';
36
36
  import { DragAwareMouseListener } from '../../../base/drag-aware-mouse-listener';
37
+ import { EditorContextService } from '../../../base/editor-context-service';
37
38
  import { CSS_GHOST_ELEMENT, CSS_HIDDEN, CursorCSS, cursorFeedbackAction } from '../../../base/feedback/css-feedback';
38
39
  import { FeedbackEmitter } from '../../../base/feedback/feedback-emitter';
39
40
  import { EnableDefaultToolsAction } from '../../../base/tool-manager/tool';
@@ -77,7 +78,8 @@ export class NodeCreationTool extends BaseCreationTool<TriggerNodeCreationAction
77
78
  getTemplateElementId(ghostElement.template),
78
79
  this.triggerAction.elementTypeId,
79
80
  this,
80
- position
81
+ position,
82
+ this.editorContext
81
83
  );
82
84
  return new DisposableCollection(trackingListener, this.mouseTool.registerListener(trackingListener));
83
85
  }
@@ -92,19 +94,23 @@ export class NodeCreationTool extends BaseCreationTool<TriggerNodeCreationAction
92
94
  }
93
95
  }
94
96
 
97
+ export interface ContainerPositioningTool extends PositioningTool {
98
+ readonly containerManager: ContainerManager;
99
+ }
100
+
95
101
  export class NodeInsertTrackingListener extends MouseTrackingElementPositionListener {
96
102
  constructor(
97
103
  elementId: string,
98
104
  protected elementTypeId: string,
99
- protected override tool: NodeCreationTool,
100
- cursorPosition: 'top-left' | 'middle' = 'top-left'
105
+ protected override tool: ContainerPositioningTool,
106
+ cursorPosition: 'top-left' | 'middle' = 'top-left',
107
+ editorContext?: EditorContextService
101
108
  ) {
102
- super(elementId, tool, cursorPosition);
109
+ super(elementId, tool, cursorPosition, editorContext);
103
110
  }
104
111
 
105
112
  protected override addMoveFeedback(move: TrackedMove, ctx: GModelElement, event: MouseEvent): void {
106
113
  super.addMoveFeedback(move, ctx, event);
107
-
108
114
  const element = move.elementMoves[0].element;
109
115
  const location = move.elementMoves[0].toPosition;
110
116
  const insert = this.tool.containerManager.insert(element, location, this.elementTypeId, { evt: event });
@@ -138,15 +144,9 @@ export class NodeCreationToolMouseListener extends DragAwareMouseListener {
138
144
 
139
145
  const insert = this.getTrackedInsert(ctx, event);
140
146
  if (insert.valid) {
141
- result.push(
142
- CreateNodeOperation.create(this.elementTypeId, {
143
- location: insert.location,
144
- containerId: insert.container?.id,
145
- args: this.getCreateNodeOperationArgs(insert, ctx, event)
146
- })
147
- );
147
+ result.push(this.getCreateOperation(ctx, event, insert));
148
148
  }
149
- if (isCtrlOrCmd(event)) {
149
+ if (this.isContinuousMode(ctx, event)) {
150
150
  // we continue in stamp mode so we keep the ghost but dispose everything else
151
151
  this.disposeAllButGhostElement();
152
152
  return result;
@@ -162,6 +162,26 @@ export class NodeCreationToolMouseListener extends DragAwareMouseListener {
162
162
  return result;
163
163
  }
164
164
 
165
+ /**
166
+ * Determines wether the tool should run in continuous mode (also called stamp mode) or not.
167
+ * If continuous mode is enabled, the tool will stay after a successful creation.
168
+ * The user can then create more elements of the same type without having to re-trigger the tool.
169
+ * By default, continuous mode is enabled if the user holds the CTRL key.
170
+ * @param ctx the current model context
171
+ * @param event
172
+ */
173
+ protected isContinuousMode(ctx: GModelElement, event: MouseEvent): boolean {
174
+ return isCtrlOrCmd(event);
175
+ }
176
+
177
+ protected getCreateOperation(ctx: GModelElement, event: MouseEvent, insert: TrackedInsert): Action {
178
+ return CreateNodeOperation.create(this.elementTypeId, {
179
+ location: insert.location,
180
+ containerId: insert.container?.id,
181
+ args: this.getCreateNodeOperationArgs(insert, ctx, event)
182
+ });
183
+ }
184
+
165
185
  protected getCreateNodeOperationArgs(insert: TrackedInsert, ctx: GModelElement, event: MouseEvent): Args | undefined {
166
186
  let args = { ...this.triggerAction.args };
167
187
  const ghostElement = this.getGhostElement(ctx, event);