fix
This commit is contained in:
@@ -13,8 +13,8 @@ enum ButtonState {
|
||||
class ButtonView extends LabelView {
|
||||
|
||||
public var state(get, null):ButtonState;
|
||||
public var dispatcher(default, null):IDispatcher<ButtonViewListener>;
|
||||
public var onPress(null, set):ButtonViewListener;
|
||||
public var dispatcher(default, null):IDispatcher<ButtonViewListener<Dynamic>>;
|
||||
public var onPress(null, set):ButtonViewListener<Dynamic>;
|
||||
|
||||
private var overed:Bool;
|
||||
private var downed:Bool;
|
||||
@@ -24,7 +24,7 @@ class ButtonView extends LabelView {
|
||||
overed = false;
|
||||
downed = false;
|
||||
state = ButtonState.UP;
|
||||
dispatcher = new Dispatcher<ButtonViewListener>();
|
||||
dispatcher = new Dispatcher<ButtonViewListener<Dynamic>>();
|
||||
content.buttonMode = true;
|
||||
content.mouseChildren = false;
|
||||
content.addEventListener(MouseEvent.CLICK, onMouseClick);
|
||||
@@ -61,7 +61,7 @@ class ButtonView extends LabelView {
|
||||
invalidate();
|
||||
}
|
||||
|
||||
private function pressCaller(listener:ButtonViewListener):Void {
|
||||
private function pressCaller(listener:ButtonViewListener<Dynamic>):Void {
|
||||
listener.onPress(this);
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ class ButtonView extends LabelView {
|
||||
return (downed && overed) ? ButtonState.DOWN : overed ? ButtonState.OVER : ButtonState.UP;
|
||||
}
|
||||
|
||||
private function set_onPress(value:ButtonViewListener):ButtonViewListener {
|
||||
private function set_onPress(value:ButtonViewListener<Dynamic>):ButtonViewListener<Dynamic> {
|
||||
dispatcher.addListener(value);
|
||||
return value;
|
||||
}
|
||||
@@ -83,6 +83,6 @@ class ButtonView extends LabelView {
|
||||
}
|
||||
}
|
||||
|
||||
typedef ButtonViewListener = {
|
||||
public function onPress(view:ButtonView):Void;
|
||||
typedef ButtonViewListener<V:ButtonView> = {
|
||||
public function onPress(view:V):Void;
|
||||
}
|
||||
@@ -26,6 +26,9 @@ class ListView<V:View<Dynamic>, D> extends GroupView implements ScrollListener {
|
||||
public var dispatcher(default, null):IDispatcher<ListViewListener<V, D>>;
|
||||
public var scroll(default, set):ScrollView;
|
||||
|
||||
public var filter(default, set):D->Bool;
|
||||
private var filteredData:Array<D>;
|
||||
|
||||
private var container:GroupView;
|
||||
private var mask:SpriteView;
|
||||
private var itemSize:Float;
|
||||
@@ -71,7 +74,7 @@ class ListView<V:View<Dynamic>, D> extends GroupView implements ScrollListener {
|
||||
}
|
||||
|
||||
public function onScroll(position:Float):Void {
|
||||
var x:Float = data.length * position;
|
||||
var x:Float = filteredData.length * position;
|
||||
offset = Math.round(x) - 1;
|
||||
offsetDiff = (x - offset);
|
||||
}
|
||||
@@ -85,7 +88,7 @@ class ListView<V:View<Dynamic>, D> extends GroupView implements ScrollListener {
|
||||
private function onMouseWheel(value:Int):Void {}
|
||||
|
||||
private function set_offset(value:Int):Int {
|
||||
value = NumberUtil.limitInt(value, 0, data == null ? 0 : data.length - size);
|
||||
value = NumberUtil.limitInt(value, 0, filteredData == null ? 0 : filteredData.length - size);
|
||||
if (offset != value) {
|
||||
offset = value;
|
||||
render();
|
||||
@@ -99,22 +102,35 @@ class ListView<V:View<Dynamic>, D> extends GroupView implements ScrollListener {
|
||||
return data;
|
||||
}
|
||||
|
||||
private function set_filter(value:D->Bool):D->Bool {
|
||||
if (filter != value) {
|
||||
filter = value;
|
||||
render();
|
||||
}
|
||||
return filter;
|
||||
}
|
||||
|
||||
private function set_renderer(value:IRenderer<Dynamic, V, D>):IRenderer<Dynamic, V, D> {
|
||||
renderer = value;
|
||||
render();
|
||||
return renderer;
|
||||
}
|
||||
|
||||
private function render():Void {
|
||||
public function render():Void {
|
||||
if (data != null && renderer != null) {
|
||||
scroll.ratio = Math.min(1.0, (size - sizeDiff) / data.length);
|
||||
scroll.position = (offset / data.length);
|
||||
filteredData = filter == null ? data : data.filter(filter);
|
||||
scroll.ratio = Math.min(1.0, (size - sizeDiff) / filteredData.length);
|
||||
scroll.position = (offset / filteredData.length);
|
||||
for (i in 0...size) {
|
||||
var item:ListItem<V, D> = items[i];
|
||||
item.index = offset + i;
|
||||
if (data[item.index] == null) break;
|
||||
item.data = data[item.index];
|
||||
renderer.render(this, item);
|
||||
if (filteredData[item.index] == null) {
|
||||
item.view.visible = false;
|
||||
} else {
|
||||
item.view.visible = true;
|
||||
item.data = filteredData[item.index];
|
||||
renderer.render(this, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,6 +56,7 @@ class Callback<T> implements ICallback<T> {
|
||||
public function glue(callback:ICallback<T>):ICallback<T> {
|
||||
this._success = callback.callSuccess;
|
||||
this._fail = callback.callFail;
|
||||
callback.dispose();
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,10 +3,10 @@ package haxework.utils;
|
||||
class NumberUtil {
|
||||
|
||||
public static inline function limitInt(value:Int, min:Int, max:Int):Int {
|
||||
return Math.round(Math.min(Math.max(min, value), max));
|
||||
return Math.round(Math.max(Math.min(max, value), min));
|
||||
}
|
||||
|
||||
public static inline function limitFloat(value:Float, min:Float, max:Float):Float {
|
||||
return Math.min(Math.max(min, value), max);
|
||||
return Math.max(Math.min(max, value), min);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user