From c46a0a4b76f09355608669c8eb050c238e87880e Mon Sep 17 00:00:00 2001 From: shmyga Date: Thu, 30 Jan 2014 12:02:14 +0400 Subject: [PATCH] fix --- haxework/gui/ButtonView.hx | 14 +++++++------- haxework/gui/list/ListView.hx | 32 +++++++++++++++++++++++-------- haxework/net/callback/Callback.hx | 1 + haxework/utils/NumberUtil.hx | 4 ++-- 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/haxework/gui/ButtonView.hx b/haxework/gui/ButtonView.hx index 83d13ca..b92b1f7 100755 --- a/haxework/gui/ButtonView.hx +++ b/haxework/gui/ButtonView.hx @@ -13,8 +13,8 @@ enum ButtonState { class ButtonView extends LabelView { public var state(get, null):ButtonState; - public var dispatcher(default, null):IDispatcher; - public var onPress(null, set):ButtonViewListener; + public var dispatcher(default, null):IDispatcher>; + public var onPress(null, set):ButtonViewListener; 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(); + dispatcher = new Dispatcher>(); 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):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):ButtonViewListener { dispatcher.addListener(value); return value; } @@ -83,6 +83,6 @@ class ButtonView extends LabelView { } } -typedef ButtonViewListener = { - public function onPress(view:ButtonView):Void; +typedef ButtonViewListener = { + public function onPress(view:V):Void; } \ No newline at end of file diff --git a/haxework/gui/list/ListView.hx b/haxework/gui/list/ListView.hx index c2c0ac6..2f3adf0 100755 --- a/haxework/gui/list/ListView.hx +++ b/haxework/gui/list/ListView.hx @@ -26,6 +26,9 @@ class ListView, D> extends GroupView implements ScrollListener { public var dispatcher(default, null):IDispatcher>; public var scroll(default, set):ScrollView; + public var filter(default, set):D->Bool; + private var filteredData:Array; + private var container:GroupView; private var mask:SpriteView; private var itemSize:Float; @@ -71,7 +74,7 @@ class ListView, 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, 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, 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):IRenderer { 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 = 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); + } } } } diff --git a/haxework/net/callback/Callback.hx b/haxework/net/callback/Callback.hx index adab018..7af9a76 100755 --- a/haxework/net/callback/Callback.hx +++ b/haxework/net/callback/Callback.hx @@ -56,6 +56,7 @@ class Callback implements ICallback { public function glue(callback:ICallback):ICallback { this._success = callback.callSuccess; this._fail = callback.callFail; + callback.dispose(); return this; } diff --git a/haxework/utils/NumberUtil.hx b/haxework/utils/NumberUtil.hx index c19e618..87137ea 100755 --- a/haxework/utils/NumberUtil.hx +++ b/haxework/utils/NumberUtil.hx @@ -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); } } \ No newline at end of file