Changeset 27 for gssim_ui/branches/vine/gssimstudio/src/web/ui
- Timestamp:
- 08/25/11 13:01:47 (14 years ago)
- Location:
- gssim_ui/branches/vine/gssimstudio/src/web/ui/flex
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
gssim_ui/branches/vine/gssimstudio/src/web/ui/flex/app/gssim/gssimstudio/editor/GSSimStudio.mxml
r15 r27 12 12 preloader="gssim.gssimstudio.editor.script.preloader.CustomPreloader" 13 13 paddingLeft="0" paddingRight="0" 14 paddingTop="0" paddingBottom="0" >14 paddingTop="0" paddingBottom="0" xmlns:charts="gssim.gssimstudio.editor.charts.*"> 15 15 16 16 <fx:Metadata> … … 127 127 </s:SkinnableContainer> 128 128 129 <!-- this is to prevent the style collission when loading this component dynamically --> 130 <charts:GanntChart visible="false" includeInLayout="false"/> 131 129 132 </vine:VineApplication> -
gssim_ui/branches/vine/gssimstudio/src/web/ui/flex/app/gssim/gssimstudio/editor/charts/GanntChart.mxml
r22 r27 7 7 xmlns:fx="http://ns.adobe.com/mxml/2009" 8 8 width="100%" creationComplete="init()" 9 height="100%" xmlns:charts="com.iwobanas.charts.*" xmlns:data="gssim.gssimstudio.editor.charting.data.*" xmlns:charts1="gssim.gssimstudio.editor.charts.*" 9 height="100%" xmlns:charts="com.iwobanas.charts.*" xmlns:data="gssim.gssimstudio.editor.charting.data.*" xmlns:charts1="gssim.gssimstudio.editor.charts.*" xmlns:code="http://code.google.com/p/flexlib/" 10 10 > 11 11 … … 17 17 <fx:Script> 18 18 <![CDATA[ 19 import flexlib.scheduling.samples.ScheduleData; 20 import flexlib.scheduling.scheduleClasses.ColoredScheduleEntry; 21 import flexlib.scheduling.scheduleClasses.LayoutScrollEvent; 22 import flexlib.scheduling.scheduleClasses.SimpleScheduleEntry; 23 import flexlib.scheduling.util.DateUtil; 24 19 25 import gssim.gssimstudio.editor.script.command.SaveToPNGCommand; 20 26 import gssim.gssimstudio.editor.script.views.ViewsHelper; … … 24 30 import mx.charts.chartClasses.AxisLabelSet; 25 31 import mx.collections.ArrayCollection; 32 import mx.collections.IList; 26 33 import mx.controls.Alert; 27 34 import mx.controls.HScrollBar; … … 29 36 import mx.controls.scrollClasses.ScrollBar; 30 37 import mx.events.FlexEvent; 38 import mx.events.ListEvent; 31 39 import mx.events.ResizeEvent; 32 40 import mx.events.ScrollEvent; 41 import mx.events.ScrollEventDirection; 33 42 import mx.events.SliderEvent; 34 43 import mx.messaging.management.ObjectInstance; … … 38 47 39 48 [Bindable] 40 public var expId : int; 49 private var startDate : Date; 50 [Bindable] 51 private var endDate : Date; 52 [Bindable] 53 private var zoom : Number; 54 [Bindable] 55 private var scheduleViewerWidth : Number = 635; 56 [Bindable] 57 private var scheduleViewerHeight : Number = 4*50; 58 [Bindable] 59 private var dataProvider : IList; 60 [Bindable] 61 private var rowDataProvider : IList= new ArrayCollection(); 62 private var listIndex:Number = 1; 63 private var isVZoomed:Boolean = false; 64 [Bindable] 65 private var vZoom:Number; 66 private var historyLength : int = 2; 67 private var lastPosRowList:Number = 0; 68 private var tempRowDataProvider:IList; 69 private var tempDataProvider:IList; 70 private var reservations:Object = new Object(); 71 private var tasks:Object = new Object(); 72 73 74 [Bindable] 75 public var expId : int = -1; 41 76 [Bindable] 42 77 public var expName : String; … … 44 79 [Bindable] 45 80 protected var date : Date = new Date(); 46 47 private function formatDate(value:Date, previousValue:Date, axis:DateTimeAxis) : String48 {49 var percent : Number = 1;//_hZoom / 100;50 var limit : Number = (hAxis.maximum.getTime() - hAxis.minimum.getTime()) * 0.07;51 52 if (hAxis.maximum.getTime() - value.getTime() > limit)53 {54 var dateLabel : String = df.format(value);55 var dateLabelLongSec : String = dateLabel;56 if (value.seconds < 10)57 {58 dateLabelLongSec = dateLabel.substring(0, dateLabel.length - 1);59 dateLabelLongSec += "0" + value.seconds;60 }61 return dateLabelLongSec;62 }63 else64 {65 return "";66 }67 }68 81 69 82 private function saveAsPNG() : void … … 76 89 protected function initChart() : void 77 90 { 78 79 } 91 initDataProvider(); 92 vZoom = 50; 93 rowsList.selectedIndex = 0; 94 setVerticalScrollPosition(0); 95 } 96 97 /* start of copy */ 98 99 protected function initFake() : void 100 { 101 102 } 103 104 /* 105 private function setTimeframe():void { 106 startDate = DateUtil.clearTime(new Date((new Date()).getTime() - DateUtil.DAY_IN_MILLISECONDS * historyLength)); 107 endDate = getEndDate(startDate); 108 } 109 110 private function getEndDate(startDate:Date):Date { 111 var duration:Number = DateUtil.DAY_IN_MILLISECONDS * (historyLength + 1); 112 var endDate:Date = new Date(startDate.getTime() + duration); 113 return endDate; 114 } 115 */ 116 117 private function initDataProvider():void { 118 119 dataProvider = new ArrayCollection(); 120 getRowsData(); 121 scheduleViewer.invalidateDisplayList(); 122 this.validateNow(); 123 rowsList.verticalScrollPosition = lastPosRowList; 124 rowsList.selectedIndex = listIndex; 125 126 } 127 128 private function randomInt(max:Number):Number { 129 return Math.floor(Math.random() * max); 130 } 131 132 private function getRowsData():void { 133 134 var data : ArrayCollection = parentApplication.gsSimStudioModel.ganntChartComponents['' + expId].allocationList; 135 136 startDate = new Date(3000); 137 endDate = new Date(0); 138 139 tempDataProvider = new ArrayCollection(); 140 tempRowDataProvider = new ArrayCollection(); 141 var resMap : Object = new Object(); 142 143 for( var i : Number = 0; i < data.length; i++ ) 144 { 145 if (!resMap.hasOwnProperty(data[i].unitId)) 146 { 147 resMap[data[i].unitId] = new ArrayCollection(); 148 tempRowDataProvider.addItem("Unit " + data[i].unitId); 149 } 150 151 var dummycolor : uint = 0x999999 + randomInt( 0x777777 ); 152 153 resMap[data[i].unitId].addItem(createColoredEntry(data[i].taskId, data[i].begin, data[i].end, dummycolor, 1,0,1)); 154 155 if (data[i].begin < startDate) startDate = new data[i].begin; 156 if (data[i].end > endDate) endDate = new data[i].end; 157 } 158 159 for each (var key : String in resMap) 160 { 161 tempDataProvider.addItem(resMap[key]); 162 } 163 164 dataProvider = tempDataProvider; 165 rowDataProvider = tempRowDataProvider; 166 167 Alert.show("finished! " + startDate + " " + endDate); 168 } 169 170 private function createColoredEntry(i:Number, startTime:Number, endTime:Number, color:uint, levelStart:int, levelCount:int, levelTotal:int):SimpleScheduleEntry { 171 var entry:ColoredScheduleEntry = new ColoredScheduleEntry(); 172 entry.startDate = new Date(startTime);//DateUtil.setTime( new Date(), startTime ); 173 entry.endDate = new Date(endTime);//DateUtil.addTime( DateUtil.copyDate( entry.startDate ), duration ); 174 entry.label = "Reservation " + i; 175 entry.backgroundColor = color; 176 /* 177 entry.levelStart = levelStart; 178 entry.levelCount = levelCount; 179 entry.levelTotal = levelTotal; 180 */ 181 return entry; 182 } 183 /* end of copy */ 80 184 81 185 protected function init():void 82 186 { 83 parentApplication.addModelUpdatedSingleCallbacks(service.getTasksAllocationsFromDb(expId), initChart); 187 if (expId != -1) 188 parentApplication.addModelUpdatedSingleCallbacks(service.getTasksAllocationsFromDb(expId), initChart); 189 else 190 initFake(); 191 } 192 193 private function onScrollTimeline( position : Number ) : void 194 { 195 scheduleViewer.xPosition = position; 196 } 197 198 private function onScrollScheduleViewer( event : ScrollEvent ) : void 199 { 200 if( event.direction == ScrollEventDirection.HORIZONTAL ) 201 { 202 timeline.xPosition = event.position; 203 } 204 } 205 206 private function scrollList( event : LayoutScrollEvent ) : void 207 { 208 if( event.direction == ScrollEventDirection.VERTICAL ) 209 { 210 rowsList.verticalScrollPosition = event.position; 211 } 212 } 213 214 protected function rowsList_itemClickHandler(event:ListEvent):void { 215 listIndex = event.rowIndex; 216 } 217 218 private function onZoom(value:Number):void { 219 zoom = value; 220 } 221 222 private function onZoomVertical(value:Number):void { 223 //if(value >= 10){ 224 var verScrollPos:Number = scheduleViewer.verticalScrollPosition; 225 //scheduleViewer.zoomRow(value); 226 var posPix:Number = verScrollPos / scheduleViewer.rowHeight; 227 var posItem:Number = Math.ceil(posPix) * scheduleViewer.rowHeight; 228 229 230 //scheduleViewer.navigator.entryLayoutImpl.contentHeight = rowDataProvider.length * value; 231 //scheduleViewer.yPosition =posItem * value; 232 //rowsList.verticalScrollPosition 233 //setVerticalScrollPosition(posItem * value); 234 235 //if(rowsList.selectedIndex == -1) 236 // rowsList.selectedIndex = 0; 237 var beforeValue:Number = scheduleViewer.rowHeight; 238 scheduleViewer.rowHeight = value; 239 if (rowsList.selectedIndex == -1) { 240 rowsList.selectedIndex = 0; 241 setVerticalScrollPosition(0); 242 } else { 243 /*if((IList(rowsList.dataProvider).length - (rowsList.selectedIndex+1))*value < rowsList.height){ 244 //scheduleViewer.yPosition = (rowsList.selectedIndex + (IList(rowsList.dataProvider).length - (rowsList.selectedIndex+1)))* value; 245 var pos : Number = scheduleViewer.yPosition / value; 246 scheduleViewer.yPosition = rowsList.selectedIndex * value; 247 rowsList.verticalScrollPosition = scheduleViewer.yPosition; 248 }else{*/ 249 //rowsList.of 250 isVZoomed = true; 251 if (beforeValue > value) { 252 scheduleViewer.yPosition = rowsList.selectedIndex * (value - 1); 253 254 rowsList.validateDisplayList(); 255 } 256 scheduleViewer.yPosition = rowsList.selectedIndex * value; 257 listIndex = rowsList.selectedIndex; 258 rowsList.verticalScrollPosition = rowsList.selectedIndex; 259 rowsList.validateDisplayList(); 260 this.validateNow(); 261 262 263 //} 264 } 265 266 //scheduleViewer.yOffset = value; 267 //rowsList.rowHeight = value; 268 //var item : EntryLayoutItem = scheduleViewer.navigator.entryLayoutImpl.findLayoutItem( scheduleViewer.selectedItem ); 269 //rowsList.verticalScrollPosition = scheduleViewer.navigator.convertPixelToItemPosition(item.y); 270 //} 271 //else{ 272 //scheduleViewer.zoomRow( 10); 273 //scheduleViewer.yOffset = 10; 274 //rowsList.rowHeight = 10; 275 //rowsList.verticalScrollPosition = lastPosRowList; 276 277 //} 278 } 279 280 private function setVerticalScrollPosition(value:Number):void { 281 /*var event : ScrollEvent = new ScrollEvent( ScrollEvent.SCROLL ); 282 event.direction = ScrollEventDirection.VERTICAL; 283 event.position = value; 284 event.delta = 0;//scheduleViewer.verticalScrollPosition - value; 285 event.detail = "custom"; 286 //scheduleViewer.verticalScrollPosition = value; 287 scheduleViewer.dispatchEvent( event );*/ 288 289 var itemScrollEvent:LayoutScrollEvent = new LayoutScrollEvent(LayoutScrollEvent.PIXEL_SCROLL); 290 itemScrollEvent.direction = ScrollEventDirection.VERTICAL; 291 itemScrollEvent.position = value; 292 itemScrollEvent.delta = 0;//scheduleViewer.verticalScrollPosition - value; 293 itemScrollEvent.detail = "custom"; 294 scheduleViewer.dispatchEvent(itemScrollEvent); 84 295 } 85 296 … … 116 327 <mx:Label text="{resourceManager.getString('Charts', 'CreatedFor')} {expName} {resourceManager.getString('Charts', 'Day')} {date}" width="100%" styleName="subtitle"/> 117 328 <mx:HBox width="100%" height="100%"> 118 <mx:VBox width="100%" height="100%"> 119 120 <!--~~~~~~~~~~ RESOURCE VIEWER ~~~~~~~~~~--> 121 <mx:AreaChart 122 id="resourceViewer" height="100%" width="100%" 123 paddingRight="5" paddingLeft="5" 124 dataProvider="{parentApplication.gsSimStudioModel.resourceChartComponents['' + expId].resourceTimelineList}" 125 > 126 <mx:horizontalAxis> 127 <mx:DateTimeAxis 128 id="hAxis" 129 dataUnits="seconds" 130 alignLabelsToUnits="false" 131 labelFunction="formatDate" 132 title="{resourceManager.getString('Charts', 'SimulationTime')}" 133 /> 134 </mx:horizontalAxis> 135 136 <mx:verticalAxis> 137 <mx:LinearAxis 138 id="vAxis" 139 baseAtZero="false" 140 maximumLabelPrecision="1" 141 autoAdjust="false" 142 title="{resourceManager.getString('Charts', 'CPU')}" 143 /> 144 </mx:verticalAxis> 145 146 <mx:series> 147 <mx:AreaSeries 148 filterData="false" 149 yField="usage" 150 xField="timestamp" 151 form="step" 152 areaFill="{sc3}" 153 /> 154 </mx:series> 155 156 </mx:AreaChart> 157 <!--~~~~~~~~~~ END OF RESOURCE VIEWER ~~~~~~~~~~--> 158 159 </mx:VBox> 329 <s:VGroup> 330 <s:VGroup height="{ timeline.height }"> 331 <mx:Label text="Machines"/> 332 </s:VGroup> 333 <mx:List id="rowsList" width="135" height="{ scheduleViewerHeight }" 334 dataProvider="{ rowDataProvider }" rowHeight="{ scheduleViewer.rowHeight }" 335 verticalAlign="middle" verticalScrollPolicy="off" 336 itemClick="rowsList_itemClickHandler(event)" selectable="true"> 337 338 339 </mx:List> 340 341 </s:VGroup> 342 343 <s:VGroup> 344 <code:Timeline id="timeline" width="{ scheduleViewerWidth }" borderStyle="none" 345 endDate="{ endDate }" scroll="onScrollTimeline( event.position );" 346 startDate="{ startDate }" zoom="{ zoom }"/> 347 348 <code:ScheduleViewer id="scheduleViewer" width="{ scheduleViewerWidth }" 349 height="{ scheduleViewerHeight }" borderStyle="none" 350 dataProvider="{ dataProvider }" endDate="{ endDate }" 351 entryLayout="flexlib.scheduling.scheduleClasses.layout.SimpleLayout" 352 entryRenderer="flexlib.scheduling.scheduleClasses.renderers.ColoredSolidScheduleEntryRenderer" 353 horizontalLinesViewer="flexlib.scheduling.samples.AlternatingHorizontalLinesViewer" 354 horizontalScrollPolicy="off" itemScroll="scrollList( event )" 355 pixelScroll="onScrollScheduleViewer( event )" 356 pixelScrollEnabled="false" startDate="{ startDate }" 357 verticalLinesViewer="flexlib.scheduling.samples.SolidVerticalLinesViewer" 358 zoom="{ zoom }" /> <!--currentStateChange="viewerComplete(event)" click="onClickEntry(event)"/>--> 359 <s:HGroup width="{ scheduleViewerWidth }"> 360 <s:Group> 361 <s:Rect width="100%" height="100%"> 362 <s:stroke> 363 <s:SolidColorStroke color="0x999999" weight="1"/> 364 </s:stroke> 365 </s:Rect> 366 <!-- 367 <s:HGroup left="10" top="10" right="10" bottom="10"> 368 369 <s:Label text="set number of hosts for page:" top="5"/> 370 <s:NumericStepper id="hostsOnPage" minimum="1" maximum="50" value="{ hostsOnPageVal }"/> 371 <s:Button id="setHostsOnPage" click="setHostsOnPage_clickHandler(event)" label="Set"/> 372 <s:Rect width="50" height="1"/> 373 <s:Label text="page number:" top="5"/> 374 <s:NumericStepper id="pageStepper" value="{ pageNumber }" minimum="1" 375 change="changePage(event)"/> 376 </s:HGroup> 377 --> 378 379 </s:Group> 380 <s:HGroup width="100%"> 381 <s:Label text="Zoom:" top="5"/> 382 <s:HSlider width="100%" id="zoomSlider" change="onZoom( zoomSlider.value );" liveDragging="true" 383 maximum="1000" minimum="1" snapInterval="1" value="{ zoom }"/> 384 </s:HGroup> 385 </s:HGroup> 386 <s:Group> 387 <s:Rect width="100%" height="100%"> 388 <s:stroke> 389 <s:SolidColorStroke color="0x999999" weight="1"/> 390 </s:stroke> 391 </s:Rect> 392 <!-- 393 <s:HGroup width="{ scheduleViewerWidth }" left="10" top="10" right="10" bottom="10"> 394 395 <s:Label text="Goto:" top="5"/> 396 <s:Button label="Now" click="gotoNow();"/> 397 <s:Button label="Selected" click="gotoSelectedEntry();"/> 398 <s:Rect width="100%"/> 399 <s:Button label="Matrix" click="openMatrix()"/> 400 <s:Label text="History (days):" top="5"/> 401 <s:TextInput id="srcHistory" width="25" text="2"/> 402 <s:Button label="Apply" 403 click="historyLength = int(srcHistory.text); onReservationsReady();"/> 404 </s:HGroup> 405 --> 406 </s:Group> 407 <s:Group> 408 <s:Rect width="100%" height="100%"> 409 <s:stroke> 410 <s:SolidColorStroke color="0x999999" weight="1"/> 411 </s:stroke> 412 </s:Rect> 413 <!-- 414 <s:HGroup width="{ scheduleViewerWidth }" left="10" top="10" right="10" bottom="10"> 415 <s:Label text="Show:" top="15"/> 416 417 <s:RadioButton id="onlyJob" label="Only Reservations" groupName="groupByType" selected="true" 418 value="onlyJob"/> 419 <s:RadioButton id="onlyTask" label="Only Tasks" groupName="groupByType" value="onlyTask"/> 420 <s:RadioButton id="both" label="Reservations and Tasks" groupName="groupByType" 421 value="both"/> 422 <s:Rect width="33%" height="1"/> 423 <s:Label text="Group by:" top="5"/> 424 425 <s:RadioButton id="Job" label="Job" groupName="groupByRBG" selected="true" value="Job"/> 426 <s:RadioButton id="Task" label="Task" groupName="groupByRBG" value="Task"/> 427 <s:RadioButton id="ProcessGroup" label="Process Group" groupName="groupByRBG" 428 value="ProcessGroup"/> 429 </s:HGroup> 430 --> 431 </s:Group> 432 433 </s:VGroup> 434 <s:VGroup width="60" height="100%"> 435 <mx:Spacer height="{ timeline.height + (scheduleViewer.height - vZoomSlider.height) / 4 }"/> 436 <mx:Label text="V Zoom"/> 437 <mx:VSlider id="vZoomSlider" change="onZoomVertical(vZoomSlider.value);" 438 liveDragging="true" maximum="{scheduleViewerHeight}" minimum="10" snapInterval="2" 439 value="{ vZoom }"/> 440 441 442 </s:VGroup> 160 443 </mx:HBox> 161 444 </mx:VBox> -
gssim_ui/branches/vine/gssimstudio/src/web/ui/flex/app/gssim/gssimstudio/editor/gssim/editors/archive/ExperimentStatisticsWindow.mxml
r22 r27 42 42 //viewer.addEventListener("configurationLoaded", configurationLoadedEventHandler); 43 43 viewer.expId = i; 44 viewer.expName = experiment.name;44 viewer.expName = (experiment != null ? experiment.name : ""); 45 45 viewer.service = new VineRemoteObjectProxy(parentApplication.service, i); 46 46 resourceChart.addChild(viewer); … … 49 49 var gannt : GanntChart = new GanntChart(); 50 50 gannt.expId = i; 51 gannt.expName = experiment.name;51 gannt.expName = (experiment != null ? experiment.name : ""); 52 52 gannt.service = new VineRemoteObjectProxy(parentApplication.service, i); 53 53 ganntChart.addChild(gannt); … … 57 57 { 58 58 //resourceChart.getChildAt(0).removeEventListener("configurationLoaded", configurationLoadedEventHandler); 59 60 properties.loadFromHashmap(parentApplication.gsSimStudioModel.resourceChartComponents['' + experiment.PK].experimentConfiguration); 59 if (experiment != null) 60 if (parentApplication.gsSimStudioModel.resourceChartComponents['' + experiment.PK] != null) 61 properties.loadFromHashmap(parentApplication.gsSimStudioModel.resourceChartComponents['' + experiment.PK].experimentConfiguration); 61 62 62 63 }
Note: See TracChangeset
for help on using the changeset viewer.