Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Activity.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Activity.as (.../Activity.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/Activity.as (.../Activity.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -85,6 +85,7 @@ public static var OPTIONAL_ACTIVITY_TYPE:Number = 7; public static var SEQUENCE_ACTIVITY_TYPE:Number = 8; public static var SYSTEM_GATE_ACTIVITY_TYPE:Number = 9; + public static var BRANCHING_ACTIVITY_TYPE:Number = 10; /******************************************************************/ /** @@ -245,6 +246,12 @@ return true; } } + + public function isBranchingActivity():Boolean{ + if (_activityTypeID == BRANCHING_ACTIVITY_TYPE){ + return true; + } + } /** * Populates all the fields in this activity from a dto object contaning the following fields * NB: This is not very clever, if the field in the dto is blank then the value is overwritten in the class... @@ -361,34 +368,6 @@ } public function clone():Activity{ - /* - var n = new Activity(null); - //objectType is in the constructor - n.activityTypeID = _activityTypeID; - n.activityID = _activityID; - n.activityCategoryID = _activityCategoryID; - n.activityUIID = _activityUIID; - n.learningLibraryID = _learningLibraryID; - n.learningDesignID = _learningDesignID; - n.libraryActivityID = _libraryActivityID; - n.parentActivityID = _parentActivityID; - n.parentUIID = _parentUIID - n.orderID = _orderID - n.groupingID = _groupingID; - n.groupingUIID = _groupingUIID - n.title = _title; - n.description = _description; - n.helpText = _helpText; - n.yCoord = _yCoord; - n.xCoord = _xCoord; - n.libraryActivityUIImage = _libraryActivityUIImage; - n.applyGrouping = _applyGrouping; - n.runOffline = _runOffline; - //n.offlineInstructions = _offlineInstructions; - n.defineLater = _defineLater; - n.createDateTime = _createDateTime; - n.groupingSupportType = _groupingSupportType; - */ var dto:Object = toData(); var n = new Activity(null); n.populateFromDTO(dto); Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/BranchActivity.as =================================================================== diff -u --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/BranchActivity.as (revision 0) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/BranchActivity.as (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ************************************************************************ + */ + +import org.lamsfoundation.lams.authoring.*; + + +class org.lamsfoundation.lams.authoring.BranchActivity { + + public function BranchActivity(activityUIID:Number){ + } + + /** + * Creates a branching activity from a dto + * @usage + * @param dto + * @return + */ + public function populateFromDTO(dto:Object){ + super.populateFromDTO(dto); + + // unique attr + + } + + /** + * Creates an object containing all the props of the BranchActivity. + * If a value is null then it is ommitted... if itsd the null value from const + * then its included + * @usage + * @return the DTO + */ + public function toData():Object{ + var dto:Object = super.toData(); + return dto; + } + + +} + Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/BranchingActivity.as =================================================================== diff -u --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/BranchingActivity.as (revision 0) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/BranchingActivity.as (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -0,0 +1,65 @@ +/*************************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ************************************************************************ + */ + +import org.lamsfoundation.lams.authoring.*; +/* +* +* @author Mitchell Seaton +* @version 2.1 +* @comments Branching Activity Data storage class. +* @see Activity +*/ +class BranchingActivity extends ComplexActivity { + + + function BranchingActivity(activityUIID:Number){ + super(activityUIID); + _activityTypeID = BRANCHING_ACTIVITY_TYPE; + } + + /** + * Creates from a dto... which is nice + * @usage + * @param dto + * @return + */ + public function populateFromDTO(dto:Object){ + super.populateFromDTO(dto); + } + + /** + * Creates an object containing all the props + * If a value is null then it is ommitted... if itsd the null value from const + * then its included + * @usage + * @return the DTO + */ + public function toData():Object{ + var dto:Object = super.toData(); + return dto; + } + + //get and sets + +} + Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as (.../DesignDataModel.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as (.../DesignDataModel.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -353,6 +353,10 @@ newGroupActiviy.populateFromDTO(dto); _activities.put(newGroupActiviy.activityUIID,newGroupActiviy); + } else if(dto.activityTypeID == Activity.BRANCHING_ACTIVITY_TYPE){ + var newBranchActiviy:BranchingActivity = new BranchingActivity(dto.activityUIID); + newBranchActiviy.populateFromDTO(dto); + _activities.put(newBranchActiviy.activityUIID,newBranchActiviy); } } Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/CanvasBranchView.as =================================================================== diff -u --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/CanvasBranchView.as (revision 0) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/br/CanvasBranchView.as (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -0,0 +1,473 @@ +/*************************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ************************************************************************ + */ + +import org.lamsfoundation.lams.common.util.*; +import org.lamsfoundation.lams.common.ui.*; +import org.lamsfoundation.lams.common.style.*; +import org.lamsfoundation.lams.authoring.cv.*; +import org.lamsfoundation.lams.authoring.*; +import org.lamsfoundation.lams.common.dict.*; +import org.lamsfoundation.lams.common.mvc.*; +import org.lamsfoundation.lams.common.CommonCanvasView; + +import com.polymercode.Draw; +import mx.controls.*; +import mx.managers.*; +import mx.containers.*; +import mx.events.*; +import mx.utils.*; + + +/** +*Authoring view for the canvas +* Relects changes in the CanvasModel +*/ + +class org.lamsfoundation.lams.authoring.br.CanvasBranchView extends CommonCanvasView { + //constants: + private var GRID_HEIGHT:Number; + private var GRID_WIDTH:Number; + private var H_GAP:Number; + private var V_GAP:Number; + + private var _tm:ThemeManager; + private var _cm:CanvasModel; + + //Canvas Branch clip + private var _canvas_branch_mc:MovieClip; + private var canvas_scp:ScrollPane; + + private var bkg_pnl:Panel; + + private var _gridLayer_mc:MovieClip; + private var _transitionLayer_mc:MovieClip; + private var _activityLayerComplex_mc:MovieClip; + private var _activityLayer_mc:MovieClip; + + private var startTransX:Number; + private var startTransY:Number; + private var lastScreenWidth:Number = 512; + private var lastScreenHeight:Number = 389; + + private var _transitionPropertiesOK:Function; + private var _canvasBranchView:CanvasBranchView; + + //Defined so compiler can 'see' events added at runtime by EventDispatcher + private var dispatchEvent:Function; + public var addEventListener:Function; + public var removeEventListener:Function; + + /** + * Constructor + */ + function CanvasBranchView(){ + _canvasBranchView = this; + _tm = ThemeManager.getInstance(); + + //Init for event delegation + mx.events.EventDispatcher.initialize(this); + } + + /** + * Called to initialise Canvas . CAlled by the Canvas container + */ + public function init(m:Observable,c:Controller){ + + super (m, c); + + //Set up parameters for the grid + H_GAP = 10; + V_GAP = 10; + + _cm = CanvasModel(m) + + //register to recive updates form the model + _cm.addEventListener('viewUpdate',this); + + MovieClipUtils.doLater(Proxy.create(this,draw)); + } + + /** + * Recieved update events from the CanvasModel. Dispatches to relevent handler depending on update.Type + * @usage + * @param event + */ + public function viewUpdate(event:Object):Void{ + Debugger.log('Recived an Event dispather UPDATE!, updateType:'+event.updateType+', target'+event.target,4,'viewUpdate','CanvasView'); + var cm:CanvasModel = event.target; + + switch (event.updateType){ + case 'POSITION' : + setPosition(cm); + break; + case 'SIZE' : + setSize(cm); + break; + case 'DRAW_ACTIVITY': + drawActivity(event.data,cm); + break; + case 'HIDE_ACTIVITY': + hideActivity(event.data,cm); + break; + case 'REMOVE_ACTIVITY': + removeActivity(event.data,cm); + break; + case 'DRAW_TRANSITION': + drawTransition(event.data,cm); + break; + case 'HIDE_TRANSITION': + hideTransition(event.data,cm); + break; + case 'REMOVE_TRANSITION': + removeTransition(event.data,cm); + break; + case 'SELECTED_ITEM' : + highlightActivity(cm); + break; + default : + Debugger.log('unknown update type :' + event.updateType,Debugger.CRITICAL,'update','org.lamsfoundation.lams.CanvasView'); + } + + } + + /** + * layout visual elements on the canvas on initialisation + */ + private function draw(){ + //get the content path for the sp + _canvas_branch_mc = canvas_scp.content; + + bkg_pnl = _canvas_branch_mc.createClassObject(Panel, "bkg_pnl", getNextHighestDepth()); + + //set up the layers + _gridLayer_mc = _canvas_branch_mc.createEmptyMovieClip("_gridLayer_mc", _canvas_branch_mc.getNextHighestDepth()); + _transitionLayer_mc = _canvas_branch_mc.createEmptyMovieClip("_transitionLayer_mc", _canvas_branch_mc.getNextHighestDepth()); + + _activityLayerComplex_mc = _canvas_branch_mc.createEmptyMovieClip("_activityLayerComplex_mc", _canvas_branch_mc.getNextHighestDepth()); + _activityLayer_mc = _canvas_branch_mc.createEmptyMovieClip("_activityLayer_mc", _canvas_branch_mc.getNextHighestDepth()); + + bkg_pnl.onRelease = function(){ + Application.getInstance().getCanvas().getCanvasView().getController().canvasRelease(this); + } + + bkg_pnl.useHandCursor = false; + + setStyles(); + + //Dispatch load event + dispatchEvent({type:'load',target:this}); + } + + public function initDrawTempTrans(){ + Debugger.log("Initialising drawing temp. Transition", Debugger.GEN, "initDrawTempTrans", "CanvasView"); + _activityLayer_mc.createEmptyMovieClip("tempTrans", _activityLayer_mc.getNextHighestDepth()); + _activityLayer_mc.attachMovie("squareHandle", "h1", _activityLayer_mc.getNextHighestDepth()); + _activityLayer_mc.attachMovie("squareHandle", "h2", _activityLayer_mc.getNextHighestDepth()); + + _activityLayer_mc.h1._x = _canvas_branch_mc._xmouse + _activityLayer_mc.h1._y = _canvas_branch_mc._ymouse + + _activityLayer_mc.tempTrans.onEnterFrame = drawTempTrans; + + } + + /** + * used to draw temp dotted transtion. + * @usage + * @return + */ + private function drawTempTrans(){ + Debugger.log("Started drawing temp. Transition", Debugger.GEN, "drawTempTrans", "CanvasView"); + + this.clear(); + + Debugger.log("Runtime movieclips cleared from CanvasView: clear()", Debugger.GEN, "drawTempTrans", "CanvasView"); + + Draw.dashTo(this, _parent.h1._x, _parent.h1._y, _parent._parent._xmouse - 3, _parent._parent._ymouse - 3, 7, 4); + _parent.h2._x = _parent._parent._xmouse - 3; + _parent.h2._y = _parent._parent._ymouse - 3; + } + + public function removeTempTrans(){ + Debugger.log("Stopped drawing temp. Transition", Debugger.GEN, "removeTempTrans", "CanvasView"); + delete _activityLayer_mc.tempTrans.onEnterFrame; + _activityLayer_mc.tempTrans.removeMovieClip(); + _activityLayer_mc.h1.removeMovieClip(); + _activityLayer_mc.h2.removeMovieClip(); + } + + + /** + * Draws new or replaces existing activity to canvas stage. + * @usage + * @param a - Activity to be drawn + * @param cm - Refernce to the model + * @return Boolean - successfullit + */ + private function drawActivity(a:Activity,cm:CanvasModel):Boolean{ + + var cbv = CanvasBranchView(this); + var cbc = getController(); + + Debugger.log('I am in drawActivity and Activity typeID :'+a.activityTypeID+' added to the cm.activitiesDisplayed hashtable :'+newActivity_mc,4,'drawActivity','CanvasView'); + //take action depending on act type + if(a.activityTypeID==Activity.TOOL_ACTIVITY_TYPE || a.isGroupActivity()){ + var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasActivity",DepthManager.kTop,{_activity:a,_canvasController:cbc,_canvasView:cbv}); + cm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); + 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.isGateActivity()){ + var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasGateActivity",DepthManager.kTop,{_activity:a,_canvasController:cbc,_canvasView:cbv}); + cm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); + Debugger.log('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); + var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasParallelActivity",DepthManager.kTop,{_activity:a,_children:children,_canvasController:cbc,_canvasView:cbv, _locked:a.isReadOnly()}); + cm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); + Debugger.log('Parallel activity a.title:'+a.title+','+a.activityUIID+' added to the cm.activitiesDisplayed hashtable :'+newActivity_mc,4,'drawActivity','CanvasView'); + } + else if(a.activityTypeID==Activity.OPTIONAL_ACTIVITY_TYPE){ + var children:Array = cm.getCanvas().ddm.getComplexActivityChildren(a.activityUIID); + var newActivity_mc = _activityLayerComplex_mc.createChildAtDepth("CanvasOptionalActivity",DepthManager.kTop,{_activity:a,_children:children,_canvasController:cbc,_canvasView:cbv,_locked:a.isReadOnly()}); + cm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); + Debugger.log('Optional activity Type a.title:'+a.title+','+a.activityUIID+' added to the cm.activitiesDisplayed hashtable :'+newActivity_mc,4,'drawActivity','CanvasView'); + } + else if(a.activityTypeID==Activity.BRANCHING_ACTIVITY_TYPE){ + var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasActivity",DepthManager.kTop,{_activity:a,_canvasController:cbc,_canvasView:cbv}); + cm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); + Debugger.log('Branching activity Type a.title:'+a.title+','+a.activityUIID+' added to the cm.activitiesDisplayed hashtable :'+newActivity_mc,4,'drawActivity','CanvasView'); + + }else{ + Debugger.log('The activity:'+a.title+','+a.activityUIID+' is of unknown type, it cannot be drawn',Debugger.CRITICAL,'drawActivity','CanvasView'); + } + + return true; + } + + /** + * Add to canvas stage but keep hidden from view. + * + * @usage + * @param a + * @param cm + * @return true if successful + */ + + private function hideActivity(a:Activity, cm:CanvasModel):Boolean { + var cbv = CanvasBranchView(this); + var cbc = getController(); + + if (a.isSystemGateActivity()){ + var newActivityObj = new Object(); + newActivityObj.activity = a; + + cm.activitiesDisplayed.put(a.activityUIID,newActivityObj); + + Debugger.log('Gate activity a.title:'+a.title+','+a.activityUIID+' added (hidden) to the cm.activitiesDisplayed hashtable:'+newActivityObj,4,'hideActivity','CanvasView'); + } + + return true; + } + + /** + * Removes existing activity from canvas stage. DOES not affect DDM. called by an update, so DDM change is already made + * @usage + * @param a - Activity to be Removed + * @param cm - Refernce to the model + * @return Boolean - successfull + */ + private function removeActivity(a:Activity,cm:CanvasModel):Boolean{ + //Debugger.log('a.title:'+a.title,4,'removeActivity','CanvasView'); + var r = cm.activitiesDisplayed.remove(a.activityUIID); + r.removeMovieClip(); + var s:Boolean = (r==null) ? false : true; + return s; + } + + /** + * Draws a transition on the canvas. + * @usage + * @param t The transition to draw + * @param cm the canvas model. + * @return + */ + private function drawTransition(t:Transition,cm:CanvasModel):Boolean{ + var cbv = CanvasBranchView(this); + var cbc = getController(); + var newTransition_mc:MovieClip = _transitionLayer_mc.createChildAtDepth("CanvasTransition",DepthManager.kTop,{_transition:t,_canvasController:cbc,_canvasView:cbv}); + + cm.transitionsDisplayed.put(t.transitionUIID,newTransition_mc); + Debugger.log('drawn a transition:'+t.transitionUIID+','+newTransition_mc,Debugger.GEN,'drawTransition','CanvasView'); + return true; + + } + + /** + * Hides a transition on the canvas. + * + * @usage + * @param t The transition to hide + * @param cm The canvas model + * @return true if successful + */ + + private function hideTransition(t:Transition, cm:CanvasModel):Boolean{ + var cbv = CanvasBranchView(this); + var cbc = getController(); + var newTransition_mc:MovieClip = _transitionLayer_mc.createChildAtDepth("CanvasTransition",DepthManager.kTop,{_transition:t,_canvasController:cbc,_canvasView:cbv, _visible:false}); + + cm.transitionsDisplayed.put(t.transitionUIID,newTransition_mc); + Debugger.log('drawn (hidden) a transition:'+t.transitionUIID+','+newTransition_mc,Debugger.GEN,'hideTransition','CanvasView'); + + return true; + } + + /** + * Removes a transition from the canvas + * @usage + * @param t The transition to remove + * @param cm The canvas model + * @return + */ + private function removeTransition(t:Transition,cm:CanvasModel){ + //Debugger.log('t.uiID:'+t.transitionUIID,Debugger.CRITICAL,'removeTransition','CanvasView'); + var r = cm.transitionsDisplayed.remove(t.transitionUIID); + r.removeMovieClip(); + var s:Boolean = (r==null) ? false : true; + return s; + } + + + /** + * 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){ + var dialog:MovieClip; + _transitionPropertiesOK = callBack; + + //Check to see whether this should be a centered or positioned dialog + if(typeof(pos)=='string'){ + dialog = PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue('trans_dlg_title'),closeButton:true,scrollContentPath:"TransitionProperties"}); + } else { + 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,transitionDialogLoaded)); + + } + + /** + * called when the transitionDialogLoaded is loaded + */ + public function transitionDialogLoaded(evt:Object) { + //Check type is correct + if(evt.type == 'contentLoaded'){ + evt.target.scrollContent.addEventListener('okClicked',_transitionPropertiesOK); + }else { + //TODO DI 25/05/05 raise wrong event type error + } + } + + + /** + * Sets the size of the canvas on stage, called from update + */ + private function setSize(cm:CanvasModel):Void{ + var s:Object = cm.getSize(); + + var newWidth:Number = Math.max(s.w, lastScreenWidth) + var newHeight:Number = Math.max(s.h, lastScreenHeight) + + canvas_scp.setSize(s.w,s.h); + bkg_pnl.setSize(newWidth,newHeight); + + //Create the grid. The gris is re-drawn each time the canvas is resized. + var grid_mc = Grid.drawGrid(_gridLayer_mc,Math.round(newWidth),Math.round(newHeight),V_GAP,H_GAP); + + //position bin in canvas. + // TODO: new indep. bin? + //var bin = cm.getCanvas().bin; + //bin._x = (s.w - bin._width) - 20; + //bin._y = (s.h - bin._height) - 20; + canvas_scp.redraw(true); + lastScreenWidth = newWidth + lastScreenHeight = newHeight + } + + /** + * Get the CSSStyleDeclaration objects for each component and apply them + * directly to the instance + * @usage + * @return + */ + private function setStyles() { + + var styleObj = _tm.getStyleObject('CanvasPanel'); + bkg_pnl.setStyle('styleName',styleObj); + + } + + /** + * Sets the position of the canvas on stage, called from update + * @param cm Canvas model object + */ + private function setPosition(cm:CanvasModel):Void{ + var p:Object = cm.getPosition(); + this._x = p.x; + this._y = p.y; + } + + public function getTransitionLayer():MovieClip{ + return _transitionLayer_mc; + } + + public function get activityLayer():MovieClip{ + return _activityLayer_mc; + } + + public function closeView():Void { + this.removeMovieClip(); + } + + /** + * Overrides method in abstract view to ensure cortect type of controller is returned + * @usage + * @return CanvasController + */ + public function getController():CanvasController{ + var c:Controller = super.getController(); + return CanvasController(c); + } + + /** + * Returns the default controller for this view . + * Overrides AbstractView.defaultController() + */ + public function defaultController (model:Observable):Controller { + return new CanvasController(model); + } +} \ No newline at end of file Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/Bin.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/Bin.as (.../Bin.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/Bin.as (.../Bin.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -32,13 +32,13 @@ /** * CanvasActivity - */ -class org.lamsfoundation.lams.authoring.cv.Bin extends MovieClip{ - +class org.lamsfoundation.lams.authoring.cv.Bin extends MovieClip{ //this is set by the init object private var _canvasController:CanvasController; private var _canvasView:CanvasView; - private var _tip:ToolTip; + private var _tip:ToolTip; + //locals private var tooltipXoffset:Number = 100; private var up_mc:MovieClip; @@ -51,7 +51,6 @@ function Bin(){ - Debugger.log('hello',4,'Constructor','Bin'); //let it wait one frame to set up the components. MovieClipUtils.doLater(Proxy.create(this,init)); } @@ -79,8 +78,8 @@ var Xpos = (Application.CANVAS_X+ this._x)-tooltipXoffset; var Ypos = (Application.CANVAS_Y+ this._y); var ttHolder = Application.tooltip; - //var ttMessage = btnObj.label; var ttMessage = Dictionary.getValue("bin_tooltip"); + //param "true" is to specify that tooltip needs to be shown above the component _tip.DisplayToolTip(ttHolder, ttMessage, Xpos, Ypos, true); } Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as (.../Canvas.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as (.../Canvas.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -22,6 +22,7 @@ */ import org.lamsfoundation.lams.authoring.cv.* +import org.lamsfoundation.lams.authoring.br.* import org.lamsfoundation.lams.authoring.tk.* import org.lamsfoundation.lams.common.util.* import org.lamsfoundation.lams.common.comms.* @@ -42,20 +43,19 @@ */ class org.lamsfoundation.lams.authoring.cv.Canvas { - //Constants - //public static var USE_PROPERTY_INSPECTOR = true; - //Model private var canvasModel:CanvasModel; - //View + //Views private var canvasView:CanvasView; - + private var canvasBranchView:CanvasBranchView; + private var _canvasView_mc:MovieClip; + private var _canvasBranchView_mc:MovieClip; + // CookieMonster (SharedObjects) private var _cm:CookieMonster; private var _comms:Communication; - private var _canvasView_mc:MovieClip; private var app:Application; private var _ddm:DesignDataModel; private var _dictionary:Dictionary; @@ -69,13 +69,12 @@ private var toolActHeight:Number = 50; private var complexActWidth:Number = 143; private var _isBusy:Boolean; - // auto-save interval - //private static var AUTOSAVE_DEFAULT_CHECK_INTERVAL:Number = 10000; private static var AUTOSAVE_CONFIG:String = "autosave"; private static var AUTOSAVE_TAG:String = "cv.ddm.autosave.user."; - //private var _pi:MovieClip; //Property inspector - private var _bin:MovieClip;//bin + private var _bin:MovieClip; //bin + private var _target_mc:MovieClip; + //Defined so compiler can 'see' events added at runtime by EventDispatcher private var dispatchEvent:Function; public var addEventListener:Function; @@ -90,6 +89,8 @@ public function Canvas (target_mc:MovieClip,depth:Number,x:Number,y:Number,w:Number,h:Number){ mx.events.EventDispatcher.initialize(this); + _target_mc = target_mc; + //Design Data Model. _ddm = new DesignDataModel(); @@ -100,7 +101,7 @@ _dictionary = Dictionary.getInstance(); //Create the view - _canvasView_mc = target_mc.createChildAtDepth("canvasView",DepthManager.kTop); + _canvasView_mc = _target_mc.createChildAtDepth("canvasView",DepthManager.kTop); //Cast toolkit view clip as ToolkitView and initialise passing in model canvasView = CanvasView(_canvasView_mc); @@ -127,45 +128,24 @@ _ddm.addEventListener('ddmUpdate',Proxy.create(this,onDDMUpdated)); _ddm.addEventListener('ddmBeforeUpdate',Proxy.create(this,onDDMBeforeUpdate)); - - //Register view with model to receive update events canvasModel.addObserver(canvasView); - //Set the position by setting the model which will call update on the view canvasModel.setPosition(x,y); //Initialise size to the designed size canvasModel.setSize(w,h); - //muist comne after the canvasView as we use the defaultController method to get a controller ref. - //_dictionary.addEventListener('init',Proxy.create(this,setupPI)); - //if in monitor, dont do it! initBin(); } - - - /** - * Method used to open a Property Inspector on popup window. Not used any more - * - * @usage - * @return - public function setupPI(){ - if(USE_PROPERTY_INSPECTOR){ - initPropertyInspector(); - } - } - */ - /** * Event dispatched from the view once it's loaded */ public function viewLoaded(evt:Object) { - //Debugger.log('Canvas view loaded: ' + evt.type,Debugger.GEN,'viewLoaded','Canvas'); if(evt.type=='load') { var autosave_config_interval = Config.getInstance().getItem(AUTOSAVE_CONFIG); if(autosave_config_interval > 0) { @@ -185,6 +165,18 @@ } /** + * Event dispatched from the view once it's loaded + */ + public function branchViewLoaded(evt:Object) { + if(evt.type=='load') { + Debugger.log('Successful load: ' + evt.type,Debugger.CRITICAL,'branchViewLoaded','Canvas'); + }else { + Debugger.log('Event type not recognised : ' + evt.type,Debugger.CRITICAL,'viewLoaded','Canvas'); + } + } + + + /** * Opens the help->about dialog */ public function openAboutLams() { @@ -195,9 +187,7 @@ 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 @@ -224,25 +214,20 @@ * @return */ public function openDesignById(workspaceResultDTO:Object){ - //Application.getInstance().getWorkspace().getWV().workspaceDialog.closeThisDialogue(); Application.getInstance().getWorkspace().getWV().clearDialog(); ObjectUtils.toString(workspaceResultDTO); var designId:Number = workspaceResultDTO.selectedResourceID; var callback:Function = Proxy.create(this,setDesign); - - //Application.getInstance().getComms().getRequest('flashxml/learning_design.xml',callback, false); Application.getInstance().getComms().getRequest('authoring/author.do?method=getLearningDesignDetails&learningDesignID='+designId,callback, false); - //var designObject:Object = Application.getInstance().getComms().getRequest('authoring/author.do?method=getLearningDesign&learningDesignID='+designId,callback); - - + } /** * Request imported design from server * * @usage - * @param learningDesignID +b * @param learningDesignID * @return */ @@ -269,6 +254,26 @@ } + public function openBranchView(ba:BranchingActivity){ + + //Create the view + _canvasBranchView_mc = _target_mc.createChildAtDepth("canvasBranchView",DepthManager.kTop); + + //Cast toolkit view clip as ToolkitView and initialise passing in model + canvasBranchView = CanvasBranchView(_canvasBranchView_mc); + canvasBranchView.init(canvasModel,undefined); + + //Add listener to view so that we know when it's loaded + canvasBranchView.addEventListener('load',Proxy.create(this,branchViewLoaded)); + + Application.getInstance().onResize(); + + } + + public function closeBranchView(ba:BranchingActivity){ + canvasBranchView.closeView(); + } + /** * Auto-saves current DDM (Learning Design on Canvas) to SharedObject * @@ -315,9 +320,6 @@ public function showRecoverMessage() { var recData:Object = CookieMonster.open(AUTOSAVE_TAG + _root.userID,true); - //var timeDiff:Number = new Date().getTime() - recData.lastModifiedDateTime.getTime(); - //var saveDelay:Number = timeDiff/1000/60; - 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')); } @@ -362,7 +364,6 @@ errorPacket.messages = errors; var msg:String = Dictionary.getValue('cv_invalid_design_on_apply_changes'); - //public static function howMessageConfirm(msg, okHandler:Function, cancelHandler:Function,okLabel:String,cancelLabel:String){ var okHandler = Proxy.create(this,showDesignValidationIssues, errorPacket); LFMessage.showMessageConfirm(msg,okHandler,null,Dictionary.getValue('cv_show_validation')); Cursor.showCursor(Application.C_DEFAULT); @@ -441,11 +442,8 @@ var callback:Function = Proxy.create(this,onStoreDesignResponse); Application.getInstance().getComms().sendAndReceive(dto,"servlet/authoring/storeLearningDesignDetails",callback,false); - //Application.getInstance().getComms().sendAndReceive(dto,"http://dolly.uklams.net:8080/lams/authoring/authorServlet",onStoreDesignResponse,true); - //Application.getInstance().getComms().sendAndReceive(dto,"http://geo.uklams.net/testing/printPost.php",onStoreDesignResponse,true); return true; - //public function sendAndReceive(dto:Object, requestURL:String,handler:Function,isFullURL){ } /** @@ -456,7 +454,6 @@ * @return */ public function onStoreDesignResponse(r):Void{ - //Debugger.log('Response:'+ObjectUtils.printObject(response),Debugger.GEN,'onStoreDesignResponse','Canvas'); Application.getInstance().getWorkspace().getWV().clearDialog(); if(r instanceof LFError){ @@ -468,8 +465,6 @@ Cursor.showCursor(Application.C_DEFAULT); r.showErrorAlert(); }else{ - //_global.breakpoint(); - //Debugger.log('_ddm.learningDesignID:'+_ddm.learningDesignID,Debugger.GEN,'setDroppedTemplateActivity','Canvas'); discardAutoSaveDesign(); _ddm.learningDesignID = r.learningDesignID; @@ -498,17 +493,13 @@ if(_ddm.validDesign){ - //var msg:String = "Congratulations! - Your design is valid has been saved"+r.learningDesignID; - //TODO take this from the dictionary var msg:String = Dictionary.getValue('cv_valid_design_saved'); var _requestSrc = _root.requestSrc; if(_requestSrc != null) { //show the window, on load, populate it var cc:CanvasController = canvasView.getController(); var saveConfirmDialog = PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue('al_alert'),closeButton:false,scrollContentPath:"SaveConfirmDialog",msg:msg, requestSrc:_requestSrc, canvasModel:canvasModel,canvasController:cc}); - //var extHandler = Proxy.create(this,closeReturnExt); - //LFMessage.showMessageConfirm(msg, null, extHandler, null, Dictionary.getValue('cv_close_return_to_ext_src', [_requestSrc])); } else if(_ddm.editOverrideLock) { var finishEditHandler = Proxy.create(this,finishEditOnFly); msg = Dictionary.getValue('cv_eof_changes_applied'); @@ -518,7 +509,6 @@ } } else { var msg:String = Dictionary.getValue('cv_invalid_design_saved'); - //public static function howMessageConfirm(msg, okHandler:Function, cancelHandler:Function,okLabel:String,cancelLabel:String){ var okHandler = Proxy.create(this,showDesignValidationIssues,r); LFMessage.showMessageConfirm(msg,okHandler,null,Dictionary.getValue('cv_show_validation')); } @@ -687,13 +677,11 @@ Debugger.log('parallel activity given new UIID of:'+actToAdd.activityUIID ,Debugger.GEN,'setDroppedTemplateActivity','Canvas'); //now get this acts children and add them to the design (WHINEY VOICE:"will somebody pleeeease think of the children.....") - for(var i=0;i 0){ canvasActivityGrouped_mc._visible = true; @@ -368,7 +363,6 @@ } title_lbl.visible=true; - //clickTarget_mc._visible=true; stopSign_mc._visible = false; //write text Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasBranchingActivity.as =================================================================== diff -u --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasBranchingActivity.as (revision 0) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasBranchingActivity.as (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -0,0 +1,468 @@ +/*************************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ************************************************************************ + */ + +import org.lamsfoundation.lams.common.*; +import org.lamsfoundation.lams.common.util.*; +import org.lamsfoundation.lams.common.dict.* +import org.lamsfoundation.lams.common.ui.*; +import org.lamsfoundation.lams.authoring.*; +import org.lamsfoundation.lams.authoring.cv.*; +import org.lamsfoundation.lams.monitoring.mv.*; +import org.lamsfoundation.lams.monitoring.mv.tabviews.*; +import org.lamsfoundation.lams.common.style.*; + +import com.polymercode.Draw; +import mx.controls.*; +import mx.managers.* +import mx.containers.*; +import mx.events.* +import mx.utils.* + +/** +* CanvasBranchingActivity +* This is the UI / view representation of a complex (branching) activity +*/ +class org.lamsfoundation.lams.authoring.cv.CanvasBranchingActivity extends MovieClip implements ICanvasActivity{ + + + public static var TOOL_ACTIVITY_WIDTH:Number = 123.1; + public static var TOOL_ACTIVITY_HEIGHT:Number = 50.5; + + public static var ICON_WIDTH:Number = 25; + public static var ICON_HEIGHT:Number = 25; + + private var newContainerXCoord:Number; + private var newContainerYCoord:Number; + private var _visibleHeight:Number; + private var _visibleWidth:Number; + + private var _canvasController:CanvasController; + private var _canvasView:CanvasView; + + private var _monitorController:MonitorController; + private var _monitorView; + + private var _tm:ThemeManager; + private var _ddm:DesignDataModel; + private var _ccm:CustomContextMenu; + + private var app:Application; + + private var _activity:Activity; + private var _children:Array; + + private var bkg_pnl:MovieClip; + private var act_pnl:MovieClip; + private var branchIcon_mc:MovieClip; + + private var title_lbl:MovieClip; + private var _module:String; + + private var canvasActivity_mc:MovieClip; + private var canvasActivityGrouped_mc:MovieClip; + + private var _base_mc:MovieClip; + private var _selected_mc:MovieClip; + private var fade_mc:MovieClip; + + private var bgNegative:String = "original"; + private var authorMenu:ContextMenu; + + private var clickTarget_mc:MovieClip; + + private var learnerOffset_X:Number = 4; + private var learnerOffset_Y:Number = 3; + + private var _dcStartTime:Number = 0; + private var _doubleClicking:Boolean; + + private var _locked:Boolean; + private var _isSelected:Boolean; + + function CanvasBranchingActivity(){ + Debugger.log("_activity:"+_activity.title+'uiID:'+_activity.activityUIID+' children:'+_children.length,Debugger.GEN,'Constructor','CanvasBranchingActivity'); + + _locked = false; + + _tm = ThemeManager.getInstance(); + _ccm = CustomContextMenu.getInstance(); + app = Application.getInstance(); + + _visibleHeight = CanvasBranchingActivity.TOOL_ACTIVITY_HEIGHT; + _visibleWidth = CanvasBranchingActivity.TOOL_ACTIVITY_WIDTH; + + _base_mc = this; + + //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){ + init(); + } + } + + public function init(initObj):Void{ + if(initObj){ + _module = initObj._module; + if (_module == "monitoring"){ + _monitorView = initObj._monitorView; + _monitorController = initObj._monitorController; + }else { + _canvasView = initObj._canvasView; + _canvasController = initObj._canvasController; + } + _activity = initObj.activity; + } + + //_ddm.getComplexActivityChildren(_activity.activityUIID); + + showAssets(false); + + if (_activity.selectActivity == "false"){ + _isSelected = false; + refresh(); + } + + setStyles(); + + MovieClipUtils.doLater(Proxy.create(this, draw)); + + } + + /** + * Updates the CanvasActivity display fields with the current data + * @usage + * @return + */ + public function refresh(setNegative:Boolean):Void{ + bgNegative = String(setNegative); + setStyles(); + draw(); + setSelected(_isSelected); + } + + public function setSelected(isSelected){ + Debugger.log(_activity.title+" isSelected:"+isSelected,4,'setSelected','CanvasActivity'); + var MARGIN = 5; + + if(isSelected){ + + //draw a selected border + var tgt_mc; + if(_activity.groupingUIID > 0) { + tgt_mc = canvasActivityGrouped_mc; + } else { + tgt_mc = canvasActivity_mc; + } + + Debugger.log("tgt_mc:"+tgt_mc,4,'setSelected','CanvasActivity'); + //vars + var tl_x = tgt_mc._x - MARGIN; //top left x + var tl_y = tgt_mc._y - MARGIN; //top left y + var tr_x = tgt_mc._x + tgt_mc._width + MARGIN; //top right x + var tr_y = tl_y; //top right y + var br_x = tr_x; //bottom right x + var br_y = tgt_mc._y + tgt_mc._height + MARGIN; //bottom right y + var bl_x = tl_x; //biottom left x + var bl_y = br_y; //bottom left y + + if(_selected_mc){ + _selected_mc.removeMovieClip(); + } + _selected_mc = _base_mc.createEmptyMovieClip('_selected_mc',_base_mc.getNextHighestDepth()); + + var dashStyle:mx.styles.CSSStyleDeclaration = _tm.getStyleObject("CAHighlightBorder"); + var color:Number = dashStyle.getStyle("color"); + + Draw.dashTo(_selected_mc,tl_x,tl_y,tr_x,tr_y,2,3,2,color); + Draw.dashTo(_selected_mc,tr_x,tr_y,br_x,br_y,2,3,2,color); + Draw.dashTo(_selected_mc,br_x,br_y,bl_x,bl_y,2,3,2,color); + Draw.dashTo(_selected_mc,bl_x,bl_y,tl_x,tl_y,2,3,2,color); + + _isSelected = isSelected; + + } else { + //hide the selected border + _selected_mc.removeMovieClip(); + } + + } + + public function refreshChildren():Void { + + } + + private function showAssets(isVisible:Boolean){ + title_lbl._visible = isVisible; + + canvasActivity_mc._visible = isVisible; + canvasActivityGrouped_mc._visible = isVisible; + + clickTarget_mc._visible = isVisible; + fade_mc._visible = isVisible; + } + public function get activity():Activity{ + return activity + } + + public function set activity(a:Activity){ + _activity = a; + } + + public function getActivity():Activity{ + return _activity; + + } + + public function setActivity(a:Activity){ + _activity = a; + } + + private function getAssociatedStyle():Object{ + var styleObj:Object = new Object(); + + switch (String(_activity.activityCategoryID)){ + case '0' : + styleObj = _tm.getStyleObject('ACTPanel0') + break; + case '1' : + styleObj = _tm.getStyleObject('ACTPanel1') + break; + case '2' : + styleObj = _tm.getStyleObject('ACTPanel2') + break; + case '3' : + styleObj = _tm.getStyleObject('ACTPanel5') + break; + case '4' : + styleObj = _tm.getStyleObject('ACTPanel4') + break; + case '5' : + styleObj = _tm.getStyleObject('ACTPanel1') + break; + case '6' : + styleObj = _tm.getStyleObject('ACTPanel3') + break; + default : + styleObj = _tm.getStyleObject('ACTPanel0') + } + + return styleObj; + } + + /** + * Does the work of laying out the screen assets. + * Depending on type of Activity different bits will be shown + * @usage + * @return + */ + private function draw(){ + + Debugger.log(_activity.title+',_activity.isBranchingActivity():'+_activity.isBranchingActivity(),4,'draw','CanvasBranchingActivity'); + setStyles(); + + var theIcon_mc:MovieClip; + title_lbl._visible = true; + clickTarget_mc._visible = true; + fade_mc._visible = false; + + if(_activity.isReadOnly() && app.canvas.ddm.editOverrideLock == 1){ + Debugger.log("Making transparent layer visible. ", Debugger.CRITICAL, 'draw', 'CanvasActivity'); + fade_mc._visible = true; + } + + //chose the icon: + if(_activity.isBranchingActivity()){ + branchIcon_mc._visible = true; + theIcon_mc = branchIcon_mc; + }else{ + branchIcon_mc._visible = false; + theIcon_mc = null; + } + + theIcon_mc._visible = true; + + //chose the background mc + if(_activity.groupingUIID > 0){ + canvasActivityGrouped_mc._visible = true; + canvasActivity_mc._visible=false; + }else{ + canvasActivity_mc._visible=true; + canvasActivityGrouped_mc._visible = false; + } + + //write text + title_lbl.text = _activity.title; + + clickTarget_mc._width = TOOL_ACTIVITY_WIDTH; + clickTarget_mc._height= TOOL_ACTIVITY_HEIGHT; + + //position + _x = _activity.xCoord; + _y = _activity.yCoord; + + Debugger.log('canvasActivity_mc._visible'+canvasActivity_mc._visible,4,'draw','CanvasActivity'); + + if (_activity.runOffline){ + bgNegative = "true" + setStyles(); + } + } + + private function setLocking():Void{ + if(_locked){ + //rollOver_mc._visible = true; + }else{ + //rollOver_mc._visible = true; + } + } + + public function set locked(setLock:Boolean):Void { + _locked = setLock; + + setLocking(); + + } + + public function get locked():Boolean { + return _locked; + } + + private function onRollOver():Void{ + if (_module == "monitoring"){ + _ccm.showCustomCM(_ccm.loadMenu("activity", "monitoring")) + }else { + _ccm.showCustomCM(_ccm.loadMenu("activity", "authoring")) + } + } + + private function onRollOut():Void{ + if (_module == "monitoring"){ + _ccm.showCustomCM(_ccm.loadMenu("canvas", "monitoring")) + }else { + _ccm.showCustomCM(_ccm.loadMenu("canvas", "authoring")) + } + } + + private function onPress():Void{ + + // check double-click + var now:Number = new Date().getTime(); + + if((now - _dcStartTime) <= Config.DOUBLE_CLICK_DELAY){ + Debugger.log('DoubleClicking:'+this,Debugger.GEN,'localOnPress','CanvasBranchingActivity'); + _doubleClicking = true; + + //if we double click on the glass mask - then open the container to allow the usr to see the activities inside. + if(_locked && !_activity.isReadOnly()){ + locked = false; + } else { + if(_activity.isReadOnly()) { /** TODO: Change label warning */ LFMessage.showMessageAlert(Dictionary.getValue('cv_activity_dbclick_readonly')); } + locked = true; + } + + draw(); + + }else{ + Debugger.log('SingleClicking:+'+this,Debugger.GEN,'localOnPress','CanvasBranchingActivity'); + _doubleClicking = false; + _canvasController.activityClick(this); + + } + + _dcStartTime = now; + + } + + private function onRelease():Void{ + Debugger.log('_doubleClicking:'+_doubleClicking+', localOnRelease:'+this,Debugger.GEN,'localOnRelease','CanvasParallelActivity'); + if (!_doubleClicking) { + _canvasController.activityRelease(this); + } + + } + + private function onReleaseOutside():Void{ + Debugger.log('localOnReleaseOutside:'+this,Debugger.GEN,'localOnReleaseOutside','CanvasParallelActivity'); + _canvasController.activityReleaseOutside(this); + } + + /** + * Get the CSSStyleDeclaration objects for each component and applies them + * directly to the instanced + * @usage + * @return + */ + + private function setStyles() { + var my_color:Color = new Color(this); + var styleObj; + + var transNegative = {ra:-100, ga:-100, ba:-100, rb:255, gb:255, bb:255}; + var transPositive = {ra:100, ga:100, ba:100, rb:0, gb:0, bb:0}; + + styleObj = _tm.getStyleObject('CALabel'); + title_lbl.setStyle('styleName',styleObj); + title_lbl.setStyle("textAlign", "center") + + if(bgNegative == "true") { + my_color.setTransform(transNegative); + } else if(bgNegative == "false") { + my_color.setTransform(transPositive); + } else if(bgNegative == "original") { + styleObj = getAssociatedStyle() //_tm.getStyleObject('ACTPanel') + act_pnl.setStyle('styleName',styleObj); + } + + } + + + /** + * + * @usage + * @return + */ + public function getVisibleWidth ():Number { + return _visibleWidth; + } + + + /** + * + * @usage + * @return + */ + public function getVisibleHeight ():Number { + return _visibleHeight; + } + + /** + * + * @usage + * @return + */ + public function get children():Array { + return _children; + } + + +} \ No newline at end of file Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasController.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasController.as (.../CanvasController.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasController.as (.../CanvasController.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -258,17 +258,28 @@ LFMessage.showMessageAlert(Dictionary.getValue('cv_activity_dbclick_readonly')); }else{ _canvasModel.selectedItem = ca; - if(ca.activity.activityTypeID == Activity.GROUPING_ACTIVITY_TYPE || ca.activity.activityTypeID == Activity.SYNCH_GATE_ACTIVITY_TYPE || ca.activity.activityTypeID == Activity.SCHEDULE_GATE_ACTIVITY_TYPE || ca.activity.activityTypeID == Activity.PERMISSION_GATE_ACTIVITY_TYPE || ca.activity.activityTypeID == Activity.PARALLEL_ACTIVITY_TYPE){ + if(ca.activity.activityTypeID == Activity.GROUPING_ACTIVITY_TYPE || + ca.activity.activityTypeID == Activity.SYNCH_GATE_ACTIVITY_TYPE || + ca.activity.activityTypeID == Activity.SCHEDULE_GATE_ACTIVITY_TYPE || + ca.activity.activityTypeID == Activity.PERMISSION_GATE_ACTIVITY_TYPE || + ca.activity.activityTypeID == Activity.PARALLEL_ACTIVITY_TYPE){ if (!_pi.isPIExpanded()){ _canvasModel.setPIHeight(_pi.piFullHeight()); - //_pi.showExpand(false); } - }else if (ca.activity.parentUIID != null && parentAct.activityTypeID == Activity.OPTIONAL_ACTIVITY_TYPE && (ca.activity.activityTypeID == Activity.PARALLEL_ACTIVITY_TYPE || ca.activity.activityTypeID == Activity.OPTIONAL_ACTIVITY_TYPE)){ + } else if (ca.activity.parentUIID != null && parentAct.activityTypeID == Activity.OPTIONAL_ACTIVITY_TYPE && (ca.activity.activityTypeID == Activity.PARALLEL_ACTIVITY_TYPE || ca.activity.activityTypeID == Activity.OPTIONAL_ACTIVITY_TYPE)){ if (!_pi.isPIExpanded()){ _canvasModel.setPIHeight(_pi.piFullHeight()); } - }else{ + } else if(ca.activity.activityTypeID == Activity.BRANCHING_ACTIVITY_TYPE) { + Debugger.log('activityDoubleClick CanvasBranchActivity:'+ca.activity.activityUIID,Debugger.CRITICAL,'activityDoubleClick','CanvasController'); + + _canvasModel.openBranchActivityContent(ca.activity); + + // invalidate design after opening tool content window + _canvasModel.getCanvas().ddm.validDesign = false; + _canvasModel.getCanvas().checkValidDesign(); + } else { Debugger.log('activityDoubleClick CanvasActivity:'+ca.activity.activityUIID,Debugger.CRITICAL,'activityDoubleClick to open Content','CanvasController'); _canvasModel.openToolActivityContent(ca.activity); @@ -469,10 +480,14 @@ public function canvasRelease(canvas_mc:MovieClip){ var toolActWidth:Number = _canvasModel.getCanvas().toolActivityWidth; var toolActHeight:Number = _canvasModel.getCanvas().toolActivityHeight; + var complexActWidth:Number = _canvasModel.getCanvas().complexActivityWidth; + Debugger.log(canvas_mc,Debugger.GEN,'canvasRelease','CanvasController'); Debugger.log('_canvasModel.activeTool:'+_canvasModel.activeTool,Debugger.GEN,'canvasRelease','CanvasController'); + _canvasModel.selectedItem = null; + if(_canvasModel.activeTool == CanvasModel.GATE_TOOL){ var p = new Point(canvas_mc._xmouse, canvas_mc._ymouse); _canvasModel.createNewGate(Activity.PERMISSION_GATE_ACTIVITY_TYPE,p); @@ -482,17 +497,23 @@ if(_canvasModel.activeTool == CanvasModel.OPTIONAL_TOOL){ var p = new Point(canvas_mc._xmouse-(complexActWidth/2), canvas_mc._ymouse); _canvasModel.createNewOptionalActivity(Activity.OPTIONAL_ACTIVITY_TYPE,p); - //_canvasModel.createNewOptionalActivity(p); _canvasModel.getCanvas().stopOptionalActivity(); } + if(_canvasModel.activeTool == CanvasModel.GROUP_TOOL){ var p = new Point(canvas_mc._xmouse-(toolActWidth/2), canvas_mc._ymouse-(toolActHeight/2)); _canvasModel.createNewGroupActivity(p); _canvasModel.getCanvas().stopGroupTool(); } + if(_canvasModel.activeTool == CanvasModel.BRANCH_TOOL){ + var p = new Point(canvas_mc._xmouse-(toolActWidth/2), canvas_mc._ymouse-(toolActHeight/2)); + _canvasModel.createNewBranchActivity(p); + _canvasModel.getCanvas().stopBranchTool(); + } + } private function createValidTransitionTarget(transitionTargetObj:Object, isInitTarget:Boolean):Object{ Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasModel.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasModel.as (.../CanvasModel.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/CanvasModel.as (.../CanvasModel.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -37,6 +37,7 @@ public static var OPTIONAL_TOOL:String = "OPTIONAL"; public static var GATE_TOOL:String = "GATE"; public static var GROUP_TOOL:String = "GROUP"; + public static var BRANCH_TOOL:String = "BRANCH"; private var _defaultGroupingTypeID; private var __width:Number; private var __height:Number; @@ -49,6 +50,7 @@ private var _cv:Canvas; private var _ddm:DesignDataModel; private var optionalCA:CanvasOptionalActivity; + //UI State variabls private var _isDirty:Boolean; private var _activeTool:String; @@ -84,10 +86,6 @@ _activitiesDisplayed = new Hashtable("_activitiesDisplayed"); _transitionsDisplayed = new Hashtable("_transitionsDisplayed"); - - - - _activeTool = "none"; _autoSaveWait = false; _transitionActivities = new Array(); @@ -202,7 +200,6 @@ Debugger.log('Starting transition tool',Debugger.GEN,'startTransitionTool','CanvasModel'); resetTransitionTool(); _activeTool = TRANSITION_TOOL; - //broadcastViewUpdate("START_TRANSITION_TOOL"); } /** @@ -215,7 +212,6 @@ Debugger.log('Stopping transition tool',Debugger.GEN,'stopTransitionTool','CanvasModel'); resetTransitionTool(); _activeTool = "none"; - //broadcastViewUpdate("STOP_TRANSITION_TOOL"); } @@ -263,7 +259,7 @@ Debugger.log("Locking all Complex Activities", Debugger.GEN, "lockAllComplexActivities", "CanvasModel"); var k:Array = _activitiesDisplayed.values(); for (var i=0; i"; var dTitle:String; var titleToCheck:String; if (isRread_only){ @@ -295,10 +278,7 @@ _activityLayer_mc.attachMovie("squareHandle", "h2", _activityLayer_mc.getNextHighestDepth()); _activityLayer_mc.h1._x = _canvas_mc._xmouse _activityLayer_mc.h1._y = _canvas_mc._ymouse - trace("startTransX: "+_activityLayer_mc.h1._x) _activityLayer_mc.tempTrans.onEnterFrame = drawTempTrans; - trace("startTransY: "+_activityLayer_mc.h1._y) - } /** @@ -307,11 +287,6 @@ * @return */ private function drawTempTrans(){ - //var drawLineColor = - trace("_activityLayer_mc.tempTrans: "+this) - trace("startTransX: "+startTransX) - trace("startTransY: "+startTransY) - trace("_parent._parent: "+_parent._parent); Debugger.log("Started drawing temp. Transition", Debugger.GEN, "drawTempTrans", "CanvasView"); this.clear(); @@ -325,8 +300,9 @@ public function removeTempTrans(){ Debugger.log("Stopped drawing temp. Transition", Debugger.GEN, "removeTempTrans", "CanvasView"); - trace("stopped Drawing ") + delete _activityLayer_mc.tempTrans.onEnterFrame; + _activityLayer_mc.tempTrans.removeMovieClip(); _activityLayer_mc.h1.removeMovieClip(); _activityLayer_mc.h2.removeMovieClip(); @@ -341,58 +317,45 @@ * @return Boolean - successfullit */ private function drawActivity(a:Activity,cm:CanvasModel):Boolean{ - var s:Boolean = false; - //Debugger.log('a.title:'+a.title,4,'drawActivity','CanvasView'); - //var initObj:Object = {_activity=a}; - //_global.breakpoint(); - var cvv = CanvasView(this); + var cvv = CanvasView(this); var cvc = getController(); - //Debugger.log('I am in drawActivity and Activity typeID :'+a+' added to the cm.activitiesDisplayed hashtable :'+newActivity_mc,4,'drawActivity','CanvasView'); + Debugger.log('I am in drawActivity and Activity typeID :'+a.activityTypeID+' added to the cm.activitiesDisplayed hashtable :'+newActivity_mc,4,'drawActivity','CanvasView'); //take action depending on act type if(a.activityTypeID==Activity.TOOL_ACTIVITY_TYPE || a.isGroupActivity()){ 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 or gate activity a.title:'+a.title+','+a.activityUIID+' added to the cm.activitiesDisplayed hashtable:'+newActivity_mc,4,'drawActivity','CanvasView'); } - if (a.isGateActivity()){ + else if (a.isGateActivity()){ var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasGateActivity",DepthManager.kTop,{_activity:a,_canvasController:cvc,_canvasView:cvv}); cm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); Debugger.log('Gate activity a.title:'+a.title+','+a.activityUIID+' added to the cm.activitiesDisplayed hashtable:'+newActivity_mc,4,'drawActivity','CanvasView'); } - if(a.activityTypeID==Activity.PARALLEL_ACTIVITY_TYPE){ + else if(a.activityTypeID==Activity.PARALLEL_ACTIVITY_TYPE){ //get the children var children:Array = cm.getCanvas().ddm.getComplexActivityChildren(a.activityUIID); - //var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasParallelActivity",DepthManager.kTop,{_activity:a,_children:children,_canvasController:cvc,_canvasView:cvv}); var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasParallelActivity",DepthManager.kTop,{_activity:a,_children:children,_canvasController:cvc,_canvasView:cvv, _locked:a.isReadOnly()}); cm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); Debugger.log('Parallel activity a.title:'+a.title+','+a.activityUIID+' added to the cm.activitiesDisplayed hashtable :'+newActivity_mc,4,'drawActivity','CanvasView'); } - if(a.activityTypeID==Activity.OPTIONAL_ACTIVITY_TYPE){ + else if(a.activityTypeID==Activity.OPTIONAL_ACTIVITY_TYPE){ var children:Array = cm.getCanvas().ddm.getComplexActivityChildren(a.activityUIID); - //var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasParallelActivity",DepthManager.kTop,{_activity:a,_children:children,_canvasController:cvc,_canvasView:cvv}); var newActivity_mc = _activityLayerComplex_mc.createChildAtDepth("CanvasOptionalActivity",DepthManager.kTop,{_activity:a,_children:children,_canvasController:cvc,_canvasView:cvv,_locked:a.isReadOnly()}); cm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); Debugger.log('Optional activity Type a.title:'+a.title+','+a.activityUIID+' added to the cm.activitiesDisplayed hashtable :'+newActivity_mc,4,'drawActivity','CanvasView'); - + } + else if(a.activityTypeID==Activity.BRANCHING_ACTIVITY_TYPE){ + var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasActivity",DepthManager.kTop,{_activity:a,_canvasController:cvc,_canvasView:cvv}); + cm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); + Debugger.log('Branching activity Type a.title:'+a.title+','+a.activityUIID+' added to the cm.activitiesDisplayed hashtable :'+newActivity_mc,4,'drawActivity','CanvasView'); + }else{ Debugger.log('The activity:'+a.title+','+a.activityUIID+' is of unknown type, it cannot be drawn',Debugger.CRITICAL,'drawActivity','CanvasView'); } - - - - - - //position - //newActivity_mc._x = a.xCoord; - //newActivity_mc._y = a.yCoord; - - //newActivity_mc._visible = true; - - s = true; - - return s; + + return true; } /** @@ -428,7 +391,6 @@ * @return Boolean - successfull */ private function removeActivity(a:Activity,cm:CanvasModel):Boolean{ - //Debugger.log('a.title:'+a.title,4,'removeActivity','CanvasView'); var r = cm.activitiesDisplayed.remove(a.activityUIID); r.removeMovieClip(); var s:Boolean = (r==null) ? false : true; @@ -443,15 +405,13 @@ * @return */ private function drawTransition(t:Transition,cm:CanvasModel):Boolean{ - var s:Boolean = true; - //Debugger.log('t.fromUIID:'+t.fromUIID+', t.toUIID:'+t.toUIID,Debugger.GEN,'drawTransition','CanvasView'); var cvv = CanvasView(this); var cvc = getController(); var newTransition_mc:MovieClip = _transitionLayer_mc.createChildAtDepth("CanvasTransition",DepthManager.kTop,{_transition:t,_canvasController:cvc,_canvasView:cvv}); cm.transitionsDisplayed.put(t.transitionUIID,newTransition_mc); Debugger.log('drawn a transition:'+t.transitionUIID+','+newTransition_mc,Debugger.GEN,'drawTransition','CanvasView'); - return s; + return true; } @@ -472,7 +432,6 @@ cm.transitionsDisplayed.put(t.transitionUIID,newTransition_mc); Debugger.log('drawn (hidden) a transition:'+t.transitionUIID+','+newTransition_mc,Debugger.GEN,'hideTransition','CanvasView'); - return true; } @@ -484,7 +443,6 @@ * @return */ private function removeTransition(t:Transition,cm:CanvasModel){ - //Debugger.log('t.uiID:'+t.transitionUIID,Debugger.CRITICAL,'removeTransition','CanvasView'); var r = cm.transitionsDisplayed.remove(t.transitionUIID); r.removeMovieClip(); var s:Boolean = (r==null) ? false : true; @@ -497,30 +455,26 @@ * @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'); dialog = PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue('trans_dlg_title'),closeButton:true,scrollContentPath:"TransitionProperties"}); } else { 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,transitionDialogLoaded)); - //okClickedCallback = callBack; } /** * called when the transitionDialogLoaded is loaded */ public function transitionDialogLoaded(evt:Object) { - //Debugger.log('!evt.type:'+evt.type,Debugger.GEN,'dialogLoaded','CanvasView'); - //Check type is correct + //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',_transitionPropertiesOK); }else { //TODO DI 25/05/05 raise wrong event type error @@ -532,15 +486,13 @@ * Sets the size of the canvas on stage, called from update */ private function setSize(cm:CanvasModel):Void{ - //positionTitleBar(); - var s:Object = cm.getSize(); + var s:Object = cm.getSize(); var newWidth:Number = Math.max(s.w, lastScreenWidth) var newHeight:Number = Math.max(s.h, lastScreenHeight) canvas_scp.setSize(s.w,s.h); bkg_pnl.setSize(newWidth,newHeight); //Create the grid. The gris is re-drawn each time the canvas is resized. - //var grid_mc = Grid.drawGrid(_gridLayer_mc,Math.round(s.w),Math.round(s.h),V_GAP,H_GAP); var grid_mc = Grid.drawGrid(_gridLayer_mc,Math.round(newWidth),Math.round(newHeight),V_GAP,H_GAP); //position bin in canvas. @@ -563,29 +515,8 @@ var styleObj = _tm.getStyleObject('CanvasPanel'); bkg_pnl.setStyle('styleName',styleObj); - //styleObj = _tm.getStyleObject('label'); - //titleBar.designName_lbl.setStyle('styleName',styleObj); - - - } - - public function setTTData(tData:Object):Void{ - - //transTargetMC = tData.transTargetMC - //tempTrans_mc = tData.tempTrans_mc - //startTransX = tData.startTransX - //startTransY = tData.startTransY - } - public function getTTData():Object{ - var tData:Object = new Object(); - //tData.transTargetMC = transTargetMC - //tData.tempTrans_mc = tempTrans_mc - //tData.startTransX = startTransX - //tData.startTransY = startTransY - return tData - } /** * Sets the position of the canvas on stage, called from update * @param cm Canvas model object Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/ICanvasActivity.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/ICanvasActivity.as (.../ICanvasActivity.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/ICanvasActivity.as (.../ICanvasActivity.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -49,7 +49,9 @@ public function getVisibleHeight():Number; + public function setSelected(isSelected); + } \ No newline at end of file Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspectorNew.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspectorNew.as (.../PropertyInspectorNew.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspectorNew.as (.../PropertyInspectorNew.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -418,7 +418,7 @@ desc_txt.text = StringUtils.cleanNull(a.description); //PI_sp.refreshPane(); - }else if(a.isOptionalActivity()){ + } else if(a.isOptionalActivity()){ //its a grouping activity delimitLine._visible = true; Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/tb/ToolbarController.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/tb/ToolbarController.as (.../ToolbarController.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/tb/ToolbarController.as (.../ToolbarController.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -101,6 +101,9 @@ }else if(tgt.indexOf("group") != -1){ _app.getCanvas().toggleGroupTool(); + }else if(tgt.indexOf("branch") != -1){ + _app.getCanvas().toggleBranchTool(); + }else if(tgt.indexOf("preview") != -1){ _app.getCanvas().launchPreviewWindow(); }else if(tgt.indexOf("cancel") != -1){ Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/tb/ToolbarView.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/tb/ToolbarView.as (.../ToolbarView.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/tb/ToolbarView.as (.../ToolbarView.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -141,6 +141,7 @@ flow_btn.addEventListener("click",controller); gate_btn.addEventListener("click",controller); group_btn.addEventListener("click",controller); + branch_btn.addEventListener("click",controller); preview_btn.addEventListener("click",controller); apply_changes_btn.addEventListener("click", controller); cancel_btn.addEventListener("click",controller); Index: lams_flash/src/common/flash/org/lamsfoundation/lams/common/ApplicationParent.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/common/flash/org/lamsfoundation/lams/common/ApplicationParent.as (.../ApplicationParent.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/common/flash/org/lamsfoundation/lams/common/ApplicationParent.as (.../ApplicationParent.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -39,7 +39,8 @@ public static var C_TRANSITION:String = "c_pen"; public static var C_OPTIONAL:String = "c_optionalBoxPen"; public static var C_GATE:String = "c_gate"; - public static var C_GROUP:String = "c_group"; + public static var C_GROUP:String = "c_group"; + public static var C_BRANCH:String = "c_branch"; public static var C_DEFAULT:String = "default"; public static var C_LICON:String = "c_licon"; Index: lams_flash/src/common/flash/org/lamsfoundation/lams/common/CommonCanvasView.as =================================================================== diff -u -rd7823922f404944822957e6c051bc0f1335a76de -r30b7641a18c8c83b3722fc22bb936d54f4eaa18b --- lams_flash/src/common/flash/org/lamsfoundation/lams/common/CommonCanvasView.as (.../CommonCanvasView.as) (revision d7823922f404944822957e6c051bc0f1335a76de) +++ lams_flash/src/common/flash/org/lamsfoundation/lams/common/CommonCanvasView.as (.../CommonCanvasView.as) (revision 30b7641a18c8c83b3722fc22bb936d54f4eaa18b) @@ -59,23 +59,22 @@ var caComplex = m.activitiesDisplayed.get(m.prevSelectedItem.activity.parentUIID); caComplex.refreshChildren(); } else { - var dca:CanvasActivity = m.activitiesDisplayed.get(m.prevSelectedItem.activity.activityUIID); + var dca:ICanvasActivity = m.activitiesDisplayed.get(m.prevSelectedItem.activity.activityUIID); dca.setSelected(false); } } //try to cast the selected item to see what we have (instance of des not seem to work) - if(CanvasActivity(m.selectedItem) != null){ + if(ICanvasActivity(m.selectedItem) != null){ Debugger.log('Its a canvas activity',4,'highlightActivity','CommonCanvasView'); ca.setSelected(true); - - }else if(CanvasTransition(m.selectedItem) != null){ + } else if(CanvasTransition(m.selectedItem) != null) { var ct = CanvasTransition(m.selectedItem); var t:Transition = ct.transition; Debugger.log('Its a canvas transition',4,'highlightActivity','CommonCanvasView'); - }else{ + } else { Debugger.log('Its a something we dont know',Debugger.CRITICAL,'highlightActivity','CommonCanvasView'); }