From 2a13c2057045ab0b18ddff5285d25d2c85399ccf Mon Sep 17 00:00:00 2001 From: shmyga Date: Wed, 14 Aug 2013 11:11:07 +0200 Subject: [PATCH] Added fields to view --- com/abit/haxework/gui/GroupView.hx | 77 ++++++++++++++- com/abit/haxework/gui/IGroupView.hx | 12 +++ com/abit/haxework/gui/IView.hx | 17 ++++ com/abit/haxework/gui/View.hx | 132 ++++++++++++++++++++++--- com/abit/haxework/gui/core/HAlign.hx | 7 ++ com/abit/haxework/gui/core/SizeType.hx | 6 ++ com/abit/haxework/gui/core/VAlign.hx | 7 ++ 7 files changed, 245 insertions(+), 13 deletions(-) create mode 100755 com/abit/haxework/gui/core/HAlign.hx create mode 100755 com/abit/haxework/gui/core/SizeType.hx create mode 100755 com/abit/haxework/gui/core/VAlign.hx diff --git a/com/abit/haxework/gui/GroupView.hx b/com/abit/haxework/gui/GroupView.hx index b041464..162caa3 100755 --- a/com/abit/haxework/gui/GroupView.hx +++ b/com/abit/haxework/gui/GroupView.hx @@ -1,13 +1,26 @@ package com.abit.haxework.gui; +import com.abit.haxework.gui.core.VAlign; +import com.abit.haxework.gui.core.HAlign; 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>; + 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>; public function new(?layout:ILayout) { @@ -46,4 +59,66 @@ class GroupView extends View implements IGroupView { 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; + } } \ No newline at end of file diff --git a/com/abit/haxework/gui/IGroupView.hx b/com/abit/haxework/gui/IGroupView.hx index 30cae5a..f7a55e6 100755 --- a/com/abit/haxework/gui/IGroupView.hx +++ b/com/abit/haxework/gui/IGroupView.hx @@ -1,5 +1,7 @@ package com.abit.haxework.gui; +import com.abit.haxework.gui.core.HAlign; +import com.abit.haxework.gui.core.VAlign; import com.abit.haxework.gui.layout.ILayout; interface IGroupView extends IView { @@ -7,6 +9,16 @@ interface IGroupView extends IView { public var views(default, null):Array>; 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; + public function addView(view:IView):IView; public function removeView(view:IView):IView; public function removeViewById(id:String):IView; diff --git a/com/abit/haxework/gui/IView.hx b/com/abit/haxework/gui/IView.hx index 658dd4e..61f898c 100755 --- a/com/abit/haxework/gui/IView.hx +++ b/com/abit/haxework/gui/IView.hx @@ -1,17 +1,34 @@ package com.abit.haxework.gui; +import com.abit.haxework.gui.core.VAlign; +import com.abit.haxework.gui.core.HAlign; import com.abit.haxework.gui.skin.ISkin; +import com.abit.haxework.gui.core.SizeType; interface IView { public var id(default, null):String; public var x(default, set):Float; public var y(default, set):Float; + + public var widthType(default, null):SizeType; + public var heightType(default, null):SizeType; + public var width(default, set):Float; public var height(default, set):Float; + public var pWidth(default, set):Float; public var pHeight(default, set):Float; + public var hAlign(default, set):HAlign; + public var vAlign(default, set):VAlign; + + public var leftMargin(default, set):Float; + public var rightMargin(default, set):Float; + public var topMargin(default, set):Float; + public var bottomMargin(default, set):Float; + public var margins(null, set):Float; + public var content(default, null):C; public var skin(default, set):ISkin>; diff --git a/com/abit/haxework/gui/View.hx b/com/abit/haxework/gui/View.hx index 85e6a52..da588b4 100755 --- a/com/abit/haxework/gui/View.hx +++ b/com/abit/haxework/gui/View.hx @@ -1,5 +1,8 @@ package com.abit.haxework.gui; +import com.abit.haxework.gui.core.SizeType; +import com.abit.haxework.gui.core.HAlign; +import com.abit.haxework.gui.core.VAlign; import flash.events.Event; import flash.display.Stage; import com.abit.haxework.gui.skin.FakeSkin; @@ -16,11 +19,25 @@ class View implements IView { public var x(default, set):Float; public var y(default, set):Float; + + public var widthType(default, null):SizeType; + public var heightType(default, null):SizeType; + public var width(default, set):Float; public var height(default, set):Float; + public var pWidth(default, set):Float; public var pHeight(default, set):Float; + public var hAlign(default, set):HAlign; + public var vAlign(default, set):VAlign; + + public var leftMargin(default, set):Float; + public var rightMargin(default, set):Float; + public var topMargin(default, set):Float; + public var bottomMargin(default, set):Float; + public var margins(null, set):Float; + public var content(default, null):Sprite; public var skin(default, set):ISkin>; @@ -32,12 +49,22 @@ class View implements IView { skin = new FakeSkin(); x = 0; y = 0; + width = 100; + height = 100; + margins = 0; + vAlign = VAlign.CENTER; + hAlign = HAlign.MIDDLE; } private function invalidate():Void { updater.invalidate(this); } + private function invalidateParent():Void { + if (parent != null) + updater.invalidate(parent); + } + public function update():Void { content.x = x; content.y = y; @@ -45,40 +72,121 @@ class View implements IView { } private function set_x(value:Float):Float { - x = value; - invalidate(); + if (x != value) { + x = value; + invalidate(); + } return x; } private function set_y(value:Float):Float { - y = value; - invalidate(); + if (y != value) { + y = value; + invalidate(); + } return y; } private function set_width(value:Float):Float { - width = value; - invalidate(); + if (width != value || widthType != SizeType.NORMAL) { + width = value; + widthType = SizeType.NORMAL; + invalidate(); + invalidateParent(); + } return width; } private function set_height(value:Float):Float { - height = value; - invalidate(); + if (height != value || heightType != SizeType.NORMAL) { + height = value; + heightType = SizeType.NORMAL; + invalidate(); + invalidateParent(); + } return height; } private function set_pWidth(value:Float):Float { - pWidth = value; - invalidate(); + if (pWidth != value || widthType != SizeType.PERCENT) { + pWidth = value; + widthType = SizeType.PERCENT; + invalidate(); + invalidateParent(); + } return pWidth; } private function set_pHeight(value:Float):Float { - pHeight = value; - invalidate(); + if (pHeight != value || heightType != SizeType.PERCENT) { + pHeight = value; + heightType = SizeType.PERCENT; + invalidate(); + invalidateParent(); + } return pHeight; } + private function set_hAlign(value:HAlign):HAlign { + if (hAlign != value) { + hAlign = value; + invalidate(); + invalidateParent(); + } + return hAlign; + } + + private function set_vAlign(value:VAlign):VAlign { + if (vAlign != value) { + vAlign = value; + invalidate(); + invalidateParent(); + } + return vAlign; + } + + private function set_leftMargin(value:Float):Float { + if (leftMargin != value) { + leftMargin = value; + invalidate(); + invalidateParent(); + } + return leftMargin; + } + + private function set_rightMargin(value:Float):Float { + if (rightMargin != value) { + rightMargin = value; + invalidate(); + invalidateParent(); + } + return rightMargin; + } + + private function set_topMargin(value:Float):Float { + if (topMargin != value) { + topMargin = value; + invalidate(); + invalidateParent(); + } + return topMargin; + } + + private function set_bottomMargin(value:Float):Float { + if (bottomMargin != value) { + bottomMargin = value; + invalidate(); + invalidateParent(); + } + return bottomMargin; + } + + private function set_margins(value:Float):Float { + leftMargin = rightMargin = topMargin = bottomMargin = value; + invalidate(); + invalidateParent(); + return value; + } + private function set_skin(value:ISkin>):ISkin> { skin = value; invalidate(); diff --git a/com/abit/haxework/gui/core/HAlign.hx b/com/abit/haxework/gui/core/HAlign.hx new file mode 100755 index 0000000..709b5cb --- /dev/null +++ b/com/abit/haxework/gui/core/HAlign.hx @@ -0,0 +1,7 @@ +package com.abit.haxework.gui.core; + +enum HAlign { + TOP; + MIDDLE; + BOTTOM; +} \ No newline at end of file diff --git a/com/abit/haxework/gui/core/SizeType.hx b/com/abit/haxework/gui/core/SizeType.hx new file mode 100755 index 0000000..8a44f0b --- /dev/null +++ b/com/abit/haxework/gui/core/SizeType.hx @@ -0,0 +1,6 @@ +package com.abit.haxework.gui.core; + +enum SizeType { + NORMAL; + PERCENT; +} \ No newline at end of file diff --git a/com/abit/haxework/gui/core/VAlign.hx b/com/abit/haxework/gui/core/VAlign.hx new file mode 100755 index 0000000..59beefa --- /dev/null +++ b/com/abit/haxework/gui/core/VAlign.hx @@ -0,0 +1,7 @@ +package com.abit.haxework.gui.core; + +enum VAlign { + LEFT; + CENTER; + RIGHT; +} \ No newline at end of file