Grid Sorting class v. 0.1

Tommyka | 10. juli 2009 11:01 | ActionScript

Når så kunne jeg ikke holde fingerne væk aligevel.

jeg har lige smækket en Grid sorting class sammen på en time her om natten i det lidt våde norge.

Klassen virker ved at man tilføjer nogle display objekter til dens interne list, og så hver gang du ændre højde, bredte, v og hspacing så resorter den alle objekterne der er tilknyttet.
Selve klassen er ikke lavet som et display objekt (selv om det nemt kunne), så de skal være added til en displayliste et andet sted.

her er selve klassen

package dk.tommyka.layout 
{
	import dk.tommyka.v3.layout.events.LayoutEvent;
	import flash.display.DisplayObject;
	import flash.display.Sprite;	
	/**
	 * ...
	 * @author Tommyka
	 */
	public class Grid 
	{
		private var _width:Number = 400;
		private var _height:Number = 400;
		private var _vspacing:int = 10;
		private var _hspacing:int = 10;
		
		private var _children:Array;
		
		public function Grid(children:Array) 
		{ 
			_children = children || [];
			
			for (var i:uint = 0; i < _children.length; i++)
			{
				_children[i].addEventListener(LayoutEvent.RESORT, onResort, false, 0, true);
			}
		}
		
		private function resort():void
		{
			var mw:Number = 0; //max width;
			var mh:Number = 0; //max height;
			
			var numChildren:int = _children.length;
			
			var child:DisplayObject;
			
			for (var i:uint = 0; i < numChildren; i ++)
			{
				child = _children[i];
				
				if (child.width > mw)
				{
					mw = child.width;
				}
				
				if (child.height > mh)
				{
					mh = child.height;
				}
			}
			
			var dx:int = int(mw) + _vspacing;
			var dy:int = int(mh) + _hspacing;
			
			var rows:int = Math.floor(_height / dy);
			var cols:int = Math.floor(_width / dx);
			
			for (i = 0; i < numChildren; i++)
			{
				child = _children[i];
				child.x = dx * (i % cols);
				child.y = dy * Math.floor(i / cols);
			}
		}
		
		public function addChild(child:DisplayObject):void
		{
			_children.push(child);
			child.addEventListener(LayoutEvent.RESORT, onResort, false, 0, true);
			
			resort();
		}
		
		private function onResort(e:LayoutEvent):void 
		{
			resort();
		}
		
		public function get width():Number { return _width; }
		
		public function set width(value:Number):void 
		{
			_width = value;
			resort();
		}
		
		public function get height():Number { return _height; }
		
		public function set height(value:Number):void 
		{
			_height = value;
			
			resort();
		}
		
		public function get vspacing():int { return _vspacing; }
		
		public function set vspacing(value:int):void 
		{
			_vspacing = value;
			
			resort();
		}
		
		public function get hspacing():int { return _hspacing; }
		
		public function set hspacing(value:int):void 
		{
			_hspacing = value;
			
			resort();
		}
	}
	
}

der er også en event klasse med som man kan bruge hvis nogle af de nestede elementer ændre størelse, så kan man bruge den til at sige, HEY resort lige det hele.

 

package dk.tommyka.layout.events 
{
	import flash.events.Event;
	
	/**
	 * ...
	 * @author Tommyka
	 */
	public class LayoutEvent extends Event 
	{
		
		static public const RESORT:String = "resort";
		
		public function LayoutEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) 
		{ 
			super(type, bubbles, cancelable);
			
		} 
		
		public override function clone():Event 
		{ 
			return new LayoutEvent(type, bubbles, cancelable);
		} 
		
		public override function toString():String 
		{ 
			return formatToString("LayoutEvent", "type", "bubbles", "cancelable", "eventPhase"); 
		}
		
	}
	
}

Flash lite ud og Opera Mini ind

Tommyka | 23. maj 2009 07:20 | ActionScript, web

Jeg har de sidste par dage arbejdet på et lille projekt, hvor jeg kunne køre en todo liste i en air app og på min mobil.

I den orginale ide var det planen jeg skulle bruge flash lite til mobil delen og en backend i .net der kunne sende et kompakt dataformat så jeg sparede på trafikken.
Jeg fik backenden op at køre, men da jeg så skulle i gang med flash lite delen, måtte jeg blive meget skuffet da jeg ikke kunne få flash lite til at loade date fra eksterne kilder.
Jeg ved ikke om det er fordi jeg har glemt det meste as2 eller om det var en begrænsing jeg bare ikke kunne kommer forbi. Prøvede med xml data, crossdomain fil og googlede uden at finde noget svar så gav jeg op på flash lite.

Flash Lite ude, men projektet ikke dødt

Det var et nederlag, men jeg havde ikke givet op endnu. Jeg havde haft en simpel html side til at teste med, da jeg lavede backenden.

Så min føste tanke var bare at bruge browseren i min Nokie 6300, men den ville ikke læse aspx sider. Skuffet igen.
Jeg kom så i tanke om Opera Mini, så jeg fik hentet den ned og startet den op, fik tastet urlen ind og det virkede.

Fantastisk så var jeg kørende igen. Så projektet havde ændret sig til nu at bruge en html front end i stedet for en flash front end. Hvilket faktisk var bedre, for så var jeg næsten platforms uafhænig på mobil siden (kan næsten sige jeg har lavet min første iphone app :D).

Hvad er magien ved Opera Mini

Jeg begyndte at blive meget intresseret i opera og i det heletaget internet på min mobil. Jeg besøgte twitter, facebook og andre sites, og fik specielt en god oplevelse på de to første sites, fordi de havde dedikerede mobil version af siderne. Men browseren kan også klare normal html sider og rendere dem rigtigt uden problemer. Men det undrede mig lidt at en browser der fylder omkring 150 kb og min FireFox fylder 25 mb (gør det firefox 166 gange bedre?), så der skete noget magi her. Efter at havde læst lidt rundet kom svaret, det er ikke Opera mini der rendere siden direkte.

Når man forespørger en side i Opera Mini så sprøger man faktisk nogle servere ved Opera som rendere siderne med den fulde Opera Browser (til pc), og så generer den noget kompakt markup til Opera Mini. Med denne metode er det 2 fordele, det ene er at siderne bliver renderet rigtigt uden at Opera Mini fylder for meget. 2. alt det der skal sendes til mobil kommer i en kompakt pakke, hvilket gør at det fylder mindre (mindre at download), og stripper ting som ikke kan renders.

Tilbage til projektet

Projektet starte ud med iden om at det skulle styres med en Air frontend, og kunne læses på mobilen med en Flash Lite app.
Der jeg er nu, så er mobil delen html og man kan også oprette og slette fra mobilen, eller fra browseren.

Projektet kan ses her på http://todo.tommyka.dk/default.aspx?userid=25.

Jeg har ikke besluttet mig om hvor projektet nu skal føre hen af nu, der er bestemt nogle issues omkring sikkerhed som jeg skal havde fundet ud af.
Men som helhed har det været sjovt at bevæge sig ud hvor jeg ikke vist noget, og så bare prøve mig frem.

 

Powered by BlogEngine.NET 1.5.0.7
Theme by Tommy Kjær Andersen admin Log ind