@vived/app 4.33.2 → 4.34.0

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 (59) hide show
  1. package/lib/Components/Callouts/Factories/setupCallouts.d.ts +2 -2
  2. package/lib/Components/Callouts/Factories/setupCallouts.js +15 -0
  3. package/lib/Components/Callouts/UC/TryAddCallout.js +11 -1
  4. package/lib/Components/Callouts/UC/TryPanLabelUC.js +12 -0
  5. package/lib/Components/FramedScreen/Factories/index.d.ts +1 -0
  6. package/lib/Components/FramedScreen/Factories/index.js +13 -0
  7. package/lib/Components/FramedScreen/Factories/setupFramedScreen.d.ts +2 -0
  8. package/lib/Components/FramedScreen/Factories/setupFramedScreen.js +35 -0
  9. package/lib/Components/FramedScreen/index.d.ts +1 -0
  10. package/lib/Components/FramedScreen/index.js +1 -0
  11. package/lib/Components/Hideable/Controllers/HideMC.js +3 -0
  12. package/lib/Components/Hideable/Factories/setupHideable.js +1 -1
  13. package/lib/Components/Hideable/Mocks/TryHideWithPickUCMock.d.ts +1 -0
  14. package/lib/Components/Hideable/Mocks/TryHideWithPickUCMock.js +1 -0
  15. package/lib/Components/Hideable/UCs/TryHideWithPickUC.d.ts +1 -0
  16. package/lib/Components/Hideable/UCs/TryHideWithPickUC.js +16 -0
  17. package/lib/Components/Hideable/index.d.ts +1 -0
  18. package/lib/Components/Hideable/index.js +1 -0
  19. package/lib/Components/HoverLabel/Factories/index.d.ts +1 -0
  20. package/lib/Components/HoverLabel/Factories/index.js +13 -0
  21. package/lib/Components/HoverLabel/Factories/setupHoverLabel.d.ts +2 -0
  22. package/lib/Components/HoverLabel/Factories/setupHoverLabel.js +39 -0
  23. package/lib/Components/HoverLabel/UseCases/TryShowHoverLabel.js +5 -0
  24. package/lib/Components/HoverLabel/index.d.ts +1 -0
  25. package/lib/Components/HoverLabel/index.js +1 -0
  26. package/lib/Components/LabelDrop/Factories/setupLabelDrop.js +12 -0
  27. package/lib/Components/LabelDrop/UseCases/ClearEditingLabelDropUCHook.d.ts +9 -0
  28. package/lib/Components/LabelDrop/UseCases/ClearEditingLabelDropUCHook.js +33 -0
  29. package/lib/Components/LabelDrop/UseCases/index.d.ts +1 -0
  30. package/lib/Components/LabelDrop/UseCases/index.js +1 -0
  31. package/lib/Components/Landmarks/Factories/setupLandmarks.d.ts +2 -2
  32. package/lib/Components/Landmarks/Factories/setupLandmarks.js +15 -0
  33. package/lib/Components/Landmarks/UseCases/TryAddNewLandmarkUC.js +9 -1
  34. package/lib/Components/Landmarks/UseCases/TryPreviewLandmarkUC.js +9 -1
  35. package/lib/Components/SceneRoot/Factories/setupSceneRoot.js +28 -0
  36. package/lib/Components/Selection/Factories/setupSelection.js +1 -0
  37. package/lib/Components/Selection/UC/ClearSelectionUCHook.d.ts +9 -0
  38. package/lib/Components/Selection/UC/ClearSelectionUCHook.js +33 -0
  39. package/lib/Components/Selection/UC/index.d.ts +1 -0
  40. package/lib/Components/Selection/UC/index.js +1 -0
  41. package/lib/Components/Tools/Adapters/toolAdapter.js +3 -1
  42. package/lib/Components/Tools/Entities/ToolEntity.d.ts +2 -10
  43. package/lib/Components/Tools/Entities/ToolEntity.js +5 -12
  44. package/lib/Components/Tools/Entities/ToolRepository.d.ts +10 -3
  45. package/lib/Components/Tools/Entities/ToolRepository.js +20 -48
  46. package/lib/Components/Tools/Factories/setupTools.d.ts +1 -2
  47. package/lib/Components/Tools/Factories/setupTools.js +1 -2
  48. package/lib/Components/Tools/Mocks/MockToolRepo.d.ts +2 -1
  49. package/lib/Components/Tools/Mocks/MockToolRepo.js +1 -1
  50. package/lib/Components/UndoRedo/Factories/setupUndoRedo.js +37 -0
  51. package/lib/Components/UndoRedo/UCs/UndoRedoButtonStatesHook.d.ts +0 -2
  52. package/lib/Components/UndoRedo/UCs/UndoRedoButtonStatesHook.js +12 -11
  53. package/lib/Components/zSpace/Factory/index.d.ts +1 -0
  54. package/lib/Components/zSpace/Factory/index.js +13 -0
  55. package/lib/Components/zSpace/Factory/setupZSpace.d.ts +2 -0
  56. package/lib/Components/zSpace/Factory/setupZSpace.js +34 -0
  57. package/lib/Components/zSpace/index.d.ts +1 -0
  58. package/lib/Components/zSpace/index.js +1 -0
  59. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- import { AppObjectRepo } from "../../../AppObject";
2
- export declare function setupCallouts(appObjects: AppObjectRepo): void;
1
+ import { AppObject, AppObjectRepo } from "../../../AppObject";
2
+ export declare function setupCallouts(appObjects: AppObjectRepo): AppObject;
@@ -6,6 +6,7 @@ const calloutRepoFactory_1 = require("./calloutRepoFactory");
6
6
  const Controller_1 = require("../Controller");
7
7
  const Entities_1 = require("../Entities");
8
8
  const UC_1 = require("../UC");
9
+ const Tools_1 = require("../../Tools");
9
10
  function setupCallouts(appObjects) {
10
11
  const calloutsAO = appObjects.getOrCreate("Callouts");
11
12
  const globals = Entities_1.makeCalloutGlobals(calloutsAO);
@@ -20,5 +21,19 @@ function setupCallouts(appObjects) {
20
21
  new Controller_1.TouchAddCalloutTC(calloutsAO);
21
22
  new Transform3D_1.TryMousePanTransformMC(calloutsAO);
22
23
  new Transform3D_1.TryTouchPanTransformTC(calloutsAO);
24
+ // Setup Tool
25
+ const toolRepo = Tools_1.ToolRepository.get(appObjects);
26
+ if (!toolRepo) {
27
+ appObjects.submitWarning("setupCallouts", "Unable to find tool repo");
28
+ return calloutsAO;
29
+ }
30
+ toolRepo.makeToolFromData({
31
+ toolType: "CALLOUT",
32
+ isDefault: false,
33
+ label: "Callout",
34
+ shortcutLabel: "c",
35
+ hotkeys: [{ keyCode: "KeyC" }],
36
+ });
37
+ return calloutsAO;
23
38
  }
24
39
  exports.setupCallouts = setupCallouts;
@@ -4,6 +4,7 @@ exports.makeTryAddCalloutUC = exports.TryAddCalloutUC = void 0;
4
4
  const AppObject_1 = require("../../../AppObject");
5
5
  const UC_1 = require("../../Babylon/UC");
6
6
  const Selection_1 = require("../../Selection/Entities/Selection");
7
+ const Tools_1 = require("../../Tools");
7
8
  const PanTransformUC_1 = require("../../Transform3D/UC/PanTransformUC");
8
9
  const CreateCalloutUC_1 = require("./CreateCalloutUC");
9
10
  class TryAddCalloutUC extends AppObject_1.AppObjectUC {
@@ -21,7 +22,11 @@ class TryAddCalloutImpUC extends TryAddCalloutUC {
21
22
  constructor(appObject) {
22
23
  super(appObject, TryAddCalloutUC.type);
23
24
  this.allow = () => {
24
- return true;
25
+ var _a, _b;
26
+ if (((_b = (_a = this.toolRepo) === null || _a === void 0 ? void 0 : _a.activeTool) === null || _b === void 0 ? void 0 : _b.toolType) === "CALLOUT") {
27
+ return true;
28
+ }
29
+ return false;
25
30
  };
26
31
  this.moveWithPixel = (pixel) => {
27
32
  if (!this.pixelToRay) {
@@ -100,7 +105,12 @@ class TryAddCalloutImpUC extends TryAddCalloutUC {
100
105
  var _a;
101
106
  return (_a = this.getCachedSingleton(UC_1.PixelToSceneRayUC.type)) === null || _a === void 0 ? void 0 : _a.pixelToSceneRay;
102
107
  }
108
+ get toolRepo() {
109
+ return this.getCachedSingleton(Tools_1.ToolRepository.type);
110
+ }
103
111
  initializeWithPixel(pixel) {
112
+ if (!this.allow())
113
+ return false;
104
114
  if (!this.pixelToRay) {
105
115
  this.error("Missing component");
106
116
  return false;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeTryPanLabelUC = void 0;
4
4
  const SceneRayPickUC_1 = require("../../Babylon/UC/SceneRayPickUC");
5
+ const Tools_1 = require("../../Tools");
5
6
  const UC_1 = require("../../Transform3D/UC");
6
7
  const CalloutEntity_1 = require("../Entities/CalloutEntity");
7
8
  function makeTryPanLabelUC(appObject) {
@@ -11,6 +12,14 @@ exports.makeTryPanLabelUC = makeTryPanLabelUC;
11
12
  class TryPanLabelUC extends UC_1.TryPanTransformUCImp {
12
13
  constructor() {
13
14
  super(...arguments);
15
+ this.allow = () => {
16
+ var _a, _b, _c, _d;
17
+ if (((_b = (_a = this.toolRepo) === null || _a === void 0 ? void 0 : _a.activeTool) === null || _b === void 0 ? void 0 : _b.toolType) !== "PEEL" &&
18
+ ((_d = (_c = this.toolRepo) === null || _c === void 0 ? void 0 : _c.activeTool) === null || _d === void 0 ? void 0 : _d.toolType) !== "CALLOUT") {
19
+ return false;
20
+ }
21
+ return true;
22
+ };
14
23
  this.tryWithRay = (pickRay) => {
15
24
  var _a;
16
25
  this.panUC = undefined;
@@ -35,4 +44,7 @@ class TryPanLabelUC extends UC_1.TryPanTransformUCImp {
35
44
  return true;
36
45
  };
37
46
  }
47
+ get toolRepo() {
48
+ return this.getCachedSingleton(Tools_1.ToolRepository.type);
49
+ }
38
50
  }
@@ -0,0 +1 @@
1
+ export * from "./setupFramedScreen";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./setupFramedScreen"), exports);
@@ -0,0 +1,2 @@
1
+ import { AppObject, AppObjectRepo } from "../../../AppObject";
2
+ export declare function setupFramedScreen(appObjects: AppObjectRepo, containers: string[]): AppObject;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setupFramedScreen = void 0;
4
+ const UpdateTouchInputBound_1 = require("../../TouchController/UC/UpdateTouchInputBound");
5
+ const EmulateDisplaySizeHook_1 = require("../../zSpace/UC/EmulateDisplaySizeHook");
6
+ const Entities_1 = require("../Entities");
7
+ const PM_1 = require("../PM");
8
+ function setupFramedScreen(appObjects, containers) {
9
+ const frameScreenAO = appObjects.getOrCreate("FramedScreen");
10
+ const framedScreen = Entities_1.makeFramedScreen(frameScreenAO);
11
+ PM_1.makeFramedScreenSizePM(frameScreenAO);
12
+ let canvas;
13
+ containers.forEach((containerName) => {
14
+ const container = makeContainer(containerName, framedScreen, appObjects);
15
+ if (containerName === "renderCanvas") {
16
+ canvas = container;
17
+ }
18
+ });
19
+ if (canvas) {
20
+ new UpdateTouchInputBound_1.UpdateTouchInputBoundUC(canvas.appObject);
21
+ EmulateDisplaySizeHook_1.makeEmulateDisplaySizeHook(canvas.appObject);
22
+ }
23
+ else {
24
+ appObjects.submitWarning("setupFramedScreen", "Expected a renderCanvas id but never got one");
25
+ }
26
+ return frameScreenAO;
27
+ }
28
+ exports.setupFramedScreen = setupFramedScreen;
29
+ function makeContainer(id, screen, appObjects) {
30
+ const ao = appObjects.getOrCreate(id);
31
+ const entity = Entities_1.makeFramedScreenContainer(ao);
32
+ PM_1.makeFramedContainerPM(ao);
33
+ screen.addContainer(entity);
34
+ return entity;
35
+ }
@@ -1,4 +1,5 @@
1
1
  export * from "./Adapters";
2
2
  export * from "./Entities";
3
+ export * from "./Factories";
3
4
  export * from "./Mocks";
4
5
  export * from "./PM";
@@ -12,5 +12,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./Adapters"), exports);
14
14
  __exportStar(require("./Entities"), exports);
15
+ __exportStar(require("./Factories"), exports);
15
16
  __exportStar(require("./Mocks"), exports);
16
17
  __exportStar(require("./PM"), exports);
@@ -9,6 +9,9 @@ class HideMC extends AppObject_1.AppObjectController {
9
9
  var _a;
10
10
  super(appObject, HideMC.type);
11
11
  this.allow = (e) => {
12
+ if (e.button !== 0) {
13
+ return false;
14
+ }
12
15
  return true;
13
16
  };
14
17
  this.onClick = (e) => {
@@ -18,7 +18,7 @@ function setupHideable(appObjects) {
18
18
  appObjects.submitWarning("setupHideable", "Unable to find tool repo");
19
19
  return ao;
20
20
  }
21
- toolRepo.setupToolFromData({
21
+ toolRepo.makeToolFromData({
22
22
  toolType: "HIDE",
23
23
  isDefault: false,
24
24
  label: "Hide",
@@ -2,6 +2,7 @@
2
2
  import { AppObject, AppObjectRepo } from "../../../AppObject";
3
3
  import { TryHideWithPickUC } from "../UCs/TryHideWithPickUC";
4
4
  export declare class TryHideWithPickUCMock extends TryHideWithPickUC {
5
+ allow: jest.Mock<any, any>;
5
6
  tryPixelPick: jest.Mock<any, any>;
6
7
  tryRayPick: jest.Mock<any, any>;
7
8
  constructor(appObject: AppObject);
@@ -5,6 +5,7 @@ const TryHideWithPickUC_1 = require("../UCs/TryHideWithPickUC");
5
5
  class TryHideWithPickUCMock extends TryHideWithPickUC_1.TryHideWithPickUC {
6
6
  constructor(appObject) {
7
7
  super(appObject, TryHideWithPickUC_1.TryHideWithPickUC.type);
8
+ this.allow = jest.fn();
8
9
  this.tryPixelPick = jest.fn();
9
10
  this.tryRayPick = jest.fn();
10
11
  }
@@ -2,6 +2,7 @@ import { AppObject, AppObjectRepo, AppObjectUC } from "../../../AppObject";
2
2
  import { ParametricLine, Vector2 } from "../../../ValueObjects";
3
3
  export declare abstract class TryHideWithPickUC extends AppObjectUC {
4
4
  static type: string;
5
+ abstract allow(): boolean;
5
6
  abstract tryRayPick(ray: ParametricLine): void;
6
7
  abstract tryPixelPick(pixel: Vector2): void;
7
8
  static get(appObjects: AppObjectRepo): TryHideWithPickUC | undefined;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeTryHideWithPickUC = exports.TryHideWithPickUC = void 0;
4
4
  const AppObject_1 = require("../../../AppObject");
5
5
  const Babylon_1 = require("../../Babylon");
6
+ const Tools_1 = require("../../Tools");
6
7
  const HideUC_1 = require("./HideUC");
7
8
  class TryHideWithPickUC extends AppObject_1.AppObjectUC {
8
9
  static get(appObjects) {
@@ -18,8 +19,18 @@ exports.makeTryHideWithPickUC = makeTryHideWithPickUC;
18
19
  class TryHideWithPickUCImp extends TryHideWithPickUC {
19
20
  constructor(appObject) {
20
21
  super(appObject, TryHideWithPickUC.type);
22
+ this.allow = () => {
23
+ var _a;
24
+ const hideTool = (_a = this.toolRepo) === null || _a === void 0 ? void 0 : _a.getTool("HIDE");
25
+ if ((hideTool === null || hideTool === void 0 ? void 0 : hideTool.state) !== Tools_1.ToolState.ACTIVE) {
26
+ return false;
27
+ }
28
+ return true;
29
+ };
21
30
  this.tryPixelPick = (pixel) => {
22
31
  var _a;
32
+ if (!this.allow())
33
+ return;
23
34
  if (!this.pixelPick) {
24
35
  return;
25
36
  }
@@ -30,6 +41,8 @@ class TryHideWithPickUCImp extends TryHideWithPickUC {
30
41
  };
31
42
  this.tryRayPick = (pickRay) => {
32
43
  var _a;
44
+ if (!this.allow())
45
+ return;
33
46
  if (!this.rayPick) {
34
47
  return;
35
48
  }
@@ -48,6 +61,9 @@ class TryHideWithPickUCImp extends TryHideWithPickUC {
48
61
  var _a;
49
62
  return (_a = this.getCachedSingleton(Babylon_1.ScenePixelPickUC.type)) === null || _a === void 0 ? void 0 : _a.scenePixelPick;
50
63
  }
64
+ get toolRepo() {
65
+ return this.getCachedSingleton(Tools_1.ToolRepository.type);
66
+ }
51
67
  hideObjectByID(id) {
52
68
  var _a;
53
69
  const appObj = this.appObjects.get(id);
@@ -1,6 +1,7 @@
1
1
  export * from "./Adapters";
2
2
  export * from "./Controllers";
3
3
  export * from "./Entities";
4
+ export * from "./Factories";
4
5
  export * from "./Mocks";
5
6
  export * from "./PM";
6
7
  export * from "./UCs";
@@ -13,6 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./Adapters"), exports);
14
14
  __exportStar(require("./Controllers"), exports);
15
15
  __exportStar(require("./Entities"), exports);
16
+ __exportStar(require("./Factories"), exports);
16
17
  __exportStar(require("./Mocks"), exports);
17
18
  __exportStar(require("./PM"), exports);
18
19
  __exportStar(require("./UCs"), exports);
@@ -0,0 +1 @@
1
+ export * from "./setupHoverLabel";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./setupHoverLabel"), exports);
@@ -0,0 +1,2 @@
1
+ import { AppObjectRepo } from "../../../AppObject";
2
+ export declare function setupHoverLabel(appObjects: AppObjectRepo): void;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setupHoverLabel = void 0;
4
+ const ValueObjects_1 = require("../../../ValueObjects");
5
+ const Stylus_1 = require("../../Stylus");
6
+ const Transform3D_1 = require("../../Transform3D");
7
+ const Controllers_1 = require("../Controllers");
8
+ const Entities_1 = require("../Entities");
9
+ const PM_1 = require("../PM");
10
+ const UseCases_1 = require("../UseCases");
11
+ function setupHoverLabel(appObjects) {
12
+ const hoverLabelAO = appObjects.getOrCreate("HoverLabel");
13
+ // Entity
14
+ const hoverLabelEntity = Entities_1.makeHoverLabelEntity(hoverLabelAO);
15
+ // UC
16
+ UseCases_1.makeTryShowHoverLabel(hoverLabelAO);
17
+ UseCases_1.makeToggleAllowHoverLabel(hoverLabelAO);
18
+ new UseCases_1.SerializeAllowHoverLabel(hoverLabelAO);
19
+ // PM
20
+ PM_1.makeWorldHoverLabelPM(hoverLabelAO);
21
+ PM_1.makeScreenHoverLabelPM(hoverLabelAO);
22
+ PM_1.makeAllowHoverLabelPM(hoverLabelAO);
23
+ Transform3D_1.makeTransform3DPM(hoverLabelAO);
24
+ // Controller
25
+ Controllers_1.makeHoverLabelMouse(hoverLabelAO);
26
+ Controllers_1.makeHoverLabelTouch(hoverLabelAO);
27
+ Controllers_1.makeStylusHoverLabelController(hoverLabelAO);
28
+ const stylus = Stylus_1.StylusEntity.get(appObjects);
29
+ if (!stylus) {
30
+ appObjects.submitError("setupHoverLabel", "StylusEntity needs to be setup before Hover Label");
31
+ }
32
+ else {
33
+ hoverLabelEntity.transform.parent = stylus.transform;
34
+ hoverLabelEntity.transform.localPosition = ValueObjects_1.Vector3.Zero();
35
+ hoverLabelEntity.transform.localRotation = ValueObjects_1.Quaternion.Identity();
36
+ hoverLabelEntity.transform.localScale = ValueObjects_1.Vector3.One();
37
+ }
38
+ }
39
+ exports.setupHoverLabel = setupHoverLabel;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeTryShowHoverLabel = exports.TryShowHoverLabel = void 0;
4
4
  const AppObject_1 = require("../../../AppObject");
5
5
  const Babylon_1 = require("../../Babylon");
6
+ const Callouts_1 = require("../../Callouts");
6
7
  const Label_1 = require("../../Label");
7
8
  const HoverLabelEntity_1 = require("../Entities/HoverLabelEntity");
8
9
  class TryShowHoverLabel extends AppObject_1.AppObjectUC {
@@ -63,6 +64,10 @@ class TryShowHoverLabelIMP extends TryShowHoverLabel {
63
64
  if (!appObj) {
64
65
  return;
65
66
  }
67
+ const calloutEntity = Callouts_1.CalloutEntity.get(appObj);
68
+ if (calloutEntity) {
69
+ return;
70
+ }
66
71
  const label = Label_1.LabelEntity.get(appObj);
67
72
  if (!label) {
68
73
  return;
@@ -1,6 +1,7 @@
1
1
  export * from "./Adapters";
2
2
  export * from "./Controllers";
3
3
  export * from "./Entities";
4
+ export * from "./Factories";
4
5
  export * from "./Mocks";
5
6
  export * from "./PM";
6
7
  export * from "./UseCases";
@@ -13,6 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./Adapters"), exports);
14
14
  __exportStar(require("./Controllers"), exports);
15
15
  __exportStar(require("./Entities"), exports);
16
+ __exportStar(require("./Factories"), exports);
16
17
  __exportStar(require("./Mocks"), exports);
17
18
  __exportStar(require("./PM"), exports);
18
19
  __exportStar(require("./UseCases"), exports);
@@ -4,6 +4,7 @@ exports.setupLabelDrop = void 0;
4
4
  const ValueObjects_1 = require("../../../ValueObjects");
5
5
  const Stylus_1 = require("../../Stylus");
6
6
  const Transform3D_1 = require("../../Transform3D");
7
+ const zSpace_1 = require("../../zSpace");
7
8
  const Controller_1 = require("../Controller");
8
9
  const Entities_1 = require("../Entities");
9
10
  const PM_1 = require("../PM");
@@ -16,6 +17,7 @@ function setupLabelDrop(appObjects) {
16
17
  labelDropEntity.labelDropItemFactory = labelDropItemFactory_1.makeLabelDropItemFactory(appObjects);
17
18
  // UCs
18
19
  new UseCases_1.SerializeLabelDrop(ao);
20
+ new UseCases_1.ClearEditingLabelDropUCHook(ao);
19
21
  UseCases_1.makeEditLabelDropUC(ao);
20
22
  UseCases_1.makeDragLabelDropUC(ao);
21
23
  UseCases_1.makeDragLabelDropWorldUC(ao);
@@ -47,5 +49,15 @@ function setupLabelDrop(appObjects) {
47
49
  labelDropEntity.dragHelperTransform.localRotation = ValueObjects_1.Quaternion.Identity();
48
50
  labelDropEntity.dragHelperTransform.localScale = ValueObjects_1.Vector3.One();
49
51
  }
52
+ const zSpace = zSpace_1.ZSpaceEntity.get(appObjects);
53
+ if (!zSpace) {
54
+ appObjects.submitError("setupLabelDrop", "zSpace needs to be setup before Label Drop");
55
+ }
56
+ else {
57
+ labelDropEntity.dragLabelTransform.parent = zSpace.display.transform;
58
+ labelDropEntity.dragLabelTransform.localPosition = ValueObjects_1.Vector3.Zero();
59
+ labelDropEntity.dragLabelTransform.localRotation = ValueObjects_1.Quaternion.Identity();
60
+ labelDropEntity.dragLabelTransform.localScale = ValueObjects_1.Vector3.One();
61
+ }
50
62
  }
51
63
  exports.setupLabelDrop = setupLabelDrop;
@@ -0,0 +1,9 @@
1
+ import { AppObject, AppObjectUC } from "../../../AppObject";
2
+ export declare class ClearEditingLabelDropUCHook extends AppObjectUC {
3
+ static type: string;
4
+ private get baseApp();
5
+ private get labelDropRepo();
6
+ private lastAuthoringState?;
7
+ private onBaseAppChange;
8
+ constructor(appObject: AppObject);
9
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClearEditingLabelDropUCHook = void 0;
4
+ const AppObject_1 = require("../../../AppObject");
5
+ const BaseApp_1 = require("../../BaseApp");
6
+ const Entities_1 = require("../Entities");
7
+ class ClearEditingLabelDropUCHook extends AppObject_1.AppObjectUC {
8
+ constructor(appObject) {
9
+ var _a;
10
+ super(appObject, ClearEditingLabelDropUCHook.type);
11
+ this.onBaseAppChange = () => {
12
+ if (!this.baseApp || !this.labelDropRepo) {
13
+ this.warn("Missing Components");
14
+ return;
15
+ }
16
+ if (this.baseApp.isAuthoring === this.lastAuthoringState)
17
+ return;
18
+ if (this.baseApp.isAuthoring === false) {
19
+ this.labelDropRepo.editingID = undefined;
20
+ }
21
+ this.lastAuthoringState = this.baseApp.isAuthoring;
22
+ };
23
+ (_a = this.baseApp) === null || _a === void 0 ? void 0 : _a.addChangeObserver(this.onBaseAppChange);
24
+ }
25
+ get baseApp() {
26
+ return this.getCachedSingleton(BaseApp_1.BaseAppState.type);
27
+ }
28
+ get labelDropRepo() {
29
+ return this.getCachedSingleton(Entities_1.LabelDropRepo.type);
30
+ }
31
+ }
32
+ exports.ClearEditingLabelDropUCHook = ClearEditingLabelDropUCHook;
33
+ ClearEditingLabelDropUCHook.type = "ClearEditingLabelDropUCHook";
@@ -1,3 +1,4 @@
1
+ export * from "./ClearEditingLabelDropUCHook";
1
2
  export * from "./CorrectAnimationUC";
2
3
  export * from "./DeleteAllLabelDropUC";
3
4
  export * from "./DeleteLabelDropUC";
@@ -10,6 +10,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./ClearEditingLabelDropUCHook"), exports);
13
14
  __exportStar(require("./CorrectAnimationUC"), exports);
14
15
  __exportStar(require("./DeleteAllLabelDropUC"), exports);
15
16
  __exportStar(require("./DeleteLabelDropUC"), exports);
@@ -1,2 +1,2 @@
1
- import { AppObjectRepo } from "../../../AppObject";
2
- export declare function setupLandmarks(appObjects: AppObjectRepo): void;
1
+ import { AppObject, AppObjectRepo } from "../../../AppObject";
2
+ export declare function setupLandmarks(appObjects: AppObjectRepo): AppObject;
@@ -4,6 +4,7 @@ exports.setupLandmarks = void 0;
4
4
  const Hideable_1 = require("../../Hideable");
5
5
  const OverlayColor_1 = require("../../OverlayColor");
6
6
  const Selection_1 = require("../../Selection");
7
+ const Tools_1 = require("../../Tools");
7
8
  const Transform3D_1 = require("../../Transform3D");
8
9
  const Controller_1 = require("../Controller");
9
10
  const Entities_1 = require("../Entities");
@@ -28,5 +29,19 @@ function setupLandmarks(appObjects) {
28
29
  Selection_1.makeSelectableStatePM(previewAO);
29
30
  Hideable_1.makeIsHiddenPM(previewAO);
30
31
  globals.previewLandmark = preview;
32
+ // Setup Tool
33
+ const toolRepo = Tools_1.ToolRepository.get(appObjects);
34
+ if (!toolRepo) {
35
+ appObjects.submitWarning("setupLandmarks", "Unable to find tool repo");
36
+ return landmarksAO;
37
+ }
38
+ toolRepo.makeToolFromData({
39
+ toolType: "LANDMARK",
40
+ isDefault: false,
41
+ label: "Landmark",
42
+ shortcutLabel: "l",
43
+ hotkeys: [{ keyCode: "KeyL" }],
44
+ });
45
+ return landmarksAO;
31
46
  }
32
47
  exports.setupLandmarks = setupLandmarks;
@@ -6,6 +6,7 @@ const ValueObjects_1 = require("../../../ValueObjects");
6
6
  const Babylon_1 = require("../../Babylon");
7
7
  const Dispatcher_1 = require("../../Dispatcher");
8
8
  const Label_1 = require("../../Label");
9
+ const Tools_1 = require("../../Tools");
9
10
  const Entities_1 = require("../Entities");
10
11
  const LandmarkGlobals_1 = require("../Entities/LandmarkGlobals");
11
12
  const AddLandmarkUndoRedo_1 = require("./AddLandmarkUndoRedo");
@@ -24,8 +25,15 @@ class TryAddNewLandmarkUCImp extends TryAddNewLandmarkUC {
24
25
  get globals() {
25
26
  return this.getCachedSingleton(LandmarkGlobals_1.LandmarkGlobals.type);
26
27
  }
28
+ get toolRepo() {
29
+ return this.getCachedSingleton(Tools_1.ToolRepository.type);
30
+ }
27
31
  allow() {
28
- return true;
32
+ var _a, _b;
33
+ if (((_b = (_a = this.toolRepo) === null || _a === void 0 ? void 0 : _a.activeTool) === null || _b === void 0 ? void 0 : _b.toolType) === "LANDMARK") {
34
+ return true;
35
+ }
36
+ return false;
29
37
  }
30
38
  addFromRay(ray) {
31
39
  if (!this.allow()) {
@@ -4,6 +4,7 @@ exports.makeTryPreviewLandmark = exports.TryPreviewLandmarkUC = void 0;
4
4
  const AppObject_1 = require("../../../AppObject");
5
5
  const ValueObjects_1 = require("../../../ValueObjects");
6
6
  const Babylon_1 = require("../../Babylon");
7
+ const Tools_1 = require("../../Tools");
7
8
  const LandmarkEntity_1 = require("../Entities/LandmarkEntity");
8
9
  const LandmarkRepo_1 = require("../Entities/LandmarkRepo");
9
10
  class TryPreviewLandmarkUC extends AppObject_1.AppObjectUC {
@@ -56,7 +57,14 @@ class TryPreviewLandmarkUCImp extends TryPreviewLandmarkUC {
56
57
  get landmark() {
57
58
  return this.getCachedLocalComponent(LandmarkEntity_1.LandmarkEntity.type);
58
59
  }
60
+ get toolRepo() {
61
+ return this.getCachedSingleton(Tools_1.ToolRepository.type);
62
+ }
59
63
  allow() {
60
- return true;
64
+ var _a, _b;
65
+ if (((_b = (_a = this.toolRepo) === null || _a === void 0 ? void 0 : _a.activeTool) === null || _b === void 0 ? void 0 : _b.toolType) === "LANDMARK") {
66
+ return true;
67
+ }
68
+ return false;
61
69
  }
62
70
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setupSceneRoot = void 0;
4
+ const Tools_1 = require("../../Tools");
4
5
  const Transform3D_1 = require("../../Transform3D");
5
6
  const Controllers_1 = require("../Controllers");
6
7
  const Entities_1 = require("../Entities");
@@ -40,6 +41,33 @@ function setupSceneRoot(appObjects, defaultData) {
40
41
  new Controllers_1.TouchScale(ao);
41
42
  new Controllers_1.SceneRootMoveSC(ao);
42
43
  new Controllers_1.ScaleSceneRootSC(ao);
44
+ // Setup Tools
45
+ const toolRepo = Tools_1.ToolRepository.get(appObjects);
46
+ if (!toolRepo) {
47
+ appObjects.submitWarning("setupSceneRoot", "Unable to find tool repo");
48
+ return ao;
49
+ }
50
+ toolRepo.makeToolFromData({
51
+ toolType: "ORBIT",
52
+ isDefault: false,
53
+ label: "Orbit",
54
+ shortcutLabel: "o",
55
+ hotkeys: [{ keyCode: "KeyO" }],
56
+ });
57
+ toolRepo.makeToolFromData({
58
+ toolType: "PAN",
59
+ isDefault: true,
60
+ label: "Pan",
61
+ shortcutLabel: "x",
62
+ hotkeys: [{ keyCode: "KeyX" }],
63
+ });
64
+ toolRepo.makeToolFromData({
65
+ toolType: "ZOOM",
66
+ isDefault: false,
67
+ label: "Zoom",
68
+ shortcutLabel: "z",
69
+ hotkeys: [{ keyCode: "KeyZ" }],
70
+ });
43
71
  return ao;
44
72
  }
45
73
  exports.setupSceneRoot = setupSceneRoot;
@@ -10,6 +10,7 @@ function setupSelection(appObjects) {
10
10
  // Entities
11
11
  Entities_1.makeSelection(appObj);
12
12
  // UCs
13
+ new UC_1.ClearSelectionUCHook(appObj);
13
14
  UC_1.makeHoverAppObject(appObj);
14
15
  UC_1.makePressAppObject(appObj);
15
16
  UC_1.makeSelectAppObject(appObj);
@@ -0,0 +1,9 @@
1
+ import { AppObject, AppObjectUC } from "../../../AppObject";
2
+ export declare class ClearSelectionUCHook extends AppObjectUC {
3
+ static type: string;
4
+ private get baseApp();
5
+ private get selection();
6
+ private lastAuthoringState?;
7
+ private onBaseAppChange;
8
+ constructor(appObject: AppObject);
9
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClearSelectionUCHook = void 0;
4
+ const AppObject_1 = require("../../../AppObject");
5
+ const BaseApp_1 = require("../../BaseApp");
6
+ const Entities_1 = require("../Entities");
7
+ class ClearSelectionUCHook extends AppObject_1.AppObjectUC {
8
+ constructor(appObject) {
9
+ var _a;
10
+ super(appObject, ClearSelectionUCHook.type);
11
+ this.onBaseAppChange = () => {
12
+ if (!this.baseApp || !this.selection) {
13
+ this.warn("Missing Components");
14
+ return;
15
+ }
16
+ if (this.baseApp.isAuthoring === this.lastAuthoringState)
17
+ return;
18
+ this.selection.pressedObjectId = null;
19
+ this.selection.hoveredObjectId = null;
20
+ this.selection.selectedObjectId = null;
21
+ this.lastAuthoringState = this.baseApp.isAuthoring;
22
+ };
23
+ (_a = this.baseApp) === null || _a === void 0 ? void 0 : _a.addChangeObserver(this.onBaseAppChange);
24
+ }
25
+ get baseApp() {
26
+ return this.getCachedSingleton(BaseApp_1.BaseAppState.type);
27
+ }
28
+ get selection() {
29
+ return this.getCachedSingleton(Entities_1.Selection.type);
30
+ }
31
+ }
32
+ exports.ClearSelectionUCHook = ClearSelectionUCHook;
33
+ ClearSelectionUCHook.type = "ClearSelectionUCHook";
@@ -1,3 +1,4 @@
1
+ export * from "./ClearSelectionUCHook";
1
2
  export * from "./HoverAppObjectUC";
2
3
  export * from "./PressAppObjectUC";
3
4
  export * from "./SelectAppObjectUC";
@@ -10,6 +10,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./ClearSelectionUCHook"), exports);
13
14
  __exportStar(require("./HoverAppObjectUC"), exports);
14
15
  __exportStar(require("./PressAppObjectUC"), exports);
15
16
  __exportStar(require("./SelectAppObjectUC"), exports);
@@ -5,9 +5,11 @@ const ToolPM_1 = require("../PM/ToolPM");
5
5
  exports.toolAdapter = {
6
6
  defaultVM: ToolPM_1.defaultToolVM,
7
7
  subscribe: (id, appObjects, setVM) => {
8
+ if (!id)
9
+ return;
8
10
  const pm = ToolPM_1.ToolPM.get(id, appObjects);
9
11
  if (!pm) {
10
- appObjects.submitError("toolAdapter", "Unable to find ToolPM");
12
+ appObjects.submitError("toolAdapter", "Unable to find ToolPM for " + id);
11
13
  return;
12
14
  }
13
15
  pm.addView(setVM);
@@ -7,13 +7,6 @@ export declare enum ToolState {
7
7
  ENABLED = "ENABLED",
8
8
  ACTIVE = "ACTIVE"
9
9
  }
10
- export interface ToolData {
11
- toolType: string;
12
- isDefault: boolean;
13
- label: string;
14
- shortcutLabel: string;
15
- hotkeys: HotKey[];
16
- }
17
10
  export interface HotKey {
18
11
  keyCode: string;
19
12
  control?: boolean;
@@ -26,17 +19,16 @@ export declare abstract class ToolEntity extends AppObjectEntity {
26
19
  abstract get toolType(): string | undefined;
27
20
  abstract get label(): string;
28
21
  abstract set label(toolLabel: string);
29
- abstract readonly isDefault: boolean;
30
22
  abstract get shortcutLabel(): string;
31
23
  abstract set shortcutLabel(shorcut: string);
32
24
  abstract get state(): ToolState;
33
25
  abstract set state(val: ToolState);
34
- abstract readonly hotkeys: HotKey[];
26
+ abstract get hotkeys(): HotKey[];
27
+ abstract set hotkeys(val: HotKey[]);
35
28
  abstract get isAction(): boolean;
36
29
  abstract triggerActions(): void;
37
30
  abstract registerAction(action: () => void): void;
38
31
  abstract isMyHotkey(hotkey: HotKey): boolean;
39
- abstract setupFromData(data: ToolData): void;
40
32
  static get(id: string, appObjects: AppObjectRepo): ToolEntity | undefined;
41
33
  }
42
34
  export declare function makeToolEntity(appObject: AppObject): ToolEntity;
@@ -25,7 +25,6 @@ exports.makeToolEntity = makeToolEntity;
25
25
  class ToolEntityImp extends ToolEntity {
26
26
  constructor(appObject) {
27
27
  super(appObject, ToolEntity.type);
28
- this._isDefault = false;
29
28
  this.memoizedLabel = new Entities_1.MemoizedString("", this.notifyOnChange);
30
29
  this.memoizedShortcut = new Entities_1.MemoizedString("", this.notifyOnChange);
31
30
  this.memoizedState = new Entities_1.MemoizedString(ToolState.ENABLED, this.notifyOnChange);
@@ -50,19 +49,9 @@ class ToolEntityImp extends ToolEntity {
50
49
  });
51
50
  return isMine;
52
51
  };
53
- this.setupFromData = (data) => {
54
- this._toolType = data.toolType;
55
- this.memoizedLabel.val = data.label;
56
- this._isDefault = data.isDefault;
57
- this.memoizedShortcut.val = data.shortcutLabel;
58
- this._hotkeys = data.hotkeys;
59
- };
60
52
  }
61
53
  get toolType() {
62
- return this._toolType;
63
- }
64
- get isDefault() {
65
- return this._isDefault;
54
+ return this.appObject.id;
66
55
  }
67
56
  get label() {
68
57
  return this.memoizedLabel.val;
@@ -88,6 +77,10 @@ class ToolEntityImp extends ToolEntity {
88
77
  get hotkeys() {
89
78
  return this._hotkeys;
90
79
  }
80
+ set hotkeys(val) {
81
+ this._hotkeys = val;
82
+ this.notifyOnChange();
83
+ }
91
84
  hotkeysMatch(a, b) {
92
85
  if (a.keyCode !== b.keyCode)
93
86
  return false;
@@ -1,17 +1,24 @@
1
1
  import { AppObject } from "../../../AppObject/AppObject";
2
2
  import { AppObjectEntity } from "../../../AppObject/AppObjectEntity";
3
3
  import { AppObjectRepo } from "../../../AppObject/AppObjectRepo";
4
- import { HotKey, ToolData, ToolEntity } from "./ToolEntity";
4
+ import { HotKey, ToolEntity } from "./ToolEntity";
5
+ export interface ToolData {
6
+ toolType: string;
7
+ isDefault: boolean;
8
+ label: string;
9
+ shortcutLabel: string;
10
+ hotkeys: HotKey[];
11
+ }
5
12
  export declare abstract class ToolRepository extends AppObjectEntity {
6
13
  static readonly type = "TOOL_REPOSITORY";
7
14
  abstract get activeTool(): ToolEntity | undefined;
8
15
  abstract get allTools(): ToolEntity[];
9
- abstract setupToolsFromData(toolData: ToolData[]): void;
16
+ abstract defaultToolType: string | undefined;
17
+ abstract makeToolFromData(toolData: ToolData): ToolEntity;
10
18
  abstract getTool(toolType: string): ToolEntity | undefined;
11
19
  abstract getToolForHotkey(hotkey: HotKey): ToolEntity | undefined;
12
20
  abstract setDefaultToolActive(): void;
13
21
  abstract triggerTool(toolType: string): void;
14
- abstract toggleToolVisibility(toolType: string): void;
15
22
  abstract toolFactory: (id: string) => ToolEntity;
16
23
  abstract makeTool(id: string): ToolEntity;
17
24
  static get: (appObjects: AppObjectRepo) => ToolRepository | undefined;
@@ -18,7 +18,7 @@ class ToolRepositoryImp extends ToolRepository {
18
18
  super(appObject, ToolRepository.type);
19
19
  this.toolLookup = new Map();
20
20
  this.toolFactory = (id) => {
21
- const ao = this.appObjects.getOrCreate(id + "_tool");
21
+ const ao = this.appObjects.getOrCreate(id);
22
22
  const toolEntity = ToolEntity_1.makeToolEntity(ao);
23
23
  return toolEntity;
24
24
  };
@@ -27,11 +27,8 @@ class ToolRepositoryImp extends ToolRepository {
27
27
  return Array.from(this.toolLookup.values());
28
28
  }
29
29
  setDefaultToolActive() {
30
- if (this._defaultToolType !== undefined) {
31
- this.triggerTool(this._defaultToolType);
32
- }
33
- else {
34
- this.warn(`No default tools has been specified`);
30
+ if (this.defaultToolType !== undefined) {
31
+ this.triggerTool(this.defaultToolType);
35
32
  }
36
33
  }
37
34
  getTool(type) {
@@ -80,52 +77,27 @@ class ToolRepositoryImp extends ToolRepository {
80
77
  });
81
78
  this.notifyOnChange();
82
79
  }
83
- toggleToolVisibility(type) {
84
- const tool = this.getTool(type);
85
- if (!tool) {
86
- this.warn(`Unable to find tool to toggle: ${type}`);
87
- return;
88
- }
89
- if (tool.toolType === this._defaultToolType) {
90
- this.warn(`The default tool's visibility cannot be toggled`);
91
- return;
92
- }
93
- if (tool.state === ToolEntity_1.ToolState.HIDDEN) {
94
- tool.state = ToolEntity_1.ToolState.ENABLED;
95
- }
96
- else {
97
- if (tool.state === ToolEntity_1.ToolState.ACTIVE) {
98
- this.setDefaultToolActive();
99
- }
100
- tool.state = ToolEntity_1.ToolState.HIDDEN;
101
- }
102
- }
103
- makeTool(id) {
104
- const tool = this.toolFactory(id);
105
- if (this.toolLookup.has(id)) {
106
- this.warn(`A tool with the ID ${id} already exists. Replacing`);
80
+ makeTool(toolType) {
81
+ const tool = this.toolFactory(toolType);
82
+ if (this.toolLookup.has(toolType)) {
83
+ this.warn(`A tool with the ID ${toolType} already exists. Replacing`);
107
84
  }
108
- this.toolLookup.set(id, tool);
85
+ this.toolLookup.set(toolType, tool);
109
86
  return tool;
110
87
  }
111
- setupToolsFromData(toolDatas) {
112
- toolDatas.forEach((toolData) => {
113
- const toolType = toolData.toolType;
114
- const tool = this.makeTool(toolType);
115
- tool.setupFromData(toolData);
116
- if (toolData.isDefault) {
117
- if (this._defaultToolType) {
118
- this.warn(`More than one tools is marked as default. Replacing`);
119
- }
120
- this._defaultToolType = toolType;
121
- }
122
- });
123
- if (!this._defaultToolType) {
124
- this.warn(`No default tools was specified. Defaulting to the first tool in the list`);
125
- this._defaultToolType = Array.from(this.toolLookup.keys())[0];
88
+ makeToolFromData(toolData) {
89
+ const { toolType, isDefault, label, shortcutLabel, hotkeys } = toolData;
90
+ const tool = this.makeTool(toolType);
91
+ tool.label = label;
92
+ tool.shortcutLabel = shortcutLabel;
93
+ tool.hotkeys = hotkeys;
94
+ if (isDefault) {
95
+ this.defaultToolType = toolType;
96
+ this.triggerTool(toolData.toolType);
126
97
  }
127
- if (this._defaultToolType) {
128
- this.triggerTool(this._defaultToolType);
98
+ else if (this.activeTool === undefined) {
99
+ this.triggerTool(toolData.toolType);
129
100
  }
101
+ return tool;
130
102
  }
131
103
  }
@@ -1,3 +1,2 @@
1
1
  import { AppObject, AppObjectRepo } from "../../../AppObject";
2
- import { ToolData } from "../Entities";
3
- export declare function setupTools(appObjects: AppObjectRepo, toolData: ToolData[]): AppObject;
2
+ export declare function setupTools(appObjects: AppObjectRepo): AppObject;
@@ -4,11 +4,10 @@ exports.setupTools = void 0;
4
4
  const Controller_1 = require("../Controller");
5
5
  const Entities_1 = require("../Entities");
6
6
  const toolFactory_1 = require("./toolFactory");
7
- function setupTools(appObjects, toolData) {
7
+ function setupTools(appObjects) {
8
8
  const ao = appObjects.getOrCreate("ToolRepo");
9
9
  const toolRepo = Entities_1.makeToolRepo(ao);
10
10
  toolRepo.toolFactory = toolFactory_1.makeToolFactory(appObjects);
11
- toolRepo.setupToolsFromData(toolData);
12
11
  new Controller_1.ToolHotkeys(ao);
13
12
  return ao;
14
13
  }
@@ -2,9 +2,10 @@
2
2
  import { AppObject, AppObjectRepo } from "../../../AppObject";
3
3
  import { ToolEntity, ToolRepository } from "../Entities";
4
4
  export declare class MockToolRepo extends ToolRepository {
5
+ defaultToolType: string | undefined;
5
6
  get activeTool(): ToolEntity | undefined;
6
7
  get allTools(): ToolEntity[];
7
- setupToolsFromData: jest.Mock<any, any>;
8
+ makeToolFromData: jest.Mock<any, any>;
8
9
  getTool: jest.Mock<any, any>;
9
10
  getToolForHotkey: jest.Mock<any, any>;
10
11
  setDefaultToolActive: jest.Mock<any, any>;
@@ -5,7 +5,7 @@ const Entities_1 = require("../Entities");
5
5
  class MockToolRepo extends Entities_1.ToolRepository {
6
6
  constructor(appObject) {
7
7
  super(appObject, Entities_1.ToolRepository.type);
8
- this.setupToolsFromData = jest.fn();
8
+ this.makeToolFromData = jest.fn();
9
9
  this.getTool = jest.fn();
10
10
  this.getToolForHotkey = jest.fn();
11
11
  this.setDefaultToolActive = jest.fn();
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setupUndoRedo = void 0;
4
+ const Tools_1 = require("../../Tools");
5
+ const Controllers_1 = require("../Controllers");
4
6
  const Entities_1 = require("../Entities");
5
7
  const PM_1 = require("../PM");
6
8
  const UCs_1 = require("../UCs");
@@ -13,6 +15,41 @@ function setupUndoRedo(appObjects) {
13
15
  // PMs
14
16
  PM_1.makeHasUndoPM(ao);
15
17
  PM_1.makeHasRedoPM(ao);
18
+ // Setup Tools
19
+ const toolRepo = Tools_1.ToolRepository.get(appObjects);
20
+ if (!toolRepo) {
21
+ appObjects.submitWarning("setupHideable", "Unable to find tool repo");
22
+ return ao;
23
+ }
24
+ let modifierKeyPrefix = "Ctrl";
25
+ if (navigator.platform.indexOf("Mac") === 0 ||
26
+ navigator.platform === "iPhone") {
27
+ modifierKeyPrefix = "⌘";
28
+ }
29
+ const undoTool = toolRepo.makeToolFromData({
30
+ toolType: "UNDO",
31
+ isDefault: false,
32
+ label: "Undo",
33
+ shortcutLabel: `${modifierKeyPrefix} + z`,
34
+ hotkeys: [
35
+ { keyCode: "KeyZ", control: true },
36
+ { keyCode: "KeyZ", meta: true },
37
+ ],
38
+ });
39
+ undoTool.registerAction(() => Controllers_1.doUndo(appObjects));
40
+ const redoTool = toolRepo.makeToolFromData({
41
+ toolType: "REDO",
42
+ isDefault: false,
43
+ label: "Redo",
44
+ shortcutLabel: `${modifierKeyPrefix} + Shift + z`,
45
+ hotkeys: [
46
+ { keyCode: "KeyY", control: true },
47
+ { keyCode: "KeyY", meta: true },
48
+ { keyCode: "KeyZ", control: true, shift: true },
49
+ { keyCode: "KeyZ", meta: true, shift: true },
50
+ ],
51
+ });
52
+ redoTool.registerAction(() => Controllers_1.doRedo(appObjects));
16
53
  return ao;
17
54
  }
18
55
  exports.setupUndoRedo = setupUndoRedo;
@@ -4,8 +4,6 @@ export declare class UndoRedoToolStatesHook extends AppObjectUC {
4
4
  private get baseApp();
5
5
  private get undoRedo();
6
6
  private get toolRepo();
7
- private undoTool?;
8
- private redoTool?;
9
7
  onUndoRedoChange: () => void;
10
8
  constructor(appObject: AppObject);
11
9
  }
@@ -7,38 +7,39 @@ const Entities_1 = require("../../Tools/Entities");
7
7
  const Entities_2 = require("../Entities");
8
8
  class UndoRedoToolStatesHook extends AppObject_1.AppObjectUC {
9
9
  constructor(appObject) {
10
- var _a, _b, _c, _d;
10
+ var _a, _b;
11
11
  super(appObject, UndoRedoToolStatesHook.type);
12
12
  this.onUndoRedoChange = () => {
13
+ var _a, _b;
14
+ const undoTool = (_a = this.toolRepo) === null || _a === void 0 ? void 0 : _a.getTool("UNDO");
15
+ const redoTool = (_b = this.toolRepo) === null || _b === void 0 ? void 0 : _b.getTool("REDO");
13
16
  if (!this.baseApp)
14
17
  return;
15
18
  if (!this.undoRedo)
16
19
  return;
17
- if (this.redoTool) {
20
+ if (redoTool) {
18
21
  if (this.baseApp.isAuthoring) {
19
- this.redoTool.state = this.undoRedo.hasRedo
22
+ redoTool.state = this.undoRedo.hasRedo
20
23
  ? Entities_1.ToolState.ENABLED
21
24
  : Entities_1.ToolState.DISABLED;
22
25
  }
23
26
  else {
24
- this.redoTool.state = Entities_1.ToolState.HIDDEN;
27
+ redoTool.state = Entities_1.ToolState.HIDDEN;
25
28
  }
26
29
  }
27
- if (this.undoTool) {
30
+ if (undoTool) {
28
31
  if (this.baseApp.isAuthoring) {
29
- this.undoTool.state = this.undoRedo.hasUndo
32
+ undoTool.state = this.undoRedo.hasUndo
30
33
  ? Entities_1.ToolState.ENABLED
31
34
  : Entities_1.ToolState.DISABLED;
32
35
  }
33
36
  else {
34
- this.undoTool.state = Entities_1.ToolState.HIDDEN;
37
+ undoTool.state = Entities_1.ToolState.HIDDEN;
35
38
  }
36
39
  }
37
40
  };
38
- this.undoTool = (_a = this.toolRepo) === null || _a === void 0 ? void 0 : _a.getTool("UNDO");
39
- this.redoTool = (_b = this.toolRepo) === null || _b === void 0 ? void 0 : _b.getTool("REDO");
40
- (_c = this.undoRedo) === null || _c === void 0 ? void 0 : _c.addChangeObserver(this.onUndoRedoChange);
41
- (_d = this.baseApp) === null || _d === void 0 ? void 0 : _d.addChangeObserver(this.onUndoRedoChange);
41
+ (_a = this.undoRedo) === null || _a === void 0 ? void 0 : _a.addChangeObserver(this.onUndoRedoChange);
42
+ (_b = this.baseApp) === null || _b === void 0 ? void 0 : _b.addChangeObserver(this.onUndoRedoChange);
42
43
  this.onUndoRedoChange();
43
44
  }
44
45
  get baseApp() {
@@ -0,0 +1 @@
1
+ export * from "./setupZSpace";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./setupZSpace"), exports);
@@ -0,0 +1,2 @@
1
+ import { AppObject, AppObjectRepo } from "../../../AppObject";
2
+ export declare function setupZSpace(appObjectRepo: AppObjectRepo): AppObject;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setupZSpace = void 0;
4
+ const Dispatcher_1 = require("../../Dispatcher");
5
+ const Transform3D_1 = require("../../Transform3D");
6
+ const XR_1 = require("../../XR");
7
+ const Entities_1 = require("../Entities");
8
+ const PM_1 = require("../PM");
9
+ const UC_1 = require("../UC");
10
+ function setupZSpace(appObjectRepo) {
11
+ const zSpaceAO = appObjectRepo.getOrCreate("zSpace");
12
+ Transform3D_1.Transform3D.addIfMissing(zSpaceAO);
13
+ const zSpaceEntity = Entities_1.makeZSpaceEntity(zSpaceAO);
14
+ XR_1.makeXREntity(zSpaceAO);
15
+ UC_1.makeViewFromPoseHook(zSpaceAO);
16
+ UC_1.makeStylusFromGamepadHook(zSpaceAO);
17
+ PM_1.makeZSpaceIsEnabledPM(zSpaceAO);
18
+ PM_1.makeZSpaceViewerScalePM(zSpaceAO);
19
+ const displayAO = zSpaceEntity.display.appObject;
20
+ Transform3D_1.makeTransform3DPM(displayAO);
21
+ PM_1.makeZSpaceDisplayPM(displayAO);
22
+ PM_1.makeZSpaceIsSupportedPM(zSpaceAO);
23
+ const checkForZSpace = Dispatcher_1.IsZSpaceAvailableUC.get(appObjectRepo);
24
+ if (checkForZSpace) {
25
+ checkForZSpace.doDispatch().then((isSupported) => {
26
+ zSpaceEntity.isSupported = isSupported;
27
+ });
28
+ }
29
+ else {
30
+ appObjectRepo.submitWarning("setupZSpace", "Unable to find IsZSpaceAvailableUC. A dispatcher needs to be setup before zSpace");
31
+ }
32
+ return zSpaceAO;
33
+ }
34
+ exports.setupZSpace = setupZSpace;
@@ -1,5 +1,6 @@
1
1
  export * from "./Adapters";
2
2
  export * from "./Entities";
3
+ export * from "./Factory";
3
4
  export * from "./Mocks";
4
5
  export * from "./PM";
5
6
  export * from "./UC";
@@ -12,6 +12,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./Adapters"), exports);
14
14
  __exportStar(require("./Entities"), exports);
15
+ __exportStar(require("./Factory"), exports);
15
16
  __exportStar(require("./Mocks"), exports);
16
17
  __exportStar(require("./PM"), exports);
17
18
  __exportStar(require("./UC"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vived/app",
3
- "version": "4.33.2",
3
+ "version": "4.34.0",
4
4
  "description": "Public package for the VIVED Learning App system",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",