Files
haxework/haxework/gui/GroupView.hx
2013-09-11 15:51:22 +02:00

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;
}
}