"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SGraphScene = void 0; const lib_1 = require("@persagy-web/base/lib"); const lib_2 = require("@persagy-web/draw/lib"); const SGraphItem_1 = require("./SGraphItem"); const SGraphSelectContainer_1 = require("./SGraphSelectContainer"); class SGraphScene { constructor() { this.view = null; this.root = new SGraphItem_1.SGraphItem(); this.grabItem = null; this.hoverItem = null; this.selectContainer = new SGraphSelectContainer_1.SGraphSelectContainer(); this.root.scene = this; } addItem(item) { item.parent = this.root; } removeItem(item) { item.parent = null; } drawScene(painter, rect) { this.root.onPaint(painter, rect); } drawBackground(painter, rect) { } drawForeground(painter, rect) { } allItemRect() { let rect = null; for (let item of this.root.children) { if (rect == null) { rect = item.boundingRect().translated(item.pos.x, item.pos.y); } else { rect.union(item.boundingRect().translated(item.pos.x, item.pos.y)); } } return rect; } selectedItemRect() { let rect = null; for (let item of this.root.children) { if (!item.selected) { continue; } if (rect == null) { rect = item.boundingRect().translated(item.pos.x, item.pos.y); } else { rect.union(item.boundingRect().translated(item.pos.x, item.pos.y)); } } return rect; } selectedItems() { let itemList = Array(); for (let item of this.root.children) { if (item.selected) { itemList.push(item); } } return itemList; } onDoubleClick(event) { if (this.grabItem != null) { return this.grabItem.onDoubleClick(this.toGrabItemMotionEvent(this.grabItem, event)); } return this.root.onDoubleClick(event); } onMouseDown(event) { if (this.grabItem != null) { return this.grabItem.onMouseDown(this.toGrabItemMotionEvent(this.grabItem, event)); } const flag = this.root.onMouseDown(event); if (!flag) { this.selectContainer.clear(); } return flag; } onMouseMove(event) { if (this.grabItem != null) { return this.grabItem.onMouseMove(this.toGrabItemMotionEvent(this.grabItem, event)); } return this.root.onMouseMove(event); } onMouseUp(event) { if (this.grabItem != null) { return this.grabItem.onMouseUp(this.toGrabItemMotionEvent(this.grabItem, event)); } return this.root.onMouseUp(event); } onContextMenu(event) { if (this.grabItem != null) { return this.grabItem.onContextMenu(this.toGrabItemMotionEvent(this.grabItem, event)); } return this.root.onContextMenu(event); } onKeyDown(event) { if (this.grabItem != null) { return this.grabItem.onKeyDown(event); } return this.root.onKeyDown(event); } onKeyUp(event) { if (this.grabItem != null) { return this.grabItem.onKeyUp(event); } return this.root.onKeyUp(event); } toGrabItemMotionEvent(item, event) { let se = Object.assign({}, event); se.matrix = new lib_1.SMatrix(); if (this.view) { se.matrix.translate(this.view.origin.x, this.view.origin.y); se.matrix.scale(this.view.scale, this.view.scale); se.matrix.rotate(this.view.rotate); } se.matrix.multiply(item.scene2itemMattrix()); let p = new lib_2.SPoint(event.offsetX, event.offsetY).matrixTransform(se.matrix.inversed()); se.x = p.x; se.y = p.y; return se; } } exports.SGraphScene = SGraphScene;