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", "license": "BSD",
"tags": ["flash"], "tags": ["flash"],
"description": "Framework.", "description": "Framework.",
"version": "0.3.0", "version": "0.6.0",
"releasenote": "Use promhx library.", "releasenote": "Update.",
"contributors": ["shmyga"], "contributors": ["shmyga"],
"classPath": "src/main", "classPath": "src/main",
"dependencies": { "dependencies": {

View File

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

View File

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

View File

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

View File

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

View File

@@ -18,6 +18,7 @@ class BaseMediaLoader<T> extends BaseLoader<T> {
private var loader:Loader; private var loader:Loader;
override private function internalRequest(url:String):Void { override private function internalRequest(url:String):Void {
L.d("BaseMediaLoader", "request: " + url);
cockTimeout(); cockTimeout();
loader = buildLoader(); loader = buildLoader();
loader.load(new URLRequest(url), buildLoaderContext(false)); 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>> { public function GET(urls:Array<String>):Promise<Array<T>> {
return Promise.whenAll(urls.map(function(url:String):Promise<T> { return Promise.whenAll(urls.map(function(url:String):Promise<T> {
var loader:ILoader<T> = Type.createInstance(factory, []); 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; package haxework.net;
import promhx.Promise;
import flash.utils.ByteArray; import flash.utils.ByteArray;
import promhx.Deferred;
interface ILoader<T> { interface ILoader<T> {
public var timeout(default, default):Int; public var timeout(default, default):Int;
public var busy(default, null):Bool; public var busy(default, null):Bool;
public var completed(default, null):Float; public var completed(default, null):Float;
public function request(url:String, method:String, data:Dynamic = null):Deferred<T>; public function request(url:String, method:String, data:Dynamic = null):Promise<T>;
public function fromBytes(data:ByteArray):Deferred<T>; public function fromBytes(data:ByteArray):Promise<T>;
public function GET(url:String, data:Dynamic = null):Deferred<T>; public function GET(url:String, data:Dynamic = null):Promise<T>;
public function POST(url:String, data:Dynamic = null):Deferred<T>; public function POST(url:String, data:Dynamic = null):Promise<T>;
public function DELETE(url:String, data:Dynamic = null):Deferred<T>; public function DELETE(url:String, data:Dynamic = null):Promise<T>;
public function cancel():Void; public function cancel():Void;
public function run():Void; public function run():Void;

View File

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

View File

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