<?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>La Fabrick &#187; interactivité</title>
	<atom:link href="http://www.lafabrick.com/blog/tag/interactivite/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lafabrick.com/blog</link>
	<description>Laboratoire d&#039;interfaces riches (Flex, Flash, Air ...)</description>
	<lastBuildDate>Mon, 28 Nov 2011 22:02:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>BarCamp interfaces riches, Lyon, 23/06</title>
		<link>http://www.lafabrick.com/blog/2010/05/12/1880-barcamp-interfaces-riches-lyon-2306/</link>
		<comments>http://www.lafabrick.com/blog/2010/05/12/1880-barcamp-interfaces-riches-lyon-2306/#comments</comments>
		<pubDate>Wed, 12 May 2010 12:41:59 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[Bientôt chez vous]]></category>
		<category><![CDATA[La Fabrick]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[Conférence]]></category>
		<category><![CDATA[interactivité]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=1880</guid>
		<description><![CDATA[Depuis 40 ans, l&#8217;informatique est en r-évolution continue. Non seulement les ordinateurs sont de plus en plus puissants, mais leur utilisation prend chaque jour de nouvelles formes. Interfaces riches, tactiles, vocales, ou encore tangibles, il semble qu&#8217;en terme d&#8217;interfaces homme-machine, la réalité rattrape aujourd&#8217;hui la science fiction. Que vous soyez acteurs dans les nouvelles technologies [...]]]></description>
			<content:encoded><![CDATA[<p><center><img src="http://www.lafabrick.com/blog/wp-content/uploads/2010/05/barcampheaderblog.jpg" alt="barcampheaderblog" title="barcampheaderblog" width="520" height="150" class="aligncenter size-full wp-image-1889" /></center><br />
Depuis 40 ans, l&#8217;informatique est en r-évolution continue. Non seulement les ordinateurs sont de plus en plus puissants, mais leur utilisation prend chaque jour de nouvelles formes. Interfaces riches, tactiles, vocales, ou encore tangibles, il semble qu&#8217;en terme d&#8217;interfaces homme-machine,  la réalité rattrape aujourd&#8217;hui la science fiction.</p>
<p>Que vous soyez acteurs dans les nouvelles technologies ou simplement curieux de voir ce que le présent nous réserve, vous êtes conviés à venir participer au 1er BarCamp dédié aux Interfaces Riches, le 23 juin 2010 à partir de 17h, au cyberCafé du campus de la Doua à Villeurbanne.</p>
<p>Au programme : des  conférences, des ateliers et des démonstrations de ces technologies naissantes ou déjà matures et de leurs usages dans différents domaines (commerce, enseignement, divertissement…). Aux côtés des principaux innovateurs de ce secteur, vous pourrez même, si vous le souhaitez, proposer votre propre présentation dans les tribunes libres prévues à cet effet.</p>
<p>Quelques présentations au menu :</p>
<ul>
<li>Nouvelles expériences utilisateurs multi-canal grâce aux RIA (ipTv, bornes interactives);</li>
<li><a href="http://openscales.org/">OpenScales</a>: client cartographique basé sur les technologies ActionScript3 / Flex / AIR;</li>
<li>Comment développer une RIA moderne en Javascript avec <a href="http://bitbucket.org/ilabs/resthub/">RESTHub</a>.</li>
</ul>
<p>Rendez vous, donc, le 23 juin 2010 pour une rencontre conviviale qui vous donnera l&#8217;occasion de découvrir ou de montrer dès aujourd&#8217;hui, les interfaces de demain.<br />
<center><a href="http://barcamp-lyon.eventbrite.com?ref=ebtn" target="_blank"  ><img border="0" src="http://www.eventbrite.com/registerbutton?eid=675667941" alt="Register for Barcamp interfaces riches in Villeurbanne, France  on Eventbrite" /></a></center><br />
<span id="more-1880"></span><br />
Ce rendre au cyber café de l&#8217;université Lyon1 :<br />
<iframe width="640" height="480" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.fr/maps/ms?ie=UTF8&amp;hl=fr&amp;t=h&amp;msa=0&amp;msid=102461965477805714758.000485da8aecb7c6dbce8&amp;ll=45.779945,4.87263&amp;spn=0.007183,0.013733&amp;z=16&amp;output=embed"></iframe><br /><small>Afficher <a href="http://maps.google.fr/maps/ms?ie=UTF8&amp;hl=fr&amp;t=h&amp;msa=0&amp;msid=102461965477805714758.000485da8aecb7c6dbce8&amp;ll=45.779945,4.87263&amp;spn=0.007183,0.013733&amp;z=16&amp;source=embed" style="color:#0000FF;text-align:left">Cyber café, université Lyon1</a> sur une carte plus grande</small><br />
<br />
toutes les infos du barCamp sur <a href="http://www.facebook.com/#!/group.php?gid=119133324776126">le groupe facebook</a><br />
Partenaires :<br />
<center><img src="http://www.lafabrick.com/blog/wp-content/uploads/2010/05/partenaires2.jpg" alt="partenairebig" title="partenairebig" width="520" height="130" class="aligncenter size-full wp-image-1901" /></center><br />
Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/04/06/84-flash-in-the-can-hymne-a-l-as3/" rel="bookmark" title="6 avril 2007">« Flash In The Can » : hymne a l&#8217;AS3</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/07/05/181-virtual-cabinet-flash-et-interfaces-riches-pour-l-apprentissage-des-langues-3/" rel="bookmark" title="5 juillet 2007">Virtual Cabinet, flash et interfaces riches pour l&#8217;apprentissage des langues (3)</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/05/04/1130-interfaces-tangibles-le-futur-du-multitouch/" rel="bookmark" title="4 mai 2009">Interfaces tangibles : le futur du multitouch</a></li>
<li><a href="http://www.lafabrick.com/blog/2011/07/08/2621-barcamp-lyon-mix-it-flex-java-php-js-cloud-et-chips/" rel="bookmark" title="8 juillet 2011">Barcamp Lyon : Mix-IT, Flex, Java, PHP, JS, Cloud&#8230; (et chips)</a></li>
</ul>
<p><!-- Similar Posts took 15.905 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2010/05/12/1880-barcamp-interfaces-riches-lyon-2306/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Interfaces tangibles : le futur du multitouch</title>
		<link>http://www.lafabrick.com/blog/2009/05/04/1130-interfaces-tangibles-le-futur-du-multitouch/</link>
		<comments>http://www.lafabrick.com/blog/2009/05/04/1130-interfaces-tangibles-le-futur-du-multitouch/#comments</comments>
		<pubDate>Mon, 04 May 2009 21:39:00 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[Bientôt chez vous]]></category>
		<category><![CDATA[Expériences utilisateur]]></category>
		<category><![CDATA[Vu sur le web (2.0)]]></category>
		<category><![CDATA[interactivité]]></category>
		<category><![CDATA[interfaces]]></category>
		<category><![CDATA[multitouch]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=1130</guid>
		<description><![CDATA[Le temps du touché est arrivé. Windows Surface, les initiatives comme NUIGroup, les PC Tactiles HP, le trackPad Apple, l&#8217;IPhone… Le multitouch est partout. On peut imaginer que lorsque tout ce beau monde se sera mis d’accord pour normaliser la gestuelle (bon courage les gars !), il faudra bien repenser nos habitudes à la maison [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-1133" title="audiopad" src="http://www.lafabrick.com/blog/wp-content/uploads/2009/05/audiopad2.jpg" alt="audipad tangible interface" width="360" height="238" /><br />
Le temps du touché est arrivé. <a href="http://www.microsoft.com/surface/">Windows Surface</a>, les initiatives comme <a href="http://www.nuigroup.com/">NUIGroup</a>, les <a href="http://www.hp.com/united-states/campaigns/touchsmart/index.html?jumpid=ex_602_go/touchsmart/touchsmarthome">PC Tactiles HP</a>, le <a href="http://www.apple.com/macbook/features.html">trackPad Apple</a>, <a href="http://www.apple.com/iphone/">l&#8217;IPhone</a>… Le multitouch est partout. On peut imaginer que lorsque tout ce beau monde se sera mis d’accord pour normaliser la gestuelle (bon courage les gars !), il faudra bien repenser nos habitudes à la maison !<br />
<span id="more-1130"></span></p>
<p>Alors le multitouch remplaçant de nos bons vieux claviers / souris ? Pas si sûr ! Pour certains acteurs cela ne fait pas de doute. Pour d’autres en revanche, ces interfaces ne sont que des périphériques supplémentaires, un moyen différent de « consommer ».</p>
<p>Imaginez manipuler un fichier Excel en multitouch… Ça risque d’être assez pénible ! Pour peu que l’on soit un accro des macros ! (bon moi je m’en fou je fais pas d’Excel). Et puis pour l’instant ça fait mal aux doigts ! A force de gesticuler autour de sa table 50 pouces, on prend des crampes…</p>
<p>D’accord mais c’est bien le multitouch ! LA solution ? Les pseudo claviers / souris comme périphériques physiques de la table.  Imaginez un clavier souple ou une souris transparente en plexiglas : pas d’électronique dedans, et tout de même  repérés par la table. Un peu comme les <a href="http://en.wikipedia.org/wiki/Tangible_User_Interface">tables tangibles</a>, reconnaissant des périphériques électroniques (appareils photos…), ou des périphériques de soirée (<a href="http://www.i-bar.ch/en/pictures/">un verre</a>…) ou n’importe quoi qui possède un tag RFID. RFID ou bien par une forme particulière : on peut imaginer des objets de formes différentes, qu’une analyse d’image peu détecter.</p>
<p><object width="425" height="344" data="http://www.youtube.com/v/9fcUCRSyiw8&amp;hl=fr&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/9fcUCRSyiw8&amp;hl=fr&amp;fs=1" /><param name="allowfullscreen" value="true" /></object><br />
<em>slap widgets demo</em></p>
<p>Plusieurs groupes travaillent sur ce type d’interfaces tangibles : le MIT avec le groupe <a href="http://tangible.media.mit.edu/index.php">Tangible Media Group</a>, le Media Computing Group, un groupement de recherche des universités allemandes, avec le projet <a href="http://hci.rwth-aachen.de/slap">SLAP</a> : Silicone Illuminated Active Peripherals.</p>
<p>Et ce n’est qu’un début ! Le monde de la musique <a href="http://www.jamespatten.com/audiopad/">dispose déjà d’interfaces tangibles</a>.</p>
<p>[update] Do you want more ?<br />
Pattie Maes, du Fluid Interface Group &#8211; MIT, à présenter en février dernier leur dernier jouet : «<a href="http://ambient.media.mit.edu/projects.php?action=details&#038;id=68"> the SixthSense</a> » : Minority Report en vrai. Pourquoi avoir un périphérique alors que ses doigts c&#8217;est si bien ?!<br />
<object width="446" height="326"><param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"></param><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent"></param><param name="bgColor" value="#ffffff"></param><param name="flashvars" value="vu=http://video.ted.com/talks/embed/PattieMaes_2009-embed_high.flv&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/PattieMaes-2009.embed_thumbnail.jpg&#038;vw=432&#038;vh=240&#038;ap=0&#038;ti=481" /><embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/embed/PattieMaes_2009-embed_high.flv&#038;su=http://images.ted.com/images/ted/tedindex/embed-posters/PattieMaes-2009.embed_thumbnail.jpg&#038;vw=432&#038;vh=240&#038;ap=0&#038;ti=481"></embed></object></p>
<p>Ils sont aussi à l’origine du projet fou <a href="http://ambient.media.mit.edu/projects.php?action=details&#038;id=35">Siftables</a><br />
<img src="http://www.lafabrick.com/blog/wp-content/uploads/2009/05/siftables.jpg" alt="siftables" title="siftables" width="308" height="253" class="aligncenter size-full wp-image-1166" /></p>
<p>Je vous invite vivement à découvrir<a href="http://ambient.media.mit.edu/projects.php"> l’ensemble des projets</a> de ce groupe : il y a là de quoi rêver sur l’avenir des interfaces !<br />
[/update]</p>
<p>Et là oui ! J’imagine mieux Excel en multitouch !<br />
A suivre de près donc&#8230; A quand un docteur maboul virtuel tangible ?<br />
Et vous, des idées ?Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/07/19/192-un-curseur-des-curseurs/" rel="bookmark" title="19 juillet 2007">Un curseur&#8230; des curseurs ???</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/10/09/1286-max-09-le-multitouch/" rel="bookmark" title="9 octobre 2009">MAX 09 &#8211; Le multitouch</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/02/19/1609-flashplayer-101-et-multi-toucher-caresse-moi-le-flex/" rel="bookmark" title="19 février 2010">Caresse-toi le flex : FlashPlayer 10.1 et Multi-toucher</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/05/12/1880-barcamp-interfaces-riches-lyon-2306/" rel="bookmark" title="12 mai 2010">BarCamp interfaces riches, Lyon, 23/06</a></li>
</ul>
<p><!-- Similar Posts took 13.943 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2009/05/04/1130-interfaces-tangibles-le-futur-du-multitouch/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Hello AFCS ( bye Cocomo ) : première application multi-utilisateurs</title>
		<link>http://www.lafabrick.com/blog/2009/01/31/1040-hello-cocomo-first-app/</link>
		<comments>http://www.lafabrick.com/blog/2009/01/31/1040-hello-cocomo-first-app/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 21:48:24 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[cocomo]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[interactivité]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=1040</guid>
		<description><![CDATA[[ 5 mars 2009 : Mise à jour de l'article : Cocomo devient AFCS et passe en version 0.9.1, corrigeant quelques bugs ] Dans ce 1er exemple d’application Cocomo Adobe Flash Collaboration Services aka A.F.C.S, nous allons développer, à vrai dire «&#160;assembler&#160;», une application de visioconférence intégrant un tchat, des notes partagées et un gestionnaire [...]]]></description>
			<content:encoded><![CDATA[<p>[ 5 mars 2009 : Mise à jour de l'article : <del datetime="2009-03-05T19:23:22+00:00">Cocomo</del> devient AFCS et passe en version 0.9.1, corrigeant quelques bugs ]</p>
<p>Dans ce 1er exemple d’application <del datetime="2009-03-05T19:23:22+00:00">Cocomo</del> <strong>Adobe Flash Collaboration Services</strong> aka <strong>A.F.C.S</strong>, nous allons développer, à vrai dire «&nbsp;assembler&nbsp;», une application de <strong>visioconférence</strong> intégrant un <strong>tchat, </strong>des<strong> notes partagées </strong>et un gestionnaire de <strong>partage de fichiers</strong>. Pour cela nous allons utiliser des <strong>pods</strong>, les composants de plus haut-niveau fournis dans <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS .</p>
<p>L’un des principaux composants d’une application <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS  est le <strong>gestionnaire de session</strong>. C’est lui qui sera chargé de la communication avec les serveurs <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS , et donc de l’identification des utilisateurs, de la gestion de leur connexion, de la synchronisation des données… et plus encore…</p>
<p>Deux composants peuvent jouer ce rôle : <strong>ConnectSessionContainer</strong> et <strong>ConnectSession</strong> ( tous deux implémentent <em><strong>com.adobe.rtc.session.IConnectSession </strong></em>).</p>
<p><img src="http://lafabrick.free.fr/blogImg/Cocomo_prez1-20081218-051847.jpg" alt="Connexion Cocomo" /><br />
<span id="more-1040"></span></p>
<h3>Hello AFCS ( bye Cocomo )</h3>
<p>Pour commencer :</p>
<p>- créer un <strong>nouveau projet Flex</strong>,<br />
- <strong>copier le SWC <del datetime="2009-03-06T16:02:18+00:00">Cocomo</del> AFCS (depuis CocomoSDK_0.9/lib/player 9 ou 10/afcs.swc) et collez-le dans votre répertoire /libs/</strong></p>
<p>Il s’agit d’un composant basé sur la classe Canvas, et intégrant toute la «&nbsp;mécanique&nbsp;» nécessaire à la communication avec les serveurs <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS .</p>
<p>Il est à noter que le ConnectSessionContainer, et donc ses «&nbsp;composants-enfants&nbsp;», resteront invisibles tant que la communication avec salon ne sera pas établie. C’est pour cette raison que nous allons lui intégrer nos <strong><em>pods ( WebCamera, SimpleChat, Notes et FileShare ).</em></strong>Tant que la connexion ne sera pas établie, aucun des composants ne sera visible.</p>
<p>Pour débuter une session, nous devrons renseigner deux propriétés du <strong>container de session</strong> :</p>
<ul>
<li>l’adresse du salon: <strong>roomURL</strong> ( exemple : http://connectnow.acrobat.com/votreCompte/nomSalon )</li>
<li>les identifiants de connexion : <strong>authenticator</strong></li>
</ul>
<p>La transmission des identifiants se fait par l’intermédiaire de la classe <strong>AdobeHSAuthenticator</strong>.Elle a pour fonction d’encapsuler les informations relatives à l’identification( <strong>userName</strong>, <strong>password</strong> ). Plusieurs modes d’authentification sont possibles, nous nous y interresserons plus tard.</p>
<p>Dans un premier temps nous nous contenterons d’inscrire nos identifiants «&nbsp;en dur&nbsp;» dans notre application.</p>
<p>On peut noter que les composants liés à AFCS se référent au namespace ‘AfcsNameSpace’ ( anciennement ‘CocomoNameSpace’ dans version 0.9 )</p>
<pre class="brush: xml">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;mx:Application layout=&quot;absolute&quot;
 xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
 xmlns:rtc=&quot;AfcsNameSpace&quot;
 &gt;
&lt;rtc:ConnectSessionContainer id=&quot;sessionManager&quot; width=&quot;500&quot; height=&quot;400&quot;
 roomURL=&quot;http://connectnow.acrobat.com/yourAccount/roomName&quot;
 authenticator=&quot;{identificator}&quot;
 backgroundColor=&quot;#FFFFFF&quot;
/&gt;
&lt;rtc:AdobeHSAuthenticator id=&quot;identificator&quot;
 userName=&quot;votreLogin&quot; password=&quot;VotreMotDePasse&quot;
/&gt;
&lt;/mx:Application&gt;
</pre>
<p>À ce stade, l’application peut déjà se connecter. Par défaut, dès que le connectSessionContainer est créé, il tente d’initier la communication avec les serveurs. Dans cet exemple, j’ai ajouté une couleur de fond pour le container, de manière à pouvoir observer lorsque la connexion au salon est réussie.</p>
<p>Si vous publiez le projet en mode debug vous verrez les logs relatifs aux communications client/serveur.</p>
<p><img src="http://lafabrick.free.fr/blogImg/Flex_Builder-20081218-065625.jpg" alt="Logs Connexion Serveurs Cocomo" /></p>
<p>Pour vérifier si l’authentification est correcte, nous pouvons déclarer des écouteurs d’événements <strong>AuthenticationEvent.AUTHENTICATION_FAILURE </strong>et <strong>AuthenticationEvent.AUTHENTICATION_SUCCESS </strong>sur <strong>AdobeHSAuthenticator</strong>.</p>
<p>Pour capter le moment où notre application est connectée et synchronisée, nous pouvons ajouter un écouteur d’événement <strong>SessionEvent.SYNCHRONIZATION_CHANGE</strong> sur le container, et surveiller sa propriété ‘<strong>isSynchronized</strong>‘. Nous reviendrons prochainement sur les différents aspects et acteurs en jeu lors de cette synchronisation.</p>
<pre class="brush: xml">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;mx:Application layout=&quot;absolute&quot;
    xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    xmlns:rtc=&quot;AfcsNameSpace&quot;
&gt;
     &lt;mx:Script&gt;
         &lt;![CDATA[
             import mx.controls.Alert;
             import com.adobe.rtc.events.SessionEvent;

             // session&#039;s state
             private var isConnected:Boolean = false;

			// when a &quot;server synchronization&quot; event is dispatched
             public function onSynchro( e:SessionEvent ):void
             {
                 if ( sessionManager.isSynchronized &amp;&amp;  ! isConnected )
                 {
                     Alert.show(&quot;Application connectée&quot;);
                     isConnected = true ;
                 }
             }
     ]]&gt;
 &lt;/mx:Script&gt;
&lt;rtc:ConnectSessionContainer id=&quot;sessionManager&quot;
    width=&quot;100%&quot; height=&quot;100%&quot; backgroundColor=&quot;#FFFFFF&quot;
    authenticator=&quot;{identificator}&quot;
    roomURL=&quot;http://connectnow.acrobat.com/regartdemo/meetingzone&quot;
    synchronizationChange=&quot;onSynchro( event )&quot;
/&gt;
&lt;!-- Authentication component --&gt;
 &lt;rtc:AdobeHSAuthenticator id=&quot;identificator&quot;
   userName=&quot;YourUserName&quot; password=&quot;YourPassword&quot;
   authenticationSuccess=&quot;Alert.show(&#039;authentication success&#039;)&quot;
   authenticationFailure=&quot;Alert.show(&#039;authentication failed&#039;)&quot;/&gt;
&lt;/mx:Application&gt;
</pre>
<p>Maintenant que notre connexion parvient à se connecter au salon, nous allons pouvoir intégrer les pods.</p>
<h3>Utilisation des pods</h3>
<p>Les pods sont des composants collaboratifs «&nbsp;<strong>prêt à l’emploi</strong>«&nbsp;. Lorsque vous utilisez un <strong>ConnectSessionContainer</strong>, il suffit d’insérer vos pods à l’intérieur pour qu’ils puissent repérer la connexion établie et l’utiliser.</p>
<p>À ce jour, les pods disponibles sont :</p>
<ul>
<li><strong>SimpleChat</strong> : composant de «&nbsp;clavardage&nbsp;» permettant l’envoi de messages publics et privés</li>
<li><strong>WebCamera</strong> : composant de visioconférences</li>
<li><strong>FileShare</strong> : composant de partage de fichier ( upload / download )</li>
<li><strong>Note</strong> : composant de partage de notes</li>
<li><strong>Roster</strong> et <strong>HorizontalRoster</strong> : composant de gestion d’utilisateurs</li>
<li><strong>SharedWhiteBoard</strong> : tableau blanc partagé</li>
</ul>
<p>Nous allons maintenant insérer les pods souhaités :</p>
<pre class="brush: xml">

&lt;rtc:ConnectSessionContainer id=&quot;sessionManager&quot; width=&quot;100%&quot; height=&quot;100%&quot; backgroundColor=&quot;#FFFFFF&quot;
   authenticator=&quot;{identificator}&quot;
   roomURL=&quot;http://connectnow.acrobat.com/votreCompte/nomSalon&quot;
   synchronizationChange=&quot;onSynchro( event )&quot;
   &gt;

   &lt;!-- PODS --&gt;
   &lt;mx:VBox width=&quot;50%&quot; height=&quot;100%&quot; horizontalAlign=&quot;center&quot;&gt;

      &lt;rtc:WebCamera id=&quot;webcam&quot; width=&quot;300&quot; /&gt;

      &lt;rtc:SimpleChat id=&quot;chat&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;

   &lt;/mx:VBox&gt;

   &lt;mx:VBox width=&quot;50%&quot; height=&quot;100%&quot;  right=&quot;0&quot;&gt;

     &lt;rtc:FileShare id=&quot;fileManager&quot; width=&quot;100%&quot; height=&quot;50%&quot; /&gt;

      &lt;rtc:Note id=&quot;notes&quot; width=&quot;100%&quot; height=&quot;50%&quot; /&gt;
   &lt;/mx:VBox&gt;
&lt;/rtc:ConnectSessionContainer&gt;
</pre>
<p><img src="http://lafabrick.free.fr/blogImg/hello_cocomo-20081218-081901.jpg" alt="Hello Cocomo" /></p>
<p>Les pods intégrent des mécanismes de gestion de droits. Nous y reviendrons …</p>
<p>Toujours est-il que voilà, vous avez créé votre première application <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS , ou devrais je dire votre première application de «&nbsp;communication en temps réelle&nbsp;». Mais comment faisait-on avant ???…</p>
<h3>Identification et gestion de la connexion aux serveurs</h3>
<p>Bon il manque encore quelque chose peut être… Pour un seul utilisateur çà irait presque… mais c’est pas le but :s…Comment fera-t-on si un jour on trouve des amis et qu’on veut collaborer avec eux ??? Tout le monde va se connecter avec le compte «&nbsp;d’admin&nbsp;» ??? Et n’importe quel décompileur AS3 va pouvoir récupérer les identifiants ? Pas très sécure… Heureusement <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS  nous permet de gérer facilement tous ces aspects.</p>
<p>Les serveurs <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS  permettent plusieurs types d’identification, notamment une connexion en tant que <strong>hôte</strong>, basée sur le compte <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS  Developper, et une connexion en tant <strong>qu’invité</strong>, ne nécessitant qu’un nom de participant.</p>
<p>Nous allons donc supprimer les attributs userName et password de l’AdobeHSAuthenticator, et ajouter un formulaire d’authentification à notre application. Ce formulaire permettra de choisir le type d’identification ( hôte ou invité ) :</p>
<pre class="brush: xml">

&lt;mx:Panel id=&quot;logPanel&quot; &gt;
   &lt;mx:Form&gt;

      &lt;mx:FormItem label=&quot;Login&quot;&gt;
         &lt;mx:TextInput id=&quot;chp_login&quot; /&gt;
      &lt;/mx:FormItem&gt;

      &lt;mx:FormItem label=&quot;your role :&quot; direction=&quot;horizontal&quot; &gt;

         &lt;mx:RadioButtonGroup id=&quot;userRole&quot; /&gt;

         &lt;mx:RadioButton id=&quot;isGuest&quot; groupName=&quot;userRole&quot;
            label=&quot;Guest&quot; value=&quot;{UserRoles.VIEWER}&quot;  selected=&quot;true&quot;
         /&gt;
         &lt;mx:RadioButton id=&quot;isOwner&quot; groupName=&quot;userRole&quot;
            label=&quot;Host&quot; value=&quot;{UserRoles.OWNER}&quot;
         /&gt;
      &lt;/mx:FormItem&gt;

      &lt;mx:FormItem label=&quot;Password&quot;  enabled=&quot;{ userRole.selectedValue == UserRoles.OWNER }&quot;&gt;
         &lt;mx:TextInput id=&quot;field_password&quot; displayAsPassword=&quot;true&quot;  /&gt;
      &lt;/mx:FormItem&gt;

      &lt;mx:FormItem &gt;
         &lt;mx:Button label=&quot;Enter&quot;
            click=&quot;login(chp_login.text , userRole.selectedValue == UserRoles.OWNER ? field_password.text : null  )&quot;
          /&gt;
      &lt;/mx:FormItem&gt;

   &lt;/mx:Form&gt;
&lt;/mx:Panel&gt;
</pre>
<p>La définition des <strong>rôles des utilisateurs</strong> est basée sur des valeurs numériques, définies dans des constantes de la classe <strong>UserRoles</strong>.</p>
<p>Les principaux rôles sont <strong>Owner</strong> ( hôte / propriétaire du salon ), <strong>Publisher</strong> ( participant autorisé à publier sur un ou plusieurs pods ) et <strong>Viewer</strong> ( invité seulement autorisé à utiliser le tchat ). Normallement, les invités ne peuvent utiliser un salon que si l’hôte est présent. Il est possible de modifier la configuration initiale des salons ( droit de publication automatique, persistence des données, entrée libre… ), ainsi que les rôles et les droits des utilisateurs connectés, pour cela nous pourrons utiliser l’application <del datetime="2009-03-05T19:23:22+00:00">CocomoDevConsole</del> AFCSDevConsole ou l’API directement. Mais c’est déjà une autre histoire…</p>
<p>Pour le moment, nous allons permettre à l’utilisateur de s’identifier à l’aide du formulaire. Pour cela nous devons <strong>désactiver la connexion automatique du gestionnaire de session</strong> en déclarant sa propriété <strong>autoLogin=&nbsp;»false&nbsp;»</strong>.</p>
<p>Pour finir, nous allons ajouter une méthode <strong><em>login()</em></strong> qui sera chargée de renseigner le <strong><em>AdobeHSAuthenticator</em></strong>, et de lancer la connexion du gestionnaire de session :</p>
<pre class="brush: js">

private function login ( login:String, password:String ):void
{
   identificator.userName = login;
	//if password is set : log as host
	//else log as guest
   identificator.password = password ;

	// run sessionManager connection
   sessionManager.login();
}
</pre>
<p>Nous allons ensuite rajouter un bouton et une fonction de déconnexion.</p>
<pre class="brush: js">

// disconnection
// in actual 0.9 beta, mostly pods, can&#039;t be re-connected after a disconnection

private function logout():void
{
    sessionManager.logout();

	// close() is supposed to disconnect et remove all childNodes, but seems not work yet
    //sessionManager.close();
}
</pre>
<pre class="brush: xml">

&lt;mx:VBox width=&quot;50%&quot; height=&quot;100%&quot; horizontalAlign=&quot;center&quot; right=&quot;0&quot;&gt;
    &lt;mx:Button label=&quot;Logout&quot; click=&quot;logout()&quot; /&gt;

    &lt;rtc:FileShare id=&quot;fileManager&quot; width=&quot;100%&quot; height=&quot;50%&quot; /&gt;

    &lt;rtc:Note id=&quot;notes&quot; width=&quot;100%&quot; height=&quot;50%&quot; /&gt;
&lt;/mx:VBox&gt;
</pre>
<p>Dès que l’application sera connectée, nous supprimerons le formulaire, et en cas de déconnexion le gestionnaire de session sera supprimé :</p>
<pre class="brush: js">

// for each synchronization event
// : connection, disconnection , state&#039;s change, ...
private function onSynchro( e:SessionEvent ):void
{

	// once application is successfully connected / synchronized
    if ( sessionManager.isSynchronized &amp;&amp; ! isConnected )
    {
        Alert.show(&quot;Application connectée&quot;);

        isConnected = true ;

        removeChild( logPanel );

    } else if ( ! sessionManager.isSynchronized &amp;&amp; isConnected ){
    // if disconnected
    isConnected = false ;

   /* remove the connectSessionContainer
   *  » in this version disconnected pods can&#039;t re-connect
   *
   *  » For re-connect, you can :
   *     - reload html page
   *     - dynamically re-create connectSession and pods
   */
   removeChild( sessionManager );

   // display logout message
   Alert.show( &#039;vous avez quitté la réunion, recharger la page pour entrer à nouveau&#039;);
   }
}
</pre>
<p><strong>La gestion des déconnexions / reconnexions semblent pour le moment un peu instables.</strong> Mais bon on est prévenu, c’est une béta. Après quelques tests, je crois que le meilleur moyen de revenir dans un salon après s’être déconnecté, est de recharger la page.</p>
<p>Accéder aux <a href="http://www.e-actif.com/lab/hello_cocomo">sources complétes</a></p>
<p>Voilà la fin de ce premier exemple d’utilisation de <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS , et il est bien entendu possible d’aller beaucoup plus loin. La prochaine fois nous nous intéresserons de plus près aux différents mécanismes articulés au sein de <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS , et plus globalement à l’architecture du service. Nous utiliserons également la <del datetime="2009-03-05T19:23:22+00:00">CocomoDevConsole</del>AFCSDevConsole et le <strong>LocalConnectionServer</strong>, les deux outils AIR proposés dans le SDK.</p>
<p>D’ici là bonne collaboration !!! <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  </p>
<p>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/12/07/274-cocomo-dbarque-et-personne-me-prvient/" rel="bookmark" title="7 décembre 2007">Cocomo est là et personne me prévient ??!!</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/12/22/568-cocomo-kezako/" rel="bookmark" title="22 décembre 2008">Cocomo ? Kezako ?</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/12/13/506-utiliser-le-dragmanager-de-flex-1ere-partie/" rel="bookmark" title="13 décembre 2008">Utiliser le DragManager de Flex ( 1ère partie )</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/01/21/999-what-is-adobe-cocomo/" rel="bookmark" title="21 janvier 2009">Developing with AFCS a.k.a Cocomo &#8211; Introduction</a></li>
</ul>
<p><!-- Similar Posts took 11.997 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2009/01/31/1040-hello-cocomo-first-app/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Utiliser le DragManager de Flex ( 1ère partie )</title>
		<link>http://www.lafabrick.com/blog/2008/12/13/506-utiliser-le-dragmanager-de-flex-1ere-partie/</link>
		<comments>http://www.lafabrick.com/blog/2008/12/13/506-utiliser-le-dragmanager-de-flex-1ere-partie/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 00:26:26 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[interactivité]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=506</guid>
		<description><![CDATA[Les composants d&#8217;affichage de listes ( List, DataGrid, TileList &#8230; ) intègrent un mécanisme de drag&#8217;n'Drop natif très simple à utiliser. La classe DragManager permet quant à elle de définir des comportements de drag&#8217;n'drop avec n&#8217;importe quel composant graphique Flex. Certains composants propose des propriétés dragEnabled ou dropEnabled permettant de gérer les transferts depuis et vers [...]]]></description>
			<content:encoded><![CDATA[<p>Les composants d&#8217;affichage de listes ( List, DataGrid, TileList &#8230; ) intègrent un mécanisme de drag&#8217;n'Drop natif très simple à utiliser.</p>
<p>La classe <strong><em>DragManager</em></strong> permet quant à elle de définir des comportements de drag&#8217;n'drop avec n&#8217;importe quel composant graphique Flex.</p>
<div class="mceTemp mceIEcenter">
<dl class="wp-caption aligncenter" style="width: 456px;">
<dt class="wp-caption-dt"><a href="http://lafabrick.com/tutos/dragndrop/"><img class=" " src="http://lafabrick.free.fr/blogImg/dragdrop-20081213-015015.jpg" alt="Flex DragManager" width="446" height="157" /></a></dt>
</dl>
</div>
<p><span id="more-506"></span></p>
<p>Certains composants propose des propriétés dragEnabled ou dropEnabled permettant de gérer les transferts depuis et vers eux :</p>
<pre class="brush: xml">

&lt;dataGrid dragEnabled= &quot;true&quot;   dragMoveEnabled = &quot;true&quot; dropEnabled=&quot;true&quot; /&gt;
</pre>
<p>La classe DragManager va nous permettre de créer notre propre mécanisme de glisser / déposer. Voyons un exemple d&#8217;utilisation de cette classe à travers la création d&#8217;un jeu de &laquo;&nbsp;mot dans le désordre&nbsp;&raquo;.</p>
<p><a title="Exemple dragManager" href="http://lafabrick.com/tutos/dragndrop/" target="_blank">Exemple </a> / <a title="Source de l'exemple" href="http://lafabrick.com/tutos/dragndrop/srcview/index.html" target="_blank">Source</a></p>
<h2><strong><span style="color: #808080;"><span style="color: #999999;"><span style="color: #00ccff;">Fonctionnement</span></span></span><span style="color: #999999;"><span style="color: #00ccff;"> </span></span></strong></h2>
<p><strong></strong></p>
<p><strong>Une opération de &laquo;&nbsp;glisser / déposer&nbsp;&raquo; se fait en 3 étapes :</strong></p>
<p>1. le clic sur l&#8217;élément à déplacer </p>
<p>2. Le déplacement de l&#8217;élément</p>
<p>3. Le dépot de l&#8217;élément</p>
<p> </p>
<p>La classe <strong><em>DragManager</em></strong> va nous permettre de gérer  : </p>
<p>- la copie et le transfert des données</p>
<p>- la création d&#8217;une &laquo;&nbsp;image proxy&nbsp;&raquo; ( représentant l&#8217;objet pendant le déplacement )</p>
<p>- la vérification des droits de dépôt de l&#8217;élément</p>
<p><strong></strong></p>
<p> </p>
<p>Durant les trois étapes, nous aurons à écouter les événements de la classe <strong><em>DragEvent</em></strong> émis à la fois par le composant déplacé et par les &laquo;&nbsp;composants cibles potentiels&nbsp;&raquo; ( les composants survolés ).</p>
<p>Nous utiliserons également :</p>
<p><span> </span>- les méthodes statiques de la classe <strong><em>DragManager</em></strong> pour initier le déplacement ( <strong><em>doDrag</em></strong>( &#8230; ) ) et vérifier le droit de dépot ( <strong><em>acceptDragDrop</em></strong>(&#8230;) )</p>
<p><span> </span>-  un objet <strong><em>DragSource</em></strong> pour transférer les données.</p>
<p> </p>
<h2><strong><span style="color: #999999;"><span style="color: #00ccff;">1. Le déplacement</span></span></strong></h2>
<p><strong>1.1  Capter l&#8217;évenement mouseDown</strong></p>
<p>Pour permettre le déplacement d&#8217;un composant graphique Flex,, il faut créer un écouteur d&#8217;événement MouseEvent.<strong>MOUSE_DOWN </strong>sur les objets pouvant être déplacés :</p>
<pre class="brush: xml">

&lt;mx:Label id=&quot;l&quot;

fontSize=&quot;32&quot; text=&quot;{rpSrc.currentItem.lettre}&quot;

horizontalCenter=&quot;0&quot; verticalCenter=&quot;0&quot;

mouseDown=&quot;drag( event )&quot;

/&gt;
</pre>
<p> </p>
<p><strong>1.2  Stocker les données déplacées et initier le déplacement</strong></p>
<p>A chaque émission de cet événement, nous allons:</p>
<p>- créer une instance de <strong><em>DragSource</em></strong> et y rajouter les données à déplacer</p>
<p>-  appeler  la méthode statique <strong><em>DragManager</em></strong><em>.</em><strong><em>doDrag</em></strong>(&#8230;) pour initier le déplacement</p>
<pre class="brush: js">

private function drag( e:MouseEvent):void

{

var dgData:DragSource = new DragSource();
var dgText:String = (e.target.parent as Label).text ;
dgData.addData( dgText  , &quot;lettre&quot; );

dgData.addData( getLetterPosition(dgText) , &quot;position&quot; );

DragManager.doDrag( UIComponent(e.target.parent) , dgData, e );

}
</pre>
<p> </p>
<p>Pour stocker les données dans l&#8217;objet <strong><em>DragSource</em></strong>, on peut utiliser  la méthode <strong><em>addData( donnée</em></strong><em>:Object</em><strong><em> , nomPropriété:String ) </em></strong></p>
<p>Les données peuvent être utilisées pour vérifier les &laquo;&nbsp;droits de dépots&nbsp;&raquo; sur un composant cible.</p>
<p> </p>
<p>La méthode <strong><em>doDrag</em></strong>( &#8230; ) du composant <em>DragManager</em> nécessite quant à elle plusieurs paramètres :</p>
<p> - le <strong><em>dragInitiator</em></strong>  : <em>IUIComponent</em> ( obligatoire ) : le composant ayant initié le déplacement, généralement l&#8217;objet déplacé</p>
<p> - la <strong><em>dragSource</em></strong> : <em>DragSource</em> ( obligatoire ) : instance de DragSource contenant les données devant être déplacées</p>
<p>- le <strong><em>mouseEvent</em></strong> : <em>MouseEvent</em> ( obligatoire ) : événement à l&#8217;origine du déplacement ( MouseEvent.MOUSE_DOWN )</p>
<p>- la<em> </em><strong><em>dragImage</em></strong><em> : IFlexDisplayObject</em> ( optionnel / default = null ) : &laquo;&nbsp;Image proxy&nbsp;&raquo; utilisée pour représenter le composant déplacé durant le déplacement. Si aucune image n&#8217;est défini, un rectangle gris est dessiné par défaut.</p>
<p>- le<em> </em><strong><em>xOffSet</em></strong><em> : Number </em>( optionnel / default = 0) : position horizontale de l&#8217;image proxy par rapport au curseur.</p>
<p>- le<em> </em><strong><em>yOffSet</em></strong><em> : Number </em>( optionnel / default = 0 ) : position verticale de l&#8217;image proxy par rapport au curseur </p>
<p>- l&#8217;<em> </em><strong><em>imageAlpha</em></strong><em> : Number </em>( optionnel / default = 0.5 ) : opacité de l&#8217;image proxy</p>
<p>- <strong><em>allowMove</em></strong><em> </em>: Boolean ( optionnel / defaut = true ) : les données peuvent être transférées ( couper / glisser / coller ) sur un objet cible.</p>
<p> </p>
<p>Le composant n&#8217;est pas lui réellement déplacé avant le drop. <em>DragManager</em> crée une dragImage qui représente le composant déplacé. Une fois le dépôt effectué, si il est autorisé par le composant cible, les données peuvent être  transférées de &laquo;&nbsp;l&#8217;objet source&nbsp;&raquo; à &laquo;&nbsp;l&#8217;objet cible&nbsp;&raquo;.</p>
<p> </p>
<h2><strong><span style="color: #999999;"><span style="color: #00ccff;">2. Survol des cibles</span></span></strong></h2>
<p>Lorsque le composant déplacé survole des composants potentiellement &laquo;&nbsp;cibles&nbsp;&raquo;, ces derniers émettent des événements <strong><em>DragEvent.DRAG_ENTER.</em></strong></p>
<p><strong><em></em></strong></p>
<pre class="brush: xml">

&lt;local:DropableCanvas width=&quot;60&quot; height=&quot;80&quot;

    dragEnter=&quot;isDropable(event)&quot;

&gt;
</pre>
<p> </p>
<p>Nous allons pouvoir écouter ces événements afin de tester si l&#8217;objet peut être déposé sur l&#8217;objet survolé.</p>
<p>Le plus simple est de vérifier si le <strong><em>dragSource</em></strong> contenu dans le <strong><em>DragEvent.DRAG_ENTER</em></strong> contient certaines propriétés.</p>
<p>A chaque <strong><em>dragEnter</em></strong><em>, </em>la méthode <strong><em>isDropable</em></strong><em>()</em> est appelée.</p>
<p>Si la/les proprieté(s) recherchée(s) sont bien présente(s) dans le dragSource , on peut appeler la méthode  <strong><em>DragManager.acceptDragDrop</em></strong><em>( target : IUIComponent )</em> où <em>target</em> est le composant pouvant accepter le dépot des données.</p>
<pre class="brush: js">

private function isDropable( e:DragEvent ):void

{

    var dgData:DragSource = e.dragSource ;

    // référence du champ texte du Canvas Cible

    var cibleText:Label = Container(e.target).getChildAt(0) as Label ;

   // si le champ cible est différent du champ source et que le champ cible est vide : autoriser le drop

   if ( e.dragInitiator != cibleText &amp;amp;&amp;amp; cibleText.text == &quot;&quot; )

       if ( dgData.hasFormat(&quot;lettre&quot;) &amp;amp;&amp;amp; dgData.hasFormat(&quot;position&quot;) )

         DragManager.acceptDragDrop( UIComponent( e.target ) );

}
</pre>
<p>Si ce n&#8217;est pas le cas, l&#8217;objet déplacé sera signalé comme &laquo;&nbsp;non autorisé&nbsp;&raquo; à être déposé dans le composant cible courant ( curseur &laquo;&nbsp;interdit&nbsp;&raquo; ).</p>
<h2><strong><span style="color: #00ccff;">3. Dépot des données</span></strong></h2>
<p>Pour capter le dépot, on peut écouter :</p>
<p> </p>
<p>- l&#8217;événement <strong>DragEvent.dragDrop</strong> sur l&#8217;objet &laquo;&nbsp;cible&nbsp;&raquo;.</p>
<pre class="brush: xml">

&lt;local:DropableCanvas width=&quot;60&quot; height=&quot;80&quot;

 backgroundColor=&quot;#EFEFEF&quot; borderColor=&quot;#CCCCCC&quot; borderStyle=&quot;solid&quot;

 dragEnter=&quot;isDropable(event)&quot;

 dropData=&quot;{lettres[rpCibles.currentIndex]}&quot;

 dragDrop=&quot;addLettre( event )&quot;

&gt;
</pre>
<p>La méthode addLettre() est ici appelée lors d&#8217;un DragEvent.dragDrop. Cette méthode va nous permettre d&#8217;effectuer le transfert de données ( ici la lettre et sa position ).</p>
<pre class="brush: js">

private function addLettre( e:DragEvent ):void

{

 // récupération des données

 var dropLetter:String = String( e.dragSource.dataForFormat(&quot;lettre&quot;) );

 var dropPosition:uint = uint( e.dragSource.dataForFormat(&quot;position&quot;) );

 

 // référence du champ texte du Canvas Cible

 var cibleText:Label = Container(e.target).getChildAt(0) as Label ;

 

 // remplit le champ texte cible

 cibleText.text = dropLetter ;

 

 // si la lettre est déposé dans un Canvas cible : test si elle est déposé à la bonne position

 if ( e.target is DropableCanvas )

    if ( DropableCanvas(e.target).dropData.position == dropPosition )

      cibleText.setStyle( &quot;color&quot; , 0x00FF00 );

}
</pre>
<p>Dans cet exemple, j&#8217;ai ajouté un classe <em><strong>DropableCanvas</strong></em>. Cette classe possède un propriété publique <em><strong>dropData</strong></em>, qui permet de stocker les réponses correctes de chaque &laquo;&nbsp;composant de dépôt&nbsp;&raquo;. Au moment du drop, cela nous permet de tester si la lettre est bien posée au bon endroit.</p>
<p>- l&#8217;évenement <strong><em>DragEvent.dragComplete</em></strong> sur le composant &laquo;&nbsp;émetteur&nbsp;&raquo;.</p>
<p>Lorsque les données sont &laquo;&nbsp;lachées&nbsp;&raquo;, et quelque soit le résultat du drag&#8217;n'drop, l&#8217;objet émetteur émet un <em>dragComplete</em>.</p>
<pre class="brush: xml">

&lt;mx:Label id=&quot;cibleLabel&quot; fontSize=&quot;32&quot;

    horizontalCenter=&quot;0&quot; verticalCenter=&quot;0&quot;

    mouseDown=&quot;drag( event )&quot;

    dragComplete=&quot;onDragComplete( event )&quot;

/&gt;
</pre>
<p>Grâce à la propriété <em>action</em> de l&#8217;événement nous pouvons savoir le résultat du drop. ( move, link, none ou copy )</p>
<pre class="brush: js">

private function onDragComplete( e:DragEvent ):void

{

    if ( e.action == DragManager.MOVE )

       Label( e.target ).text = &quot;&quot;;

}
</pre>
<p><a title="DragManager les sources" href="http://lafabrick.com/tutos/dragndrop/srcview/index.html" target="_blank">Voir les sources</a></p>
<p>Dans un prochain tutoriel nous verrons comment personnaliser graphiquement cette opération.Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2006/11/16/19-petit-cour-sur-lapi-de-dessin/" rel="bookmark" title="16 novembre 2006">Petit cours sur l’API de dessin</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/10/03/256-titre/" rel="bookmark" title="3 octobre 2007">Utiliser Cairngorm dans un projet Flex / AMFPHP</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/06/06/327-google-language-api-flex/" rel="bookmark" title="6 juin 2008">Google AJAX Language API&#8230; et ton Flex devient polyglotte !</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/01/31/1040-hello-cocomo-first-app/" rel="bookmark" title="31 janvier 2009">Hello AFCS ( bye Cocomo ) : première application multi-utilisateurs</a></li>
</ul>
<p><!-- Similar Posts took 12.298 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2008/12/13/506-utiliser-le-dragmanager-de-flex-1ere-partie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

