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();
			
		}
		
		
		
			
	}
}