package tripvisModel.controllers { import flash.events.EventDispatcher; import mx.collections.ArrayCollection; import tripvisModel.Coordinates; import tripvisModel.SimpleTripItem; import tripvisModel.TripItem; import tripvisModel.TripItemType; import tripvisModel.TripVisModel; [Event(name="dateRangeChanged", type="tripvisModel.controllers.CircleVisControllerEvent")] [Event(name="timelineChanged", type="tripvisModel.controllers.CircleVisControllerEvent")] public class CircleVisController extends EventDispatcher { private var _lowestDate: Date = new Date(0); private var _highestDate: Date = new Date(0); private var _tripItems: ArrayCollection = new ArrayCollection(); private var _timelineController: TimelineController; public function CircleVisController(timelineController: TimelineController) { _timelineController = timelineController; _timelineController.addEventListener(TimelineControllerEvent.TRIP_ITEM_ADDED, timelineController_change); _timelineController.addEventListener(TimelineControllerEvent.TRIP_ITEM_REMOVED, timelineController_change); _timelineController.addEventListener(TimelineControllerEvent.TRIP_ITEM_UPDATED, timelineController_change); _timelineController.addEventListener(TimelineControllerEvent.TRIP_ITEMS_CLEARED, timelineController_change); //TripVisModel.instance.basketController.addEventListener(BasketControllerEvent.TRIP_ITEM_UPDATED, basketController_updated); //_timelineController._basketController.addEventListener(BasketControllerEvent.TRIP_ITEM_UPDATED, basketController_updated); } private function basketController_updated(event: BasketController): void { //updateCircleVis(); trace("up"); } private function timelineController_change(event: TimelineControllerEvent): void { updateCircleVis(); } private function updateCircleVis(): void { var timelineTripItems: ArrayCollection = _timelineController.timelineTripItems; var newList: ArrayCollection = new ArrayCollection(); //enkel de bezienswaardigheden uithalen: for each (var tripItem: TripItem in timelineTripItems) { if (tripItem.type == TripItemType.LANDMARK) newList.addItem(tripItem); } if (newList.length == 0) return; var sortedList: ArrayCollection = sort(newList); _tripItems = sortedList; var newLowestDate: Date = (sortedList[0] as TripItem).timePeriod.startDate; var newHighestDate: Date = (sortedList[sortedList.length-1] as TripItem).timePeriod.startDate; // kijken of de date range veranderd is: var dateRangeChanged: Boolean = false; if ( !equalsDay(_lowestDate, newLowestDate) ) dateRangeChanged = true; if ( !equalsDay(_highestDate, newHighestDate) ) dateRangeChanged = true; // zo ja, pas aan en stuur een event uit: if (dateRangeChanged) { _lowestDate = newLowestDate; _highestDate = newHighestDate; dispatchEvent(new CircleVisControllerEvent('dateRangeChanged')); } dispatchEvent(new CircleVisControllerEvent('timelineChanged')); } public function hasDateRange(): Boolean { if (_tripItems.length == 0) return false; else return true; } public function get lowestDate(): Date { return _lowestDate; } public function get highestDate(): Date { return _highestDate; } public function getTripItems(day: Date): ArrayCollection { var tempTripItems: ArrayCollection = new ArrayCollection(); for each (var tripItem: TripItem in _tripItems) { if ( equalsDay(tripItem.timePeriod.startDate, day) ) tempTripItems.addItem(tripItem); } return tempTripItems; } // controleer enkel de dag (uur, minuten, seconden, ... tellen niet mee) private function equalsDay(day1: Date, day2: Date): Boolean { if (day1.fullYear != day2.fullYear) return false; if (day1.month != day2.month) return false; if (day1.date != day2.date) return false; return true; } private function sort(tripItems: ArrayCollection): ArrayCollection { var tempList: ArrayCollection = tripItems; var sortedList: ArrayCollection = new ArrayCollection(); while(tempList.length != 0) { //we halen telkens de laagste datum op: var lowestDate: Number; var lowestTripItem: TripItem = null; for each (var tripItem: TripItem in tempList) { if (lowestTripItem == null || tripItem.timePeriod.startDate.getTime() < lowestDate) { lowestDate = tripItem.timePeriod.startDate.getTime(); lowestTripItem = tripItem; } } tempList.removeItemAt( tempList.getItemIndex(lowestTripItem) ); sortedList.addItem(lowestTripItem); } return sortedList; } private function getDummyData(): ArrayCollection { var simpleTripItem1: SimpleTripItem = new SimpleTripItem(); simpleTripItem1.name = "Domaine provincial de Kessel-Lo"; simpleTripItem1.location = new Coordinates(50.894127, 4.730521); simpleTripItem1.type = TripItemType.LANDMARK; var simpleTripItem2: SimpleTripItem = new SimpleTripItem(); simpleTripItem2.name = "Saint Peter's Church (Sint-Pieterskerk)"; simpleTripItem2.location = new Coordinates(50.878845 ,4.704895 ); simpleTripItem2.type = TripItemType.LANDMARK; var simpleTripItem3: SimpleTripItem = new SimpleTripItem(); simpleTripItem3.name = "Old Market Square (Oude Markt)"; simpleTripItem3.location = new Coordinates(50.880085 ,4.697428 ); simpleTripItem3.type = TripItemType.LANDMARK; var simpleTripItem4: SimpleTripItem = new SimpleTripItem(); simpleTripItem4.name = "Groot Begijnhof"; simpleTripItem4.location = new Coordinates( 50.8723, 4.69805); simpleTripItem4.type = TripItemType.LANDMARK; var simpleTripItem5: SimpleTripItem = new SimpleTripItem(); simpleTripItem5.name = "Ramblas"; simpleTripItem5.location = new Coordinates(50.868378 , 4.715881); simpleTripItem5.type = TripItemType.LANDMARK; var tripItem1: TripItem = new TripItem(simpleTripItem1); var tripItem3: TripItem = new TripItem(simpleTripItem3); var tripItem4: TripItem = new TripItem(simpleTripItem4); var tripItem2: TripItem = new TripItem(simpleTripItem2); var tripItem5: TripItem = new TripItem(simpleTripItem5); tripItem1.timePeriod.startDate = new Date(2010, 4, 28, 13, 30); tripItem1.timePeriod.endDate = new Date(2010, 4, 28, 14, 00); tripItem2.timePeriod.startDate = new Date(2010, 4, 28, 14, 00); tripItem2.timePeriod.endDate = new Date(2010, 4, 28, 15, 00); tripItem3.timePeriod.startDate = new Date(2010, 4, 28, 15, 00); tripItem3.timePeriod.endDate = new Date(2010, 4, 28, 16, 00); tripItem4.timePeriod.startDate = new Date(2010, 4, 28, 16, 00); tripItem4.timePeriod.endDate = new Date(2010, 4, 28, 17, 00); tripItem5.timePeriod.startDate = new Date(2010, 4, 28, 17, 30); tripItem5.timePeriod.endDate = new Date(2010, 4, 28, 18, 00); var tempTripItems: ArrayCollection = new ArrayCollection(); tempTripItems.addItem( tripItem1 ); tempTripItems.addItem( tripItem3 ); tempTripItems.addItem( tripItem4 ); tempTripItems.addItem( tripItem2 ); tempTripItems.addItem( tripItem5 ); return tempTripItems; } } }