<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
backgroundGradientColors="[#EFEFEF,#CFCFCF]"
xmlns:local="*" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.core.Container;
import mx.events.DragEvent;
import mx.collections.ArrayCollection;
import mx.core.UIComponent;
import mx.managers.DragManager;
import mx.core.DragSource;
import mx.controls.Label;
private function drag( e:MouseEvent):void
{
var dgData:DragSource = new DragSource();
var dgText:String = (e.target.parent as Label).text ;
dgData.addData( dgText , "lettre" );
dgData.addData( getLetterPosition(dgText) , "position" );
DragManager.doDrag( UIComponent(e.target.parent) , dgData, e );
}
private function isDropable( e:DragEvent ):void
{
var cibleText:Label = Container(e.target).getChildAt(0) as Label ;
var dgData:DragSource = e.dragSource ;
if ( e.dragInitiator != cibleText && cibleText.text == "" )
if ( dgData.hasFormat("lettre") && dgData.hasFormat("position") )
DragManager.acceptDragDrop( UIComponent( e.target ) );
}
private function addLettre( e:DragEvent ):void
{
var dropLetter:String = String( e.dragSource.dataForFormat("lettre") );
var dropPosition:uint = uint( e.dragSource.dataForFormat("position") );
var cibleText:Label = Container(e.target).getChildAt(0) as Label ;
cibleText.text = dropLetter ;
if ( e.target is DropableCanvas )
if ( DropableCanvas(e.target).dropData.position == dropPosition )
cibleText.setStyle( "color" , 0x00FF00 );
}
private function getLetterPosition( l:String ):uint
{
for ( var i:uint; i < lettres.length; i++ ){
if ( lettres[i].lettre == l )
return lettres[i].position;
}
return lettres.length + 1;
}
private function randomize( t:Array ):Array
{
var rdT:Array = t.slice(0, t.length );
return rdT.sort();
}
private function onDragComplete( e:DragEvent ):void
{
trace ( 'complete :' + e.target + ' / ' + e.dragInitiator );
if ( e.action == DragManager.MOVE )
Label( e.target ).text = "";
}
]]>
</mx:Script>
<mx:Array id="lettres">
<mx:Object lettre="B" position="1" />
<mx:Object lettre="R" position="2" />
<mx:Object lettre="A" position="3" />
<mx:Object lettre="V" position="4" />
<mx:Object lettre="O" position="5" />
</mx:Array>
<mx:HBox>
<mx:Repeater id="rpSrc" dataProvider="{randomize(lettres)}">
<mx:Canvas width="60" height="80" backgroundColor="#EFEFEF"
borderColor="#CCCCCC" borderStyle="solid"
dragEnter="isDropable(event)"
dragDrop="addLettre( event )"
>
<mx:Label id="l" fontSize="32" text="{rpSrc.currentItem.lettre}"
horizontalCenter="0" verticalCenter="0"
mouseDown="drag( event )"
dragComplete="onDragComplete( event )"
/>
</mx:Canvas>
</mx:Repeater>
</mx:HBox>
<mx:HBox>
<mx:Repeater id="rpCibles" dataProvider="{lettres}">
<local:DropableCanvas width="60" height="80" backgroundColor="#EFEFEF"
borderColor="#CCCCCC" borderStyle="solid"
dropData="{lettres[rpCibles.currentIndex]}"
dragEnter="isDropable(event)"
dragDrop="addLettre( event )"
>
<mx:Label id="cibleLabel" fontSize="32"
horizontalCenter="0" verticalCenter="0"
mouseDown="drag( event )"
dragComplete="onDragComplete( event )"
/>
</local:DropableCanvas>
</mx:Repeater>
</mx:HBox>
</mx:Application>