mirror of
https://github.com/GNS3/gns3-web-ui.git
synced 2025-04-25 05:19:43 +00:00
Drag nodes and drawings at the same time
This commit is contained in:
parent
332303da4c
commit
71ae1f374f
@ -46,8 +46,8 @@ export class MapComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
@Input() width = 1500;
|
@Input() width = 1500;
|
||||||
@Input() height = 600;
|
@Input() height = 600;
|
||||||
|
|
||||||
@Output() nodeDragged = new EventEmitter<DraggedDataEvent<Node[]>>();
|
@Output() nodeDragged = new EventEmitter<DraggedDataEvent<Node>>();
|
||||||
@Output() drawingDragged = new EventEmitter<DraggedDataEvent<Drawing[]>>();
|
@Output() drawingDragged = new EventEmitter<DraggedDataEvent<Drawing>>();
|
||||||
@Output() onLinkCreated = new EventEmitter<LinkCreated>();
|
@Output() onLinkCreated = new EventEmitter<LinkCreated>();
|
||||||
|
|
||||||
private parentNativeElement: any;
|
private parentNativeElement: any;
|
||||||
@ -144,13 +144,11 @@ export class MapComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.nodeDraggedSub = this.nodesEventSource.dragged.subscribe((evt) => {
|
this.nodeDraggedSub = this.nodesEventSource.dragged.subscribe((evt) => {
|
||||||
const converted = evt.datum.map((e) => this.mapNodeToNode.convert(e));
|
this.nodeDragged.emit(new DraggedDataEvent<Node>(this.mapNodeToNode.convert(evt.datum), evt.dx, evt.dy));
|
||||||
this.nodeDragged.emit(new DraggedDataEvent<Node[]>(converted, evt.dx, evt.dy));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.drawingDraggedSub = this.drawingsEventSource.dragged.subscribe((evt) => {
|
this.drawingDraggedSub = this.drawingsEventSource.dragged.subscribe((evt) => {
|
||||||
const converted = evt.datum.map((e) => this.mapDrawingToDrawing.convert(e));
|
this.drawingDragged.emit(new DraggedDataEvent<Drawing>(this.mapDrawingToDrawing.convert(evt.datum), evt.dx, evt.dy));
|
||||||
this.drawingDragged.emit(new DraggedDataEvent<Drawing[]>(converted, evt.dx, evt.dy));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.selectionChanged = this.selectionManager.subscribe(this.selectionToolWidget.rectangleSelected);
|
this.selectionChanged = this.selectionManager.subscribe(this.selectionToolWidget.rectangleSelected);
|
||||||
|
@ -15,7 +15,6 @@ export abstract class DataSource<T> {
|
|||||||
this.update(item);
|
this.update(item);
|
||||||
} else {
|
} else {
|
||||||
this.data.push(item);
|
this.data.push(item);
|
||||||
console.log("Item added");
|
|
||||||
this.dataChange.next(this.data);
|
this.dataChange.next(this.data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,6 @@ export class Draggable<GElement extends DraggedElementBaseType, Datum> {
|
|||||||
evt.dy = event.y - startEvt.y;
|
evt.dy = event.y - startEvt.y;
|
||||||
evt.x = event.x;
|
evt.x = event.x;
|
||||||
evt.y = event.y;
|
evt.y = event.y;
|
||||||
console.log(evt);
|
|
||||||
this.end.emit(evt);
|
this.end.emit(evt);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -5,5 +5,5 @@ import { MapDrawing } from "../models/map/map-drawing";
|
|||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class DrawingsEventSource {
|
export class DrawingsEventSource {
|
||||||
public dragged = new EventEmitter<DraggedDataEvent<MapDrawing[]>>();
|
public dragged = new EventEmitter<DraggedDataEvent<MapDrawing>>();
|
||||||
}
|
}
|
||||||
|
@ -5,5 +5,5 @@ import { MapNode } from "../models/map/map-node";
|
|||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class NodesEventSource {
|
export class NodesEventSource {
|
||||||
public dragged = new EventEmitter<DraggedDataEvent<MapNode[]>>();
|
public dragged = new EventEmitter<DraggedDataEvent<MapNode>>();
|
||||||
}
|
}
|
||||||
|
@ -86,15 +86,15 @@ export class NodesDraggableListener {
|
|||||||
this.nodesWidget.draggable.end,
|
this.nodesWidget.draggable.end,
|
||||||
this.drawingsWidget.draggable.end
|
this.drawingsWidget.draggable.end
|
||||||
).subscribe((evt: DraggableEnd<any>) => {
|
).subscribe((evt: DraggableEnd<any>) => {
|
||||||
console.log(evt);
|
|
||||||
const selected = this.selectionManager.getSelected();
|
const selected = this.selectionManager.getSelected();
|
||||||
|
|
||||||
const updatedNodes = selected.filter((item) => item instanceof MapNode).map((item: MapNode) => item);
|
selected.filter((item) => item instanceof MapNode).forEach((item: MapNode) => {
|
||||||
|
this.nodesEventSource.dragged.emit(new DraggedDataEvent<MapNode>(item, evt.dx, evt.dy));
|
||||||
|
})
|
||||||
|
|
||||||
const updatedDrawings = selected.filter((item) => item instanceof MapDrawing).map((item: MapDrawing) => item);
|
selected.filter((item) => item instanceof MapDrawing).forEach((item: MapDrawing) => {
|
||||||
|
this.drawingsEventSource.dragged.emit(new DraggedDataEvent<MapDrawing>(item, evt.dx, evt.dy));
|
||||||
this.nodesEventSource.dragged.emit(new DraggedDataEvent<MapNode[]>(updatedNodes, evt.dx, evt.dy));
|
});
|
||||||
this.drawingsEventSource.dragged.emit(new DraggedDataEvent<MapDrawing[]>(updatedDrawings, evt.dx, evt.dy));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -27,8 +27,6 @@ export class GraphDataManager {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
public setNodes(nodes: Node[]) {
|
public setNodes(nodes: Node[]) {
|
||||||
console.log("set all nodes");
|
|
||||||
|
|
||||||
const mapNodes = nodes.map((n) => this.nodeToMapNode.convert(n));
|
const mapNodes = nodes.map((n) => this.nodeToMapNode.convert(n));
|
||||||
this.mapNodesDataSource.set(mapNodes);
|
this.mapNodesDataSource.set(mapNodes);
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ import { LinkService } from "../../services/link.service";
|
|||||||
import { NodesDataSource } from "../../cartography/datasources/nodes-datasource";
|
import { NodesDataSource } from "../../cartography/datasources/nodes-datasource";
|
||||||
import { LinksDataSource } from "../../cartography/datasources/links-datasource";
|
import { LinksDataSource } from "../../cartography/datasources/links-datasource";
|
||||||
import { ProjectWebServiceHandler } from "../../handlers/project-web-service-handler";
|
import { ProjectWebServiceHandler } from "../../handlers/project-web-service-handler";
|
||||||
import { SelectionManager } from "../../cartography/managers/selection-manager";
|
|
||||||
import { DrawingsDataSource } from "../../cartography/datasources/drawings-datasource";
|
import { DrawingsDataSource } from "../../cartography/datasources/drawings-datasource";
|
||||||
import { ProgressService } from "../../common/progress/progress.service";
|
import { ProgressService } from "../../common/progress/progress.service";
|
||||||
import { MapChangeDetectorRef } from '../../cartography/services/map-change-detector-ref';
|
import { MapChangeDetectorRef } from '../../cartography/services/map-change-detector-ref';
|
||||||
@ -136,7 +135,6 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
|
|||||||
this.subscriptions.push(
|
this.subscriptions.push(
|
||||||
this.nodesDataSource.changes.subscribe((nodes: Node[]) => {
|
this.nodesDataSource.changes.subscribe((nodes: Node[]) => {
|
||||||
this.nodes = nodes;
|
this.nodes = nodes;
|
||||||
console.log("update nodes");
|
|
||||||
this.mapChangeDetectorRef.detectChanges();
|
this.mapChangeDetectorRef.detectChanges();
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
@ -213,9 +211,8 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onNodeDragged(draggedEvent: DraggedDataEvent<Node[]>) {
|
onNodeDragged(draggedEvent: DraggedDataEvent<Node>) {
|
||||||
draggedEvent.datum.forEach((n: Node) => {
|
const node = this.nodesDataSource.get(draggedEvent.datum.node_id);
|
||||||
const node = this.nodesDataSource.get(n.node_id);
|
|
||||||
node.x += draggedEvent.dx;
|
node.x += draggedEvent.dx;
|
||||||
node.y += draggedEvent.dy;
|
node.y += draggedEvent.dy;
|
||||||
|
|
||||||
@ -224,13 +221,10 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
|
|||||||
.subscribe((serverNode: Node) => {
|
.subscribe((serverNode: Node) => {
|
||||||
this.nodesDataSource.update(serverNode);
|
this.nodesDataSource.update(serverNode);
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onDrawingDragged(draggedEvent: DraggedDataEvent<Drawing[]>) {
|
onDrawingDragged(draggedEvent: DraggedDataEvent<Drawing>) {
|
||||||
draggedEvent.datum.forEach((d: Drawing) => {
|
const drawing = this.drawingsDataSource.get(draggedEvent.datum.drawing_id);
|
||||||
|
|
||||||
const drawing = this.drawingsDataSource.get(d.drawing_id);
|
|
||||||
drawing.x += draggedEvent.dx;
|
drawing.x += draggedEvent.dx;
|
||||||
drawing.y += draggedEvent.dy;
|
drawing.y += draggedEvent.dy;
|
||||||
|
|
||||||
@ -239,7 +233,6 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
|
|||||||
.subscribe((serverDrawing: Drawing) => {
|
.subscribe((serverDrawing: Drawing) => {
|
||||||
this.drawingsDataSource.update(serverDrawing);
|
this.drawingsDataSource.update(serverDrawing);
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public set readonly(value) {
|
public set readonly(value) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user