Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/CanvasBranchView.as =================================================================== diff -u -r745cc845b7776b062471723072abb234db21f292 -rfb44c864e5b07db11a66557fa955f39b76c3f56f --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/CanvasBranchView.as (.../CanvasBranchView.as) (revision 745cc845b7776b062471723072abb234db21f292) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/CanvasBranchView.as (.../CanvasBranchView.as) (revision fb44c864e5b07db11a66557fa955f39b76c3f56f) @@ -380,7 +380,7 @@ setSize(model); - if ((model instanceof CanvasModel) || (model instanceof MonitorModel && model.inBranchView == false)) { + if (!(model.activeView instanceof CanvasBranchView)) { var tm:TransitionManager = new TransitionManager(this); tm.startTransition({type:mx.transitions.Zoom, direction:0, duration:1, easing:mx.transitions.easing.Bounce.easeOut}); @@ -412,9 +412,6 @@ if(model instanceof CanvasModel) model.getCanvas().hideBin(); //typo model.selectedItem = null; - if (model instanceof MonitorModel) - model.inBranchView = false; - var bkeys:Array = model.branchesDisplayed.keys(); for(var i=0; i 0, we have either an optional activity or an optional sequence + for (var k=0; k 0 we have an optional sequence, for each sequence check its children activities + if (cActivity.children[j].children != null) { + var matchedAct = matchChildActivity(cActivity.children[j].children, dropTarget); + if (matchedAct != null) { + cActivity = matchedAct; + hasHit = true; + break; + } + } + } + } + } + } - hasHit = (cActivity.activity.activityUIID == dropTarget.activity.activityUIID) ? checkHit(cActivity, act) : hasHit; + if (CanvasBranchView(_monitorModel.activeView).isEnd(MovieClip(dropTarget))) { + // the drop target is the exit door icon of a branching activity + hasHit = true; + forceCompleteTransfer(act, dropTarget); + } + + var _parent:Object = _monitorModel.getMonitor().ddm.getActivityByUIID(dropTarget.activity.parentUIID); + var _grandParent:Object = _monitorModel.getMonitor().ddm.getActivityByUIID(_parent.parentUIID); + + if (_parent.isOptionalSequenceActivity(_grandParent)) { + hasHit = true; + forceCompleteTransfer(act, dropTarget); + } + + if (cActivity.activity.activityUIID == dropTarget.activity.activityUIID) { + hasHit = checkHit(cActivity, act); + } } - } if (act.hitTest(_monitorModel.endGate)){ @@ -270,9 +355,7 @@ var msg:String = Dictionary.getValue('al_error_forcecomplete_notarget',[act.Learner.getFullName()]) ; LFMessage.showMessageAlert(msg); } - } - } private function reloadProgress(ref, URLToSend){ @@ -399,7 +482,6 @@ exportClassPortfolio(); }else if(tgt.indexOf("refresh_btn") != -1){ if(_monitorModel.activeView instanceof CanvasBranchView) { - _monitorModel.inBranchView = false; _monitorModel.activeView.removeMovieClip(); _monitorModel.getMonitor.closeBranchView(); } Index: lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/mv/MonitorModel.as =================================================================== diff -u -r6db3ba16d0dc5a1c8e4f8f772721c7d0c4bf490c -rfb44c864e5b07db11a66557fa955f39b76c3f56f --- lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/mv/MonitorModel.as (.../MonitorModel.as) (revision 6db3ba16d0dc5a1c8e4f8f772721c7d0c4bf490c) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/mv/MonitorModel.as (.../MonitorModel.as) (revision fb44c864e5b07db11a66557fa955f39b76c3f56f) @@ -62,7 +62,6 @@ private var selectedTab:Number; private var _dialogOpen:String; // the type of dialog currently open - private var _inBranchView:Boolean; private var _staffLoaded:Boolean; private var _learnersLoaded:Boolean; private var _isLessonProgressChanged:Boolean; @@ -151,7 +150,6 @@ public function MonitorModel (monitor:Monitor){ _monitor = monitor; - _inBranchView = false; _showLearners = true; isDesignDrawn = true; _drawButtons = true; @@ -391,21 +389,37 @@ return _showLearners; } + /* + * If learner is in branching or optional sequence, checks to make sure the droptarget lies in the + * same path, and not part of a different branch/sequence. If learner is not in branching, checks + * to make sure they don't drag to the optional child of a complex activity. + */ public function getIsValidDropTarget(learnerActivityID:Number, activity:Object):Boolean { var activityToCheck = activity; - var targetIsAccessible:Boolean = false; // must check if target is accessible, i.e. if inside branching, on the same branch - do { - var transObj:Object = app.getMonitor().ddm.getTransitionsForActivityUIID(activityToCheck.activityUIID); - var previousAct = app.getMonitor().ddm.getActivityByUIID(transObj.into.fromUIID); - if (previousAct.activityID == learnerActivityID) { - Debugger.log("Activity target is accessible", Debugger.CRITICAL, "getIsValidDropTarget", "MonitorModel"); - targetIsAccessible = true; - break; + var isCBV:Boolean = activeView instanceof org.lamsfoundation.lams.authoring.br.CanvasBranchView; + var _parent:Object = getMonitor().ddm.getActivityByUIID(activity.parentUIID); + var _grandParent:Object = getMonitor().ddm.getActivityByUIID(_parent.parentUIID); + + if (isCBV || _parent.isOptionalSequenceActivity(_grandParent)) { + do { + var transObj:Object = app.getMonitor().ddm.getTransitionsForActivityUIID(activityToCheck.activityUIID); + var previousAct = app.getMonitor().ddm.getActivityByUIID(transObj.into.fromUIID); + if (previousAct.activityID == learnerActivityID) { // on same sequence or end or branching + Debugger.log("Activity target is accessible", Debugger.CRITICAL, "getIsValidDropTarget", "MonitorModel"); + return true + } + activityToCheck = previousAct; + } while (transObj.into.fromUIID != null); + return false + } + else { + var _indexArray:Array = activitiesOnCanvas(); + for (var i=0; i<_indexArray.length; i++) { + if (_indexArray[i].activity.activityID == activityToCheck.activityID) + return true; } - activityToCheck = previousAct; - } while (transObj.into.fromUIID != null); - - return targetIsAccessible; + return false; + } } public function activitiesOnCanvas():Array{ @@ -416,7 +430,8 @@ } return actAll; - } + } + /** * Compares the design in the CanvasModel (what is displayed on the screen) * against the design in the DesignDataModel and updates the Canvas Model accordingly. @@ -653,7 +668,8 @@ return (activeView == view); } - public function addNewBranch(sequence:SequenceActivity, branchingActivity:BranchingActivity, isDefault:Boolean):Void { + public function addNewBranch(sequence:SequenceActivity, branchingActivity:BranchingActivity, isDefault:Boolean):Void { + Debugger.log("sequence.firstActivityUIID: "+sequence.firstActivityUIID, Debugger.CRITICAL, "addNewBranch", "MonitorModel"); if(sequence.firstActivityUIID == null && app.getMonitor().ddm.getComplexActivityChildren(sequence.activityUIID).length <= 0) { @@ -887,14 +903,6 @@ } } - public function get inBranchView():Boolean { - return _inBranchView; - } - - public function set inBranchView(s:Boolean) { - _inBranchView = s; - } - public function tabHelp(){ var callback:Function = Proxy.create(this, openTabHelp); app.getHelpURL(callback) Index: lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/MonitorTabView.as =================================================================== diff -u -r6db3ba16d0dc5a1c8e4f8f772721c7d0c4bf490c -rfb44c864e5b07db11a66557fa955f39b76c3f56f --- lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/MonitorTabView.as (.../MonitorTabView.as) (revision 6db3ba16d0dc5a1c8e4f8f772721c7d0c4bf490c) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/MonitorTabView.as (.../MonitorTabView.as) (revision fb44c864e5b07db11a66557fa955f39b76c3f56f) @@ -276,7 +276,7 @@ drawDesignCalled = undefined; - if(openBranchingActivity && mm.inBranchView == true) { // learner has been force-completed + if(openBranchingActivity && (mm.activeView instanceof CanvasBranchView)) { // learner has been force-completed showAssets(false); mm.getMonitor().getProgressData(mm.getSequence()); mm.activeView.removeMovieClip();