From 2447334936ba3dc7e5a3a2482a2ce435a305685e Mon Sep 17 00:00:00 2001 From: shmyga Date: Mon, 12 Aug 2013 16:08:01 +0200 Subject: [PATCH] added view group --- com/abit/haxework/gui/GroupView.hx | 49 +++++++++++++++++++ com/abit/haxework/gui/IGroupView.hx | 13 +++++ com/abit/haxework/gui/IView.hx | 2 + com/abit/haxework/gui/View.hx | 2 + com/abit/haxework/gui/layout/DefaultLayout.hx | 12 +++++ com/abit/haxework/gui/layout/ILayout.hx | 5 ++ 6 files changed, 83 insertions(+) create mode 100755 com/abit/haxework/gui/GroupView.hx create mode 100755 com/abit/haxework/gui/IGroupView.hx create mode 100755 com/abit/haxework/gui/layout/DefaultLayout.hx create mode 100755 com/abit/haxework/gui/layout/ILayout.hx 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