Index: lams_flash/src/central/flash/lams_monitoring_v1.fla =================================================================== diff -u -r2c4bb9370bf36386236d0c7d92edc46437d50800 -r36a58619b25a62884e05e3a0d58c2cae326d2e1c Binary files differ Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasActivity.as =================================================================== diff -u -rcdaf8d56ec7cf8c47c0b11eb79f00621d5148eb5 -r36a58619b25a62884e05e3a0d58c2cae326d2e1c --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasActivity.as (.../CanvasActivity.as) (revision cdaf8d56ec7cf8c47c0b11eb79f00621d5148eb5) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasActivity.as (.../CanvasActivity.as) (revision 36a58619b25a62884e05e3a0d58c2cae326d2e1c) @@ -383,34 +383,50 @@ } // get the length of learners from the Monitor Model and run a for loop. - var learnersProgress:Array = mm.allLearnersProgress; + findCurrentUsersInProgress(mm.allLearnersProgress, true, [learner_X, learner_Y, xCoord]); + + } + + private function findCurrentUsersInProgress(learnersProgress:Array, attachIcons:Boolean, offsets:Array):Number { + var noOfCurrent:Number = 0; + var learner_X = offsets[0]; + var learner_Y = offsets[1]; + var xCoord = offsets[2]; + for (var j=0; j (xCoord + getVisibleWidth() - 30)) { - learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName()+activity.activityUIID, learnerContainer.getNextHighestDepth(), {_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y, _hasPlus:true, _clone:false }); - learnerContainer.attachMovie("plusIcon", "plusIcon", learnerContainer.getNextHighestDepth(), {_activity:_activity, _monitorController:_monitorController, _x:learner_X+PLUS_MARGIN_X, _y:learner_Y+PLUS_MARGIN_Y}); - return; + if(attachIcons) { + // Add + icon to indicate that more users are currently at the Activity. + // We are unable to display all the users across the Activity's panel. + Debugger.log("learner_X: " + learner_X + " ref: " + learnerContainer, Debugger.CRITICAL, "drawLearners", "CanvasActivity"); + + if(learner_X > (xCoord + getVisibleWidth() - 30)) { + noOfCurrent += findCurrentUsersInProgress(learnersProgress.slice(j+1, learnersProgress.length), false, null, null); + learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName()+activity.activityUIID, learnerContainer.getNextHighestDepth(), {_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y, _clone:false}); + learnerContainer.attachMovie("plusIcon", "plusIcon", learnerContainer.getNextHighestDepth(), {_activity:_activity, _monitorController:_monitorController, _x:learner_X+PLUS_MARGIN_X, _y:learner_Y+PLUS_MARGIN_Y, _noOfLearners: noOfCurrent}); + + return noOfCurrent; + } + + // attach icon + learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName()+activity.activityUIID, learnerContainer.getNextHighestDepth(), {_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y, _clone:false }); + + // space icons + learner_X += 10; } - - // attach icon - learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName()+activity.activityUIID, learnerContainer.getNextHighestDepth(), {_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y, _hasPlus:false, _clone:false }); - - // space icons - learner_X += 10; } } + + return noOfCurrent; } /** Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasOptionalActivity.as =================================================================== diff -u -rcdaf8d56ec7cf8c47c0b11eb79f00621d5148eb5 -r36a58619b25a62884e05e3a0d58c2cae326d2e1c --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasOptionalActivity.as (.../CanvasOptionalActivity.as) (revision cdaf8d56ec7cf8c47c0b11eb79f00621d5148eb5) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasOptionalActivity.as (.../CanvasOptionalActivity.as) (revision 36a58619b25a62884e05e3a0d58c2cae326d2e1c) @@ -326,35 +326,52 @@ var learner_X = (mm.activeView instanceof CanvasComplexView) ? this._x + learnerOffset_X : _activity.xCoord + learnerOffset_X; var learner_Y = (mm.activeView instanceof CanvasComplexView) ? this._y + learnerOffset_Y : _activity.yCoord + learnerOffset_Y; + findCurrentUsersInProgress(mm.allLearnersProgress, true, learner_X, learner_Y); + } + + private function findCurrentUsersInProgress(learnersProgress:Array, attachIcons:Boolean, offsetX, offsetY):Number { + var mm:MonitorModel = MonitorModel(_monitorController.getModel()); + + var noOfCurrent:Number = 0; + var learner_X = offsetX; + var learner_Y = offsetY; + // get the length of learners from the Monitor Model and run a for loop. - for (var j=0; j (actX + 92)){ - learner_X = actX + learnerOffset_X ; - learner_Y = 27; - hasPlus = true; + if(attachIcons) { + + var actX:Number = (mm.activeView instanceof CanvasComplexView) ? this._x : _activity.xCoord; - learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName(), learnerContainer.getNextHighestDepth(),{_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y, _hasPlus:hasPlus }); - learnerContainer.attachMovie("plusIcon", "plusIcon", learnerContainer.getNextHighestDepth(), {_activity:_activity, _monitorController:_monitorController, _x:learner_X+PLUS_MARGIN_X, _y:learner_Y+PLUS_MARGIN_Y}); - return; + if (learner_X > (actX + 92)){ + learner_X = actX + learnerOffset_X ; + learner_Y = 27; + + noOfCurrent += findCurrentUsersInProgress(learnersProgress.slice(j+1, learnersProgress.length), false, null, null); + + learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName(), learnerContainer.getNextHighestDepth(),{_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y}); + learnerContainer.attachMovie("plusIcon", "plusIcon", learnerContainer.getNextHighestDepth(), {_activity:_activity, _monitorController:_monitorController, _x:learner_X+PLUS_MARGIN_X, _y:learner_Y+PLUS_MARGIN_Y, _noOfLearners:noOfCurrent}); + + return noOfCurrent; + } + + learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName(), learnerContainer.getNextHighestDepth(),{_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y}); + learner_X += 10; } - - learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName(), learnerContainer.getNextHighestDepth(),{_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y, _hasPlus:hasPlus}); - learner_X = learner_X+10; } } + + return noOfCurrent; } - private function draw (){ var numOfChildren = _children.length; Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasParallelActivity.as =================================================================== diff -u -rcdaf8d56ec7cf8c47c0b11eb79f00621d5148eb5 -r36a58619b25a62884e05e3a0d58c2cae326d2e1c --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasParallelActivity.as (.../CanvasParallelActivity.as) (revision cdaf8d56ec7cf8c47c0b11eb79f00621d5148eb5) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasParallelActivity.as (.../CanvasParallelActivity.as) (revision 36a58619b25a62884e05e3a0d58c2cae326d2e1c) @@ -252,31 +252,47 @@ var learner_X = (mm.activeView instanceof CanvasComplexView) ? this._x + learnerOffset_X : _activity.xCoord + learnerOffset_X; var learner_Y = (mm.activeView instanceof CanvasComplexView) ? this._y + learnerOffset_Y : _activity.yCoord + learnerOffset_Y; + findCurrentUsersInProgress(mm.allLearnersProgress, true, learner_X, learner_Y); + } + + private function findCurrentUsersInProgress(learnersProgress:Array, attachIcons:Boolean, offsetX, offsetY):Number { + var mm:MonitorModel = MonitorModel(_monitorController.getModel()); + + var noOfCurrent:Number = 0; + var learner_X = offsetX; + var learner_Y = offsetY; + // get the length of learners from the Monitor Model and run a for loop. - for (var j=0; j (actX + 92)){ - learner_X = actX + learnerOffset_X - learner_Y = 27 - hasPlus = true; - learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName(), this._parent.getNextHighestDepth(),{_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y, _hasPlus:hasPlus }); - learnerContainer.attachMovie("plusIcon", "plusIcon", learnerContainer.getNextHighestDepth(), {_activity:_activity, _monitorController:_monitorController, _x:learner_X+PLUS_MARGIN_X, _y:learner_Y+PLUS_MARGIN_Y}); - return; + noOfCurrent++; + + if(attachIcons) { + var actX:Number = (mm.activeView instanceof CanvasComplexView) ? this._x : _activity.xCoord; + + if (learner_X > (actX + 92)){ + learner_X = actX + learnerOffset_X; + learner_Y = 27; + + learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName(), this._parent.getNextHighestDepth(),{_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y}); + learnerContainer.attachMovie("plusIcon", "plusIcon", learnerContainer.getNextHighestDepth(), {_activity:_activity, _monitorController:_monitorController, _x:learner_X+PLUS_MARGIN_X, _y:learner_Y+PLUS_MARGIN_Y, _noOfLearners:noOfCurrent}); + + return noOfCurrent; + } + + learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName(), this._parent.getNextHighestDepth(),{_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y}); + learner_X += 10; } - - learnerContainer.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName(), this._parent.getNextHighestDepth(),{_activity:_activity, learner:learner, _monitorController:_monitorController, _x:learner_X, _y:learner_Y, _hasPlus:hasPlus}); - learner_X = learner_X+10 } } + + return noOfCurrent; } private function draw(){ Index: lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/LearnersDialog.as =================================================================== diff -u -r7b65bab3de4ed5068c5631a245c30cb4eaa8f098 -r36a58619b25a62884e05e3a0d58c2cae326d2e1c --- lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/LearnersDialog.as (.../LearnersDialog.as) (revision 7b65bab3de4ed5068c5631a245c30cb4eaa8f098) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/LearnersDialog.as (.../LearnersDialog.as) (revision 36a58619b25a62884e05e3a0d58c2cae326d2e1c) @@ -22,6 +22,7 @@ */ import mx.controls.* +import mx.controls.gridclasses.DataGridColumn; import mx.utils.* import mx.managers.* import mx.events.* @@ -31,6 +32,7 @@ import org.lamsfoundation.lams.common.dict.* import org.lamsfoundation.lams.common.style.* import org.lamsfoundation.lams.common.* +import org.lamsfoundation.lams.authoring.Activity; import org.lamsfoundation.lams.monitoring.* import org.lamsfoundation.lams.monitoring.mv.* import org.lamsfoundation.lams.monitoring.mv.tabviews.* @@ -41,19 +43,16 @@ */ class LearnersDialog extends MovieClip implements Dialog{ - public var RT_ORG:String = "Organisation"; - public static var USERS_X:Number = -5; - public static var USER_OFFSET:Number = 20; - //References to components + clips private var _container:MovieClip; //The container window that holds the dialog private var close_btn:Button; // Close window button + private var view_btn:Button; + private var learners_lbl:Label; private var panel:MovieClip; //The underlaying panel base - private var learner_scp:MovieClip; // learners container - private var _learner_mc:MovieClip; + private var learner_dgd:DataGrid; private var fm:FocusManager; //Reference to focus manager private var themeManager:ThemeManager; //Theme manager @@ -62,27 +61,29 @@ private var xCloseOffset:Number; private var yCloseOffset:Number; - private var _lessonTabView:LessonTabView; + private var learner_dgd_Xoffset:Number; + private var learner_dgd_Yoffset:Number; + private var _monitorModel:MonitorModel; - private var _monitorView:MonitorView; + private var _monitorView; private var _monitorController:MonitorController; - - private var _learnerList:Array; + private var currentActivity:Activity; + //These are defined so that the compiler can 'see' the events that are added at runtime by EventDispatcher private var dispatchEvent:Function; public var addEventListener:Function; public var removeEventListener:Function; - /** + /** * constructor */ function LearnersDialog(){ //Set up this class to use the Flash event delegation model EventDispatcher.initialize(this); //Create a clip that will wait a frame before dispatching init to give components time to setup - MovieClipUtils.doLater(Proxy.create(this,init)); + MovieClipUtils.doLater(Proxy.create(this, init)); } /** @@ -97,13 +98,18 @@ //Set the text for buttons close_btn.label = Dictionary.getValue('ls_win_learners_close_btn'); + view_btn.label = "View Learner"; //Dictionary.getValue('ls_win_learners_view_btn'); + view_btn._visible = false; + view_btn.enabled = false; //Set the labels //EVENTS //Add event listeners for ok, cancel and close buttons - close_btn.addEventListener('click',Delegate.create(this, close)); - + close_btn.addEventListener('click', Delegate.create(this, close)); + view_btn.addEventListener('click', Delegate.create(this, viewLearner)); + learner_dgd.addEventListener('cellPress', Delegate.create(this, cellPress)); + //Assign Click (close button) and resize handlers _container.addEventListener('click',this); _container.addEventListener('size',this); @@ -112,6 +118,9 @@ xCloseOffset = panel._width - close_btn._x; yCloseOffset = panel._height - close_btn._y; + learner_dgd_Xoffset = learner_dgd._width/panel._width; + learner_dgd_Yoffset = learner_dgd._height/panel._height; + //fire event to say we have loaded _container.contentLoaded(); } @@ -121,20 +130,27 @@ * @usage * @return */ - public function setUpContent():Void{ - Debugger.log('_monitorView:'+_monitorView,Debugger.GEN,'setUpContent','org.lamsfoundation.lams.LearnersDialog'); - + public function setUpContent(mm:MonitorModel, _currentActivity:Activity):Void{ //get a ref to the controller and kkep it here to listen for events: - _monitorController = _monitorView.getController(); - var mm:MonitorModel = MonitorModel(_monitorController.getModel()); + _monitorController = (_monitorView instanceof LessonTabView) ? LessonTabView(_monitorView).getController() : MonitorTabView(_monitorView).getController(); + _monitorModel = mm; - learners_lbl.text = Dictionary.getValue('ls_win_learners_heading_lbl') + " " + mm.getSequence().organisationName; + currentActivity = (_currentActivity != null || _currentActivity != undefined) ? _currentActivity : null; + learners_lbl.text = (currentActivity != null) ? Dictionary.getValue('ls_win_learners_heading_lbl', [Dictionary.getValue('ls_win_learners_heading_activity_lbl'), currentActivity.title]) : Dictionary.getValue('ls_win_learners_heading_lbl', [Dictionary.getValue('ls_win_learners_heading_class_lbl'), _monitorModel.getSequence().organisationName]); + learners_lbl.autoSize = "left"; + //Add event listeners for ok, cancel and close buttons - close_btn.addEventListener('onPress',Delegate.create(this, close)); + close_btn.addEventListener('onPress', Delegate.create(this, close)); + view_btn._visible = (currentActivity != null); - var callback:Function = Proxy.create(this,loadLearners); - Application.getInstance().getComms().getRequest('monitoring/monitoring.do?method=getLessonLearners&lessonID='+_root.lessonID,callback, false); + if(currentActivity == null) { + var callback:Function = Proxy.create(this, loadLearners); + Application.getInstance().getComms().getRequest('monitoring/monitoring.do?method=getLessonLearners&lessonID='+_root.lessonID, callback, false); + } else { + // get users from progress details + loadLearners(_monitorModel.allLearnersProgress); + } } /** @@ -150,12 +166,13 @@ panel.setStyle('styleName', styleObj); //Apply scrollpane style - styleObj = themeManager.getStyleObject('scrollpane'); - learner_scp.setStyle('styleName', styleObj); + styleObj = themeManager.getStyleObject('datagrid'); + learner_dgd.setStyle('styleName', styleObj); //Get the button style from the style manager and apply to both buttons styleObj = themeManager.getStyleObject('button'); close_btn.setStyle('styleName',styleObj); + view_btn.setStyle('styleName', styleObj); //Apply label style styleObj = themeManager.getStyleObject('label'); @@ -198,7 +215,7 @@ * @param newworkspaceView * @return */ - public function set monitorView (newMonitorView:MonitorView):Void { + public function set monitorView (newMonitorView):Void { _monitorView = newMonitorView; } @@ -207,7 +224,7 @@ * @usage * @return */ - public function get monitorView ():MonitorView { + public function get monitorView () { return _monitorView; } @@ -222,14 +239,8 @@ * Clear Method to clear movies from scrollpane * */ - public static function clearScp(array:Array):Array{ - if(array != null){ - for (var i=0; i