Flex 设置模式窗口 不可移出 当前窗口外

阅读更多


	
		 systemManager.stage.stageWidth + marketMoversPM.PANEL_MOVE_RESTRICTION_RIGHT)
				{
					event.afterBounds.left = systemManager.stage.stageWidth - 75;
				}
				
				// code to restrict at Top and Bottom
				if (event.afterBounds.top < 0) 
				{
					event.afterBounds.top = 0;
				}
				else if (event.afterBounds.bottom > systemManager.stage.stageHeight + marketMoversPM.PANEL_MOVE_RESTRICTION_BOTTOM) 
				{
					event.afterBounds.top = this.height + 75;
				}
			}
			
		]]>
	
	
	
		
				
		
			
		
	
	
		
		
	
	
	
		
		
			
			
				
				
				
				
				
				
				
			
			
			
				
					
				
			
			
				
			
			
					
				
					
					
						
					
					
					
						
							
						
					
					
				
		
		
	
	
		
	

 

package au.com.tabcorp.neo.racing.marketmovers.presentation
{
	
	import flash.display.DisplayObject;
	import flash.events.Event;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;
	
	import mx.collections.ArrayCollection;
	import mx.collections.ListCollectionView;
	import mx.core.FlexGlobals;
	import mx.core.IFlexDisplayObject;
	import mx.core.UIComponent;
	import mx.managers.PopUpManager;
	
	import org.spicefactory.lib.reflect.types.Void;
	
	import spark.collections.Sort;
	import spark.collections.SortField;
	import spark.events.IndexChangeEvent;
	import spark.events.TitleWindowBoundsEvent;
	
	public class MarketMoversPopupPM extends Broadcaster
	{
		[Inject] [Bindable] 	
		public var serverTimeModel:ServerTimeModel;
		
		[Inject] [Bindable]
		public var model:MarketMoversModel;
		/**
		 * DG column widths so we can match footer to DG
		 */ 
		public const SMALL_COLUMN_WIDTH:int = 30;
		public const MEDIUM_COLUMN_WIDTH:int = 70;
		public const MEDIUM_COLUMN_WIDTH_2:int = 85;
		public const MEDIUM_COLUMN_WIDTH_3:int = 100;
		public const LARGE_COLUMN_WIDTH:int = 160;
		public const LARGE_COLUMN_WIDTH_2:int = 170;
		public const PANEL_WIDTH:int = 760;
		
		public const PANEL_MOVE_RESTRICTION_LEFT:int = -660;
		public const PANEL_MOVE_RESTRICTION_RIGHT:int = 660;
		public const PANEL_MOVE_RESTRICTION_BOTTOM:int = 450;
		
		[Bidnable]
		public var marketMoversListView:ListCollectionView;
		[Bindable]
		public var selectedRaceOption:Object;
		[Bindable]
		public var ac:ArrayCollection;
		[Bindable]
		public var arrRaceNos:ArrayCollection;
		[Bindable]
		public var marketMoversTabLocation : String = MARKET_MOVERS_LOCATION;
		[Bindable] public var dataLoaded:Boolean;
		
		private static const MARKET_MOVERS_LOCATION:String 	= "informational:market movers";
		private static const NEXT_3_RACES_TO_GO:String 		= "informational:next 3 races to go";
		private static const INDEX_VIEW_CURRENT_RACE : int = 0;
		private static const INDEX_VIEW_NEXT_THREE_RACE : int = 1;
		
		/**
		 *  variable to store the currentRace Details at PM level only - not into to model 
		 */		
		private var _currentRacingCode : String;
		private var _currentMeetingName : String;
		private var _currentMeetingDateRaw : Date;
		private var _currentRaceNumber : int;
		
		private var _enableButtonBar : Boolean;
		private var _todayDate:Date;
		private var _numberSortField:SortField;
		private var _numberSort:Sort;
		private var _runnerNameSortField : SortField;
		private var _runnerNameSort : Sort;
		private var _oddsSortField : SortField;
		private var _oddsSort : Sort;
		private var _percentChangeSortField : SortField;
		private var _percentChangeSort : Sort;
		private var _selectedIndexButtonBar : int;
		private var callFromExternal : Boolean = true;
		
		public function MarketMoversPopupPM()
		{
			ac = new ArrayCollection([
				{value: MarketMoversModel.MARKET_MOVERS_CURRENT_VIEW, label: "CURRENT RACE"},
				{value: MarketMoversModel.MARKET_MOVERS_NEXT_3_RACES, label: "NEXT 3 RACES"}
			]);
			
			// sort fields
			_numberSortField = new SortField();
			_numberSortField.name = 'runnerNumber';
			_numberSortField.numeric = true;
			_numberSort = new Sort();
			_numberSort.fields = [_numberSortField];
			
			_runnerNameSortField = new SortField();
			_runnerNameSortField.name = 'runnerName';
			_runnerNameSort = new Sort();
			_runnerNameSort.fields = [_runnerNameSortField];
			
			_oddsSortField = new SortField();
			_oddsSortField.name = RacingConstants.SORT_LABEL_OPENING_ODDS;
			_oddsSort = new Sort();
			_oddsSort.fields = [_oddsSortField];
			
			_percentChangeSortField = new SortField();
			_percentChangeSortField.name = RacingConstants.SORT_LABEL_PERCENT_CHANGE;
			_percentChangeSort = new Sort();
			_percentChangeSort.fields = [_percentChangeSortField];
		}
		
		[Init]
		public function onInjectionComplete() : void
		{
			todayDate = serverTimeModel.currentTimeDate;
			marketMoversListView = new ListCollectionView(model.marketMovers);
			dataLoaded = true;
			
		}
		
		[Init]
		public function init():void
		{
			var source:Array = new Array(1, 2, 3);
			arrRaceNos = new ArrayCollection(source);
			
			if(serverTimeModel.currentTimeDate)
				onInjectionComplete();
		}
		
		public function onWeatherIcon_clickHandler(meetingMNC3:String, meetingName:String):void
		{
			broadcast(new GetWeatherInfoMessage(meetingMNC3, meetingName));
		}
		
		public function onTrackClickHandler(source:MarketMoversVO):void
		{
			var trackRequest:TrackRequest = new TrackRequest();
			trackRequest.meetingCode = source.meetingCode;
			trackRequest.meetingName = source.meetingName;
			trackRequest.raceNumber = source.raceNumber;
			trackRequest.racingCode = source.racingCode;
			trackRequest.meetingDateRaw = source.raceStartTime;//race.meeting.meetingDate;
			broadcast(new GetTrackEvent(trackRequest));
		}
		
		///////////////////////////////////////////////////////////////////////
		//                           handlers                                //
		///////////////////////////////////////////////////////////////////////
		
		public function onChangeMarketMoversButtonBar(event:IndexChangeEvent):void
		{
			selectedRaceOption = event.currentTarget.selectedItem;
			
			//model.changeRaceListView(selectedRaceOption.value);
			getMarketMoversData(selectedIndexButtonBar);
			
			// TODO : show loader - while getting new data
			
			//analytics: track the market movers/next 3 races to go location
			if(selectedRaceOption.value == MarketMoversModel.MARKET_MOVERS_NEXT_3_RACES)
				marketMoversTabLocation = NEXT_3_RACES_TO_GO;
			else
				marketMoversTabLocation = MARKET_MOVERS_LOCATION;
			dispatchEvent(new LocationChangeEvent());
		}
		
		// ----------------------------------------------------------
		// 					PUBLIC METHODS
		// ----------------------------------------------------------
		
		private function getMarketMoversData(selectedIndex:int) : void
		{
			callFromExternal = false;
			if(selectedIndex == INDEX_VIEW_CURRENT_RACE)
			{
				dataLoaded = false;
				// call to a specific race MarketMovers ( current race )
				var request:MarketMoversRequest = new MarketMoversRequest();
				request.racingCode = this._currentRacingCode;
				request.raceNumber = this._currentRaceNumber;
				request.meetingName = this._currentMeetingName;
				request.meetingDateRaw = this._currentMeetingDateRaw;
				broadcast(new MarketMoversMessage(request));
			}
			else if(selectedIndex == INDEX_VIEW_NEXT_THREE_RACE)
			{
				dataLoaded = false;
				// for the default market movers call - like the RacingOverview
				var mmRequest : MarketMoversRequest = new MarketMoversRequest();
				var msg:CallMarketMoversMessage = new CallMarketMoversMessage(mmRequest);
				broadcast(msg);
			}
		}
		
		public function storeCurrentRaceDetails(req : MarketMoversRequest) : void
		{
			this._currentRacingCode = req.racingCode;
			this._currentMeetingName = req.meetingName;
			this._currentMeetingDateRaw = req.meetingDateRaw;
			this._currentRaceNumber = req.raceNumber;
		}
		
		public function removeCurrentRaceDetails() : void
		{
			this._currentRacingCode = null;
			this._currentMeetingName = null;
			this._currentMeetingDateRaw = new Date();
			this._currentRaceNumber = 0;
		}

		
		public function printClickHandler(component:UIComponent):void
		{
			var printReceipt:PrintPreviewPopUp = new PrintPreviewPopUp();
			PopUpManager.addPopUp(printReceipt as IFlexDisplayObject, FlexGlobals.topLevelApplication as DisplayObject, true);
			
			if(component.height>0 && component.width>0)
			{
				printReceipt.toBePrintData = component;
				printReceipt.x = FlexGlobals.topLevelApplication.width/2 - component.width/2;
				printReceipt.y = FlexGlobals.topLevelApplication.height/2 - component.height/2;
				PopUpManager.bringToFront(printReceipt as IFlexDisplayObject );
			}
		}
		
		public function navigateToRacePage(marketMoversVO:MarketMoversVO) : void
		{
			var request:RaceDetailsRequestV2 = new RaceDetailsRequestV2();
			request.meetingName = marketMoversVO.meetingName;
			request.meetingCode = marketMoversVO.meetingCode;
			request.meetingDateRaw = marketMoversVO.raceStartTime;
			request.racingCode = marketMoversVO.racingCode;
			request.raceNumber = String(marketMoversVO.raceNumber);
			
			broadcast(new RacingNavigatorMessage(RacingNavigatorModel.BETTING_PAGE, null, false, request));
			
			closeMarketMovers();
		}
		
		/**
		 *  to close the market movers popup
		 */		
		[MessageHandler]
		public function messageHandlerCloseMarketMoversPopup( message : CloseMarketMoversPopupMessage) : void
		{
			// next call will be from external only
			callFromExternal = true;
		}
		
		public function closeMarketMovers() : void
		{
			callFromExternal = true;
			var message : CloseMarketMoversPopupMessage = new CloseMarketMoversPopupMessage(
				CloseMarketMoversPopupMessage.Close_Market_Movers_Popup_Message);
			broadcast(message);
		}
		
		// ----------------------------------------------------------
		// 					SUBSCRIBE HANDLER
		// ----------------------------------------------------------
		
		private var _requestedRaceNo:int;
		
		private var _marketMoversRequest:MarketMoversRequest;
		
		public function get marketMoversRequest():MarketMoversRequest
		{
			return _marketMoversRequest
		}
		
		public function get requestedRaceNo():int
		{
			return _requestedRaceNo;
		}
		
		[Subscribe] 
		public function set marketMoversRequest(value:MarketMoversRequest):void
		{
			_marketMoversRequest = value;
			if (marketMoversRequest)
			{
				_requestedRaceNo = marketMoversRequest.raceNumber;
				broadcast(new MarketMoversMessage(marketMoversRequest));
			}
		}
		
		public function viewToBeShown(showCurrentRace:Boolean = false) : void
		{
			if(callFromExternal)
			{
				if(showCurrentRace)
				{
					// show current race button
					enableButtonBar = true;
					callFromExternal = true;
					selectedIndexButtonBar = INDEX_VIEW_CURRENT_RACE;
					selectedRaceOption = ac.getItemAt(INDEX_VIEW_CURRENT_RACE);
				}
				else
				{
					selectedIndexButtonBar = INDEX_VIEW_NEXT_THREE_RACE;
					selectedRaceOption = ac.getItemAt(INDEX_VIEW_NEXT_THREE_RACE);
					enableButtonBar = false;
				}
			}
		}
		
		// Getter / Setter
		[Bindable(event="todayDateChanged")]
		public function get todayDate():Date
		{
			return _todayDate;
		}
		
		public function set todayDate(value:Date):void
		{
			_todayDate = value;
			dispatchEvent(new Event("todayDateChanged"));
		}

		[Bindable(event="selectedIndexButtonBarChange")]
		public function get selectedIndexButtonBar():int
		{
			return _selectedIndexButtonBar;
		}

		public function set selectedIndexButtonBar(value:int):void
		{
			_selectedIndexButtonBar = value;
			dispatchEvent(new Event("selectedIndexButtonBarChange"));
		}

		[Bindable(event="enableButtonBarChange")]
		public function get enableButtonBar():Boolean
		{
			return _enableButtonBar;
		}

		public function set enableButtonBar(value:Boolean):void
		{
			if( _enableButtonBar !== value)
			{
				_enableButtonBar = value;
				dispatchEvent(new Event("enableButtonBarChange"));
			}
		}
	}
}

 

你可能感兴趣的:(Flash,Adobe)