package { import flash.geom.Rectangle; public class RectangleNode { public var Left:RectangleNode = null; public var Right:RectangleNode = null; public var Rect:Rectangle = null; public var InUse:Boolean = false; public var Removed:Boolean = false; public var Parent:RectangleNode = null; public var AllocationID = 0; public var Host:RectanglePacker= null; public var MinAllocationID = 0; public var NodeID; public static var NextNodeID = 0; public var DontRemove = false; public var LastAccessTime = 0; public var Flags = []; public var UpdateTo:RectangleNode = null; /* public function get Removed() { return _Removed; } public function set Removed(r) { this._Removed = r; } public function get Host():RectanglePacker { return _Host; } public function set Host(p:RectanglePacker) { this._Host = p; if (_Left && _Left.Host != p) { throw new Error("bad left host"); } if (_Right && _Right.Host != p) { throw new Error("bad right host"); } if (_Parent && _Parent.Host != p) { throw new Error("bad parent host"); } } public function get Left():RectangleNode { return _Left; } public function set Left(n:RectangleNode) { if (n && n.Host != Host) { throw new Error("bad left host"); } _Left = n; } public function get Right():RectangleNode { return _Right; } public function set Right(n:RectangleNode) { if (n && n.Host != Host) { throw new Error("bad right host"); } _Right = n; } public function get Parent():RectangleNode { return _Parent; } public function set Parent(n:RectangleNode) { if (n && n.Host != Host) { throw new Error("bad parent host"); } _Parent = n; } */ public function get IsFreeSpace() { return Left == null && Right == null && !InUse; } public function UpdateLinksFromNode(node:RectangleNode) { if (node.Parent) { if (node.Parent.Left == node) { node.Parent.Left = this; } if (node.Parent.Right == node) { node.Parent.Right = this; } } if (node.Left) { node.Left.Parent = this; } if (node.Right) { node.Right.Parent = this; } } public function MakeFromNode(node:RectangleNode) { //_Host = node.Host; Host = node.Host; Left = node.Left; Right = node.Right; Parent = node.Parent; AllocationID = node.AllocationID; InUse = node.InUse; MinAllocationID = node.MinAllocationID; NodeID = node.NodeID; Rect = node.Rect.clone(); Removed = node.Removed; DontRemove = node.DontRemove; } public function RectangleNode(x, y, w, h, host:RectanglePacker) { this.NodeID = NextNodeID++; this.Host = host; this.Rect = new Rectangle(x, y, w, h); } public function OutputJSON() { var node = {}; node.rect = [this.Rect.left, this.Rect.top, this.Rect.width, this.Rect.height]; node.in_use = InUse; node.id = NodeID; if (this.Left) node.left = this.Left.OutputJSON(); if (this.Right) node.right = this.Right.OutputJSON(); return node; } public function ReadJSON(details) { details.new_node = this; this.Rect = new Rectangle(details.rect[0], details.rect[1], details.rect[2], details.rect[3]); this.Removed = false; this.InUse = details.in_use; if (details.hasOwnProperty("right")) { this.Right = new RectangleNode(0, 0, 0, 0, this.Host); Right.ReadJSON(details.right); Right.Parent = this; } if (details.hasOwnProperty("left")) { this.Left = new RectangleNode(0, 0, 0, 0, this.Host); Left.ReadJSON(details.left); Left.Parent = this; } } } }