diff --git a/com/abit/haxework/gui/GroupView.hx b/com/abit/haxework/gui/GroupView.hx new file mode 100755 index 0000000..b041464 --- /dev/null +++ b/com/abit/haxework/gui/GroupView.hx @@ -0,0 +1,49 @@ +package com.abit.haxework.gui; + +import com.abit.haxework.gui.layout.DefaultLayout; +import com.abit.haxework.gui.layout.ILayout; +import flash.display.Sprite; + +class GroupView extends View implements IGroupView { + + public var layout(default, default):ILayout; + public var views(default, null):Array>; + private var viewsById:Map>; + + public function new(?layout:ILayout) { + super(); + this.layout = layout == null ? new DefaultLayout() : layout; + views = []; + viewsById = new Map>(); + } + + override public function update():Void { + layout.place(this, views); + for (view in views) view.update(); + super.update(); + } + + public function addView(view:IView):IView { + views.push(view); + viewsById.set(view.id, view); + content.addChild(view.content); + view.parent = this; + return view; + } + + public function removeView(view:IView):IView { + view.parent = null; + viewsById.remove(view.id); + views.remove(view); + content.removeChild(view.content); + return view; + } + + public function removeViewById(id:String):IView { + if (viewsById.exists(id)) { + return removeView(viewsById.get(id)); + } else { + return null; + } + } +} \ No newline at end of file diff --git a/com/abit/haxework/gui/IGroupView.hx b/com/abit/haxework/gui/IGroupView.hx new file mode 100755 index 0000000..30cae5a --- /dev/null +++ b/com/abit/haxework/gui/IGroupView.hx @@ -0,0 +1,13 @@ +package com.abit.haxework.gui; + +import com.abit.haxework.gui.layout.ILayout; + +interface IGroupView extends IView { + + public var views(default, null):Array>; + public var layout(default, default):ILayout; + + public function addView(view:IView):IView; + public function removeView(view:IView):IView; + public function removeViewById(id:String):IView; +} \ No newline at end of file diff --git a/com/abit/haxework/gui/IView.hx b/com/abit/haxework/gui/IView.hx index 77d6463..658dd4e 100755 --- a/com/abit/haxework/gui/IView.hx +++ b/com/abit/haxework/gui/IView.hx @@ -15,5 +15,7 @@ interface IView { public var content(default, null):C; public var skin(default, set):ISkin>; + public var parent(default, null):Null>; + public function update():Void; } \ No newline at end of file diff --git a/com/abit/haxework/gui/View.hx b/com/abit/haxework/gui/View.hx index b759f40..85e6a52 100755 --- a/com/abit/haxework/gui/View.hx +++ b/com/abit/haxework/gui/View.hx @@ -24,6 +24,8 @@ class View implements IView { public var content(default, null):Sprite; public var skin(default, set):ISkin>; + public var parent(default, null):Null>; + public function new() { id = Type.getClassName(Type.getClass(this)) + counter++; content = new Sprite(); diff --git a/com/abit/haxework/gui/layout/DefaultLayout.hx b/com/abit/haxework/gui/layout/DefaultLayout.hx new file mode 100755 index 0000000..f055be8 --- /dev/null +++ b/com/abit/haxework/gui/layout/DefaultLayout.hx @@ -0,0 +1,12 @@ +package com.abit.haxework.gui.layout; + +class DefaultLayout implements ILayout { + + public function new() { + + } + + public function place(group:IGroupView, views:Array>):Void { + + } +} \ No newline at end of file diff --git a/com/abit/haxework/gui/layout/ILayout.hx b/com/abit/haxework/gui/layout/ILayout.hx new file mode 100755 index 0000000..e8d34c7 --- /dev/null +++ b/com/abit/haxework/gui/layout/ILayout.hx @@ -0,0 +1,5 @@ +package com.abit.haxework.gui.layout; + +interface ILayout { + public function place(group:IGroupView, views:Array>):Void; +} \ No newline at end of file