[gui] fix layouts
This commit is contained in:
@@ -4,13 +4,13 @@ import flash.display.DisplayObject;
|
||||
import flash.events.MouseEvent;
|
||||
import haxework.signal.Signal;
|
||||
|
||||
typedef Factory<D> = Int -> D -> IView<Dynamic>
|
||||
typedef Factory<D, V:IView<Dynamic>> = Int -> D -> V
|
||||
|
||||
class DataView<D> extends GroupView {
|
||||
class DataView<D, V:IView<Dynamic>> extends GroupView {
|
||||
|
||||
public var data(default, set):Array<D>;
|
||||
public var factory(default, set):Factory<D>;
|
||||
public var onItemSelect(default, null):Signal3<Int, D, IView<Dynamic>> = new Signal3();
|
||||
public var factory(default, set):Factory<D, V>;
|
||||
public var onItemSelect(default, null):Signal3<Int, D, V> = new Signal3();
|
||||
public var onDataSelect(default, null):Signal<D> = new Signal();
|
||||
|
||||
private var objectIndexes:Map<DisplayObject, Int> = new Map();
|
||||
@@ -21,7 +21,7 @@ class DataView<D> extends GroupView {
|
||||
return data;
|
||||
}
|
||||
|
||||
private function set_factory(value:Factory<D>):Factory<D> {
|
||||
private function set_factory(value:Factory<D, V>):Factory<D, V> {
|
||||
factory = value;
|
||||
if (data != null) rebuild();
|
||||
return factory;
|
||||
@@ -32,7 +32,7 @@ class DataView<D> extends GroupView {
|
||||
view.content.removeEventListener(MouseEvent.CLICK, onItemClick);
|
||||
}
|
||||
objectIndexes = new Map();
|
||||
views = Lambda.array(Lambda.mapi(data, factory));
|
||||
views = cast Lambda.array(Lambda.mapi(data, factory));
|
||||
for (i in 0...views.length) {
|
||||
objectIndexes[views[i].content] = i;
|
||||
views[i].content.addEventListener(MouseEvent.CLICK, onItemClick);
|
||||
@@ -42,6 +42,6 @@ class DataView<D> extends GroupView {
|
||||
private function onItemClick(event:MouseEvent):Void {
|
||||
var index = objectIndexes[event.currentTarget];
|
||||
onDataSelect.emit(data[index]);
|
||||
onItemSelect.emit(index, data[index], views[index]);
|
||||
onItemSelect.emit(index, data[index], cast views[index]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,10 +5,6 @@ import haxework.gui.core.HAlign;
|
||||
|
||||
class HorizontalLayout extends DefaultLayout {
|
||||
|
||||
public function new() {
|
||||
super();
|
||||
}
|
||||
|
||||
override public function place(group:IGroupView, views:Array<IView<Dynamic>>):Void {
|
||||
views = filterViews(group, views);
|
||||
|
||||
@@ -18,15 +14,19 @@ class HorizontalLayout extends DefaultLayout {
|
||||
var maxSize:Float = 0;
|
||||
|
||||
for (view in views) {
|
||||
setViewHeight(group, view);
|
||||
placeViewVertical(group, view);
|
||||
switch (view.geometry.width) {
|
||||
case PERCENT(value):
|
||||
leftSize -= (view.geometry.margin.horizontal);
|
||||
case FIXED(value):
|
||||
fixedSize += (value + view.geometry.margin.horizontal);
|
||||
}
|
||||
setViewHeight(group, view);
|
||||
placeViewVertical(group, view);
|
||||
maxSize = Math.max(maxSize, view.height);
|
||||
switch (view.geometry.height) {
|
||||
case FIXED(value):
|
||||
maxSize = Math.max(maxSize, value);
|
||||
case _:
|
||||
}
|
||||
}
|
||||
|
||||
group.setContentSize(fixedSize, maxSize, "group");
|
||||
|
||||
@@ -14,15 +14,19 @@ class VerticalLayout extends DefaultLayout {
|
||||
var maxSize:Float = 0;
|
||||
|
||||
for (view in views) {
|
||||
setViewWidth(group, view);
|
||||
placeViewHorizontal(group, view);
|
||||
switch (view.geometry.height) {
|
||||
case PERCENT(value):
|
||||
leftSize -= (view.geometry.margin.vertical);
|
||||
case FIXED(value):
|
||||
fixedSize += (value + view.geometry.margin.vertical);
|
||||
}
|
||||
setViewWidth(group, view);
|
||||
placeViewHorizontal(group, view);
|
||||
maxSize = Math.max(maxSize, view.width);
|
||||
switch (view.geometry.width) {
|
||||
case FIXED(value):
|
||||
maxSize = Math.max(maxSize, value);
|
||||
case _:
|
||||
}
|
||||
}
|
||||
|
||||
group.setContentSize(maxSize, fixedSize, "group");
|
||||
|
||||
Reference in New Issue
Block a user