<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    width="300"
    height="200"
    paddingLeft="0"
    paddingTop="0"
    paddingRight="0"
    paddingBottom="0"
    xmlns:mx="http://www.adobe.com/2006/mxml" viewSourceURL="srcview/index.html">
    
    <mx:List
        id="plList"
        width="300"
        height="200"
        labelField="@name"
        iconField="@icon"
        dataProvider="{playlists.pl}"
        dragEnabled="true"
        dragMoveEnabled="true"
        dropEnabled="true"
        dragOver="listDragOverHandler(event)"/>
    
    <mx:XML id="playlists">
        <root>
            <pl name="Playlist1" icon="myIcon" canMove="1" />
            <pl name="Radio" icon="myIcon2" canMove="0" />
            <pl name="Random" icon="myIcon" canMove="1" />
            <pl name="Best 90" icon="myIcon" canMove="1" />
            <pl name="Custom" icon="myIcon2" canMove="0" />
        </root>        
    </mx:XML>
    
    
    <mx:Script>
        <![CDATA[
            import mx.managers.DragManager;
            import mx.events.DragEvent;
            
            [Bindable]
            [Embed("../assets/normal.png")]
            public var myIcon:Class;
            
            [Bindable]
            [Embed("../assets/smart.png")]
            public var myIcon2:Class;
            
            private function listDragOverHandler( event:DragEvent ):void
            {
                // with this call we are telling that we will 
                // handle the drag
                event.preventDefault();
                
                var selectedItem :XML = XML(plList.selectedItem);
                var move :Number = Number(selectedItem.attribute('canMove'));
                
                if (event.dragSource.hasFormat("items") && move)
                {
                    // Drag allowed
                    event.currentTarget.showDropFeedback(event);
                    DragManager.showFeedback(DragManager.MOVE);
                    
                    return;                   
                }
                
                
                // Drag not allowed.
                event.currentTarget.hideDropFeedback(event);
                DragManager.showFeedback(DragManager.NONE);
            }
            
        ]]>
    </mx:Script>
</mx:Application>