<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.log2e.com &#187; FlashDevelop</title>
	<atom:link href="http://blog.log2e.com/tag/flashdevelop/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.log2e.com</link>
	<description>Tutorials and Code Snippets</description>
	<lastBuildDate>Mon, 01 Jun 2009 13:05:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Getting Started with the PureMVC Startup Manager &#8211; Part 3</title>
		<link>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/</link>
		<comments>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/#comments</comments>
		<pubDate>Mon, 19 May 2008 08:20:58 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PureMVC]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=25</guid>
		<description><![CDATA[Preparing the View We are almost there. In the final step of this tutorial we will be creating a very simple view: Create a file with the name StageMediator.as in the view folder. Create a new folder inside the view folder and call it components. Create two files in the components folder and name them [...]]]></description>
			<content:encoded><![CDATA[<h3>Preparing the View</h3>
<p>We are almost there. In the final step of this tutorial we will be creating a very simple view:</p>
<ol>
<li>Create a file with the name <em>StageMediator.as</em> in the <em>view</em> folder.</li>
<li>Create a new folder inside the <em>view</em> folder and call it <em>components</em>.</li>
<li>Create two files in the <em>components</em> folder and name them <em>SectionView.as</em> and <em>TitleView.as</em>.</li>
</ol>
<p><span id="more-25"></span><br />
Here&#8217;s an updated screenshot of the project panel:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/startup_manager_project_space_3.gif" alt="Project Panel" width="426" height="481" /></p>
<p>Both view components are not PureMVC-specific. Their only purpose is to display the CSS-formatted content from the XML file. The code of the view components is shown here without any comments.</p>
<p><em>TitleView</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">StyleSheet</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">TextFieldAutoSize</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> TitleView <span class="kw3">extends</span> Sprite </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _title:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _css:StyleSheet;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _titleTextField:<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> TitleView<span class="br0">&#40;</span> title:<span class="kw3">String</span>, css:StyleSheet <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_title = title;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_css = css; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField = <span class="kw2">new</span> <span class="kw3">TextField</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">autoSize</span> = TextFieldAutoSize.<span class="kw3">LEFT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="me1">x</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="me1">y</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">width</span> = <span class="nu0">350</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">wordWrap</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">multiline</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="me1">styleSheet</span> = _css;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">htmlText</span> = <span class="st0">&#39;&lt;p class=&quot;title&quot;&gt;&#39;</span> + _title + <span class="st0">&#39;&lt;/p&gt;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span> _titleTextField <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><em>SectionView</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">StyleSheet</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">TextFieldAutoSize</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">SectionVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> SectionView <span class="kw3">extends</span> Sprite </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _sectionVO:SectionVO;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _css:StyleSheet;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _labelTextField:<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _contentTextField:<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> SectionView<span class="br0">&#40;</span> sectionVO:SectionVO, css:StyleSheet <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_sectionVO = sectionVO;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_css = css; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField = <span class="kw2">new</span> <span class="kw3">TextField</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">autoSize</span> = TextFieldAutoSize.<span class="kw3">LEFT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="me1">x</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="me1">y</span> = <span class="nu0">60</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">width</span> = <span class="nu0">350</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">wordWrap</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">multiline</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="me1">styleSheet</span> = _css;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">htmlText</span> = <span class="st0">&#39;&lt;p class=&quot;label&quot;&gt;&#39;</span> + _sectionVO.<span class="me1">label</span> + <span class="st0">&#39;&lt;/p&gt;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField = <span class="kw2">new</span> <span class="kw3">TextField</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">autoSize</span> = TextFieldAutoSize.<span class="kw3">LEFT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="me1">x</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="me1">y</span> = <span class="nu0">90</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">width</span> = <span class="nu0">350</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">wordWrap</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">multiline</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="me1">styleSheet</span> = _css;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">htmlText</span> = _sectionVO.<span class="me1">content</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span> _labelTextField <span class="br0">&#41;</span>; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span> _contentTextField <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>The <em>StageMediator</em></h3>
<p>An instance of the <em>StageMediator</em> class has already been created and registered with the application inside the <em>StartupCommand</em> (<a title="Part 2" href="http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/" target="_self">see part 2</a>):</p>
<div class="geshi actionscript">
<ol start="19">
<li class="li1">
<div class="de1">&#8230;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> <span class="kw3">stage</span>:<span class="kw3">Stage</span> = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">facade.<span class="me1">registerMediator</span><span class="br0">&#40;</span> <span class="kw2">new</span> StageMediator<span class="br0">&#40;</span> <span class="kw3">stage</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&#8230;</div>
</li>
</ol>
</div>
<p>The role of the <em>StageMediator</em> is to initialize the view once all resources have been loaded successfully. In a real-world project you would probably want to display some state information on the loading progress before creating the main view. To simplify things, we will be sending this information to the output panel using <code>trace()</code>. </p>
<p>In our sample project the <em>StageMediator</em> not only declares an interest in the &#8220;Loaded&#8221; and &#8220;Failed&#8221; notifications for each resource, it also listens to various other notifications that are automatically sent by the monitor. </p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">SectionVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span>.<span class="me1">TitleView</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IMediator</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">INotification</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">mediator</span>.<span class="me1">Mediator</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupMonitorProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">StyleSheetProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">SiteDataProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span>.<span class="me1">SectionView</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> StageMediator <span class="kw3">extends</span> Mediator <span class="kw3">implements</span> IMediator </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">NAME</span>:<span class="kw3">String</span> = <span class="st0">&quot;StageMediator&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _styleSheetProxy:StyleSheetProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _siteDataProxy:SiteDataProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> StageMediator<span class="br0">&#40;</span> viewComponent:<span class="kw3">Object</span> <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">NAME</span>, viewComponent <span class="br0">&#41;</span>; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override <span class="kw3">public</span> <span class="kw2">function</span> listNotificationInterests<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Array</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> &nbsp;<span class="br0">&#91;</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOADING_PROGRESS</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOAD_RESOURCE_TIMED_OUT</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOADING_COMPLETE</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOADING_FINISHED_INCOMPLETE</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">CALL_OUT_OF_SYNC_IGNORED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOAD_RESOURCES_REJECTED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">STYLE_SHEET_LOADING</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">STYLE_SHEET_LOADED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">STYLE_SHEET_FAILED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">SITE_DATA_LOADING</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">SITE_DATA_LOADED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">SITE_DATA_FAILED</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override <span class="kw3">public</span> <span class="kw2">function</span> handleNotification<span class="br0">&#40;</span> note:INotification <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">switch</span> <span class="br0">&#40;</span> note.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADING</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading StyleSheet&#8230;&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADED</span>: </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;StyleSheet Loaded&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADING</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading Site Data&#8230;&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADED</span>: </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Site Data Loaded&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">LOAD_RESOURCES_REJECTED</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">CALL_OUT_OF_SYNC_IGNORED</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Abnormal State, Abort&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">LOADING_PROGRESS</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> perc:<span class="kw3">Number</span> = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw3">Number</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading Progress: &quot;</span> + perc + <span class="st0">&quot;%&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">LOADING_COMPLETE</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;&gt;&gt;&gt; Loading Complete&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;initializeView<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">LOADING_FINISHED_INCOMPLETE</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading Finished Incomplete&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> initializeView<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_styleSheetProxy = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> StyleSheetProxy.<span class="kw3">NAME</span> <span class="br0">&#41;</span> as StyleSheetProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_siteDataProxy = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> SiteDataProxy.<span class="kw3">NAME</span> <span class="br0">&#41;</span> as SiteDataProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> titleView:TitleView = <span class="kw2">new</span> TitleView<span class="br0">&#40;</span> _siteDataProxy.<span class="me1">title</span>, _styleSheetProxy.<span class="me1">css</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="me1">addChild</span><span class="br0">&#40;</span> titleView <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> sectionVO:SectionVO = _siteDataProxy.<span class="me1">sections</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> sectionView:SectionView = <span class="kw2">new</span> SectionView<span class="br0">&#40;</span> sectionVO, _styleSheetProxy.<span class="me1">css</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="me1">addChild</span><span class="br0">&#40;</span> sectionView <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> <span class="kw3">stage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Stage</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> viewComponent as <span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 29-34</strong>: These notifications are generated by the monitor. For more details please refer to the <a title="StartupMonitorProxy API Docs" onclick="pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/?p=25&#038;preview=true');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');" href="http://puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html" target="_blank">StartupMonitorProxy API documentation</a>.</p>
<p><strong>Lines 35-40</strong>: These notifications are generated inside the resource proxies.</p>
<p><strong>Line 71</strong>: The main view is only initialized if all resources have been loaded. </p>
<p>And, finally, here&#8217;s the class that starts it all (<em>Main.as</em>):</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageScaleMode</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageAlign</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> Main <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> Main<span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">scaleMode</span> = StageScaleMode.<span class="me1">NO_SCALE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">align</span> = StageAlign.<span class="me1">TOP_LEFT</span>; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> facade:ApplicationFacade = ApplicationFacade.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">startup</span><span class="br0">&#40;</span> <span class="kw3">this</span>.<span class="kw3">stage</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>Testing the Demo</h3>
<p>If you run our sample app, you should see three textfields that display the content from the XML file, all nicely formatted:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/startup_manager_demo_screenshot.gif" alt="Project Panel" width="441" height="363" /></p>
<p>The output panel should display the following lines (don&#8217;t be confused by the fact that the &#8220;Site Data Loaded&#8221; message is spit out after the &#8220;>>> Loading Complete&#8221; message):<br />
<code><br />
Loading StyleSheet...<br />
Loading Progress: 50%<br />
Loading Site Data...<br />
StyleSheet Loaded<br />
Loading Progress: 100%<br />
>>> Loading Complete<br />
Site Data Loaded<br />
</code></p>
<p>Now, in order to test that the Startup Manager is working properly, you can, for example, rename one of the resource files (<em>styles.css</em>, <em>data.xml</em>). In either case the utility should display a &#8220;Loading Finished Incomplete&#8221; message.</p>
<h3>Conclusion</h3>
<p>I hope this three-parts tutorial helped you to use the PureMVC Startup Manager in your own PureMVC projects. This utility is an excellent addition to the PureMVC framework, it&#8217;s very flexible and can greatly support you to organize the loading of resources and to correctly handle errors that might occur during startup.</p>
<hr />
<em>You can download the sample files <a href="http://blog.log2e.com/wp-content/uploads/2008/05/puremvc_startup_manager_demo.zip">from here</a> (the ZIP archive includes a FlashDevelop project file). If you want to comment on this tutorial please post in the comments section at the end of the <a href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/" target="_self">introductory post</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting Started with the PureMVC Startup Manager &#8211; Part 2</title>
		<link>http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/</link>
		<comments>http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/#comments</comments>
		<pubDate>Sat, 17 May 2008 10:27:47 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PureMVC]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=22</guid>
		<description><![CDATA[The StartupMonitorProxy A PureMVC-based application typically has a startup command that instantiates some basic proxies and mediators. In our sample project we want to load a CSS stylesheet and an XML file with content before allowing any user interaction (see part 1). The important thing here is to make sure that everything gets loaded in [...]]]></description>
			<content:encoded><![CDATA[<h3>The <em>StartupMonitorProxy</em></h3>
<p>A PureMVC-based application typically has a startup command that instantiates some basic proxies and mediators. In our sample project we want to load a CSS stylesheet and an XML file with content before allowing any user interaction (<a title="Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_self">see part 1</a>). The important thing here is to make sure that everything gets loaded in the proper order and is fully loaded before it is accessed. Here is where the <code>StartupMonitorProxy</code> steps in. This class is at the core of the Startup Manager utility.<br />
<span id="more-22"></span><br />
The <code>StartupMonitorProxy</code> takes care of how the resource loading should be sequenced so that dependent resources are loaded in correct order. It also keeps track of the progress of the resource loading, and it knows when the resource loading is complete. The way you use the <code>StartupMonitorProxy</code> is pretty straightforward:</p>
<ol>
<li>A single instance of the <code>StartupMonitorProxy</code> is registered which is usually referred to as the monitor.</li>
<li>Each startup resource is registered with the monitor, using the <code>addResource()</code> method.</li>
<li>The loading process is started by calling the monitor&#8217;s <code>loadResources()</code> method.</li>
</ol>
<p>(For a more detailed description please refer to the excellent <a title="StartupMonitorProxy API Docs" onclick="pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');" href="http://puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html" target="_blank">API documentation</a>.)</p>
<p>Now let&#8217;s take a quick look at the other actors that are needed to make the startup utility work.</p>
<h3>The <em>StartupResourceProxy</em></h3>
<p>For each startup resource the application must instantiate a <code>StartupResourceProxy</code> object. These objects are required only by the utility and must not be confused with the normal resource proxies that represent the data carrier objects of the model. The regular proxies are instantiated and registered with the application first. After that the <code>StartupResourceProxy</code> objects are instantiated, receiving the resource proxy instance and a separate startup resource name. The two proxy types are like twins, but they live in different worlds. We will shortly see what this looks like in code.</p>
<h3>&#8220;Loaded&#8221; and &#8220;Failed&#8221; Notifications</h3>
<p>In order to inform the monitor that a resource has been loaded successfully or that the resource load has failed, the application must register the utility commands <code>StartupResourceLoadedCommand</code> and <code>StartupResourceFailedCommand</code>. These commands are responsible for sending &#8220;Loaded&#8221; and &#8220;Failed&#8221; notifications to the monitor whereby the notification body identifies the particular resource.</p>
<h3>Updating the Project Space</h3>
<p>Before we continue with the actual ActionScript code, let&#8217;s create some more class files in our project space. </p>
<ol>
<li>Create a file with the name <em>StartupCommand.as</em> in the <em>controller</em> folder.</li>
<li>Create three new files in the <em>model</em> folder and name them <em>EntityProxy.as</em>, <em>SiteDataProxy.as</em>, <em>StyleSheetProxy.as</em>.</li>
<li>Create a new folder <em>vo</em> under the <em>model</em> folder.</li>
<li>Create a file with the name <em>SectionVO</em> in the <em>vo</em> folder.</li>
</ol>
<p>Your project panel should look like this now:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/startup_manager_project_space_2.gif" alt="Project Space" width="426" height="433" /></p>
<h3>The <em>ApplicationFacade</em></h3>
<p>We are starting with the <em>ApplicationFacade</em> class (if you followed <a title="Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_blank">part 1</a> of this tutorial you can paste the code below into the already existing empty <em>ApplicationFacade.as</em> file). It pretty much looks like a typical PureMVC facade:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">facade</span>.<span class="me1">Facade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">controller</span>.<span class="me1">StartupResourceLoadedCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">controller</span>.<span class="me1">StartupResourceFailedCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">controller</span>.<span class="me1">StartupCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> ApplicationFacade <span class="kw3">extends</span> Facade <span class="kw3">implements</span> IFacade</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STARTUP:<span class="kw3">String</span> = <span class="st0">&quot;startup&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STYLE_SHEET_LOADING:<span class="kw3">String</span> = <span class="st0">&quot;styleSheetLoading&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STYLE_SHEET_LOADED:<span class="kw3">String</span> = <span class="st0">&quot;styleSheetLoaded&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STYLE_SHEET_FAILED:<span class="kw3">String</span> = <span class="st0">&quot;styleSheetFailed&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SITE_DATA_LOADING:<span class="kw3">String</span> = <span class="st0">&quot;siteDataLoading&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SITE_DATA_LOADED:<span class="kw3">String</span> = <span class="st0">&quot;siteDataLoaded&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SITE_DATA_FAILED:<span class="kw3">String</span> = <span class="st0">&quot;siteDataFailed&quot;</span>; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> getInstance<span class="br0">&#40;</span><span class="br0">&#41;</span>: ApplicationFacade</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>instance == <span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; instance = <span class="kw2">new</span> ApplicationFacade<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> instance as ApplicationFacade;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override protected <span class="kw2">function</span> initializeController<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span>.<span class="me1">initializeController</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> STARTUP, StartupCommand <span class="br0">&#41;</span>; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> STYLE_SHEET_LOADED, StartupResourceLoadedCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> SITE_DATA_LOADED, StartupResourceLoadedCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> STYLE_SHEET_FAILED, StartupResourceFailedCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> SITE_DATA_FAILED, StartupResourceFailedCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> startup<span class="br0">&#40;</span> <span class="kw3">stage</span>:<span class="kw3">Object</span> <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> STARTUP, <span class="kw3">stage</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 12-17</strong>: Three notification names are defined for each of both resources, the stylesheet (<code>STYLE_SHEET_LOADING</code>, <code>STYLE_SHEET_LOADED</code>, <code>STYLE_SHEET_FAILED</code>) and the site data (<code>SITE_DATA_LOADING</code>, <code>SITE_DATA_LOADED</code>, <code>SITE_DATA_FAILED</code>). Please note that the <code>..._LOADING</code> notifications are not necessarily required by the Startup Manager utility, they are just sent as additional information, using the regular PureMVC <code>sendNotification()</code> method every time a load attempt is made.</p>
<p><strong>Lines 33-37</strong>: The before mentioned utility commands are registered. It&#8217;s important that the commands are registered separately with the &#8220;Loaded&#8221; and &#8220;Failed&#8221; notification names for every single startup resource.</p>
<h3>The <em>StartupCommand</em></h3>
<p>The <em>StartupCommand</em> is the place where we define the proxies and instantiate the <em>StartupMonitorProxy</em> object:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">controller</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">SiteDataProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">ICommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">INotification</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">command</span>.<span class="me1">SimpleCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupResourceProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupMonitorProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">interfaces</span>.<span class="me1">IStartupProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">StyleSheetProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">StageMediator</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> StartupCommand <span class="kw3">extends</span> SimpleCommand <span class="kw3">implements</span> ICommand </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _monitor:StartupMonitorProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override <span class="kw3">public</span> <span class="kw2">function</span> execute<span class="br0">&#40;</span> note:INotification <span class="br0">&#41;</span>:<span class="kw3">void</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> <span class="kw3">stage</span>:<span class="kw3">Stage</span> = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerMediator</span><span class="br0">&#40;</span> <span class="kw2">new</span> StageMediator<span class="br0">&#40;</span> <span class="kw3">stage</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> <span class="kw2">new</span> StartupMonitorProxy<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_monitor = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> StartupMonitorProxy.<span class="kw3">NAME</span> <span class="br0">&#41;</span> as StartupMonitorProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_monitor.<span class="me1">defaultTimeout</span> = <span class="nu0">30</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> styleSheetProxy:IStartupProxy = <span class="kw2">new</span> StyleSheetProxy<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> siteDataProxy:IStartupProxy = <span class="kw2">new</span> SiteDataProxy<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> styleSheetProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> siteDataProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> rStyleSheetProxy:StartupResourceProxy = makeAndRegisterStartupResource<span class="br0">&#40;</span> StyleSheetProxy.<span class="me1">SRNAME</span>, styleSheetProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> rSiteDataProxy:StartupResourceProxy = makeAndRegisterStartupResource<span class="br0">&#40;</span> SiteDataProxy.<span class="me1">SRNAME</span>, siteDataProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rSiteDataProxy.<span class="me1">requires</span> = <span class="br0">&#91;</span> rStyleSheetProxy <span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_monitor.<span class="me1">loadResources</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> makeAndRegisterStartupResource<span class="br0">&#40;</span> proxyName:<span class="kw3">String</span>, appResourceProxy:IStartupProxy <span class="br0">&#41;</span>:StartupResourceProxy </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> r:StartupResourceProxy = <span class="kw2">new</span> StartupResourceProxy<span class="br0">&#40;</span> proxyName, appResourceProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> r <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_monitor.<span class="me1">addResource</span><span class="br0">&#40;</span> r <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> r;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 23-24</strong>: An instance of the <code>StartupMonitorProxy</code> class is created and registered with the application. The proxy is assigned to the private property <code>_monitor</code>.</p>
<p><strong>Line 25</strong>: A default timeout is set. You can set individual timeout values for each startup resource. If you do not set timeouts on the resource level the monitor&#8217;s default timeout is used. (For more information on the use of timeouts take a look at the <a title="StartupResourceProxy API" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_blank">StartupResourceProxy API documentation</a>.)</p>
<p><strong>Lines 27-28</strong>: The proxies for the stylesheet and the site data are instantiated. Please note that they are typed as <code>IStartupProxy</code> because the proxies are supposed to implement the <code>IStartupProxy</code> interface in addition to the usual PureMVC <code>IProxy</code> interface. We will return to this topic when we look at the implementation of the proxies.</p>
<p><strong>Lines 30-31</strong>: Like any other PureMVC proxy the <code>styleSheetProxy</code> and the <code>siteDataProxy</code> are registered with the application.</p>
<p><strong>Lines 33-34</strong>: Whereas instances of the <code>StyleSheetProxy</code> and the <code>SiteDataProxy</code> are supposed to be used throughout the whole application, the <code>rStyleSheetProxy</code> and the <code>rSiteDataProxy</code> objects are only needed in the context of the startup utility. </p>
<p><strong>Line 36</strong>: The dependency between the two resources is specified. The site data requires that the stylesheet must be loaded first.</p>
<p><strong>Line 38</strong>: Calling <code>loadResources()</code> on the monitor instance triggers the loading of all startup resources.</p>
<p><strong>Lines 41-47</strong>: This is a helper function that I borrowed from the <a title="Startup As Ordered" href="http://trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered" target="_blank" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=');">Startup As Ordered</a> demo. It creates and registers a <code>StartupResourceProxy</code> object and adds it to the monitor&#8217;s list of resources. </p>
<h3>The Resource Proxies</h3>
<p>Generally speaking, a proxy in a PureMVC-based application manages a piece of the data model. The same proxy might also be responsible for retrieving its data from a remote location during startup. The PureMVC Startup Manager utility supports this pattern by providing the <code>IStartupProxy</code> interface which strictly requires the implementation of a <code>load()</code> method. Any resource proxy that is part of the initial loading process monitored by the utility must implement this interface.</p>
<p>On the other hand, the proxies must work in the usual PureMVC environment where they are supposed to extend the framework&#8217;s <code>Proxy</code> class and to implement the <code>IProxy</code> interface. To make the resource proxies work in both contexts, the utitliy author uses an abstract class that facilitates the cooperation between the Startup Manager and the application. You can find this class in the <a title="Startup As Ordered" href="http://trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered" target="_blank" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=');">Startup As Ordered</a> demo, the class name is <em>EntityProxy</em>. It extends <code>Proxy</code> and implements <code>IProxy</code> like a normal PureMVC proxy. But this proxy class isn&#8217;t instantiated and registered with the application itself, it only serves as a helper class for the actual resource proxies. The resource proxies extend <code>EntityProxy</code> and implement <code>IStartupProxy</code>. This way they become part of both contexts.</p>
<p>Here&#8217;s the code of the <em>EntityProxy</em> class:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">proxy</span>.<span class="me1">Proxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupResourceProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> EntityProxy <span class="kw3">extends</span> Proxy <span class="kw3">implements</span> IProxy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> EntityProxy<span class="br0">&#40;</span> <span class="kw3">name</span> :<span class="kw3">String</span> <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">name</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; protected <span class="kw2">function</span> sendLoadedNotification<span class="br0">&#40;</span> noteName:<span class="kw3">String</span>, noteBody:<span class="kw3">String</span>, srName:<span class="kw3">String</span> <span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> srProxy:StartupResourceProxy = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> srName <span class="br0">&#41;</span> as StartupResourceProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="sy0">!</span> srProxy.<span class="me1">isTimedOut</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendNotification<span class="br0">&#40;</span> noteName, noteBody <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 15-22</strong>: The <code>sendLoadedNotification()</code> method is a helper function that is used by the actual resource proxies to send &#8220;Loaded&#8221; or &#8220;Failed&#8221; notifications. These notifications are only sent if the Startup Manager hasn&#8217;t timed out the resource. In order to get the timeout information, the resource proxy&#8217;s &#8220;twin object&#8221; (<code>srProxy</code>) is retrieved. By the way, accessing this state information is the only reason why the <code>StartupResourceProxy</code> objects have been registered with the application in the <em>StartupCommand</em> class (see above, line 44: <code>facade.registerProxy( r );</code>). The utility itself does not require that they are registered with the PureMVC model.</p>
<p>The resource proxies finally implement the actual loading mechanisms. I hope you remember that the proxies in our sample project are responsible for loading an external CSS stylesheet and an XML file. Here&#8217;s the code of the two proxies. </p>
<p><em>StyleSheetProxy</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">*</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLLoader</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLRequest</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">StyleSheet</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">proxy</span>.<span class="me1">Proxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">interfaces</span>.<span class="me1">IStartupProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">EntityProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> StyleSheetProxy <span class="kw3">extends</span> EntityProxy <span class="kw3">implements</span> IStartupProxy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">NAME</span>:<span class="kw3">String</span> = <span class="st0">&quot;StyleSheetProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SRNAME:<span class="kw3">String</span> = <span class="st0">&quot;StyleSheetSRProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> StyleSheetProxy<span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">NAME</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span> :<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADING</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> request:URLRequest = <span class="kw2">new</span> URLRequest<span class="br0">&#40;</span><span class="st0">&quot;styles.css&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loader:URLLoader = <span class="kw2">new</span> URLLoader<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>IOErrorEvent.<span class="me1">IO_ERROR</span>, errorHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">COMPLETE</span>, loaderCompleteHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="kw3">load</span><span class="br0">&#40;</span>request<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> loaderCompleteHandler<span class="br0">&#40;</span>event:Event<span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span> = <span class="kw2">new</span> StyleSheet<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span>.<span class="kw3">parseCSS</span><span class="br0">&#40;</span> URLLoader<span class="br0">&#40;</span>event.<span class="kw3">target</span><span class="br0">&#41;</span>.<span class="kw3">data</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADED</span>, <span class="kw3">NAME</span>, SRNAME <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> errorHandler<span class="br0">&#40;</span><span class="kw3">e</span>:IOErrorEvent<span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">STYLE_SHEET_FAILED</span>, <span class="kw3">NAME</span>, SRNAME <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> css<span class="br0">&#40;</span><span class="br0">&#41;</span>:StyleSheet</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw3">data</span> as StyleSheet;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Line 16</strong>: The <code>SRNAME</code> constant holds the name of the <code>StartupResourceProxy</code> twin.</p>
<p><strong>Line 40, line 45</strong>: The helper method in the parent <code>EntityProxy</code> class is called to send &#8220;Loaded&#8221;/&#8221;Failed&#8221; notifications.</p>
<p><strong>Lines 48-51</strong>: The getter method returns the internal <code>data</code> property as a typed <code>StyleSheet</code> object.</p>
<p>The <em>SiteDataProxy</em> class works in a similar fashion:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">*</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLLoader</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLRequest</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">proxy</span>.<span class="me1">Proxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">interfaces</span>.<span class="me1">IStartupProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">EntityProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;iimport com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">SectionVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> SiteDataProxy <span class="kw3">extends</span> EntityProxy <span class="kw3">implements</span> IStartupProxy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">NAME</span>:<span class="kw3">String</span> = <span class="st0">&quot;SiteDataProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SRNAME:<span class="kw3">String</span> = <span class="st0">&quot;SiteDataSRProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> SiteDataProxy<span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">NAME</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span> :<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADING</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> request:URLRequest = <span class="kw2">new</span> URLRequest<span class="br0">&#40;</span><span class="st0">&quot;data.xml&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loader:URLLoader = <span class="kw2">new</span> URLLoader<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>IOErrorEvent.<span class="me1">IO_ERROR</span>, errorHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">COMPLETE</span>, loaderCompleteHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="kw3">load</span><span class="br0">&#40;</span>request<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> loaderCompleteHandler<span class="br0">&#40;</span>event:Event<span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> <span class="kw3">xml</span>:<span class="kw3">XML</span> = <span class="kw2">new</span> <span class="kw3">XML</span><span class="br0">&#40;</span> event.<span class="kw3">target</span>.<span class="kw3">data</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">xml</span>.<span class="me1">ignoreWhitespace</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> title:<span class="kw3">String</span> = <span class="kw3">xml</span>.<span class="me1">title</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">toXMLString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> sections:<span class="kw3">Array</span> = <span class="kw2">new</span> <span class="kw3">Array</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> sectionsXMLList:XMLList = <span class="kw3">xml</span>.<span class="me1">sections</span>.<span class="me1">section</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">for</span> <span class="br0">&#40;</span> <span class="kw2">var</span> i:uint=<span class="nu0">0</span>; i<span class="sy0">&lt;</span>sectionsXMLList.<span class="kw3">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; i++ <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> section:<span class="kw3">XML</span> = sectionsXMLList<span class="br0">&#91;</span>i<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> id:uint = section.<span class="sy0">@</span>id;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> sectionVO:SectionVO = <span class="kw2">new</span> SectionVO<span class="br0">&#40;</span> id, section.<span class="sy0">@</span>label, section.<span class="me1">content</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sections.<span class="kw3">push</span><span class="br0">&#40;</span> sectionVO <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span> = <span class="kw2">new</span> <span class="kw3">Object</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span>.<span class="me1">title</span> = title;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span>.<span class="me1">sections</span> = sections;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADED</span>, <span class="kw3">NAME</span>, SRNAME <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> errorHandler<span class="br0">&#40;</span><span class="kw3">e</span>:IOErrorEvent<span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">SITE_DATA_FAILED</span>, <span class="kw3">NAME</span>, SRNAME <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> title<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw3">data</span>.<span class="me1">title</span> as <span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> sections<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw3">data</span>.<span class="me1">sections</span> as <span class="kw3">Array</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 38-51</strong>: Please refer to the <em>data.xml</em> file described in <a title="Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_self">part 1</a> of this tutorial.</p>
<p><strong>Line 49</strong>: The <em>SiteDataProxy</em> class makes use of a simple value object class (<em>SectionVO</em>):</p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">vo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> SectionVO</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _id:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _label:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _content:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> SectionVO<span class="br0">&#40;</span> id:uint, label:<span class="kw3">String</span>, content:<span class="kw3">String</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_id = id;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_label = label;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_content = content;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> id<span class="br0">&#40;</span><span class="br0">&#41;</span>:uint</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _id;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> label<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _label;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> content<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _content;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>In the <a title="Part 3" href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/" target="_self">third and last part</a> of this tutorial we will be creating a rudimentary view to test our efforts.</p>
<hr />
<em>You can download the sample files <a href="http://blog.log2e.com/wp-content/uploads/2008/05/puremvc_startup_manager_demo.zip">from here</a> (the ZIP archive includes a FlashDevelop project file). If you want to comment on this tutorial please post in the comments section at the end of the <a href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/" target="_self">introductory post</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spinning Preloader &#8211; An All-Time Classic in Pure AS3</title>
		<link>http://blog.log2e.com/2008/05/10/spinning-preloader-in-pure-as3/</link>
		<comments>http://blog.log2e.com/2008/05/10/spinning-preloader-in-pure-as3/#comments</comments>
		<pubDate>Sat, 10 May 2008 14:56:48 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Preloader]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=14</guid>
		<description><![CDATA[Update (December 11th, 2008): The source code is available for download now. The zip archive also includes a FlashDevelop project file. Get it here. This tutorial may serve as a beginner exercise in AS3 coding. But before starting, let&#8217;s take a quick look at what we will be creating: 
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_spinningpreloader_1807375663"
			class="flashmovie"
			width="400"
			height="140">
	<param name="movie" value="http://blog.log2e.com/wp-content/uploads/2008/05/spinningpreloader.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://blog.log2e.com/wp-content/uploads/2008/05/spinningpreloader.swf"
			name="fm_spinningpreloader_1807375663"
			width="400"
			height="140">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object> The [...]]]></description>
			<content:encoded><![CDATA[<p><em>Update (December 11th, 2008): The source code is available for download now. The zip archive also includes a FlashDevelop project file. <a href="http://blog.log2e.com/demos/spinning-preloader/SpinningPreloader.zip">Get it here</a>.</em></p>
<p>This tutorial may serve as a beginner exercise in AS3 coding. But before starting, let&#8217;s take a quick look at what we will be creating:</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_spinningpreloader_1100036907"
			class="flashmovie"
			width="400"
			height="140">
	<param name="movie" value="http://blog.log2e.com/wp-content/uploads/2008/05/spinningpreloader.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://blog.log2e.com/wp-content/uploads/2008/05/spinningpreloader.swf"
			name="fm_spinningpreloader_1100036907"
			width="400"
			height="140">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>The spinning preloader animation is an all-time classic. Our implementation will be highly configurable. You will be able to set the number, size, color and fade-out duration of the rectangular segments, as well as the radius and the spinning speed.<br />
<span id="more-14"></span></p>
<h3>Prerequisites</h3>
<p>Since this is a pure AS3 project, you can choose whatever IDE you like. I use the open-source AS3 IDE <a title="FlashDevelop" href="http://www.flashdevelop.org/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=');">FlashDevelop</a> along with the free <a title="Flex 3 SDK" href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK" target="_blank" onclick="pageTracker._trackPageview('/outgoing/opensource.adobe.com/wiki/display/flexsdk/Flex+SDK?referer=');">Flex 3 SDK</a>. The only other thing we need is the AS3 animation kit <a title="TweenLite" href="http://blog.greensock.com/tweenliteas3/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenliteas3/?referer=');">TweenLite</a>. This lightweight tweening engine is contained in a single class file. You can eiher copy and paste it into your project space, or you can store it somewhere else and add the path to your project&#8217;s classpaths settings.</p>
<p>I call the preloader class <em>SpinningPreloader</em> and use <em>com.log2e.utils</em> as package definition. So my FlashDevelop project panel looks like this:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/spinning_preloader_project_panel.gif" alt="Spinning Preloader Project Panel" width="427" height="224" /></p>
<h3>The <em>SpinningPreloader</em> Class</h3>
<p>Here&#8217;s the full class code (I will explain it below):</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">utils</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">DisplayObjectContainer</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">TimerEvent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">utils</span>.<span class="me1">Timer</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> gs.<span class="me1">TweenLite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> SpinningPreloader <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> <span class="kw3">_target</span> <img src='http://blog.log2e.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> isplayObjectContainer;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _container:Sprite;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _centerX:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _centerY:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _radius:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _steps:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _rectWidth:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _rectHeight:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _color:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _count:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _timer:Timer;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _timerInterval:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _fadeOutDuration:<span class="kw3">Number</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> SpinningPreloader<span class="br0">&#40;</span> <span class="kw3">target</span> <img src='http://blog.log2e.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> isplayObjectContainer,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;centerX:uint = <span class="nu0">0</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;centerY:uint = <span class="nu0">0</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;radius:uint = <span class="nu0">15</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;steps:uint = <span class="nu0">24</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rectWidth:uint = <span class="nu0">4</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rectHeight:uint = <span class="nu0">2</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">color</span>:uint = 0x0000FF,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;timerInterval:uint = <span class="nu0">20</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fadeOutDuration:<span class="kw3">Number</span> = <span class="nu0">1.5</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">_target</span> = <span class="kw3">target</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_centerX = centerX;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_centerY = centerY;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_radius = radius;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_steps = steps;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_rectWidth = rectWidth;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_rectHeight = rectHeight;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_color = <span class="kw3">color</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_timerInterval = timerInterval;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_fadeOutDuration = fadeOutDuration;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_container = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_container.<span class="me1">x</span> = _centerX;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_container.<span class="me1">y</span> = _centerY;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">_target</span>.<span class="me1">addChild</span><span class="br0">&#40;</span>_container<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_count = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_timer = <span class="kw2">new</span> Timer<span class="br0">&#40;</span>_timerInterval, <span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_timer.<span class="me1">addEventListener</span><span class="br0">&#40;</span>TimerEvent.<span class="me1">TIMER</span>, drawRectangle<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_timer.<span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>_container<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TweenLite.<span class="me1">to</span><span class="br0">&#40;</span> _container, .<span class="nu0">5</span>, <span class="br0">&#123;</span> alpha:<span class="nu0">0</span>, onComplete:onContainerFadeOutComplete <span class="br0">&#125;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> onContainerFadeOutComplete<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_timer.<span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">_target</span>.<span class="me1">removeChild</span><span class="br0">&#40;</span>_container<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> onRectFadeOutComplete<span class="br0">&#40;</span>rect:Sprite<span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_container.<span class="me1">removeChild</span><span class="br0">&#40;</span>rect<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> drawRectangle<span class="br0">&#40;</span><span class="kw3">e</span>:TimerEvent<span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> rot:<span class="kw3">Number</span> = _count <span class="sy0">*</span> <span class="nu0">360</span> <span class="sy0">/</span> _steps;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> rect:Sprite = filledRectangle<span class="br0">&#40;</span>_rectWidth, _rectHeight, _color<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">x</span> = _radius <span class="sy0">*</span> <span class="kw3">Math</span>.<span class="kw3">cos</span><span class="br0">&#40;</span>rot <span class="sy0">*</span> <span class="kw3">Math</span>.<span class="kw3">PI</span><span class="sy0">/</span><span class="nu0">180</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">y</span> = _radius <span class="sy0">*</span> <span class="kw3">Math</span>.<span class="kw3">sin</span><span class="br0">&#40;</span>rot <span class="sy0">*</span> <span class="kw3">Math</span>.<span class="kw3">PI</span><span class="sy0">/</span><span class="nu0">180</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">rotation</span> = rot;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_container.<span class="me1">addChild</span><span class="br0">&#40;</span>rect<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_count++;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TweenLite.<span class="me1">to</span><span class="br0">&#40;</span> rect, _fadeOutDuration, <span class="br0">&#123;</span> alpha:<span class="nu0">0</span>, onComplete:onRectFadeOutComplete, onCompleteParams:<span class="br0">&#91;</span>rect<span class="br0">&#93;</span> <span class="br0">&#125;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">e</span>.<span class="kw3">updateAfterEvent</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>_count == _steps<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _count = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> filledRectangle<span class="br0">&#40;</span><span class="kw3">width</span>:uint, <span class="kw3">height</span>:uint, <span class="kw3">color</span>:uint<span class="br0">&#41;</span>:Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> rect:Sprite = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">graphics</span>.<span class="kw3">beginFill</span><span class="br0">&#40;</span><span class="kw3">color</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">graphics</span>.<span class="me1">drawRect</span><span class="br0">&#40;</span>-<span class="kw3">width</span><span class="sy0">/</span><span class="nu0">2</span>, -<span class="kw3">height</span><span class="sy0">/</span><span class="nu0">2</span>, <span class="kw3">width</span>, <span class="kw3">height</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">graphics</span>.<span class="kw3">endFill</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> rect;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>The Constructor</h3>
<p>The constructor receives a list of parameters:</p>
<ul>
<li><strong>target</strong>: The display object you want to attach the preloader animation to. The type is <code>DisplayObjectContainer</code> so the target can be any object that inherits from this class (for example <code>Stage</code>, <code>MovieClip</code>, <code>Sprite</code>).</li>
<li><strong>centerX</strong>: The x position of the preloader&#8217;s center point.</li>
<li><strong>centerY</strong>: The y position of the preloader&#8217;s center point.</li>
<li><strong>radius</strong>: The radius of the preloader. Please note that this is not the outer radius of the resulting animation but the distance between the center point and the registration point of the rectangular segments.</li>
<li><strong>steps</strong>: The number of rectangles that are created in one full turn.</li>
<li><strong>rectWidth</strong>: The width of a single rectangular segment.</li>
<li><strong>rectHeight</strong>: The height of a single rectangular segment.</li>
<li><strong>color</strong>: The color of the rectangles.</li>
<li><strong>timerInterval</strong> (in ms): This parameter controls the speed of the rotation by setting the time interval after which a new rectangle is drawn.</li>
<li><strong>fadeOutInterval</strong> (in s): This parameter specifies the duration of the alpha tween that fades out it each segment.</li>
</ul>
<h3>The <em>start()</em> and <em>stop()</em> Methods</h3>
<p>These two methods are the only interface between the <em>SpinningPreloader</em> class and the outside world.</p>
<p>The <code>start()</code> method creates a container for the animation and positions it on the target display object. It also initializes the <code>_count</code> property and starts the timer which repeatedly calls the <code>drawRectangle()</code> method.</p>
<p>The <code>stop()</code> method fades out the container sprite. Once the alpha value is 0 the timer is stopped and the container is removed from the display list. If you prefer to remove the animation immediately just replace the line of code that starts the tween with the two lines from the <code>onContainerFadeOutComplete()</code> event handler method.</p>
<h3>The &#8220;Fading&#8221; Event Handlers</h3>
<p>The method <code>onContainerFadeOutComplete()</code> is called after the container&#8217;s alpha value has reached 0.</p>
<p>The method <code>onRectFadeOutComplete()</code> is called whenever a single rectangle has finished its life cycle. As soon as the rectangle&#8217;s alpha value is 0 it is removed from the display list. This way we limit the maximum number of rectangles that are child objects of the container sprite at the same time.</p>
<h3>Drawing the Rectangles</h3>
<p>The angle that defines the position of each rectangle is calculated with the help of a counter variable (<code>_count</code>) which is incremented each time a rectangle is drawn. If the counter value is equal to the number of steps <code>_count</code> is reset to zero. The result from 360 divided by the number of steps muliplied with <code>_count</code> gives us the angle in degrees. This value is stored in the local variable <code>rot</code>.</p>
<p>In order to calculate the exact x and y coordinates we need a little trigonometry.</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/spinning_preloader_math.gif" alt="Trigonometry " width="314" height="284" /></p>
<p>(Just on a side note, we use the three o&#8217;clock position as starting point because that&#8217;s where the 0 degree angle is situated in Flash.) The sine and cosine in the above diagram are calculated by <em>sin(A) = y/r</em> and <em>cos(A) = x/r</em>. This trigonometric relation is used in the <code>drawRectangle()</code> method:</p>
<p><code>rect.x = _radius * Math.cos(rot * Math.PI/180);</code><br />
<code>rect.y = _radius * Math.sin(rot * Math.PI/180);</code></p>
<p>Please note that the <code>Math.sin()</code> and <code>Math.cos()</code> functions expect the angle to be in radians, that&#8217;s why we have to multiply <code>rot</code> with <code>Math.PI/180</code>.</p>
<p>The rectangles themselves are created in the <code>filledRectangle()</code> method which receives the width, height and color as parameters. The sprite instance is returned to <code>drawRectangle()</code> where the x, y and rotation values are set and the rectangle is added to the display list. As soon as the rectangle is visible it starts to fade out. Invoking <code>e.updateAfterEvent()</code> causes the Flash Player to update the screen immediately after a rectangle has been added (instead of relying on the next scheduled screen update that is governed by the frame rate).</p>
<h3>Using the <em>SpinningPreloader</em> Class</h3>
<p>The animations shown on this page were created by instantiating three preloader objects with different parameters:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">utils</span>.<span class="me1">SpinningPreloader</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> Main <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> Main<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> pl1:SpinningPreloader = <span class="kw2">new</span> SpinningPreloader<span class="br0">&#40;</span><span class="kw3">this</span>, <span class="nu0">50</span>, <span class="nu0">70</span>, <span class="nu0">15</span>, <span class="nu0">24</span>, <span class="nu0">4</span>, <span class="nu0">2</span>, 0x0000FF, <span class="nu0">20</span>, <span class="nu0">1.5</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pl1.<span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> pl2:SpinningPreloader = <span class="kw2">new</span> SpinningPreloader<span class="br0">&#40;</span><span class="kw3">this</span>, <span class="nu0">180</span>, <span class="nu0">70</span>, <span class="nu0">40</span>, <span class="nu0">48</span>, <span class="nu0">8</span>, <span class="nu0">3</span>, 0xFF0000, <span class="nu0">30</span>, <span class="nu0">2</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pl2.<span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> pl3:SpinningPreloader = <span class="kw2">new</span> SpinningPreloader<span class="br0">&#40;</span><span class="kw3">this</span>, <span class="nu0">330</span>, <span class="nu0">70</span>, <span class="nu0">30</span>, <span class="nu0">32</span>, <span class="nu0">12</span>, <span class="nu0">4</span>, 0&#215;999999, <span class="nu0">15</span>, <span class="nu0">1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pl3.<span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>Room for Improvement</h3>
<p>Where to go from here? There are several options for improving the class. For example, you could add a text field at the center of the preloader and an update function that receives the loading progress value. Or you could use a circle or a small bitmap instead of the rectangle. I will leave this as an exercise to you.</p>
<p>If you have any questions or suggestions leave a comment or drop me a message.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/10/spinning-preloader-in-pure-as3/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Creating a SWC Component in FlashDevelop</title>
		<link>http://blog.log2e.com/2008/05/07/creating-a-swc-component-in-flashdevelop/</link>
		<comments>http://blog.log2e.com/2008/05/07/creating-a-swc-component-in-flashdevelop/#comments</comments>
		<pubDate>Wed, 07 May 2008 12:19:45 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[SWC]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=6</guid>
		<description><![CDATA[In the past, if you wanted to create a SWC library from your ActionScript classes you either had to use FlexBuilder or the Flash IDE. After Adobe open-sourced the Flex SDK you were also able to use the command line tool compc.exe at no extra cost. But if you don&#8217;t like to mess around with [...]]]></description>
			<content:encoded><![CDATA[<p>In the past, if you wanted to create a SWC library from your ActionScript classes you either had to use FlexBuilder or the Flash IDE. After Adobe open-sourced the Flex SDK you were also able to use the command line tool <em>compc.exe</em> at no extra cost. But if you don&#8217;t like to mess around with command line tools you have another option now. A developer from Sydney released a SWC export plugin for the popular <span class="postbody">open-source ActionScript development environment </span><a title="FlashDevelop" onclick="pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post-new.php');" href="http://www.flashdevelop.org" target="_blank">FlashDevelop</a>. The plugin is based on <em>compc.exe</em> but it hides all the ugly details from you.</p>
<p>This tutorial will guide you through the steps of creating a simple ActionScript component and compilling it into a SWC file.<br />
<span id="more-6"></span></p>
<h3>Installing the SWC Export Plugin</h3>
<p>The plugin installation is a piece of cake. Download the plugin <a title="Download ExportSWC.dll" onclick="pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');" href="http://www.flashdevelop.org/community/viewtopic.php?t=2987&amp;start=0" target="_blank">from here</a>, unzip the <em>ExportSWC.dll</em> file and place it in FlashDevelop&#8217;s <em>Plugin</em> folder. (If you don&#8217;t know where to find this folder go to the &#8220;Tools&#8221; menu and click on &#8220;Application Files&#8230;&#8221;.) After restarting FlashDevelop you should see a new icon in the toolbar:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/export_swc_icon.gif" alt="ExportSWC Icon" width="260" height="40" /></p>
<h3>Sample Project: A Status Component</h3>
<p>You will be creating a simple status component as a sample project. It displays different icons according to the status set. As for the icons, I&#8217;m using two icons from the free &#8220;Silk&#8221; icon set which can be found on <a title="Silk Icon Set" onclick="pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');" href="http://www.famfamfam.com/lab/icons/silk/" target="_blank">www.famfamfam.com</a>:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/famfamfam_icons.gif" alt="Sample Icons" width="40" height="20" /></p>
<p>The first icon is supposed to represent an &#8220;OK&#8221; status, and the other one signals an &#8220;Error&#8221; status. (For example, you could use this component as an item renderer in a Flex DataGrid for displaying the status of  the listed items.)</p>
<h3>Setting up the FlashDevelop Project</h3>
<p>Create a new project in FlashDevelop and select &#8220;ActionScript 3 / Default Project&#8221; as template. Call the project &#8220;StatusComponent&#8221; and save it. If you look at the project panel you will notice that FlashDevelop has already created two folders (<em>bin</em> and <em>src</em>) and a class file (<em>Main.as</em>) for you. Please make sure that the <em>src</em> folder is the only folder in your classpaths settings:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/status_component_properties.gif" alt="Project Properties" width="372" height="249" /></p>
<p>Now follow these steps:</p>
<ol>
<li>Create a third folder on the same level as the <em>bin</em> and <em>src</em> folders and call it <em>assets</em>.</li>
<li>Copy the two icon files into this new folder.</li>
<li>Under the <em>src</em> directory create a hierarchy of three sub directories: <em>com/log2e/components</em>. (I&#8217;m using my domain name here, you can name them whatever you like, of course. But it&#8217;s considered good practice to organize your class packages with the help of unique names such as domain names.)</li>
<li>Finally, move the class file <em>Main.as</em> into the <em>components</em> folder and rename the file to <em>StatusComponent.as</em>.</li>
</ol>
<p>Your project panel should look like this now:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/status_component_project_panel.gif" alt="Project Panel" width="416" height="220" /></p>
<p>Now open the <em>StatusComponet.as</em> file.</p>
<h3>The ActionScript Code</h3>
<p>I&#8217;m posting the complete class code first, and then I will go through the code step by step.</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">components</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Bitmap</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> StatusComponent <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STATUS_UNSET:<span class="kw3">String</span> = <span class="st0">&quot;status_unset&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STATUS_OK:<span class="kw3">String</span> = <span class="st0">&quot;status_ok&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STATUS_ERROR:<span class="kw3">String</span> = <span class="st0">&quot;status_error&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>Embed<span class="br0">&#40;</span>source=<span class="st0">&quot;../../../../assets/accept.png&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> iconOK:<span class="kw2">Class</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>Embed<span class="br0">&#40;</span>source=<span class="st0">&quot;../../../../assets/exclamation.png&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> iconError:<span class="kw2">Class</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _status:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _statusIcon:Bitmap;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> StatusComponent<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_status = STATUS_UNSET;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> <span class="kw3">status</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _status;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> <span class="kw3">status</span><span class="br0">&#40;</span> <span class="kw3">status</span>:<span class="kw3">String</span> <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_status = <span class="kw3">status</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>_statusIcon<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; removeChild<span class="br0">&#40;</span>_statusIcon<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">switch</span><span class="br0">&#40;</span>_status<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> STATUS_OK:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_statusIcon = <span class="kw2">new</span> iconOK<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span>_statusIcon<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> STATUS_ERROR:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_statusIcon = <span class="kw2">new</span> iconError<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span>_statusIcon<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Line 1</strong>: The package definition reflects the directory structure we created below the <em>src</em> folder.</p>
<p><strong>Lines 3-4</strong>: We only need <code>Sprite</code> and <code>Bitmap</code> as display objects.</p>
<p><strong>Line 6</strong>: Since we are creating a visual component the <code>StatusComponent</code> class extends <code>Sprite</code>.</p>
<p><strong>Lines 8-10</strong>: The three constants hold the status definitions as strings. They are accessible from outside the component (for example, <code>StatusComponent.STATUS_OK</code>).</p>
<p><strong>Lines 12-15</strong>: The two [Embed] metadata tags include the two icons in the SWF and SWC files at compile-time. Instances of the embedded assets can be created by the standard <code>new</code> syntax.</p>
<p><strong>Lines 17-18</strong>: The two private variables hold the current status information and the displayed icon.</p>
<p><strong>Lines 20-22</strong>: When a new instance of the component is created the constructor sets the initial status to unset.</p>
<p><strong>Lines 25-28</strong>: The getter method for the <em>status</em> property.</p>
<p><strong>Lines 30-50</strong>: The setter method for the <code>status</code> property. This method not only updates the private <code>_status</code> property, but also removes the currently displayed icon from the display list and instantiates a new icon according to the status set.</p>
<h3>Exporting the SWC File</h3>
<p>All the hard work is done. The SWC file is only a mouse click away. Of course, you can test the component first by hitting F5. In this case you should modify the constructor and set the initial value to <code>STATUS_OK</code> or <code>STATUS_ERROR</code>, otherwise you will only see a blank canvas when you publish the movie. For the release version of the component set the initial value back to <code>STATUS_UNSET</code>. Now click on the new &#8220;Export SWC&#8221; icon and the magic happens right in front of your eyes&#8230;</p>
<p>If everything went ok, you will see a new file in your <em>bin</em> folder:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/status_component_bin_folder.gif" alt="bin Folder" width="171" height="50" /></p>
<p>If you tested the component (like I did) you also have the SWF file in the <em>bin</em> folder. Actually you can delete the <em>StatusComponent.swf</em> file now, it&#8217;s no longer needed.</p>
<h3>Using the StatusComponent</h3>
<p>For a quick test of the component create a new default ActionScript 3 project in FlashDevelop, call it &#8220;StatusComponentTest&#8221;, and make the <em>StatusComponent.swc</em> file accessible to your project by adding its path to the new project&#8217;s classpaths. The project panel should look like this:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/status_component_test_project_panel.gif" alt="Test Project Panel" width="416" height="153" /></p>
<p>Now this is important: Right-click on the <em>StatusComponent.swc</em> file and select &#8220;Add To Library&#8221;. Otherwise the class(es) in your SWC file will not be recognized.</p>
<p>Here&#8217;s a simple test class (<em>StatusComponentTest.as</em>) that instantiates the component and sets the status to <code>STATUS_OK</code>. The <code>trace()</code> statement sends the string value of the current status to the output panel.</p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1">package</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">components</span>.<span class="me1">StatusComponent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageScaleMode</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageAlign</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> StatusComponentTest <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _statusComponent:StatusComponent; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> StatusComponentTest<span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">scaleMode</span> = StageScaleMode.<span class="me1">NO_SCALE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">align</span> = StageAlign.<span class="me1">TOP_LEFT</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_statusComponent = <span class="kw2">new</span> StatusComponent<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_statusComponent.<span class="kw3">status</span> = StatusComponent.<span class="me1">STATUS_OK</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span>_statusComponent<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span>_statusComponent.<span class="kw3">status</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>I hope you enjoyed the tutorial. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/07/creating-a-swc-component-in-flashdevelop/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
