Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as =================================================================== diff -u -ra1b0194b0dffe7d71c8c4e63a042bac24946176f -r85f570b110b304166c78bb11bd897a98847f142b --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as (.../Canvas.as) (revision a1b0194b0dffe7d71c8c4e63a042bac24946176f) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as (.../Canvas.as) (revision 85f570b110b304166c78bb11bd897a98847f142b) @@ -16,7 +16,7 @@ class org.lamsfoundation.lams.authoring.cv.Canvas { //Constants - public static var USE_PROPERTY_INSPECTOR = false; + public static var USE_PROPERTY_INSPECTOR = true; //Model private var canvasModel:CanvasModel; @@ -296,7 +296,8 @@ _ddm.addActivity(actToAdd); //refresh the design canvasModel.setDirty(); - + //select the new thing + canvasModel.selectedItem = (canvasModel.activitiesDisplayed.get(actToAdd.activityUIID)); } @@ -315,7 +316,8 @@ //Debugger.log('activityUIID:'+activityUIID,4,'removeActivity','Canvas'); _ddm.removeActivity(activityUIID); canvasModel.setDirty(); - + //select the new thing + canvasModel.selectedItem = null; } /** @@ -329,7 +331,8 @@ //Debugger.log('transitionUIID:'+transitionUIID,4,'removeTransition','Canvas'); _ddm.removeTransition(transitionUIID); canvasModel.setDirty(); - + //select the new thing + canvasModel.selectedItem = null; } @@ -433,6 +436,30 @@ } + public function toggleGateTool():Void{ + var c = Cursor.getCurrentCursor(); + if(c==Application.C_GATE){ + stopGateTool(); + }else{ + startGateTool(); + } + } + + public function startGateTool(){ + Debugger.log('Starting gate tool',Debugger.GEN,'startGateTool','Canvas'); + Cursor.showCursor(Application.C_GATE); + canvasModel.activeTool = CanvasModel.GATE_TOOL; + } + + + + public function stopGateTool(){ + Debugger.log('Stopping gate tool',Debugger.GEN,'startGateTool','Canvas'); + Cursor.showCursor(Application.C_DEFAULT); + canvasModel.activeTool = null; + } + + public function toggleTransitionTool():Void{ var c = Cursor.getCurrentCursor(); if(c==Application.C_TRANSITION){ @@ -442,7 +469,6 @@ } } - /** * Called by the top menu bar and the tool bar to start the transition tool, switches cursor. @@ -503,7 +529,7 @@ //note the init obnject parameters are passed into the _container object in the embeded class (*in this case PropertyInspector) //we are setting up a vew so we need to pass the model and controller to it var cc:CanvasController = canvasView.getController(); - _pi = PopUpManager.createPopUp(Application.root, LFWindow, false,{title:Dictionary.getValue('trans_dlg_title'),closeButton:true,scrollContentPath:"PropertyInspector",_canvasModel:canvasModel,_canvasController:cc}); + _pi = PopUpManager.createPopUp(Application.root, LFWindow, false,{title:Dictionary.getValue('property_inspector_title'),closeButton:true,scrollContentPath:"PropertyInspector",_canvasModel:canvasModel,_canvasController:cc}); //Assign dialog load handler _pi.addEventListener('contentLoaded',Delegate.create(this,piLoaded)); //okClickedCallback = callBack; @@ -573,7 +599,7 @@ public function onDDMBeforeUpdate(evt:Object):Void{ //_global.breakpoint(); //var _ddm:DesignDataModel = evt.target; - Debugger.log('DDM about to be updated updated',Debugger.GEN,'onDDMBeforeUpdate','Canvas'); + 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); Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasActivity.as =================================================================== diff -u -ra1b0194b0dffe7d71c8c4e63a042bac24946176f -r85f570b110b304166c78bb11bd897a98847f142b --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasActivity.as (.../CanvasActivity.as) (revision a1b0194b0dffe7d71c8c4e63a042bac24946176f) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasActivity.as (.../CanvasActivity.as) (revision 85f570b110b304166c78bb11bd897a98847f142b) @@ -11,6 +11,10 @@ class org.lamsfoundation.lams.authoring.cv.CanvasActivity extends MovieClip implements ICanvasActivity{ //class org.lamsfoundation.lams.authoring.cv.CanvasActivity extends MovieClip{ + public static var TOOL_ACTIVITY_WIDTH:Number = 123.1; + public static var TOOL_ACTIVITY_HEIGHT:Number = 50.5; + public static var GATE_ACTIVITY_HEIGHT:Number = 30; + public static var GATE_ACTIVITY_WIDTH:Number = 30; //this is set by the init object private var _canvasController:CanvasController; @@ -35,9 +39,14 @@ function CanvasActivity(){ //Debugger.log("_activity:"+_activity.title,4,'Constructor','CanvasActivity'); //let it wait one frame to set up the components. - //this has to be set b4 ther do later :) - _visibleHeight = canvasActivity_mc._height; - _visibleWidth = canvasActivity_mc._width; + //this has to be set b4 the do later :) + if(_activity.isGateActivity()){ + _visibleHeight = GATE_ACTIVITY_HEIGHT; + _visibleWidth = GATE_ACTIVITY_WIDTH; + }else{ + _visibleHeight = TOOL_ACTIVITY_HEIGHT; + _visibleWidth = TOOL_ACTIVITY_WIDTH; + } //call init if we have passed in the _activity as an initObj in the attach movie, //otherwise wait as the class outside will call it if(_activity != undefined){ @@ -52,12 +61,11 @@ _canvasController = initObj.canvasController; _activity = initObj.activity; } - canvasActivity_mc._visible=false; - stopSign_mc._visible=false; - title_lbl._visible=false; - clickTarget_mc._visible=false; + - loadIcon(); + if(!_activity.isGateActivity()){ + loadIcon(); + } MovieClipUtils.doLater(Proxy.create(this,draw)); @@ -87,13 +95,26 @@ Debugger.log(_activity.title+',_activity.isGateActivity():'+_activity.isGateActivity(),4,'draw','CanvasActivity'); if(_activity.isGateActivity()){ stopSign_mc._visible = true; + canvasActivity_mc._visible=false; + title_lbl.visible=false; + clickTarget_mc._width = GATE_ACTIVITY_WIDTH; + clickTarget_mc._height= GATE_ACTIVITY_HEIGHT; + }else{ canvasActivity_mc._visible=true; - title_lbl._visible=true; - clickTarget_mc._visible=true; + title_lbl.visible=true; + //clickTarget_mc._visible=true; + stopSign_mc._visible = false; + //write text title_lbl.text = _activity.title; + + clickTarget_mc._width = TOOL_ACTIVITY_WIDTH; + clickTarget_mc._height= TOOL_ACTIVITY_HEIGHT; + } + + //indicate grouping Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasController.as =================================================================== diff -u -ra1b0194b0dffe7d71c8c4e63a042bac24946176f -r85f570b110b304166c78bb11bd897a98847f142b --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasController.as (.../CanvasController.as) (revision a1b0194b0dffe7d71c8c4e63a042bac24946176f) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasController.as (.../CanvasController.as) (revision 85f570b110b304166c78bb11bd897a98847f142b) @@ -3,6 +3,7 @@ import org.lamsfoundation.lams.common.mvc.* import org.lamsfoundation.lams.common.util.* import org.lamsfoundation.lams.common.ui.* +import mx.utils.* /* @@ -139,12 +140,12 @@ } public function transitionDoubleClick(ct:CanvasTransition):Void{ - Debugger.log('transitionDoubleClick CanvasTransition:'+ct.transition.uiID,Debugger.GEN,'transitionDoubleClick','CanvasController'); + Debugger.log('transitionDoubleClick CanvasTransition:'+ct.transition.transitionUIID,Debugger.GEN,'transitionDoubleClick','CanvasController'); //TODO: fix this, its null _canvasView = CanvasView(getView()); Debugger.log('_canvasView:'+_canvasView,Debugger.GEN,'transitionDoubleClick','CanvasController'); - _canvasView.createTransitionPropertiesDialog("centre",tpOKHandler); + _canvasView.createTransitionPropertiesDialog("centre",Delegate.create(this, transitionPropertiesOK)); _canvasModel.selectedItem = ct; } @@ -173,9 +174,38 @@ * @usage * @return */ - public function tpOKHandler():Void{ - Debugger.log('!!!!!!!!! FUNCTION NOT IMPLEMENTED !!!!!!!!',Debugger.CRITICAL,'tpOKHandler','CanvasController'); + public function transitionPropertiesOK(evt:Object):Void{ + Debugger.log(evt.gate,Debugger.GEN,'transitionPropertiesOK','CanvasController'); + //cm creates gate act and another transition to make [trans][gate][trans] seq + //sets in ddm + //flags dirty to refresh view + _canvasModel.createGateTransition(_canvasModel.selectedItem.transition.transitionUIID,evt.gate); + + + } + + /** + * Clled when we get a click on the canvas, if its in craete gate mode then create a gate + * + * public static var SYNCH_GATE_ACTIVITY_TYPE:Number = 3; + * public static var SCHEDULE_GATE_ACTIVITY_TYPE:Number = 4; + * public static var PERMISSION_GATE_ACTIVITY_TYPE:Number = 5; + * @usage + * @param canvas_mc + * @return + */ + public function canvasRelease(canvas_mc:MovieClip){ + Debugger.log(canvas_mc,Debugger.GEN,'canvasRelease','CanvasController'); + Debugger.log('_canvasModel.activeTool:'+_canvasModel.activeTool,Debugger.GEN,'canvasRelease','CanvasController'); + if(_canvasModel.activeTool == CanvasModel.GATE_TOOL){ + var p = new Point(canvas_mc._xmouse, canvas_mc._ymouse); + _canvasModel.createNewGate(Activity.PERMISSION_GATE_ACTIVITY_TYPE,p); + _canvasModel.getCanvas().stopGateTool(); + + } + + } private function createValidTransitionTarget(transitionTargetObj:Object):Object{ var targetCA:Object; @@ -224,6 +254,8 @@ } */ } + + Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasModel.as =================================================================== diff -u -ra1b0194b0dffe7d71c8c4e63a042bac24946176f -r85f570b110b304166c78bb11bd897a98847f142b --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasModel.as (.../CanvasModel.as) (revision a1b0194b0dffe7d71c8c4e63a042bac24946176f) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasModel.as (.../CanvasModel.as) (revision 85f570b110b304166c78bb11bd897a98847f142b) @@ -2,14 +2,16 @@ import org.lamsfoundation.lams.authoring.cv.*; import org.lamsfoundation.lams.authoring.*; import org.lamsfoundation.lams.common.util.*; +import org.lamsfoundation.lams.common.ui.*; import mx.events.* /* * Model for the Canvas */ class org.lamsfoundation.lams.authoring.cv.CanvasModel extends Observable { - public static var TRANSITION_TOOL:String = "TRANSITION"; + public static var TRANSITION_TOOL:String = "TRANSITION"; //activie tool ID strings definition public static var OPTIONAL_TOOL:String = "OPTIONAL"; + public static var GATE_TOOL:String = "GATE"; private var __width:Number; private var __height:Number; @@ -153,8 +155,8 @@ public function startTransitionTool():Void{ Debugger.log('Starting transition tool',Debugger.GEN,'startTransitionTool','CanvasModel'); resetTransitionTool(); - _activeTool = CanvasModel.TRANSITION_TOOL; - broadcastViewUpdate("START_TRANSITION_TOOL"); + _activeTool = TRANSITION_TOOL; + //broadcastViewUpdate("START_TRANSITION_TOOL"); } /** @@ -167,36 +169,122 @@ Debugger.log('Stopping transition tool',Debugger.GEN,'stopTransitionTool','CanvasModel'); resetTransitionTool(); _activeTool = null; - broadcastViewUpdate("STOP_TRANSITION_TOOL"); + //broadcastViewUpdate("STOP_TRANSITION_TOOL"); } + + + + + /** + * Craetes a [trans][gate act][trans] combo from an existing transition. + * NOT used anymore as we dont want to allow users to think they can click transitions + * BUT IF/When the request this - just use this function + * @usage + * @param transitionUIID + * @param gateTypeID + * @return + */ + public function createGateTransition(transitionUIID,gateTypeID){ + Debugger.log('transitionUIID:'+transitionUIID,Debugger.GEN,'createGateTransition','CanvasModel'); + Debugger.log('gateTypeID:'+gateTypeID,Debugger.GEN,'createGateTransition','CanvasModel'); + var editedTrans = _cv.ddm.getTransitionByUIID(transitionUIID); + var editedCanvasTrans = _transitionsDisplayed.get(transitionUIID); + var fromAct = _cv.ddm.getActivityByUIID(editedTrans.fromUIID); + var toAct = _cv.ddm.getActivityByUIID(editedTrans.toUIID); + //create a gate activity + var gateAct = new GateActivity(_cv.ddm.newUIID(),gateTypeID); + gateAct.learningDesignID = _cv.ddm.learningDesignID; + + //gateAct.yCoord = (toAct.yCoord + fromAct.yCoord) / 2; + //gateAct.xCoord = (toAct.xCoord + fromAct.xCoord) / 2; + + gateAct.yCoord = editedCanvasTrans.midPoint.y - (CanvasActivity.GATE_ACTIVITY_WIDTH / 2); + gateAct.xCoord = editedCanvasTrans.midPoint.x - (CanvasActivity.GATE_ACTIVITY_HEIGHT / 2); + + Debugger.log('gateAct.yCoord:'+gateAct.yCoord,Debugger.GEN,'createGateTransition','CanvasModel'); + Debugger.log('gateAct.xCoord:'+gateAct.xCoord,Debugger.GEN,'createGateTransition','CanvasModel'); + + _cv.ddm.addActivity(gateAct); + + //create the from trans + addActivityToTransition(fromAct); + addActivityToTransition(gateAct); + + //create the to trans + addActivityToTransition(gateAct); + addActivityToTransition(toAct); + + _cv.ddm.removeTransition(transitionUIID); + + //flag the model as dirty and trigger a refresh + setDirty(); + //select the new thing + setSelectedItem(_activitiesDisplayed.get(gateAct.activityUIID)); + } + + /** + * Creates a new gate activity at the specified location + * @usage + * @param gateTypeID + * @param pos + * @return + */ + public function createNewGate(gateTypeID, pos:Point){ + Debugger.log('gateTypeID:'+gateTypeID,Debugger.GEN,'createNewGate','CanvasModel'); + var gateAct = new GateActivity(_cv.ddm.newUIID(),gateTypeID); + gateAct.learningDesignID = _cv.ddm.learningDesignID; + + + gateAct.yCoord = pos.y; + gateAct.xCoord = pos.x; + + + Debugger.log('gateAct.yCoord:'+gateAct.yCoord,Debugger.GEN,'createGateTransition','CanvasModel'); + Debugger.log('gateAct.xCoord:'+gateAct.xCoord,Debugger.GEN,'createGateTransition','CanvasModel'); + + _cv.ddm.addActivity(gateAct); + + setDirty(); + //select the new thing + setSelectedItem(_activitiesDisplayed.get(gateAct.activityUIID)); + + } + + /** * Adds another Canvas Activity to the transition. * Only 2 may be added, adding the 2nd one triggers the creation of the transition. * @usage - * @param ca (Canvas Activity) + * @param ca (Canvas or data Activity) * @return */ public function addActivityToTransition(ca:Object):Object{ + var activity:Activity; //check we have not added too many + if(ca instanceof CanvasActivity){ + activity = ca.activity; + }else if(ca instanceof Activity){ + activity = Activity(ca); + } if(_transitionActivities.length >= 2){ //TODO: show an error return new LFError("Too many activities in the Transition","addActivityToTransition",this); } - Debugger.log('Adding Activity.UIID:'+ca.activity.activityUIID,Debugger.GEN,'addActivityToTransition','CanvasModel'); - _transitionActivities.push(ca); + Debugger.log('Adding Activity.UIID:'+activity.activityUIID,Debugger.GEN,'addActivityToTransition','CanvasModel'); + _transitionActivities.push(activity); if(_transitionActivities.length == 2){ //check we have 2 valid acts to create the transition. - if(_transitionActivities[0].activity.activityUIID == _transitionActivities[1].activity.activityUIID){ + if(_transitionActivities[0].activityUIID == _transitionActivities[1].activityUIID){ return new LFError("You cannot create a Transition between the same Activities","addActivityToTransition",this); } - if(!_activitiesDisplayed.containsKey(_transitionActivities[0].activity.activityUIID)){ - return new LFError("First activity of the Transition is missing, UIID:"+_transitionActivities[0].activity.activityUIID,"addActivityToTransition",this); + if(!_cv.ddm.activities.containsKey(_transitionActivities[0].activityUIID)){ + return new LFError("First activity of the Transition is missing, UIID:"+_transitionActivities[0].activityUIID,"addActivityToTransition",this); } - if(!_activitiesDisplayed.containsKey(_transitionActivities[1].activity.activityUIID)){ - return new LFError("Second activity of the Transition is missing, UIID:"+_transitionActivities[1].activity.activityUIID,"addActivityToTransition",this); + if(!_cv.ddm.activities.containsKey(_transitionActivities[1].activityUIID)){ + return new LFError("Second activity of the Transition is missing, UIID:"+_transitionActivities[1].activityUIID,"addActivityToTransition",this); } //check there is not already a transition to or from this activity: @@ -227,6 +315,8 @@ //flag the model as dirty and trigger a refresh setDirty(); + setSelectedItem(_transitionsDisplayed.get(t.transitionUIID)); + _cv.stopTransitionTool(); } @@ -261,8 +351,8 @@ * @return */ private function createTransition(transitionActs:Array):Transition{ - var fromAct:Activity = transitionActs[0].activity; - var toAct:Activity = transitionActs[1].activity; + var fromAct:Activity = transitionActs[0]; + var toAct:Activity = transitionActs[1]; var t:Transition = new Transition(_cv.ddm.newUIID(),fromAct.activityUIID,toAct.activityUIID,_cv.ddm.learningDesignID); @@ -586,15 +676,19 @@ return _activeTool; } + private function setSelectedItem(newselectItem:Object){ + _selectedItem = newselectItem; + broadcastViewUpdate("SELECTED_ITEM"); + } + /** * * @usage * @param newselectItem * @return */ public function set selectedItem (newselectItem:Object):Void { - _selectedItem = newselectItem; - broadcastViewUpdate("SELECTED_ITEM"); + setSelectedItem(newselectItem); } /** * Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasTransition.as =================================================================== diff -u -ra1b0194b0dffe7d71c8c4e63a042bac24946176f -r85f570b110b304166c78bb11bd897a98847f142b --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasTransition.as (.../CanvasTransition.as) (revision a1b0194b0dffe7d71c8c4e63a042bac24946176f) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasTransition.as (.../CanvasTransition.as) (revision 85f570b110b304166c78bb11bd897a98847f142b) @@ -20,6 +20,13 @@ private var stopArrow_mc:MovieClip; private var stopSign_mc:MovieClip; + + private var _startPoint:Point; + private var _midPoint:Point; + private var _endPoint:Point; + + + private var _dcStartTime:Number = 0; private var _doubleClicking:Boolean; @@ -52,6 +59,9 @@ _transition = t; } + public function get midPoint():Point{ + return _midPoint; + } @@ -77,40 +87,38 @@ var isGateTransition = toAct_mc.activity.isGateActivity(); - - - - //var startPoint:Point = new Point(fromAct.xCoord,fromAct.yCoord); - //var endPoint:Point = new Point(toAct.xCoord,toAct.yCoord); - var offsetToCentre_x = fromAct_mc.getVisibleWidth() / 2; var offsetToCentre_y = fromAct_mc.getVisibleHeight() / 2; Debugger.log('fromAct_mc.getActivity().xCoord:'+fromAct_mc.getActivity().xCoord,4,'draw','CanvasTransition'); Debugger.log('offsetToCentre_x:'+offsetToCentre_x,4,'draw','CanvasTransition'); - var startPoint:Point = new Point(fromAct_mc.getActivity().xCoord+offsetToCentre_x,fromAct_mc.getActivity().yCoord+offsetToCentre_y); + _startPoint = new Point(fromAct_mc.getActivity().xCoord+offsetToCentre_x,fromAct_mc.getActivity().yCoord+offsetToCentre_y); var toOTC_x:Number = toAct_mc.getVisibleWidth() /2; var toOTC_y:Number = toAct_mc.getVisibleHeight() /2; - var endPoint:Point = new Point(toAct_mc.getActivity().xCoord+toOTC_x,toAct_mc.getActivity().yCoord+toOTC_y); + _endPoint = new Point(toAct_mc.getActivity().xCoord+toOTC_x,toAct_mc.getActivity().yCoord+toOTC_y); Debugger.log('fromAct_mc:'+fromAct_mc,4,'draw','CanvasTransition'); Debugger.log('toAct_mc:'+toAct_mc,4,'draw','CanvasTransition'); this.lineStyle(2, _drawnLineStyle); - this.moveTo(startPoint.x, startPoint.y); + this.moveTo(_startPoint.x, _startPoint.y); //this.dashTo(startX, startY, endX, endY, 8, 4); - this.lineTo(endPoint.x, endPoint.y); - Debugger.log('drawn line from:'+startPoint.x+','+startPoint.y+'to:'+endPoint.x+','+endPoint.y,4,'draw','CanvasTransition'); + this.lineTo(_endPoint.x, _endPoint.y); + Debugger.log('drawn line from:'+_startPoint.x+','+_startPoint.y+'to:'+_endPoint.x+','+_endPoint.y,4,'draw','CanvasTransition'); // calculate the position and angle for the arrow_mc - arrow_mc._x = (startPoint.x + endPoint.x)/2; - arrow_mc._y = (startPoint.y + endPoint.y)/2; - + arrow_mc._x = (_startPoint.x + _endPoint.x)/2; + arrow_mc._y = (_startPoint.y + _endPoint.y)/2; + + _midPoint = new Point(arrow_mc._x,arrow_mc._y); + + + // gradient - var angle:Number = Math.atan2((endPoint.y- startPoint.y),(endPoint.x- startPoint.x)); + var angle:Number = Math.atan2((_endPoint.y- _startPoint.y),(_endPoint.x- _startPoint.x)); var degs:Number = Math.round(angle*180/Math.PI); arrow_mc._rotation = degs; arrow_mc._visible = true; Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasView.as =================================================================== diff -u -ra1b0194b0dffe7d71c8c4e63a042bac24946176f -r85f570b110b304166c78bb11bd897a98847f142b --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasView.as (.../CanvasView.as) (revision a1b0194b0dffe7d71c8c4e63a042bac24946176f) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasView.as (.../CanvasView.as) (revision 85f570b110b304166c78bb11bd897a98847f142b) @@ -30,7 +30,9 @@ private var _gridLayer_mc:MovieClip; private var _transitionLayer_mc:MovieClip; private var _activityLayer_mc:MovieClip; - + + private var _transitionPropertiesOK:Function; + private var _canvasView:CanvasView; //Defined so compiler can 'see' events added at runtime by EventDispatcher private var dispatchEvent:Function; public var addEventListener:Function; @@ -41,6 +43,7 @@ * Constructor */ function CanvasView(){ + _canvasView = this; //Init for event delegation mx.events.EventDispatcher.initialize(this); } @@ -99,23 +102,28 @@ case 'REMOVE_TRANSITION': removeTransition(event.data,cm); break; + /* case 'START_TRANSITION_TOOL': startDrawingTransition(cm); break; case 'STOP_TRANSITION_TOOL': stopDrawingTransition(cm); break; + */ default : Debugger.log('unknown update type :' + event.updateType,Debugger.CRITICAL,'update','org.lamsfoundation.lams.CanvasView'); - } + } } - - - /** + /* + public function onRelease(){ + getController().canvasRelease(_canvas_mc); + } + */ + + /** * layout visual elements on the canvas on initialisation */ - private function draw(){ //get the content path for the sp _canvas_mc = canvas_scp.content; @@ -128,8 +136,17 @@ _gridLayer_mc = _canvas_mc.createEmptyMovieClip("_gridLayer_mc", _canvas_mc.getNextHighestDepth()); _transitionLayer_mc = _canvas_mc.createEmptyMovieClip("_transitionLayer_mc", _canvas_mc.getNextHighestDepth()); _activityLayer_mc = _canvas_mc.createEmptyMovieClip("_activityLayer_mc", _canvas_mc.getNextHighestDepth()); - + + + //_canvas_mc.addEventListener('onRelease',this); + bkg_pnl.onRelease = function(){ + trace('_canvas_mc.onRelease'); + Application.getInstance().getCanvas().getCanvasView().getController().canvasRelease(this); + } + bkg_pnl.useHandCursor = false; + + /* //var s = canvasModel.getSize(); @@ -172,10 +189,10 @@ var cvc = getController(); //take action depending on act type - if(a.activityTypeID==Activity.TOOL_ACTIVITY_TYPE){ + if(a.activityTypeID==Activity.TOOL_ACTIVITY_TYPE || a.isGateActivity() ){ var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasActivity",DepthManager.kTop,{_activity:a,_canvasController:cvc,_canvasView:cvv}); cm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); - Debugger.log('Tool activity a.title:'+a.title+','+a.activityUIID+' added to the cm.activitiesDisplayed hashtable:'+newActivity_mc,4,'drawActivity','CanvasView'); + Debugger.log('Tool or gate activity a.title:'+a.title+','+a.activityUIID+' added to the cm.activitiesDisplayed hashtable:'+newActivity_mc,4,'drawActivity','CanvasView'); }else if(a.activityTypeID==Activity.PARALLEL_ACTIVITY_TYPE){ //get the children var children:Array = cm.getCanvas().ddm.getComplexActivityChildren(a.activityUIID); @@ -248,21 +265,15 @@ return s; } - private function startDrawingTransition(cm:CanvasModel):Void{ - } - - private function stopDrawingTransition(cm:CanvasModel):Void{ - - } - /** * Create a popup dialog to set transition parameters * @param pos - Position, either 'centre' or an object containing x + y coordinates */ public function createTransitionPropertiesDialog(pos:Object,callBack:Function){ //Debugger.log('Call',Debugger.GEN,'createTransitionPropertiesDialog','CanvasView'); var dialog:MovieClip; + _transitionPropertiesOK = callBack; //Check to see whether this should be a centered or positioned dialog if(typeof(pos)=='string'){ //Debugger.log('pos:'+pos,Debugger.GEN,'createTransitionPropertiesDialog','CanvasView'); @@ -271,38 +282,25 @@ dialog = PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue('trans_dlg_title'),closeButton:true,scrollContentPath:"TransitionProperties",_x:pos.x,_y:pos.y}); } //Assign dialog load handler - dialog.addEventListener('contentLoaded',Delegate.create(this,dialogLoaded)); + dialog.addEventListener('contentLoaded',Delegate.create(this,transitionDialogLoaded)); //okClickedCallback = callBack; } /** - * called when the dialog is loaded + * called when the transitionDialogLoaded is loaded */ - public function dialogLoaded(evt:Object) { + public function transitionDialogLoaded(evt:Object) { //Debugger.log('!evt.type:'+evt.type,Debugger.GEN,'dialogLoaded','CanvasView'); //Check type is correct if(evt.type == 'contentLoaded'){ //Set up callback for ok button click //Debugger.log('!evt.target.scrollContent:'+evt.target.scrollContent,Debugger.GEN,'dialogLoaded','CanvasView'); - evt.target.scrollContent.addEventListener('okClicked',Delegate.create(this,okClicked)); + evt.target.scrollContent.addEventListener('okClicked',_transitionPropertiesOK); }else { //TODO DI 25/05/05 raise wrong event type error } } - /** - * Workspace dialog OK button clicked handler - */ - private function okClicked(evt:Object) { - //Debugger.log('!okClicked:',Debugger.GEN,'okClicked','CanvasView'); - //Check type is correct - if(evt.type == 'okClicked'){ - //Call the callback, passing in the design selected designId - //okClickedCallback(evt.target.selectedDesignId); - }else { - //TODO DI 25/05/05 raise wrong event type error - } - } /** * Sets the size of the canvas on stage, called from update Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspector.as =================================================================== diff -u -ra1b0194b0dffe7d71c8c4e63a042bac24946176f -r85f570b110b304166c78bb11bd897a98847f142b --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspector.as (.../PropertyInspector.as) (revision a1b0194b0dffe7d71c8c4e63a042bac24946176f) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspector.as (.../PropertyInspector.as) (revision 85f570b110b304166c78bb11bd897a98847f142b) @@ -1,11 +1,14 @@ import org.lamsfoundation.lams.authoring.cv.*; -import org.lamsfoundation.lams.common.dict.* +import org.lamsfoundation.lams.authoring.*; import org.lamsfoundation.lams.common.util.* +import org.lamsfoundation.lams.common.dict.* +import org.lamsfoundation.lams.common.style.* import org.lamsfoundation.lams.common.ui.* +import org.lamsfoundation.lams.common.* +import mx.controls.* import mx.utils.* +import mx.managers.* import mx.events.* -import mx.controls.* - /* * * @author DC @@ -21,10 +24,7 @@ private var _container:MovieClip; //The container window that holds the dialog. Will contain any init params that were passed into createPopUp private var toolDisplayName_lbl:Label; - - //tabs - private var prop_btn:Button; - private var comm_btn:Button; + //Properties tab private var title_lbl:Label; @@ -33,10 +33,25 @@ private var desc_txt:TextInput; private var grouping_lbl:Label; private var currentGrouping_lbl:Label; + private var editGrouping_btn:Button; private var runOffline_chk:CheckBox; private var defineLater_chk:CheckBox; + //gates + private var gateType_lbl:Label; + private var gateType_cmb:ComboBox; + private var startOffset_lbl:Label; + private var endOffset_lbl:Label; + private var hours_lbl:Label; + private var mins_lbl:Label; + private var hours_stp:NumericStepper; + private var mins_stp:NumericStepper; + private var endHours_stp:NumericStepper; + private var endMins_stp:NumericStepper; + + + //Comments tab /* private var runOffline_lbl:Label; @@ -93,14 +108,26 @@ runOffline_chk.addEventListener("click",this); defineLater_chk.addEventListener("click",this); + gateType_cmb.addEventListener("change",Delegate.create(this,onGateTypeChange)); + hours_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); + mins_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); + endHours_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); + endMins_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); - /* - runOffline_txa.addEventListener("focusOut",this); - runOnline_txa.addEventListener("focusOut",this); - */ + gateType_lbl.text = Dictionary.getValue('trans_dlg_gatetypecmb'); + hours_lbl.text = Dictionary.getValue('pi_hours'); + mins_lbl.text = Dictionary.getValue('pi_mins'); + startOffset_lbl.text = Dictionary.getValue('pi_start_offset'); + endOffset_lbl.text = Dictionary.getValue('pi_end_offset'); - //showProperties(); + //populate the synch type combo: + gateType_cmb.dataProvider = Activity.getGateActivityTypes(); + //hide all the controls at startup + showGateControls(false); + showToolActivityControls(false); + showGroupingControls(false); + //fire event to say we have loaded _container.contentLoaded(); } @@ -132,86 +159,149 @@ } /** - * + * Get called when something is selected in the cavas. + * Updates the details in the propertyu inspector widgets * @usage * @param cm * @return */ private function updateItemProperties(cm:CanvasModel):Void{ - //Debugger.log('cm.selectedItem:'+cm.selectedItem+' is a:'+typeof(cm.selectedItem) ,4,'updateItemProperties','PropertyInspector'); - - if(cm.selectedItem instanceof CanvasActivity){ - //Debugger.log('Its a canvas activity',4,'updateItemProperties','PropertyInspector'); - - toolDisplayName_lbl.text = StringUtils.cleanNull(cm.selectedItem.activity.toolDisplayName); - title_txt.text = StringUtils.cleanNull(cm.selectedItem.activity.title); - desc_txt.text = StringUtils.cleanNull(cm.selectedItem.activity.description); - runOffline_chk.selected = cm.selectedItem.activity.runOffline; - defineLater_chk.selected = cm.selectedItem.activity.defineLater; - - currentGrouping_lbl.text = "GroupingUIID:"+StringUtils.cleanNull(cm.selectedItem.activity.runOffline.groupingUIID); - + //try to cast the selected item to see what we have (instance of des not seem to work) + if(CanvasActivity(cm.selectedItem) != null){ + Debugger.log('Its a canvas activity',4,'updateItemProperties','PropertyInspector'); + var ca = CanvasActivity(cm.selectedItem); + var a:Activity = ca.activity; + if(a.isGateActivity()){ + showToolActivityControls(false); + showGateControls(true); + showGroupingControls(true); + showGateActivityProperties(GateActivity(a)); + checkEnableGateControls(); + }else{ + showToolActivityControls(true); + showGateControls(false); + showGroupingControls(true); + showToolActivityProperties(ToolActivity(a)); + } /* runOffline_txa.text = StringUtils.cleanNull(cm.selectedItem.activity.offlineInstructions); runOnline_txa.text = StringUtils.cleanNull(cm.selectedItem.activity.onlineInstructions); */ + }else if(CanvasTransition(cm.selectedItem) != null){ + var ct = CanvasTransition(cm.selectedItem); + var t:Transition = ct.transition; + Debugger.log('Its a canvas transition',4,'updateItemProperties','PropertyInspector'); + showTransitionProperties(t); + showGroupingControls(false); + showToolActivityControls(false); + showGateControls(false); - - - - }else if(cm.selectedItem instanceof CanvasTransition){ - //Debugger.log('Its a canvas transition',4,'updateItemProperties','PropertyInspector'); - title_txt.text = StringUtils.cleanNull(cm.selectedItem.transition.title); - desc_txt.text = StringUtils.cleanNull(cm.selectedItem.transition.description); - - - - }else{ - //Debugger.log('Its a something we dont know',Debugger.CRITICAL,'updateItemProperties','PropertyInspector'); - + Debugger.log('Its a something we dont know',Debugger.CRITICAL,'updateItemProperties','PropertyInspector'); + showGroupingControls(false); + showToolActivityControls(false); + showGateControls(false); } } - /* - private function showProperties():Void{ - //Properties tab - title_lbl._visible = true; - title_txt._visible = true; - desc_lbl._visible = true; - desc_txt._visible = true; - grouping_lbl._visible = true; - runOffline_chk._visible = true; - //Comments tab - runOffline_lbl._visible = false; - runOnline_lbl._visible = false; - runOffline_txa._visible = false; - runOnline_txa._visible = false; + + + 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); + runOffline_chk.selected = ta.runOffline; + defineLater_chk.selected = ta.defineLater; + + currentGrouping_lbl.text = "GroupingUIID:"+StringUtils.cleanNull(ta.runOffline.groupingUIID); + + } - private function showComments():Void{ - //Properties tab - title_lbl._visible = false; - title_txt._visible = false; - desc_lbl._visible = false; - desc_txt._visible = false; - grouping_lbl._visible = false; - runOffline_chk._visible = false; - //Comments tab - runOffline_lbl._visible = true; - runOnline_lbl._visible = true; - runOffline_txa._visible = true; - runOnline_txa._visible = true; + private function showGateActivityProperties(ga:GateActivity){ + toolDisplayName_lbl.text = 'Gate'; + //loop through combo to fins SI of our gate activity type + for (var i=0; i