[gui] fix layouts

This commit is contained in:
2019-03-13 13:06:23 +03:00
parent 301360df31
commit 80c200f5f7
7 changed files with 25 additions and 21 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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");

View File

@@ -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");