This commit is contained in:
2017-07-11 14:14:59 +03:00
parent 6e7da7c348
commit ff1233b28e
10 changed files with 64 additions and 47 deletions

View File

@@ -4,8 +4,8 @@
"license": "BSD",
"tags": ["flash"],
"description": "Framework.",
"version": "0.3.0",
"releasenote": "Use promhx library.",
"version": "0.6.0",
"releasenote": "Update.",
"contributors": ["shmyga"],
"classPath": "src/main",
"dependencies": {

View File

@@ -52,6 +52,7 @@ class GroupView extends SpriteView implements IGroupView {
}
public function set_views(value:Array<IView>):Array<IView> {
removeAllViews();
if (views == null) views = [];
for (view in value) addView(view);
return views;
@@ -95,7 +96,7 @@ class GroupView extends SpriteView implements IGroupView {
}
public function removeAllViews():Void {
while (views.length > 0) {
if (views != null) while (views.length > 0) {
removeView(views[0]);
}
}

View File

@@ -9,7 +9,7 @@ import haxework.gui.layout.ILayout;
interface IGroupView extends IView extends HasPaddings {
public var container(get, null):DisplayObjectContainer;
public var views(default, null):Array<IView>;
public var views(default, set):Array<IView>;
public var layout(default, default):ILayout;
public var layoutVAlign(default, set):VAlign;

View File

@@ -11,14 +11,17 @@ class ImageView extends SpriteView {
public var image(default, set):BitmapData;
public var imageUrl(default, set):String;
public function new() {
public function new(?image:BitmapData) {
super();
if (image != null) {
this.image = image;
}
}
private function set_image(value:BitmapData):BitmapData {
if (image != value) {
image = value;
skin = untyped new BitmapSkin(image, FillType.CONTAIN);
skin = cast new BitmapSkin(image, FillType.CONTAIN);
invalidate();
}
return image;

View File

@@ -1,6 +1,9 @@
package haxework.net;
import flash.utils.JSON;
import promhx.Deferred;
import promhx.Promise;
//import flash.utils.JSON;
import haxe.Json;
import haxe.Timer;
import flash.net.URLRequestMethod;
import flash.events.ProgressEvent;
@@ -8,7 +11,6 @@ import haxework.net.manage.ILoaderManager;
import haxework.provider.Provider;
import flash.utils.ByteArray;
import flash.events.Event;
import promhx.Deferred;
class BaseLoader<T> extends Deferred<T> implements ILoader<T> {
@@ -37,7 +39,7 @@ class BaseLoader<T> extends Deferred<T> implements ILoader<T> {
completed = Math.NaN;
}
public function request(url:String, method:String, data:Dynamic = null):Deferred<T> {
public function request(url:String, method:String, data:Dynamic = null):Promise<T> {
if (busy) {
throwError("Busy");
} else {
@@ -50,7 +52,7 @@ class BaseLoader<T> extends Deferred<T> implements ILoader<T> {
//internalRequest(prepareUrl(url));
Provider.get(ILoaderManager).add(this);
}
return this;
return this.promise();
}
private function cockTimeout():Void {
@@ -67,49 +69,57 @@ class BaseLoader<T> extends Deferred<T> implements ILoader<T> {
}
}
public function fromBytes(data:ByteArray):Deferred<T> {
public function fromBytes(data:ByteArray):Promise<T> {
if (busy) {
throwError("Busy");
} else {
busy = true;
internalFromBytes(data);
}
return this;
return this.promise();
}
public function GET(url:String, data:Dynamic = null):Deferred<T> {
private function fromAssets(url:String):Promise<T> {
try {
var path:String = url.substring(9);
// ToDo: get text resources with getText method
var extension:String = path.substring(path.lastIndexOf(".")+1, path.length);
if (extension == "json" || extension == "txt") {
var data:T = cast Json.parse(openfl.Assets.getText(path));
resolve(data);
return this.promise();
} else if (extension == "png" || extension == "jpg" || extension == "jpeg") {
var data:T = cast openfl.Assets.getBitmapData(path);
resolve(data);
return this.promise();
}
var bytes:ByteArray = openfl.Assets.getBytes(path);
if (bytes == null) {
throwError("Bytes is null for asset: " + path);
return this.promise();
} else {
return fromBytes(bytes);
}
} catch (error:Dynamic) {
throwError(error);
return this.promise();
}
}
public function GET(url:String, data:Dynamic = null):Promise<T> {
#if (openfl && lime)
if (StringTools.startsWith(url, "%assets%")) {
try {
var path:String = url.substring(9);
// ToDo: get text resources with getText method
var extension:String = path.substring(path.lastIndexOf(".")+1, path.length);
if (extension == "json" || extension == "txt") {
var data:T = cast JSON.parse(openfl.Assets.getText(path));
resolve(data);
return this;
}
var bytes:ByteArray = openfl.Assets.getBytes(path);
if (bytes == null) {
throwError("Bytes is null for asset: " + path);
return this;
} else {
return fromBytes(bytes);
}
} catch (error:Dynamic) {
throwError(error);
return this;
}
return fromAssets(url);
}
#end
return request(url, URLRequestMethod.GET, data);
}
public function POST(url:String, data:Dynamic = null):Deferred<T> {
public function POST(url:String, data:Dynamic = null):Promise<T> {
return request(url, URLRequestMethod.POST, data);
}
public function DELETE(url:String, data:Dynamic = null):Deferred<T> {
public function DELETE(url:String, data:Dynamic = null):Promise<T> {
return request(url, URLRequestMethod.DELETE, data);
}

View File

@@ -18,6 +18,7 @@ class BaseMediaLoader<T> extends BaseLoader<T> {
private var loader:Loader;
override private function internalRequest(url:String):Void {
L.d("BaseMediaLoader", "request: " + url);
cockTimeout();
loader = buildLoader();
loader.load(new URLRequest(url), buildLoaderContext(false));

View File

@@ -14,7 +14,7 @@ class BatchLoader<T> {
public function GET(urls:Array<String>):Promise<Array<T>> {
return Promise.whenAll(urls.map(function(url:String):Promise<T> {
var loader:ILoader<T> = Type.createInstance(factory, []);
return loader.GET(url).promise();
return loader.GET(url);
}));
}
}

View File

@@ -1,18 +1,18 @@
package haxework.net;
import promhx.Promise;
import flash.utils.ByteArray;
import promhx.Deferred;
interface ILoader<T> {
public var timeout(default, default):Int;
public var busy(default, null):Bool;
public var completed(default, null):Float;
public function request(url:String, method:String, data:Dynamic = null):Deferred<T>;
public function fromBytes(data:ByteArray):Deferred<T>;
public function GET(url:String, data:Dynamic = null):Deferred<T>;
public function POST(url:String, data:Dynamic = null):Deferred<T>;
public function DELETE(url:String, data:Dynamic = null):Deferred<T>;
public function request(url:String, method:String, data:Dynamic = null):Promise<T>;
public function fromBytes(data:ByteArray):Promise<T>;
public function GET(url:String, data:Dynamic = null):Promise<T>;
public function POST(url:String, data:Dynamic = null):Promise<T>;
public function DELETE(url:String, data:Dynamic = null):Promise<T>;
public function cancel():Void;
public function run():Void;

View File

@@ -1,5 +1,6 @@
package haxework.net.order;
import promhx.Promise;
import promhx.Deferred;
typedef Order<T> = {
@@ -12,6 +13,6 @@ typedef Order<T> = {
interface IOrderSupplier {
public var orders(default, null):Map<String, Order<Dynamic>>;
public function request<T>(url:String, clazz:Class<T>):Deferred<T>;
public function request<T>(url:String, clazz:Class<T>):Promise<T>;
public function release(url:String, force:Bool = false):Void;
}

View File

@@ -1,5 +1,6 @@
package haxework.net.order;
import promhx.Promise;
import promhx.Deferred;
import haxework.net.order.IOrderSupplier.Order;
import flash.display.BitmapData;
@@ -14,12 +15,12 @@ class OrderSupplier implements IOrderSupplier {
orders = new Map<String, Order<Dynamic>>();
}
public function request<T>(url:String, clazz:Class<T>):Deferred<T> {
public function request<T>(url:String, clazz:Class<T>):Promise<T> {
if (orders.exists(url)) {
var order:Order<T> = orders.get(url);
order.clients++;
//L.d(TAG, "Request(" + order.clients + "): " + url);
return order.deferred;
return order.deferred.promise();
} else {
var deferred = new Deferred<T>();
var order:Order<T> = {
@@ -43,7 +44,7 @@ class OrderSupplier implements IOrderSupplier {
if (orders.exists(url)) orders.get(url).deferred.throwError(error);
orders.remove(url);
});
return deferred;
return deferred.promise();
}
}
@@ -65,7 +66,7 @@ class OrderSupplier implements IOrderSupplier {
private function buildLoader<T>(clazz:Class<T>):ILoader<T> {
var c:Class<Dynamic> = clazz;
return if (c == BitmapData) {
var loader:ILoader<T> = untyped new ImageLoader();
var loader:ILoader<T> = cast new ImageLoader();
loader.timeout = 7000; //ToDo: hardcode timeout for loading images
loader;
} else {