[view] add ButtonGroup; fixes
This commit is contained in:
65
src/main/haxework/view/ButtonGroup.hx
Normal file
65
src/main/haxework/view/ButtonGroup.hx
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -52,7 +52,8 @@ class InputView extends TextView {
|
|||||||
|
|
||||||
private function _onKeyUp(event:KeyboardEvent):Void {
|
private function _onKeyUp(event:KeyboardEvent):Void {
|
||||||
event.stopImmediatePropagation();
|
event.stopImmediatePropagation();
|
||||||
onChange.emit(textField.text);
|
_text = textField.text;
|
||||||
|
onChange.emit(_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function onKeyDown(event:KeyboardEvent):Void {
|
private function onKeyDown(event:KeyboardEvent):Void {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ class ToggleButtonView extends ButtonView {
|
|||||||
|
|
||||||
private function set_on(value:Bool):Bool {
|
private function set_on(value:Bool):Bool {
|
||||||
on = value;
|
on = value;
|
||||||
|
toUpdate();
|
||||||
toRedraw();
|
toRedraw();
|
||||||
return on;
|
return on;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,12 +12,15 @@ class TailLayout extends DefaultLayout {
|
|||||||
|
|
||||||
public var rowSize:Int = 0;
|
public var rowSize:Int = 0;
|
||||||
|
|
||||||
// ToDo: check group.layoutAlign
|
|
||||||
private function placeRow(group:IGroupView, y:Float, row:Row):Void {
|
private function placeRow(group:IGroupView, y:Float, row:Row):Void {
|
||||||
var x:Float = (group.width - row.width) / 2;
|
var x:Float = (group.width - row.width) / 2;
|
||||||
for (v in row.views) {
|
for (v in row.views) {
|
||||||
v.x = x;
|
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;
|
x += v.width + margin;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user