After reading all the comments added on the Drag n’ Drop Tree component made some time ago I spent some time to make a small component which is capable to manage drag and drop between almost all the Macromedia builtins component (such as List, DrataGrid, Tree…).
It requires Flash 8 to work because I’m using BitmapData for clone the dragged item (wow, this is incredible easy to do now 🙂 )
You can see a demo here:Â DraggableController.html
This is the code used in the .fla, in order to manage the component events:
/** Setting up the list of relationship between components **/ dc.AddReference(this._datagrid_1, this._list_1) dc.AddReference(this._datagrid_1, this._datagrid_2) dc.AddReference(this._datagrid_1, this._tree_1) dc.AddReference(this._datagrid_1, this._datagrid_1) dc.AddReference(this._list_1, this._list_2) dc.AddReference(this._list_1, this._text_ctrl_1) dc.AddReference(this._text_ctrl_2, this._list_2) dc.AddReference(this._tree_1, this._list_2) dc.AddReference(this._tree_1, this._text_ctrl_2) dc.AddReference(this._tree_1, this._text_area_1) dc.AddReference(this._list_2, this._text_area_1) /** drag complete listener **/ dc.addEventListener("drag_complete", this) /** evt: - target_component = drop destination component - source_component = drag n' drop source component - source_item = item dragged - source_index = selectedIndex of the source component - target_item = drop destination item inside target_component - target_index = drop destination index IMPORTANT: once received evt you must Veto() or Skip() the evt itself. evt.Skip() will simply remove the dragging movieclip evt.Veto() will move back the dragging item to its source */ function drag_complete(evt:Object):Void{ if(evt.target_component == _list_1){ evt.Veto() } else if(evt.target_component == _datagrid_2 or evt.target_component == _datagrid_1){ evt.source_component.removeItemAt(evt.source_index) evt.target_component.addItemAt(evt.target_index, evt.source_item) Selection.setFocus(null) evt.target_component.selectRow(evt.target_index, false, false) evt.Skip() } else if(evt.target_component == _tree_1){ evt.source_component.removeItemAt(evt.source_index) var node:XMLNode = new XMLNode(1, "node") node.attributes.label = evt.source_item.title + "(Cloned)" node.attributes.data = evt.source_item evt.target_item.appendChild(node) evt.Skip() } else if(evt.target_component == _text_ctrl_1){ evt.source_component.removeItemAt(evt.source_index) evt.target_component.text = evt.source_item.label evt.Skip() } else if(evt.target_component == _list_2 && evt.source_component == _tree_1){ evt.source_item.removeNode() evt.source_component.dataProvider = evt.source_component.getDataProvider() evt.target_component.addItemAt(evt.target_index, evt.source_item.attributes.label) evt.Skip() } else if(evt.target_component == _text_area_1 && evt.source_component == _list_2){ evt.source_component.removeItemAt(evt.source_index) evt.target_component.text = evt.source_item.label evt.Skip() } else if(evt.target_component == _text_area_1 && evt.source_component == _tree_1){ evt.source_item.removeNode() evt.source_component.dataProvider = evt.source_component.getDataProvider() evt.target_component.text = evt.source_item evt.Skip() } else { evt.Veto() } }
The .zip with all the file is available here, if anyone want to test and improve it.
[attachments docid=691 force_saveas=”1″ logged_users=”0″]
Share with...