From 80c200f5f79c995f03466e68b6f55a8b6337d959 Mon Sep 17 00:00:00 2001 From: shmyga Date: Wed, 13 Mar 2019 13:06:23 +0300 Subject: [PATCH] [gui] fix layouts --- demo/src/demo/form/DataForm.yaml | 2 +- demo/src/demo/form/ListForm.yaml | 2 +- demo/src/demo/form/TailForm.yaml | 2 +- demo/src/demo/popup/ColorPopup.yaml | 2 +- src/main/haxework/gui/DataView.hx | 14 +++++++------- src/main/haxework/gui/layout/HorizontalLayout.hx | 14 +++++++------- src/main/haxework/gui/layout/VerticalLayout.hx | 10 +++++++--- 7 files changed, 25 insertions(+), 21 deletions(-) diff --git a/demo/src/demo/form/DataForm.yaml b/demo/src/demo/form/DataForm.yaml index e9a10a1..75c9c84 100644 --- a/demo/src/demo/form/DataForm.yaml +++ b/demo/src/demo/form/DataForm.yaml @@ -4,7 +4,7 @@ views: geometry.size.stretch: true view: id: data - $type: haxework.gui.DataView + $type: haxework.gui.DataView layout: $type: haxework.gui.layout.VerticalLayout factory: $this:factory diff --git a/demo/src/demo/form/ListForm.yaml b/demo/src/demo/form/ListForm.yaml index 139426d..8988fec 100644 --- a/demo/src/demo/form/ListForm.yaml +++ b/demo/src/demo/form/ListForm.yaml @@ -1,7 +1,7 @@ --- views: - id: list - $type: haxework.gui.list.VListView + $type: haxework.gui.list.VListView +onItemSelect: $this:onItemSelect factory: $this:factory geometry.size.stretch: true diff --git a/demo/src/demo/form/TailForm.yaml b/demo/src/demo/form/TailForm.yaml index 7cd0b95..58cc068 100644 --- a/demo/src/demo/form/TailForm.yaml +++ b/demo/src/demo/form/TailForm.yaml @@ -4,7 +4,7 @@ views: geometry.size.stretch: true view: id: data - $type: haxework.gui.DataView + $type: haxework.gui.DataView layout: $type: haxework.gui.layout.TailLayout margin: 2 diff --git a/demo/src/demo/popup/ColorPopup.yaml b/demo/src/demo/popup/ColorPopup.yaml index 4763ec6..97a416e 100644 --- a/demo/src/demo/popup/ColorPopup.yaml +++ b/demo/src/demo/popup/ColorPopup.yaml @@ -9,7 +9,7 @@ view: skinId: panel views: - id: colors - $type: haxework.gui.DataView + $type: haxework.gui.DataView geometry.size.stretch: true layout: $type: haxework.gui.layout.TailLayout diff --git a/src/main/haxework/gui/DataView.hx b/src/main/haxework/gui/DataView.hx index 37c758e..05e29a3 100644 --- a/src/main/haxework/gui/DataView.hx +++ b/src/main/haxework/gui/DataView.hx @@ -4,13 +4,13 @@ import flash.display.DisplayObject; import flash.events.MouseEvent; import haxework.signal.Signal; -typedef Factory = Int -> D -> IView +typedef Factory> = Int -> D -> V -class DataView extends GroupView { +class DataView> extends GroupView { public var data(default, set):Array; - public var factory(default, set):Factory; - public var onItemSelect(default, null):Signal3> = new Signal3(); + public var factory(default, set):Factory; + public var onItemSelect(default, null):Signal3 = new Signal3(); public var onDataSelect(default, null):Signal = new Signal(); private var objectIndexes:Map = new Map(); @@ -21,7 +21,7 @@ class DataView extends GroupView { return data; } - private function set_factory(value:Factory):Factory { + private function set_factory(value:Factory):Factory { factory = value; if (data != null) rebuild(); return factory; @@ -32,7 +32,7 @@ class DataView 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 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]); } } diff --git a/src/main/haxework/gui/layout/HorizontalLayout.hx b/src/main/haxework/gui/layout/HorizontalLayout.hx index d47e8a3..c76bcc6 100755 --- a/src/main/haxework/gui/layout/HorizontalLayout.hx +++ b/src/main/haxework/gui/layout/HorizontalLayout.hx @@ -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>):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"); diff --git a/src/main/haxework/gui/layout/VerticalLayout.hx b/src/main/haxework/gui/layout/VerticalLayout.hx index e1ff373..e34e52c 100755 --- a/src/main/haxework/gui/layout/VerticalLayout.hx +++ b/src/main/haxework/gui/layout/VerticalLayout.hx @@ -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");