Index: lams_flash/src/central/flash/lams_authoring.fla =================================================================== diff -u -r70923fa577599b29f521d2daa8e348137e480bff -r5ffdfb896de13994030991c7634bb54a7c862404 Binary files differ Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Application.as =================================================================== diff -u -r70923fa577599b29f521d2daa8e348137e480bff -r5ffdfb896de13994030991c7634bb54a7c862404 --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Application.as (.../Application.as) (revision 70923fa577599b29f521d2daa8e348137e480bff) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Application.as (.../Application.as) (revision 5ffdfb896de13994030991c7634bb54a7c862404) @@ -104,7 +104,7 @@ private var _toolbar:Toolbar; private var _toolkit:Toolkit; private var _canvas:Canvas; - private var _PI:PropertyInspectorNew; + private var _PI:PropertyInspector; private var _workspace:Workspace; private var _ccm:CustomContextMenu; @@ -156,7 +156,7 @@ _toolbarLoaded = false; _piLoaded = false; _module = Application.MODULE; - _PI = new PropertyInspectorNew(); + _PI = new PropertyInspector(); _ccm = CustomContextMenu.getInstance(); _root_layout = (_root.layout != undefined || _root.layout != null) ? _root.layout : null; } @@ -345,7 +345,7 @@ case 'Toolbar' : _toolbarLoaded = true; break; - case 'PropertyInspectorNew' : + case 'PropertyInspector' : _piLoaded = true; break; default: @@ -510,7 +510,7 @@ copy(); }else if (Key.isDown(F12_KEY)) { trace("P Pressed") - PropertyInspectorNew(_pi_mc).localOnRelease(); + PropertyInspector(_pi_mc).localOnRelease(); }else if (Key.isDown(Key.CONTROL) && Key.isDown(V_KEY)) { paste(); Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Branch.as =================================================================== diff -u -r70923fa577599b29f521d2daa8e348137e480bff -r5ffdfb896de13994030991c7634bb54a7c862404 --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Branch.as (.../Branch.as) (revision 70923fa577599b29f521d2daa8e348137e480bff) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Branch.as (.../Branch.as) (revision 5ffdfb896de13994030991c7634bb54a7c862404) @@ -22,6 +22,7 @@ */ import org.lamsfoundation.lams.authoring.*; +import org.lamsfoundation.lams.authoring.br.BranchConnector; import org.lamsfoundation.lams.common.*; import org.lamsfoundation.lams.common.util.*; @@ -31,13 +32,21 @@ private var UIID:Number; private var _sequenceActivity:Activity; + private var _direction:Number; + private var _targetUIID:Number; + // TODO: add learningDesignID - public function Branch(activityUIID:Number, fromUIID:Number, toUIID:Number, sequenceActivity:Activity, learningDesignID:Number){ - super(null, fromUIID, toUIID, learningDesignID); + public function Branch(activityUIID:Number, _dir:Number, targetUIID:Number, sequenceActivity:Activity, learningDesignID:Number){ + if(_dir == BranchConnector.DIR_FROM_START) + super(null, null, targetUIID, learningDesignID); + else + super(null, targetUIID, null, learningDesignID); UIID = activityUIID; + _direction = _dir; + _targetUIID = targetUIID; _sequenceActivity = sequenceActivity; } @@ -56,5 +65,13 @@ public function get sequenceActivity():Activity { return _sequenceActivity; } + + public function get direction():Number { + return _direction; + } + + public function get targetUIID():Number { + return _targetUIID; + } } Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as =================================================================== diff -u -r5b8b877a9e81a776b5af2cb4177c60e304e06dc6 -r5ffdfb896de13994030991c7634bb54a7c862404 --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as (.../DesignDataModel.as) (revision 5b8b877a9e81a776b5af2cb4177c60e304e06dc6) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as (.../DesignDataModel.as) (revision 5ffdfb896de13994030991c7634bb54a7c862404) @@ -415,6 +415,15 @@ var newSequenceActivity:SequenceActivity = new SequenceActivity(dto.activityUIID); newSequenceActivity.populateFromDTO(dto); _activities.put(newSequenceActivity.activityUIID, newSequenceActivity); + + if(_activities.get(newSequenceActivity.parentUIID) instanceof BranchingActivity) { + Debugger.log("creating linked Branch for seq: " + newSequenceActivity.activityUIID, Debugger.CRITICAL, "setDesign", "DesignDataModel"); + + // create linked branch + // var sb:Branch = new Branch(newUIID(), BranchConnector.DIR_FROM_START, newSequenceActivity.firstActivity, newSequenceActivity, learningDesignID); + + } + } } @@ -443,6 +452,14 @@ } + // update branches in the hashtable + // loop iover sequence activities + // if(!newSequenceActivity.terminates) { + // get last activity for sequence by transiting from firstActivity. + // var eb:Branch = new Branch(newUIID(), BranchConnector.DIR_TO_END, newSequenceActivity.endActivityUIID, newSequenceActivity, learningDesignID); + // } + // end loop + return success; } Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/BranchConnector.as =================================================================== diff -u -r5b8b877a9e81a776b5af2cb4177c60e304e06dc6 -r5ffdfb896de13994030991c7634bb54a7c862404 --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/BranchConnector.as (.../BranchConnector.as) (revision 5b8b877a9e81a776b5af2cb4177c60e304e06dc6) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/BranchConnector.as (.../BranchConnector.as) (revision 5ffdfb896de13994030991c7634bb54a7c862404) @@ -30,17 +30,16 @@ class org.lamsfoundation.lams.authoring.br.BranchConnector extends CanvasConnection { - private static var DIR_FROM_START:Number = 0; - private static var DIR_TO_END:Number = 1; + public static var DIR_FROM_START:Number = 0; + public static var DIR_TO_END:Number = 1; private var _branch:Branch; - private var _direction:Number; function BranchConnector(){ super(); - Debugger.log("_branch.fromUIID:"+_branch.fromUIID,4,'Constructor','BranchConnector'); - Debugger.log("_branch.toUIID:"+_branch.toUIID,4,'Constructor','BranchConnector'); + Debugger.log("_branch.targetUIID:"+_branch.targetUIID,4,'Constructor','BranchConnector'); + Debugger.log("_branch.direction:"+_branch.direction,4,'Constructor','BranchConnector'); MovieClipUtils.doLater(Proxy.create(this,init)); } @@ -59,21 +58,18 @@ var cv:Canvas = Application.getInstance().getCanvas(); - if(cv.model.activeView.startHub.activity.activityUIID = _branch.fromUIID) direction = DIR_FROM_START; - else if(cv.model.activeView.endHub.activity.activityUIID = _branch.toUIID) direction = DIR_TO_END; + var fromAct_mc = (branch.direction == DIR_FROM_START) ? cv.model.activeView.startHub : cv.model.getActivityMCByUIID(_branch.targetUIID); + var toAct_mc = (branch.direction == DIR_TO_END) ? cv.model.activeView.endHub : cv.model.getActivityMCByUIID(_branch.targetUIID); - var fromAct_mc = (direction == DIR_FROM_START) ? cv.model.activeView.startHub : cv.model.getActivityMCByUIID(_branch.fromUIID); - var toAct_mc = (direction == DIR_TO_END) ? cv.model.activeView.endHub : cv.model.getActivityMCByUIID(_branch.toUIID); - var fromOTC:Object = getFromOTC(fromAct_mc); var toOTC:Object = getToOTC(toAct_mc); Debugger.log('fromAct_mc.getActivity().xCoord:' + fromAct_mc.getActivity().xCoord , 4, 'draw', 'BranchConnector'); Debugger.log('offsetToCentre_x: ' + fromOTC.x, 4, 'draw', 'BranchConnector'); - _startPoint = (direction == DIR_FROM_START) ? new Point(fromAct_mc._x + fromOTC.x,fromAct_mc._y + fromOTC.y) + _startPoint = (branch.direction == DIR_FROM_START) ? new Point(fromAct_mc._x + fromOTC.x,fromAct_mc._y + fromOTC.y) : new Point(fromAct_mc.getActivity().xCoord + fromOTC.x,fromAct_mc.getActivity().yCoord + fromOTC.y); - _endPoint = (direction == DIR_TO_END) ? new Point(toAct_mc._x + toOTC.x, toAct_mc._y + toOTC.y) + _endPoint = (branch.direction == DIR_TO_END) ? new Point(toAct_mc._x + toOTC.x, toAct_mc._y + toOTC.y) : new Point(toAct_mc.getActivity().xCoord + toOTC.x, toAct_mc.getActivity().yCoord + toOTC.y); createConnection(fromAct_mc, toAct_mc, _startPoint, _endPoint, fromOTC, toOTC); @@ -88,14 +84,6 @@ _branch = b; } - public function get direction():Number { - return _direction; - } - - public function set direction(a:Number) { - _direction = a; - } - private function onPress():Void{ // check double-click var now:Number = new Date().getTime(); Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/CanvasBranchView.as =================================================================== diff -u -r5b8b877a9e81a776b5af2cb4177c60e304e06dc6 -r5ffdfb896de13994030991c7634bb54a7c862404 --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/CanvasBranchView.as (.../CanvasBranchView.as) (revision 5b8b877a9e81a776b5af2cb4177c60e304e06dc6) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/CanvasBranchView.as (.../CanvasBranchView.as) (revision 5ffdfb896de13994030991c7634bb54a7c862404) @@ -125,9 +125,7 @@ setSize(cm); break; case 'ADD_SEQUENCE': - Debugger.log("adding seq: " + event.data, Debugger.CRITICAL, "viewUpdate", "CanvasBranchView"); - var b= addSequence(event.data,cm); - Debugger.log("return from seq: " + b, Debugger.CRITICAL, "viewUpdate", "CanvasBranchView"); + addSequence(event.data,cm); break; case 'DRAW_ACTIVITY_SEQ': drawActivity(event.data,cm); @@ -215,6 +213,7 @@ Debugger.log('adding hubs for branch activity:' + _canvasBranchingActivity,Debugger.CRITICAL,'setupConenctorHubs','org.lamsfoundation.lams.CanvasBranchView'); cHubStart_mc = activityLayer.createChildAtDepth("CanvasBranchingConnector",DepthManager.kTop,{_activity:_canvasBranchingActivity.activity,_canvasController:getController(),_canvasView:_canvasBranchView, _x: 0 , _y: 0}); + //cHubEnd_mc = activityLayer.createChildAtDepth("CanvasBranchingConnector",DepthManager.kTop,{_activity:_canvasBranchingActivity.activity,_canvasController:getController(),_canvasView:_canvasBranchView, _x: 0 , _y: 0}); } @@ -227,9 +226,11 @@ Debugger.log('creating init seq activity:' + sequenceActs,Debugger.CRITICAL,'loadSequenceActivities','org.lamsfoundation.lams.CanvasBranchView'); createInitialSequenceActivity(); } else { - // load existing sequences - Debugger.log('attempting to load seq acts:' + sequenceActs,Debugger.CRITICAL,'loadSequenceActivities','org.lamsfoundation.lams.CanvasBranchView'); - + // TODO: make the last create sequence activity in array (order id) the default? + var children:Array = _cm.getCanvas().ddm.getComplexActivityChildren(activity.activityUIID); + // for(var i=0; i 0) { - if(CookieMonster.cookieExists(AUTOSAVE_TAG + _root.userID)) { - canvasModel.autoSaveWait = true; - } - setInterval(Proxy.create(this,autoSave), autosave_config_interval); - } - - clearCanvas(true); - - dispatchEvent({type:'load',target:this}); - } - - } else { - Debugger.log('Event type not recognised : ' + evt.type,Debugger.CRITICAL,'viewLoaded','Canvas'); - } - } - - /** - * Opens the help->about dialog - */ - public function openAboutLams() { - - var controller:CanvasController = canvasView.getController(); - - var dialog:MovieClip = PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue('about_popup_title_lbl', [Dictionary.getValue('stream_reference_lbl')]),closeButton:true,scrollContentPath:'AboutLams'}); - dialog.addEventListener('contentLoaded',Delegate.create(controller, controller.openDialogLoaded)); - - } - - /** - * Opens a design using workspace and user to select design ID - * passes the callback function to recieve selected ID - */ - public function openDesignBySelection(){ - //Work space opens dialog and user will select view - if(_ddm.modified){ - LFMessage.showMessageConfirm(Dictionary.getValue('cv_design_unsaved'), Proxy.create(this,doOpenDesignBySelection), null); - } else { - doOpenDesignBySelection(); - } - } - - public function doOpenDesignBySelection():Void{ - var callback:Function = Proxy.create(this, openDesignById); - var ws = Application.getInstance().getWorkspace(); - ws.userSelectItem(callback); - } - - /** - * Request design from server using supplied ID. - * @usage - * @param designId - * @return - */ - public function openDesignById(workspaceResultDTO:Object){ - Application.getInstance().getWorkspace().getWV().clearDialog(); - ObjectUtils.toString(workspaceResultDTO); - var designId:Number = workspaceResultDTO.selectedResourceID; - - var callback:Function = Proxy.create(this,setDesign); - Application.getInstance().getComms().getRequest('authoring/author.do?method=getLearningDesignDetails&learningDesignID='+designId,callback, false); - - } - - /** - * Request imported design from server - * - * @usage -b * @param learningDesignID - * @return - */ - - public function openDesignByImport(learningDesignID:Number){ - var callback:Function = Proxy.create(this,setDesign, true); - canvasModel.importing = true; - Application.getInstance().getComms().getRequest('authoring/author.do?method=getLearningDesignDetails&learningDesignID='+learningDesignID,callback, false); - - } - - /** - * Request runtime-sequence design from server to be editted. - * - * @usage - * @param learningDesignID - * @return - */ - - public function openDesignForEditOnFly(learningDesignID:Number){ - var callback:Function = Proxy.create(this,setDesign, true); - canvasModel.editing = true; - - Application.getInstance().getComms().getRequest('authoring/author.do?method=getLearningDesignDetails&learningDesignID='+learningDesignID,callback, false); - - } - - public function openBranchView(ba){ - - var cx:Number = ba._x + ba.getVisibleWidth()/2; - var cy:Number = ba._y + ba.getVisibleHeight()/2; - - var _branchView_mc:MovieClip = _canvasView_mc.content.createChildAtDepth("canvasBranchView", DepthManager.kTop, {_x: cx, _y: cy, _canvasBranchingActivity:ba}); - var branchView:CanvasBranchView = CanvasBranchView(_branchView_mc); - branchView.init(canvasModel,undefined); - - //Add listener to view so that we know when it's loaded - branchView.addEventListener('load', Proxy.create(this,viewLoaded)); - - canvasModel.addObserver(branchView); - - ba.branchView = branchView; - - } - - public function closeBranchView() { - canvasModel.activeView = canvasView; - canvasModel.currentBranchingActivity = null; - } - - /** deprecated */ - private function fadeOtherOnCanvas(ba) { - - var k:Array = canvasModel.activitiesDisplayed.values(); - for (var i=0; i 0)) { - if(!ddm.readOnly) { - var tag:String = AUTOSAVE_TAG + _root.userID; - - var dto:Object = _ddm.getDesignForSaving(); - dto.lastModifiedDateTime = new Date(); - dto.readOnly = true; - - // remove existing auto-saved ddm - if (CookieMonster.cookieExists(tag)) { - CookieMonster.deleteCookie(tag); - } - - // auto-save existing ddm - var res = CookieMonster.save(dto,tag,true); - - if(!res){ - // error auto-saving - var msg:String = Dictionary.getValue('cv_autosave_err_msg'); - LFMessage.showMessageAlert(msg); - } - } - } else if(canvasModel.autoSaveWait) { - discardAutoSaveDesign(); - } - - } - - /** - * Show auto-save confirmation message - * - * @usage - * @return - */ - - public function showRecoverMessage() { - var recData:Object = CookieMonster.open(AUTOSAVE_TAG + _root.userID,true); - - LFMessage.showMessageConfirm(Dictionary.getValue('cv_autosave_rec_msg'), Proxy.create(this, recoverDesign, recData), Proxy.create(this, discardAutoSaveDesign), null, null, Dictionary.getValue('cv_autosave_rec_title')); - } - - - /** - * Recover design data from SharedObject and save. - * - * @usage - * @return - */ - - public function recoverDesign(recData:Object) { - setDesign(recData); - discardAutoSaveDesign(); - } - - private function discardAutoSaveDesign() { - canvasModel.autoSaveWait = false; - CookieMonster.deleteCookie(AUTOSAVE_TAG + _root.userID); - LFMenuBar.getInstance().enableRecover(false); - } - public function saveDesign(){ if((_ddm.learningDesignID == undefined || _ddm.learningDesignID == "" || _ddm.learningDesignID == null || _ddm.learningDesignID =="undefined") || _ddm.learningDesignID == Config.NUMERIC_NULL_VALUE && (_ddm.title == "" || _ddm.title == undefined || _ddm.title == null)){ @@ -533,127 +289,7 @@ } } - public function showDesignValidationIssues(responsePacket){ - Debugger.log(responsePacket.messages.length+' issues',Debugger.GEN,'showDesignValidationIssues','Canvas'); - var dp = new Array(); - for(var i=0; i 0) { + if(CookieMonster.cookieExists(AUTOSAVE_TAG + _root.userID)) { + canvasModel.autoSaveWait = true; + } + setInterval(Proxy.create(this,autoSave), autosave_config_interval); + } + + clearCanvas(true); + + dispatchEvent({type:'load',target:this}); + } + + } else { + Debugger.log('Event type not recognised : ' + evt.type,Debugger.CRITICAL,'viewLoaded','Canvas'); + } + } + + + /** + * Called by Comms after a design has been loaded, usually set as the call back of something like openDesignByID. + * Will accept a learningDesign DTO and then render it all out. + * @usage + * @param designData + * @return + */ + public function setDesign(designData:Object){ + + Debugger.log('designData.title:'+designData.title+':'+designData.learningDesignID,4,'setDesign','Canvas'); + + if(clearCanvas(true)){ + + _ddm.setDesign(designData); + + if(canvasModel.importing){ + Application.getInstance().getWorkspace().getWorkspaceModel().clearWorkspaceCache(_ddm.workspaceFolderID); + canvasModel.importing = false; + } else if(canvasModel.editing){ + // TODO: stuff to do before design is displayed + // do we need editing flag in CanvasModel? + } + + checkValidDesign(); + checkReadOnlyDesign(); + canvasModel.setDesignTitle(); + canvasModel.setDirty(); + LFMenuBar.getInstance().enableExport(!canvasModel.autoSaveWait); + + }else{ + Debugger.log('Set design failed as old design could not be cleared',Debugger.CRITICAL,"setDesign",'Canvas'); + } + } + + /** + * Clears the design in the canvas.but leaves other state variables (undo etc..) + * @usage + * @param noWarn + * @return + */ + public function clearCanvas(noWarn:Boolean):Boolean{ + var s = false; + var ref = this; + Debugger.log('noWarn:'+noWarn,4,'clearCanvas','Canvas'); + if(noWarn){ + _ddm = new DesignDataModel(); + + //as its a new instance of the ddm,need to add the listener again + _ddm.addEventListener('ddmUpdate',Proxy.create(this,onDDMUpdated)); + _ddm.addEventListener('ddmBeforeUpdate',Proxy.create(this,onDDMBeforeUpdate)); + checkValidDesign(); + checkReadOnlyDesign(); + + if(canvasModel.activeView instanceof CanvasBranchView) { + canvasModel.activeView.removeMovieClip(); + closeBranchView(); + } + + canvasModel.setDirty(); + + createContentFolder(); + + return true; + }else{ + var fn:Function = Proxy.create(ref,confirmedClearDesign, ref); + LFMessage.showMessageConfirm(Dictionary.getValue('new_confirm_msg'), fn,null); + Debugger.log('Set design failed as old design could not be cleared',Debugger.CRITICAL,"setDesign",'Canvas'); + } + } + + /** + * Auto-saves current DDM (Learning Design on Canvas) to SharedObject + * + * @usage + * @return + */ + + private function autoSave(){ + if(!canvasModel.autoSaveWait && (canvasModel.activitiesDisplayed.size() > 0)) { + if(!ddm.readOnly) { + var tag:String = AUTOSAVE_TAG + _root.userID; + + var dto:Object = _ddm.getDesignForSaving(); + dto.lastModifiedDateTime = new Date(); + dto.readOnly = true; + + // remove existing auto-saved ddm + if (CookieMonster.cookieExists(tag)) { + CookieMonster.deleteCookie(tag); + } + + // auto-save existing ddm + var res = CookieMonster.save(dto,tag,true); + + if(!res){ + // error auto-saving + var msg:String = Dictionary.getValue('cv_autosave_err_msg'); + LFMessage.showMessageAlert(msg); + } + } + } else if(canvasModel.autoSaveWait) { + discardAutoSaveDesign(); + } + + } + + /** + * Removes an activity from Design Data Model using its activityUIID. + * Called by the bin + * @usage + * @param activityUIID + * @return + */ + public function removeActivity(activityUIID:Number){ + Debugger.log('activityUIID:'+activityUIID,4,'removeActivity','Canvas'); + + // remove transitions connected to this activity being removed + _ddm.removeTransitionByConnection(activityUIID); + _ddm.removeActivity(activityUIID); + canvasModel.setDirty(); + canvasModel.selectedItem = null; + } + + /** + * Removes an transition by using its transitionUIID. + * Called by the bin + * @usage + * @param transitionUIID + * @return + */ + public function removeTransition(transitionUIID:Number){ + _ddm.removeTransition(transitionUIID); + canvasModel.setDirty(); + canvasModel.selectedItem = null; + } + + /** + * Removes an transition by using its branchUIID. + * Called by the bin + * @usage + * @param branchUIID + * @return + */ + public function removeBranch(branchUIID:Number){ + _ddm.removeBranch(branchUIID); + canvasModel.setDirty(); + canvasModel.selectedItem = null; + } + + + /** + * Show auto-save confirmation message + * + * @usage + * @return + */ + + public function showRecoverMessage() { + var recData:Object = CookieMonster.open(AUTOSAVE_TAG + _root.userID,true); + + LFMessage.showMessageConfirm(Dictionary.getValue('cv_autosave_rec_msg'), Proxy.create(this, recoverDesign, recData), Proxy.create(this, discardAutoSaveDesign), null, null, Dictionary.getValue('cv_autosave_rec_title')); + } + + + /** + * Recover design data from SharedObject and save. + * + * @usage + * @return + */ + + public function recoverDesign(recData:Object) { + setDesign(recData); + discardAutoSaveDesign(); + } + + private function discardAutoSaveDesign() { + canvasModel.autoSaveWait = false; + CookieMonster.deleteCookie(AUTOSAVE_TAG + _root.userID); + LFMenuBar.getInstance().enableRecover(false); + } + + public function showDesignValidationIssues(responsePacket){ + Debugger.log(responsePacket.messages.length+' issues',Debugger.GEN,'showDesignValidationIssues','Canvas'); + var dp = new Array(); + for(var i=0; iabout dialog + */ + public function openAboutLams() { + + var controller:CanvasController = canvasView.getController(); + + var dialog:MovieClip = PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue('about_popup_title_lbl', [Dictionary.getValue('stream_reference_lbl')]),closeButton:true,scrollContentPath:'AboutLams'}); + dialog.addEventListener('contentLoaded',Delegate.create(controller, controller.openDialogLoaded)); + + } + + public function openBranchView(ba){ + + var cx:Number = ba._x + ba.getVisibleWidth()/2; + var cy:Number = ba._y + ba.getVisibleHeight()/2; + + var _branchView_mc:MovieClip = _canvasView_mc.content.createChildAtDepth("canvasBranchView", DepthManager.kTop, {_x: cx, _y: cy, _canvasBranchingActivity:ba}); + var branchView:CanvasBranchView = CanvasBranchView(_branchView_mc); + branchView.init(canvasModel,undefined); + + //Add listener to view so that we know when it's loaded + branchView.addEventListener('load', Proxy.create(this,viewLoaded)); + + canvasModel.addObserver(branchView); + + ba.branchView = branchView; + + } + + /** + * recieves event fired after update to the DDM + * @usage + * @param evt + * @return + */ + public function onDDMUpdated(evt:Object):Void{ + + Debugger.log('DDM has been updated, _ddm.validDesign:'+_ddm.validDesign,Debugger.GEN,'onDDMUpdated','Canvas'); + //if its valid, its not anymore! + if(_ddm.validDesign){ + _ddm.validDesign = false; + checkValidDesign(); + } + + _ddm.modified = true; + + ApplicationParent.extCall('setSaved', 'false'); + } + + + /** + * recieves event fired before updating the DDM + * @usage + * @param evt + * @return + */ + public function onDDMBeforeUpdate(evt:Object):Void{ + + Debugger.log('DDM about to be updated',Debugger.GEN,'onDDMBeforeUpdate','Canvas'); + //take a snapshot of the design and save it in the undoStack + var snapshot:Object = _ddm.toData(); + _undoStack.push(snapshot); + _redoStack = new Array(); + } + + public function get ddm():DesignDataModel{ + return _ddm; + } + + private function createContentFolder():Void{ + var callback:Function = Proxy.create(this,setNewContentFolderID); + Application.getInstance().getComms().getRequest('authoring/author.do?method=createUniqueContentFolder&userID='+_root.userID,callback, false); + + } + + private function setNewContentFolderID(o:Object) { + if(o instanceof LFError){ + o.showMessageConfirm(); + }else{ + if(StringUtils.isNull(_ddm.contentFolderID)) { _ddm.contentFolderID = String(o); } + } + + } + + /** + * Called when a user confirms its ok to clear the design + * @usage + * @param ref + * @return + */ + public function confirmedClearDesign(ref):Void{ + var fn:Function = Proxy.create(ref,clearCanvas,true); + fn.apply(); + } +} + \ No newline at end of file Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasModel.as =================================================================== diff -u -r5b8b877a9e81a776b5af2cb4177c60e304e06dc6 -r5ffdfb896de13994030991c7634bb54a7c862404 --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasModel.as (.../CanvasModel.as) (revision 5b8b877a9e81a776b5af2cb4177c60e304e06dc6) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasModel.as (.../CanvasModel.as) (revision 5ffdfb896de13994030991c7634bb54a7c862404) @@ -23,6 +23,7 @@ import org.lamsfoundation.lams.common.*; import org.lamsfoundation.lams.authoring.cv.*; +import org.lamsfoundation.lams.authoring.br.BranchConnector; import org.lamsfoundation.lams.authoring.*; import org.lamsfoundation.lams.common.util.*; import org.lamsfoundation.lams.common.ui.*; @@ -63,7 +64,6 @@ private var _importing:Boolean; private var _editing:Boolean; private var _autoSaveWait:Boolean; - //these are hashtables of mc refs MOVIECLIPS (like CanvasActivity or CanvasTransition) //each on contains a reference to the emelment in the ddm (activity or transition) @@ -602,6 +602,11 @@ * TODO: REQUIRE NORMAL BRANCH CLIENT_SIDE VALIDATION *********************************************/ + //check we have 2 valid acts to create the transition. + if(fromAct == toAct){ + return new LFError("You cannot create a Branch between the same Activities","addActivityToTransition",this); + } + //lets make the connection var b:Branch = createBranchConnector(_transitionActivities); Debugger.log('No validation errors, creating branch.......' + b,Debugger.GEN,'addActivityToTransition','CanvasModel'); @@ -716,7 +721,7 @@ var toAct:Activity = transitionActs[1]; // TODO: activeView.defaultSequenceActivity should return SequenceActivity obj - var b:Branch = new Branch(_cv.ddm.newUIID(), fromAct.activityUIID, toAct.activityUIID, activeView.defaultSequenceActivity, _cv.ddm.learningDesignID); + var b:Branch = new Branch(_cv.ddm.newUIID(), BranchConnector.DIR_FROM_START, toAct.activityUIID, activeView.defaultSequenceActivity, _cv.ddm.learningDesignID); return b; } Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspector.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r5ffdfb896de13994030991c7634bb54a7c862404 --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspector.as (.../PropertyInspector.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspector.as (.../PropertyInspector.as) (revision 5ffdfb896de13994030991c7634bb54a7c862404) @@ -44,35 +44,49 @@ private var _canvasModel:CanvasModel; private var _canvasController:CanvasController; private var _dictionary:Dictionary; + //References to components + clips - private var _container:MovieClip; //The container window that holds the dialog. Will contain any init params that were passed into createPopUp - //private var PI_sp:MovieClip; - //private var PI_mc:MovieClip; + private var _piIsExpended:Boolean; private var _tm:ThemeManager; private var toolDisplayName_lbl:Label; + private var clickTarget_mc:MovieClip; private var _depth:Number; + private var delimitLine:MovieClip; + private var expand_mc:MovieClip; + private var collapse_mc:MovieClip; + private static var ICON_OFFSET:Number = 20; + //Properties tab private var title_lbl:Label; private var title_txt:TextInput; private var desc_lbl:Label; private var desc_txt:TextInput; - + private var piHeightHide:Number = 23; + private var piHeightFull:Number = 106; private var grouping_lbl:Label; + private var applied_grouping_lbl:Label; private var currentGrouping_lbl:Label; private var appliedGroupingActivity_cmb:ComboBox; private var editGrouping_btn:Button; private var runOffline_chk:CheckBox; private var defineLater_chk:CheckBox; + //genral info + private var total_num_activities_lbl:Label; + //gates private var gateType_lbl:Label; private var gateType_cmb:ComboBox; private var startOffset_lbl:Label; private var endOffset_lbl:Label; + private var days_lbl:Label; private var hours_lbl:Label; private var mins_lbl:Label; + private var hoursEnd_lbl:Label; + private var minsEnd_lbl:Label; + private var days_stp:NumericStepper; private var hours_stp:NumericStepper; private var mins_stp:NumericStepper; private var endHours_stp:NumericStepper; @@ -87,17 +101,19 @@ private var numLearners_rdo:RadioButton; private var rndGroup_radio:RadioButtonGroup; private var numGroups_stp:NumericStepper; + private var numRandomGroups_stp:NumericStepper; private var numLearners_stp:NumericStepper; //Complex Activity private var min_lbl:Label; private var max_lbl:Label; - private var min_act:ComboBox; - private var max_act:ComboBox; + private var minAct_stp:NumericStepper ; + private var maxAct_stp:NumericStepper; //screen assets: - private var body_pnl:Label; - private var bar_pnl:Label; + private var body_pnl:Panel; + private var bar_pnl:Panel; + private var cover_pnl:Panel; //Defined so compiler can 'see' events added at runtime by EventDispatcher private var dispatchEvent:Function; @@ -108,47 +124,52 @@ /** * Constructor */ - function PropertyInspector(){ + + public function PropertyInspector(){ //register to recive updates form the model Debugger.log('Constructor',Debugger.GEN,'PropertyInspector','PropertyInspector'); + _tm = ThemeManager.getInstance(); //Set up this class to use the Flash event delegation model + EventDispatcher.initialize(this); + _dictionary = Dictionary.getInstance(); //let it wait one frame to set up the components. MovieClipUtils.doLater(Proxy.create(this,init)); - - _dictionary = Dictionary.getInstance(); - //_dictionary.addEventListener('init',Proxy.create(this,setupLabels)); } public function init():Void{ - //var yPos:Number = 0; - _depth = this.getNextHighestDepth(); - //set SP the content path: - //PI_sp.contentPath = "empty_mc"; - //PI_mc = PI_sp.content.attachMovie("PI_items","PI_items",_depth++); - - _canvasModel = _container._canvasModel; - _canvasController = _container._canvasController; - //_global.breakpoint(); + _canvasModel = _canvasModel; + _canvasController = _canvasController; + _piIsExpended = false; + _canvasModel.selectedItem = null; + _canvasModel.setPIHeight(piHeightHide); _canvasModel.addEventListener('viewUpdate',this); - //Debugger.log('_canvasModel: ' + _canvasModel,Debugger.GEN,'init','PropertyInspector'); + clickTarget_mc.onRelease = Proxy.create (this, localOnRelease); + clickTarget_mc.onReleaseOutside = Proxy.create (this, localOnReleaseOutside); //set up handlers title_txt.addEventListener("focusOut",this); desc_txt.addEventListener("focusOut",this); runOffline_chk.addEventListener("click",this); defineLater_chk.addEventListener("click",this); - rndGroup_radio.addEventListener("click",Delegate.create(this,onGroupingMethodChange)); + numGroups_rdo.addEventListener("click",Delegate.create(this,onGroupingMethodChange)); + numLearners_rdo.addEventListener("click",Delegate.create(this,onGroupingMethodChange)); groupType_cmb.addEventListener("change",Delegate.create(this,onGroupTypeChange)); gateType_cmb.addEventListener("change",Delegate.create(this,onGateTypeChange)); appliedGroupingActivity_cmb.addEventListener("change",Delegate.create(this,onAppliedGroupingChange)); + minAct_stp.addEventListener("change",Delegate.create(this,updateOptionalData)); + minAct_stp.addEventListener("focusOut",Delegate.create(this,updateOptionalData)); + maxAct_stp.addEventListener("change",Delegate.create(this,updateOptionalData)); + maxAct_stp.addEventListener("focusOut",Delegate.create(this,updateOptionalData)); + days_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); hours_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); mins_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); + days_stp.addEventListener("focusOut",Delegate.create(this,onScheduleOffsetChange)); hours_stp.addEventListener("focusOut",Delegate.create(this,onScheduleOffsetChange)); mins_stp.addEventListener("focusOut",Delegate.create(this,onScheduleOffsetChange)); endHours_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); @@ -159,18 +180,25 @@ numLearners_stp.addEventListener("change",Delegate.create(this,updateGroupingMethodData)); numLearners_stp.addEventListener("focusOut",Delegate.create(this,updateGroupingMethodData)); numGroups_stp.addEventListener("focusOut",Delegate.create(this,updateGroupingMethodData)); + numRandomGroups_stp.addEventListener("change",Delegate.create(this,updateGroupingMethodData)); + numRandomGroups_stp.addEventListener("focusOut",Delegate.create(this,updateGroupingMethodData)); - this.onEnterFrame = setupLabels; + this.onEnterFrame = setupLabels; + + this.tabChildren = true; + setTabIndex(); + } public function setupLabels(){ - - //trace("I am in PI setupLabels") - //trace("PI_mc "+PI_mc) + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+"" gateType_lbl.text = Dictionary.getValue('trans_dlg_gatetypecmb'); + days_lbl.text = Dictionary.getValue('pi_days'); hours_lbl.text = Dictionary.getValue('pi_hours'); mins_lbl.text = Dictionary.getValue('pi_mins'); + hoursEnd_lbl.text = Dictionary.getValue('pi_hours'); + minsEnd_lbl.text = Dictionary.getValue('pi_mins'); startOffset_lbl.text = Dictionary.getValue('pi_start_offset'); endOffset_lbl.text = Dictionary.getValue('pi_end_offset'); @@ -198,34 +226,121 @@ setStyles(); //fire event to say we have loaded - _container.contentLoaded(); + delete this.onEnterFrame; //hide all the controls at startup + + delimitLine._visible = false; + hideAllSteppers(false); showGroupingControls(false); showGeneralControls(false); showOptionalControls(false); showToolActivityControls(false); showGateControls(false); showAppliedGroupingControls(false); + showGeneralInfo(true); + dispatchEvent({type:'load',target:this}); + } + private function hideAllSteppers(v):Void{ + hours_stp.visible = v + mins_stp.visible = v + endHours_stp.visible = v + endMins_stp.visible = v + numGroups_stp.visible = v + numRandomGroups_stp.visible = v + numLearners_stp.visible = v + minAct_stp.visible = v + maxAct_stp.visible = v + } + + private function setTabIndex(selectedTab:String){ + //Tool Activities + title_txt.tabIndex = 401 + applied_grouping_lbl.tabIndex = 402 + appliedGroupingActivity_cmb.tabIndex = 402 + runOffline_chk.tabIndex = 403 + defineLater_chk.tabIndex = 404 + + //Optional Activities + desc_txt.tabIndex = 402 + minAct_stp.tabIndex = 403 + maxAct_stp.tabIndex = 404 + + //Gate Activities + //gateType_cmb.enabled = true + gateType_cmb.tabIndex = 402 + days_stp.tabIndex = 403 + hours_stp.tabIndex = 404 + mins_stp.tabIndex = 405 + endHours_stp.tabIndex = 406 + endMins_stp.tabIndex = 407 + + //Grouping Activities + groupType_cmb.tabIndex = 402 + numGroups_stp.tabIndex = 403 + numGroups_rdo.tabIndex = 404 + numRandomGroups_stp.tabIndex = 405 + numLearners_rdo.tabIndex = 406 + numLearners_stp.tabIndex = 407 + } + public function localOnRelease():Void{ + + if (_piIsExpended){ + trace("P Pressed in 'localOnRelease' and _piIsExpended is: "+_piIsExpended) + _piIsExpended = false + _canvasModel.setPIHeight(piHeightHide); + showExpand(true); + + }else { + trace("P Pressed in 'localOnRelease' and _piIsExpended is: "+_piIsExpended) + _piIsExpended = true + _canvasModel.setPIHeight(piHeightFull); + showExpand(false); + //Application.getInstance().onResize(); + } + } + + public function isPIExpanded():Boolean{ + return _piIsExpended; + } + + public function piFullHeight():Number{ + return piHeightFull; + } + + + public function showExpand(e:Boolean){ + + //show hide the icons + expand_mc._visible = e; + collapse_mc._visible = !e; + + } + + public function localOnReleaseOutside():Void{ + Debugger.log('Release outside so no event has been fired, current state is: ' + _piIsExpended,Debugger.GEN,'localOnReleaseOutside','PropertyInspector'); + + } /** * Recieves update events from the model. * @usage * @param event * @return */ public function viewUpdate(event:Object):Void{ - //Debugger.log('Recived an Event dispather UPDATE!, updateType:'+event.updateType+', target'+event.target,4,'viewUpdate','PropertyInspector'); + Debugger.log('Recived an Event dispather UPDATE!, updateType:'+event.updateType+', target'+event.target,4,'viewUpdate','PropertyInspector'); //Update view from info object - + var cm:CanvasModel = event.target; switch (event.updateType){ case 'SELECTED_ITEM' : updateItemProperties(cm); + break; @@ -246,37 +361,48 @@ private function updateItemProperties(cm:CanvasModel):Void{ //try to cast the selected item to see what we have (instance of des not seem to work) if(CanvasActivity(cm.selectedItem) != null){ + cover_pnl.visible = false; + // its a Canvas activity then Debugger.log('Its a canvas activity',4,'updateItemProperties','PropertyInspector'); var ca = CanvasActivity(cm.selectedItem); - var a:Activity = ca.activity; + var a:Activity = ca.activity; + var cao = CanvasOptionalActivity(cm.selectedItem); + var cap = CanvasParallelActivity(cm.selectedItem); + var caco:ComplexActivity = ComplexActivity(cao.activity); + var cacp:ComplexActivity = ComplexActivity(cap.activity); + if(a.isGateActivity()){ //its a gate - + delimitLine._visible = true; showGroupingControls(false); showToolActivityControls(false); + showGeneralInfo(false); showOptionalControls(false); - showGateControls(true); - showAppliedGroupingControls(true); + showGateControls(true, !a.readOnly); + showAppliedGroupingControls(false); //showGeneralProperties(a) - showGateActivityProperties(GateActivity(a)); checkEnableGateControls(); + showGateActivityProperties(GateActivity(a)); + showAppliedGroupingProperties(a); //show the title title_txt.text = StringUtils.cleanNull(a.title); desc_txt.text = StringUtils.cleanNull(a.description); - showGeneralControls(true); + showGeneralControls(true, !a.readOnly); + //PI_sp.refreshPane(); }else if(a.isGroupActivity()){ //its a grouping activity - - showGroupingControls(true); - showGeneralControls(true); + delimitLine._visible = true; + showGroupingControls(true, !a.readOnly); + showGeneralControls(true, !a.readOnly); showOptionalControls(false); + showGeneralInfo(false); showRelevantGroupOptions(); showToolActivityControls(false); showGateControls(false); - showAppliedGroupingControls(true); + showAppliedGroupingControls(false); //showGeneralProperties(a) populateGroupingProperties(GroupingActivity(a)); showAppliedGroupingProperties(a); @@ -285,15 +411,56 @@ desc_txt.text = StringUtils.cleanNull(a.description); //PI_sp.refreshPane(); + } else if(a.isOptionalActivity()){ + //its a grouping activity + delimitLine._visible = true; + + showGeneralControls(true, !a.readOnly); + showGroupingControls(false); + //showRelevantGroupOptions(); + showToolActivityControls(false); + showGateControls(false); + showGeneralInfo(false); + showAppliedGroupingControls(false); + showOptionalControls(true, !a.readOnly); + //showGeneralProperties(cca) + populateGroupingProperties(GroupingActivity(caco)); + showAppliedGroupingProperties(caco); + showOptionalActivityProperties(caco); + //show the title + title_txt.text = StringUtils.cleanNull(a.title); + desc_txt.text = StringUtils.cleanNull(a.description); + //PI_sp.refreshPane(); + }else if(a.isParallelActivity()){ + //its a grouping activity + delimitLine._visible = true; + //its an parallel activity + showOptionalControls(false); + showGeneralControls(true, !a.readOnly); + showGeneralInfo(false); + showGroupingControls(false); + //showRelevantGroupOptions(); + showToolActivityControls(false); + showGateControls(false); + showAppliedGroupingControls(true, !a.readOnly); + //showGeneralProperties(cca) + populateGroupingProperties(GroupingActivity(cacp)); + showAppliedGroupingProperties(cacp); + showParallelActivityProperties(cacp); + //show the title + title_txt.text = StringUtils.cleanNull(a.title); + desc_txt.text = StringUtils.cleanNull(a.description); }else{ //its a tool activity - + delimitLine._visible = true; showOptionalControls(false); - showGeneralControls(true); + showGeneralControls(true, !a.readOnly); showGroupingControls(false); - showToolActivityControls(true); + showGeneralInfo(false); + showAppliedGroupingControls(true, !a.readOnly); + showToolActivityControls(true, !a.readOnly); showGateControls(false); - showAppliedGroupingControls(true); + //showAppliedGroupingControls(true); showToolActivityProperties(ToolActivity(a)); //showGeneralProperties(a) showAppliedGroupingProperties(a); @@ -305,16 +472,20 @@ }else if(CanvasOptionalActivity(cm.selectedItem) != null){ + cover_pnl.visible = false; var co = CanvasOptionalActivity(cm.selectedItem); var cca:ComplexActivity = ComplexActivity(co.activity); //its an optional activity - showOptionalControls(true); - showGeneralControls(true); + delimitLine._visible = true; + + showGeneralControls(true, !co.activity.readOnly); showGroupingControls(false); //showRelevantGroupOptions(); showToolActivityControls(false); showGateControls(false); - showAppliedGroupingControls(true); + showGeneralInfo(false); + showAppliedGroupingControls(false); + showOptionalControls(true, !co.activity.readOnly); //showGeneralProperties(cca) populateGroupingProperties(GroupingActivity(cca)); showAppliedGroupingProperties(cca); @@ -324,16 +495,19 @@ desc_txt.text = StringUtils.cleanNull(cca.description); //PI_sp.refreshPane(); }else if(CanvasParallelActivity(cm.selectedItem) != null){ + cover_pnl.visible = false; var co = CanvasParallelActivity(cm.selectedItem); var cca:ComplexActivity = ComplexActivity(co.activity); + delimitLine._visible = true; //its an parallel activity showOptionalControls(false); - showGeneralControls(true); + showGeneralControls(true, !co.activity.readOnly); + showGeneralInfo(false); showGroupingControls(false); //showRelevantGroupOptions(); showToolActivityControls(false); showGateControls(false); - showAppliedGroupingControls(true); + showAppliedGroupingControls(true, !co.activity.readOnly); //showGeneralProperties(cca) populateGroupingProperties(GroupingActivity(cca)); showAppliedGroupingProperties(cca); @@ -342,12 +516,14 @@ title_txt.text = StringUtils.cleanNull(cca.title); desc_txt.text = StringUtils.cleanNull(cca.description); }else if(CanvasTransition(cm.selectedItem) != null){ + cover_pnl.visible = false; var ct = CanvasTransition(cm.selectedItem); var t:Transition = ct.transition; Debugger.log('Its a canvas transition',4,'updateItemProperties','PropertyInspector'); - + delimitLine._visible = false; showTransitionProperties(t); //showGeneralProperties(t) + showGeneralInfo(false); showGeneralControls(false); showOptionalControls(false); showGroupingControls(false); @@ -357,7 +533,11 @@ //PI_sp.complete; }else{ + cover_pnl.visible = false; Debugger.log('Its a something we dont know',Debugger.CRITICAL,'updateItemProperties','PropertyInspector'); + showGeneralInfo(true); + delimitLine._visible = false; + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+" "//Dictionary.getValue('pi_title_generalinfo'); showGroupingControls(false); showGeneralControls(false); showOptionalControls(false); @@ -370,50 +550,107 @@ } } - private function showToolActivityControls(v:Boolean){ + private function showToolActivityControls(v:Boolean, e:Boolean){ + var a = _canvasModel.selectedItem.activity; + var parentAct = _canvasModel.getCanvas().ddm.getActivityByUIID(a.parentUIID) + if (a.parentUIID != null && parentAct.activityTypeID == Activity.PARALLEL_ACTIVITY_TYPE) { + applied_grouping_lbl.visible = v + appliedGroupingActivity_cmb.visible = false; - //desc_lbl.visible = v; - //desc_txt.visible = v; + applied_grouping_lbl.enabled = e; + + }else { + applied_grouping_lbl.visible = false + appliedGroupingActivity_cmb.visible = v; + + appliedGroupingActivity_cmb.enabled = e; + + } + + grouping_lbl.visible = v; currentGrouping_lbl.visible = v; runOffline_chk.visible = v; defineLater_chk.visible = v; editGrouping_btn.visible = v; + + if(e != null) { + grouping_lbl.enabled = e; + currentGrouping_lbl.enabled = e; + runOffline_chk.enabled = e; + defineLater_chk.enabled = e; + editGrouping_btn.enabled = e; + } } - private function showGeneralControls(v:Boolean){ + private function showGeneralInfo(v:Boolean, e:Boolean){ + total_num_activities_lbl.visible = v; + total_num_activities_lbl.enabled = (e != null) ? e : true; + } + + private function showGeneralControls(v:Boolean, e:Boolean){ title_lbl.visible = v; title_txt.visible = v; - desc_lbl.visible = v; - desc_txt.visible = v; + + if(e != null) { + title_lbl.enabled = e; + title_txt.enabled = e; + } } - private function showOptionalControls(v:Boolean){ - + private function showOptionalControls(v:Boolean, e:Boolean){ + min_lbl.visible = v; max_lbl.visible = v; - min_act.visible = v; - max_act.visible = v; + minAct_stp.visible = v; + maxAct_stp.visible = v; + desc_lbl.visible = v; + desc_txt.visible = v; + if(e != null) { + min_lbl.enabled = e; + max_lbl.enabled = e; + minAct_stp.enabled = e; + maxAct_stp.enabled = e; + desc_lbl.enabled = e; + desc_txt.enabled = e; + } + grouping_lbl.visible = false; + + } - private function showGateControls(v:Boolean){ - trace('showGateControls....'+v); + private function showGateControls(v:Boolean, e:Boolean){ + days_lbl.visible = v; hours_lbl.visible = v; mins_lbl.visible = v; + hoursEnd_lbl.visible = v; + minsEnd_lbl.visible = v; + days_stp.visible = v; hours_stp.visible = v; mins_stp.visible = v; - endHours_stp.visible = v; - endMins_stp.visible = v; gateType_lbl.visible = v; gateType_cmb.visible = v; startOffset_lbl.visible = v; - endOffset_lbl.visible = v; + if(e != null) { + days_lbl.enabled = e; + hours_lbl.enabled = e; + mins_lbl.enabled = e; + hoursEnd_lbl.enabled = e; + minsEnd_lbl.enabled = e; + days_stp.enabled = e; + hours_stp.enabled = e; + mins_stp.enabled = e; + gateType_lbl.enabled = e; + gateType_cmb.enabled = e; + startOffset_lbl.enabled = e; + } + } /** @@ -423,16 +660,28 @@ * @param v * @return */ - private function showAppliedGroupingControls(v:Boolean){ - trace('show grp controls.....'+v); + private function showAppliedGroupingControls(v:Boolean, e:Boolean){ grouping_lbl.visible = v; appliedGroupingActivity_cmb.visible = v; - - + if(e != null) { + grouping_lbl.enabled = e; + appliedGroupingActivity_cmb.enabled = e; + } + } - private function showGroupingControls(v:Boolean){ + private function checkEnabledGroupControl(){ + var ca = _canvasModel.selectedItem; + var parentAct = _canvasModel.getCanvas().ddm.getActivityByUIID(ca.activity.parentUIID) + if (ca.activity.parentUIID != null && parentAct.activityTypeID == Activity.PARALLEL_ACTIVITY_TYPE) { + appliedGroupingActivity_cmb.enabled = false; + }else { + appliedGroupingActivity_cmb.enabled = false; + } + } + + private function showGroupingControls(v:Boolean, e:Boolean){ //grouping groupType_lbl.visible = v; groupType_cmb.visible = v; @@ -444,6 +693,7 @@ numGroups_rdo.visible = v; numLearners_rdo.visible = v; numGroups_stp.visible = v; + numRandomGroups_stp.visible = v; numLearners_stp.visible = v; } @@ -453,9 +703,7 @@ private function showToolActivityProperties(ta:ToolActivity){ - toolDisplayName_lbl.text = StringUtils.cleanNull(ta.toolDisplayName); - //title_txt.text = StringUtils.cleanNull(ta.title); - //desc_txt.text = StringUtils.cleanNull(ta.description); + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+" - "+StringUtils.cleanNull(ta.toolDisplayName); runOffline_chk.selected = ta.runOffline; defineLater_chk.selected = ta.defineLater; @@ -465,30 +713,45 @@ } private function showGeneralProperties(ta:ToolActivity){ - - //desc_txt.text = StringUtils.cleanNull(ta.description); } private function showOptionalActivityProperties(ca:ComplexActivity){ - - toolDisplayName_lbl.text = Dictionary.getValue('pi_optional_title'); - //title_txt.text = StringUtils.cleanNull(ta.title); - //desc_txt.text = StringUtils.cleanNull(ta.description); + + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+" - "+Dictionary.getValue('pi_optional_title'); runOffline_chk.selected = ca.runOffline; defineLater_chk.selected = ca.defineLater; - + trace("min options when starting: "+ca.minOptions) + if (ca.minOptions == undefined){ + minAct_stp.value = 0 + }else{ + minAct_stp.value = ca.minOptions + } + + if (ca.maxOptions == undefined){ + maxAct_stp.value = 0 + }else{ + maxAct_stp.value = ca.maxOptions + } currentGrouping_lbl.text = "GroupingUIID:"+StringUtils.cleanNull(ca.runOffline.groupingUIID); } + private function updateOptionalData(){ + var oa = _canvasModel.selectedItem.activity; + var o = ComplexActivity(oa); + o.minOptions = minAct_stp.value; + o.maxOptions = maxAct_stp.value; + oa.init(); + + setModified(); + } + private function showParallelActivityProperties(ca:ComplexActivity){ - toolDisplayName_lbl.text = Dictionary.getValue('pi_parallel_title'); - //title_txt.text = StringUtils.cleanNull(ta.title); - //desc_txt.text = StringUtils.cleanNull(ta.description); + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+" - "+Dictionary.getValue('pi_parallel_title'); runOffline_chk.selected = ca.runOffline; defineLater_chk.selected = ca.defineLater; @@ -498,10 +761,12 @@ } private function showGateActivityProperties(ga:GateActivity){ - toolDisplayName_lbl.text = Dictionary.getValue('pi_activity_type_gate'); + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+" - "+Dictionary.getValue('pi_activity_type_gate'); //loop through combo to find SI of our gate activity type + trace("gate Type is: "+ga.activityTypeID) for (var i=0; i - "+Dictionary.getValue('pi_activity_type_grouping'); Debugger.log('This is the grouping object:',Debugger.GEN,'populateGroupingProperties','PropertyInspector'); ObjectUtils.printObject(g); + //loop through combo to fins SI of our gate activity type for (var i=0; i