@itwin/core-markup 3.4.0-dev.48 → 3.4.0-dev.50

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.
Files changed (50) hide show
  1. package/lib/cjs/Markup.d.ts +310 -310
  2. package/lib/cjs/Markup.js +410 -410
  3. package/lib/cjs/Markup.js.map +1 -1
  4. package/lib/cjs/MarkupTool.d.ts +38 -38
  5. package/lib/cjs/MarkupTool.js +81 -81
  6. package/lib/cjs/MarkupTool.js.map +1 -1
  7. package/lib/cjs/RedlineTool.d.ts +145 -145
  8. package/lib/cjs/RedlineTool.js +497 -497
  9. package/lib/cjs/RedlineTool.js.map +1 -1
  10. package/lib/cjs/SelectTool.d.ts +126 -126
  11. package/lib/cjs/SelectTool.js +717 -717
  12. package/lib/cjs/SelectTool.js.map +1 -1
  13. package/lib/cjs/SvgJsExt.d.ts +85 -85
  14. package/lib/cjs/SvgJsExt.js +185 -185
  15. package/lib/cjs/SvgJsExt.js.map +1 -1
  16. package/lib/cjs/TextEdit.d.ts +43 -43
  17. package/lib/cjs/TextEdit.js +184 -184
  18. package/lib/cjs/TextEdit.js.map +1 -1
  19. package/lib/cjs/Undo.d.ts +46 -46
  20. package/lib/cjs/Undo.js +141 -141
  21. package/lib/cjs/Undo.js.map +1 -1
  22. package/lib/cjs/core-markup.d.ts +18 -18
  23. package/lib/cjs/core-markup.js +34 -34
  24. package/lib/cjs/core-markup.js.map +1 -1
  25. package/lib/esm/Markup.d.ts +310 -310
  26. package/lib/esm/Markup.js +405 -405
  27. package/lib/esm/Markup.js.map +1 -1
  28. package/lib/esm/MarkupTool.d.ts +38 -38
  29. package/lib/esm/MarkupTool.js +77 -77
  30. package/lib/esm/MarkupTool.js.map +1 -1
  31. package/lib/esm/RedlineTool.d.ts +145 -145
  32. package/lib/esm/RedlineTool.js +483 -483
  33. package/lib/esm/RedlineTool.js.map +1 -1
  34. package/lib/esm/SelectTool.d.ts +126 -126
  35. package/lib/esm/SelectTool.js +710 -710
  36. package/lib/esm/SelectTool.js.map +1 -1
  37. package/lib/esm/SvgJsExt.d.ts +85 -85
  38. package/lib/esm/SvgJsExt.js +180 -180
  39. package/lib/esm/SvgJsExt.js.map +1 -1
  40. package/lib/esm/TextEdit.d.ts +43 -43
  41. package/lib/esm/TextEdit.js +179 -179
  42. package/lib/esm/TextEdit.js.map +1 -1
  43. package/lib/esm/Undo.d.ts +46 -46
  44. package/lib/esm/Undo.js +137 -137
  45. package/lib/esm/Undo.js.map +1 -1
  46. package/lib/esm/core-markup.d.ts +18 -18
  47. package/lib/esm/core-markup.js +22 -22
  48. package/lib/esm/core-markup.js.map +1 -1
  49. package/lib/public/locales/en/MarkupTools.json +98 -98
  50. package/package.json +12 -12
package/lib/esm/Undo.js CHANGED
@@ -1,138 +1,138 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module MarkupTools
7
- */
8
- import { assert } from "@itwin/core-bentley";
9
- import { MarkupApp } from "./Markup";
10
- /* @internal */
11
- class UndoAction {
12
- constructor(cmdName) {
13
- this.cmdName = cmdName;
14
- this.cmdId = 0;
15
- }
16
- }
17
- /** created when a new element is added to the markup
18
- * @internal
19
- */
20
- class AddAction extends UndoAction {
21
- constructor(cmdName, _elem) {
22
- super(cmdName);
23
- this._elem = _elem;
24
- this._parent = _elem.parent();
25
- assert(this._parent !== undefined);
26
- this._index = _elem.position();
27
- }
28
- reinstate() { this._parent.add(this._elem, this._index); }
29
- reverse() { MarkupApp.markup.selected.drop(this._elem); this._elem.remove(); }
30
- }
31
- /** created when an existing element is deleted from the markup
32
- * @internal
33
- */
34
- class DeleteAction extends UndoAction {
35
- constructor(cmdName, _elem) {
36
- super(cmdName);
37
- this._elem = _elem;
38
- this._parent = _elem.parent();
39
- assert(this._parent !== undefined);
40
- this._index = _elem.position();
41
- }
42
- reverse() { this._parent.add(this._elem, this._index); }
43
- reinstate() { MarkupApp.markup.selected.drop(this._elem); this._elem.remove(); }
44
- }
45
- /** created when an existing element's position is moved in the display order. This can also include re-parenting
46
- * @internal
47
- */
48
- class RepositionAction extends UndoAction {
49
- constructor(cmdName, _elem, _oldIndex, _oldParent) {
50
- super(cmdName);
51
- this._elem = _elem;
52
- this._oldIndex = _oldIndex;
53
- this._oldParent = _oldParent;
54
- this._newParent = _elem.parent();
55
- assert(this._newParent !== undefined);
56
- this._newIndex = _elem.position();
57
- }
58
- reinstate() { this._newParent.add(this._elem, this._newIndex); }
59
- reverse() { this._oldParent.add(this._elem, this._oldIndex); if (this._elem.inSelection)
60
- MarkupApp.markup.selected.drop(this._elem); }
61
- }
62
- /** created when an existing element's properties are modified.
63
- * @internal
64
- */
65
- class ModifyAction extends UndoAction {
66
- constructor(cmdName, _newElem, _oldElement) {
67
- super(cmdName);
68
- this._newElem = _newElem;
69
- this._oldElement = _oldElement;
70
- assert(_newElem !== undefined && _oldElement !== undefined);
71
- MarkupApp.markup.selected.replace(_oldElement, _newElem);
72
- }
73
- reinstate() { this._oldElement.replace(this._newElem); MarkupApp.markup.selected.replace(this._oldElement, this._newElem); }
74
- reverse() { this._newElem.replace(this._oldElement); MarkupApp.markup.selected.replace(this._newElem, this._oldElement); }
75
- }
76
- /** Stores the sequence of operations performed on a Markup. Facilitates undo/redo of the operations.
77
- * @public
78
- */
79
- export class UndoManager {
80
- constructor() {
81
- this._currentCmd = 0;
82
- this._grouped = 0;
83
- this._stack = [];
84
- this._currentPos = 0;
85
- this._cmdName = "";
86
- }
87
- addAction(action) {
88
- this._stack.length = this._currentPos;
89
- action.cmdId = this._currentCmd;
90
- this._stack.push(action);
91
- this._currentPos = this.size;
92
- }
93
- /** @internal */
94
- get size() { return this._stack.length; }
95
- startCommand() { if (0 === this._grouped)
96
- ++this._currentCmd; }
97
- startGroup() { this.startCommand(); ++this._grouped; }
98
- endGroup() { --this._grouped; }
99
- /** Perform a series of changes to markup elements that should all be reversed as a single operation.
100
- * @param fn the function that performs the changes to the elements. It must call the onXXX methods of this class to store
101
- * the operations in the undo buffer.
102
- * @note all of the onXXX methods of this class should *only* be called from within the callback function of this method.
103
- */
104
- performOperation(cmdName, fn) { this._cmdName = cmdName; this.startGroup(); fn(); this.endGroup(); }
105
- /** call this from within a [[performOperation]] function *after* an element has been added to a markup */
106
- onAdded(elem) { this.addAction(new AddAction(this._cmdName, elem)); }
107
- /** call this from within a [[performOperation]] function *before* an element is about to be deleted from a markup */
108
- onDelete(elem) { this.addAction(new DeleteAction(this._cmdName, elem)); }
109
- /** call this from within a [[performOperation]] function *after* an element has been moved in display order in a markup */
110
- onRepositioned(elem, oldIndex, oldParent) { this.addAction(new RepositionAction(this._cmdName, elem, oldIndex, oldParent)); }
111
- /** call this from within a [[performOperation]] function *after* an element has been modified in a markup */
112
- onModified(newElem, oldElem) { this.addAction(new ModifyAction(this._cmdName, newElem, oldElem)); }
113
- /** determine whether there are any un-reversed operations */
114
- get undoPossible() { return this._currentPos > 0; }
115
- /** determine whether there are any reversed operations */
116
- get redoPossible() { return this._currentPos < this.size; }
117
- /** the name of the operation that can be undone (or undefined) */
118
- get undoString() { return this.undoPossible ? this._stack[this._currentPos - 1].cmdName : undefined; }
119
- /** the name of the operation that can be redone (or undefined) */
120
- get redoString() { return this.redoPossible ? this._stack[this._currentPos].cmdName : undefined; }
121
- /** reverse the most recent operation, if any */
122
- doUndo() {
123
- if (this._currentPos === 0)
124
- return; // no operations have been performed
125
- const cmdId = this._stack[this._currentPos - 1].cmdId;
126
- while (this._currentPos > 0 && cmdId === this._stack[this._currentPos - 1].cmdId)
127
- this._stack[--this._currentPos].reverse();
128
- }
129
- /** reinstate the most recently reversed operation, if any */
130
- doRedo() {
131
- if (this._currentPos === this.size)
132
- return; // no operations have been reversed.
133
- const cmdId = this._stack[this._currentPos].cmdId;
134
- while (this._currentPos < this.size && cmdId === this._stack[this._currentPos].cmdId)
135
- this._stack[this._currentPos++].reinstate();
136
- }
137
- }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module MarkupTools
7
+ */
8
+ import { assert } from "@itwin/core-bentley";
9
+ import { MarkupApp } from "./Markup";
10
+ /* @internal */
11
+ class UndoAction {
12
+ constructor(cmdName) {
13
+ this.cmdName = cmdName;
14
+ this.cmdId = 0;
15
+ }
16
+ }
17
+ /** created when a new element is added to the markup
18
+ * @internal
19
+ */
20
+ class AddAction extends UndoAction {
21
+ constructor(cmdName, _elem) {
22
+ super(cmdName);
23
+ this._elem = _elem;
24
+ this._parent = _elem.parent();
25
+ assert(this._parent !== undefined);
26
+ this._index = _elem.position();
27
+ }
28
+ reinstate() { this._parent.add(this._elem, this._index); }
29
+ reverse() { MarkupApp.markup.selected.drop(this._elem); this._elem.remove(); }
30
+ }
31
+ /** created when an existing element is deleted from the markup
32
+ * @internal
33
+ */
34
+ class DeleteAction extends UndoAction {
35
+ constructor(cmdName, _elem) {
36
+ super(cmdName);
37
+ this._elem = _elem;
38
+ this._parent = _elem.parent();
39
+ assert(this._parent !== undefined);
40
+ this._index = _elem.position();
41
+ }
42
+ reverse() { this._parent.add(this._elem, this._index); }
43
+ reinstate() { MarkupApp.markup.selected.drop(this._elem); this._elem.remove(); }
44
+ }
45
+ /** created when an existing element's position is moved in the display order. This can also include re-parenting
46
+ * @internal
47
+ */
48
+ class RepositionAction extends UndoAction {
49
+ constructor(cmdName, _elem, _oldIndex, _oldParent) {
50
+ super(cmdName);
51
+ this._elem = _elem;
52
+ this._oldIndex = _oldIndex;
53
+ this._oldParent = _oldParent;
54
+ this._newParent = _elem.parent();
55
+ assert(this._newParent !== undefined);
56
+ this._newIndex = _elem.position();
57
+ }
58
+ reinstate() { this._newParent.add(this._elem, this._newIndex); }
59
+ reverse() { this._oldParent.add(this._elem, this._oldIndex); if (this._elem.inSelection)
60
+ MarkupApp.markup.selected.drop(this._elem); }
61
+ }
62
+ /** created when an existing element's properties are modified.
63
+ * @internal
64
+ */
65
+ class ModifyAction extends UndoAction {
66
+ constructor(cmdName, _newElem, _oldElement) {
67
+ super(cmdName);
68
+ this._newElem = _newElem;
69
+ this._oldElement = _oldElement;
70
+ assert(_newElem !== undefined && _oldElement !== undefined);
71
+ MarkupApp.markup.selected.replace(_oldElement, _newElem);
72
+ }
73
+ reinstate() { this._oldElement.replace(this._newElem); MarkupApp.markup.selected.replace(this._oldElement, this._newElem); }
74
+ reverse() { this._newElem.replace(this._oldElement); MarkupApp.markup.selected.replace(this._newElem, this._oldElement); }
75
+ }
76
+ /** Stores the sequence of operations performed on a Markup. Facilitates undo/redo of the operations.
77
+ * @public
78
+ */
79
+ export class UndoManager {
80
+ constructor() {
81
+ this._currentCmd = 0;
82
+ this._grouped = 0;
83
+ this._stack = [];
84
+ this._currentPos = 0;
85
+ this._cmdName = "";
86
+ }
87
+ addAction(action) {
88
+ this._stack.length = this._currentPos;
89
+ action.cmdId = this._currentCmd;
90
+ this._stack.push(action);
91
+ this._currentPos = this.size;
92
+ }
93
+ /** @internal */
94
+ get size() { return this._stack.length; }
95
+ startCommand() { if (0 === this._grouped)
96
+ ++this._currentCmd; }
97
+ startGroup() { this.startCommand(); ++this._grouped; }
98
+ endGroup() { --this._grouped; }
99
+ /** Perform a series of changes to markup elements that should all be reversed as a single operation.
100
+ * @param fn the function that performs the changes to the elements. It must call the onXXX methods of this class to store
101
+ * the operations in the undo buffer.
102
+ * @note all of the onXXX methods of this class should *only* be called from within the callback function of this method.
103
+ */
104
+ performOperation(cmdName, fn) { this._cmdName = cmdName; this.startGroup(); fn(); this.endGroup(); }
105
+ /** call this from within a [[performOperation]] function *after* an element has been added to a markup */
106
+ onAdded(elem) { this.addAction(new AddAction(this._cmdName, elem)); }
107
+ /** call this from within a [[performOperation]] function *before* an element is about to be deleted from a markup */
108
+ onDelete(elem) { this.addAction(new DeleteAction(this._cmdName, elem)); }
109
+ /** call this from within a [[performOperation]] function *after* an element has been moved in display order in a markup */
110
+ onRepositioned(elem, oldIndex, oldParent) { this.addAction(new RepositionAction(this._cmdName, elem, oldIndex, oldParent)); }
111
+ /** call this from within a [[performOperation]] function *after* an element has been modified in a markup */
112
+ onModified(newElem, oldElem) { this.addAction(new ModifyAction(this._cmdName, newElem, oldElem)); }
113
+ /** determine whether there are any un-reversed operations */
114
+ get undoPossible() { return this._currentPos > 0; }
115
+ /** determine whether there are any reversed operations */
116
+ get redoPossible() { return this._currentPos < this.size; }
117
+ /** the name of the operation that can be undone (or undefined) */
118
+ get undoString() { return this.undoPossible ? this._stack[this._currentPos - 1].cmdName : undefined; }
119
+ /** the name of the operation that can be redone (or undefined) */
120
+ get redoString() { return this.redoPossible ? this._stack[this._currentPos].cmdName : undefined; }
121
+ /** reverse the most recent operation, if any */
122
+ doUndo() {
123
+ if (this._currentPos === 0)
124
+ return; // no operations have been performed
125
+ const cmdId = this._stack[this._currentPos - 1].cmdId;
126
+ while (this._currentPos > 0 && cmdId === this._stack[this._currentPos - 1].cmdId)
127
+ this._stack[--this._currentPos].reverse();
128
+ }
129
+ /** reinstate the most recently reversed operation, if any */
130
+ doRedo() {
131
+ if (this._currentPos === this.size)
132
+ return; // no operations have been reversed.
133
+ const cmdId = this._stack[this._currentPos].cmdId;
134
+ while (this._currentPos < this.size && cmdId === this._stack[this._currentPos].cmdId)
135
+ this._stack[this._currentPos++].reinstate();
136
+ }
137
+ }
138
138
  //# sourceMappingURL=Undo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Undo.js","sourceRoot":"","sources":["../../src/Undo.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module MarkupTools\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Element as MarkupElement } from \"@svgdotjs/svg.js\";\nimport { MarkupApp } from \"./Markup\";\n\n/* @internal */\nabstract class UndoAction {\n public cmdId: number = 0;\n public abstract reverse(): void;\n public abstract reinstate(): void;\n constructor(public cmdName: string) { }\n}\n\n/** created when a new element is added to the markup\n * @internal\n */\nclass AddAction extends UndoAction {\n private _parent: MarkupElement;\n private _index: number;\n constructor(cmdName: string, private _elem: MarkupElement) {\n super(cmdName);\n this._parent = _elem.parent() as MarkupElement;\n assert(this._parent !== undefined);\n this._index = _elem.position();\n }\n public reinstate() { this._parent.add(this._elem, this._index); }\n public reverse() { MarkupApp.markup!.selected.drop(this._elem); this._elem.remove(); }\n}\n\n/** created when an existing element is deleted from the markup\n * @internal\n */\nclass DeleteAction extends UndoAction {\n private _parent: MarkupElement;\n private _index: number;\n constructor(cmdName: string, private _elem: MarkupElement) {\n super(cmdName);\n this._parent = _elem.parent() as MarkupElement;\n assert(this._parent !== undefined);\n this._index = _elem.position();\n }\n public reverse() { this._parent.add(this._elem, this._index); }\n public reinstate() { MarkupApp.markup!.selected.drop(this._elem); this._elem.remove(); }\n}\n\n/** created when an existing element's position is moved in the display order. This can also include re-parenting\n * @internal\n */\nclass RepositionAction extends UndoAction {\n private _newParent: MarkupElement;\n private _newIndex: number;\n\n constructor(cmdName: string, private _elem: MarkupElement, private _oldIndex: number, private _oldParent: MarkupElement) {\n super(cmdName);\n this._newParent = _elem.parent() as MarkupElement;\n assert(this._newParent !== undefined);\n this._newIndex = _elem.position();\n }\n public reinstate() { this._newParent.add(this._elem, this._newIndex); }\n public reverse() { this._oldParent.add(this._elem, this._oldIndex); if (this._elem.inSelection) MarkupApp.markup!.selected.drop(this._elem); }\n}\n\n/** created when an existing element's properties are modified.\n * @internal\n */\nclass ModifyAction extends UndoAction {\n constructor(cmdName: string, private _newElem: MarkupElement, private _oldElement: MarkupElement) {\n super(cmdName);\n assert(_newElem !== undefined && _oldElement !== undefined);\n MarkupApp.markup!.selected.replace(_oldElement, _newElem);\n }\n public reinstate() { this._oldElement.replace(this._newElem); MarkupApp.markup!.selected.replace(this._oldElement, this._newElem); }\n public reverse() { this._newElem.replace(this._oldElement); MarkupApp.markup!.selected.replace(this._newElem, this._oldElement); }\n}\n\n/** Stores the sequence of operations performed on a Markup. Facilitates undo/redo of the operations.\n * @public\n */\nexport class UndoManager {\n private _currentCmd = 0;\n private _grouped = 0;\n private _stack: UndoAction[] = [];\n private _currentPos = 0;\n private _cmdName = \"\";\n\n private addAction(action: UndoAction) {\n this._stack.length = this._currentPos;\n action.cmdId = this._currentCmd;\n this._stack.push(action);\n this._currentPos = this.size;\n }\n\n /** @internal */\n public get size() { return this._stack.length; }\n private startCommand() { if (0 === this._grouped) ++this._currentCmd; }\n private startGroup() { this.startCommand(); ++this._grouped; }\n private endGroup() { --this._grouped; }\n\n /** Perform a series of changes to markup elements that should all be reversed as a single operation.\n * @param fn the function that performs the changes to the elements. It must call the onXXX methods of this class to store\n * the operations in the undo buffer.\n * @note all of the onXXX methods of this class should *only* be called from within the callback function of this method.\n */\n public performOperation(cmdName: string, fn: VoidFunction) { this._cmdName = cmdName; this.startGroup(); fn(); this.endGroup(); }\n\n /** call this from within a [[performOperation]] function *after* an element has been added to a markup */\n public onAdded(elem: MarkupElement) { this.addAction(new AddAction(this._cmdName, elem)); }\n /** call this from within a [[performOperation]] function *before* an element is about to be deleted from a markup */\n public onDelete(elem: MarkupElement) { this.addAction(new DeleteAction(this._cmdName, elem)); }\n /** call this from within a [[performOperation]] function *after* an element has been moved in display order in a markup */\n public onRepositioned(elem: MarkupElement, oldIndex: number, oldParent: MarkupElement) { this.addAction(new RepositionAction(this._cmdName, elem, oldIndex, oldParent)); }\n /** call this from within a [[performOperation]] function *after* an element has been modified in a markup */\n public onModified(newElem: MarkupElement, oldElem: MarkupElement) { this.addAction(new ModifyAction(this._cmdName, newElem, oldElem)); }\n\n /** determine whether there are any un-reversed operations */\n public get undoPossible() { return this._currentPos > 0; }\n /** determine whether there are any reversed operations */\n public get redoPossible() { return this._currentPos < this.size; }\n /** the name of the operation that can be undone (or undefined) */\n public get undoString() { return this.undoPossible ? this._stack[this._currentPos - 1].cmdName : undefined; }\n /** the name of the operation that can be redone (or undefined) */\n public get redoString() { return this.redoPossible ? this._stack[this._currentPos].cmdName : undefined; }\n\n /** reverse the most recent operation, if any */\n public doUndo() {\n if (this._currentPos === 0)\n return; // no operations have been performed\n\n const cmdId = this._stack[this._currentPos - 1].cmdId;\n while (this._currentPos > 0 && cmdId === this._stack[this._currentPos - 1].cmdId)\n this._stack[--this._currentPos].reverse();\n }\n /** reinstate the most recently reversed operation, if any */\n public doRedo() {\n if (this._currentPos === this.size)\n return; // no operations have been reversed.\n\n const cmdId = this._stack[this._currentPos].cmdId;\n while (this._currentPos < this.size && cmdId === this._stack[this._currentPos].cmdId)\n this._stack[this._currentPos++].reinstate();\n }\n}\n"]}
1
+ {"version":3,"file":"Undo.js","sourceRoot":"","sources":["../../src/Undo.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module MarkupTools\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Element as MarkupElement } from \"@svgdotjs/svg.js\";\r\nimport { MarkupApp } from \"./Markup\";\r\n\r\n/* @internal */\r\nabstract class UndoAction {\r\n public cmdId: number = 0;\r\n public abstract reverse(): void;\r\n public abstract reinstate(): void;\r\n constructor(public cmdName: string) { }\r\n}\r\n\r\n/** created when a new element is added to the markup\r\n * @internal\r\n */\r\nclass AddAction extends UndoAction {\r\n private _parent: MarkupElement;\r\n private _index: number;\r\n constructor(cmdName: string, private _elem: MarkupElement) {\r\n super(cmdName);\r\n this._parent = _elem.parent() as MarkupElement;\r\n assert(this._parent !== undefined);\r\n this._index = _elem.position();\r\n }\r\n public reinstate() { this._parent.add(this._elem, this._index); }\r\n public reverse() { MarkupApp.markup!.selected.drop(this._elem); this._elem.remove(); }\r\n}\r\n\r\n/** created when an existing element is deleted from the markup\r\n * @internal\r\n */\r\nclass DeleteAction extends UndoAction {\r\n private _parent: MarkupElement;\r\n private _index: number;\r\n constructor(cmdName: string, private _elem: MarkupElement) {\r\n super(cmdName);\r\n this._parent = _elem.parent() as MarkupElement;\r\n assert(this._parent !== undefined);\r\n this._index = _elem.position();\r\n }\r\n public reverse() { this._parent.add(this._elem, this._index); }\r\n public reinstate() { MarkupApp.markup!.selected.drop(this._elem); this._elem.remove(); }\r\n}\r\n\r\n/** created when an existing element's position is moved in the display order. This can also include re-parenting\r\n * @internal\r\n */\r\nclass RepositionAction extends UndoAction {\r\n private _newParent: MarkupElement;\r\n private _newIndex: number;\r\n\r\n constructor(cmdName: string, private _elem: MarkupElement, private _oldIndex: number, private _oldParent: MarkupElement) {\r\n super(cmdName);\r\n this._newParent = _elem.parent() as MarkupElement;\r\n assert(this._newParent !== undefined);\r\n this._newIndex = _elem.position();\r\n }\r\n public reinstate() { this._newParent.add(this._elem, this._newIndex); }\r\n public reverse() { this._oldParent.add(this._elem, this._oldIndex); if (this._elem.inSelection) MarkupApp.markup!.selected.drop(this._elem); }\r\n}\r\n\r\n/** created when an existing element's properties are modified.\r\n * @internal\r\n */\r\nclass ModifyAction extends UndoAction {\r\n constructor(cmdName: string, private _newElem: MarkupElement, private _oldElement: MarkupElement) {\r\n super(cmdName);\r\n assert(_newElem !== undefined && _oldElement !== undefined);\r\n MarkupApp.markup!.selected.replace(_oldElement, _newElem);\r\n }\r\n public reinstate() { this._oldElement.replace(this._newElem); MarkupApp.markup!.selected.replace(this._oldElement, this._newElem); }\r\n public reverse() { this._newElem.replace(this._oldElement); MarkupApp.markup!.selected.replace(this._newElem, this._oldElement); }\r\n}\r\n\r\n/** Stores the sequence of operations performed on a Markup. Facilitates undo/redo of the operations.\r\n * @public\r\n */\r\nexport class UndoManager {\r\n private _currentCmd = 0;\r\n private _grouped = 0;\r\n private _stack: UndoAction[] = [];\r\n private _currentPos = 0;\r\n private _cmdName = \"\";\r\n\r\n private addAction(action: UndoAction) {\r\n this._stack.length = this._currentPos;\r\n action.cmdId = this._currentCmd;\r\n this._stack.push(action);\r\n this._currentPos = this.size;\r\n }\r\n\r\n /** @internal */\r\n public get size() { return this._stack.length; }\r\n private startCommand() { if (0 === this._grouped) ++this._currentCmd; }\r\n private startGroup() { this.startCommand(); ++this._grouped; }\r\n private endGroup() { --this._grouped; }\r\n\r\n /** Perform a series of changes to markup elements that should all be reversed as a single operation.\r\n * @param fn the function that performs the changes to the elements. It must call the onXXX methods of this class to store\r\n * the operations in the undo buffer.\r\n * @note all of the onXXX methods of this class should *only* be called from within the callback function of this method.\r\n */\r\n public performOperation(cmdName: string, fn: VoidFunction) { this._cmdName = cmdName; this.startGroup(); fn(); this.endGroup(); }\r\n\r\n /** call this from within a [[performOperation]] function *after* an element has been added to a markup */\r\n public onAdded(elem: MarkupElement) { this.addAction(new AddAction(this._cmdName, elem)); }\r\n /** call this from within a [[performOperation]] function *before* an element is about to be deleted from a markup */\r\n public onDelete(elem: MarkupElement) { this.addAction(new DeleteAction(this._cmdName, elem)); }\r\n /** call this from within a [[performOperation]] function *after* an element has been moved in display order in a markup */\r\n public onRepositioned(elem: MarkupElement, oldIndex: number, oldParent: MarkupElement) { this.addAction(new RepositionAction(this._cmdName, elem, oldIndex, oldParent)); }\r\n /** call this from within a [[performOperation]] function *after* an element has been modified in a markup */\r\n public onModified(newElem: MarkupElement, oldElem: MarkupElement) { this.addAction(new ModifyAction(this._cmdName, newElem, oldElem)); }\r\n\r\n /** determine whether there are any un-reversed operations */\r\n public get undoPossible() { return this._currentPos > 0; }\r\n /** determine whether there are any reversed operations */\r\n public get redoPossible() { return this._currentPos < this.size; }\r\n /** the name of the operation that can be undone (or undefined) */\r\n public get undoString() { return this.undoPossible ? this._stack[this._currentPos - 1].cmdName : undefined; }\r\n /** the name of the operation that can be redone (or undefined) */\r\n public get redoString() { return this.redoPossible ? this._stack[this._currentPos].cmdName : undefined; }\r\n\r\n /** reverse the most recent operation, if any */\r\n public doUndo() {\r\n if (this._currentPos === 0)\r\n return; // no operations have been performed\r\n\r\n const cmdId = this._stack[this._currentPos - 1].cmdId;\r\n while (this._currentPos > 0 && cmdId === this._stack[this._currentPos - 1].cmdId)\r\n this._stack[--this._currentPos].reverse();\r\n }\r\n /** reinstate the most recently reversed operation, if any */\r\n public doRedo() {\r\n if (this._currentPos === this.size)\r\n return; // no operations have been reversed.\r\n\r\n const cmdId = this._stack[this._currentPos].cmdId;\r\n while (this._currentPos < this.size && cmdId === this._stack[this._currentPos].cmdId)\r\n this._stack[this._currentPos++].reinstate();\r\n }\r\n}\r\n"]}
@@ -1,19 +1,19 @@
1
- export * from "./Markup";
2
- export * from "./MarkupTool";
3
- export * from "./RedlineTool";
4
- export * from "./SelectTool";
5
- export * from "./TextEdit";
6
- export * from "./Undo";
7
- export * from "./SvgJsExt";
8
- /** @docs-package-description
9
- * The core-markup package supplies tools for creating, editing, and saving SVG-based markups of Viewports.
10
- */
11
- /**
12
- * @docs-group-description MarkupApp
13
- * Classes for configuring and administering the markup system.
14
- */
15
- /**
16
- * @docs-group-description MarkupTools
17
- * Classes for supplying interactive tools for creating and editing markup elements.
18
- */
1
+ export * from "./Markup";
2
+ export * from "./MarkupTool";
3
+ export * from "./RedlineTool";
4
+ export * from "./SelectTool";
5
+ export * from "./TextEdit";
6
+ export * from "./Undo";
7
+ export * from "./SvgJsExt";
8
+ /** @docs-package-description
9
+ * The core-markup package supplies tools for creating, editing, and saving SVG-based markups of Viewports.
10
+ */
11
+ /**
12
+ * @docs-group-description MarkupApp
13
+ * Classes for configuring and administering the markup system.
14
+ */
15
+ /**
16
+ * @docs-group-description MarkupTools
17
+ * Classes for supplying interactive tools for creating and editing markup elements.
18
+ */
19
19
  //# sourceMappingURL=core-markup.d.ts.map
@@ -1,23 +1,23 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- export * from "./Markup";
6
- export * from "./MarkupTool";
7
- export * from "./RedlineTool";
8
- export * from "./SelectTool";
9
- export * from "./TextEdit";
10
- export * from "./Undo";
11
- export * from "./SvgJsExt";
12
- /** @docs-package-description
13
- * The core-markup package supplies tools for creating, editing, and saving SVG-based markups of Viewports.
14
- */
15
- /**
16
- * @docs-group-description MarkupApp
17
- * Classes for configuring and administering the markup system.
18
- */
19
- /**
20
- * @docs-group-description MarkupTools
21
- * Classes for supplying interactive tools for creating and editing markup elements.
22
- */
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ export * from "./Markup";
6
+ export * from "./MarkupTool";
7
+ export * from "./RedlineTool";
8
+ export * from "./SelectTool";
9
+ export * from "./TextEdit";
10
+ export * from "./Undo";
11
+ export * from "./SvgJsExt";
12
+ /** @docs-package-description
13
+ * The core-markup package supplies tools for creating, editing, and saving SVG-based markups of Viewports.
14
+ */
15
+ /**
16
+ * @docs-group-description MarkupApp
17
+ * Classes for configuring and administering the markup system.
18
+ */
19
+ /**
20
+ * @docs-group-description MarkupTools
21
+ * Classes for supplying interactive tools for creating and editing markup elements.
22
+ */
23
23
  //# sourceMappingURL=core-markup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"core-markup.js","sourceRoot":"","sources":["../../src/core-markup.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAE3B;;GAEG;AACH;;;GAGG;AACH;;;GAGG","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nexport * from \"./Markup\";\nexport * from \"./MarkupTool\";\nexport * from \"./RedlineTool\";\nexport * from \"./SelectTool\";\nexport * from \"./TextEdit\";\nexport * from \"./Undo\";\nexport * from \"./SvgJsExt\";\n\n/** @docs-package-description\n * The core-markup package supplies tools for creating, editing, and saving SVG-based markups of Viewports.\n */\n/**\n * @docs-group-description MarkupApp\n * Classes for configuring and administering the markup system.\n */\n/**\n * @docs-group-description MarkupTools\n * Classes for supplying interactive tools for creating and editing markup elements.\n */\n"]}
1
+ {"version":3,"file":"core-markup.js","sourceRoot":"","sources":["../../src/core-markup.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAE3B;;GAEG;AACH;;;GAGG;AACH;;;GAGG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nexport * from \"./Markup\";\r\nexport * from \"./MarkupTool\";\r\nexport * from \"./RedlineTool\";\r\nexport * from \"./SelectTool\";\r\nexport * from \"./TextEdit\";\r\nexport * from \"./Undo\";\r\nexport * from \"./SvgJsExt\";\r\n\r\n/** @docs-package-description\r\n * The core-markup package supplies tools for creating, editing, and saving SVG-based markups of Viewports.\r\n */\r\n/**\r\n * @docs-group-description MarkupApp\r\n * Classes for configuring and administering the markup system.\r\n */\r\n/**\r\n * @docs-group-description MarkupTools\r\n * Classes for supplying interactive tools for creating and editing markup elements.\r\n */\r\n"]}
@@ -1,98 +1,98 @@
1
- {
2
- "actions": {
3
- "modify": "Modify markup",
4
- "group": "Group markups",
5
- "ungroup": "Ungroup markup",
6
- "delete": "Delete markup",
7
- "copy": "Copy markup",
8
- "toFront": "Bring to front",
9
- "toBack": "Send To back"
10
- },
11
- "tools": {
12
- "Markup": {
13
- "Select": {
14
- "keyin": "Markup Select",
15
- "description": "Markup selection tool",
16
- "Prompts": {
17
- "IdentifyMarkup": "Identify markup element",
18
- "AcceptMarkup": "Accept markup element"
19
- }
20
- },
21
- "Line": {
22
- "keyin": "Markup Line",
23
- "description": "Draw line",
24
- "flyover": "Line"
25
- },
26
- "Rectangle": {
27
- "keyin": "Markup Rectangle",
28
- "description": "Draw rectangle",
29
- "flyover": "Rectangle"
30
- },
31
- "Polygon": {
32
- "keyin": "Markup Polygon",
33
- "description": "Draw polygon",
34
- "flyover": "Polygon",
35
- "Prompts": {
36
- "FirstPoint": "Identify center",
37
- "NextPoint": "Define point on edge"
38
- }
39
- },
40
- "Circle": {
41
- "keyin": "Markup Circle",
42
- "description": "Draw circle",
43
- "flyover": "Circle",
44
- "Prompts": {
45
- "FirstPoint": "Identify center",
46
- "NextPoint": "Define radius"
47
- }
48
- },
49
- "Ellipse": {
50
- "keyin": "Markup Ellipse",
51
- "description": "Draw ellipse",
52
- "flyover": "Ellipse"
53
- },
54
- "Arrow": {
55
- "keyin": "Markup Arrow",
56
- "description": "Draw arrow",
57
- "flyover": "Arrow"
58
- },
59
- "Distance": {
60
- "keyin": "Markup Distance",
61
- "description": "Markup distance between points"
62
- },
63
- "Cloud": {
64
- "keyin": "Markup Cloud",
65
- "description": "Draw cloud",
66
- "flyover": "Cloud"
67
- },
68
- "Sketch": {
69
- "keyin": "Markup Sketch",
70
- "description": "Draw freehand sketch",
71
- "flyover": "Sketch"
72
- },
73
- "Symbol": {
74
- "keyin": "Markup Symbol",
75
- "description": "Place symbol",
76
- "Prompts": {
77
- "FirstPoint": "Define center or drag to define corners"
78
- }
79
- },
80
- "Text": {
81
- "Place": {
82
- "keyin": "Place Markup Text",
83
- "description": "Add text box",
84
- "Prompts": {
85
- "FirstPoint": "Identify text location"
86
- }
87
- },
88
- "Edit": {
89
- "keyin": "Edit Markup Text",
90
- "description": "Edit text",
91
- "Prompts": {
92
- "FirstPoint": "Enter text"
93
- }
94
- }
95
- }
96
- }
97
- }
98
- }
1
+ {
2
+ "actions": {
3
+ "modify": "Modify markup",
4
+ "group": "Group markups",
5
+ "ungroup": "Ungroup markup",
6
+ "delete": "Delete markup",
7
+ "copy": "Copy markup",
8
+ "toFront": "Bring to front",
9
+ "toBack": "Send To back"
10
+ },
11
+ "tools": {
12
+ "Markup": {
13
+ "Select": {
14
+ "keyin": "Markup Select",
15
+ "description": "Markup selection tool",
16
+ "Prompts": {
17
+ "IdentifyMarkup": "Identify markup element",
18
+ "AcceptMarkup": "Accept markup element"
19
+ }
20
+ },
21
+ "Line": {
22
+ "keyin": "Markup Line",
23
+ "description": "Draw line",
24
+ "flyover": "Line"
25
+ },
26
+ "Rectangle": {
27
+ "keyin": "Markup Rectangle",
28
+ "description": "Draw rectangle",
29
+ "flyover": "Rectangle"
30
+ },
31
+ "Polygon": {
32
+ "keyin": "Markup Polygon",
33
+ "description": "Draw polygon",
34
+ "flyover": "Polygon",
35
+ "Prompts": {
36
+ "FirstPoint": "Identify center",
37
+ "NextPoint": "Define point on edge"
38
+ }
39
+ },
40
+ "Circle": {
41
+ "keyin": "Markup Circle",
42
+ "description": "Draw circle",
43
+ "flyover": "Circle",
44
+ "Prompts": {
45
+ "FirstPoint": "Identify center",
46
+ "NextPoint": "Define radius"
47
+ }
48
+ },
49
+ "Ellipse": {
50
+ "keyin": "Markup Ellipse",
51
+ "description": "Draw ellipse",
52
+ "flyover": "Ellipse"
53
+ },
54
+ "Arrow": {
55
+ "keyin": "Markup Arrow",
56
+ "description": "Draw arrow",
57
+ "flyover": "Arrow"
58
+ },
59
+ "Distance": {
60
+ "keyin": "Markup Distance",
61
+ "description": "Markup distance between points"
62
+ },
63
+ "Cloud": {
64
+ "keyin": "Markup Cloud",
65
+ "description": "Draw cloud",
66
+ "flyover": "Cloud"
67
+ },
68
+ "Sketch": {
69
+ "keyin": "Markup Sketch",
70
+ "description": "Draw freehand sketch",
71
+ "flyover": "Sketch"
72
+ },
73
+ "Symbol": {
74
+ "keyin": "Markup Symbol",
75
+ "description": "Place symbol",
76
+ "Prompts": {
77
+ "FirstPoint": "Define center or drag to define corners"
78
+ }
79
+ },
80
+ "Text": {
81
+ "Place": {
82
+ "keyin": "Place Markup Text",
83
+ "description": "Add text box",
84
+ "Prompts": {
85
+ "FirstPoint": "Identify text location"
86
+ }
87
+ },
88
+ "Edit": {
89
+ "keyin": "Edit Markup Text",
90
+ "description": "Edit text",
91
+ "Prompts": {
92
+ "FirstPoint": "Enter text"
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }