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