view refactored

This commit is contained in:
2013-12-16 12:59:45 +04:00
parent baa4b48fb0
commit 096b2dd3f5
20 changed files with 126 additions and 41 deletions

View File

@@ -6,16 +6,16 @@ import haxework.gui.GroupView;
class FrameSwitcher extends GroupView implements IFrameSwitcher<Sprite> {
public var current(default, null):Null<IView<Sprite>>;
private var frames:Map<String, IView<Sprite>>;
public var current(default, null):Null<IView<Dynamic>>;
private var frames:Map<String, IView<Dynamic>>;
public function new() {
super();
frames = new Map<String, IView<Sprite>>();
frames = new Map<String, IView<Dynamic>>();
current = null;
}
public function change(id:String):IView<Sprite> {
public function change(id:String):IView<Dynamic> {
if (current != null) {
if (current.id == id) return current;
removeView(current);
@@ -25,7 +25,7 @@ class FrameSwitcher extends GroupView implements IFrameSwitcher<Sprite> {
return current;
}
override public function set_views(value:Array<IView<Sprite>>):Array<IView<Sprite>> {
override public function set_views(value:Array<IView<Dynamic>>):Array<IView<Dynamic>> {
views = [];
if (value.length > 0) {
for (view in value) {

View File

@@ -2,7 +2,7 @@ package haxework.frame;
import haxework.gui.IView;
interface IFrameSwitcher<C> extends IView<C> {
public var current(default, null):Null<IView<C>>;
public function change(id:String):IView<C>;
interface IFrameSwitcher<C:Content> extends IView<C> {
public var current(default, null):Null<IView<Dynamic>>;
public function change(id:String):IView<Dynamic>;
}

View File

@@ -6,9 +6,9 @@ import haxework.gui.layout.DefaultLayout;
import haxework.gui.layout.ILayout;
import flash.display.Sprite;
class GroupView extends View implements IGroupView<Sprite> {
class GroupView extends SpriteView implements IGroupView<Sprite> {
public var views(default, set):Array<IView<Sprite>>;
public var views(default, set):Array<IView<Dynamic>>;
public var layout(default, default):ILayout;
public var layoutVAlign(default, set):VAlign;
@@ -21,7 +21,7 @@ class GroupView extends View implements IGroupView<Sprite> {
public var bottomPadding(default, set):Float;
public var paddings(null, set):Float;
private var viewsById:Map<String, IView<Sprite>>;
private var viewsById:Map<String, IView<Dynamic>>;
public function new(?layout:ILayout) {
super();
@@ -40,13 +40,13 @@ class GroupView extends View implements IGroupView<Sprite> {
super.update();
}
public function set_views(value:Array<IView<Sprite>>):Array<IView<Sprite>> {
public function set_views(value:Array<IView<Dynamic>>):Array<IView<Dynamic>> {
if (views == null) views = [];
for (view in value) addView(view);
return views;
}
public function addView(view:IView<Sprite>):IView<Sprite> {
public function addView(view:IView<Dynamic>):IView<Dynamic> {
views.push(view);
viewsById.set(view.id, view);
content.addChild(view.content);
@@ -55,7 +55,7 @@ class GroupView extends View implements IGroupView<Sprite> {
return view;
}
public function removeView(view:IView<Sprite>):IView<Sprite> {
public function removeView(view:IView<Dynamic>):IView<Dynamic> {
view.parent = null;
viewsById.remove(view.id);
views.remove(view);
@@ -64,7 +64,7 @@ class GroupView extends View implements IGroupView<Sprite> {
return view;
}
public function removeViewById(id:String):IView<Sprite> {
public function removeViewById(id:String):IView<Dynamic> {
if (viewsById.exists(id)) {
return removeView(viewsById.get(id));
} else {

View File

@@ -5,6 +5,8 @@ package haxework.gui;
import haxework.resources.IResources;
import haxework.provider.Provider;
import haxework.gui.View;
import haxework.gui.SpriteView;
import haxework.gui.MovieView;
import haxework.gui.GroupView;
import haxework.gui.HGroupView;
import haxework.gui.VGroupView;

View File

@@ -1,12 +1,13 @@
package haxework.gui;
import haxework.gui.IView.Content;
import haxework.gui.core.HAlign;
import haxework.gui.core.VAlign;
import haxework.gui.layout.ILayout;
interface IGroupView<C> extends IView<C> {
interface IGroupView<C:Content> extends IView<C> {
public var views(default, null):Array<IView<C>>;
public var views(default, null):Array<IView<Dynamic>>;
public var layout(default, default):ILayout;
public var layoutVAlign(default, set):VAlign;
@@ -19,8 +20,8 @@ interface IGroupView<C> extends IView<C> {
public var bottomPadding(default, set):Float;
public var paddings(null, set):Float;
public function addView(view:IView<C>):IView<C>;
public function removeView(view:IView<C>):IView<C>;
public function removeViewById(id:String):IView<C>;
public function addView(view:IView<Dynamic>):IView<Dynamic>;
public function removeView(view:IView<Dynamic>):IView<Dynamic>;
public function removeViewById(id:String):IView<Dynamic>;
public function findViewById<V:IView<Dynamic>>(id:String, ?clazz:Class<V>):Null<V>;
}

View File

@@ -1,8 +1,9 @@
package haxework.gui;
import haxework.gui.IView.Content;
import flash.text.TextFormatAlign;
interface ITextView<C, T> extends IView<C> {
interface ITextView<C:Content, T> extends IView<C> {
public var textField(default, null):T;
public var text(default, set):String;
public var align(default, set):TextFormatAlign;

View File

@@ -5,7 +5,12 @@ import haxework.gui.core.HAlign;
import haxework.gui.skin.ISkin;
import haxework.gui.core.SizeType;
interface IView<C> {
typedef Content = {
var x:Float;
var y:Float;
}
interface IView<C:Content> {
public var id(default, null):String;
public var x(default, set):Float;
@@ -37,7 +42,7 @@ interface IView<C> {
public var content(default, null):C;
public var skin(default, set):ISkin<C, IView<C>>;
public var parent(default, null):Null<IView<C>>;
public var parent(default, null):Null<IView<Dynamic>>;
public var inLayout(default, set):Bool;
public function update():Void;

26
haxework/gui/MovieView.hx Executable file
View File

@@ -0,0 +1,26 @@
package haxework.gui;
import flash.display.MovieClip;
class MovieView extends View<MovieClip> {
public var movie(get, set):MovieClip;
public function new(movie:MovieClip) {
super(movie);
}
private function get_movie():MovieClip {
return content;
}
private function set_movie(value:MovieClip):MovieClip {
content = value;
if (contentSize) {
width = value.loaderInfo.width;
height = value.loaderInfo.height;
}
invalidate();
return content;
}
}

View File

@@ -1,6 +1,6 @@
package haxework.gui;
class ProgressView extends View {
class ProgressView extends SpriteView {
public var value(default, set):Int;
public var max(default, set):Int;

10
haxework/gui/SpriteView.hx Executable file
View File

@@ -0,0 +1,10 @@
package haxework.gui;
import flash.display.Sprite;
class SpriteView extends View<Sprite> {
public function new() {
super(new Sprite());
}
}

View File

@@ -6,7 +6,7 @@ import flash.text.TextFormat;
import flash.display.Sprite;
import flash.text.TextField;
class TextView extends View implements ITextView<Sprite, TextField> {
class TextView extends SpriteView implements ITextView<Sprite, TextField> {
public var textField(default, null):TextField;
public var text(default, set):String;

View File

@@ -1,5 +1,6 @@
package haxework.gui;
import haxework.gui.IView.Content;
import haxework.gui.skin.ISize;
import haxework.gui.core.SizeType;
import haxework.gui.core.HAlign;
@@ -11,7 +12,7 @@ import haxework.gui.skin.ISkin;
import flash.display.Sprite;
class View implements IView<Sprite> {
class View<C:Content> implements IView<C> {
private static var counter:Int = 0;
public static var updater(default, null):Updater = new Updater();
@@ -44,16 +45,15 @@ class View implements IView<Sprite> {
public var bottomMargin(default, set):Float;
public var margins(null, set):Float;
public var content(default, null):Sprite;
public var skin(default, set):ISkin<Sprite, IView<Sprite>>;
public var content(default, null):C;
public var skin(default, set):ISkin<C, IView<C>>;
public var parent(default, null):Null<IView<Sprite>>;
public var parent(default, null):Null<IView<Dynamic>>;
public var inLayout(default, set):Bool;
public function new() {
public function new(content:C) {
id = Type.getClassName(Type.getClass(this)) + counter++;
content = new Sprite();
skin = new FakeSkin();
this.content = content;
x = 0;
y = 0;
width = 100;
@@ -64,7 +64,7 @@ class View implements IView<Sprite> {
inLayout = true;
}
private function currentSkin():ISkin<Sprite, IView<Sprite>> {
private function currentSkin():ISkin<C, IView<C>> {
return skin;
}
@@ -85,7 +85,8 @@ class View implements IView<Sprite> {
if (!Math.isNaN(size.width)) width = size.width;
if (!Math.isNaN(size.height)) height = size.height;
}
currentSkin().draw(this);
var skin:ISkin<C, IView<C>> = currentSkin();
if (skin != null) skin.draw(this);
}
private function set_x(value:Float):Float {
@@ -236,7 +237,7 @@ class View implements IView<Sprite> {
return value;
}
private function set_skin(value:ISkin<Sprite, IView<Sprite>>):ISkin<Sprite, IView<Sprite>> {
private function set_skin(value:ISkin<C, IView<C>>):ISkin<C, IView<C>> {
skin = value;
invalidate();
return skin;
@@ -255,7 +256,7 @@ class View implements IView<Sprite> {
class Updater {
public var stage(null, set):Stage;
private var invalidated:Array<IView<Sprite>>;
private var invalidated:Array<IView<Dynamic>>;
public function new() {
invalidated = [];
@@ -266,7 +267,7 @@ class Updater {
return value;
}
public function invalidate(view:IView<Sprite>):Void {
public function invalidate(view:IView<Dynamic>):Void {
invalidated.push(view);
}

View File

@@ -5,7 +5,7 @@ import haxework.gui.core.HAlign;
import flash.display.Sprite;
import haxework.gui.skin.ISkin;
class ListView<V:View, D> extends VGroupView {
class ListView<V:View<Dynamic>, D> extends VGroupView {
public var data(default, set):Array<D>;
public var renderer(null, set):IRenderer<V, D>;

View File

@@ -5,7 +5,7 @@ import flash.display.Sprite;
import haxework.gui.skin.ISkin;
import haxework.gui.View;
class ScrollView extends View {
class ScrollView extends SpriteView {
public var position(default, set):Float;
public var ratio(default, set):Float;

View File

@@ -8,7 +8,7 @@ class ColorSkin implements ISkin<Sprite, IView<Sprite>> {
public var color(default, default):Int;
public var alpha(default, default):Float;
public function new(?color:Int = 0xfffff, ?alpha:Float = 1.0) {
public function new(?color:Int = 0x000000, ?alpha:Float = 1.0) {
this.color = color;
this.alpha = alpha;
}

View File

@@ -1,5 +1,7 @@
package haxework.gui.skin;
interface ISkin<C, V:IView<C>> {
import haxework.gui.IView.Content;
interface ISkin<C:Content, V:IView<C>> {
public function draw(view:V):Void;
}

View File

@@ -0,0 +1,6 @@
package haxework.net.manage;
interface ILoaderManager {
public function add(loader:ILoader<Dynamic>):Void;
public function release(loader:ILoader<Dynamic>):Void;
}

View File

@@ -0,0 +1,26 @@
package haxework.net.manage;
import haxe.ds.ObjectMap;
class LoaderManager implements ILoaderManager {
private var queue:Array<ILoader<Dynamic>>;
private var actives:Array<ILoader<Dynamic>>;
private var limit:Int;
private var timeout:Map<Dynamic, Int>;
public function new() {
queue = new Array<ILoader<Dynamic>>();
actives = new Array<ILoader<Dynamic>>();
limit = 10;
timeout = new ObjectMap<Dynamic, Int>();
}
public function add(loader:ILoader<Dynamic>):Void {
}
public function release(loader:ILoader<Dynamic>):Void {
}
}

View File

@@ -1,9 +1,11 @@
package haxework.resources;
import flash.display.MovieClip;
import haxework.resources.Resources.ResMap;
import flash.display.BitmapData;
interface IResources {
public var image(default, null):ResMap<BitmapData>;
public var color(default, null):ResMap<Int>;
public var movie(default, null):ResMap<MovieClip>;
}

View File

@@ -1,5 +1,6 @@
package haxework.resources;
import flash.display.MovieClip;
import haxework.core.Tuple;
import haxe.ds.StringMap;
import flash.display.BitmapData;
@@ -47,9 +48,11 @@ class Resources implements IResources {
public var image(default, null):ResMap<BitmapData>;
public var color(default, null):ResMap<Int>;
public var movie(default, null):ResMap<MovieClip>;
public function new() {
image = new ResMap<BitmapData>();
color = new ResMap<Int>();
movie = new ResMap<MovieClip>();
}
}