From 4b9af1f388eadb1d16a067c9a513b55b8b7c27ba Mon Sep 17 00:00:00 2001 From: Andrea Gottsponer <ago@attr.ch> Date: Tue, 1 Nov 2022 09:24:34 +0100 Subject: [PATCH] - selftest fix - marker generator fix - menu hide fixes - text fixes --- package-lock.json | 18 +-- package.json | 4 +- src/app/index.ts | 10 +- src/lib/bases/elements/BaseGraphics.ts | 10 +- src/lib/bases/elements/BaseSprite.ts | 17 +++ src/lib/bases/elements/BaseText.ts | 20 +++- src/lib/bases/elements/BaseTilingSprite.ts | 20 +++- src/lib/elements/basics/EditableText.ts | 7 ++ src/lib/elements/connections/Line.ts | 26 ++++- .../elements/controls/SelectGroupElement.ts | 29 +++-- src/lib/elements/fills/FillCollection.ts | 24 +++- src/lib/elements/images/Image.ts | 26 ++--- src/lib/elements/legends/LegendCollection.ts | 24 +++- src/lib/elements/legends/LegendColumn.ts | 21 +++- src/lib/elements/legends/LegendRow.ts | 24 +++- .../elements/positionings/PositionPoint.ts | 28 ++++- .../elements/positionings/SelftestPoint.ts | 45 ++++++-- src/lib/elements/primitives/ArrowPrimitive.ts | 77 ++++++++++++- .../BackgroundRectanglePrimitive.ts | 24 +++- .../elements/primitives/EllipsePrimitive.ts | 77 ++++++++++++- .../elements/primitives/RectanglePrimitive.ts | 77 ++++++++++++- src/lib/elements/primitives/TextPrimitive.ts | 105 +++++++++++++++++- .../combinations/InteractiveAreaGenerator.ts | 2 +- .../combinations/MarkerGenerator.ts | 31 ++++-- .../generators/connections/LineGenerator.ts | 7 +- .../generators/copies/CloneLayerGenerator.ts | 2 +- src/lib/generators/legends/LegendGenerator.ts | 2 +- src/lib/interactions/WriteInteraction.ts | 11 ++ 28 files changed, 653 insertions(+), 115 deletions(-) diff --git a/package-lock.json b/package-lock.json index d147427d..cf7f048a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "medsurf-draw", - "version": "1.0.241", + "version": "1.0.242", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "medsurf-draw", - "version": "1.0.241", + "version": "1.0.242", "license": "MIT", "dependencies": { - "@ascii-dev-user/medsurf-lib": "^1.18.0-146", + "@ascii-dev-user/medsurf-lib": "^1.18.0-147", "@babel/core": "^7.8.4", "@pixi-essentials/cull": "^1.0.12", "debounce": "^1.2.1", @@ -89,9 +89,9 @@ } }, "node_modules/@ascii-dev-user/medsurf-lib": { - "version": "1.18.0-146", - "resolved": "https://registry.npmjs.org/@ascii-dev-user/medsurf-lib/-/medsurf-lib-1.18.0-146.tgz", - "integrity": "sha512-fDS/83JoaroTbY5CH1yS3DiCjp8AkdKBycDub2/1nh74hxK6AmKuwydE84CYnPalgexs296vgQPQcKL9dAAepQ==", + "version": "1.18.0-147", + "resolved": "https://registry.npmjs.org/@ascii-dev-user/medsurf-lib/-/medsurf-lib-1.18.0-147.tgz", + "integrity": "sha512-qldkyKXM6F4kpSoXgQTmVTS+QKkO+Fp/I0oSb06IR7AvXt/GTVBYbyOTC+tuNGgWmBIjmWoLkElcEW5pjbw3YA==", "dependencies": { "lodash.clonedeep": "^4.5.0", "tslib": "^2.3.0" @@ -5264,9 +5264,9 @@ } }, "@ascii-dev-user/medsurf-lib": { - "version": "1.18.0-146", - "resolved": "https://registry.npmjs.org/@ascii-dev-user/medsurf-lib/-/medsurf-lib-1.18.0-146.tgz", - "integrity": "sha512-fDS/83JoaroTbY5CH1yS3DiCjp8AkdKBycDub2/1nh74hxK6AmKuwydE84CYnPalgexs296vgQPQcKL9dAAepQ==", + "version": "1.18.0-147", + "resolved": "https://registry.npmjs.org/@ascii-dev-user/medsurf-lib/-/medsurf-lib-1.18.0-147.tgz", + "integrity": "sha512-qldkyKXM6F4kpSoXgQTmVTS+QKkO+Fp/I0oSb06IR7AvXt/GTVBYbyOTC+tuNGgWmBIjmWoLkElcEW5pjbw3YA==", "requires": { "lodash.clonedeep": "^4.5.0", "tslib": "^2.3.0" diff --git a/package.json b/package.json index f028f8fa..b6c94c09 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "medsurf-draw", - "version": "1.0.241", + "version": "1.0.242", "description": "Draw annotations on jpg/zoomify images, based on PIXI.js", "keywords": [ "draw", @@ -28,7 +28,7 @@ "author": "Gottsponer Andrea Leonardo", "license": "MIT", "dependencies": { - "@ascii-dev-user/medsurf-lib": "^1.18.0-146", + "@ascii-dev-user/medsurf-lib": "^1.18.0-147", "@babel/core": "^7.8.4", "@pixi-essentials/cull": "^1.0.12", "debounce": "^1.2.1", diff --git a/src/app/index.ts b/src/app/index.ts index 0ec157b5..71cdd9e1 100644 --- a/src/app/index.ts +++ b/src/app/index.ts @@ -9,6 +9,9 @@ import { PixiPlugin } from 'gsap/PixiPlugin.js'; // import { Simple, SpatialHash } from "pixi-cull" /* TODO + - Menu schliessen bei klonen / kopieren + - Selftest visible when no selftest available + Bugfixing machen +++ - Pfeil / Spickel (Grundkante / Wedge 1/3) - Löschen von PositionPoints when no primitives / lines @@ -1126,7 +1129,7 @@ async function setupImageObjects() { x: 600 / image.dimensions.width, y: 500 / image.dimensions.width, }, - isSelftest: true, + isSelftest: false, selftestItems: [], primitives: [] }); @@ -1141,7 +1144,7 @@ async function setupImageObjects() { x: 550 / image.dimensions.width, y: 550 / image.dimensions.width, }, - isSelftest: true, + isSelftest: false, selftestItems: [], primitives: [] }); @@ -1683,7 +1686,8 @@ function _startGenerator(): void { for(const layerImageObject of layerGroupsArray['sketch'].layerImageObjects || []) { const imageObject = image.getChildByName(layerImageObject.imageObject); if (imageObject) { - (imageObject as MedsurfDraw.DrawableObject).modeInteraction.setModeItem('draw_clickable'); + // (imageObject as MedsurfDraw.DrawableObject).modeInteraction.setModeItem('draw_clickable'); + (imageObject as MedsurfDraw.DrawableObject).modeInteraction.setMode('draw_clickable'); } } /**/ diff --git a/src/lib/bases/elements/BaseGraphics.ts b/src/lib/bases/elements/BaseGraphics.ts index c17aed62..8ccb38b9 100644 --- a/src/lib/bases/elements/BaseGraphics.ts +++ b/src/lib/bases/elements/BaseGraphics.ts @@ -56,14 +56,20 @@ export class BaseGraphics<TData extends BaseGraphicsModel | BaseGraphicsImageMod // Events // -- Added - this.on("added", () => { + this.on("added", (parent: MedsurfDraw.ImageObject) => { // -- Debounce this.on("debounceDraw", this._debounceDrawMethod); + // -- Mode + parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); + parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction); }); // -- Removed - this.on("removed", () => { + this.on("removed", (parent: MedsurfDraw.ImageObject) => { // -- Debounce this.off("debounceDraw", this._debounceDrawMethod); + // -- Mode + parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); + parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction); }); } diff --git a/src/lib/bases/elements/BaseSprite.ts b/src/lib/bases/elements/BaseSprite.ts index e382d2da..17490306 100644 --- a/src/lib/bases/elements/BaseSprite.ts +++ b/src/lib/bases/elements/BaseSprite.ts @@ -44,6 +44,23 @@ export class BaseSprite<TData extends BaseSpriteModel | BaseSpriteImageModel> ex this.modeInteraction = new MedsurfDraw.ModeInteraction(this); this.modeInteraction.on("init", this.init, this); //</editor-fold> + + //<editor-fold desc="Events"> + // -- Added + this.on("added", (parent: MedsurfDraw.ImageObject) => { + // Events + // -- Mode + parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); + parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction); + }); + // -- Removed + this.on("removed", (parent: MedsurfDraw.ImageObject) => { + // Events + // -- Mode + parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); + parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction); + }); + //</editor-fold> } /** diff --git a/src/lib/bases/elements/BaseText.ts b/src/lib/bases/elements/BaseText.ts index 1bb16c73..0a8b1187 100644 --- a/src/lib/bases/elements/BaseText.ts +++ b/src/lib/bases/elements/BaseText.ts @@ -41,10 +41,28 @@ export abstract class BaseText<TData extends BaseTextModel | BaseTextImageModel> // Members this.data = data; - // Interaction + //<editor-fold desc="Interactions"> // -- Mode interaction this.modeInteraction = new MedsurfDraw.ModeInteraction(this); this.modeInteraction.on("init", this.init, this); + //</editor-fold> + + //<editor-fold desc="Events"> + // -- Added + this.on("added", (parent: MedsurfDraw.ImageObject) => { + // Events + // -- Mode + parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); + parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction); + }); + // -- Removed + this.on("removed", (parent: MedsurfDraw.ImageObject) => { + // Events + // -- Mode + parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); + parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction); + }); + //</editor-fold> } /** diff --git a/src/lib/bases/elements/BaseTilingSprite.ts b/src/lib/bases/elements/BaseTilingSprite.ts index 322c0e90..cfe4bb8a 100644 --- a/src/lib/bases/elements/BaseTilingSprite.ts +++ b/src/lib/bases/elements/BaseTilingSprite.ts @@ -40,10 +40,28 @@ export class BaseTilingSprite<TData extends BaseTilingSpriteModel | BaseTilingSp // Members this.data = data; - // Interaction + //<editor-fold desc="Interactions"> // -- Mode interaction this.modeInteraction = new MedsurfDraw.ModeInteraction(this); this.modeInteraction.on("init", this.init, this); + //</editor-fold> + + //<editor-fold desc="Events"> + // -- Added + this.on("added", (parent: MedsurfDraw.ImageObject) => { + // Events + // -- Mode + parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); + parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction); + }); + // -- Removed + this.on("removed", (parent: MedsurfDraw.ImageObject) => { + // Events + // -- Mode + parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction); + parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction); + }); + //</editor-fold> } /** diff --git a/src/lib/elements/basics/EditableText.ts b/src/lib/elements/basics/EditableText.ts index 9fe369ed..b70b900a 100644 --- a/src/lib/elements/basics/EditableText.ts +++ b/src/lib/elements/basics/EditableText.ts @@ -184,6 +184,13 @@ export class EditableText extends BaseText<EditableTextModel> { //</editor-fold> //<editor-fold desc="Public function"> + /** + * Select end of text + */ + public selectEndText(): void { + this.writeInteraction.selectEndText(); + } + /** * Select all text */ diff --git a/src/lib/elements/connections/Line.ts b/src/lib/elements/connections/Line.ts index 8a250ae8..639bdb71 100644 --- a/src/lib/elements/connections/Line.ts +++ b/src/lib/elements/connections/Line.ts @@ -265,7 +265,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -284,7 +284,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -295,7 +295,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -337,7 +337,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Aus Gruppe\nentfernen', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -1660,6 +1660,9 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editImageObject(this.model); } @@ -1701,6 +1704,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer public onButtonDelete(event: PIXI.InteractionEvent): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + + // Hide menu + this.image.controlHideMenu(); + setTimeout(() => { // Set mode this.modeInteraction.setMode("delete"); @@ -1717,6 +1724,9 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.degroupLayerGroupImageObject(this.model); if (unselectElement) { @@ -1733,6 +1743,9 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object this.image.copyImageObject(this.model); } @@ -1745,6 +1758,9 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Clipboard image object this.image.clipboardImageObject(this.model); } @@ -2178,8 +2194,6 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer * Show control points */ public showControlPoints(): void { - // TODO remove - // TODO remove console.log(this.name); if (this._lineControlPointElement) { this._lineControlPointElement.showItem() } diff --git a/src/lib/elements/controls/SelectGroupElement.ts b/src/lib/elements/controls/SelectGroupElement.ts index 65e53da5..a19e5009 100644 --- a/src/lib/elements/controls/SelectGroupElement.ts +++ b/src/lib/elements/controls/SelectGroupElement.ts @@ -187,7 +187,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -206,7 +206,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -217,7 +217,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -259,7 +259,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Gruppe\nauflösen', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -320,7 +320,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this._interactiveGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf277', - description: 'Interactive Gruppe', + description: 'Interaktive\nFläche\n(Gruppe)', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -339,7 +339,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this._poiGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf649', - description: 'POI Gruppe', + description: 'POI\n(Gruppe)', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -358,7 +358,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this._textGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf53f', - description: 'Text Gruppe', + description: 'Farbgruppe', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -377,7 +377,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { this._legendGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf0cb', - description: 'Legenden Gruppe', + description: 'Legende\n(Gruppe)', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -839,6 +839,9 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editImageObjectGrouping(); } @@ -871,6 +874,9 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Delete this.displayObjects.forEach((io) => { (io as any).modeInteraction.setMode("delete_multiple"); @@ -892,7 +898,9 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { public onButtonDegroup(): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); - this.controlHideMenu(); + + // Hide menu + this.image.controlHideMenu(); // Emits if (this._type === SelectGroupType.GROUPING) { @@ -913,6 +921,9 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object switch (this._type) { case SelectGroupType.LAYERGROUP: diff --git a/src/lib/elements/fills/FillCollection.ts b/src/lib/elements/fills/FillCollection.ts index a74e27f9..03039a76 100644 --- a/src/lib/elements/fills/FillCollection.ts +++ b/src/lib/elements/fills/FillCollection.ts @@ -166,7 +166,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -185,7 +185,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -196,7 +196,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -238,7 +238,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Aus Gruppe\nentfernen', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -1386,6 +1386,9 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editImageObject(this.model); } @@ -1427,6 +1430,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, public onButtonDelete(event: PIXI.InteractionEvent): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + + // Hide menu + this.image.controlHideMenu(); + setTimeout(() => { // Set mode this.modeInteraction.setMode("delete"); @@ -1443,6 +1450,9 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.degroupLayerGroupImageObject(this.model); if (unselectElement) { @@ -1459,6 +1469,9 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object this.image.copyImageObject(this.model); } @@ -1471,6 +1484,9 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection, // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Clipboard image object this.image.clipboardImageObject(this.model); } diff --git a/src/lib/elements/images/Image.ts b/src/lib/elements/images/Image.ts index 34f36143..f29b56de 100644 --- a/src/lib/elements/images/Image.ts +++ b/src/lib/elements/images/Image.ts @@ -292,7 +292,7 @@ export class Image extends BaseContainer<ImageModel> { this._interactiveAreaButtonElement = new MedsurfDraw.IndexedRoundButtonElement({ image: this, text: '\uf304', - description: 'Interactive\nFläche', + description: 'Zeichenstift\n(Interaktiv)', descriptionFontSize: Design.subMenu.descriptionFontSize, index: '\uf277', circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), @@ -304,7 +304,7 @@ export class Image extends BaseContainer<ImageModel> { this._polygonButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this, text: '\uf304', - description: 'Polygon', + description: 'Zeichenstift', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -328,7 +328,7 @@ export class Image extends BaseContainer<ImageModel> { this._legendButtonElement = new MedsurfDraw.IndexedRoundButtonElement({ image: this, text: '\uf893', - description: 'Legende', + description: 'Text\n(Legende)', descriptionFontSize: Design.subMenu.descriptionFontSize, index: '\uf0cb', circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), @@ -364,7 +364,7 @@ export class Image extends BaseContainer<ImageModel> { this._arrowTextGroupingButtonElement = new MedsurfDraw.IndexedRoundButtonElement({ image: this, text: '\uf124', - description: 'Spickel in\nText Gruppe', + description: 'Pfeil\n(Farbgruppe)', descriptionFontSize: Design.subMenu.descriptionFontSize, index: '\uf53f', circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), @@ -376,7 +376,7 @@ export class Image extends BaseContainer<ImageModel> { this._arrowButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this, text: '\uf124', - description: 'Spickel', + description: 'Pfeil', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -400,7 +400,7 @@ export class Image extends BaseContainer<ImageModel> { this._ellipseInteractiveGroupingButtonElement = new MedsurfDraw.IndexedRoundButtonElement({ image: this, text: '\uf5ed', - description: 'Ellipse in\ninteractiver\nGruppe', + description: 'Ellipse\n(Interaktiv)', descriptionFontSize: Design.subMenu.descriptionFontSize, index: '\uf277', circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), @@ -436,7 +436,7 @@ export class Image extends BaseContainer<ImageModel> { this._rectangleInteractiveGroupingButtonElement = new MedsurfDraw.IndexedRoundButtonElement({ image: this, text: '\uf5ef', - description: 'Rechteck in\ninteractiver\nGruppe', + description: 'Rechteck\n(Interaktiv)', descriptionFontSize: Design.subMenu.descriptionFontSize, index: '\uf277', circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), @@ -472,7 +472,7 @@ export class Image extends BaseContainer<ImageModel> { this._arrowMarkerButtonElement = new MedsurfDraw.RoundButtonElement({ image: this, text: '\uf30a', - description: 'Pfeil\nMarker', + description: 'Marker\n(Pfeil)', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -491,7 +491,7 @@ export class Image extends BaseContainer<ImageModel> { this._ellipseMarkerButtonElement = new MedsurfDraw.RoundButtonElement({ image: this, text: '\uf276', - description: 'Ellipse\nMarker', + description: 'Marker\n(Punkt)', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -514,7 +514,7 @@ export class Image extends BaseContainer<ImageModel> { this._interactiveGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ image: this, text: '\uf277', - description: 'Interactive\nGruppe', + description: 'Interaktive\nFläche\n(Gruppe)', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -533,7 +533,7 @@ export class Image extends BaseContainer<ImageModel> { this._poiGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ image: this, text: '\uf649', - description: 'POI Gruppe', + description: 'POI\n(Gruppe)', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -552,7 +552,7 @@ export class Image extends BaseContainer<ImageModel> { this._textGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ image: this, text: '\uf53f', - description: 'Text Gruppe', + description: 'Farbgruppe', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -571,7 +571,7 @@ export class Image extends BaseContainer<ImageModel> { this._legendGroupingButtonElement = new MedsurfDraw.RoundButtonElement({ image: this, text: '\uf0cb', - description: 'Legenden\nGruppe', + description: 'Legende\n(Gruppe)', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, diff --git a/src/lib/elements/legends/LegendCollection.ts b/src/lib/elements/legends/LegendCollection.ts index 58e3cd10..888a2ff5 100644 --- a/src/lib/elements/legends/LegendCollection.ts +++ b/src/lib/elements/legends/LegendCollection.ts @@ -183,7 +183,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -202,7 +202,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -213,7 +213,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -255,7 +255,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Aus Gruppe\nentfernen', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -990,6 +990,9 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editImageObject(this.model); } @@ -1031,6 +1034,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti public onButtonDelete(event: PIXI.InteractionEvent): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + + // Hide menu + this.image.controlHideMenu(); + setTimeout(() => { // Set mode this.modeInteraction.setMode("delete"); @@ -1047,6 +1054,9 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.degroupLayerGroupImageObject(this.model); if (unselectElement) { @@ -1063,6 +1073,9 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object this.image.copyImageObject(this.model); } @@ -1075,6 +1088,9 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Clipboard image object this.image.clipboardImageObject(this.model); } diff --git a/src/lib/elements/legends/LegendColumn.ts b/src/lib/elements/legends/LegendColumn.ts index cd35c842..c9effe8a 100644 --- a/src/lib/elements/legends/LegendColumn.ts +++ b/src/lib/elements/legends/LegendColumn.ts @@ -108,7 +108,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -127,7 +127,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -138,7 +138,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -180,7 +180,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Aus Gruppe\nentfernen', descriptionFontSize: 6, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -508,6 +508,9 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editLegendColumn(this.model, (this.parent as MedsurfDraw.LegendCollection).model); } @@ -549,6 +552,10 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base public onButtonDelete(event: PIXI.InteractionEvent): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + + // Hide menu + this.image.controlHideMenu(); + setTimeout(() => { (this.parent as MedsurfDraw.LegendCollection).removeLegendColumn(this.model); /* @@ -568,6 +575,9 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Degroup image object (this.parent as MedsurfDraw.LegendCollection).onButtonDegroup(unselectElement); } @@ -580,6 +590,9 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object (this.parent as MedsurfDraw.LegendCollection).onButtonDuplicate(); } diff --git a/src/lib/elements/legends/LegendRow.ts b/src/lib/elements/legends/LegendRow.ts index 8af8e074..496c6e20 100644 --- a/src/lib/elements/legends/LegendRow.ts +++ b/src/lib/elements/legends/LegendRow.ts @@ -126,7 +126,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -145,7 +145,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -156,7 +156,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -198,7 +198,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Aus Gruppe\nentfernen', descriptionFontSize: 6, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -687,6 +687,9 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editLegendRow(this.model, (this.parent as MedsurfDraw.LegendColumn).model, (this.parent.parent as MedsurfDraw.LegendCollection).model); @@ -730,6 +733,10 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen public onButtonDelete(event: PIXI.InteractionEvent): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + + // Hide menu + this.image.controlHideMenu(); + setTimeout(() => { (this.parent as MedsurfDraw.LegendColumn).removeLegendRow(this.model); /* TODO remove @@ -749,6 +756,9 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Degroup image object (this.parent as MedsurfDraw.LegendColumn).onButtonDegroup(unselectElement); } @@ -761,6 +771,9 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object (this.parent as MedsurfDraw.LegendColumn).onButtonDuplicate(); } @@ -773,6 +786,9 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Clipboard image object (this.parent as MedsurfDraw.LegendColumn).onButtonClipboard(); } diff --git a/src/lib/elements/positionings/PositionPoint.ts b/src/lib/elements/positionings/PositionPoint.ts index b56d41ec..d0dfb46c 100644 --- a/src/lib/elements/positionings/PositionPoint.ts +++ b/src/lib/elements/positionings/PositionPoint.ts @@ -195,7 +195,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -214,7 +214,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -225,7 +225,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -267,7 +267,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Aus Gruppe\nentfernen', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -1139,6 +1139,9 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editImageObject(this.model); } @@ -1180,6 +1183,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba public onButtonDelete(event: PIXI.InteractionEvent): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + + // Hide menu + this.image.controlHideMenu(); + setTimeout(() => { // Set mode this.modeInteraction.setMode("delete"); @@ -1196,6 +1203,9 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.degroupLayerGroupImageObject(this.model); if (unselectElement) { @@ -1212,6 +1222,9 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object this.image.copyImageObject(this.model); } @@ -1224,6 +1237,9 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Clipboard image object this.image.clipboardImageObject(this.model); } @@ -1266,7 +1282,9 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba this.emit("debounceDraw"); // Emits - // TODO not needed this.emit("selftestChanged"); + this.emit("selftestChanged"); + + // Update this.image.updateImageObject(this.model); } //</editor-fold> diff --git a/src/lib/elements/positionings/SelftestPoint.ts b/src/lib/elements/positionings/SelftestPoint.ts index db76dff1..548487ad 100644 --- a/src/lib/elements/positionings/SelftestPoint.ts +++ b/src/lib/elements/positionings/SelftestPoint.ts @@ -8,6 +8,7 @@ import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseC * Selftest point model */ export class SelftestPointModel extends BaseContainerImageModel { + isSelftest: boolean; selftestPoint: Models.Point; options: Models.ElementOptions = {hasLine: true, lineColor: 0xFFFFFF, lineAlpha: 1, hasFill: false}; } @@ -145,19 +146,24 @@ export class SelftestPoint extends BaseContainer<SelftestPointModel> { * @private */ protected _modeSelftest(): void { - // Setup - this.interactive = true; - this.cursor = "select"; + if (this.data.isSelftest) { + // Setup + this.interactive = true; + this.cursor = "select"; - // Events - this.selectInteraction.reset(); - this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); - this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction); - this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); - this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); - - // Show item - this.showItem(); + // Events + this.selectInteraction.reset(); + this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction); + this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction); + this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction); + this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction); + + // Show item + this.showItem(); + } else { + // Hide item + this.hideItem(); + } } /** @@ -263,6 +269,21 @@ export class SelftestPoint extends BaseContainer<SelftestPointModel> { //</editor-fold> //<editor-fold desc="Getter and Setter"> + /** + * Get isSelftest + */ + public get isSelftest(): boolean { + return this.data.isSelftest; + } + + /** + * Set isSelftest + * @param value + */ + public set isSelftest(value: boolean) { + this.data.isSelftest = value; + } + /** * Get selftest point */ diff --git a/src/lib/elements/primitives/ArrowPrimitive.ts b/src/lib/elements/primitives/ArrowPrimitive.ts index 7a2e6134..80621d88 100644 --- a/src/lib/elements/primitives/ArrowPrimitive.ts +++ b/src/lib/elements/primitives/ArrowPrimitive.ts @@ -100,6 +100,8 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.modeInteraction.on("remove-blocked_item", this._removeModeBlockedItem, this); this.modeInteraction.on('draw_item', this._modeDrawItem, this); this.modeInteraction.on("remove-draw_item", this._removeModeDrawItem, this); + this.modeInteraction.on('draw_clickable', this._modeDrawSelect, this); + this.modeInteraction.on('remove-draw_clickable', this._removeModeDrawSelect, this); this.modeInteraction.on('choose_select', this._modeChooseSelect, this); this.modeInteraction.on('remove-choose_select', this._removeModeChooseSelect, this); this.modeInteraction.on('choose_unselect', this._modeChooseUnselect, this); @@ -137,6 +139,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // -- Move parent.on("endPositionPointMove", this.endPositionPointMove, this); // -- Selftest + parent.on("selftestChanged", this.selftestChanged, this); this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this); }); // -- Removed @@ -148,6 +151,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // -- Move parent.off("endPositionPointMove", this.endPositionPointMove, this); // -- Selftest + parent.off("selftestChanged", this.selftestChanged, this); this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this); }); //</editor-fold> @@ -183,6 +187,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // -- Selftest element this._selftestElement = new MedsurfDraw.SelftestPoint({ image: this.image, + isSelftest: (this.parent as MedsurfDraw.PositionPoint).model.isSelftest, selftestPoint: new PIXI.Point( this.parent.x + this.model.rectangle.x * imageWidth, this.parent.y + this.model.rectangle.y * imageWidth @@ -207,7 +212,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -226,7 +231,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -237,7 +242,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -280,7 +285,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Aus Gruppe\nentfernen', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -615,6 +620,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.interactive = true; this.cursor = "select"; + // Elements // -- Arrow element this._arrowElement.hideItem(); @@ -1011,6 +1017,44 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, this.scaleInteraction.reset(); } + /** + * Mode draw select + * @private + */ + protected _modeDrawSelect(): void { + // Setup + this.interactive = true; + this.cursor = "select"; + + // Element + // -- Arrow element + this._arrowElement.options.lineColor = Design.positionPoint.lineColorGroup; + this._arrowElement.options.fillColor = Design.positionPoint.fillColorGroup; + + // Draw + this.emit("debounceDraw"); + } + + /** + * Remove mode draw select + * @param parent + * @param mode + * @private + */ + protected _removeModeDrawSelect(parent: MedsurfDraw.ImageObject, mode: string): void { + // Setup + this.interactive = false; + + // Element + // -- Arrow element + this._arrowElement.options = Object.assign({}, this.model.options); + + // Draw + if (!mode.startsWith('delete')) { + this.emit("debounceDraw"); + } + } + /** * Mode choose select * @private @@ -1139,6 +1183,9 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editPrimitive(this.model); } @@ -1191,6 +1238,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, public onButtonDelete(event: PIXI.InteractionEvent): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + + // Hide menu + this.image.controlHideMenu(); + setTimeout(() => { // Set mode this.modeInteraction.setMode("delete"); @@ -1207,6 +1258,9 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Degroup image object (this.parent as MedsurfDraw.PositionPoint).onButtonDegroup(false); @@ -1289,6 +1343,9 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object (this.parent as MedsurfDraw.PositionPoint).onButtonDuplicate(); } @@ -1301,6 +1358,9 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Clipboard image object (this.parent as MedsurfDraw.PositionPoint).onButtonClipboard(); } @@ -1861,6 +1921,15 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive, } //</editor-fold> + //<editor-fold desc="Selftest"> + /** + * Selftest changed + */ + public selftestChanged(): void { + this._selftestElement.isSelftest = (this.parent as MedsurfDraw.PositionPoint).model.isSelftest; + } + //</editor-fold> + //<editor-fold desc="BaseContainer"> /** * Get rectangle diff --git a/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts b/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts index f1809800..fc76fba1 100644 --- a/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts +++ b/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts @@ -168,7 +168,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -187,7 +187,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -198,7 +198,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -241,7 +241,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Aus Gruppe\nentfernen', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -1042,6 +1042,9 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editPrimitive(this.model); } @@ -1094,6 +1097,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba public onButtonDelete(event: PIXI.InteractionEvent): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + + // Hide menu + this.image.controlHideMenu(); + setTimeout(() => { // Set mode this.modeInteraction.setMode("delete"); @@ -1110,6 +1117,9 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Degroup image object (this.parent as MedsurfDraw.PositionPoint).onButtonDegroup(false); @@ -1192,6 +1202,9 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object (this.parent as MedsurfDraw.PositionPoint).onButtonDuplicate(); } @@ -1204,6 +1217,9 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Clipboard image object (this.parent as MedsurfDraw.PositionPoint).onButtonClipboard(); } diff --git a/src/lib/elements/primitives/EllipsePrimitive.ts b/src/lib/elements/primitives/EllipsePrimitive.ts index 04ea6c06..14459330 100644 --- a/src/lib/elements/primitives/EllipsePrimitive.ts +++ b/src/lib/elements/primitives/EllipsePrimitive.ts @@ -100,6 +100,8 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.modeInteraction.on("remove-blocked_item", this._removeModeBlockedItem, this); this.modeInteraction.on('draw_item', this._modeDrawItem, this); this.modeInteraction.on("remove-draw_item", this._removeModeDrawItem, this); + this.modeInteraction.on('draw_clickable', this._modeDrawSelect, this); + this.modeInteraction.on('remove-draw_clickable', this._removeModeDrawSelect, this); this.modeInteraction.on('choose_select', this._modeChooseSelect, this); this.modeInteraction.on('remove-choose_select', this._removeModeChooseSelect, this); this.modeInteraction.on('choose_unselect', this._modeChooseUnselect, this); @@ -137,6 +139,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // -- Move parent.on("endPositionPointMove", this.endPositionPointMove, this); // -- Selftest + parent.on("selftestChanged", this.selftestChanged, this); this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this); }); // -- Removed @@ -148,6 +151,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // -- Move parent.off("endPositionPointMove", this.endPositionPointMove, this); // -- Selftest + parent.off("selftestChanged", this.selftestChanged, this); this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this); }); //</editor-fold> @@ -177,6 +181,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // -- Selftest element this._selftestElement = new MedsurfDraw.SelftestPoint({ image: this.image, + isSelftest: (this.parent as MedsurfDraw.PositionPoint).model.isSelftest, selftestPoint: new PIXI.Point( this.parent.x + this.model.ellipse.x * imageWidth, this.parent.y + this.model.ellipse.y * imageWidth @@ -192,7 +197,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -211,7 +216,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -222,7 +227,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -265,7 +270,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Aus Gruppe\nentfernen', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -589,6 +594,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.interactive = true; this.cursor = "select"; + // Elements // -- Ellipse element this._ellipseElement.hideItem(); @@ -977,6 +983,44 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti this.scaleInteraction.reset(); } + /** + * Mode draw select + * @private + */ + protected _modeDrawSelect(): void { + // Setup + this.interactive = true; + this.cursor = "select"; + + // Element + // -- Ellipse element + this._ellipseElement.options.lineColor = Design.positionPoint.lineColorGroup; + this._ellipseElement.options.fillColor = Design.positionPoint.fillColorGroup; + + // Draw + this.emit("debounceDraw"); + } + + /** + * Remove mode draw select + * @param parent + * @param mode + * @private + */ + protected _removeModeDrawSelect(parent: MedsurfDraw.ImageObject, mode: string): void { + // Setup + this.interactive = false; + + // Element + // -- Ellipse element + this._ellipseElement.options = Object.assign({}, this.model.options); + + // Draw + if (!mode.startsWith('delete')) { + this.emit("debounceDraw"); + } + } + /** * Mode choose select * @private @@ -1105,6 +1149,9 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editPrimitive(this.model); } @@ -1157,6 +1204,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti public onButtonDelete(event: PIXI.InteractionEvent): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + + // Hide menu + this.image.controlHideMenu(); + setTimeout(() => { // Set mode this.modeInteraction.setMode("delete"); @@ -1173,6 +1224,9 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Degroup image object (this.parent as MedsurfDraw.PositionPoint).onButtonDegroup(false); @@ -1255,6 +1309,9 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object (this.parent as MedsurfDraw.PositionPoint).onButtonDuplicate(); } @@ -1267,6 +1324,9 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Clipboard image object (this.parent as MedsurfDraw.PositionPoint).onButtonClipboard(); } @@ -1749,6 +1809,15 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti } //</editor-fold> + //<editor-fold desc="Selftest"> + /** + * Selftest changed + */ + public selftestChanged(): void { + this._selftestElement.isSelftest = (this.parent as MedsurfDraw.PositionPoint).model.isSelftest; + } + //</editor-fold> + //<editor-fold desc="BaseContainer"> /** * Get rectangle diff --git a/src/lib/elements/primitives/RectanglePrimitive.ts b/src/lib/elements/primitives/RectanglePrimitive.ts index 6bbcfe6f..07ad215e 100644 --- a/src/lib/elements/primitives/RectanglePrimitive.ts +++ b/src/lib/elements/primitives/RectanglePrimitive.ts @@ -100,6 +100,8 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.modeInteraction.on("remove-blocked_item", this._removeModeBlockedItem, this); this.modeInteraction.on('draw_item', this._modeDrawItem, this); this.modeInteraction.on("remove-draw_item", this._removeModeDrawItem, this); + this.modeInteraction.on('draw_clickable', this._modeDrawSelect, this); + this.modeInteraction.on('remove-draw_clickable', this._removeModeDrawSelect, this); this.modeInteraction.on('choose_select', this._modeChooseSelect, this); this.modeInteraction.on('remove-choose_select', this._removeModeChooseSelect, this); this.modeInteraction.on('choose_unselect', this._modeChooseUnselect, this); @@ -137,6 +139,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // -- Move parent.on("endPositionPointMove", this.endPositionPointMove, this); // -- Selftest + parent.on("selftestChanged", this.selftestChanged, this); this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this); }); // -- Removed @@ -148,6 +151,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // -- Move parent.off("endPositionPointMove", this.endPositionPointMove, this); // -- Selftest + parent.off("selftestChanged", this.selftestChanged, this); this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this); }); //</editor-fold> @@ -177,6 +181,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // -- Selftest element this._selftestElement = new MedsurfDraw.SelftestPoint({ image: this.image, + isSelftest: (this.parent as MedsurfDraw.PositionPoint).model.isSelftest, selftestPoint: new PIXI.Point( this.parent.x + this.model.rectangle.x * imageWidth, this.parent.y + this.model.rectangle.y * imageWidth @@ -192,7 +197,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -211,7 +216,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -222,7 +227,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -265,7 +270,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Aus Gruppe\nentfernen', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -590,6 +595,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.interactive = true; this.cursor = "select"; + // Elements // -- Rectangle element this._rectangleElement.hideItem(); @@ -978,6 +984,44 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri this.scaleInteraction.reset(); } + /** + * Mode draw select + * @private + */ + protected _modeDrawSelect(): void { + // Setup + this.interactive = true; + this.cursor = "select"; + + // Element + // -- Rectangle element + this._rectangleElement.options.lineColor = Design.positionPoint.lineColorGroup; + this._rectangleElement.options.fillColor = Design.positionPoint.fillColorGroup; + + // Draw + this.emit("debounceDraw"); + } + + /** + * Remove mode draw select + * @param parent + * @param mode + * @private + */ + protected _removeModeDrawSelect(parent: MedsurfDraw.ImageObject, mode: string): void { + // Setup + this.interactive = false; + + // Element + // -- Rectangle element + this._rectangleElement.options = Object.assign({}, this.model.options); + + // Draw + if (!mode.startsWith('delete')) { + this.emit("debounceDraw"); + } + } + /** * Mode choose select * @private @@ -1106,6 +1150,9 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editPrimitive(this.model); } @@ -1158,6 +1205,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri public onButtonDelete(event: PIXI.InteractionEvent): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + + // Hide menu + this.image.controlHideMenu(); + setTimeout(() => { // Set mode this.modeInteraction.setMode("delete"); @@ -1174,6 +1225,9 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Degroup image object (this.parent as MedsurfDraw.PositionPoint).onButtonDegroup(false); @@ -1256,6 +1310,9 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object (this.parent as MedsurfDraw.PositionPoint).onButtonDuplicate(); } @@ -1268,6 +1325,9 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Clipboard image object (this.parent as MedsurfDraw.PositionPoint).onButtonClipboard(); } @@ -1750,6 +1810,15 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri } //</editor-fold> + //<editor-fold desc="Selftest"> + /** + * Selftest changed + */ + public selftestChanged(): void { + this._selftestElement.isSelftest = (this.parent as MedsurfDraw.PositionPoint).model.isSelftest; + } + //</editor-fold> + //<editor-fold desc="BaseContainer"> /** * Get rectangle diff --git a/src/lib/elements/primitives/TextPrimitive.ts b/src/lib/elements/primitives/TextPrimitive.ts index 5d7f3d59..a2416d6e 100644 --- a/src/lib/elements/primitives/TextPrimitive.ts +++ b/src/lib/elements/primitives/TextPrimitive.ts @@ -100,6 +100,8 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.modeInteraction.on("remove-blocked_item", this._removeModeBlockedItem, this); this.modeInteraction.on('draw_item', this._modeDrawItem, this); this.modeInteraction.on("remove-draw_item", this._removeModeDrawItem, this); + this.modeInteraction.on('draw_clickable', this._modeDrawSelect, this); + this.modeInteraction.on('remove-draw_clickable', this._removeModeDrawSelect, this); this.modeInteraction.on('choose_select', this._modeChooseSelect, this); this.modeInteraction.on('remove-choose_select', this._removeModeChooseSelect, this); this.modeInteraction.on('choose_unselect', this._modeChooseUnselect, this); @@ -111,6 +113,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.moveInteraction.on("startMove", this.startMove, this); this.moveInteraction.on("onMove", this.onMove, this); this.moveInteraction.on("endMove", this.endMove, this); + this.moveInteraction.on("endMoveLock", this.endMoveLock, this); // -- Scale interaction this.scaleInteraction = new MedsurfDraw.ScaleInteraction(this); this.scaleInteraction.on("onScale", this.onScale, this); @@ -139,6 +142,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // -- Move parent.on("endPositionPointMove", this.endPositionPointMove, this); // -- Selftest + parent.on("selftestChanged", this.selftestChanged, this); this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this); }); // -- Removed @@ -151,6 +155,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // -- Move parent.off("endPositionPointMove", this.endPositionPointMove, this); // -- Selftest + parent.off("selftestChanged", this.selftestChanged, this); this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this); }); //</editor-fold> @@ -192,6 +197,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // -- Selftest element this._selftestElement = new MedsurfDraw.SelftestPoint({ image: this.image, + isSelftest: (this.parent as MedsurfDraw.PositionPoint).model.isSelftest, selftestPoint: new PIXI.Point( this.parent.x + this.model.rectangle.x * imageWidth, this.parent.y + this.model.rectangle.y * imageWidth @@ -207,7 +213,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this._editButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf3f0', - description: 'Editieren', + description: 'Bearbeiten', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -226,7 +232,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf87f', - description: 'In den\nHintergrund', + description: 'Nach Hinten\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -237,7 +243,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({ image: this.image, text: '\uf856', - description: 'In den\nVordergrund', + description: 'Nach Vorne\nverschieben', descriptionFontSize: Design.subMenu.descriptionFontSize, menuElements: [ { @@ -280,7 +286,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({ image: this.image, text: '\uf248', - description: 'Ungruppieren', + description: 'Aus Gruppe\nentfernen', descriptionFontSize: Design.subMenu.descriptionFontSize, circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius), fontSize: Design.subMenu.fontSize, @@ -641,6 +647,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba this.interactive = true; this.cursor = "select"; + // Elements // -- Text element this._textElement.hideItem(); @@ -885,11 +892,16 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba /** * Remove mode select child + * @param parent + * @param mode * @private */ - protected _removeModeSelectChild(): void { + protected _removeModeSelectChild(parent: MedsurfDraw.ImageObject, mode: string): void { // Emits this.image.updatePrimitive(this.model); + + // Set select item + this.emit("debounceControlSelectItem"); } @@ -994,6 +1006,52 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba protected _modeDrawItem(): void { } + /** + * Mode draw select + * @private + */ + protected _modeDrawSelect(): void { + // Setup + this.interactive = true; + this.cursor = "select"; + + // Element + // -- Text element + this._textElement.style.fill = Design.positionPoint.fillColorGroup; + + // Draw + this.emit("debounceDraw"); + } + + /** + * Remove mode draw select + * @param parent + * @param mode + * @private + */ + protected _removeModeDrawSelect(parent: MedsurfDraw.ImageObject, mode: string): void { + // Get image width + const imageWidth = this.imageDimensions.width; + + // Defaults + const style = Object.assign({}, this.model.style); + if (style.fontSize) { + if (typeof style.fontSize === 'string') { + style.fontSize = parseFloat(style.fontSize); + } + style.fontSize *= imageWidth; + } + + // Setup + this.interactive = false; + // @ts-ignore TODO ignore + this._textElement.style = new PIXI.TextStyle(style); + + // Draw + if (!mode.startsWith('delete')) { + this.emit("debounceDraw"); + } + } /** * Remove mode draw item @@ -1156,6 +1214,9 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Emits this.image.editPrimitive(this.model); } @@ -1208,6 +1269,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba public onButtonDelete(event: PIXI.InteractionEvent): void { // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + + // Hide menu + this.image.controlHideMenu(); + setTimeout(() => { // Set mode this.modeInteraction.setMode("delete"); @@ -1224,6 +1289,9 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Degroup image object (this.parent as MedsurfDraw.PositionPoint).onButtonDegroup(true); @@ -1306,6 +1374,9 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Copy image object (this.parent as MedsurfDraw.PositionPoint).onButtonDuplicate(); } @@ -1318,6 +1389,9 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba // Menu this.collapseAllMenus(new PIXI.InteractionEvent()); + // Hide menu + this.image.controlHideMenu(); + // Clipboard image object (this.parent as MedsurfDraw.PositionPoint).onButtonClipboard(); } @@ -1660,6 +1734,18 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba (this.parent as MedsurfDraw.PositionPoint).moveInteraction.emit("endMove", event); } + /** + * End move lock + * @param event + */ + public endMoveLock(event: PIXI.InteractionEvent): void { + // Select all text + this._textElement.selectEndText(); + + // Edit Text + this.editText(); + } + /** * End position point move */ @@ -1915,6 +2001,15 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba } //</editor-fold> + //<editor-fold desc="Selftest"> + /** + * Selftest changed + */ + public selftestChanged(): void { + this._selftestElement.isSelftest = (this.parent as MedsurfDraw.PositionPoint).model.isSelftest; + } + //</editor-fold> + //<editor-fold desc="BaseContainer"> /** * Get rectangle diff --git a/src/lib/generators/combinations/InteractiveAreaGenerator.ts b/src/lib/generators/combinations/InteractiveAreaGenerator.ts index a7859c84..e25d15c1 100644 --- a/src/lib/generators/combinations/InteractiveAreaGenerator.ts +++ b/src/lib/generators/combinations/InteractiveAreaGenerator.ts @@ -86,7 +86,7 @@ export class InteractiveAreaGenerator extends BaseGenerator<MedsurfDraw.Image, I //<editor-fold desc="Elements"> // -- Line element - if (this._lineElement && this._lineElement.modeInteraction.lastMode.endsWith('new')) { + if (this._lineElement && this._lineElement.modeInteraction.lastMode.endsWith('_new')) { this._lineElement.modeInteraction.setMode('delete_draw'); } //</editor-fold> diff --git a/src/lib/generators/combinations/MarkerGenerator.ts b/src/lib/generators/combinations/MarkerGenerator.ts index 7354b75e..530111df 100644 --- a/src/lib/generators/combinations/MarkerGenerator.ts +++ b/src/lib/generators/combinations/MarkerGenerator.ts @@ -187,7 +187,7 @@ export class MarkerGenerator extends BaseGenerator<MedsurfDraw.Image, MarkerGene layerGroup: this.data.layerGroup, image: this.data.image, bezierCourve: false, - stickMode: MedsurfDraw.StickMode.NOELEMENTS, + stickMode: MedsurfDraw.StickMode.POSITIONPOINTS, startElement: positionPoint }); this._lineGenerator.once("startGenerator", this.start, this); @@ -222,17 +222,28 @@ export class MarkerGenerator extends BaseGenerator<MedsurfDraw.Image, MarkerGene this._startPositionPointElement = this._lineGenerator.startPositionPointElement as MedsurfDraw.PositionPoint; } - // Check if key pressed - if (!(MedsurfDraw.Keyboard.isKeyDown("ControlLeft") || MedsurfDraw.Keyboard.isKeyDown("ControlRight"))) { - // Members - this._enableKeyEvents = true; + const primitives = (this._lineGenerator.endPositionPointElement as MedsurfDraw.PositionPoint).model.primitives || [] as any []; + if (primitives.filter((p: any) => p.type === Models.ImageObjectType.TEXT).length > 0) { + // Emit end generator + this.emit("endGenerator"); - // Members - this._state = MarkerGeneratorStates.TEXT; + // End + this.end(); + } else { + if ((this._lineGenerator.endPositionPointElement as MedsurfDraw.PositionPoint).modeInteraction.lastMode !== 'draw_select') { + // Check if key pressed + if (!(MedsurfDraw.Keyboard.isKeyDown("ControlLeft") || MedsurfDraw.Keyboard.isKeyDown("ControlRight"))) { + // Members + this._enableKeyEvents = true; + + // Members + this._state = MarkerGeneratorStates.TEXT; + } + } + + // Setup generator + this.emit("debounceSetupGenerator", this._lineGenerator.endPositionPointElement); } - - // Setup generator - this.emit("debounceSetupGenerator", this._lineGenerator.endPositionPointElement); } /** diff --git a/src/lib/generators/connections/LineGenerator.ts b/src/lib/generators/connections/LineGenerator.ts index 7fd706b1..a10b71c5 100644 --- a/src/lib/generators/connections/LineGenerator.ts +++ b/src/lib/generators/connections/LineGenerator.ts @@ -124,7 +124,7 @@ export class LineGenerator extends BaseGenerator<MedsurfDraw.Image, LineGenerato //<editor-fold desc="Elements"> // -- Line element - if (this.lineElement && this.lineElement.modeInteraction.lastMode.endsWith('new')) { + if (this.lineElement && this.lineElement.modeInteraction.lastMode.endsWith('_new')) { this.lineElement.modeInteraction.setMode('delete_draw'); } //</editor-fold> @@ -342,7 +342,7 @@ export class LineGenerator extends BaseGenerator<MedsurfDraw.Image, LineGenerato this.lineElement.modeInteraction.setMode("delete_draw"); // Check for same position point - if (this.startPositionPointElement !== this._endPositionPointGenerator.positionPointElement) { + if (this.startPositionPointElement !== this.endPositionPointElement) { // Create new line element this.startEndPositionPointGenerator(); @@ -372,6 +372,9 @@ export class LineGenerator extends BaseGenerator<MedsurfDraw.Image, LineGenerato this.data.layerGroup.layerImageObjects.push(layerImageObject); */ + // Set mode + this.lineElement.modeInteraction.setModeItem('draw_select'); + // Emit end generator this.emit("endGenerator", this.endPositionPointElement); diff --git a/src/lib/generators/copies/CloneLayerGenerator.ts b/src/lib/generators/copies/CloneLayerGenerator.ts index 61e61d0a..ca890d4d 100644 --- a/src/lib/generators/copies/CloneLayerGenerator.ts +++ b/src/lib/generators/copies/CloneLayerGenerator.ts @@ -163,7 +163,7 @@ export class CloneLayerGenerator extends BaseGenerator<MedsurfDraw.Image, CloneL // Remove new elements imageObjects.filter((imageObject) => imageObject.modeInteraction.lastMode.startsWith('clone') - && imageObject.modeInteraction.lastMode.endsWith('new')) + && imageObject.modeInteraction.lastMode.endsWith('_new')) .sort((a, b) => { // Prio for line elements const aModel = (a as any).model; const bModel = (b as any).model; diff --git a/src/lib/generators/legends/LegendGenerator.ts b/src/lib/generators/legends/LegendGenerator.ts index dc220668..8a65edb2 100644 --- a/src/lib/generators/legends/LegendGenerator.ts +++ b/src/lib/generators/legends/LegendGenerator.ts @@ -158,7 +158,7 @@ export class LegendGenerator extends BaseGenerator<MedsurfDraw.Image, LegendGene //<editor-fold desc="Elements"> // -- Legend element - if (this.legendElement && this.legendElement.modeInteraction.lastMode.endsWith('new')) { + if (this.legendElement && this.legendElement.modeInteraction.lastMode.endsWith('_new')) { this.legendElement.modeInteraction.setMode('delete_draw') } //</editor-fold> diff --git a/src/lib/interactions/WriteInteraction.ts b/src/lib/interactions/WriteInteraction.ts index 4c8ee943..263f693a 100644 --- a/src/lib/interactions/WriteInteraction.ts +++ b/src/lib/interactions/WriteInteraction.ts @@ -360,6 +360,17 @@ export class WriteInteraction<TElement extends MedsurfDraw.EditableText> extends //</editor-fold> //<editor-fold desc="Public functions"> + /** + * Select end of text + */ + public selectEndText(): void { + this.element.startTextIndex = this.element.text.length; + this.emit("onCaret"); + } + + /** + * Select all text + */ public selectAllText(): void { this.element.textSelection = true; this.element.startTextIndex = this.element.text.length; -- GitLab