153 lines
3.7 KiB
Haxe
Executable File
153 lines
3.7 KiB
Haxe
Executable File
package haxework.gui;
|
|
|
|
import haxework.gui.core.VAlign;
|
|
import haxework.gui.core.HAlign;
|
|
import haxework.gui.layout.DefaultLayout;
|
|
import haxework.gui.layout.ILayout;
|
|
import flash.display.Sprite;
|
|
|
|
class GroupView extends View implements IGroupView<Sprite> {
|
|
|
|
public var views(default, set):Array<IView<Sprite>>;
|
|
public var layout(default, default):ILayout;
|
|
|
|
public var layoutVAlign(default, set):VAlign;
|
|
public var layoutHAlign(default, set):HAlign;
|
|
public var layoutMargin(default, set):Float;
|
|
|
|
public var leftPadding(default, set):Float;
|
|
public var rightPadding(default, set):Float;
|
|
public var topPadding(default, set):Float;
|
|
public var bottomPadding(default, set):Float;
|
|
public var paddings(null, set):Float;
|
|
|
|
private var viewsById:Map<String, IView<Sprite>>;
|
|
|
|
public function new(?layout:ILayout) {
|
|
super();
|
|
this.layout = layout == null ? new DefaultLayout() : layout;
|
|
paddings = 0;
|
|
layoutMargin = 0;
|
|
layoutHAlign = HAlign.NONE;
|
|
layoutVAlign = VAlign.NONE;
|
|
views = [];
|
|
viewsById = new Map<String, IView<Sprite>>();
|
|
}
|
|
|
|
override public function update():Void {
|
|
layout.place(this, views);
|
|
for (view in views) view.update();
|
|
super.update();
|
|
}
|
|
|
|
public function set_views(value:Array<IView<Sprite>>):Array<IView<Sprite>> {
|
|
if (views == null) views = [];
|
|
for (view in value) addView(view);
|
|
return views;
|
|
}
|
|
|
|
public function addView(view:IView<Sprite>):IView<Sprite> {
|
|
views.push(view);
|
|
viewsById.set(view.id, view);
|
|
content.addChild(view.content);
|
|
view.parent = this;
|
|
return view;
|
|
}
|
|
|
|
public function removeView(view:IView<Sprite>):IView<Sprite> {
|
|
view.parent = null;
|
|
viewsById.remove(view.id);
|
|
views.remove(view);
|
|
content.removeChild(view.content);
|
|
return view;
|
|
}
|
|
|
|
public function removeViewById(id:String):IView<Sprite> {
|
|
if (viewsById.exists(id)) {
|
|
return removeView(viewsById.get(id));
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public function findViewById<V:IView<Dynamic>>(id:String):Null<V> {
|
|
var idd:Array<String> = id.split(":");
|
|
if (idd.length > 1) {
|
|
var id0 = idd.shift();
|
|
if (viewsById.exists(id0)) {
|
|
var g:GroupView = findViewById(id0);
|
|
return g.findViewById(idd.join(":"));
|
|
} else {
|
|
return null;
|
|
}
|
|
} else {
|
|
if (viewsById.exists(id)) {
|
|
return cast viewsById.get(id);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
private function set_layoutVAlign(value:VAlign):VAlign {
|
|
if (layoutVAlign != value) {
|
|
layoutVAlign = value;
|
|
invalidate();
|
|
}
|
|
return layoutVAlign;
|
|
}
|
|
|
|
private function set_layoutHAlign(value:HAlign):HAlign {
|
|
if (layoutHAlign != value) {
|
|
layoutHAlign = value;
|
|
invalidate();
|
|
}
|
|
return layoutHAlign;
|
|
}
|
|
|
|
private function set_layoutMargin(value:Float):Float {
|
|
if (layoutMargin != value) {
|
|
layoutMargin = value;
|
|
invalidate();
|
|
}
|
|
return layoutMargin;
|
|
}
|
|
|
|
private function set_leftPadding(value:Float):Float {
|
|
if (leftPadding != value) {
|
|
leftPadding = value;
|
|
invalidate();
|
|
}
|
|
return leftPadding;
|
|
}
|
|
|
|
private function set_rightPadding(value:Float):Float {
|
|
if (rightPadding != value) {
|
|
rightPadding = value;
|
|
invalidate();
|
|
}
|
|
return rightPadding;
|
|
}
|
|
|
|
private function set_topPadding(value:Float):Float {
|
|
if (topPadding != value) {
|
|
topPadding = value;
|
|
invalidate();
|
|
}
|
|
return topPadding;
|
|
}
|
|
|
|
private function set_bottomPadding(value:Float):Float {
|
|
if (bottomPadding != value) {
|
|
bottomPadding = value;
|
|
invalidate();
|
|
}
|
|
return bottomPadding;
|
|
}
|
|
|
|
private function set_paddings(value:Float):Float {
|
|
leftPadding = rightPadding = topPadding = bottomPadding = value;
|
|
invalidate();
|
|
return value;
|
|
}
|
|
} |