From 7b047e068e2c073a9cca578892189cebd4de3510 Mon Sep 17 00:00:00 2001 From: shmyga Date: Tue, 18 Jun 2019 17:07:41 +0300 Subject: [PATCH] [view] add ButtonGroup; fixes --- src/main/haxework/view/ButtonGroup.hx | 65 +++++++++++++++++++++ src/main/haxework/view/InputView.hx | 3 +- src/main/haxework/view/ToggleButtonView.hx | 1 + src/main/haxework/view/layout/TailLayout.hx | 7 ++- 4 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 src/main/haxework/view/ButtonGroup.hx diff --git a/src/main/haxework/view/ButtonGroup.hx b/src/main/haxework/view/ButtonGroup.hx new file mode 100644 index 0000000..03711a0 --- /dev/null +++ b/src/main/haxework/view/ButtonGroup.hx @@ -0,0 +1,65 @@ +package haxework.view; + +import haxe.EnumTools; +import haxework.view.layout.ILayout; + +class ButtonGroup extends DataView { + + public var selected(default, set):D; + public var buttonSkinId(default, set):String; + + public function new(?layout:ILayout) { + super(layout); + factory = defaultFactory; + onDataSelect.connect(function(value:D) selected = value); + } + + // ToDo: enum equals + private function dataIndex(value:D):Int { + for (i in 0...data.length) { + if (Reflect.isEnumValue(value)) { + if (EnumValueTools.equals(cast value, cast data[i])) { + return i; + } + } else { + if (value == data[i]) { + return i; + } + } + } + return -1; + } + + private function set_selected(value:D):D { + selected = value; + var index = dataIndex(value); + for (i in 0...dataViews.length) { + var view = dataViews[i]; + view.on = i == index; + } + return selected; + } + + private function set_buttonSkinId(value:String):String { + if (buttonSkinId != value) { + buttonSkinId = value; + for (view in dataViews) { + view.skinId = buttonSkinId; + } + } + return buttonSkinId; + } + + override private function rebuild():Void { + super.rebuild(); + for (view in dataViews) { + view.skinId = buttonSkinId; + } + } + + public static function defaultFactory(index:Int, value:D):ToggleButtonView { + var result = new ToggleButtonView(); + result.text = Std.string(value); + return result; + } +} diff --git a/src/main/haxework/view/InputView.hx b/src/main/haxework/view/InputView.hx index ec05ba3..6d4c1e3 100755 --- a/src/main/haxework/view/InputView.hx +++ b/src/main/haxework/view/InputView.hx @@ -52,7 +52,8 @@ class InputView extends TextView { private function _onKeyUp(event:KeyboardEvent):Void { event.stopImmediatePropagation(); - onChange.emit(textField.text); + _text = textField.text; + onChange.emit(_text); } private function onKeyDown(event:KeyboardEvent):Void { diff --git a/src/main/haxework/view/ToggleButtonView.hx b/src/main/haxework/view/ToggleButtonView.hx index c03e8a4..d4685b0 100755 --- a/src/main/haxework/view/ToggleButtonView.hx +++ b/src/main/haxework/view/ToggleButtonView.hx @@ -12,6 +12,7 @@ class ToggleButtonView extends ButtonView { private function set_on(value:Bool):Bool { on = value; + toUpdate(); toRedraw(); return on; } diff --git a/src/main/haxework/view/layout/TailLayout.hx b/src/main/haxework/view/layout/TailLayout.hx index 489c61d..d5fec10 100644 --- a/src/main/haxework/view/layout/TailLayout.hx +++ b/src/main/haxework/view/layout/TailLayout.hx @@ -12,12 +12,15 @@ class TailLayout extends DefaultLayout { public var rowSize:Int = 0; - // ToDo: check group.layoutAlign private function placeRow(group:IGroupView, y:Float, row:Row):Void { var x:Float = (group.width - row.width) / 2; for (v in row.views) { v.x = x; - v.y = y + (row.height - v.height) / 2; + v.y = switch group.layout.vAlign { + case TOP | NONE: y; + case MIDDLE: y + (row.height - v.height) / 2; + case BOTTOM: y + (row.height - v.height); + } x += v.width + margin; } }