[gui] fix layouts
This commit is contained in:
@@ -4,7 +4,7 @@ views:
|
||||
geometry.size.stretch: true
|
||||
view:
|
||||
id: data
|
||||
$type: haxework.gui.DataView<Model>
|
||||
$type: haxework.gui.DataView
|
||||
layout:
|
||||
$type: haxework.gui.layout.VerticalLayout
|
||||
factory: $this:factory
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
views:
|
||||
- id: list
|
||||
$type: haxework.gui.list.VListView<Model>
|
||||
$type: haxework.gui.list.VListView
|
||||
+onItemSelect: $this:onItemSelect
|
||||
factory: $this:factory
|
||||
geometry.size.stretch: true
|
||||
|
||||
@@ -4,7 +4,7 @@ views:
|
||||
geometry.size.stretch: true
|
||||
view:
|
||||
id: data
|
||||
$type: haxework.gui.DataView<Model>
|
||||
$type: haxework.gui.DataView
|
||||
layout:
|
||||
$type: haxework.gui.layout.TailLayout
|
||||
margin: 2
|
||||
|
||||
@@ -9,7 +9,7 @@ view:
|
||||
skinId: panel
|
||||
views:
|
||||
- id: colors
|
||||
$type: haxework.gui.DataView<Int>
|
||||
$type: haxework.gui.DataView
|
||||
geometry.size.stretch: true
|
||||
layout:
|
||||
$type: haxework.gui.layout.TailLayout
|
||||
|
||||
@@ -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