[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 geometry.size.stretch: true
view: view:
id: data id: data
$type: haxework.gui.DataView<Model> $type: haxework.gui.DataView
layout: layout:
$type: haxework.gui.layout.VerticalLayout $type: haxework.gui.layout.VerticalLayout
factory: $this:factory factory: $this:factory

View File

@@ -1,7 +1,7 @@
--- ---
views: views:
- id: list - id: list
$type: haxework.gui.list.VListView<Model> $type: haxework.gui.list.VListView
+onItemSelect: $this:onItemSelect +onItemSelect: $this:onItemSelect
factory: $this:factory factory: $this:factory
geometry.size.stretch: true geometry.size.stretch: true

View File

@@ -4,7 +4,7 @@ views:
geometry.size.stretch: true geometry.size.stretch: true
view: view:
id: data id: data
$type: haxework.gui.DataView<Model> $type: haxework.gui.DataView
layout: layout:
$type: haxework.gui.layout.TailLayout $type: haxework.gui.layout.TailLayout
margin: 2 margin: 2

View File

@@ -9,7 +9,7 @@ view:
skinId: panel skinId: panel
views: views:
- id: colors - id: colors
$type: haxework.gui.DataView<Int> $type: haxework.gui.DataView
geometry.size.stretch: true geometry.size.stretch: true
layout: layout:
$type: haxework.gui.layout.TailLayout $type: haxework.gui.layout.TailLayout

View File

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

View File

@@ -14,15 +14,19 @@ class VerticalLayout extends DefaultLayout {
var maxSize:Float = 0; var maxSize:Float = 0;
for (view in views) { for (view in views) {
setViewWidth(group, view);
placeViewHorizontal(group, view);
switch (view.geometry.height) { switch (view.geometry.height) {
case PERCENT(value): case PERCENT(value):
leftSize -= (view.geometry.margin.vertical); leftSize -= (view.geometry.margin.vertical);
case FIXED(value): case FIXED(value):
fixedSize += (value + view.geometry.margin.vertical); fixedSize += (value + view.geometry.margin.vertical);
} }
setViewWidth(group, view); switch (view.geometry.width) {
placeViewHorizontal(group, view); case FIXED(value):
maxSize = Math.max(maxSize, view.width); maxSize = Math.max(maxSize, value);
case _:
}
} }
group.setContentSize(maxSize, fixedSize, "group"); group.setContentSize(maxSize, fixedSize, "group");