10-24に書いた課題のひとつFlex2のほうのasファイル
AdvanceTabNavigator.as
package { import flash.display.DisplayObject; import flash.events.Event; import flash.events.MouseEvent; import mx.containers.TabNavigator; import mx.controls.Alert; import mx.controls.Button; import mx.controls.TabBar; import mx.controls.tabBarClasses.Tab; import mx.core.Application; import mx.core.DragSource; import mx.core.IUIComponent; import mx.events.DragEvent; import mx.events.FlexEvent; import mx.managers.DragManager; import mx.collections.XMLListCollection; import flash.events.EventDispatcher; public class AdvanceTabNavigator extends TabNavigator { private var _tabDragEnable:Boolean = false; public function set tabDragEnable(enable:Boolean):void{ this._tabDragEnable = enable; enableTabDrag(enable); } public function get tabDragEnable():Boolean{ return this._tabDragEnable; } public function AdvanceTabNavigator(){ super(); } protected function enableTabDrag(enable:Boolean):void{ if(enable){ tabBar.addEventListener(DragEvent.DRAG_ENTER, doDragEnter); tabBar.addEventListener(DragEvent.DRAG_DROP, doDragDrop); tabBar.addEventListener(DragEvent.DRAG_OVER, doDragOver); tabBar.addEventListener(DragEvent.DRAG_EXIT, doDragExit); }else{ tabBar.removeEventListener(DragEvent.DRAG_ENTER, doDragEnter); tabBar.removeEventListener(DragEvent.DRAG_DROP, doDragDrop); tabBar.removeEventListener(DragEvent.DRAG_OVER, doDragOver); tabBar.removeEventListener(DragEvent.DRAG_EXIT, doDragExit); } } protected function doDragEnter(event:DragEvent):void { trace("doDragEnter"); trace("event.currentTarget = " + event.currentTarget); var dropTarget:IUIComponent=IUIComponent(event.currentTarget); DragManager.acceptDragDrop(dropTarget); } protected function doDragOver(event:DragEvent):void { trace("doDragOver"); var dragX:Number = tabBar.mouseX; var targetTabIndex:Number = -1; for(var i:Number = 0; i <tabBar.getChildren().length; i++){ if(dragX <= tabBar.getChildAt(i).x){ targetTabIndex = i-1; tabBar.graphics.clear(); tabBar.graphics.beginFill(0xFF0000); tabBar.graphics.drawRect( tabBar.getChildAt(targetTabIndex).x, tabBar.getChildAt(targetTabIndex).y, tabBar.getChildAt(targetTabIndex).width, tabBar.getChildAt(targetTabIndex).height ); tabBar.graphics.endFill(); break; } } if(targetTabIndex <0 && dragX> tabBar.getChildAt(tabBar.getChildren().length - 1).x && dragX <tabBar.getChildAt(tabBar.getChildren().length - 1).x + tabBar.getChildAt(tabBar.getChildren().length - 1).width){ targetTabIndex = tabBar.getChildren().length; tabBar.graphics.clear(); tabBar.graphics.beginFill(0xFF0000); tabBar.graphics.drawRect( tabBar.getChildAt(targetTabIndex - 1).x, tabBar.getChildAt(targetTabIndex - 1).y, tabBar.getChildAt(targetTabIndex - 1).width, tabBar.getChildAt(targetTabIndex - 1).height ); tabBar.graphics.endFill(); } if(targetTabIndex>= 0){ event.dragSource.addData(targetTabIndex, "targetTabIndex"); } } protected function doDragDrop(event:DragEvent):void { trace("doDragDrop"); tabBar.graphics.clear(); var targetTabIndex:Number = Number( event.dragSource.dataForFormat("targetTabIndex")); var dragObj:Object= event.dragSource.dataForFormat("items"); for(var i:Number = 0; i <= tabBar.getChildren().length ; i++){ if(i == targetTabIndex){ if(i == tabBar.getChildren().length){ i = i - 1; } //for文を抜けるため。 break; } } // iはドロップしたタブの番号 trace("i = " + i); // this.selectedIndex = i;//dropしたタブを開く trace(dragObj); //データをドロップしたタブ上にあるデータグリッドにいれる。 var dragXML:XML = new XML(dragObj); var dragXMLList:XMLList = new XMLList(dragXML); trace(dragXML + "XML"); trace(dragXMLList + "XMLList"); if(i==0){ Application.application.xlcDragMove0.addItem(dragXML); }else if(i==1){ Application.application.xlcDragMove1.addItem(dragXML); }else if(i==2){ Application.application.xlcDragMove2.addItem(dragXML); } } protected function doDragExit(event:DragEvent):void { trace("doDragExit"); tabBar.graphics.clear(); } } }