Map settings introduction and disable dragging of labels and interfaces when in readonly

This commit is contained in:
ziajka 2018-11-26 14:29:51 +01:00
parent 1217c4e31c
commit a4a4415c38
9 changed files with 37 additions and 18 deletions

View File

@ -40,6 +40,7 @@ import { SelectionEventSource } from './events/selection-event-source';
import { SelectionControlComponent } from './components/selection-control/selection-control.component'; import { SelectionControlComponent } from './components/selection-control/selection-control.component';
import { SelectionSelectComponent } from './components/selection-select/selection-select.component'; import { SelectionSelectComponent } from './components/selection-select/selection-select.component';
import { DraggableSelectionComponent } from './components/draggable-selection/draggable-selection.component'; import { DraggableSelectionComponent } from './components/draggable-selection/draggable-selection.component';
import { MapSettingsManager } from './managers/map-settings-manager';
@NgModule({ @NgModule({
@ -90,6 +91,7 @@ import { DraggableSelectionComponent } from './components/draggable-selection/dr
MapDrawingsDataSource, MapDrawingsDataSource,
MapSymbolsDataSource, MapSymbolsDataSource,
SelectionEventSource, SelectionEventSource,
MapSettingsManager,
...D3_MAP_IMPORTS ...D3_MAP_IMPORTS
], ],
exports: [ D3MapComponent, ExperimentalMapComponent ] exports: [ D3MapComponent, ExperimentalMapComponent ]

View File

@ -6,19 +6,18 @@ import { Selection, select } from 'd3-selection';
import { GraphLayout } from "../../widgets/graph-layout"; import { GraphLayout } from "../../widgets/graph-layout";
import { Context } from "../../models/context"; import { Context } from "../../models/context";
import { Size } from "../../models/size"; import { Size } from "../../models/size";
import { NodesWidget } from '../../widgets/nodes';
import { Subscription } from 'rxjs'; import { Subscription } from 'rxjs';
import { InterfaceLabelWidget } from '../../widgets/interface-label'; import { InterfaceLabelWidget } from '../../widgets/interface-label';
import { SelectionTool } from '../../tools/selection-tool'; import { SelectionTool } from '../../tools/selection-tool';
import { MovingTool } from '../../tools/moving-tool'; import { MovingTool } from '../../tools/moving-tool';
import { MapChangeDetectorRef } from '../../services/map-change-detector-ref'; import { MapChangeDetectorRef } from '../../services/map-change-detector-ref';
import { CanvasSizeDetector } from '../../helpers/canvas-size-detector'; import { CanvasSizeDetector } from '../../helpers/canvas-size-detector';
import { DrawingsWidget } from '../../widgets/drawings';
import { Node } from '../../models/node'; import { Node } from '../../models/node';
import { Link } from '../../../models/link'; import { Link } from '../../../models/link';
import { Drawing } from '../../models/drawing'; import { Drawing } from '../../models/drawing';
import { Symbol } from '../../../models/symbol'; import { Symbol } from '../../../models/symbol';
import { GraphDataManager } from '../../managers/graph-data-manager'; import { GraphDataManager } from '../../managers/graph-data-manager';
import { MapSettingsManager } from '../../managers/map-settings-manager';
@Component({ @Component({
@ -51,9 +50,8 @@ export class D3MapComponent implements OnInit, OnChanges, OnDestroy {
private context: Context, private context: Context,
private mapChangeDetectorRef: MapChangeDetectorRef, private mapChangeDetectorRef: MapChangeDetectorRef,
private canvasSizeDetector: CanvasSizeDetector, private canvasSizeDetector: CanvasSizeDetector,
private mapSettings: MapSettingsManager,
protected element: ElementRef, protected element: ElementRef,
protected nodesWidget: NodesWidget,
protected drawingsWidget: DrawingsWidget,
protected interfaceLabelWidget: InterfaceLabelWidget, protected interfaceLabelWidget: InterfaceLabelWidget,
protected selectionToolWidget: SelectionTool, protected selectionToolWidget: SelectionTool,
protected movingToolWidget: MovingTool, protected movingToolWidget: MovingTool,
@ -84,8 +82,7 @@ export class D3MapComponent implements OnInit, OnChanges, OnDestroy {
@Input('draw-link-tool') drawLinkTool: boolean; @Input('draw-link-tool') drawLinkTool: boolean;
@Input('readonly') set readonly(value) { @Input('readonly') set readonly(value) {
this.nodesWidget.draggingEnabled = !value; this.mapSettings.isReadOnly = value;
this.drawingsWidget.draggingEnabled = !value;
} }
ngOnChanges(changes: { [propKey: string]: SimpleChange }) { ngOnChanges(changes: { [propKey: string]: SimpleChange }) {

View File

@ -0,0 +1,7 @@
import { Injectable } from "@angular/core";
@Injectable()
export class MapSettingsManager {
public isReadOnly = false;
}

View File

@ -7,12 +7,12 @@ import { SvgToDrawingConverter } from "../helpers/svg-to-drawing-converter";
import { Draggable } from "../events/draggable"; import { Draggable } from "../events/draggable";
import { DrawingWidget } from "./drawing"; import { DrawingWidget } from "./drawing";
import { MapDrawing } from "../models/map/map-drawing"; import { MapDrawing } from "../models/map/map-drawing";
import { MapSettingsManager } from "../managers/map-settings-manager";
@Injectable() @Injectable()
export class DrawingsWidget implements Widget { export class DrawingsWidget implements Widget {
public draggable = new Draggable<SVGGElement, MapDrawing>(); public draggable = new Draggable<SVGGElement, MapDrawing>();
public draggingEnabled = false;
// public onContextMenu = new EventEmitter<NodeContextMenu>(); // public onContextMenu = new EventEmitter<NodeContextMenu>();
// public onDrawingClicked = new EventEmitter<NodeClicked>(); // public onDrawingClicked = new EventEmitter<NodeClicked>();
@ -22,6 +22,7 @@ export class DrawingsWidget implements Widget {
constructor( constructor(
private drawingWidget: DrawingWidget, private drawingWidget: DrawingWidget,
private svgToDrawingConverter: SvgToDrawingConverter, private svgToDrawingConverter: SvgToDrawingConverter,
private mapSettings: MapSettingsManager
) { ) {
this.svgToDrawingConverter = new SvgToDrawingConverter(); this.svgToDrawingConverter = new SvgToDrawingConverter();
} }
@ -59,7 +60,7 @@ export class DrawingsWidget implements Widget {
.exit() .exit()
.remove(); .remove();
if (this.draggingEnabled) { if (!this.mapSettings.isReadOnly) {
this.draggable.call(merge); this.draggable.call(merge);
} }
} }

View File

@ -9,6 +9,7 @@ import { MapLinkNode } from "../models/map/map-link-node";
import { MapLabel } from "../models/map/map-label"; import { MapLabel } from "../models/map/map-label";
import { FontFixer } from "../helpers/font-fixer"; import { FontFixer } from "../helpers/font-fixer";
import { SelectionManager } from "../managers/selection-manager"; import { SelectionManager } from "../managers/selection-manager";
import { MapSettingsManager } from "../managers/map-settings-manager";
describe('InterfaceLabelsWidget', () => { describe('InterfaceLabelsWidget', () => {
@ -16,6 +17,7 @@ describe('InterfaceLabelsWidget', () => {
let widget: InterfaceLabelWidget; let widget: InterfaceLabelWidget;
let linksEnter: Selection<SVGGElement, MapLink, SVGGElement, any>; let linksEnter: Selection<SVGGElement, MapLink, SVGGElement, any>;
let links: MapLink[]; let links: MapLink[];
let mapSettings: MapSettingsManager;
beforeEach(() => { beforeEach(() => {
svg = new TestSVGCanvas(); svg = new TestSVGCanvas();
@ -68,7 +70,8 @@ describe('InterfaceLabelsWidget', () => {
.exit() .exit()
.remove(); .remove();
widget = new InterfaceLabelWidget(new CssFixer(), new FontFixer(), new SelectionManager()); mapSettings = new MapSettingsManager();
widget = new InterfaceLabelWidget(new CssFixer(), new FontFixer(), new SelectionManager(), mapSettings);
}); });
afterEach(() => { afterEach(() => {

View File

@ -9,6 +9,7 @@ import { SelectionManager } from "../managers/selection-manager";
import { MapLinkNode } from "../models/map/map-link-node"; import { MapLinkNode } from "../models/map/map-link-node";
import { MapNode } from "../models/map/map-node"; import { MapNode } from "../models/map/map-node";
import { Draggable } from "../events/draggable"; import { Draggable } from "../events/draggable";
import { MapSettingsManager } from "../managers/map-settings-manager";
@Injectable() @Injectable()
export class InterfaceLabelWidget { export class InterfaceLabelWidget {
@ -20,7 +21,8 @@ export class InterfaceLabelWidget {
constructor( constructor(
private cssFixer: CssFixer, private cssFixer: CssFixer,
private fontFixer: FontFixer, private fontFixer: FontFixer,
private selectionManager: SelectionManager private selectionManager: SelectionManager,
private mapSettings: MapSettingsManager
) { ) {
} }
@ -121,7 +123,8 @@ export class InterfaceLabelWidget {
.exit() .exit()
.remove(); .remove();
this.draggable.call(merge); if(!this.mapSettings.isReadOnly) {
this.draggable.call(merge);
}
} }
} }

View File

@ -9,6 +9,7 @@ import { MapNode } from "../models/map/map-node";
import { SelectionManager } from "../managers/selection-manager"; import { SelectionManager } from "../managers/selection-manager";
import { Draggable } from "../events/draggable"; import { Draggable } from "../events/draggable";
import { MapLabel } from "../models/map/map-label"; import { MapLabel } from "../models/map/map-label";
import { MapSettingsManager } from "../managers/map-settings-manager";
@Injectable() @Injectable()
@ -20,7 +21,8 @@ export class LabelWidget implements Widget {
constructor( constructor(
private cssFixer: CssFixer, private cssFixer: CssFixer,
private fontFixer: FontFixer, private fontFixer: FontFixer,
private selectionManager: SelectionManager private selectionManager: SelectionManager,
private mapSettings: MapSettingsManager,
) {} ) {}
public redrawLabel(view: SVGSelection, label: MapLabel) { public redrawLabel(view: SVGSelection, label: MapLabel) {
@ -47,7 +49,9 @@ export class LabelWidget implements Widget {
.exit() .exit()
.remove(); .remove();
this.draggable.call(label_view); if(!this.mapSettings.isReadOnly) {
this.draggable.call(label_view);
}
} }

View File

@ -3,6 +3,7 @@ import { TestSVGCanvas } from "../testing";
import { NodesWidget } from "./nodes"; import { NodesWidget } from "./nodes";
import { NodeWidget } from "./node"; import { NodeWidget } from "./node";
import { instance, mock } from "ts-mockito"; import { instance, mock } from "ts-mockito";
import { MapSettingsManager } from "../managers/map-settings-manager";
describe('NodesWidget', () => { describe('NodesWidget', () => {
@ -13,7 +14,7 @@ describe('NodesWidget', () => {
beforeEach(() => { beforeEach(() => {
svg = new TestSVGCanvas(); svg = new TestSVGCanvas();
nodeWidget = instance(mock(NodeWidget)); nodeWidget = instance(mock(NodeWidget));
widget = new NodesWidget(nodeWidget); widget = new NodesWidget(nodeWidget, new MapSettingsManager());
}); });
afterEach(() => { afterEach(() => {

View File

@ -6,6 +6,7 @@ import { Layer } from "../models/layer";
import { NodeWidget } from "./node"; import { NodeWidget } from "./node";
import { Draggable } from "../events/draggable"; import { Draggable } from "../events/draggable";
import { MapNode } from "../models/map/map-node"; import { MapNode } from "../models/map/map-node";
import { MapSettingsManager } from "../managers/map-settings-manager";
@Injectable() @Injectable()
@ -13,10 +14,10 @@ export class NodesWidget implements Widget {
static NODE_LABEL_MARGIN = 3; static NODE_LABEL_MARGIN = 3;
public draggable = new Draggable<SVGGElement, MapNode>(); public draggable = new Draggable<SVGGElement, MapNode>();
public draggingEnabled = false;
constructor( constructor(
private nodeWidget: NodeWidget private nodeWidget: NodeWidget,
private mapSettings: MapSettingsManager
) { ) {
} }
@ -49,7 +50,7 @@ export class NodesWidget implements Widget {
.exit() .exit()
.remove(); .remove();
if (this.draggingEnabled) { if (!this.mapSettings.isReadOnly) {
this.draggable.call(merge); this.draggable.call(merge);
} }
} }