<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: ActionScript code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 25 Jul 2008 06:27:53 GMT</pubDate>
    <description>DZone Snippets: ActionScript code</description>
    <item>
      <title>DeclarativeDescriptor an example of writing a custom DataDescriptor</title>
      <link>http://snippets.dzone.com/posts/show/5673</link>
      <description>&lt;br /&gt;Sometimes it becomes necessary to write a custom DataDescriptor for certain Flex controls (i.e. Tree, TreeMap, etc).  This is a generic data descriptor that allows you to declare a single field name to be used for the children of the given node.  This makes it easy to simple tell Flex to use any field instead of the default "children" field.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;package {&lt;br /&gt;	&lt;br /&gt;	import mx.collections.ArrayCollection;&lt;br /&gt;	import mx.collections.CursorBookmark;&lt;br /&gt;	import mx.collections.ICollectionView;&lt;br /&gt;	import mx.collections.IViewCursor;&lt;br /&gt;	import mx.controls.treeClasses.ITreeDataDescriptor;&lt;br /&gt;	import mx.events.CollectionEvent;&lt;br /&gt;	import mx.events.CollectionEventKind;&lt;br /&gt;	&lt;br /&gt;	public class DeclarativeDescriptor implements ITreeDataDescriptor {&lt;br /&gt;		&lt;br /&gt;		private var _fieldname : String;&lt;br /&gt;		&lt;br /&gt;		public function DeclarativeDescriptor( fieldname : String ) {&lt;br /&gt;			_fieldname = fieldname;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		public function getChildren(node:Object, model:Object=null) : ICollectionView {&lt;br /&gt;			if( node.hasOwnProperty( _fieldname ) ) {&lt;br /&gt;				return node[_fieldname] is ICollectionView ? node[_fieldname] as ICollectionView : new ArrayCollection( node[_fieldname] );&lt;br /&gt;			} else {&lt;br /&gt;				return null;&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		public function hasChildren(node:Object, model:Object=null) : Boolean {&lt;br /&gt;			if( isBranch( node, model ) ) {&lt;br /&gt;				var children : ICollectionView = getChildren( node, model );&lt;br /&gt;				return children.length &gt; 0;&lt;br /&gt;			} else {&lt;br /&gt;				return false;&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		public function isBranch(node:Object, model:Object=null) : Boolean {&lt;br /&gt;			return node.hasOwnProperty(_fieldname);&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		public function getData(node:Object, model:Object=null) : Object {&lt;br /&gt;			return node;&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		public function addChildAt(parent:Object, child:Object, index:int, model:Object=null) : Boolean {&lt;br /&gt;	        var event:CollectionEvent = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);&lt;br /&gt;	        event.kind = CollectionEventKind.ADD;&lt;br /&gt;	        event.items = [child];&lt;br /&gt;	        event.location = index;&lt;br /&gt;	        if (!parent) {&lt;br /&gt;	            var iterator:IViewCursor = model.createCursor();&lt;br /&gt;	            iterator.seek(CursorBookmark.FIRST, index);&lt;br /&gt;	            iterator.insert(child);&lt;br /&gt;	        } else if (parent is Object) {&lt;br /&gt;	            if (isBranch(parent) ) {&lt;br /&gt;	            	var children : Object = parent[_fieldname];&lt;br /&gt;	                if( children is ArrayCollection) {&lt;br /&gt;	                    children.addItemAt(child, index);&lt;br /&gt;	                    if (model) {&lt;br /&gt;	                        model.dispatchEvent(event);&lt;br /&gt;	                        model.itemUpdated(parent);&lt;br /&gt;	                    }&lt;br /&gt;	                    return true;&lt;br /&gt;	                } else {&lt;br /&gt;	                    children.splice(index, 0, child);&lt;br /&gt;	                    if (model)&lt;br /&gt;	                        model.dispatchEvent(event);&lt;br /&gt;	                    return true;&lt;br /&gt;	                }&lt;br /&gt;	            }&lt;br /&gt;	        }&lt;br /&gt;	        return false;&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		public function removeChildAt(parent:Object, child:Object, index:int, model:Object=null) : Boolean {&lt;br /&gt;	        var event:CollectionEvent = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);&lt;br /&gt;	        event.kind = CollectionEventKind.REMOVE;&lt;br /&gt;		    event.items = [child];&lt;br /&gt;		    event.location = index;&lt;br /&gt;		&lt;br /&gt;		    //handle top level where there is no parent&lt;br /&gt;		    if (!parent) {&lt;br /&gt;		        var iterator:IViewCursor = model.createCursor();&lt;br /&gt;		        iterator.seek(CursorBookmark.FIRST, index);&lt;br /&gt;		        iterator.remove();&lt;br /&gt;		        if (model)&lt;br /&gt;		            model.dispatchEvent(event);&lt;br /&gt;		        return true;&lt;br /&gt;		    } else if (parent is Object) {&lt;br /&gt;		    	var children : Object = parent[_fieldname];&lt;br /&gt;		        if (children) {&lt;br /&gt;		            children.splice(index, 1);&lt;br /&gt;		            if (model) &lt;br /&gt;		                model.dispatchEvent(event);&lt;br /&gt;		            return true;&lt;br /&gt;		        }&lt;br /&gt;		    }&lt;br /&gt;		    return false;&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 19 Jun 2008 20:05:07 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5673</guid>
      <author>middlec (Charlie)</author>
    </item>
    <item>
      <title>Example of a TreeMap using Objects Instead of XML</title>
      <link>http://snippets.dzone.com/posts/show/5670</link>
      <description>&lt;br /&gt;This is an example of how to use &lt;a href="http://code.google.com/p/flex2treemap/"&gt;Flex2TreeMap&lt;/a&gt; with plain old ActionScript (POASO) objects instead of XML.  You have to declare a dataDescriptor of the TreeMap so you can map companies field to the children of the sector node.&lt;br /&gt;&lt;br /&gt;This class depends on &lt;a href="http://snippets.dzone.com/posts/show/5673"&gt;DeclarativeDescriptor&lt;/a&gt; in order to compile.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;br /&gt;&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:toolbox="http://www.flextoolbox.com/2006/mxml"&gt;&lt;br /&gt;&lt;br /&gt;	&lt;mx:Script&gt;&lt;br /&gt;		&lt;![CDATA[&lt;br /&gt;		&lt;br /&gt;			private const MIN_COLOR:uint = 0xcc0000;&lt;br /&gt;			private const ZERO_COLOR:uint = 0;&lt;br /&gt;			private const MAX_COLOR:uint = 0x00cc00;&lt;br /&gt;			&lt;br /&gt;			private var _maxAbsoluteChange:Number;&lt;br /&gt;			private var __descriptor : DeclarativeDescriptor = new DeclarativeDescriptor("companies");&lt;br /&gt;			&lt;br /&gt;			[Bindable]&lt;br /&gt;			private var marketData : Array = [&lt;br /&gt;				{ name: "Technology",&lt;br /&gt;				  companies: [&lt;br /&gt;					{ name: "WidgetCorp", marketCap: "4200000000", value: 42.01, change: -2.03 },&lt;br /&gt;					{ name: "Sprocket Systems", marketCap: "2100000000", value: 24.87, change: 4.45 },&lt;br /&gt;					{ name: "Gizmodyne", marketCap: "10500000000", value: 106.52, change: 1.01 },&lt;br /&gt;					{ name: "GadgetSoft", marketCap: "1200000000", value: 12.98, change: -0.82 }&lt;br /&gt;				  ]&lt;br /&gt;				},&lt;br /&gt;				{ name: "Financial",&lt;br /&gt;				  companies: [&lt;br /&gt;					{ name: "Parker-Hayes", marketCap: "4550000000", value: 36.74, change: 3.56},&lt;br /&gt;					{ name: "G.A. Harvard", marketCap: "12800000000", value: 21.61, change: -1.71},&lt;br /&gt;					{ name: "P. Royal Trust", marketCap: "8700000000", value: 25.22, change: 2.09},&lt;br /&gt;					{ name: "Houndsworth Bank", marketCap: "1900000000", value: 33.71, change: 0.2}&lt;br /&gt;				  ]&lt;br /&gt;			 	},&lt;br /&gt;				{ name: "Communication",&lt;br /&gt;				  companies: [&lt;br /&gt;				     { name: "Richtel Networks", marketCap: "2400000000", value: 34.93, change: -1.94},&lt;br /&gt;				     { name: "TCI", marketCap: "9600000000", value: 45.82, change: 0.22},&lt;br /&gt;				     { name: "Norizon", marketCap: "1400000000", value: 27.46, change: 1.68}&lt;br /&gt;				  ]&lt;br /&gt;			 	},&lt;br /&gt;			 	{ name: "Energy",&lt;br /&gt;			 	  companies: [&lt;br /&gt;				     { name: "Axxom Monopocorp", marketCap: "3200000000", value: 36.18, change: 5.46},&lt;br /&gt;				     { name: "RP Petrol", marketCap: "7500000000", value: 26.74, change: -3.25},&lt;br /&gt;				     { name: "Lexaco", marketCap: "3900000000", value: 15.96, change: -2.08}&lt;br /&gt;			 	  ]&lt;br /&gt;			 	}&lt;br /&gt;			];&lt;br /&gt;			&lt;br /&gt;			/**&lt;br /&gt;			 * For each item, determines the tooltip text.&lt;br /&gt;			 */&lt;br /&gt;			private function itemToToolTip(item:Object):String&lt;br /&gt;			{&lt;br /&gt;				//one tooltip for branches and one for leaves&lt;br /&gt;				if(this.treeMap.dataDescriptor.isBranch(item))&lt;br /&gt;				{&lt;br /&gt;					return null;&lt;br /&gt;				}&lt;br /&gt;				var capInBillions:Number = Number(item.marketCap) / 1000000000;&lt;br /&gt;				return "Value: " + this.formatter.format(item.value) + "\n" +&lt;br /&gt;					"Change: " + item.change + "%\n" +&lt;br /&gt;					"Market Cap: $" + capInBillions + "B";&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			/**&lt;br /&gt;			 * Takes the absolute value of each change value and determines the maximum.&lt;br /&gt;			 */&lt;br /&gt;			private function calculateMaxAbsoluteChange():void&lt;br /&gt;			{&lt;br /&gt;				var companies:Array = this.marketData.companies;&lt;br /&gt;				this._maxAbsoluteChange = 0;&lt;br /&gt;				for each(var company:Object in companies)&lt;br /&gt;				{&lt;br /&gt;					var change:Number = Number(company.change);&lt;br /&gt;					this._maxAbsoluteChange = Math.max(this._maxAbsoluteChange, Math.abs(change));&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;			&lt;br /&gt;			/**&lt;br /&gt;			 * For each item, determines the background color.&lt;br /&gt;			 */&lt;br /&gt;			private function itemToColor(item:Object):uint&lt;br /&gt;			{&lt;br /&gt;				var change:Number = Number(item.change);&lt;br /&gt;				if(change &lt; 0)&lt;br /&gt;				{&lt;br /&gt;					return this.blendColors(MIN_COLOR, ZERO_COLOR, Math.abs(change) / this._maxAbsoluteChange);&lt;br /&gt;				}&lt;br /&gt;				else if(change &gt; 0)&lt;br /&gt;				{&lt;br /&gt;					return this.blendColors(ZERO_COLOR, MAX_COLOR, 1 - (Math.abs(change) / this._maxAbsoluteChange));&lt;br /&gt;				}&lt;br /&gt;				return ZERO_COLOR;&lt;br /&gt;			}&lt;br /&gt;			&lt;br /&gt;			/**&lt;br /&gt;			 * Determines the blended color between two separate colors using a range from 0 to 1.&lt;br /&gt;			 */&lt;br /&gt;			private function blendColors(color1:uint, color2:uint, percent:Number = 0.5):uint&lt;br /&gt;			{&lt;br /&gt;				var remaining:Number = 1 - percent;&lt;br /&gt;				&lt;br /&gt;				var red1:uint = (color1 &gt;&gt; 16) &amp; 0xff;&lt;br /&gt;				var green1:uint = (color1 &gt;&gt; 8) &amp; 0xff;&lt;br /&gt;				var blue1:uint = color1 &amp; 0xff;&lt;br /&gt;				&lt;br /&gt;				var red2:uint = (color2 &gt;&gt; 16) &amp; 0xff;&lt;br /&gt;				var green2:uint = (color2 &gt;&gt; 8) &amp; 0xff;&lt;br /&gt;				var blue2:uint = color2 &amp; 0xff;&lt;br /&gt;				 &lt;br /&gt;				color1 = ((red1 * percent) &lt;&lt; 16) + ((green1 * percent) &lt;&lt; 8) + blue1 * percent;&lt;br /&gt;				color2 = ((red2 * remaining) &lt;&lt; 16) + ((green2 * remaining) &lt;&lt; 8) + blue2 * remaining;&lt;br /&gt;	&lt;br /&gt;				return color1 + color2;&lt;br /&gt;	&lt;br /&gt;			}&lt;br /&gt;			&lt;br /&gt;		]]&gt;&lt;br /&gt;	&lt;/mx:Script&gt;&lt;br /&gt;&lt;br /&gt;	&lt;toolbox:TreeMap id="treeMap" width="400" height="300"&lt;br /&gt;		dataProvider="{marketData}" labelField="name" weightField="marketCap"&lt;br /&gt;		colorFunction="{itemToColor}" dataTipFunction="{itemToToolTip}" dataDescriptor="{__descriptor}"/&gt;&lt;br /&gt;	&lt;br /&gt;	&lt;mx:CurrencyFormatter id="formatter"/&gt;&lt;br /&gt;	&lt;br /&gt;	&lt;br /&gt;&lt;/mx:Application&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 18 Jun 2008 21:44:05 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5670</guid>
      <author>middlec (Charlie)</author>
    </item>
    <item>
      <title>correct enconding for latin caracters</title>
      <link>http://snippets.dzone.com/posts/show/5615</link>
      <description>for correct encoding for latin caracters, embeds: &lt;br /&gt;&lt;br /&gt;lowercase &lt;br /&gt;uppercase &lt;br /&gt;numerals &lt;br /&gt;ponctuation &lt;br /&gt;e basic latin &lt;br /&gt;this: &#186;&#170;&#185;&#178;&#179;&#163;&#162;&#172;&#176;&#176;&#167;&#186;&#231;&#224;&#225;&#226;&#227;&#232;&#233;&#234;&#236;&#237;&#238;&#242;&#243;&#244;&#245;&#249;&#250;&#251;&#252;&#192;&#193;&#199;&#194;&#195;&#200;&#201;&#202;&#204;&#205;&#206;&#210;&#211;&#212;&#213;&#217;&#218;&#219;&#220;&#241;&#209; &lt;br /&gt;&lt;br /&gt;or use:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;System.useCodepage = true;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 07 Jun 2008 19:03:38 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5615</guid>
      <author>leozera (Leonardo Faria)</author>
    </item>
    <item>
      <title>Single-Line commenting in Actionscript with Textmate</title>
      <link>http://snippets.dzone.com/posts/show/5170</link>
      <description>- open the bundle editor and select the Actionscript bundle&lt;br /&gt;- use the add button to make a new preference item, give it a scope of source.actionscript&lt;br /&gt;- name it whatever&lt;br /&gt;- paste in the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;{   shellVariables = (&lt;br /&gt;        {   name = 'TM_COMMENT_START';&lt;br /&gt;            value = '// ';&lt;br /&gt;        },&lt;br /&gt;    );&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;- that's it! got these instructions on IRC from Infininight: http://pastie.textmate.org/private/clmfldbv2sexjcd7u6qjw</description>
      <pubDate>Sun, 24 Feb 2008 22:49:14 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5170</guid>
      <author>sikelianos (Zeke Sikelianos)</author>
    </item>
    <item>
      <title>AS3 FlashVars equivalent: LoaderInfo</title>
      <link>http://snippets.dzone.com/posts/show/5138</link>
      <description>// Add this to your package..&lt;br /&gt;import flash.text.*;&lt;br /&gt;&lt;br /&gt;// And throw this in wherever..&lt;br /&gt;var t:TextField = new TextField();&lt;br /&gt;t.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;t.border = true;&lt;br /&gt;addChild(t);&lt;br /&gt;&lt;br /&gt;t.appendText("params:" + "\n");&lt;br /&gt;try {&lt;br /&gt;	var key:String;&lt;br /&gt;	var val:String;&lt;br /&gt;	var flashvars:Object = LoaderInfo(this.root.loaderInfo).parameters;&lt;br /&gt;	for (key in flashvars) {&lt;br /&gt;		val = String(flashvars[key]);&lt;br /&gt;		t.appendText("\t" + key + ":\t" + val + "\n");&lt;br /&gt;	}&lt;br /&gt;} catch (error:Error) {&lt;br /&gt;	t.appendText(error);&lt;br /&gt;}</description>
      <pubDate>Wed, 13 Feb 2008 18:25:17 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5138</guid>
      <author>sikelianos (Zeke Sikelianos)</author>
    </item>
    <item>
      <title>Make AS3 clips turn cursor into a hand on rollover..</title>
      <link>http://snippets.dzone.com/posts/show/5131</link>
      <description>&lt;code&gt;&lt;br /&gt;  buttonMode = true; &lt;br /&gt;  mouseChildren = false;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 11 Feb 2008 07:11:23 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5131</guid>
      <author>sikelianos (Zeke Sikelianos)</author>
    </item>
    <item>
      <title>AS3 SwapDepths Equivalent</title>
      <link>http://snippets.dzone.com/posts/show/5130</link>
      <description>&lt;code&gt;&lt;br /&gt;function move_to_top() {&lt;br /&gt;  // This will move the current object to the topmost z-index&lt;br /&gt;  parent.setChildIndex(this, parent.numChildren-1);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 11 Feb 2008 06:30:34 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5130</guid>
      <author>sikelianos (Zeke Sikelianos)</author>
    </item>
    <item>
      <title>PHP for removing www from request and redirecting. (Useful for System.security.allowDomain issues)</title>
      <link>http://snippets.dzone.com/posts/show/5028</link>
      <description>&lt;code&gt;&lt;br /&gt;&lt;?&lt;br /&gt;	// if www.domain.com, redirect to domain.com&lt;br /&gt;	if (strtolower(substr($_SERVER['HTTP_HOST'], 0, 3)) == "www") {&lt;br /&gt;		header("Location: http://rgcreative.com" . $_SERVER['REQUEST_URI']);&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	// Full path to current URL (including query string)&lt;br /&gt;	//echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 22 Jan 2008 21:09:23 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5028</guid>
      <author>sikelianos (Zeke Sikelianos)</author>
    </item>
    <item>
      <title>Embedded Fonts in Modules</title>
      <link>http://snippets.dzone.com/posts/show/4949</link>
      <description>How to use embedded fonts in modules and late-load the embedded font.&lt;br /&gt;Save TrueType font file as ./Arial.ttf&lt;br /&gt;&lt;code&gt;&lt;br /&gt;@font-face {&lt;br /&gt;        src:url("./Arial.ttf");&lt;br /&gt;        font-family: myFont;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Application&lt;br /&gt;{&lt;br /&gt;	font-family: 	myFont;&lt;br /&gt;	font-size: 	10px;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 05 Jan 2008 19:02:33 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4949</guid>
      <author>mako (mako)</author>
    </item>
    <item>
      <title>Actionscript Perpetual easing</title>
      <link>http://snippets.dzone.com/posts/show/4803</link>
      <description>&lt;code&gt;&lt;br /&gt;MovieClip.prototype.ease = function(prop, target, speed) {&lt;br /&gt;	delta = this['_' + prop] - target;&lt;br /&gt;	if (delta != 0) {&lt;br /&gt;		this['_' + prop] = this['_' + prop] - (delta / speed);&lt;br /&gt;		delta = this['_' + prop] - target;&lt;br /&gt;		if (delta &lt; .25 and delta &gt; -.25) {&lt;br /&gt;			this['_' + prop] = target;&lt;br /&gt;			delta = 0;&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 21 Nov 2007 00:44:07 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4803</guid>
      <author>sikelianos (Zeke Sikelianos)</author>
    </item>
  </channel>
</rss>
