[gui] fix layouts
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
Reference in New Issue
Block a user