[view] add ButtonGroup; fixes

This commit is contained in:
2019-06-18 17:07:41 +03:00
parent 400d91ef6e
commit 7b047e068e
4 changed files with 73 additions and 3 deletions

View File

@@ -0,0 +1,65 @@
package haxework.view;
import haxe.EnumTools;
import haxework.view.layout.ILayout;
class ButtonGroup<D> extends DataView<D, ToggleButtonView> {
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<D>(index:Int, value:D):ToggleButtonView {
var result = new ToggleButtonView();
result.text = Std.string(value);
return result;
}
}

View File

@@ -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 {

View File

@@ -12,6 +12,7 @@ class ToggleButtonView extends ButtonView {
private function set_on(value:Bool):Bool {
on = value;
toUpdate();
toRedraw();
return on;
}

View File

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