Index: lams_central/web/lams_authoring.swf =================================================================== diff -u -r19af16b236aaa6a6a3bda616622c33b9eba385e6 -r34cb1725fa1d312652042fd3108aceaa65adf7ad Binary files differ Index: lams_central/web/lams_authoring_library.swf =================================================================== diff -u -r19af16b236aaa6a6a3bda616622c33b9eba385e6 -r34cb1725fa1d312652042fd3108aceaa65adf7ad Binary files differ Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Activity.as =================================================================== diff -u -r3160650bc3f6051ab417c4c78a5103cc7237cb8f -r34cb1725fa1d312652042fd3108aceaa65adf7ad --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Activity.as (.../Activity.as) (revision 3160650bc3f6051ab417c4c78a5103cc7237cb8f) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Activity.as (.../Activity.as) (revision 34cb1725fa1d312652042fd3108aceaa65adf7ad) @@ -338,13 +338,13 @@ _yCoord = dto.yCoord; _xCoord = dto.xCoord; _libraryActivityUIImage = dto.libraryActivityUIImage; - _applyGrouping = dto.applyGrouping; - _runOffline = dto.runOffline; - _defineLater = dto.defineLater; + _applyGrouping = (dto.applyGrouping) ? dto.applyGrouping : false; + _runOffline = (dto.runOffline) ? dto.runOffline : false; + _defineLater = (dto.defineLater) ? dto.defineLater : false; _createDateTime = dto.createDateTime; _groupingSupportType = dto.groupingSupportType; - _readOnly = dto.readOnly; - _stopAfterActivity = dto.stopAfterActivity; + _readOnly = (dto.readOnly) ? dto.readOnly : false; + _stopAfterActivity = (dto.stopAfterActivity) ? dto.stopAfterActivity : false; } @@ -393,12 +393,13 @@ return dto; } - public function clone():Activity{ + public function clone(a:Activity):Activity{ var dto:Object = toData(); - var n = new Activity(null); + + var n = (a != null) ? a : new Activity(null); n.populateFromDTO(dto); + return n; - } //getters and setters: Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Application.as =================================================================== diff -u -rb27a8c9cdf8a0d0ff46fe4ecb91461c9c8d917f0 -r34cb1725fa1d312652042fd3108aceaa65adf7ad --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Application.as (.../Application.as) (revision b27a8c9cdf8a0d0ff46fe4ecb91461c9c8d917f0) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Application.as (.../Application.as) (revision 34cb1725fa1d312652042fd3108aceaa65adf7ad) @@ -346,7 +346,7 @@ default: } - _layout.manager.addLayoutItem(evt.target.className, evt.target); + _layout.manager.addLayoutItem(new LFLayoutItem(evt.target.className, evt.target)); _root.preloader.complete(); @@ -584,7 +584,7 @@ } public function copy():Void{ - var ca = _canvas.model.selectedItem + var ca = _canvas.model.selectedItem; if (ca != null){ if (ca.activity.parentUIID == null || ca.activity.parentUIID == undefined){ setClipboardData(ca, COPY_TYPE); @@ -598,7 +598,7 @@ } } - public function openEditActivtiyContent():Void{ + public function openEditActivityContent():Void{ var ca = _canvas.model.selectedItem if (CanvasActivity(ca) != null){ _canvas.view.getController().activityDoubleClick(ca); Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/BranchingActivity.as =================================================================== diff -u -rf080c872ce65a7e79203a01742894294056b9adc -r34cb1725fa1d312652042fd3108aceaa65adf7ad --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/BranchingActivity.as (.../BranchingActivity.as) (revision f080c872ce65a7e79203a01742894294056b9adc) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/BranchingActivity.as (.../BranchingActivity.as) (revision 34cb1725fa1d312652042fd3108aceaa65adf7ad) @@ -92,6 +92,19 @@ return dto; } + /** + * Creates an exact copy of this ComplexActivity + * @usage + * @return the copy + */ + public function clone():BranchingActivity{ + var dto:Object = toData(); + var ba = new BranchingActivity(); + ba.populateFromDTO(dto); + return ba; + } + + public function set type(a:Number):Void{ _activityTypeID = a; } Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/ComplexActivity.as =================================================================== diff -u -r93a02624adff176042f98649f582d3c919b652d4 -r34cb1725fa1d312652042fd3108aceaa65adf7ad --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/ComplexActivity.as (.../ComplexActivity.as) (revision 93a02624adff176042f98649f582d3c919b652d4) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/ComplexActivity.as (.../ComplexActivity.as) (revision 34cb1725fa1d312652042fd3108aceaa65adf7ad) @@ -100,6 +100,9 @@ var dto:Object = toData(); var ca = new ComplexActivity(); ca.populateFromDTO(dto); + + Debugger.log("ca.readOnly: " + ca.readOnly, Debugger.CRITICAL, "clone", "ComplexActivity"); + return ca; } Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/GateActivity.as =================================================================== diff -u -rbc0cb5fdeb5ca1b0096d9878301b8ba7327661ab -r34cb1725fa1d312652042fd3108aceaa65adf7ad --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/GateActivity.as (.../GateActivity.as) (revision bc0cb5fdeb5ca1b0096d9878301b8ba7327661ab) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/GateActivity.as (.../GateActivity.as) (revision 34cb1725fa1d312652042fd3108aceaa65adf7ad) @@ -92,6 +92,13 @@ } + public function clone():GateActivity{ + var dto:Object = toData(); + var ga = new GateActivity(); + ga.populateFromDTO(dto); + return ga; + } + /** Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/GroupingActivity.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r34cb1725fa1d312652042fd3108aceaa65adf7ad --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/GroupingActivity.as (.../GroupingActivity.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/GroupingActivity.as (.../GroupingActivity.as) (revision 34cb1725fa1d312652042fd3108aceaa65adf7ad) @@ -70,6 +70,18 @@ return dto; } + /** + * Creates an exact copy of this ComplexActivity + * @usage + * @return the copy + */ + public function clone():GroupingActivity{ + // TODO: new grouping object + var dto:Object = toData(); + var ga = new GroupingActivity(); + ga.populateFromDTO(dto); + return ga; + } //get and sets Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/ToolActivity.as =================================================================== diff -u -rb045886e86cb40c9f12c589a7e1000ec3c89177a -r34cb1725fa1d312652042fd3108aceaa65adf7ad --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/ToolActivity.as (.../ToolActivity.as) (revision b045886e86cb40c9f12c589a7e1000ec3c89177a) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/ToolActivity.as (.../ToolActivity.as) (revision 34cb1725fa1d312652042fd3108aceaa65adf7ad) @@ -205,6 +205,7 @@ //parents properties: n.objectType = _objectType; + n.activityTypeID = _activityTypeID; n.activityID = _activityID; n.activityCategoryID = _activityCategoryID; @@ -225,20 +226,18 @@ n.libraryActivityUIImage = _libraryActivityUIImage; n.applyGrouping = _applyGrouping; n.runOffline = _runOffline; - //now removed - //n.offlineInstructions = _offlineInstructions; - //n.onlineInstructions = _onlineInstructions; n.defineLater = _defineLater; n.createDateTime = _createDateTime; n.groupingSupportType = _groupingSupportType; - + //class props n.authoringURL = _authoringURL; n.helpURL = _helpURL; n.toolDisplayName = _toolDisplayName; n.toolSignature = _toolSignature; n.toolContentID = _toolContentID; n.toolID = _toolID; + n.supportsContribute = _supportsContribute; n.supportsDefineLater = _supportsDefineLater; n.supportsModeration = _supportsRunOffline; Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Transition.as =================================================================== diff -u -r44ced49b5c5e10ec15551f036d98c125b4005e5c -r34cb1725fa1d312652042fd3108aceaa65adf7ad --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Transition.as (.../Transition.as) (revision 44ced49b5c5e10ec15551f036d98c125b4005e5c) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Transition.as (.../Transition.as) (revision 34cb1725fa1d312652042fd3108aceaa65adf7ad) @@ -90,7 +90,6 @@ return p.isOptionalSequenceActivity(ddm.getActivityByUIID(p.parentUIID)); } - public function toData():Object{ var dto:Object = new Object(); dto.transitionID = (_transitionID) ? _transitionID : Config.NUMERIC_NULL_VALUE; @@ -105,7 +104,14 @@ dto.learningDesignID = (_learningDesignID) ? _learningDesignID : Config.NUMERIC_NULL_VALUE; return dto; } - + + public function clone():Transition{ + var dto:Object = toData(); + var t = new Transition(); + t.populateFromDTO(dto); + return t; + } + public function set transitionID(a:Number):Void{ _transitionID = a; } Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasController.as =================================================================== diff -u -r19af16b236aaa6a6a3bda616622c33b9eba385e6 -r34cb1725fa1d312652042fd3108aceaa65adf7ad --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasController.as (.../CanvasController.as) (revision 19af16b236aaa6a6a3bda616622c33b9eba385e6) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasController.as (.../CanvasController.as) (revision 34cb1725fa1d312652042fd3108aceaa65adf7ad) @@ -65,7 +65,7 @@ } public function activityClick(ca:Object):Void{ - + _tempSelectedItem = _canvasModel.selectedItem; _canvasModel.selectedItem = null; @@ -163,8 +163,11 @@ var optionalOnCanvas:Array = _canvasModel.findOptionalActivities(); var parallelOnCanvas:Array = _canvasModel.findParallelActivities(); - - if(_canvasModel.isDragging){ + + Debugger.log("optional on canvas: " + optionalOnCanvas.length, Debugger.CRITICAL, "activityRelease", "CanvasController"); + + + if(_canvasModel.isDragging) { ca.stopDrag(); if (ca.activity.isOptionalActivity() || ca.activity.isOptionsWithSequencesActivity()) { ca.swapDepths(ca.depthHistory); @@ -838,8 +841,6 @@ Debugger.log(_canvasModel.activeView + " " + _canvasModel.activeView instanceof CanvasBranchView,Debugger.GEN,'canvasRelease','CanvasController'); Debugger.log('_canvasModel.activeTool:'+_canvasModel.activeTool,Debugger.GEN,'canvasRelease','CanvasController'); - app.toolbar.view.getController().hideOptionPanels(); - _canvasModel.selectedItem = null; var parent:SequenceActivity = null; Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasHelper.as =================================================================== diff -u -rfb923a2bc104eca9d2ce0e6b768eda6dafe5114a -r34cb1725fa1d312652042fd3108aceaa65adf7ad --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasHelper.as (.../CanvasHelper.as) (revision fb923a2bc104eca9d2ce0e6b768eda6dafe5114a) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasHelper.as (.../CanvasHelper.as) (revision 34cb1725fa1d312652042fd3108aceaa65adf7ad) @@ -487,10 +487,53 @@ Debugger.log('instance is Tool',Debugger.GEN,'setPastedItem','Canvas'); var callback:Function = Proxy.create(this, setNewContentID, o); Application.getInstance().getComms().getRequest('authoring/author.do?method=copyToolContent&toolContentID='+o.toolContentID+'&userID='+_root.userID,callback, false); + } else if(o.data instanceof CanvasOptionalActivity || o.data instanceof CanvasParallelActivity){ + Debugger.log('instance is Complex', Debugger.GEN,'setPastedItem','Canvas'); + var callback:Function = Proxy.create(this, setNewContents, o); + Application.getInstance().getComms().sendAndReceive(getToolContentArray(o.data), 'servlet/authoring/copyMultipleToolContent?userID='+_root.userID, callback, false); } else{ LFMessage.showMessageAlert(Dictionary.getValue('al_activity_paste_invalid')); Debugger.log('Cant paste this item!',Debugger.GEN,'setPastedItem','Canvas'); } + } + + /** + * Array of tool content IDs within the complex activity. + * + * @param ca Canvas object + * @return array of tool content IDs + */ + + private function getToolContentArray(ca):Object { + var o = new Object(); + + o.toolContentIDs = getAllToolContentIDs(ca.activity.activityUIID); + Debugger.log('toolContentIDs: ' + o.toolContentIDs,Debugger.CRITICAL,'getToolContentArray','CanvasHelper'); + + return o; + } + + private function getAllToolContentIDs(activityUIID:Number, appendStr:String):String { + var idString:String = new String(); + if(appendStr != null) idString.concat(appendStr); + + var _children:Array = _ddm.getComplexActivityChildren(activityUIID); + Debugger.log('children length: ' + _children.length, Debugger.CRITICAL,'getAllToolContentIDs','CanvasHelper'); + + for(var i=0; i<_children.length; i++) { + Debugger.log('tool id: ' + ToolActivity(_children[i]).toolContentID, Debugger.CRITICAL,'getAllToolContentIDs','CanvasHelper'); + + if(ToolActivity(_children[i]).toolContentID != null) { + if(idString.length <= 0) idString = idString.concat(ToolActivity(_children[i]).toolContentID); + else idString = idString.concat("," + ToolActivity(_children[i]).toolContentID); + } else { + idString = getAllToolContentIDs(_children[i].activityUIID, idString); + } + + Debugger.log('id string: ' + idString, Debugger.CRITICAL,'getAllToolContentIDs','CanvasHelper'); + } + + return idString; } private function setNewContentID(r, o){ @@ -499,41 +542,111 @@ }else{ _newToolContentID = r; if (o.data instanceof CanvasActivity){ - return pasteItem(o.data.activity, o, _newToolContentID); + return pasteToolItem(o.data.activity, o, _newToolContentID); }else if(o.data instanceof ToolActivity){ - return pasteItem(o.data, o, _newToolContentID); + return pasteToolItem(o.data, o, _newToolContentID); } } + } + + private function setNewContents(r, o) { + Debugger.log("setting new contents: " + r, Debugger.CRITICAL, "setNewContents", "CanvasHelper"); + var _newIDMap:Hashtable = new Hashtable("newIDMap"); + + if(r instanceof LFError){ + r.showMessageConfirm(); + } else { + + var _newIDMapArray = String(r).split(","); + for(var i=0; i<_newIDMapArray.length; i++) { + var itemArray:Array = _newIDMapArray[i].split("="); + _newIDMap.put(itemArray[0], itemArray[1]); + } + + if (o.data instanceof CanvasOptionalActivity || o.data instanceof CanvasParallelActivity){ + return pasteComplexItem(o.data.activity, o, _newIDMap); + } else if(o.data instanceof ComplexActivity){ + return pasteComplexItem(o.data, o, _newIDMap); + } + } } + + private function pasteComplexItem(complexToCopy:ComplexActivity, o:Object, toolContentIDMap:Hashtable, parentAct:ComplexActivity):Object { + Debugger.log("pasting new cocomplex: " + complexToCopy.title, Debugger.CRITICAL, "pasteComplexItem", "CanvasHelper"); + + var newComplexActivity:ComplexActivity = complexToCopy.clone(); + newComplexActivity.activityUIID = _ddm.newUIID(); + + // TODO: improve for dropping into branching view + if(parentAct == null) { + newComplexActivity.xCoord = o.data.activity.xCoord + o.data.getVisibleWidth() + 10; + newComplexActivity.yCoord = o.data.activity.yCoord + 10; + } else { + newComplexActivity.parentUIID = parentAct.activityUIID; + newComplexActivity.parentActivityID = parentAct.activityID; + } + + if(parentAct == null) canvasModel.haltRefresh(true); + + copyChildren(complexToCopy, newComplexActivity, o, toolContentIDMap); + + if(parentAct == null) canvasModel.haltRefresh(false); + + return pasteActivityItem(newComplexActivity, o); + } + + private function copyChildren(activity:ComplexActivity, parentAct:ComplexActivity, o:Object, toolContentIDMap:Hashtable) { + Debugger.log("copying children of: " + activity.title, Debugger.CRITICAL, "copyChildren", "CanvasHelper"); + + var children:Array = _ddm.getComplexActivityChildren(activity.activityUIID); + + for(var i=0; i