<?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>Flashcommander</title>
	<atom:link href="http://flashcommander.org/feed" rel="self" type="application/rss+xml" />
	<link>http://flashcommander.org</link>
	<description>Flex, Flash, Air, Android, web development</description>
	<lastBuildDate>Thu, 10 May 2012 09:47:36 +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></title>
		<link>http://flashcommander.org/blog/846</link>
		<comments>http://flashcommander.org/blog/846#comments</comments>
		<pubDate>Thu, 10 May 2012 09:47:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://flashcommander.org/?p=846</guid>
		<description><![CDATA[stream]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.performgroup.com/ptvFlash/lglive/livestreamtest.html">stream</a></p>
]]></content:encoded>
			<wfw:commentRss>http://flashcommander.org/blog/846/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash multiplayer game on Facebook</title>
		<link>http://flashcommander.org/blog/flash-multiplayer-game-on-facebook</link>
		<comments>http://flashcommander.org/blog/flash-multiplayer-game-on-facebook#comments</comments>
		<pubDate>Thu, 26 May 2011 08:53:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[multiplayer]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[real-time]]></category>

		<guid isPermaLink="false">http://flashcommander.org/?p=728</guid>
		<description><![CDATA[I have created the online version of the popular board game Carcasson on Facebook. This is a real-time, multiplayer game, the server side is built in Python. You need a Facebook account to try it. If you are behind a &#8230; <a href="http://flashcommander.org/blog/flash-multiplayer-game-on-facebook">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have created the online version of the popular board game <a href="http://apps.facebook.com/carcasson">Carcasson on Facebook</a>.<br />
This is a real-time, multiplayer game, the server side is built in Python.<br />
You need a Facebook account to try it.<br />
If you are behind a corprate firewall chances are that you won&#8217;t be able to connect to the rtmp server.</p>
<p><img class="alignnone size-full wp-image-729" title="ccson_profile" src="http://flashcommander.org/wordpress/wp-content/uploads/ccson_profile.jpg" alt="" width="180" height="130" /></p>
<p>Here is the link to the game: <a href="http://apps.facebook.com/carcasson/">http://apps.facebook.com/carcasson/</a></p>
<p>And here is some info about the rules: <a href="http://www.facebook.com/apps/application.php?id=155395464480894&amp;sk=info">http://www.facebook.com/apps/application.php?id=155395464480894&amp;sk=info</a></p>
<p>Feel free to &#8220;Like&#8221; it <img src='http://flashcommander.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://flashcommander.org/blog/flash-multiplayer-game-on-facebook/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building data driven applications in Adobe Flex &#8211; presentation at ELTE University, Budapest</title>
		<link>http://flashcommander.org/blog/building-data-driven-applications-in-adobe-flex</link>
		<comments>http://flashcommander.org/blog/building-data-driven-applications-in-adobe-flex#comments</comments>
		<pubDate>Fri, 08 Apr 2011 12:42:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Air]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flashcommander.org/?p=695</guid>
		<description><![CDATA[I gave a presentation with the above title at ELTE University, Budapest. Here are the slides of the presentation. And here is a short outline: introduction to the Flash Player and Platform basics of the Flex framework Flash Builder IDE, &#8230; <a href="http://flashcommander.org/blog/building-data-driven-applications-in-adobe-flex">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I gave a presentation with the above title at ELTE University, Budapest.<br />
Here are the <a href="https://docs.google.com/present/edit?id=0AUcmArMo7nn_ZGdyeDZrcXNfNDEzNWJtNjloYg&#038;hl=en">slides of the presentation.</a><br />
And here is a short outline:</p>
<ul>
<li>introduction to the Flash Player and Platform</li>
<li>basics of the Flex framework</li>
<li>Flash Builder IDE, new features in v. 4</li>
<li>I am going to build a demo application that demonstrates:
<ul>
<li>Flex component architecture (Spark)</li>
<li>FXG assets</li>
<li>data centric development features in Flash Builder 4 -</li>
<li>remoting with the Zend AMF Php framework</li>
</ul>
</li>
<li>a few words about mobile development in Flash Builder Burrito, AIR</li>
<li>new API&#8217;s in the Flash Player: Molehill 3D, peer-to-peer</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://flashcommander.org/blog/building-data-driven-applications-in-adobe-flex/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Online shelf designer</title>
		<link>http://flashcommander.org/blog/online-shelf-designer</link>
		<comments>http://flashcommander.org/blog/online-shelf-designer#comments</comments>
		<pubDate>Fri, 11 Feb 2011 13:40:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://flashcommander.org/?p=659</guid>
		<description><![CDATA[My latest work is this online shelf designer application built in Flash: http://polcmeretre.hu You can quickly build your own shelfed cupboard, choose material and instantly see the price. Have a play with it]]></description>
			<content:encoded><![CDATA[<p>My latest work is this online shelf designer application built in Flash: <a href="http://polcmeretre.hu">http://polcmeretre.hu</a><br />
You can quickly build your own shelfed cupboard, choose material and instantly see the price.<br />
Have a play with it <img src='http://flashcommander.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://polcmeretre.hu"><img class="alignnone size-full wp-image-665" title="shelf designer" src="http://flashcommander.org/wordpress/wp-content/uploads/preview-e1297431503777.png" alt="shelf designer" width="480" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://flashcommander.org/blog/online-shelf-designer/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QuickLoader update</title>
		<link>http://flashcommander.org/blog/quickloader-update</link>
		<comments>http://flashcommander.org/blog/quickloader-update#comments</comments>
		<pubDate>Fri, 04 Feb 2011 14:07:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://flashcommander.org/?p=648</guid>
		<description><![CDATA[QuickLoader has been updated to use Flashcommander 2.5 server side code. QuikLoader is the desktop AIR version of FLashcommander, the online filemanager. Download QuickLoader 1.5 here. After installation the Air program automatically connects to http://flashcommander.org. To change this edit the &#8230; <a href="http://flashcommander.org/blog/quickloader-update">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>QuickLoader has been updated to use <a href="/flashcommander">Flashcommander 2.5</a> server side code.<br />
QuikLoader is the desktop AIR version of FLashcommander, the online filemanager.</p>
<p><a href="/quickloader/download">Download QuickLoader 1.5 here.</a></p>
<p>After installation the Air program automatically connects to http://flashcommander.org.<br />
To change this edit the config.xml in badge folder.</p>
]]></content:encoded>
			<wfw:commentRss>http://flashcommander.org/blog/quickloader-update/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AutoComplete improvement</title>
		<link>http://flashcommander.org/blog/autocomplete-improvement</link>
		<comments>http://flashcommander.org/blog/autocomplete-improvement#comments</comments>
		<pubDate>Fri, 28 Jan 2011 10:32:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://flashcommander.org/?p=623</guid>
		<description><![CDATA[I have made a small 2 fixes to the AutoComplete component: If control was set to requireSelection=false and tabbed away after entering some text in the input the text was cleared on focusOut event; this is fixed now. Clicking into &#8230; <a href="http://flashcommander.org/blog/autocomplete-improvement">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have made a small 2 fixes to the AutoComplete component:</p>
<ul>
<li>If control was set to <code>requireSelection=false</code> and tabbed away after entering some text in the input the text was cleared on <code>focusOut</code> event; this is fixed now.</li>
<li>Clicking into the control when it already had focus didn&#8217;t open it even if there was a selection. Now it does open.</li>
</ul>
<p>Many thanks for the suggestions, guys.</p>
]]></content:encoded>
			<wfw:commentRss>http://flashcommander.org/blog/autocomplete-improvement/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flashcommander 2.5 &#8211; freeware</title>
		<link>http://flashcommander.org/blog/flashcommander-2-5-is-here</link>
		<comments>http://flashcommander.org/blog/flashcommander-2-5-is-here#comments</comments>
		<pubDate>Fri, 05 Nov 2010 11:10:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://flashcommander.org/?p=599</guid>
		<description><![CDATA[Flashcommander 2.5 is available &#8211; try the demo here. There have been numerous bug fixes, the most important is full support for UTF-8 file names. The video and mp3 player modules have been rebuilt based on Spark components. I have &#8230; <a href="http://flashcommander.org/blog/flashcommander-2-5-is-here">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Flashcommander 2.5 is available &#8211; <a href="/flashcommander/demo">try the demo here.</a><br />
There have been numerous bug fixes, the most important is full support for UTF-8 file names.<br />
The video and mp3 player modules have been rebuilt based on Spark components.<br />
I have decided to give this version for free but if you find it useful feel free to donate  <img src='http://flashcommander.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<br />
<a href="/flashcommander/download">Download Flashcommander 2.5 here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://flashcommander.org/blog/flashcommander-2-5-is-here/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex 4 Mp3 player</title>
		<link>http://flashcommander.org/blog/flex-4-mp3-player</link>
		<comments>http://flashcommander.org/blog/flex-4-mp3-player#comments</comments>
		<pubDate>Thu, 29 Apr 2010 15:04:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[component]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[mp3 player]]></category>
		<category><![CDATA[Spark]]></category>

		<guid isPermaLink="false">http://flashcommander.org/?p=460</guid>
		<description><![CDATA[For some reason the Spark VideoPlayer doesn&#8217;t play back mp3 files so I decided to build one. I have reused the skin elements of VideoPlayer so the look and feel is the same. The comp doesn&#8217;t dispatch any playback events &#8230; <a href="http://flashcommander.org/blog/flex-4-mp3-player">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For some reason the Spark VideoPlayer doesn&#8217;t play back mp3 files so I decided to build one.<br />
I have reused the skin elements of VideoPlayer so the look and feel is the same.</p>
<p><span id="more-460"></span></p>
<p>The comp doesn&#8217;t dispatch any playback events so if you need that you have to add them yourself.</p>
<p><a href="/sparkmp3player/bin-release/srcview/index.html" target="blank">Click here to view and download source code.</a></p>
<p><iframe src="/sparkmp3player/bin-release/main.html" width="400" height="120" frameborder="0"></iframe></p>
<p>Usage is simple:</p>
<pre>
<span class="MXMLComponent_Tag">&lt;components:Mp3Player</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">mp3Player</span><span class="MXMLDefault_Text">" width="</span><span class="MXMLString">100%</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">1</span><span class="MXMLDefault_Text">"
                      source="</span><span class="MXMLString">../assets/sample.mp3</span><span class="MXMLDefault_Text">"
                      autoPlay="</span><span class="MXMLString">true</span><span class="MXMLDefault_Text">"
                      volume="</span><span class="MXMLString">0.5</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/&gt;</span>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://flashcommander.org/blog/flex-4-mp3-player/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using Google Search Suggest with Flex 4 AutoComplete</title>
		<link>http://flashcommander.org/blog/google-search-suggest-flex-4-autocomplete</link>
		<comments>http://flashcommander.org/blog/google-search-suggest-flex-4-autocomplete#comments</comments>
		<pubDate>Sat, 06 Feb 2010 15:53:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[AutoComplete]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[Google Search]]></category>
		<category><![CDATA[Google Suggest]]></category>
		<category><![CDATA[Spark]]></category>

		<guid isPermaLink="false">http://flashcommander.org/?p=385</guid>
		<description><![CDATA[This article demonstrates how to use Flex 4 AutoComplete with Google Search Suggest. First I use the Google Suggest API to show search suggestions in the AutoComplete as the user types in the input. Then I use the Google Search &#8230; <a href="http://flashcommander.org/blog/google-search-suggest-flex-4-autocomplete">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This article demonstrates how to use <a href="/blog/flex-4-autocomplete">Flex 4 AutoComplete</a> with Google Search Suggest.<br />
First I use the Google Suggest API to show search suggestions in the AutoComplete as the user types in the input. Then I use the Google Search API to perform a Google search with the selected phrase.<br />
<span id="more-385"></span><br />
Let&#8217;s see first how the finished application works &#8211; <strong>View source is enabled</strong>:</p>
<p><iframe class="flashcontent" src="/SparkAutoComplete/bin-release/googlesearch.html" width="100%" height="300" frameborder="0"></iframe></p>
<p>When user starts to type into search input we use an <code>HttpService</code> to get search suggestions from Google. </p>
<p>You can notice in the code sample below that the direct url is commented out. This is because the lack of a crossdomain.xml on Google&#8217;s servers prevent Flash from calling this url. So we call a php script instead in our domain that will load the data from Google and sends it back to Flash. </p>
<p>You can call the direct url in a browser to see the structure of the xml result. The result is an xml list that we feed into the dataprovider of the AutoComplete.</p>
<pre><span class="MXMLComponent_Tag">&lt;components:AutoComplete</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">autoC</span><span class="MXMLDefault_Text">" change="</span><span class="ActionScriptDefault_Text">onChange</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span><span class="MXMLDefault_Text">" labelFunction="</span><span class="MXMLString">labelFunction</span><span class="MXMLDefault_Text">"
    select="</span><span class="ActionScriptDefault_Text">search</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span><span class="MXMLDefault_Text">" enter="</span><span class="ActionScriptDefault_Text">search</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span><span class="MXMLDefault_Text">" width="</span><span class="MXMLString">200</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/&gt;</span>

<span class="MXMLComponent_Tag">&lt;s:HTTPService</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">googleSuggest</span><span class="MXMLDefault_Text">" result="</span><span class="ActionScriptDefault_Text">onResult</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">event</span><span class="ActionScriptBracket/Brace">)</span><span class="MXMLDefault_Text">"
    showBusyCursor="</span><span class="MXMLString">true</span><span class="MXMLDefault_Text">"
    resultFormat="</span><span class="MXMLString">e4x</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/&gt;</span>

<span class="ActionScriptReserved">private</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">onChange</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">{</span>
    <span class="ActionScriptvar">var</span><span class="ActionScriptDefault_Text"> s = autoC.text;</span>
    <span class="ActionScriptComment">//googleSuggest.url = "http://google.com/complete/search?output=toolbar&amp;q=" + s;</span>
    <span class="ActionScriptDefault_Text">googleSuggest</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">url</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptString">"../data/googlesuggest.php?q="</span> <span class="ActionScriptOperator">+</span> <span class="ActionScriptDefault_Text">s</span>;
    <span class="ActionScriptDefault_Text">googleSuggest</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">send</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>;
<span class="ActionScriptBracket/Brace">}</span>

<span class="ActionScriptReserved">private</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">onResult</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">event</span>:<span class="ActionScriptDefault_Text">ResultEvent</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">{</span>
    <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">xmlList</span>:<span class="ActionScriptDefault_Text">XMLList</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">googleSuggest</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">lastResult</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">CompleteSuggestion</span> <span class="ActionScriptReserved">as</span> <span class="ActionScriptDefault_Text">XMLList</span>
    <span class="ActionScriptDefault_Text">autoC</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">dataProvider</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptReserved">new</span> <span class="ActionScriptDefault_Text">XMLListCollection</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">xmlList</span><span class="ActionScriptBracket/Brace">)</span>;
<span class="ActionScriptBracket/Brace">}</span>
</pre>
<p>We use another HttpService to call Google Search &#8211; this time the result format is a JSON string.<br />
No proxy is needed because this service has a crossdomain.xml in place and accepts Flash calls.</p>
<p>The process is simple: when user presses enter or selects a suggestion in the AutoComplete we send the text to Google. </p>
<p>The result is then converted from JSON into Actionscript and displayed in a datagroup.</p>
<pre><span class="MXMLComponent_Tag">&lt;s:HTTPService</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">googleSearch</span><span class="MXMLDefault_Text">" result="</span><span class="ActionScriptDefault_Text">onSearchResult</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">event</span><span class="ActionScriptBracket/Brace">)</span><span class="MXMLDefault_Text">"
    showBusyCursor="</span><span class="MXMLString">true</span><span class="MXMLDefault_Text">"
    resultFormat="</span><span class="MXMLString">text</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/&gt;</span>

<span class="ActionScriptReserved">private</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">search</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">{</span>
    <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">s</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">autoC</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">text</span>
    <span class="ActionScriptDefault_Text">googleSearch</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">url</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptString">'http://ajax.googleapis.com/ajax/services/search/web'</span>;
    <span class="ActionScriptDefault_Text">googleSearch</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">request</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">v</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptString">'1.0'</span>;
    <span class="ActionScriptDefault_Text">googleSearch</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">request</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">q</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">s</span>;
    <span class="ActionScriptDefault_Text">googleSearch</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">send</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>;
<span class="ActionScriptBracket/Brace">}</span>

<span class="ActionScriptReserved">private</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">onSearchResult</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">event</span>:<span class="ActionScriptDefault_Text">ResultEvent</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">{</span>
    <span class="ActionScriptvar">var</span> <span class="ActionScriptDefault_Text">result</span>:<span class="ActionScriptDefault_Text">Object</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptDefault_Text">JSON</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">decode</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">event</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">result</span> <span class="ActionScriptReserved">as</span> <span class="ActionScriptDefault_Text">String</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">responseData</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">results</span>;
    <span class="ActionScriptDefault_Text">searchResults</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">dataProvider</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptReserved">new</span> <span class="ActionScriptDefault_Text">ArrayList</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">result</span> <span class="ActionScriptReserved">as</span> <span class="ActionScriptDefault_Text">Array</span><span class="ActionScriptBracket/Brace">)</span>;
<span class="ActionScriptBracket/Brace">}</span>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://flashcommander.org/blog/google-search-suggest-flex-4-autocomplete/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flex 4 AutoComplete</title>
		<link>http://flashcommander.org/blog/flex-4-autocomplete</link>
		<comments>http://flashcommander.org/blog/flex-4-autocomplete#comments</comments>
		<pubDate>Thu, 21 Jan 2010 16:35:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[AutoComplete]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[Gumbo]]></category>
		<category><![CDATA[Spark]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=36</guid>
		<description><![CDATA[As the by-product of an enterprise project I have built an AutoComplete component in Flex 4. Using the new Spark architecture component logic and appearance can be separated in a clean way. The component was updated for Flash Builder release &#8230; <a href="http://flashcommander.org/blog/flex-4-autocomplete">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As the by-product of an enterprise project I have built an AutoComplete component in Flex 4.<br />
Using the new Spark architecture component logic and appearance can be separated in a clean way.</p>
<p><strong>The component was updated for Flash Builder release SDK.</strong></p>
<p><span id="more-36"></span></p>
<p>Here is a demo app showing two ways of usage:</p>
<p><iframe class="flashcontent" src="/SparkAutoComplete/bin-release/main.html" width="100%" height="300" frameborder="0"></iframe></p>
<p><a href="/SparkAutoComplete/bin-release/srcview/index.html" target="blank">Click here to view source code and download project.</a></p>
<p>You can use the following <strong>properties </strong>to customize the component:</p>
<ul>
<li><code>minChars</code> &#8211; the number of caharcters typed by the user after which completion begins</li>
<li><code>prefixOnly</code> &#8211; if true, only items where the beginning matches the typed text will be offered for completion</li>
<li><code>forceOpen</code> &#8211; if true, list will pop-up when comp receives focus</li>
<li><code>requireSelection</code> &#8211; if true, first match is always selected and filled into the TextInput if user presses Tab</li>
<li><code>dataProvider</code> &#8211; allowed types are Array, ArrayCollection, XmlListCollection; can also be asigned dynamically, i.e. with the result of an asynchronous call</li>
<li><code>labelField, labelFunction</code> &#8211; standard Flex labelField and labelFunction</li>
<li><code>returnField</code> &#8211; set this if you want the component to fill a value different from labelField or labelFunciton</li>
<li><code>sortFunction</code> &#8211; function for sorting matching items, default is alphabetically ascending</li>
<li><code>text</code> &#8211; text of the input text</li>
<li><code>selectedItem</code> &#8211; selectedItem of list; read and write,set to null to reset selection</li>
<li><code>selectedIndex</code> &#8211; selectedIndex of list, read only</li>
</ul>
<p>The component dispatches 3 custom <strong>events</strong>:</p>
<ul>
<li><code>select</code> &#8211; type:CustomEvent; dispatched when user selects a list item by mouse or pressing Enter; listen to this to detect selection made by user</li>
<li><code>enter</code> &#8211; type:FlexEvent, enter event of the TextInput</li>
<li><code>change</code> &#8211; type:TextOperationEvent, change event of the TextInput</li>
</ul>
<p>The visual appearance is defined by the skin file <code>AutoCompleteSkin.as</code>. The skin consist of a <code>TextInput </code>and a <code>List </code>component placed in a <code>PopUpAnchor</code>.</p>
<pre>
    <span class="MXMLComponent_Tag">&lt;s:PopUpAnchor</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">popUp</span><span class="MXMLDefault_Text">"  displayPopUp="</span><span class="MXMLString">false</span><span class="MXMLDefault_Text">"
        top="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" bottom="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" left="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">"
        popUpWidthMatchesAnchorWidth="</span><span class="MXMLString">true</span><span class="MXMLDefault_Text">"
        popUpPosition="</span><span class="MXMLString">below</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">&gt;</span>

        <span class="MXMLComponent_Tag">&lt;s:Group</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">dropDown</span><span class="MXMLDefault_Text">" minHeight="</span><span class="MXMLString">22</span><span class="MXMLDefault_Text">" width="</span><span class="MXMLString">100%</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">&gt;</span>

            <span class="MXMLComponent_Tag">&lt;s:List</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">list</span><span class="MXMLDefault_Text">" width="</span><span class="MXMLString">100%</span><span class="MXMLDefault_Text">" minWidth="</span><span class="MXMLString">22</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/&gt;</span>

        <span class="MXMLComponent_Tag">&lt;/s:Group&gt;</span>

    <span class="MXMLComponent_Tag">&lt;/s:PopUpAnchor&gt;</span>

    <span class="MXMLComponent_Tag">&lt;s:TextInput</span><span class="MXMLDefault_Text"> id="</span><span class="MXMLString">inputTxt</span><span class="MXMLDefault_Text">" left="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" right="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" top="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" bottom="</span><span class="MXMLString">0</span><span class="MXMLDefault_Text">" </span><span class="MXMLComponent_Tag">/&gt;</span>
</pre>
<p>The logic in <code>AutoComplete</code> works like this: when the user types in text that matches with any items in the list we pop up the list showing these items.<br />
There is a little trick here &#8211; all keyboard events are dispatched by the TextInput but we need to be able to select items in the list with the cursor keys. What we do is to re-dispatch some keyboard events on the list:</p>
<pre>
    <span class="ActionScriptReserved">private</span> <span class="ActionScriptfunction">function</span> <span class="ActionScriptDefault_Text">onKeyDown</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">event</span>: <span class="ActionScriptDefault_Text">KeyboardEvent</span><span class="ActionScriptBracket/Brace">)</span> : <span class="ActionScriptReserved">void</span><span class="ActionScriptBracket/Brace">{</span>

        <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">popUp</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">displayPopUp</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">{</span>
            <span class="ActionScriptReserved">switch</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">event</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">keyCode</span><span class="ActionScriptBracket/Brace">)</span><span class="ActionScriptBracket/Brace">{</span>
                <span class="ActionScriptReserved">case</span> <span class="ActionScriptDefault_Text">Keyboard</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">UP</span>:
                <span class="ActionScriptReserved">case</span> <span class="ActionScriptDefault_Text">Keyboard</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">DOWN</span>:
                <span class="ActionScriptReserved">case</span> <span class="ActionScriptDefault_Text">Keyboard</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">END</span>:
                <span class="ActionScriptReserved">case</span> <span class="ActionScriptDefault_Text">Keyboard</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">HOME</span>:
                <span class="ActionScriptReserved">case</span> <span class="ActionScriptDefault_Text">Keyboard</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">PAGE_UP</span>:
                <span class="ActionScriptReserved">case</span> <span class="ActionScriptDefault_Text">Keyboard</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">PAGE_DOWN</span>:
                    <span class="ActionScriptDefault_Text">inputTxt</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">selectRange</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">text</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">length</span><span class="ActionScriptOperator">,</span> <span class="ActionScriptDefault_Text">text</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">length</span><span class="ActionScriptBracket/Brace">)</span>
                    <span class="ActionScriptDefault_Text">list</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">dispatchEvent</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">event</span><span class="ActionScriptBracket/Brace">)</span>
                    <span class="ActionScriptReserved">break</span>;
                <span class="ActionScriptReserved">case</span> <span class="ActionScriptDefault_Text">Keyboard</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">ENTER</span>:
                    <span class="ActionScriptDefault_Text">acceptCompletion</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>;
                    <span class="ActionScriptReserved">break</span>;
                <span class="ActionScriptReserved">case</span> <span class="ActionScriptDefault_Text">Keyboard</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">TAB</span>:
                    <span class="ActionScriptReserved">if</span> <span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptDefault_Text">requireSelection</span><span class="ActionScriptBracket/Brace">)</span>
                        <span class="ActionScriptDefault_Text">acceptCompletion</span><span class="ActionScriptBracket/Brace">(</span><span class="ActionScriptBracket/Brace">)</span>;
                    <span class="ActionScriptReserved">else</span>
                        <span class="ActionScriptDefault_Text">popUp</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">displayPopUp</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptReserved">false</span>
                    <span class="ActionScriptReserved">break</span>;
                <span class="ActionScriptReserved">case</span> <span class="ActionScriptDefault_Text">Keyboard</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">ESCAPE</span>:
                    <span class="ActionScriptDefault_Text">popUp</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">displayPopUp</span> <span class="ActionScriptOperator">=</span> <span class="ActionScriptReserved">false</span>
                    <span class="ActionScriptReserved">break</span>;
            <span class="ActionScriptBracket/Brace">}</span>
        <span class="ActionScriptBracket/Brace">}</span>
    <span class="ActionScriptBracket/Brace">}</span>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://flashcommander.org/blog/flex-4-autocomplete/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
	</channel>
</rss>

