Index: lams_central/src/flash/main.as =================================================================== diff -u -rb92c9032ebbd455eb0d4601d29ae2f8f6e8468e2 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/main.as (.../main.as) (revision b92c9032ebbd455eb0d4601d29ae2f8f6e8468e2) +++ lams_central/src/flash/main.as (.../main.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -22,6 +22,16 @@ Debugger.log('Mode is not defined, using defualt:'+_root.mode,Debugger.CRITICAL,'main','ROOT'); } +if(StringUtils.isEmpty(layout)){ + _root.layout = "normal"; + Debugger.log('Mode is not defined, using defualt:'+_root.mode,Debugger.CRITICAL,'main','ROOT'); +} + +if(StringUtils.isEmpty(learningDesignID)){ + _root.learningDesignID = null; + Debugger.log('LearningDesignID is not defined, using default:'+_root.learningDesignID,Debugger.CRITICAL,'main','ROOT'); +} + if(StringUtils.isEmpty(lang)){ _root.lang = "en"; } Index: lams_central/src/flash/main2.as =================================================================== diff -u -r03edc31fa89b65b81c3b533b4cdfb16253a8c0bb -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/main2.as (.../main2.as) (revision 03edc31fa89b65b81c3b533b4cdfb16253a8c0bb) +++ lams_central/src/flash/main2.as (.../main2.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -47,9 +47,9 @@ //------------------------------Local connection to JSPs for progress data ------------------------------ var receive_lc = new LocalConnection(); //-------------------------------------- Functions to setProgress data, called by the LocalConnection object in learner JSPs -receive_lc.setProgressData = function(attempted, completed, current, lessonID, refresh) { +receive_lc.setProgressData = function(attempted, completed, current, lessonID, version, refresh) { Debugger.log(arguments.toString(), 'learnerProgress_lc.setProgressData'); - app.refreshProgress(attempted, completed, current, lessonID); + app.refreshProgress(attempted, completed, current, lessonID, version); myRoot.refresh = refresh; }; Index: lams_central/src/flash/main_monitoring.as =================================================================== diff -u -rf3611865773d7ad02e7060a9e6c698ce6683db56 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/main_monitoring.as (.../main_monitoring.as) (revision f3611865773d7ad02e7060a9e6c698ce6683db56) +++ lams_central/src/flash/main_monitoring.as (.../main_monitoring.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -19,6 +19,10 @@ _root.lessonLaunch = false; Debugger.log('lesson launch is set as:'+_root.lessonLaunch ,Debugger.CRITICAL,'mainin if condition','ROOT'); } +if (StringUtils.isEmpty(editOnFly)){ + _root.editOnFly = false; + Debugger.log('editOnFly is set as:'+_root.editOnFly ,Debugger.CRITICAL,'mainin if condition','ROOT'); +} if(StringUtils.isEmpty(mode)){ _root.mode = 1; Debugger.log('Mode is not defined, using defualt:'+_root.mode,Debugger.CRITICAL,'main','ROOT'); Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/Activity.as =================================================================== diff -u -r578abb755ea4e1e53118dd5ab766d24aeab740eb -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/Activity.as (.../Activity.as) (revision 578abb755ea4e1e53118dd5ab766d24aeab740eb) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/Activity.as (.../Activity.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -84,6 +84,7 @@ public static var PARALLEL_ACTIVITY_TYPE:Number = 6; 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; /******************************************************************/ /** @@ -156,7 +157,9 @@ private var _groupingSupportType:Number; //* + private var _readOnly:Boolean; + //Constructor /** @@ -179,6 +182,7 @@ _applyGrouping = false; _runOffline = false; _defineLater = false; + _readOnly = false; _createDateTime = new Date(); } @@ -212,11 +216,17 @@ return true }else if (_activityTypeID == PERMISSION_GATE_ACTIVITY_TYPE){ return true; + }else if (_activityTypeID == SYSTEM_GATE_ACTIVITY_TYPE){ + return true; }else{ return false; } } - + + public function isSystemGateActivity():Boolean{ + return _activityTypeID == SYSTEM_GATE_ACTIVITY_TYPE; + } + public function isGroupActivity():Boolean{ if (_activityTypeID == GROUPING_ACTIVITY_TYPE){ return true; @@ -303,6 +313,7 @@ _defineLater = dto.defineLater; _createDateTime = dto.createDateTime; _groupingSupportType = dto.groupingSupportType; + _readOnly = dto.readOnly; @@ -342,6 +353,7 @@ dto.defineLater = (_defineLater==null) ? false : _defineLater; if(_createDateTime){ dto.createDateTime = _createDateTime; } if(_groupingSupportType){ dto.groupingSupportType = _groupingSupportType; } + if(_readOnly){ dto.readOnly = _readOnly; } @@ -717,8 +729,29 @@ return _groupingSupportType; } + /** + * + * @usage + * @param newgroupingSupportType + * @return + */ + public function set readOnly (readOnly:Boolean):Void { + _readOnly = readOnly; + } + /** + * + * @usage + * @return + */ + public function get readOnly ():Boolean { + return _readOnly; + } + public function isReadOnly():Boolean { + return _readOnly; + } + Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/Application.as =================================================================== diff -u -r98c8d1d263ac824625f54193b5a923998e3ac5e4 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/Application.as (.../Application.as) (revision 98c8d1d263ac824625f54193b5a923998e3ac5e4) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/Application.as (.../Application.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -25,12 +25,14 @@ import org.lamsfoundation.lams.authoring.tk.* //Toolkit import org.lamsfoundation.lams.authoring.tb.* //Toolbar import org.lamsfoundation.lams.authoring.cv.* //Canvas +import org.lamsfoundation.lams.authoring.layout.* //Authoring Layout Managers import org.lamsfoundation.lams.common.ws.* //Workspace import org.lamsfoundation.lams.common.comms.* //communications import org.lamsfoundation.lams.common.util.* //Utils import org.lamsfoundation.lams.common.dict.* //Dictionary import org.lamsfoundation.lams.common.ui.* //User interface import org.lamsfoundation.lams.common.style.* //Themes/Styles +import org.lamsfoundation.lams.common.layout.* // Layouts import org.lamsfoundation.lams.common.* import mx.managers.* import mx.utils.* @@ -72,10 +74,10 @@ private static var DIALOGUE_DEPTH:Number = 20; //depth of the dialogue box private static var TOOLTIP_DEPTH:Number = 60; //depth of the tooltip private static var CURSOR_DEPTH:Number = 70; //depth of the cursors - private static var CCURSOR_DEPTH:Number = 201; - private static var MENU_DEPTH:Number = 25; //depth of the menu - private static var PI_DEPTH:Number = 35; //depth of the menu - private static var TOOLBAR_DEPTH:Number = 50; //depth of the menu + private static var CCURSOR_DEPTH:Number = 101; + public static var MENU_DEPTH:Number = 25; //depth of the menu + public static var PI_DEPTH:Number = 35; //depth of the menu + public static var TOOLBAR_DEPTH:Number = 50; //depth of the menu private static var UI_LOAD_CHECK_INTERVAL:Number = 50; private static var UI_LOAD_CHECK_TIMEOUT_COUNT:Number = 200; private static var DATA_LOAD_CHECK_INTERVAL:Number = 50; @@ -94,7 +96,7 @@ public static var CUT_TYPE:Number = 0; public static var COPY_TYPE:Number = 1; - private static var COMPONENT_NO = 9; + private static var COMMON_COMPONENT_NO = 4; private var _uiLoadCheckCount = 0; // instance counter for number of times we have checked to see if theme and dict are loaded private var _dataLoadCheckCount = 0; @@ -103,8 +105,9 @@ private var _toolbar:Toolbar; private var _toolkit:Toolkit; private var _canvas:Canvas; - private var _workspace:Workspace; - private var _PI:PropertyInspectorNew; + private var _PI:PropertyInspectorNew; + + private var _workspace:Workspace; private var _ccm:CustomContextMenu; private var _debugDialog:MovieClip; //Reference to the debug dialog @@ -127,16 +130,22 @@ private var _menuLoaded:Boolean; private var _showCMItem:Boolean; private var _piLoaded:Boolean; + //clipboard private var _clipboardData:Object; private var _clipboardPasteCount:Number; // set up Key Listener //private var keyListener:Object; + // operation modes + private var _isEditMode:Boolean; + private var _root_layout:String; + private var _layout:LFLayout; + //Application instance is stored as a static in the application class private static var _instance:Application = null; - + /** * Application - Constructor */ @@ -145,11 +154,13 @@ _toolkitLoaded = false; _canvasLoaded = false; _menuLoaded = false; - _toolbarLoaded = false; + _toolbarLoaded = false; _piLoaded = false; _module = Application.MODULE; _PI = new PropertyInspectorNew(); _ccm = CustomContextMenu.getInstance(); + _root_layout = (_root.layout != undefined || _root.layout != null) ? _root.layout : null; + //Mouse.addListener(someListener); } @@ -167,10 +178,18 @@ * Main entry point to the application */ public function main(container_mc:MovieClip){ - _container_mc = container_mc; + + if(_root_layout == ApplicationParent.EDIT_MODE) + _isEditMode = true; + else + _isEditMode = false; + + + _container_mc = container_mc; _UILoaded = false; - loader.start(COMPONENT_NO); + var layout_component_no = (_isEditMode) ? EditOnFlyLayoutManager.COMPONENT_NO : DefaultLayoutManager.COMPONENT_NO; + loader.start(COMMON_COMPONENT_NO + layout_component_no); _customCursor_mc = _container_mc.createEmptyMovieClip('_customCursor_mc', CCURSOR_DEPTH); @@ -266,7 +285,7 @@ } else { _uiLoadCheckCount++; //If all events dispatched clear interval and call start() - if(_dictionaryEventDispatched && _themeEventDispatched){ + if(_UILoaded && _dictionaryEventDispatched && _themeEventDispatched){ //Debugger.log('Clearing Interval and calling start :',Debugger.CRITICAL,'checkUILoaded','Application'); clearInterval(_UILoadCheckIntervalID); start(); @@ -315,7 +334,7 @@ * @param UIElementID:String - Identifier for the Element that was loaded */ public function UIElementLoaded(evt:Object) { - //Debugger.log('UIElementLoaded: ' + evt.target.className,Debugger.GEN,'UIElementLoaded','Application'); + Debugger.log('UIElementLoaded: ' + evt.target.className,Debugger.GEN,'UIElementLoaded','Application'); if(evt.type=='load'){ //Which item has loaded switch (evt.target.className) { @@ -337,13 +356,15 @@ default: } + _layout.manager.addLayoutItem(evt.target.className, evt.target); + loader.complete(); - - //If all of them are loaded set UILoad accordingly - if(_toolkitLoaded && _canvasLoaded && _menuLoaded && _toolbarLoaded){ - _UILoaded=true; - } - + + if(_layout.manager.completedLayout) { + _UILoaded = true; + } else { + _UILoaded = false; + } } } @@ -355,44 +376,31 @@ //Make the base context menu hide built in items so we don't have zoom in etc _ccm.showCustomCM(_ccm.loadMenu("application", "authoring")) - //Create the application root + //Create the application root _appRoot_mc = _container_mc.createEmptyMovieClip('appRoot_mc',APP_ROOT_DEPTH); - //Create screen elements + + //Create screen elements _dialogueContainer_mc = _container_mc.createEmptyMovieClip('_dialogueContainer_mc',DIALOGUE_DEPTH); _cursorContainer_mc = _container_mc.createEmptyMovieClip('_cursorContainer_mc',CURSOR_DEPTH); - _toolbarContainer_mc = _container_mc.createEmptyMovieClip('_toolbarContainer_mc',TOOLBAR_DEPTH); + _toolbarContainer_mc = _container_mc.createEmptyMovieClip('_toolbarContainer_mc',TOOLBAR_DEPTH); _pi_mc = _container_mc.createEmptyMovieClip('_pi_mc',PI_DEPTH); + // Tooltip _tooltipContainer_mc = _container_mc.createEmptyMovieClip('_tooltipContainer_mc',TOOLTIP_DEPTH); - - //MENU - _menu_mc = _container_mc.attachMovie('LFMenuBar','_menu_mc',MENU_DEPTH, {_x:0,_y:0}); - _menu_mc.addEventListener('load',Proxy.create(this,UIElementLoaded)); - - - var depth:Number = _appRoot_mc.getNextHighestDepth(); - //TOOLBAR - _toolbar = new Toolbar(_toolbarContainer_mc,_toolbarContainer_mc.getNextHighestDepth(),TOOLBAR_X,TOOLBAR_Y); - _toolbar.addEventListener('load',Proxy.create(this,UIElementLoaded)); - - //CANVAS - _canvas = new Canvas(_appRoot_mc,depth++,CANVAS_X,CANVAS_Y,CANVAS_W,495); - _canvas.addEventListener('load',Proxy.create(this,UIElementLoaded)); - - //WORKSPACE + // Workspace _workspace = new Workspace(); - //_workspace.addEventListener('load',Proxy.create(this,UIElementLoaded)); - //TOOLKIT - _toolkit = new Toolkit(_appRoot_mc,depth++,TOOLKIT_X,TOOLKIT_Y); - _toolkit.addEventListener('load',Proxy.create(this,UIElementLoaded)); + setupLayout(); - _pi_mc = _pi_mc.attachMovie('PropertyInspectorNew','_pi_mc',PI_DEPTH, {_x:PI_X,_y:PI_Y, _canvasModel:_canvas.model, _canvasController:_canvas.view.getController()}); - _pi_mc.addEventListener('load',Proxy.create(this,UIElementLoaded)); - setTabIndex(); } + + private function setupLayout():Void { + var manager = (_isEditMode) ? ILayoutManager(new EditOnFlyLayoutManager('editonfly')) : ILayoutManager(new DefaultLayoutManager('default')); + _layout = new LFLayout(this, manager); + _layout.init(); + } private function setTabIndex(selectedTab:String){ @@ -424,6 +432,14 @@ LFMenuBar.getInstance().enableRecover(true); } + if(_isEditMode) { + Debugger.log("Authoring started in Edit-On-The-Fly Mode", Debugger.CRITICAL, "start", "Application"); + var ldID = Number(_root.learningDesignID); + canvas.openDesignForEditOnFly(ldID); + } else { + Debugger.log("Authoring started in Author Mode", Debugger.CRITICAL, "start", "Application"); + } + } /** @@ -437,65 +453,23 @@ * Receives events from the Stage resizing */ public function onResize(){ - //Debugger.log('onResize',Debugger.GEN,'main','org.lamsfoundation.lams.Application'); - + //Get the stage width and height and call onResize for stage based objects var w:Number = Stage.width; var h:Number = Stage.height; var someListener:Object = new Object(); - trace("onResize called") + someListener.onMouseUp = function () { - //Menu - only need to worry about width - _menu_mc.setSize(w,_menu_mc._height); + _layout.manager.resize(w, h); - //Canvas - _canvas.setSize(w-_toolkit.width,h-(CANVAS_Y+_canvas.model.getPIHeight())); - _toolkit.setSize(_toolkit.width,h-TOOLKIT_Y); - - //Toolbar - _toolbar.setSize(w, TOOLBAR_HEIGHT); - - //Property Inspector - _pi_mc.setSize(w-_toolkit.width,_pi_mc._height) - _pi_mc._y = h - _canvas.model.getPIHeight(); - _pi_mc.showExpand(false); - - //var pi = _canvas.getPropertyInspector(); - //pi._y = h;//- pi._height; - //pi._y = h - 210; - } - //Mouse.addListener(someListener); - - - //Menu - only need to worry about width - _menu_mc.setSize(w,_menu_mc._height); - - //Canvas - _toolkit.setSize(_toolkit.width,h-TOOLKIT_Y); - _canvas.setSize(w-_toolkit.width,h-(CANVAS_Y+_canvas.model.getPIHeight())); - //Toolbar - _toolbar.setSize(w, TOOLBAR_HEIGHT); - //Property Inspector - _pi_mc.setSize(w-_toolkit.width,_pi_mc._height) - _pi_mc._y = h - _canvas.model.getPIHeight(); - var piHeight:Number = _canvas.model.getPIHeight(); - _pi_mc.showExpand(false) - if (piHeight != _pi_mc.piFullHeight()){ - _pi_mc.showExpand(true); - } + _layout.manager.resize(w, h); - //var pi = _canvas.getPropertyInspector(); - //pi._y = h;//- pi._height; - //pi._y = h - 210; - - - } /** @@ -685,20 +659,66 @@ public function getToolbar():Toolbar{ return _toolbar; } + + public function set toolbar(a:Toolbar) { + _toolbar = a; + } + + public function get toolbar():Toolbar { + return _toolbar; + } + + public function set toolkit(a:Toolkit) { + _toolkit = a; + } + + public function get toolkit():Toolkit { + return _toolkit; + } + + public function set menubar(a:MovieClip) { + _menu_mc = a; + } + + public function get menubar():MovieClip { + return _menu_mc; + } + + public function set pi(a:MovieClip) { + _pi_mc = a; + } + + public function get pi():MovieClip { + return _pi_mc; + } /** * returns the the canvas instance */ public function getCanvas():Canvas{ return _canvas; } + + public function set canvas(a:Canvas) { + _canvas = a; + } + + public function get canvas():Canvas { + return _canvas; + } + public function get controlKeyPressed():String{ return _controlKeyPressed; } public function set controlKeyPressed(key:String){ _controlKeyPressed = key; } + + public function set root_layout(a:String){ + _root_layout = a; + } + /** * returns the the workspace instance */ @@ -763,6 +783,19 @@ } } + /** + * Returns true if in Edit Mode (for Edit-On-The-Fly) otherwise false + * + */ + static function get isEditMode():Boolean { + //Return root if valid otherwise raise a big system error as app. will not work without it + if(_instance._isEditMode != undefined) { + return _instance._isEditMode; + } else { + + } + } + /** * Returns the Application root, use as _root would be used * @@ -781,4 +814,37 @@ } } + /** + * Returns the Application root, use as _root would be used + * + * @usage Import authoring package and then use as root e.g. + * + * import org.lamsfoundation.lams.authoring; + * Application.root.attachMovie('myLinkageId','myInstanceName',depth); + */ + static function get containermc():MovieClip { + //Return root if valid otherwise raise a big system error as app. will not work without it + if(_instance._container_mc != undefined) { + return _instance._container_mc; + } else { + + } + } + + /** + * Returns the Application root, use as _root would be used + * + * @usage Import authoring package and then use as root e.g. + * + * import org.lamsfoundation.lams.authoring; + * Application.root.attachMovie('myLinkageId','myInstanceName',depth); + */ + static function get toolbarContainer():MovieClip { + //Return root if valid otherwise raise a big system error as app. will not work without it + if(_instance._toolbarContainer_mc != undefined) { + return _instance._toolbarContainer_mc; + } else { + + } + } } \ No newline at end of file Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as =================================================================== diff -u -rd9f9e33ff90f8ff1a0077688ad3ee5dbc233c209 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as (.../DesignDataModel.as) (revision d9f9e33ff90f8ff1a0077688ad3ee5dbc233c209) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as (.../DesignDataModel.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -61,12 +61,16 @@ private var _description:String; private var _helpText:String; private var _version:String; + private var _designVersion:Number; private var _userID:Number; + private var _editOverrideUserID:Number; + private var _editOverrideUserFullName:String; private var _duration:Number; private var _readOnly:Boolean; + private var _editOverrideLock:Boolean private var _autoSaved:Boolean private var _saveMode:Number; - private var _validDesign:Boolean; + private var _validDesign:Boolean; private var _modified:Boolean; private var _maxID:Number; private var _firstActivityID:Number; @@ -104,6 +108,7 @@ _copyTypeID = COPY_TYPE_ID_AUTHORING; _version = null; _readOnly = false; + _editOverrideLock = false; _validDesign = false; _autoSaved = false; @@ -288,11 +293,15 @@ _description = design.description; _helpText = design.helpText; _version = design.version; + _designVersion = design.designVersion; _userID = design.userID; + _editOverrideUserID = design.editOverrideUserID; + _editOverrideUserFullName = design.editOverrideUserFullName; _workspaceFolderID = design.workspaceFolderID; _createDateTime = design.createDateTime; _readOnly = design.readOnly; + _editOverrideLock = design.editOverrideLock; _validDesign = design.validDesign; _maxID = design.maxID; @@ -315,24 +324,35 @@ Debugger.log('Adding activity dto.activityTypeID:'+dto.activityTypeID,Debugger.GEN,'setDesign','DesignDataModel'); //if(dto.objectType = "ToolActivity"){ - if(dto.activityTypeID == Activity.TOOL_ACTIVITY_TYPE || dto.activityTypeID == Activity.SYNCH_GATE_ACTIVITY_TYPE || dto.activityTypeID == Activity.SCHEDULE_GATE_ACTIVITY_TYPE || dto.activityTypeID == Activity.PERMISSION_GATE_ACTIVITY_TYPE){ - trace("this activity is gateActivity with UIID: "+dto.activityUIID) + if(dto.activityTypeID == Activity.TOOL_ACTIVITY_TYPE){ + var newToolActivity:ToolActivity = new ToolActivity(dto.activityUIID); newToolActivity.populateFromDTO(dto); _activities.put(newToolActivity.activityUIID,newToolActivity); + + } else if(dto.activityTypeID == Activity.SYNCH_GATE_ACTIVITY_TYPE || + dto.activityTypeID == Activity.SCHEDULE_GATE_ACTIVITY_TYPE || + dto.activityTypeID == Activity.PERMISSION_GATE_ACTIVITY_TYPE || + dto.activityTypeID == Activity.SYSTEM_GATE_ACTIVITY_TYPE ) { + + var newGateActivity:GateActivity = new GateActivity(dto.activityUIID); + newGateActivity.populateFromDTO(dto); + _activities.put(newGateActivity.activityUIID,newGateActivity); - //}else if(dto.objectType == "ComplexActivity"){ - }else if(dto.activityTypeID == Activity.OPTIONAL_ACTIVITY_TYPE || dto.activityTypeID == Activity.PARALLEL_ACTIVITY_TYPE){ + } else if(dto.activityTypeID == Activity.OPTIONAL_ACTIVITY_TYPE || dto.activityTypeID == Activity.PARALLEL_ACTIVITY_TYPE){ + //TODO: Test this! var cAct:ComplexActivity= new ComplexActivity(dto.activityUIID); cAct.populateFromDTO(dto); _activities.put(cAct.activityUIID,cAct); - }else if(dto.activityTypeID == Activity.GROUPING_ACTIVITY_TYPE){ + } else if(dto.activityTypeID == Activity.GROUPING_ACTIVITY_TYPE){ + //TODO: Test this code when we are able to save and then open a design with grouping var newGroupActiviy:GroupingActivity = new GroupingActivity(dto.activityUIID); newGroupActiviy.populateFromDTO(dto); _activities.put(newGroupActiviy.activityUIID,newGroupActiviy); + } } @@ -361,11 +381,6 @@ } - - - - - return success; } @@ -381,13 +396,12 @@ private function prepareDesignForSaving():Void{ //set create date time to now - _createDateTime = new Date(); + _createDateTime = (_editOverrideLock) ? _createDateTime : new Date(); + _lastModifiedDateTime = (_editOverrideLock) ? new Date() : _lastModifiedDateTime; if(_learningDesignID == null){ _learningDesignID = Config.NUMERIC_NULL_VALUE; } - - } private function prepareDesignForAutoSaving():Void{ @@ -444,7 +458,7 @@ return data; } - + /** * Returns a data object to send in a WDDX packet to the initialise a Lesson for a Preview Session * DDM exists in @@ -469,7 +483,7 @@ return data; } - + /** * Get details of currently saved design for use in workspace * @@ -530,24 +544,32 @@ */ //if the value is null, it is not included in the DTO - if(_copyTypeID == COPY_TYPE_ID_RUN){ + if(_copyTypeID == COPY_TYPE_ID_RUN && !_editOverrideLock){ design.copyTypeID = COPY_TYPE_ID_AUTHORING; }else if(_copyTypeID){ design.copyTypeID = _copyTypeID; } + if(_learningDesignID){ design.learningDesignID = _learningDesignID; } if(_title){ design.title = _title; } if(_description){ design.description = _description; } if(_helpText){ design.helpText = _helpText; } if(_version){ design.version = _version; } + if(_designVersion){ design.designVersion = _designVersion; } if(_userID){ design.userID = _userID; } + if(_editOverrideUserID){ design.editOverrideUserID = _editOverrideUserID; } if(_duration){ design.duration = _duration; } //readOnly must be in the DTO, so if its null, then give a false - if(_copyTypeID == COPY_TYPE_ID_RUN){ + if(_copyTypeID == COPY_TYPE_ID_RUN && !_editOverrideLock){ design.readOnly = false; } else { design.readOnly = (_readOnly==null) ? false : _readOnly; } + if(_editOverrideLock){ design.editOverrideLock = _editOverrideLock; } + else { + _editOverrideLock = false; + } + //valid design must be in the DTO, so if its null, then give a false design.validDesign = (_validDesign==null) ? false : _validDesign; @@ -813,6 +835,14 @@ _version = a; } + public function get designVersion():Number{ + return _designVersion; + } + + public function set designVersion(a:Number):Void{ + _designVersion = a; + } + public function get userID():Number{ return _userID; } @@ -821,6 +851,24 @@ _userID = a; } + public function get editOverrideUserID():Number{ + return _editOverrideUserID; + } + + public function set editOverrideUserID(a:Number):Void{ + _editOverrideUserID = a; + } + + + public function get editOverrideUserFullName():String{ + return _editOverrideUserFullName; + } + + public function set editOverrideUserFullName(a:String):Void{ + _editOverrideUserFullName = a; + } + + public function get workspaceFolderID():Number{ return _workspaceFolderID; } @@ -845,6 +893,14 @@ _readOnly = a; } + public function get editOverrideLock():Boolean{ + return _editOverrideLock; + } + + public function set editOverrideLock(a:Boolean):Void{ + _editOverrideLock = a; + } + public function get validDesign():Boolean{ return _validDesign; } @@ -1056,7 +1112,7 @@ return _contentFolderID; } - /** + /** * * @usage * @param Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/GateActivity.as =================================================================== diff -u -r735adeb5d2ea7849b86d4991480630c4613fadec -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/GateActivity.as (.../GateActivity.as) (revision 735adeb5d2ea7849b86d4991480630c4613fadec) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/GateActivity.as (.../GateActivity.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -66,6 +66,8 @@ public function populateFromDTO(dto:Object){ super.populateFromDTO(dto); _gateActivityLevelID = dto.gateActivityLevelID; + _gateOpen = dto.gateOpen; + if(_activityTypeID == Activity.SCHEDULE_GATE_ACTIVITY_TYPE){ _gateStartTimeOffset = dto.gateStartTimeOffset; _gateEndTimeOffset = dto.gateEndTimeOffset; @@ -84,6 +86,7 @@ if(_gateActivityLevelID){ dto.gateActivityLevelID = _gateActivityLevelID; } if(_gateStartTimeOffset){ dto.gateStartTimeOffset = _gateStartTimeOffset; } if(_gateEndTimeOffset) { dto.gateEndTimeOffset= _gateEndTimeOffset; } + if(_gateOpen) { dto.gateOpen = _gateOpen; } return dto; } Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/Transition.as =================================================================== diff -u -r735adeb5d2ea7849b86d4991480630c4613fadec -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/Transition.as (.../Transition.as) (revision 735adeb5d2ea7849b86d4991480630c4613fadec) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/Transition.as (.../Transition.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -39,9 +39,13 @@ private var _transitionID:Number; private var _transitionUIID:Number; private var _fromActivityID:Number; - private var _fromUIID:Number; + private var _fromUIID:Number; + private var _mod_fromActivityID:Number; + private var _mod_fromUIID:Number; private var _toActivityID:Number; - private var _toUIID:Number; + private var _toUIID:Number; + private var _mod_toActivityID:Number; + private var _mod_toUIID:Number; private var _title:String; private var _description:String; @@ -60,6 +64,11 @@ _toUIID = toUIID; _learningDesignID = learningDesignID; + _mod_fromActivityID = null + _mod_fromUIID = null; + _mod_toActivityID = null; + _mod_toUIID = null; + Debugger.log('Created a new transition, transitionUIID:'+transitionUIID,Debugger.GEN,'Constructor','Transition'); } @@ -108,26 +117,54 @@ public function get fromActivityID():Number{ return _fromActivityID; } + + public function set mod_fromActivityID(a:Number):Void{ + _mod_fromActivityID = a; + } + public function get mod_fromActivityID():Number{ + return _mod_fromActivityID; + } public function set fromUIID(a:Number):Void{ _fromUIID = a; } public function get fromUIID():Number{ return _fromUIID; } + + public function set mod_fromUIID(a:Number):Void{ + _mod_fromUIID = a; + } + public function get mod_fromUIID():Number{ + return _mod_fromUIID; + } public function set toActivityID(a:Number):Void{ _toActivityID = a; } public function get toActivityID():Number{ return _toActivityID; + } + + public function set mod_toActivityID(a:Number):Void{ + _mod_toActivityID = a; + } + public function get mod_toActivityID():Number{ + return _mod_toActivityID; } public function set toUIID(a:Number):Void{ _toUIID = a; } public function get toUIID():Number{ return _toUIID; + } + + public function set mod_toUIID(a:Number):Void{ + _mod_toUIID = a; + } + public function get mod_toUIID():Number{ + return _mod_toUIID; } public function set title(a:String):Void{ Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as =================================================================== diff -u -rd9f9e33ff90f8ff1a0077688ad3ee5dbc233c209 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as (.../Canvas.as) (revision d9f9e33ff90f8ff1a0077688ad3ee5dbc233c209) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as (.../Canvas.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -170,6 +170,7 @@ } setInterval(Proxy.create(this,autoSave), autosave_config_interval); } + clearCanvas(true); dispatchEvent({type:'load',target:this}); @@ -247,7 +248,24 @@ Application.getInstance().getComms().getRequest('authoring/author.do?method=getLearningDesignDetails&learningDesignID='+learningDesignID,callback, false); } + /** + * Request runtime-sequence design from server to be editted. + * + * @usage + * @param learningDesignID + * @return + */ + + public function openDesignForEditOnFly(learningDesignID:Number){ + var callback:Function = Proxy.create(this,setDesign, true); + canvasModel.editing = true; + + Application.getInstance().getComms().getRequest('authoring/author.do?method=getLearningDesignDetails&learningDesignID='+learningDesignID,callback, false); + + } + + /** * Auto-saves current DDM (Learning Design on Canvas) to SharedObject * * @usage @@ -320,6 +338,7 @@ public function saveDesign(){ if((_ddm.learningDesignID == undefined || _ddm.learningDesignID == "" || _ddm.learningDesignID == null || _ddm.learningDesignID =="undefined") || _ddm.learningDesignID == Config.NUMERIC_NULL_VALUE && (_ddm.title == "" || _ddm.title == undefined || _ddm.title == null)){ + // raise alert if design is empty if (canvasModel.activitiesDisplayed.size() < 1){ Cursor.showCursor(Application.C_DEFAULT); @@ -328,14 +347,30 @@ }else { saveDesignToServerAs(Workspace.MODE_SAVE); } - }else if(_ddm.readOnly){ + + }else if(_ddm.readOnly && !_ddm.editOverrideLock){ saveDesignToServerAs(Workspace.MODE_SAVEAS); - }else{ + }else if(_ddm.editOverrideLock){ + var errors:Array = canvasModel.validateDesign(); + if(errors.length > 0) { + var errorPacket = new Object(); + 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); + } else { + saveDesignToServer(); // design is valid, save normal + } + + }else{ saveDesignToServer(); } } - + /** * Launch workspace browser dialog and set the design metat data for saving * E.g. Title, Desc, Folder etc... also license if required? @@ -441,15 +476,15 @@ Debugger.log('updating activities.... ',Debugger.GEN,'onStoreDesignResponse','Canvas'); updateToolActivities(r); + + _ddm.readOnly = false; + _ddm.copyTypeID = DesignDataModel.COPY_TYPE_ID_AUTHORING; + } else { Debugger.log('save mode: ' +_ddm.saveMode,Debugger.GEN,'onStoreDesignResponse','Canvas'); } - // ?? - _ddm.readOnly = r.readOnly; - _ddm.copyTypeID = r.copyTypeID; - _ddm.modified = false; ApplicationParent.extCall("setSaved", "true"); @@ -470,6 +505,10 @@ //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'); + LFMessage.showMessageAlert(msg, finishEditHandler); } else { LFMessage.showMessageAlert(msg); } @@ -501,14 +540,68 @@ var validationIssuesDialog = PopUpManager.createPopUp(Application.root, LFWindow, false,{title:Dictionary.getValue('ld_val_title'),closeButton:true,scrollContentPath:"ValidationIssuesDialog",validationIssues:dp, canvasModel:canvasModel,canvasController:cc}); } + /** + * Close Window + * + * @usage + * @return + */ + public function closeReturnExt() { ApplicationParent.extCall("closeWindow", null); } /** + * Reopen Monitor client * + * @usage + * @param lessonID Lesson to load in Monitor + * @return + */ + + public function reopenMonitor(lessonID) { + Debugger.log('finishing and closing Edit On The Fly',Debugger.CRITICAL,'finishEditOnFly','Canvas'); + + ApplicationParent.extCall("openMonitorLesson", lessonID); + } + + /** + * Finish Edit-On-The-Fly * * @usage + * @param forced + * @return + */ + + public function finishEditOnFly(forced:Boolean) { + Debugger.log('finishing and closing Edit On The Fly',Debugger.CRITICAL,'finishEditOnFly','Canvas'); + + Debugger.log('valid design: ' + _ddm.validDesign,Debugger.CRITICAL,'finishEditOnFly','Canvas'); + Debugger.log('modified: ' + _ddm.modified,Debugger.CRITICAL,'finishEditOnFly','Canvas'); + + var callback:Function = Proxy.create(this,reopenMonitor); + canvasModel.editing = false; + + if(forced) { + ApplicationParent.extCall("setSaved", "true"); + finishLearningDesignCall(callback); + return; + } + + if(!_ddm.modified) { + if(_ddm.validDesign) finishLearningDesignCall(callback); + else LFMessage.showMessageAlert(Dictionary.getValue("cv_eof_finish_invalid_msg")); + } else LFMessage.showMessageConfirm(Dictionary.getValue("cv_eof_finish_modified_msg"), Proxy.create(this,finishEditOnFly, true), null); + } + + private function finishLearningDesignCall(callback:Function) { + Application.getInstance().getComms().getRequest('authoring/author.do?method=finishLearningDesignEdit&learningDesignID='+_ddm.learningDesignID,callback, false); + } + + /** + * + * + * @usage * @param acts * @return */ @@ -518,6 +611,7 @@ for(var i=0; i 0) { + if (noInputTransition.length == 0) { + errorMap.push(new ValidationIssue(ValidationIssue.INPUT_TRANSITION_ERROR_CODE, Dictionary.getValue(ValidationIssue.INPUT_TRANSITION_ERROR_TYPE2_KEY))); + } else if (noInputTransition.length > 1) { + //there is more than one activity with no input transitions + for(var i=0; i 1) { + //there is more than one activity with no output transitions + for(var i=0; i 1) { + if(actTransitions.into == null && actTransitions.out == null) + errorMap.push(new ValidationIssue(ValidationIssue.ACTIVITY_TRANSITION_ERROR_CODE, Dictionary.getValue(ValidationIssue.ACTIVITY_TRANSITION_ERROR_KEY), activity.activityUIID)); + + } else if(noOfActivities == 1) { + if(actTransitions.into != null || actTransitions.out != null) + errorMap.push(new ValidationIssue(ValidationIssue.ACTIVITY_TRANSITION_ERROR_CODE, Dictionary.getValue(ValidationIssue.ACTIVITY_TRANSITION_ERROR_KEY), activity.activityUIID)); + } + + + } + + //////////////////////////////////////////////////////////////////////////////////////////// /////////////////////// EDITING ACTIVITIES ///////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// @@ -1064,6 +1199,14 @@ _importing = importing; } + public function get editing():Boolean { + return _editing; + } + + public function set editing(editing:Boolean):Void { + _editing = editing; + } + public function get autoSaveWait():Boolean { return _autoSaveWait; } Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasOptionalActivity.as =================================================================== diff -u -r01423970e82bd6e32252bed8eac5a7b3fbbc73fc -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasOptionalActivity.as (.../CanvasOptionalActivity.as) (revision 01423970e82bd6e32252bed8eac5a7b3fbbc73fc) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasOptionalActivity.as (.../CanvasOptionalActivity.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -81,7 +81,7 @@ private var todo_mc:MovieClip; //---------------------------// private var child_mc : MovieClip; - private var _locked : Boolean; + private var _locked : Boolean = false; private var _visibleHeight : Number; private var _visibleWidth : Number; private var _tm : ThemeManager; @@ -116,7 +116,6 @@ trace("MinOptions :"+actMinOptions) trace("MaxOptions :"+actMaxOptions) _ddm.getComplexActivityChildren(_activity.activityUIID); - _locked = false; showStatus(false); CHILD_OFFSET_X = 8; @@ -265,9 +264,10 @@ Debugger.log ('DoubleClicking:' + this, Debugger.GEN, 'localOnPress', 'CanvasOptionalActivity'); _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) { + 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(); Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasParallelActivity.as =================================================================== diff -u -r01423970e82bd6e32252bed8eac5a7b3fbbc73fc -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasParallelActivity.as (.../CanvasParallelActivity.as) (revision 01423970e82bd6e32252bed8eac5a7b3fbbc73fc) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasParallelActivity.as (.../CanvasParallelActivity.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -73,7 +73,7 @@ private var _doubleClicking:Boolean; private var child1_mc:MovieClip; private var child2_mc:MovieClip; - private var _locked:Boolean; + private var _locked:Boolean = false; private var _visibleHeight:Number; private var _visibleWidth:Number; @@ -107,7 +107,6 @@ clickTarget_mc.onReleaseOutside = Proxy.create(this,localOnReleaseOutside); _ddm.getComplexActivityChildren(_activity.activityUIID); - _locked = false; showStatus(false); @@ -297,9 +296,10 @@ _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){ + 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(); Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasTransition.as =================================================================== diff -u -re4bdbc9dbf2cedbb2e9936c6b9a8565a280fea40 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasTransition.as (.../CanvasTransition.as) (revision e4bdbc9dbf2cedbb2e9936c6b9a8565a280fea40) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasTransition.as (.../CanvasTransition.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -112,9 +112,12 @@ var fromAct_mc; var toAct_mc; - fromAct_mc = cv.model.getActivityMCByUIID(_transition.fromUIID); - toAct_mc = cv.model.getActivityMCByUIID(_transition.toUIID); + if(_transition.mod_fromUIID != null) fromAct_mc = cv.model.getActivityMCByUIID(_transition.mod_fromUIID); + else fromAct_mc = cv.model.getActivityMCByUIID(_transition.fromUIID); + if(_transition.mod_toUIID != null) toAct_mc = cv.model.getActivityMCByUIID(_transition.mod_toUIID); + else toAct_mc = cv.model.getActivityMCByUIID(_transition.toUIID); + //var startPoint:Point = MovieClipUtils.getCenterOfMC(fromAct_mc); //var endPoint:Point = MovieClipUtils.getCenterOfMC(toAct_mc); Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasView.as =================================================================== diff -u -r99d83b79ade77d5fccbefe7ae488796cfa03e46b -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasView.as (.../CanvasView.as) (revision 99d83b79ade77d5fccbefe7ae488796cfa03e46b) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/CanvasView.as (.../CanvasView.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -56,6 +56,7 @@ private var canvas_scp:ScrollPane; private var bkg_pnl:Panel; private var isRread_only:Boolean = false; + private var isRedit_on_fly:Boolean = false; private var read_only:MovieClip; private var titleBar:MovieClip; private var leftCurve:MovieClip; @@ -135,12 +136,18 @@ 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; @@ -197,7 +204,6 @@ Application.getInstance().getCanvas().getCanvasView().getController().canvasRelease(this); } bkg_pnl.useHandCursor = false; - setDesignTitle(); styleTitleBar(); @@ -215,6 +221,9 @@ if (isRread_only){ dTitle = cm.getCanvas().ddm.title + " ("+Dictionary.getValue('cv_readonly_lbl')+")" titleToCheck = cm.getCanvas().ddm.title + Dictionary.getValue('cv_readonly_lbl') + } else if(isRedit_on_fly) { + dTitle = cm.getCanvas().ddm.title + " ("+Dictionary.getValue('cv_edit_on_fly_lbl')+")" + titleToCheck = cm.getCanvas().ddm.title + Dictionary.getValue('cv_edit_on_fly_lbl') }else { dTitle = cm.getCanvas().ddm.title titleToCheck = dTitle @@ -258,8 +267,8 @@ read_only._x = titleBar._x + 5; } - - private function styleTitleBar():Void { + + private function styleTitleBar():Void { var titleBarBg:mx.styles.CSSStyleDeclaration = _tm.getStyleObject("BGPanel"); var titleBarBgShadow:mx.styles.CSSStyleDeclaration = _tm.getStyleObject("BGPanelShadow"); @@ -356,14 +365,14 @@ //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}); + 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){ 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}); + 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'); @@ -387,6 +396,31 @@ } /** + * 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 cvv = CanvasView(this); + var cvc = 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 @@ -422,6 +456,27 @@ } /** + * 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 cvv = CanvasView(this); + var cvc = getController(); + var newTransition_mc:MovieClip = _transitionLayer_mc.createChildAtDepth("CanvasTransition",DepthManager.kTop,{_transition:t,_canvasController:cvc,_canvasView:cvv, _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 @@ -558,6 +613,10 @@ isRread_only = b; } + public function showEditOnFly(b:Boolean){ + isRedit_on_fly = b; + } + /** * Overrides method in abstract view to ensure cortect type of controller is returned * @usage Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspectorNew.as =================================================================== diff -u -rb92c9032ebbd455eb0d4601d29ae2f8f6e8468e2 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspectorNew.as (.../PropertyInspectorNew.as) (revision b92c9032ebbd455eb0d4601d29ae2f8f6e8468e2) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspectorNew.as (.../PropertyInspectorNew.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -386,7 +386,7 @@ showToolActivityControls(false); showGeneralInfo(false); showOptionalControls(false); - showGateControls(true); + showGateControls(true, !a.readOnly); showAppliedGroupingControls(false); //showGeneralProperties(a) checkEnableGateControls(); @@ -396,13 +396,14 @@ //show the title title_txt.text = StringUtils.cleanNull(a.title); desc_txt.text = StringUtils.cleanNull(a.description); - showGeneralControls(true); + showGeneralControls(true, !a.readOnly); + //PI_sp.refreshPane(); }else if(a.isGroupActivity()){ //its a grouping activity delimitLine._visible = true; - showGroupingControls(true); - showGeneralControls(true); + showGroupingControls(true, !a.readOnly); + showGeneralControls(true, !a.readOnly); showOptionalControls(false); showGeneralInfo(false); showRelevantGroupOptions(); @@ -421,14 +422,14 @@ //its a grouping activity delimitLine._visible = true; - showGeneralControls(true); + showGeneralControls(true, !a.readOnly); showGroupingControls(false); //showRelevantGroupOptions(); showToolActivityControls(false); showGateControls(false); showGeneralInfo(false); showAppliedGroupingControls(false); - showOptionalControls(true); + showOptionalControls(true, !a.readOnly); //showGeneralProperties(cca) populateGroupingProperties(GroupingActivity(caco)); showAppliedGroupingProperties(caco); @@ -442,13 +443,13 @@ delimitLine._visible = true; //its an parallel activity showOptionalControls(false); - showGeneralControls(true); + showGeneralControls(true, !a.readOnly); showGeneralInfo(false); showGroupingControls(false); //showRelevantGroupOptions(); showToolActivityControls(false); showGateControls(false); - showAppliedGroupingControls(true); + showAppliedGroupingControls(true, !a.readOnly); //showGeneralProperties(cca) populateGroupingProperties(GroupingActivity(cacp)); showAppliedGroupingProperties(cacp); @@ -460,11 +461,11 @@ //its a tool activity delimitLine._visible = true; showOptionalControls(false); - showGeneralControls(true); + showGeneralControls(true, !a.readOnly); showGroupingControls(false); showGeneralInfo(false); - showAppliedGroupingControls(true); - showToolActivityControls(true); + showAppliedGroupingControls(true, !a.readOnly); + showToolActivityControls(true, !a.readOnly); showGateControls(false); //showAppliedGroupingControls(true); showToolActivityProperties(ToolActivity(a)); @@ -484,14 +485,14 @@ //its an optional activity delimitLine._visible = true; - showGeneralControls(true); + showGeneralControls(true, !co.activity.readOnly); showGroupingControls(false); //showRelevantGroupOptions(); showToolActivityControls(false); showGateControls(false); showGeneralInfo(false); showAppliedGroupingControls(false); - showOptionalControls(true); + showOptionalControls(true, !co.activity.readOnly); //showGeneralProperties(cca) populateGroupingProperties(GroupingActivity(cca)); showAppliedGroupingProperties(cca); @@ -507,13 +508,13 @@ delimitLine._visible = true; //its an parallel activity showOptionalControls(false); - showGeneralControls(true); + showGeneralControls(true, !co.activity.readOnly); showGeneralInfo(false); showGroupingControls(false); //showRelevantGroupOptions(); showToolActivityControls(false); showGateControls(false); - showAppliedGroupingControls(true); + showAppliedGroupingControls(true, !co.activity.readOnly); //showGeneralProperties(cca) populateGroupingProperties(GroupingActivity(cca)); showAppliedGroupingProperties(cca); @@ -556,7 +557,7 @@ } } - private function showToolActivityControls(v:Boolean){ + private function showToolActivityControls(v:Boolean, e:Boolean){ //desc_lbl.visible = v; @@ -567,9 +568,14 @@ applied_grouping_lbl.visible = v appliedGroupingActivity_cmb.visible = false; + applied_grouping_lbl.enabled = e; + }else { applied_grouping_lbl.visible = false appliedGroupingActivity_cmb.visible = v; + + appliedGroupingActivity_cmb.enabled = e; + } @@ -578,37 +584,57 @@ runOffline_chk.visible = v; defineLater_chk.visible = v; editGrouping_btn.visible = v; + + if(e != null) { + grouping_lbl.enabled = e; + currentGrouping_lbl.enabled = e; + runOffline_chk.enabled = e; + defineLater_chk.enabled = e; + editGrouping_btn.enabled = e; + } } - private function showGeneralInfo(v:Boolean){ - + private function showGeneralInfo(v:Boolean, e:Boolean){ total_num_activities_lbl.visible = v; + total_num_activities_lbl.enabled = (e != null) ? e : true; } - private function showGeneralControls(v:Boolean){ + private function showGeneralControls(v:Boolean, e:Boolean){ title_lbl.visible = v; title_txt.visible = v; + + if(e != null) { + title_lbl.enabled = e; + title_txt.enabled = e; + } } - private function showOptionalControls(v:Boolean){ + private function showOptionalControls(v:Boolean, e:Boolean){ min_lbl.visible = v; max_lbl.visible = v; minAct_stp.visible = v; maxAct_stp.visible = v; desc_lbl.visible = v; desc_txt.visible = v; - //grouping_opt_lbl.visible = v; - //appliedGroupingActivity_opt_cmb.visible = v; + + if(e != null) { + min_lbl.enabled = e; + max_lbl.enabled = e; + minAct_stp.enabled = e; + maxAct_stp.enabled = e; + desc_lbl.enabled = e; + desc_txt.enabled = e; + } + grouping_lbl.visible = false; } - private function showGateControls(v:Boolean){ - trace('showGateControls....'+v); + private function showGateControls(v:Boolean, e:Boolean){ days_lbl.visible = v; hours_lbl.visible = v; mins_lbl.visible = v; @@ -617,13 +643,24 @@ days_stp.visible = v; hours_stp.visible = v; mins_stp.visible = v; - //endHours_stp.visible = v; - //endMins_stp.visible = v; gateType_lbl.visible = v; gateType_cmb.visible = v; startOffset_lbl.visible = v; - //endOffset_lbl.visible = v; + if(e != null) { + days_lbl.enabled = e; + hours_lbl.enabled = e; + mins_lbl.enabled = e; + hoursEnd_lbl.enabled = e; + minsEnd_lbl.enabled = e; + days_stp.enabled = e; + hours_stp.enabled = e; + mins_stp.enabled = e; + gateType_lbl.enabled = e; + gateType_cmb.enabled = e; + startOffset_lbl.enabled = e; + } + } /** @@ -633,11 +670,14 @@ * @param v * @return */ - private function showAppliedGroupingControls(v:Boolean){ - //trace('show grp controls.....'+v); + private function showAppliedGroupingControls(v:Boolean, e:Boolean){ grouping_lbl.visible = v; appliedGroupingActivity_cmb.visible = v; - //checkEnabledGroupControl() + + if(e != null) { + grouping_lbl.enabled = e; + appliedGroupingActivity_cmb.enabled = e; + } } @@ -651,7 +691,7 @@ } } - private function showGroupingControls(v:Boolean){ + private function showGroupingControls(v:Boolean, e:Boolean){ //grouping groupType_lbl.visible = v; groupType_cmb.visible = v; @@ -818,7 +858,7 @@ } - private function showRelevantGroupOptions(){ + private function showRelevantGroupOptions(e:Boolean){ var ga = _canvasModel.selectedItem.activity; var g = _canvasModel.getCanvas().ddm.getGroupingByUIID(ga.createGroupingUIID); @@ -849,37 +889,49 @@ numLearners_rdo.visible = true; numGroups_rdo.visible = true; + if(e != null) { + numGroups_lbl.enabled = e; + numLearners_lbl.enabled = e; + numGroups_stp.enabled = e; + numRandomGroups_stp.enabled = e; + numLearners_stp.enabled = e; + numLearners_rdo.enabled = e; + numGroups_rdo.enabled = e; + } - checkEnableGroupsOptions(); }else{ //error dont understand the grouping type } - trace('numLearners_stp.visible:'+numLearners_stp.visible); } - private function reDrawTroublesomeSteppers(){ + private function reDrawTroublesomeSteppers(e:Boolean){ numLearners_stp.visible = true; numRandomGroups_stp.visible = true; + } - private function checkEnableGateControls(){ - //Debugger.log('Activity.SCHEDULE_GATE_ACTIVITY_TYPE:'+Activity.SCHEDULE_GATE_ACTIVITY_TYPE,Debugger.GEN,'checkEnableGateControls','PropertyInspector'); - //Debugger.log('_canvasModel.selectedItem.activity.activityTypeID:'+_canvasModel.selectedItem.activity.activityTypeID,Debugger.GEN,'checkEnableGateControls','PropertyInspector'); + private function checkEnableGateControls(e:Boolean){ if(_canvasModel.selectedItem.activity.activityTypeID == Activity.SCHEDULE_GATE_ACTIVITY_TYPE){ - trace('enabling....'); - days_stp.enabled = true; - hours_stp.enabled = true; - mins_stp.enabled = true; - endHours_stp.enabled = true; - endMins_stp.enabled = true; + if(e != null) { + days_stp.enabled = e; + hours_stp.enabled = e; + mins_stp.enabled = e; + endHours_stp.enabled = e; + endMins_stp.enabled = e; + } else { + days_stp.enabled = true; + hours_stp.enabled = true; + mins_stp.enabled = true; + endHours_stp.enabled = true; + endMins_stp.enabled = true; + } } /**/ else{ - trace('disabling....'); days_stp.enabled = false; hours_stp.enabled = false; mins_stp.enabled = false; @@ -901,15 +953,15 @@ * @usage * @return */ - private function checkEnableGroupsOptions(){ + private function checkEnableGroupsOptions(e:Boolean){ var groupingBy = rndGroup_radio.selection.data; Debugger.log('groupingBy:'+groupingBy,Debugger.GEN,'checkEnableGroupsOptions','PropertyInspector'); if(groupingBy == 'num_learners'){ numRandomGroups_stp.value = 0; numRandomGroups_stp.enabled = false; - numLearners_stp.enabled = true; + numLearners_stp.enabled = (e != null) ? e :true; }else{ - numRandomGroups_stp.enabled = true; + numRandomGroups_stp.enabled = (e != null) ? e : true; numLearners_stp.value = 0; numLearners_stp.enabled = false; } @@ -1076,7 +1128,7 @@ private function onGateTypeChange(evt:Object){ _canvasModel.selectedItem.activity.activityTypeID = evt.target.value; Debugger.log('Set gate type to: _canvasModel.selectedItem.activity.activityTypeID:'+_canvasModel.selectedItem.activity.activityTypeID,Debugger.GEN,'onGateTypeChange','PropertyInspector'); - checkEnableGateControls(); + checkEnableGateControls(!_canvasModel.selectedItem.activity.readOnly); setModified(); } @@ -1092,7 +1144,7 @@ var g = _canvasModel.getCanvas().ddm.getGroupingByUIID(ga.createGroupingUIID); g.groupingTypeID = evt.target.value; Debugger.log('Set group type to: '+g.groupingTypeID,Debugger.GEN,'onGroupTypeChange','PropertyInspector'); - showRelevantGroupOptions(); + showRelevantGroupOptions(!ga.readOnly); setModified(); } @@ -1128,7 +1180,7 @@ * @return */ private function onGroupingMethodChange(evt:Object){ - checkEnableGroupsOptions(); + checkEnableGroupsOptions(!_canvasModel.selectedItem.activity.readOnly); setModified(); } Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/ValidationIssue.as =================================================================== diff -u --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/ValidationIssue.as (revision 0) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/ValidationIssue.as (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -0,0 +1,36 @@ +class org.lamsfoundation.lams.authoring.cv.ValidationIssue { + + private var _code:String; + private var _message:String; + private var _UIID:Number + + + public static var TRANSITION_ERROR_KEY:String = "validation_error_transitionNoActivityBeforeOrAfter"; // T + public static var ACTIVITY_TRANSITION_ERROR_KEY:String = "validation_error_activityWithNoTransition"; // AT + public static var INPUT_TRANSITION_ERROR_TYPE1_KEY:String = "validation_error_inputTransitionType1"; // IT + public static var INPUT_TRANSITION_ERROR_TYPE2_KEY:String = "validation_error_inputTransitionType2"; + public static var OUTPUT_TRANSITION_ERROR_TYPE1_KEY:String = "validation_error_outputTransitionType1"; // OT + public static var OUTPUT_TRANSITION_ERROR_TYPE2_KEY:String = "validation_error_outputTransitionType2"; + + public static var TRANSITION_ERROR_CODE:String = "T"; + public static var ACTIVITY_TRANSITION_ERROR_CODE:String = "AT"; + public static var INPUT_TRANSITION_ERROR_CODE:String = "IT"; + public static var OUTPUT_TRANSITION_ERROR_CODE:String = "OT1"; + + function ValidationIssue(code:String, message:String, UIID:Number) { + _code = code; + _message = message; + _UIID = UIID; + } + + function get message():String { + return _message; + } + + function get UIID():Number { + return _UIID; + } + +} + + \ No newline at end of file Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/layout/DefaultLayoutManager.as =================================================================== diff -u --- lams_central/src/flash/org/lamsfoundation/lams/authoring/layout/DefaultLayoutManager.as (revision 0) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/layout/DefaultLayoutManager.as (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -0,0 +1,115 @@ +/*************************************************************************** + * 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 mx.containers.* +import mx.managers.* +import mx.utils.* + +import org.lamsfoundation.lams.authoring.Application +import org.lamsfoundation.lams.authoring.cv.Canvas +import org.lamsfoundation.lams.authoring.tk.Toolkit +import org.lamsfoundation.lams.authoring.tb.Toolbar +import org.lamsfoundation.lams.authoring.layout.* +import org.lamsfoundation.lams.common.ApplicationParent +import org.lamsfoundation.lams.common.util.Proxy +import org.lamsfoundation.lams.common.layout.ILayoutManager +import org.lamsfoundation.lams.common.layout.LFLayoutManager +import org.lamsfoundation.lams.common.layout.LFLayoutItem + +/** +* DefaultLayoutManager - Default Layout manager for an Application +* @author Mitchell Seaton +* +*/ +class DefaultLayoutManager extends LFLayoutManager { + + public static var COMPONENT_NO:Number = 5; + private var app:Application = null; + + //Constructor + function DefaultLayoutManager(name:String) { + super(name); + app = Application.getInstance(); + } + + public function setup(target:ApplicationParent) { + super.setup(target); + + setupUI(); + } + + private function setItem(obj) { + setEmptyLayoutItem(new LFLayoutItem(obj.classname, obj)); + } + + private function setupUI() { + + // Menu Bar + app.menubar = Application.root.attachMovie('LFMenuBar','_menu_mc', Application.MENU_DEPTH, {_x:0,_y:0}); + app.menubar.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.menubar); + + var depth:Number = Application.root.getNextHighestDepth(); + + // Toolbar + app.toolbar = new Toolbar(Application.toolbarContainer,Application.toolbarContainer.getNextHighestDepth(), Application.TOOLBAR_X, Application.TOOLBAR_Y, Toolbar.NORMAL_MODE); + app.toolbar.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.toolbar); + + // Canvas + app.canvas = new Canvas(Application.root,depth++, Application.CANVAS_X, Application.CANVAS_Y, Application.CANVAS_W, 495); + app.canvas.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.canvas); + + // Toolkit + app.toolkit = new Toolkit(Application.root,depth++, Application.TOOLKIT_X, Application.TOOLKIT_Y); + app.toolkit.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.toolkit); + + // Property Inspector + app.pi = Application.root.attachMovie('PropertyInspectorNew','_pi_mc', Application.PI_DEPTH, {_x:Application.PI_X,_y:Application.PI_Y, _canvasModel:app.canvas.model, _canvasController:app.canvas.view.getController()}); + app.pi.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.pi); + } + + public function resize(w:Number, h:Number) { + //Menu - only need to worry about width + app.menubar.setSize(w,app.menubar._height); + + //Canvas + app.toolkit.setSize(app.toolkit.width, h-Application.TOOLKIT_Y); + app.canvas.setSize(w-app.toolkit.width, h-(Application.CANVAS_Y + app.canvas.model.getPIHeight())); + //Toolbar + app.toolbar.setSize(w, Application.TOOLBAR_HEIGHT); + //Property Inspector + app.pi.setSize(w-app.toolkit.width, app.pi._height) + app.pi._y = h - app.canvas.model.getPIHeight(); + + var piHeight:Number = app.canvas.model.getPIHeight(); + app.pi.showExpand(false) + if (piHeight != app.pi.piFullHeight()){ + app.pi.showExpand(true); + } + } + +} \ No newline at end of file Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/layout/EditOnFlyLayoutManager.as =================================================================== diff -u --- lams_central/src/flash/org/lamsfoundation/lams/authoring/layout/EditOnFlyLayoutManager.as (revision 0) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/layout/EditOnFlyLayoutManager.as (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -0,0 +1,133 @@ +/*************************************************************************** + * 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 mx.containers.* +import mx.managers.* +import mx.utils.* + +import org.lamsfoundation.lams.authoring.Application +import org.lamsfoundation.lams.authoring.cv.Canvas +import org.lamsfoundation.lams.authoring.tk.Toolkit +import org.lamsfoundation.lams.authoring.tb.Toolbar +import org.lamsfoundation.lams.authoring.layout.* +import org.lamsfoundation.lams.common.ApplicationParent +import org.lamsfoundation.lams.common.util.Proxy +import org.lamsfoundation.lams.common.layout.ILayoutManager +import org.lamsfoundation.lams.common.layout.LFLayoutManager +import org.lamsfoundation.lams.common.layout.LFLayoutItem + +/** +* EditOnFlyLayoutManager - Custom Layout manager for Edit-On-The-Fly mode of Authoring +* @author Mitchell Seaton +* +*/ +class EditOnFlyLayoutManager extends LFLayoutManager { + + private static var TOOLBAR_X:Number = 0; + private static var TOOLBAR_Y:Number = 0; + private static var TOOLBAR_HEIGHT:Number = 35; + + private static var TOOLKIT_X:Number = 0; + private static var TOOLKIT_Y:Number = 34; + + private static var CANVAS_X:Number = 180; + private static var CANVAS_Y:Number = 34; + private static var CANVAS_W:Number = 1000; + private static var CANVAS_H:Number = 200; + + private static var PI_X:Number = 180; + private static var PI_Y:Number = 530; + private static var PI_W:Number = 616; + + private var app:Application = null; + + public static var COMPONENT_NO:Number = 4; + + //Constructor + function EditOnFlyLayoutManager(name:String) { + super(name); + app = Application.getInstance(); + } + + public function setup(target:ApplicationParent) { + super.setup(target); + + setupUI(); + } + + private function setItem(obj) { + setEmptyLayoutItem(new LFLayoutItem(obj.classname, obj)); + } + + public function setupUI() { + // Menu Bar + + app.menubar = Application.root.attachMovie('LFMenuBar','_menu_mc', Application.MENU_DEPTH, {_x:0,_y:0,layout:_root.layout}); + app.menubar.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.menubar); + + var depth:Number = Application.root.getNextHighestDepth(); + + // Toolbar + app.toolbar = new Toolbar(Application.toolbarContainer,Application.toolbarContainer.getNextHighestDepth(), Application.TOOLBAR_X, Application.TOOLBAR_Y, Toolbar.EDIT_MODE); + app.toolbar.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.toolbar); + + // Canvas + app.canvas = new Canvas(Application.root,depth++, Application.CANVAS_X, Application.CANVAS_Y, Application.CANVAS_W, 495); + app.canvas.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.canvas); + + // Toolkit + app.toolkit = new Toolkit(Application.root,depth++, Application.TOOLKIT_X, Application.TOOLKIT_Y); + app.toolkit.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.toolkit); + + // Property Inspector + app.pi = Application.root.attachMovie('PropertyInspectorNew','_pi_mc', Application.PI_DEPTH, {_x:Application.PI_X,_y:Application.PI_Y, _canvasModel:app.canvas.model, _canvasController:app.canvas.view.getController()}); + app.pi.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.pi); + } + + public function resize(w:Number, h:Number) { + //Menu - only need to worry about width + app.menubar.setSize(w,app.menubar._height); + app.menubar.setSize(w,app.menubar._height); + + //Canvas + app.toolkit.setSize(app.toolkit.width, h-Application.TOOLKIT_Y); + app.canvas.setSize(w-app.toolkit.width, h-(Application.CANVAS_Y + app.canvas.model.getPIHeight())); + //Toolbar + app.toolbar.setSize(w, Application.TOOLBAR_HEIGHT); + //Property Inspector + app.pi.setSize(w-app.toolkit.width, app.pi._height) + app.pi._y = h - app.canvas.model.getPIHeight(); + + var piHeight:Number = app.canvas.model.getPIHeight(); + app.pi.showExpand(false) + if (piHeight != app.pi.piFullHeight()){ + app.pi.showExpand(true); + } + } + +} \ No newline at end of file Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/Toolbar.as =================================================================== diff -u -r735adeb5d2ea7849b86d4991480630c4613fadec -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/Toolbar.as (.../Toolbar.as) (revision 735adeb5d2ea7849b86d4991480630c4613fadec) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/Toolbar.as (.../Toolbar.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -35,6 +35,9 @@ private var toolbarView:ToolbarView; private var toolbarView_mc:MovieClip; + public static var NORMAL_MODE:Number = 0; + public static var EDIT_MODE:Number = 1; + //These are defined so that the compiler can 'see' the events that are added at runtime by EventDispatcher private var dispatchEvent:Function; public var addEventListener:Function; @@ -45,10 +48,10 @@ * * @param target_mc Target clip for attaching view */ - function Toolbar (target_mc:MovieClip,depth:Number,x:Number,y:Number){ + function Toolbar (target_mc:MovieClip,depth:Number,x:Number,y:Number, mode:Number){ mx.events.EventDispatcher.initialize(this); //Create the model - toolbarModel = new ToolbarModel(this); + toolbarModel = new ToolbarModel(this, mode); //Create the view toolbarView_mc = target_mc.createChildAtDepth("toolbarView",DepthManager.kTop); @@ -113,7 +116,6 @@ return getToolbarView(); } - public function getToolbarView():MovieClip{ return toolbarView; } Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/ToolbarController.as =================================================================== diff -u -rb9e6e7b25b9458128be9ce9fe82f3fa006513217 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/ToolbarController.as (.../ToolbarController.as) (revision b9e6e7b25b9458128be9ce9fe82f3fa006513217) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/ToolbarController.as (.../ToolbarController.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -62,29 +62,27 @@ Debugger.log('click evt.target.label:'+evt.target.label,Debugger.GEN,'click','ToolbarController'); var tgt:String = new String(evt.target); + hideFlow(); + if(tgt.indexOf("new") != -1){ - hideFlow(); _app.getCanvas().clearCanvas(false); }else if(tgt.indexOf("open") != -1){ - hideFlow(); _app.getCanvas().openDesignBySelection(); }else if(tgt.indexOf("save") != -1){ Cursor.showCursor(Application.C_HOURGLASS); - hideFlow(); _app.getCanvas().saveDesign(); + }else if(tgt.indexOf("apply_changes") != -1){ + Cursor.showCursor(Application.C_HOURGLASS); + _app.getCanvas().saveDesign(); }else if(tgt.indexOf("copy") != -1){ - hideFlow(); _app.copy(); }else if(tgt.indexOf("paste") != -1){ - hideFlow(); _app.paste(); }else if(tgt.indexOf("trans") != -1){ - hideFlow(); _app.getCanvas().toggleTransitionTool(); }else if(tgt.indexOf("optional") != -1){ - hideFlow(); _app.getCanvas().toggleOptionalActivity(); }else if(tgt.indexOf("flow") != -1){ @@ -95,21 +93,18 @@ } isflowActive = true; _toolbarModel.getToolbar().view.showHideAssets(true); - }else { - hideFlow(); } }else if(tgt.indexOf("gate") != -1){ - hideFlow(); _app.getCanvas().toggleGateTool(); }else if(tgt.indexOf("group") != -1){ - hideFlow(); _app.getCanvas().toggleGroupTool(); }else if(tgt.indexOf("preview") != -1){ - hideFlow(); _app.getCanvas().launchPreviewWindow(); + }else if(tgt.indexOf("cancel") != -1){ + _app.getCanvas().finishEditOnFly(); } } Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/ToolbarModel.as =================================================================== diff -u -r735adeb5d2ea7849b86d4991480630c4613fadec -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/ToolbarModel.as (.../ToolbarModel.as) (revision 735adeb5d2ea7849b86d4991480630c4613fadec) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/ToolbarModel.as (.../ToolbarModel.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -38,12 +38,14 @@ private var _isDirty:Boolean; private var infoObj:Object; private var _btnState:Boolean = false; + private var _mode:Number; /** * Constructor. */ - public function ToolbarModel (tv:Toolbar){ - _tv = tv; + public function ToolbarModel (tv:Toolbar, mode:Number){ + _tv = tv; + _mode = mode; } /** @@ -54,7 +56,6 @@ public function setSize(width:Number,height:Number) { __width = width; __height = height; - setChanged(); //send an update infoObj = {}; @@ -66,21 +67,38 @@ public function toolbarButtons(){ var buttonArr:Array = new Array(); - buttonArr[0] = ["new_btn", "icon_newDesign"]; - buttonArr[1] = ["open_btn", "icon_openDesign"]; - buttonArr[2] = ["save_btn", "icon_saveDesign"]; - buttonArr[3] = ["copy_btn", "icon_copy"]; - buttonArr[4] = ["paste_btn", "icon_paste"]; - buttonArr[5] = ["trans_btn", "icon_pen"]; - buttonArr[6] = ["optional_btn", "icon_optional"]; - buttonArr[7] = ["flow_btn", "icon_flow"]; - buttonArr[8] = ["group_btn", "icon_group"]; - buttonArr[9] = ["preview_btn", "icon_preview"]; - buttonArr[10] = ["gate_btn", "icon_gate"]; - buttonArr[11] = ["branch_btn", "icon_branch"]; + if(mode != Toolbar.EDIT_MODE) { + buttonArr[0] = ["new_btn", "icon_newDesign"]; + buttonArr[1] = ["open_btn", "icon_openDesign"]; + buttonArr[2] = ["save_btn", "icon_saveDesign"]; + buttonArr[3] = ["copy_btn", "icon_copy"]; + buttonArr[4] = ["paste_btn", "icon_paste"]; + buttonArr[5] = ["trans_btn", "icon_pen"]; + buttonArr[6] = ["optional_btn", "icon_optional"]; + buttonArr[7] = ["flow_btn", "icon_flow"]; + buttonArr[8] = ["group_btn", "icon_group"]; + buttonArr[9] = ["preview_btn", "icon_preview"]; + buttonArr[10] = ["gate_btn", "icon_gate"]; + buttonArr[11] = ["branch_btn", "icon_branch"]; + + } else { + buttonArr[0] = ["apply_changes_btn", "icon_saveDesign"]; + buttonArr[1] = ["cancel_btn", "icon_cancel"]; + buttonArr[2] = ["spacer", null]; + buttonArr[3] = ["copy_btn", "icon_copy"]; + buttonArr[4] = ["paste_btn", "icon_paste"]; + buttonArr[5] = ["trans_btn", "icon_pen"]; + buttonArr[6] = ["optional_btn", "icon_optional"]; + buttonArr[7] = ["flow_btn", "icon_flow"]; + buttonArr[8] = ["group_btn", "icon_group"]; + buttonArr[9] = ["gate_btn", "icon_gate"]; + buttonArr[10] = ["branch_btn", "icon_branch"]; + } + setChanged(); + //send an update infoObj = {}; infoObj.updateType = "SETMENU"; @@ -175,15 +193,24 @@ return __y; } - //Acessors for x + y coordinates + //Acessors for w + h public function get width():Number{ return __width; } + public function get mode():Number{ + return _mode; + } + + public function set mode(a:Number){ + _mode = a; + } + public function get height():Number{ return __height; } + public function getToolbar():Toolbar{ return _tv; } Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/ToolbarView.as =================================================================== diff -u -rdffa8d7cdd153ee17cff40048d348cb79f1c8e5c -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/ToolbarView.as (.../ToolbarView.as) (revision dffa8d7cdd153ee17cff40048d348cb79f1c8e5c) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/tb/ToolbarView.as (.../ToolbarView.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -43,6 +43,7 @@ private var new_btn:Button; private var open_btn:Button; private var save_btn:Button; + private var apply_changes_btn:Button; private var copy_btn:Button; private var paste_btn:Button; private var trans_btn:Button; @@ -52,12 +53,16 @@ private var branch_btn:Button; private var group_btn:Button; private var preview_btn:Button; + private var cancel_btn:Button; private var _toolbarMenu:Array; - //private var btn_text:TextField; + private var bkg_pnl:Panel; private var flow_bkg_pnl:Panel; private var _dictionary:Dictionary; + private static var SPACER_DEPTH:Number = 30; + private static var SPACER_WIDTH:Number = 20; + //Defined so compiler can 'see' events added at runtime by EventDispatcher private var dispatchEvent:Function; public var addEventListener:Function; @@ -137,6 +142,8 @@ gate_btn.addEventListener("click",controller); group_btn.addEventListener("click",controller); preview_btn.addEventListener("click",controller); + apply_changes_btn.addEventListener("click", controller); + cancel_btn.addEventListener("click",controller); // Button handler for rollover and rollout. @@ -176,6 +183,12 @@ preview_btn.onRollOver = Proxy.create(this,this['showToolTip'], preview_btn, "preview_btn_tooltip"); preview_btn.onRollOut = Proxy.create(this,this['hideToolTip']); + apply_changes_btn.onRollOver = Proxy.create(this,this['showToolTip'], apply_changes_btn, "apply_changes_btn_tooltip"); + apply_changes_btn.onRollOut = Proxy.create(this,this['hideToolTip']); + + cancel_btn.onRollOver = Proxy.create(this,this['showToolTip'], cancel_btn, "cancel_btn_tooltip"); + cancel_btn.onRollOut = Proxy.create(this,this['hideToolTip']); + showHideAssets(false); Debugger.log('dispatch it',Debugger.GEN,'createToolbar','ToolbarView'); //Now that view is setup dispatch loaded event @@ -196,6 +209,8 @@ flow_btn.label = Dictionary.getValue('flow_btn'); group_btn.label = Dictionary.getValue('group_btn'); preview_btn.label = Dictionary.getValue('preview_btn'); + apply_changes_btn.label = Dictionary.getValue('apply_changes_btn'); + cancel_btn.label = Dictionary.getValue('cancel_btn'); } @@ -205,54 +220,85 @@ new_btn.tabIndex = 201 open_btn.tabIndex = 202 save_btn.tabIndex = 203 - copy_btn.tabIndex = 204 - paste_btn.tabIndex = 205 - trans_btn.tabIndex = 206 - optional_btn.tabIndex = 207 - flow_btn.tabIndex = 208 - gate_btn.tabIndex = 209 - branch_btn.tabIndex = 210 - group_btn.tabIndex = 211 - preview_btn.tabIndex = 212 + apply_changes_btn.tabIndex = 204 + copy_btn.tabIndex = 205 + paste_btn.tabIndex = 206 + trans_btn.tabIndex = 207 + optional_btn.tabIndex = 208 + flow_btn.tabIndex = 209 + gate_btn.tabIndex = 210 + branch_btn.tabIndex = 211 + group_btn.tabIndex = 212 + preview_btn.tabIndex = 213 + cancel_btn.tabIndex = 214 } public function setupButtons(tm:ToolbarModel, menuList:Array){ - trace("setupButtons Called") + _toolbarMenu = new Array(); - this.createTextField("btn_text", this.getNextHighestDepth(), btnOffset_X, -100, 10, 18); + for (var i=0; i= menuList.length-2){ - _toolbarMenu[i]._x = this.flow_btn._x; - _toolbarMenu[i]._y = (_toolbarMenu[i-1]._y+_toolbarMenu[i-1].height)+btnOffset_Y + } else { + _toolbarMenu[i] = null; } - if (i == menuList.length){ - btn_text.removeTextField(); - } - //_toolbarMenu[i].onRollOver = function(){ + + if(_toolbarMenu[i] != null) { - //} - //_toolbarMenu[i].onRollOut = Proxy.create (this, localOnRollOut); + if (i == 0){ + _toolbarMenu[i]._x = btnOffset_X + + } else { + _toolbarMenu[i]._x = getToolbarButtonXPos(_toolbarMenu, i-1, 1); //(_toolbarMenu[i-1]._x+_toolbarMenu[i-1].width)+btnOffset_X + } + + _toolbarMenu[i]._y = btnOffset_Y; + + if (i >= menuList.length-2){ + _toolbarMenu[i]._x = this.flow_btn._x; + _toolbarMenu[i]._y = (_toolbarMenu[i-1]._y+_toolbarMenu[i-1].height)+btnOffset_Y + } + + if (i == menuList.length){ + btn_text.removeTextField(); + } + + } + + } - } + } + + private function getToolbarButtonXPos(toolbarMenu:Array, i:Number, count:Number):Number { + var _count:Number = count; + + if(toolbarMenu[i] == null && i >= 0) { + _count++; + return getToolbarButtonXPos(toolbarMenu, i-1, _count); + } else if(toolbarMenu[i] != null) { + return (_count > 1) ? (toolbarMenu[i]._x+toolbarMenu[i].width)+btnOffset_X+(_count*SPACER_WIDTH) : (toolbarMenu[i]._x+toolbarMenu[i].width)+btnOffset_X; + } else { + return btnOffset_X; + } + + } + /* * Updates state of the Toolbar, called by Toolbar Model * @@ -297,7 +343,6 @@ var Xpos = Application.TOOLBAR_X+ btnObj._x; var Ypos = (Application.TOOLBAR_Y+ btnObj._y+btnObj.height)+5; var ttHolder = Application.tooltip; - //var ttMessage = btnObj.label; var ttMessage = Dictionary.getValue(btnTT); _tip.DisplayToolTip(ttHolder, ttMessage, Xpos, Ypos); @@ -337,6 +382,7 @@ new_btn.setStyle('styleName',styleObj); open_btn.setStyle('styleName',styleObj); save_btn.setStyle('styleName',styleObj); + apply_changes_btn.setStyle('styleName', styleObj); copy_btn.setStyle('styleName',styleObj); paste_btn.setStyle('styleName',styleObj); trans_btn.setStyle('styleName',styleObj); @@ -346,20 +392,12 @@ branch_btn.setStyle('styleName',styleObj); group_btn.setStyle('styleName', styleObj); preview_btn.setStyle('styleName',styleObj); + cancel_btn.setStyle('styleName',styleObj); styleObj = _tm.getStyleObject('BGPanel'); bkg_pnl.setStyle('styleName',styleObj); styleObj = _tm.getStyleObject('FlowPanel'); flow_bkg_pnl.setStyle('styleName',styleObj); - /* - _toolbar_mc.open_btn.addEventListener("click",controller); - _toolbar_mc.save_btn.addEventListener("click",controller); - _toolbar_mc.copy_btn.addEventListener("click",controller); - _toolbar_mc.paste_btn.addEventListener("click",controller); - _toolbar_mc.trans_btn.addEventListener("click",controller); - _toolbar_mc.optional_btn.addEventListener("click",controller); - _toolbar_mc.gate_btn.addEventListener("click",controller); - _toolbar_mc.preview_btn.addEventListener("click",controller); - */ + } /** Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/tk/Toolkit.as =================================================================== diff -u -r735adeb5d2ea7849b86d4991480630c4613fadec -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/tk/Toolkit.as (.../Toolkit.as) (revision 735adeb5d2ea7849b86d4991480630c4613fadec) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/tk/Toolkit.as (.../Toolkit.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -305,6 +305,10 @@ return toolkitModel.y; } + public function get view():MovieClip{ + return toolkitView; + } + function get className():String { return 'Toolkit'; } Index: lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as =================================================================== diff -u -r735adeb5d2ea7849b86d4991480630c4613fadec -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as (.../Application.as) (revision 735adeb5d2ea7849b86d4991480630c4613fadec) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as (.../Application.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -332,18 +332,25 @@ * @param current */ - public function refreshProgress(attempted:String, completed:String, current:String, lessonID:String){ + public function refreshProgress(attempted:String, completed:String, current:String, lessonID:String, version:Number){ Debugger.log('attempted: ' + attempted,Debugger.CRITICAL,'refreshProgress','Application'); Debugger.log('completed: ' + completed,Debugger.CRITICAL,'refreshProgress','Application'); Debugger.log('current: ' + current,Debugger.CRITICAL,'refreshProgress','Application'); + Debugger.log('version: ' + version,Debugger.CRITICAL,'refreshProgress','Application'); Debugger.log('_root lesson ID: ' + _root.lessonID + ' passed in lesson ID: ' + lessonID,Debugger.CRITICAL,'refreshProgress','Application'); //Debugger.log('_root unique ID: ' + _root.uniqueID + ' passed in unique ID: ' + uniqueID,Debugger.CRITICAL,'refreshProgress','Application'); if(_root.lessonID == lessonID){ var attemptedArray:Array = attempted.split("_"); var completedArray:Array = completed.split("_"); - - _lesson.updateProgressData(attemptedArray, completedArray, Number(current)); + if(_lesson.model.learningDesignModel != null) { + if(version != null && version != _lesson.model.learningDesignModel.designVersion) { + // TODO apply progress data arrays after design is reloaded instead of re-getting the flash progress data + _lesson.reloadLearningDesign(); + } else { + _lesson.updateProgressData(attemptedArray, completedArray, Number(current)); + } + } } } Index: lams_central/src/flash/org/lamsfoundation/lams/learner/ls/Lesson.as =================================================================== diff -u -rf205c8eb528cdd372fc6b95288f978bd5299e237 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/learner/ls/Lesson.as (.../Lesson.as) (revision f205c8eb528cdd372fc6b95288f978bd5299e237) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/ls/Lesson.as (.../Lesson.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -306,6 +306,10 @@ getURL(_root.serverURL + 'learning'+String(pkt), 'contentFrame'); } + public function reloadLearningDesign() { + openLearningDesign(); + } + private function openLearningDesign(){ trace('opening learning design...'); finishedDesign = false; Index: lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonView.as =================================================================== diff -u -r244ec27716e8da930e492c3cc7be65da0433c7fb -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonView.as (.../LessonView.as) (revision 244ec27716e8da930e492c3cc7be65da0433c7fb) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonView.as (.../LessonView.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -256,24 +256,25 @@ if(a.activityTypeID==Activity.TOOL_ACTIVITY_TYPE || a.isGroupActivity() ){ newActivity_mc = _activityLayer_mc.attachMovie("LearnerActivity", "LearnerActivity" + a.activityID, _activityLayer_mc.getNextHighestDepth(),{_activity:a,_controller:lc,_view:lv, _x:(progress_scp._width/2)-ACT_X_OFFSET, _y:ACT_Y, actLabel:activityTitle, learner:lm.progressData, _complex:false}); ACT_Y = newActivity_mc._y + ACTIVITY_OFFSET; - //_activityList.push(newActivity_mc); Debugger.log('The activity:'+a.title+','+a.activityTypeID+' is tool/gate/group activity',Debugger.CRITICAL,'drawActivity','LessonView'); } else if(a.isGateActivity()){ newActivity_mc = _activityLayer_mc.attachMovie("LearnerGateActivity", "LearnerGateActivity" + a.activityID, _activityLayer_mc.getNextHighestDepth(),{_activity:a,_controller:lc,_view:lv, _x:(progress_scp._width/2)-ACT_X_OFFSET, _y:ACT_Y, actLabel:activityTitle, learner:lm.progressData, _complex:false}); ACT_Y = newActivity_mc._y + ACTIVITY_OFFSET; - //_activityList.push(newActivity_mc); } else if(a.activityTypeID==Activity.PARALLEL_ACTIVITY_TYPE || a.activityTypeID==Activity.OPTIONAL_ACTIVITY_TYPE){ //get the children var children:Array = lm.learningDesignModel.getComplexActivityChildren(a.activityUIID); Debugger.log('The activity:'+a.title+','+a.activityTypeID+' is is parellel (complex) activity',Debugger.CRITICAL,'drawActivity','LessonView'); newActivity_mc = _activityLayer_mc.attachMovie("LearnerComplexActivity", "LearnerComplexActivity" + a.activityID, _activityLayer_mc.getNextHighestDepth(),{_activity:a,_children:children,_controller:lc,_view:lv, _x:(progress_scp._width/2)-ACT_X_OFFSET, _y:ACT_Y, learner:lm.progressData}); ACT_Y = newActivity_mc._y + ACTIVITY_OFFSET; - //_activityList.push(newActivity_mc); - }else{ - Debugger.log('The activity:'+a.title+','+a.activityUIID+' is of unknown type, it cannot be drawn',Debugger.CRITICAL,'drawActivity','LessonView'); + }else if(a != null){ + Debugger.log('The activity:'+a.title+','+a.activityUIID+' is of unknown type, drawing default icon',Debugger.CRITICAL,'drawActivity','LessonView'); + newActivity_mc = _activityLayer_mc.attachMovie("LearnerActivity", "LearnerActivity" + a.activityID, _activityLayer_mc.getNextHighestDepth(),{_activity:a,_controller:lc,_view:lv, _x:(progress_scp._width/2)-ACT_X_OFFSET, _y:ACT_Y, actLabel:activityTitle, learner:lm.progressData, _complex:false}); + ACT_Y = newActivity_mc._y + ACTIVITY_OFFSET; } + _activityList.push(newActivity_mc); + var actItems:Number = lm.activitiesDisplayed.size() if (actItems < lm.getActivityKeys().length){ lm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); Index: lams_central/src/flash/org/lamsfoundation/lams/monitoring/Application.as =================================================================== diff -u -r7b17a720e95607da515533ab75c8e7f91b08a91a -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/monitoring/Application.as (.../Application.as) (revision 7b17a720e95607da515533ab75c8e7f91b08a91a) +++ lams_central/src/flash/org/lamsfoundation/lams/monitoring/Application.as (.../Application.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -23,14 +23,17 @@ //import org.lamsfoundation.lams.monitoring.* import org.lamsfoundation.lams.monitoring.ls.* //Lessons -import org.lamsfoundation.lams.authoring.cv.CanvasActivity; //Canvas Activity Used in Monitor Tab View -import org.lamsfoundation.lams.monitoring.mv.* //Monitor +import org.lamsfoundation.lams.authoring.cv.CanvasActivity //Canvas Activity Used in Monitor Tab View +import org.lamsfoundation.lams.authoring.DesignDataModel +import org.lamsfoundation.lams.monitoring.mv.* //Monitor +import org.lamsfoundation.lams.monitoring.layout.DefaultLayoutManager //Monitor Layouts import org.lamsfoundation.lams.common.ws.* //Workspace import org.lamsfoundation.lams.common.comms.* //communications import org.lamsfoundation.lams.common.util.* //Utils import org.lamsfoundation.lams.common.dict.* //Dictionary import org.lamsfoundation.lams.common.ui.* //User interface import org.lamsfoundation.lams.common.style.* //Themes/Styles +import org.lamsfoundation.lams.common.layout.* // Layouts import org.lamsfoundation.lams.common.* import mx.managers.* import mx.utils.* @@ -120,33 +123,42 @@ private var _DataLoadCheckIntervalID:Number; + // Data Elements + private var _sequenceLoaded:Boolean; //Sequence(+Design) loaded flag + //UI Elements - //private var _toolbarLoaded:Boolean; //These are flags set to true when respective element is 'loaded' private var _monitorLoaded:Boolean; private var _lessonsLoaded:Boolean; private var _menuLoaded:Boolean; private var _showCMItem:Boolean; + // Layout Manager + private var _layout:LFLayout; + //clipboard - private var _clipboardData:Object; - // set up Key Listener - //private var keyListener:Object; - + private var _clipboardData:Object; + + private var _sequence:Sequence; + //Application instance is stored as a static in the application class - private static var _instance:Application = null; - + private static var _instance:Application = null; + private var dispatchEvent:Function; + /** * Application - Constructor */ private function Application(){ super(this); - _menuLoaded = false; + _sequence = null; + _sequenceLoaded = false; + _menuLoaded = false; _lessonsLoaded = false; _monitorLoaded = false; _module = Application.MODULE; _ccm = CustomContextMenu.getInstance(); - //_toolbarLoaded = false; - //Mouse.addListener(someListener); + + mx.events.EventDispatcher.initialize(this); + } /** @@ -166,19 +178,14 @@ _container_mc = container_mc; _UILoaded = false; - loader.start(COMPONENT_NO); + loader.start(DefaultLayoutManager.COMPONENT_NO); _customCursor_mc = _container_mc.createEmptyMovieClip('_customCursor_mc', CCURSOR_DEPTH); //add the cursors: Cursor.addCursor(C_HOURGLASS); Cursor.addCursor(C_LICON); - //Cursor.addCursor(C_OPTIONAL); - //Cursor.addCursor(C_TRANSITION); - //Cursor.addCursor(C_GATE); - //Cursor.addCursor(C_GROUP); - //Comms object - do this before any objects are created that require it for server communication _comms = new Communication(); @@ -191,11 +198,8 @@ //Set up Key handler //TODO take out after testing and uncomment same key handler in ready(); Key.addListener(this); - //setupUI(); - //setupData(); - //checkDataLoaded(); } - + /** * Called when the config class has loaded */ @@ -229,31 +233,58 @@ Debugger.getInstance().crashDumpSeverityLevel = Number(_config.getItem('crashDumpSeverityLevelLog')); Debugger.getInstance().severityLevel = Number(_config.getItem('severityLevelLog')); + // Load lesson sequence + requestSequence(_root.lessonID); } - - /** - * Called when Dictionary loaded - * @param evt:Object the event object - */ - private function onDictionaryLoad(evt:Object){ - if(evt.type=='load'){ - _dictionaryLoaded = true; - Debugger.log('Dictionary loaded :',Debugger.CRITICAL,'onDictionaryLoad','Application'); - } else { - Debugger.log('event type not recognised :'+evt.type,Debugger.CRITICAL,'onDictionaryLoad','Application'); - } - } - - /** + + private function requestSequence(seqID:Number){ + var callback:Function = Proxy.create(this, saveSequence); + Application.getInstance().getComms().getRequest('monitoring/monitoring.do?method=getLessonDetails&lessonID=' + String(seqID) + '&userID=' + _root.userID,callback, false); + } + + private function saveSequence(seqDTO:Object){ + // create new Sequence from DTO + _sequence = new Sequence(seqDTO); + _sequence.addEventListener('load',Delegate.create(this,onSequenceLoad)); + + // load Sequence design + openLearningDesign(_sequence); + + } + + /** + * server call for Learning Deign and sent it to the save it in DataDesignModel + * + * @usage + * @param seq type Sequence; + * @return Void + */ + private function openLearningDesign(seq:Sequence){ + var designID:Number = seq.learningDesignID; + var callback:Function = Proxy.create(this,saveDataDesignModel); + + Application.getInstance().getComms().getRequest('authoring/author.do?method=getLearningDesignDetails&learningDesignID='+designID,callback, false); + + } + + private function saveDataDesignModel(learningDesignDTO:Object){ + var _ddm:DesignDataModel = new DesignDataModel(); + _ddm.setDesign(learningDesignDTO); + + _sequence.setLearningDesignModel(_ddm); + + } + + /** * Called when the current selected theme has been loaded * @param evt:Object the event object */ - private function onThemeLoad(evt:Object) { + private function onSequenceLoad(evt:Object) { if(evt.type=='load'){ - _themeLoaded = true; - Debugger.log('!Theme loaded :',Debugger.CRITICAL,'onThemeLoad','Application'); + _sequenceLoaded = true; + Debugger.log('!Sequence (+Design) loaded :',Debugger.CRITICAL,'onSequenceLoad','Application'); } else { - Debugger.log('event type not recognised :'+evt.type,Debugger.CRITICAL,'onThemeLoad','Application'); + Debugger.log('event type not recognised :'+evt.type,Debugger.CRITICAL,'onSequenceLoad','Application'); } } @@ -268,7 +299,7 @@ } else { _dataLoadCheckCount++; // if dictionary and theme data loaded setup UI - if(_dictionaryLoaded && _themeLoaded) { + if(_dictionaryLoaded && _themeLoaded && _sequenceLoaded) { clearInterval(_DataLoadCheckIntervalID); setupUI(); @@ -294,7 +325,7 @@ } else { _uiLoadCheckCount++; //If all events dispatched clear interval and call start() - if(_dictionaryEventDispatched && _themeEventDispatched){ + if(_UILoaded && _dictionaryEventDispatched && _themeEventDispatched){ //Debugger.log('Clearing Interval and calling start :',Debugger.CRITICAL,'checkUILoaded','Application'); clearInterval(_UILoadCheckIntervalID); start(); @@ -346,35 +377,30 @@ //Debugger.log('UIElementLoaded: ' + evt.target.className,Debugger.GEN,'UIElementLoaded','Application'); if(evt.type=='load'){ //Which item has loaded - switch (evt.target.className) { + /**switch (evt.target.className) { case 'LFMenuBar' : _menuLoaded = true; break; - //case 'Toolbar' : - // _toolbarLoaded = true; - // break; - //case 'Lesson' : - // _lessonsLoaded = true; - // break; case 'Monitor' : _monitorLoaded = true; break; default: - } + }*/ + _layout.manager.addLayoutItem(new LFLayoutItem(evt.target.className, evt.target)); + loader.complete(); //If all of them are loaded set UILoad accordingly - if(_menuLoaded && _monitorLoaded){ + if(_layout.manager.completedLayout){ _UILoaded=true; - } - //if(_toolkitLoaded && _canvasLoaded && _menuLoaded && _toolbarLoaded){ - // _UILoaded=true; - //} + } else { + _UILoaded = false; + } } - } - + } + /** * Create all UI Elements */ @@ -389,32 +415,10 @@ _tooltipContainer_mc = _container_mc.createEmptyMovieClip('_tooltipContainer_mc',TOOLTIP_DEPTH); + var manager = ILayoutManager(new DefaultLayoutManager('default')); + _layout = new LFLayout(this, manager); + _layout.init(); - - //MENU - _menu_mc = _container_mc.attachMovie('LFMenuBar','_menu_mc',MENU_DEPTH, {env:'Monitoring',_x:0,_y:0}); - _menu_mc.addEventListener('load',Proxy.create(this,UIElementLoaded)); - - - - //TOOLBAR - var depth:Number = _appRoot_mc.getNextHighestDepth(); - //_toolbar = new Toolbar(_appRoot_mc,TOOLBAR_X,TOOLBAR_Y); - //_toolbar.addEventListener('load',Proxy.create(this,UIElementLoaded)); - - //LESSONS - //_lessons = new Lesson(_appRoot_mc,LESSONS_X,LESSONS_Y); - //_lessons.addEventListener('load',Proxy.create(this,UIElementLoaded)); - - //MONITOR - _monitor = new Monitor(_appRoot_mc,depth++,MONITOR_X,MONITOR_Y,MONITOR_W,MONITOR_H); - _monitor.addEventListener('load',Proxy.create(this,UIElementLoaded)); - - //WORKSPACE - _workspace = new Workspace(); - //_workspace.addEventListener('load',Proxy.create(this,UIElementLoaded)); - - } @@ -456,21 +460,6 @@ } /** - * Opens the preferences dialog - - public function showPrefsDialog() { - PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue("prefs_dlg_title"),closeButton:true,scrollContentPath:'preferencesDialog'}); - } - */ - - /** - * Opens the lesson manager dialog - */ - //public function showLessonManagerDialog() { - // PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue("lesson_dlg_title"),closeButton:true,scrollContentPath:'selectClass'}); - //} - - /** * Receives events from the Stage resizing */ public function onResize(){ @@ -480,19 +469,15 @@ var w:Number = Stage.width; var h:Number = Stage.height; + _layout.manager.resize(w, h); + var someListener:Object = new Object(); someListener.onMouseUp = function () { - //Menu - only need to worry about width - _menu_mc.setSize(w,_menu_mc.height); - //MONITOR - _monitor.setSize(w-15,h-_menu_mc._height); + _layout.manager.resize(w, h); } - _menu_mc.setSize(w,_menu_mc.height); - //MONITOR - _monitor.setSize(w,h-MONITOR_Y); - trace("Stage Width "+w+" and height "+h) + } /** @@ -519,7 +504,6 @@ */ public function setClipboardData(obj:Object):Void{ _clipboardData = obj; - trace("clipBoard data id"+_clipboardData); } /** @@ -538,40 +522,14 @@ } public function copy():Void{ - trace("testing copy"); //setClipboardData(_canvas.model.selectedItem); } public function paste():Void{ - trace("testing paste"); //_canvas.setPastedItem(getClipboardData()); - } - - - - /** - * get the ddm from the canvas.. this method is here as the ddm used to be stored inthe application. - * returns the the Design Data Model - - public function getDesignDataModel():DesignDataModel{ - return _canvas.ddm; - } - */ - /** - * returns the the toolkit instance - */ - //public function getToolkit():Toolkit{ - // return _toolkit; - // } + } /** - * returns the the toolbar instance - */ - // public function getToolbar():Toolbar{ - // return _toolbar; - //} - - /** * returns the the canvas instance */ public function getMonitor():Monitor{ @@ -587,6 +545,42 @@ */ public function getLesson():Lesson{ return _lessons; + } + + public function set menubar(a:MovieClip) { + _menu_mc = a; + } + + public function get menubar():MovieClip { + return _menu_mc; + } + + public function set monitor(a:Monitor) { + _monitor = a; + } + + public function get monitor():Monitor { + return _monitor; + } + + public function get layout():LFLayout { + return _layout; + } + + public function set workspace(a:Workspace) { + _workspace = a; + } + + public function get workspace():Workspace { + return _workspace; + } + + public function get sequence():Sequence { + return _sequence; + } + + public function set sequence(s:Sequence) { + _sequence = s; } /** @@ -620,8 +614,7 @@ * */ static function get tooltip():MovieClip { - trace("tooltip called") - //Return root if valid otherwise raise a big system error as app. will not work without it + //Return root if valid otherwise raise a big system error as app. will not work without it if(_instance._tooltipContainer_mc != undefined) { return _instance._tooltipContainer_mc; } else { @@ -665,6 +658,23 @@ } /** + * Returns the Application root, use as _root would be used + * + * @usage Import authoring package and then use as root e.g. + * + * import org.lamsfoundation.lams.authoring; + * Application.root.attachMovie('myLinkageId','myInstanceName',depth); + */ + static function get containermc():MovieClip { + //Return root if valid otherwise raise a big system error as app. will not work without it + if(_instance._container_mc != undefined) { + return _instance._container_mc; + } else { + + } + } + + /** * Handles KEY presses for Application */ private function onKeyDown(){ Index: lams_central/src/flash/org/lamsfoundation/lams/monitoring/layout/DefaultLayoutManager.as =================================================================== diff -u --- lams_central/src/flash/org/lamsfoundation/lams/monitoring/layout/DefaultLayoutManager.as (revision 0) +++ lams_central/src/flash/org/lamsfoundation/lams/monitoring/layout/DefaultLayoutManager.as (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -0,0 +1,137 @@ +/*************************************************************************** + * 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 mx.containers.* +import mx.managers.* +import mx.utils.* +import org.lamsfoundation.lams.authoring.DesignDataModel +import org.lamsfoundation.lams.monitoring.Application +import org.lamsfoundation.lams.monitoring.mv.Monitor +import org.lamsfoundation.lams.monitoring.layout.* +import org.lamsfoundation.lams.common.ApplicationParent +import org.lamsfoundation.lams.common.Sequence +import org.lamsfoundation.lams.common.util.Proxy +import org.lamsfoundation.lams.common.util.Debugger +import org.lamsfoundation.lams.common.layout.ILayoutManager +import org.lamsfoundation.lams.common.layout.LFLayoutManager +import org.lamsfoundation.lams.common.layout.LFLayoutItem +import org.lamsfoundation.lams.common.ws.Workspace + +/** +* DefaultLayoutManager - Default Layout manager for an Application +* @author Mitchell Seaton +* +*/ +class DefaultLayoutManager extends LFLayoutManager { + + public static var COMPONENT_NO:Number = 5; + private var app:Application = null; + + //Constructor + function DefaultLayoutManager(name:String) { + super(name); + app = Application.getInstance(); + } + + public function setup(target:ApplicationParent) { + super.setup(target); + + setupUI(); + } + + private function setItem(obj) { + setEmptyLayoutItem(new LFLayoutItem(obj.classname, obj)); + } + + private function setupUI() { + var _sequence:Sequence = app.sequence; + var obj:Object = new Object(); + + if(_sequence != null || _sequence != undefined) { + obj = checkAvailability(_sequence); + } + + doMenuBar(obj.locked); + + + //WORKSPACE + app.workspace = new Workspace(); + setItem(app.workspace); + + + // MONITOR + doMonitor(obj.locked, obj.isEditingUser); + + } + + public function doMenuBar(isLocked:Boolean) { + // Menu Bar + app.menubar = Application.containermc.attachMovie('LFMenuBar','_menu_mc',Application.MENU_DEPTH, {env:'Monitoring',_x:0,_y:0, isLocked:isLocked}); + app.menubar.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.menubar); + } + + public function checkAvailability(_sequence:Sequence):Object { + var _ddm:DesignDataModel = null; + var _obj:Object = new Object(); + + _ddm = (_sequence.getLearningDesignModel() != null) ? _sequence.getLearningDesignModel() : _ddm; + + _obj.locked = _ddm.editOverrideLock; + _obj.isEditingUser = (_ddm.editOverrideUserID == _root.userID) ? true : false; + + return _obj; + } + + public function doMonitor(isLocked:Boolean, isEditingUser:Boolean) { + + var depth:Number = Application.root.getNextHighestDepth(); + app.monitor = new Monitor(Application.root,depth++,Application.MONITOR_X,Application.MONITOR_Y, Application.MONITOR_W, Application.MONITOR_H, isLocked, isEditingUser); + app.monitor.addEventListener('load',Proxy.create(app,app.UIElementLoaded)); + setItem(app.monitor); + } + + public function resize(w:Number, h:Number) { + + var someListener:Object = new Object(); + someListener.onMouseUp = function () { + + //Menu - only need to worry about width + if(app.menubar) + app.menubar.setSize(w,app.menubar._height); + + //MONITOR + app.monitor.setSize(w-15,h-app.monitor.y); + + } + + //Menu - only need to worry about width + if(app.menubar) + app.menubar.setSize(w,app.menubar._height); + + //MONITOR + app.monitor.setSize(w,h-app.monitor.y); + + } + +} \ No newline at end of file Index: lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/Monitor.as =================================================================== diff -u -r9f46456951a80c8926d8b6e209bc51864ce30aa2 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/Monitor.as (.../Monitor.as) (revision 9f46456951a80c8926d8b6e209bc51864ce30aa2) +++ lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/Monitor.as (.../Monitor.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -32,6 +32,7 @@ import org.lamsfoundation.lams.common.util.*; import org.lamsfoundation.lams.common.dict.*; import org.lamsfoundation.lams.common.Progress; +import org.lamsfoundation.lams.common.Sequence; import org.lamsfoundation.lams.common.* ; import mx.utils.*; @@ -51,9 +52,14 @@ private var monitorModel:MonitorModel; // View private var monitorView:MonitorView; + private var monitorLockView:MonitorLockView; private var monitorView_mc:MovieClip; + private var monitorLockView_mc:MovieClip; + private var locked:Boolean; + private var app:Application; + private var _sequence:Sequence; private var _ddm:DesignDataModel; private var _dictionary:Dictionary; @@ -67,50 +73,71 @@ private var _onOKCallBack:Function; - - /** * Monitor Constructor Function * * @usage * @return target_mc //Target clip for attaching view */ - public function Monitor(target_mc:MovieClip,depth:Number,x:Number,y:Number,w:Number,h:Number){ + public function Monitor(target_mc:MovieClip,depth:Number,x:Number,y:Number,w:Number,h:Number, locked:Boolean, isEditingUser:Boolean){ mx.events.EventDispatcher.initialize(this); // Set root movieclip _root_mc = target_mc; + this.locked = locked; app = Application.getInstance(); + //Create the model monitorModel = new MonitorModel(this); - _ddm = new DesignDataModel(); + monitorModel.locked = locked; + _dictionary = Dictionary.getInstance(); - - //Create the view - monitorView_mc = target_mc.createChildAtDepth("monitorView",DepthManager.kTop); - trace(monitorView_mc); + if(monitorView_mc == null || monitorView_mc == undefined) { + createNormalViewModel(x, y, w, h); + } - monitorView = MonitorView(monitorView_mc); + if(monitorModel.locked) { + createLockedViewModel(x, y, w, h, isEditingUser); + monitorView_mc._visible = false; + } + //Set the position by setting the model which will call update on the view + monitorModel.setPosition(x,y); + monitorModel.setSize(w,h); + monitorModel.initOrganisationTree(); - monitorView.init(monitorModel,undefined,x,y,w,h); + } + + private function createNormalViewModel(x:Number,y:Number,w:Number,h:Number) { + //Create the view + monitorView_mc = _root_mc.createChildAtDepth("monitorView",DepthManager.kTop); - monitorView.addEventListener('load',Proxy.create(this,viewLoaded)); - + monitorView = MonitorView(monitorView_mc); + //Register view with model to receive update events monitorModel.addObserver(monitorView); + + monitorView.init(monitorModel,undefined,x,y,w,h); + + monitorView.addEventListener('load',Proxy.create(this,viewLoaded)); + monitorView.addEventListener('tload',Proxy.create(this,tabsLoaded)); + monitorModel.addEventListener('learnersLoad',Proxy.create(this,onUserLoad)); monitorModel.addEventListener('staffLoad',Proxy.create(this,onUserLoad)); - //Set the position by setting the model which will call update on the view - monitorModel.setPosition(x,y); - monitorModel.setSize(w,h); - monitorModel.initOrganisationTree(); + } + + private function createLockedViewModel(x:Number,y:Number,w:Number,h:Number, isEditingUser:Boolean) { + monitorLockView_mc = _root_mc.createChildAtDepth("monitorLockView",DepthManager.kTop); + monitorLockView = MonitorLockView(monitorLockView_mc); - // load lesson from query parameter - loadLessonToMonitor(_root.lessonID); + //Register view with model to receive update events + monitorModel.addObserver(monitorLockView); + monitorLockView.init(monitorModel,undefined,x,y,w,h,isEditingUser); + monitorLockView.addEventListener('load',Proxy.create(this,viewLoaded)); + } /** @@ -125,12 +152,21 @@ Debugger.log('viewLoaded called',Debugger.GEN,'viewLoaded','Monitor'); if(evt.type=='load') { - dispatchEvent({type:'load',target:this}); + if((monitorLockView != null || !locked) && monitorView != null) + dispatchEvent({type:'load',target:this}); }else { //Raise error for unrecognized event } } + private function tabsLoaded(evt:Object){ + Debugger.log('tabsLoaded called',Debugger.GEN,'viewLoaded','Monitor'); + + monitorModel.setSequence(app.sequence); + saveDataDesignModel(null); + + } + /** * Opens the help->about dialog */ @@ -191,14 +227,19 @@ private function loadLessonToMonitor(lessonID:Number){ var callback:Function = Proxy.create(monitorModel,monitorModel.loadSequence); - Application.getInstance().getComms().getRequest('monitoring/monitoring.do?method=getLessonDetails&lessonID=' + String(lessonID) + '&userID=' + _root.userID,callback, false); + if(_sequence != null) { + monitorModel.setSequence(_sequence); + } else { + Application.getInstance().getComms().getRequest('monitoring/monitoring.do?method=getLessonDetails&lessonID=' + String(lessonID) + '&userID=' + _root.userID,callback, false); + } } public function closeAndRefresh() { ApplicationParent.extCall("closeWindowRefresh", null); } public function reloadLessonToMonitor(){ + _sequence = null; loadLessonToMonitor(_root.lessonID); } @@ -279,26 +320,31 @@ * @return Void */ public function openLearningDesign(seq:Sequence){ - trace('opening learning design...'+ seq.getLearningDesignID()); - var designID:Number = seq.getLearningDesignID(); + trace('opening learning design...'+ seq.learningDesignID); + var designID:Number = seq.learningDesignID; var callback:Function = Proxy.create(this,saveDataDesignModel); Application.getInstance().getComms().getRequest('authoring/author.do?method=getLearningDesignDetails&learningDesignID='+designID,callback, false); } - + private function saveDataDesignModel(learningDesignDTO:Object){ trace('returning learning design...'); trace('saving model data...'); var seq:Sequence = Sequence(monitorModel.getSequence()); + _ddm = new DesignDataModel(); // clear canvas clearCanvas(true); - _ddm.setDesign(learningDesignDTO); - seq.setLearningDesignModel(_ddm); - monitorModel.setIsSequenceSet (true) + if(learningDesignDTO != null) { _ddm.setDesign(learningDesignDTO); seq.setLearningDesignModel(_ddm); } + else if(seq.getLearningDesignModel() != null){ _ddm = seq.getLearningDesignModel(); } + else { openLearningDesign(seq); } + + monitorModel.setSequence(seq); + //monitorModel.setIsSequenceSet(true); monitorModel.broadcastViewUpdate('PROGRESS', null, monitorModel.getSelectedTab()); + } public function getContributeActivities(seqID:Number):Void{ @@ -434,6 +480,36 @@ getURL(url + target, '_blank'); } + public function setupEditOnFly(learningDesignID:Number) { + Debugger.log("Checking for permission to edit and setting up design with ID: " + learningDesignID,Debugger.GEN,'setupEditOnFly','Monitor'); + + var callback:Function = Proxy.create(this,readyEditOnFly, true); + + Application.getInstance().getComms().getRequest('eof/authoring/editLearningDesign?learningDesignID=' + learningDesignID,callback, false); + + } + + public function readyEditOnFly(r:Object) { + if(r instanceof LFError) { + r.showErrorAlert(); + return; + } + + Debugger.log("Check OK. Proceed with opening design.",Debugger.GEN,'setupEditOnFly','Monitor'); + + //var loader_url = Config.getInstance().serverUrl + "lams_preloader.swf?loadFile=lams_authoring.swf&loadLibrary=lams_authoring_library.swf&serverURL=" + Config.getInstance().serverUrl + "&userID=" + _root.userID + "&build=" + _root.build + "&lang=" + _root.lang + "&country=" + _root.country + "&langDate=" + _root.langDate + "&theme=" + _root.theme + "&uniqueID=undefined" + "&layout=" + ApplicationParent.EDIT_MODE + "&learningDesignID=" + monitorModel.getSequence().learningDesignID; + //Debugger.log("url: " + loader_url, Debugger.CRITICAL, 'openEditOnFly', 'MonitorView'); + + //JsPopup.getInstance().launchPopupWindow(loader_url , 'AuthoringWindow', 570, 796, true, true, false, false, false); + + var designID:Number = monitorModel.getSequence().learningDesignID; + if(designID != null) + ApplicationParent.extCall("openAuthorForEditOnFly", String(designID)); + else + ApplicationParent.extCall("openAuthorForEditOnFly", String(App.sequence.learningDesignID)); + + } + /** * * @usage Index: lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/MonitorController.as =================================================================== diff -u -r9f46456951a80c8926d8b6e209bc51864ce30aa2 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/MonitorController.as (.../MonitorController.as) (revision 9f46456951a80c8926d8b6e209bc51864ce30aa2) +++ lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/MonitorController.as (.../MonitorController.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -251,6 +251,17 @@ JsPopup.getInstance().launchPopupWindow(journals_url, 'JournalEntries', 570, 796, true, true, false, false, false); } + + private function openEditOnFly():Void{ + var fnOk:Function = Proxy.create(this, setupEditOnFly); + LFMessage.showMessageConfirm(Dictionary.getValue('al_confirm_live_edit'), fnOk, null); + } + + private function setupEditOnFly() { + Debugger.log('!opening edit on fly!',Debugger.CRITICAL,'openEditOnFly','org.lamsfoundation.lams.MonitorController'); + + _monitorModel.getMonitor().setupEditOnFly(_monitorModel.getSequence().learningDesignID); + } public function click(evt):Void{ trace(evt.target); @@ -275,6 +286,10 @@ }else if(tgt.indexOf("viewJournals_btn") != -1){ trace('you clicked journal entries button..'); openJournalEntries(); + }else if(tgt.indexOf("editFly_btn") != -1){ + openEditOnFly(); + }else if(tgt.indexOf("action_btn") != -1){ + _monitorModel.broadcastViewUpdate("TRIGGER_ACTION", null); } } Index: lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/MonitorLockView.as =================================================================== diff -u --- lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/MonitorLockView.as (revision 0) +++ lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/MonitorLockView.as (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -0,0 +1,272 @@ +/*************************************************************************** + * 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.monitoring.mv.* +import org.lamsfoundation.lams.monitoring.*; +import org.lamsfoundation.lams.common.dict.* +import org.lamsfoundation.lams.common.mvc.* + +import org.lamsfoundation.lams.common.Config; + +import org.lamsfoundation.lams.common.ApplicationParent; + +import mx.managers.* +import mx.containers.* +import mx.events.* +import mx.utils.* +import mx.controls.* + + +/** +*Monitoring Lock view for the Monitor +* Relects changes in the MonitorModel +*/ + +class org.lamsfoundation.lams.monitoring.mv.MonitorLockView extends AbstractView { + + private var _className = "MonitorLockView"; + + private var _app:Application; + private var _tm:ThemeManager; + + private var _monitorLockView_mc:MovieClip; + + //Background panel clip + private var bkg_pnl:MovieClip; + + // Message box + private var messageBox:MovieClip; + + // message and action labels + private var msg_lbl:Label; + private var action_lbl:Label; + + // buttons + private var action_btn:Button; + + // state variable + private var _enabled:Boolean; + private var _isChecking:Boolean; + + private var _monitorLockView:MonitorLockView; + private var _monitorModel:MonitorModel; + private var _monitorController:MonitorController; + + //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 MonitorLockView(){ + _monitorLockView = this; + _app = Application.getInstance(); + _tm = ThemeManager.getInstance(); + + action_btn = messageBox.action_btn; + msg_lbl = messageBox.msg_lbl; + action_lbl = messageBox.action_lbl; + + _isChecking = false; + + //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,x:Number,y:Number,w:Number,h:Number, enabled:Boolean){ + + super (m, c); + + MovieClipUtils.doLater(Proxy.create(this,draw,enabled)); + + } + + /** + * Recieved update events from the CanvasModel. Dispatches to relevent handler depending on update.Type + * @usage + * @param event + */ + public function update (o:Observable,infoObj:Object):Void{ + + var mm:MonitorModel = MonitorModel(o); + _monitorController = getController(); + + switch (infoObj.updateType){ + case 'POSITION' : + setPosition(mm); + break; + case 'SIZE' : + setSize(mm); + break; + case 'TRIGGER_ACTION' : + callAction(mm); + break; + case 'SEQUENCE' : + break; + case 'PROGRESS' : + checkAvailability(mm); + break; + default : + Debugger.log('unknown update type :' + infoObj.updateType,Debugger.CRITICAL,'update','org.lamsfoundation.lams.MonitorView'); + } + + } + + /** + * layout visual elements on the canvas on initialisation + */ + private function draw(enabled:Boolean){ + var mcontroller = getController(); + + _enabled = enabled; + action_btn.addEventListener("click",mcontroller); + + // display continue button? + //action_btn._visible = (enabled) ? true : false; + + setLabels(enabled); + setStyles(); + + dispatchEvent({type:'load',target:this}); + + } + + /** + * Get the CSSStyleDeclaration objects for each component and apply them + * directly to the instance + */ + private function setStyles():Void{ + var styleObj = _tm.getStyleObject('BGPanel'); + bkg_pnl.setStyle('styleName',styleObj); + + styleObj = _tm.getStyleObject('Label'); + msg_lbl.setStyle('styleName', styleObj); + action_lbl.setStyle('styleName', styleObj); + + styleObj = _tm.getStyleObject('Button'); + action_btn.setStyle('styleName', styleObj); + } + + private function setLabels(enabled:Boolean):Void{ + if(enabled) { + msg_lbl.text = Dictionary.getValue("ls_continue_lbl", [_app.sequence.getSequenceName(), _app.sequence.getLearningDesignModel().editOverrideUserFullName]); + action_lbl.text = Dictionary.getValue("ls_continue_action_lbl", [Dictionary.getValue("continue_btn")]); + action_btn.label = Dictionary.getValue("continue_btn"); + } else { + msg_lbl.text = Dictionary.getValue("ls_locked_msg_lbl", [_app.sequence.getSequenceName(), _app.sequence.getLearningDesignModel().editOverrideUserFullName]) + action_lbl.text = ""; + action_btn.label = Dictionary.getValue("check_avail_btn"); + } + } + + /** + * Sets the size of the canvas on stage, called from update + */ + private function setSize(mm:MonitorModel):Void{ + bkg_pnl.setSize(Stage.width,Stage.height); + + var offset:Number = 8; + + // adjust bubble width + messageBox.messageBubble.messageBubbleRect._width = (msg_lbl._width < action_lbl._width) ? action_lbl._width + offset : msg_lbl._width + offset; + + // position message box in center + messageBox._x = (bkg_pnl._width/2) - (messageBox._width/2); + messageBox._y = (bkg_pnl._height/2) - (messageBox._height/2); + + } + + /** + * Sets the position of the canvas on stage, called from update + * @param cm Canvas model object + */ + private function setPosition(mm:MonitorModel):Void{ + var p:Object = mm.getPosition(); + + this._x = p.x; + this._y = p.y - Application.MONITOR_Y; + } + + private function callAction(mm:MonitorModel):Void{ + + if(_enabled) { + // continue action - open live edit + mm.getMonitor().readyEditOnFly(true); + } else { + // check availabilty action - re-get model and check + action_lbl.text = Dictionary.getValue("msg_bubble_check_action_lbl"); // "Checking..." + _isChecking = true; + mm.getMonitor().reloadLessonToMonitor(); + } + } + + private function checkAvailability(mm:MonitorModel):Void { + var app:Application = Application.getInstance(); + var obj:Object = app.layout.manager.checkAvailability(mm.getSequence()); + + Debugger.log("isLocked: " + obj.locked + " isEditingUser: " + obj.isEditingUser, Debugger.CRITICAL, "checkAvailability", "MonitorLockView"); + if(!obj.locked) { + // reload monitor + Debugger.log("Now unlocked, Reloading UI" + obj.isEditingUser, Debugger.CRITICAL, "checkAvailability", "MonitorLockView"); + app.sequence = mm.getSequence(); + + mm.getMonitor().getMV()._visible = true; + LFMenuBar.getInstance().setVisible(true); + destroy(); + } else if(obj.locked && !obj.isEditingUser && _isChecking) { + action_lbl.text = Dictionary.getValue("msg_bubble_failed_action_lbl"); // "Unavailable. Try Again."; + _isChecking = false; + } + } + + /** + * Overrides method in abstract view to ensure cortect type of controller is returned + * @usage + * @return CanvasController + */ + public function getController():MonitorController{ + var c:Controller = super.getController(); + return MonitorController(c); + } + + /* + * Returns the default controller for this view. + */ + public function defaultController (model:Observable):Controller { + return new MonitorController(model); + } + + public function destroy() { + this.removeMovieClip(); + } + +} \ No newline at end of file Index: lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/MonitorModel.as =================================================================== diff -u -r0d9ed62ea052e803ebcd6499ab55cfcffcc5ebac -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/MonitorModel.as (.../MonitorModel.as) (revision 0d9ed62ea052e803ebcd6499ab55cfcffcc5ebac) +++ lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/MonitorModel.as (.../MonitorModel.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -24,7 +24,8 @@ import org.lamsfoundation.lams.monitoring.*; import org.lamsfoundation.lams.monitoring.mv.*; import org.lamsfoundation.lams.authoring.Activity; -import org.lamsfoundation.lams.authoring.Transition; +import org.lamsfoundation.lams.authoring.Transition +import org.lamsfoundation.lams.authoring.GateActivity;; import org.lamsfoundation.lams.common.Sequence; import org.lamsfoundation.lams.common.util.Observable; import org.lamsfoundation.lams.common.util.*; @@ -62,13 +63,14 @@ private var _isLearnerProgressChanged:Boolean; private var _isSequenceSet:Boolean = false; private var _isDragging:Boolean; + private var _isLocked:Boolean; private var monitor_y:Number; private var monitor_x:Number; private var ttHolder:MovieClip; private var _monitor:Monitor; - private var _selectedItem:Object; // the currently selected thing - could be activity, transition etc. + private var _selectedItem:Object; // the currently selected thing - could be activity, transition etc. private var _prevSelectedItem:Object; - + // add model data private var _activeSeq:Sequence; private var _lastSelectedSeq:Sequence; @@ -133,32 +135,30 @@ // add get/set methods public function setSequence(activeSeq:Sequence){ - - //if(_activeSeq == null){ - //setLastSelectedSequence(activeSeq); - //} else { - //setLastSelectedSequence(_activeSeq); - //} - + Debugger.log("Active seq: " + activeSeq.ID + " ddm: " + activeSeq.getLearningDesignModel(), Debugger.CRITICAL, "setSequence", "MonitorModel"); _activeSeq = activeSeq; - trace("value of isSetSequence (outside if): "+getIsSequenceSet()) - if (!getIsSequenceSet()){ - trace("value of isSetSequence (inside if): "+getIsSequenceSet()) - _monitor.openLearningDesign(_activeSeq) - } + var seq:Sequence = Sequence(_activeSeq); - if (seq.getLearningDesignModel() == null){ - seq.setLearningDesignModel(getMonitor().ddm); + if (seq.getLearningDesignModel() != null){ + setIsSequenceSet(true); + + var obj:Object = app.layout.manager.checkAvailability(_activeSeq); + locked = obj.locked; + } else { + getMonitor().openLearningDesign(_activeSeq); } - //_monitor.getContributeActivities(_activeSeq.getSequenceID()); - setChanged(); - + + + setChanged(); + + // if seq locked for edit TODO //send an update infoObj = {}; infoObj.updateType = "SEQUENCE"; infoObj.tabID = getSelectedTab(); notifyObservers(infoObj); + } public function getSequence():Sequence{ @@ -172,9 +172,10 @@ private function getIsSequenceSet():Boolean{ return _isSequenceSet; } - public function loadSequence(seqDTO:Object):Boolean{ - // create new Sequence from DTO - var seq:Sequence = new Sequence(seqDTO); + + public function loadSequence(_seq:Object):Boolean{ + // create new Sequence from DTO + var seq:Sequence = new Sequence(_seq); setSequence(seq); return true; @@ -209,13 +210,13 @@ //clear the old lot of Learner Progress data _learnersProgress.clear(); learnerTabActArr = new Array(); - trace('adding learning seq for length' + learnerProg.length); learnerTabActArr = learnerProg; for(var i=0; i 0 || ddm_activity.parentUIID > 0){ trace("this is Child") - }else { - broadcastViewUpdate("DRAW_ACTIVITY",ddm_activity, tabID, drawLearner); + } else { + broadcastViewUpdate("DRAW_ACTIVITY", ddm_activity, tabID, drawLearner); } } //now check the transitions: @@ -491,14 +483,11 @@ //loop through for(var i=0;i"; LSDescription_lbl.text = String(s.description).substr(0, limit); if(s.description.length > limit) { LSDescription_lbl.text += "..."; } - + sessionStatus_txt.text = showStatus(s.state); numLearners_txt.text = String(s.noStartedLearners) + " " + Dictionary.getValue('ls_of_text')+" "+String(s.noPossibleLearners); trace("current logged in learners are: "+mm.allLearnersProgress.length) @@ -774,6 +768,8 @@ } public function setupLabels(){ + //max_lbl.text = Dictionary.getValue('pi_max_act'); + //populate the synch type combo: status_lbl.text = ""+Dictionary.getValue('ls_status_lbl')+""; learner_lbl.text = ""+Dictionary.getValue('ls_learners_lbl')+""; @@ -794,23 +790,23 @@ schedule_btn.label = Dictionary.getValue('ls_manage_schedule_btn'); start_btn.label = Dictionary.getValue('ls_manage_start_btn'); - taskManager.border = true; - taskManager.borderColor = 0x003366; + //_lessonStateArr = ["CREATED", "NOT_STARTED", "STARTED", "SUSPENDED", "FINISHED", "ARCHIVED", "DISABLED"]; + taskManager.border = true + taskManager.borderColor = 0x003366; taskManager_lbl.text = Dictionary.getValue('ls_tasks_txt'); taskManager_lbl._x = taskManager._x + 2; taskManager_lbl._y = taskManager._y; - lessonManager.border = true; + lessonManager.border = true lessonManager.borderColor = 0x003366; - lessonManager_lbl.text = Dictionary.getValue('ls_manage_txt'); lessonManager_lbl._x = lessonManager._x + 2; lessonManager_lbl._y = lessonManager._y; - taskManager.background = true; + taskManager.background = true taskManager.backgroundColor = 0xEAEAEA; - lessonManager.background = true; + lessonManager.background = true lessonManager.backgroundColor = 0xEAEAEA; delete this.onEnterFrame; @@ -873,6 +869,7 @@ // Check box label learner_expp_cb_lbl.setStyle('styleName', styleObj); + //SMALL LABELS styleObj = _tm.getStyleObject('PIlabel'); manageDate_lbl.setStyle('styleName',styleObj); @@ -908,7 +905,7 @@ } - private function setMenu():Void{ + private function setMenu(b:Boolean):Void{ var fm:Menu = LFMenuBar.getInstance().fileMenu; fm.setMenuItemEnabled(fm.getMenuItemAt(1), editClass_btn.enabled); fm.setMenuItemEnabled(fm.getMenuItemAt(2), start_btn.visible); Index: lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/MonitorTabView.as =================================================================== diff -u -r75861a1ca05723c73c11fda63c393c23c90b1e4a -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/MonitorTabView.as (.../MonitorTabView.as) (revision 75861a1ca05723c73c11fda63c393c23c90b1e4a) +++ lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/MonitorTabView.as (.../MonitorTabView.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -48,7 +48,7 @@ * Reflects changes in the MonitorModel */ -class org.lamsfoundation.lams.monitoring.mv.tabviews.MonitorTabView extends CommonCanvasView{ +class org.lamsfoundation.lams.monitoring.mv.tabviews.MonitorTabView extends CommonCanvasView { public static var _tabID:Number = 1; private var _className = "MonitorTabView"; //constants: @@ -140,13 +140,13 @@ highlightActivity(mm); break; case 'TABCHANGE' : - //trace("isChanged value in monitorModel is: "+mm.getIsProgressChanged()) - if (infoObj.tabID == _tabID){ + if (infoObj.tabID == _tabID && !mm.locked){ setStyles(); //this._visible = true; mm.getMonitor().getMV().getMonitorSequenceScp()._visible = true; hideMainExp(mm); mm.broadcastViewUpdate("JOURNALSSHOWHIDE", false); + trace("TabID for Selected tab is (TABCHANGE): "+infoObj.tabID) if (mm.activitiesDisplayed.isEmpty() || mm.transitionsDisplayed.isEmpty()){ mm.getMonitor().openLearningDesign(mm.getSequence()); @@ -163,8 +163,6 @@ } } - - LFMenuBar.getInstance().setDefaults(); }else { @@ -173,47 +171,45 @@ } break; case 'PROGRESS' : - if (infoObj.tabID == _tabID){ + if (infoObj.tabID == _tabID && !mm.locked){ mm.getMonitor().getProgressData(mm.getSequence()) } break; case 'RELOADPROGRESS' : - if (infoObj.tabID == _tabID){ - trace("called Reload progress") + if (infoObj.tabID == _tabID && !mm.locked){ reloadProgress(true) } break; case 'DRAW_ACTIVITY' : - if (infoObj.tabID == _tabID){ - trace("DRAWING_ACTIVITY") + if (infoObj.tabID == _tabID && !mm.locked){ drawActivity(infoObj.data, mm) - //MovieClipUtils.doLater(Proxy.create(this,draw)); } break; + case 'HIDE_ACTIVITY' : + if (infoObj.tabID == _tabID && !mm.locked){ + hideActivity(infoObj.data, mm) + + } + break; case 'DRAW_TRANSITION' : - if (infoObj.tabID == _tabID){ - trace("DRAWING_Transition") + if (infoObj.tabID == _tabID && !mm.locked){ drawTransition(infoObj.data, mm) } + break; + case 'HIDE_TRANSITION' : + if (infoObj.tabID == _tabID && !mm.locked){ + hideTransition(infoObj.data, mm) + } + break; case 'REMOVE_ACTIVITY' : - //if (infoObj.tabID == _tabID){ - trace("REMOVE_ACTIVITY") removeActivity(infoObj.data, mm) - //MovieClipUtils.doLater(Proxy.create(this,draw)); - //} break; - case 'REMOVE_TRANSITION' : - //if (infoObj.tabID == _tabID){ - trace("REMOVE_ACTIVITY") removeTransition(infoObj.data, mm) - //MovieClipUtils.doLater(Proxy.create(this,draw)); - //} break; - case 'DRAW_DESIGN' : - if (infoObj.tabID == _tabID){ + if (infoObj.tabID == _tabID && !mm.locked){ setStyles(); setSize(mm); drawDesignCalled = "called"; @@ -270,7 +266,7 @@ var learner:Object = new Object(); learner = mm.allLearnersProgress[i] trace("Learner passed is: "+learner.getFullName()) - var temp_mc = _activityLayer_mc.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName(), _activityLayer_mc.getNextHighestDepth(),{learner:learner, _monitorController:mc, _x:learner_X+(finishedLearners*10), _y:(endGate_mc._y+learner_Y), _hasPlus: false}); + var temp_mc = _activityLayer_mc.attachMovie("learnerIcon", "learnerIcon"+learner.getUserName(), _activityLayer_mc.getNextHighestDepth(),{learner:learner, _monitorController:mc, _x:learner_X+(finishedLearners*10), _y:(endGate_mc._y+learner_Y)}); finishedLearnersList.push(temp_mc); var learnerIcon_mc = _activityLayer_mc["learnerIcon"+learner.getUserName()] learnerIcon_mc.init(); @@ -299,9 +295,10 @@ private function hideMainExp(mm:MonitorModel):Void{ //var mcontroller = getController(); - mm.broadcastViewUpdate("EXPORTSHOWHIDE", true) + mm.broadcastViewUpdate("EXPORTSHOWHIDE", true); + mm.broadcastViewUpdate("EDITFLYSHOWHIDE", true); } - + /** * Reloads the learner Progress and * @Param isChanged Boolean Value to pass it to setIsProgressChanged in monitor model so that it sets it to true if refresh button is clicked and sets it to fasle as soon as latest data is loaded and design is redrawn. @@ -375,48 +372,68 @@ * @return Boolean - successfullit */ private function drawActivity(a:Activity,mm:MonitorModel):Boolean{ - Debugger.log('The activity:'+a.title+','+a.activityID+' is of unknown type, it cannot be drawn',Debugger.CRITICAL,'drawActivity','MonitorTabView'); - var s:Boolean = false; + var s:Boolean = false; var mtv = MonitorTabView(this); - var mc = getController(); + var newActivity_mc = null; + Debugger.log("activityTypeID: " + a.activityTypeID,Debugger.CRITICAL,'drawActivity','MonitorTabView'); + //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,_monitorController:mc,_monitorTabView:mtv, _module:"monitoring"}); - } - if (a.isGateActivity()){ - var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasGateActivity",DepthManager.kTop,{_activity:a,_monitorController:mc,_monitorTabView:mtv, _module:"monitoring"}); - } - - if(a.activityTypeID==Activity.PARALLEL_ACTIVITY_TYPE){ - //get the children + newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasActivity",DepthManager.kTop,{_activity:a,_monitorController:mc,_monitorTabView:mtv, _module:"monitoring"}); + } else if (a.isGateActivity()){ + newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasGateActivity",DepthManager.kTop,{_activity:a,_monitorController:mc,_monitorTabView:mtv, _module:"monitoring"}); + } else if(a.activityTypeID==Activity.PARALLEL_ACTIVITY_TYPE){ var children:Array = mm.getMonitor().ddm.getComplexActivityChildren(a.activityUIID); - var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasParallelActivity",DepthManager.kTop,{_activity:a,_children:children,_monitorController:mc,_monitorTabView:mtv,fromModuleTab:"monitorMonitorTab"}); - } - if(a.activityTypeID==Activity.OPTIONAL_ACTIVITY_TYPE){ + newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasParallelActivity",DepthManager.kTop,{_activity:a,_children:children,_monitorController:mc,_monitorTabView:mtv,fromModuleTab:"monitorMonitorTab"}); + } else if(a.activityTypeID==Activity.OPTIONAL_ACTIVITY_TYPE){ var children:Array = mm.getMonitor().ddm.getComplexActivityChildren(a.activityUIID); - var newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasOptionalActivity",DepthManager.kTop,{_activity:a,_children:children,_monitorController:mc,_monitorTabView:mtv,fromModuleTab:"monitorMonitorTab"}); - }else{ - //Debugger.log('The activity:'+a.title+','+a.activityUIID+' is of unknown type, it cannot be drawn',Debugger.CRITICAL,'drawActivity','MonitorTabView'); + newActivity_mc = _activityLayer_mc.createChildAtDepth("CanvasOptionalActivity",DepthManager.kTop,{_activity:a,_children:children,_monitorController:mc,_monitorTabView:mtv,fromModuleTab:"monitorMonitorTab"}); + } else{ + Debugger.log('The activity:'+a.title+','+a.activityUIID+' is of unknown type, it cannot be drawn',Debugger.CRITICAL,'drawActivity','MonitorTabView'); } var actItems:Number = mm.activitiesDisplayed.size() - if (actItems < mm.getActivityKeys().length){ - trace("total activities: "+mm.getActivityKeys().length) + + if (actItems < mm.getActivityKeys().length && newActivity_mc != null){ mm.activitiesDisplayed.put(a.activityUIID,newActivity_mc); } + if (actItems == mm.getActivityKeys().length){ //setSize(mm); } + mm.getMonitor().getMV().getMonitorSequenceScp().redraw(true); s = true; return s; } /** + * Add to canvas stage but keep hidden from view. + * + * @usage + * @param a + * @param cm + * @return true if successful + */ + + private function hideActivity(a:Activity, mm:MonitorModel):Boolean { + if (a.isSystemGateActivity()){ + var newActivityObj = new Object(); + newActivityObj.activity = a; + + mm.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; + } + + /** * Draws a transition on the Monitor Tab View. * @usage * @param t The transition to draw @@ -443,6 +460,28 @@ } /** + * 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, mm:MonitorModel):Boolean{ + var mtv = MonitorTabView(this); + var mc = getController(); + + var newTransition_mc:MovieClip = _transitionLayer_mc.createChildAtDepth("CanvasTransition",DepthManager.kTop,{_transition:t,_monitorController:mc,_monitorTabView:mtv, _visible:false}); + + mm.transitionsDisplayed.put(t.transitionUIID,newTransition_mc); + Debugger.log('drawn (hidden) a transition:'+t.transitionUIID+','+newTransition_mc,Debugger.GEN,'hideTransition','CanvasView'); + + return true; + } + + + /** * Get the CSSStyleDeclaration objects for each component and apply them * directly to the instance */ Fisheye: Tag d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 refers to a dead (removed) revision in file `lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/views/MonitorLearnerView.as'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 refers to a dead (removed) revision in file `lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/views/MonitorLessonView.as'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 refers to a dead (removed) revision in file `lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/views/MonitorMonitorView.as'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 refers to a dead (removed) revision in file `lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/views/MonitorTodoView.as'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/src/flash/org/lamsfoundation/lams/common/ApplicationParent.as =================================================================== diff -u -r3889df0718cb8f4a1812cb636e717bccf003bd58 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_common/src/flash/org/lamsfoundation/lams/common/ApplicationParent.as (.../ApplicationParent.as) (revision 3889df0718cb8f4a1812cb636e717bccf003bd58) +++ lams_common/src/flash/org/lamsfoundation/lams/common/ApplicationParent.as (.../ApplicationParent.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -48,7 +48,10 @@ public static var SERIAL_NO = "0000-0000-0000-0001-AAAA"; public static var FLASH_TOOLSIGNATURE_GATE:String = "lagat11"; public static var FLASH_TOOLSIGNATURE_GROUP:String = "lagrp11"; - + + public static var NORMAL_MODE:String = "author"; // Normal Operation Mode + public static var EDIT_MODE:String = "editonfly"; // Edit-On-The-Fly Mode + private var _comms:Communication; private var _themeManager:ThemeManager; private var _dictionary:Dictionary; @@ -98,12 +101,10 @@ public static function extCall(method:String, param:String):Void { var isMac:Boolean = (_root.isMac == "true")?true:false; - var versionSplit = getVersion().split(",", 2); - var v:Number = Number(versionSplit[0].substr(versionSplit[0].length - 1, 1)); - - Debugger.log("ExtCall:: method: " + method + " :: isMac: " + isMac + " :: version: " + getVersion() + ":: v: " + v.toString() , Debugger.GEN, "extCall", "ApplicationParent"); - - if((v <= 8) && (isMac)) { + var versionNo:Number = _root.getSWFVersion(); + Debugger.log("ExtCall:: method: " + method + " :: isMac: " + isMac, Debugger.GEN, "extCall", "ApplicationParent"); + + if((versionNo <= 8) && (isMac)) { Debugger.log("using Javascript method", Debugger.GEN, "extCall", "ApplicationParent"); getURL("javascript: " + method + "(" + param + ")"); } else { Index: lams_common/src/flash/org/lamsfoundation/lams/common/Sequence.as =================================================================== diff -u -r1a175bfe9b4bc5309f3319accf2068eba3a9e902 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_common/src/flash/org/lamsfoundation/lams/common/Sequence.as (.../Sequence.as) (revision 1a175bfe9b4bc5309f3319accf2068eba3a9e902) +++ lams_common/src/flash/org/lamsfoundation/lams/common/Sequence.as (.../Sequence.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -78,14 +78,16 @@ private var _licenseID:Number; private var _licenseText:String; - private var _learningDesignModel:DesignDataModel; - - private var _progress:Progress; - + private var _learningDesignModel:DesignDataModel; + private var _progress:Progress; private var _active:Boolean; - - private var _learnerExportAvailable:Boolean; + private var _learnerExportAvailable:Boolean; + private var _locked_for_edit:Boolean; + //Defined so compiler can 'see' events added at runtime by EventDispatcher + private var dispatchEvent:Function; + public var addEventListener:Function; + public var removeEventListener:Function; /** * Constructor. @@ -97,7 +99,16 @@ _progress = null; if(dto != null){ populateFromDTO(dto); - } + } + + mx.events.EventDispatcher.initialize(this); + } + + /** + * event broadcast when a new language is loaded + */ + public function broadcastLoad(){ + dispatchEvent({type:'load',target:this}); } /** @@ -114,7 +125,9 @@ public function populateFromDTO(dto:Object){ trace('populating seq object for start date:' + dto.scheduleStartDate); Debugger.log('populating seq schedule date:'+dto.scheduleStartDate,Debugger.CRITICAL,'populateFromDTO','Sequence'); - Debugger.log('populating seq start date:'+dto.startDateTime,Debugger.CRITICAL,'populateFromDTO','Sequence'); + Debugger.log('populating seq start date:'+dto.startDateTime,Debugger.CRITICAL,'populateFromDTO','Sequence'); + Debugger.log('populating seq locked for eidt:'+dto.lockedForEdit,Debugger.CRITICAL,'populateFromDTO','Sequence'); + _seqID = dto.lessonID; _seqName = dto.lessonName; _seqDescription = dto.lessonDescription; @@ -142,7 +155,9 @@ _licenseID = dto.licenseID; _licenseText = dto.licenseText; - _learnerExportAvailable = dto.learnerExportAvailable; + _learnerExportAvailable = dto.learnerExportAvailable; + + _locked_for_edit = dto.lockedForEdit; } @@ -257,17 +272,18 @@ } - public function getLearningDesignID():Number{ - return _learningDesignID; - } + //public function getLearningDesignID():Number{ + // return _learningDesignID; + //} public function get learningDesignID():Number{ return _learningDesignID; } public function setLearningDesignModel(learningDesignModel:DesignDataModel){ _learningDesignModel = learningDesignModel; - + + broadcastLoad(); } public function getLearningDesignModel():DesignDataModel{ @@ -470,6 +486,14 @@ public function get learnerExportAvailable():Boolean { return _learnerExportAvailable; } + + public function set locked_for_edit(b:Boolean) { + _locked_for_edit = b; + } + + public function get locked_for_edit():Boolean { + return _locked_for_edit; + } function get className():String{ return 'Sequence'; Index: lams_common/src/flash/org/lamsfoundation/lams/common/layout/ILayoutManager.as =================================================================== diff -u --- lams_common/src/flash/org/lamsfoundation/lams/common/layout/ILayoutManager.as (revision 0) +++ lams_common/src/flash/org/lamsfoundation/lams/common/layout/ILayoutManager.as (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -0,0 +1,69 @@ +/*************************************************************************** + * 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.ApplicationParent; +import org.lamsfoundation.lams.common.layout.*; + +/** + * Specifies the minimum services that a layout manager must provide + */ +interface org.lamsfoundation.lams.common.layout.ILayoutManager { + + /** + * Sets the target. + * + * + */ + + public function setup(target:ApplicationParent):Void; + + public function getLayoutName():String; + + /** + * Adds a layout item (movieclip component) to the array. + */ + public function addLayoutItem(a:LFLayoutItem); + + public function setEmptyLayoutItem(a:LFLayoutItem); + + public function completedLayout():Boolean; + + /** + * Removes a layout item (movieclip component) from the array. + */ + public function removeLayoutItem(a:LFLayoutItem); + + + /** + * Moves the position of the layout item. + * @param x + * @param y + */ + + public function moveLayoutItem(a:Object, x:Number, y:Number); + + + public function resize(w:Number, h:Number); + + //public function completed():Boolean; +} \ No newline at end of file Index: lams_common/src/flash/org/lamsfoundation/lams/common/layout/LFLayout.as =================================================================== diff -u --- lams_common/src/flash/org/lamsfoundation/lams/common/layout/LFLayout.as (revision 0) +++ lams_common/src/flash/org/lamsfoundation/lams/common/layout/LFLayout.as (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -0,0 +1,91 @@ +/*************************************************************************** + * 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 mx.containers.* +import mx.managers.* +import mx.utils.* +import org.lamsfoundation.lams.common.ApplicationParent +import org.lamsfoundation.lams.common.layout.* +import org.lamsfoundation.lams.common.util.* + +/** +* LFLayout - Layout manager for an Application +* @author Mitchell Seaton +* +*/ +class LFLayout{ + + private var _target:ApplicationParent; + private var _manager:ILayoutManager; + + //Constructor + function LFLayout(target:ApplicationParent, manager:ILayoutManager) { + _target = target; + + if(manager != null) { + _manager = manager; + } else { + _manager = ILayoutManager(new LFLayoutManager()); + } + + } + + public function init():Void { + Debugger.log("Setting up Layout Manager: " + _manager.getLayoutName(), Debugger.GEN, "init", "LFLayout"); + _manager.setup(_target); + } + + /** + * @return Return the target Application. + */ + + public function get target():ApplicationParent { + return _target; + } + + /** + * @param a Set the target Application. + */ + + public function set target(a:ApplicationParent) { + _target = a; + } + + /** + * @return Return the target Application. + */ + + public function get manager():ILayoutManager { + return _manager; + } + + /** + * @param a Set the target Application. + */ + + public function set manager(a:ILayoutManager) { + _manager = a; + } + + +} \ No newline at end of file Index: lams_common/src/flash/org/lamsfoundation/lams/common/layout/LFLayoutItem.as =================================================================== diff -u --- lams_common/src/flash/org/lamsfoundation/lams/common/layout/LFLayoutItem.as (revision 0) +++ lams_common/src/flash/org/lamsfoundation/lams/common/layout/LFLayoutItem.as (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -0,0 +1,92 @@ +/*************************************************************************** + * 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 mx.containers.* +import mx.managers.* +import mx.utils.* + +import org.lamsfoundation.lams.common.layout.* + +/** +* LFLayoutItem - Layout item (MC component) used in a LFLayout +* @author Mitchell Seaton +* +*/ +class LFLayoutItem{ + + private var _component:Object; + private var _componentName:String; + + //Constructor + function LFLayoutItem(name:String, component:Object) { + + if(component instanceof MovieClip) { + _component = component; + } else { + _component = component.view; + } + + componentName = name; + } + + /** + * @return Return the MC or Class component. + */ + + public function get component():Object { + return _component; + } + + /** + * @param a Set the MC component. + */ + + public function set component(a:Object) { + _component = a; + } + + public function get componentName():String { + return _componentName; + } + + public function set componentName(a:String) { + _componentName = a; + } + + public function get x():Number { + return _component._x; + } + + public function get y():Number { + return _component._y; + } + + public function get depth():Number { + return _component.getDepth(); + } + + public function move(x:Number, y:Number) { + _component._x = x; + _component._y = y; + } +} \ No newline at end of file Index: lams_common/src/flash/org/lamsfoundation/lams/common/layout/LFLayoutManager.as =================================================================== diff -u --- lams_common/src/flash/org/lamsfoundation/lams/common/layout/LFLayoutManager.as (revision 0) +++ lams_common/src/flash/org/lamsfoundation/lams/common/layout/LFLayoutManager.as (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -0,0 +1,127 @@ +/*************************************************************************** + * 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 mx.containers.* +import mx.managers.* +import mx.utils.* + +import org.lamsfoundation.lams.common.ApplicationParent +import org.lamsfoundation.lams.common.util.* +import org.lamsfoundation.lams.common.layout.* + +/** +* LFLayoutManager - Layout manager for an Application +* @author Mitchell Seaton +* +*/ +class LFLayoutManager implements ILayoutManager{ + + private var _target:ApplicationParent; + private var _layoutName:String; + private var _layoutItems:Hashtable; + + //Constructor + function LFLayoutManager(name:String) { + _target = null; + if(name) + _layoutName = name; + + _layoutItems = new Hashtable("_layoutItems"); + } + + public function setup(target:ApplicationParent):Void { + _target = target; + } + + /** + * @return Return the target Application instance. + */ + + public function get target():ApplicationParent { + return _target; + } + + /** + * @param a Set the target Application instance. + */ + + public function set target(a:ApplicationParent) { + _target = a; + } + + /** + * @return Return the layoutItems collection. + */ + + public function get layoutItems():Hashtable { + return _layoutItems; + } + + /** + * @param a Set the layoutItems. + */ + + public function set layoutItems(a:Hashtable) { + _layoutItems = a; + } + + public function addLayoutItem(a:LFLayoutItem) { + var item:LFLayoutItem = _layoutItems.get(a.componentName); + if(item != null) { + if(item.component == null) _layoutItems.put(a); + } + } + + public function completedLayout():Boolean { + var items = _layoutItems.values(); + for(var i=0; i< items.length; i++) { + if(items[i] == null) return false; + } + return true; + } + + public function setEmptyLayoutItem(a:LFLayoutItem) { + Debugger.log("Adding Layout Item: " + a.componentName, Debugger.GEN, "addLayoutItem", "LFLayoutManager"); + _layoutItems.put(a.componentName, null); + } + + public function removeLayoutItem(a:LFLayoutItem) { + _layoutItems.remove(a); + } + + public function moveLayoutItem(a:Object, x:Number, y:Number) { + var _item = _layoutItems.get(a); + _item.x = x; + _item.y = y; + } + + public function getLayoutItem(a:Object) { + _layoutItems.get(a); + } + + public function getLayoutName():String { + return _layoutName; + } + + public function resize(w:Number, h:Number) { } +} \ No newline at end of file Index: lams_common/src/flash/org/lamsfoundation/lams/common/mvc/AbstractView.as =================================================================== diff -u -r735adeb5d2ea7849b86d4991480630c4613fadec -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_common/src/flash/org/lamsfoundation/lams/common/mvc/AbstractView.as (.../AbstractView.as) (revision 735adeb5d2ea7849b86d4991480630c4613fadec) +++ lams_common/src/flash/org/lamsfoundation/lams/common/mvc/AbstractView.as (.../AbstractView.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -23,6 +23,8 @@ import org.lamsfoundation.lams.common.util.*; import org.lamsfoundation.lams.common.mvc.*; +import org.lamsfoundation.lams.authoring.cv.*; +import org.lamsfoundation.lams.authoring.Activity; /** * Provides basic services for the "view" of @@ -92,6 +94,8 @@ * update() method. Subclasses of AbstractView will provide * a concrete implementation for this method. */ - public function update(o:Observable, infoObj:Object):Void { - } + public function update(o:Observable, infoObj:Object):Void { + } + + } \ No newline at end of file Index: lams_common/src/flash/org/lamsfoundation/lams/common/ui/LFMenuBar.as =================================================================== diff -u -rb92c9032ebbd455eb0d4601d29ae2f8f6e8468e2 -rd502e6d1f34632a757dd6bda2daf8b0c07e1c8a5 --- lams_common/src/flash/org/lamsfoundation/lams/common/ui/LFMenuBar.as (.../LFMenuBar.as) (revision b92c9032ebbd455eb0d4601d29ae2f8f6e8468e2) +++ lams_common/src/flash/org/lamsfoundation/lams/common/ui/LFMenuBar.as (.../LFMenuBar.as) (revision d502e6d1f34632a757dd6bda2daf8b0c07e1c8a5) @@ -47,7 +47,9 @@ private var go_menu:Menu; private var tools_menu:Menu; private var help_menu:Menu; - private var env:String; + private var env:String; + private var isLocked:Boolean; + private var layout:String; private var view_xml:XML; // to illustrate creating a menu with xml private var app:ApplicationParent; @@ -76,7 +78,6 @@ _dictionary = Dictionary.getInstance(); _dictionary.addEventListener('init',Delegate.create(this,setupMenuItems)); } - /** * Retrieves an instance of the LFMenuBar singleton */ @@ -116,6 +117,8 @@ * Set up the actual menu items */ private function setupMenuItems(){ + + setVisible(!isLocked); //trace("Called From: "+env) if (env != "Monitoring"){ @@ -128,17 +131,29 @@ // "new" is the linkage id of the movie clip to be used as the icon for the "New" menu item. //file_menu.addMenuItem({label:"New", instanceName:"newInstance", icon:"new"}); //_global.breakpoint(); - file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_new'), instanceName:"newItem"}); - file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_open'), instanceName:"openItem"}); - file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_recover'), instanceName:"recoverItem", enabled:false}); - //file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_close'), instanceName:"closeItem"}); - file_menu.addMenuItem({type:"separator"}); - file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_save'), instanceName:"saveItem"}); - file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_saveas'), instanceName:"saveItemAs"}); - file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_import'), instanceName:"importItem"}); - file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_export'), instanceName:"exportItem", enabled:false}); - file_menu.addMenuItem({type:"separator"}); - file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_exit'), instanceName:"exitItem"}); + if(layout != ApplicationParent.EDIT_MODE) { + file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_new'), instanceName:"newItem"}); + file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_open'), instanceName:"openItem"}); + file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_recover'), instanceName:"recoverItem", enabled:false}); + + file_menu.addMenuItem({type:"separator"}); + + file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_save'), instanceName:"saveItem"}); + file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_saveas'), instanceName:"saveItemAs"}); + file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_import'), instanceName:"importItem"}); + file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_export'), instanceName:"exportItem", enabled:false}); + + file_menu.addMenuItem({type:"separator"}); + + file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_exit'), instanceName:"exitItem"}); + + } else { + file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_apply_changes'), instanceName:"saveItem"}); + + file_menu.addMenuItem({type:"separator"}); + + file_menu.addMenuItem({label:Dictionary.getValue('mnu_file_finish'), instanceName:"finishItem"}); + } /*================= EDIT MENU @@ -151,8 +166,7 @@ edit_menu.addMenuItem({label:Dictionary.getValue('mnu_edit_undo'), instanceName:"undoItem"}); edit_menu.addMenuItem({label:Dictionary.getValue('mnu_edit_redo'), instanceName:"redoItem"}); edit_menu.addMenuItem({type:"separator"}); - //edit_menu.addMenuItem({label:Dictionary.getValue('mnu_edit_cut'), instanceName:"cutItem"}); - edit_menu.addMenuItem({label:Dictionary.getValue('mnu_edit_copy'), instanceName:"copyItem"}); + edit_menu.addMenuItem({label:Dictionary.getValue('mnu_edit_copy'), instanceName:"copyItem"}); edit_menu.addMenuItem({label:Dictionary.getValue('mnu_edit_paste'), instanceName:"pasteItem"}); @@ -230,8 +244,7 @@ go_menu.addMenuItem({label:Dictionary.getValue('mnu_go_lesson'), instanceName:"goLessonTab"}); go_menu.addMenuItem({label:Dictionary.getValue('mnu_go_schedule'), instanceName:"goScheduleTab"}); go_menu.addMenuItem({label:Dictionary.getValue('mnu_go_learners'), instanceName:"goLearnerTab"}); - //go_menu.addMenuItem({label:Dictionary.getValue('mnu_go_todo'), instanceName:"goTodoTab"}); - + /*================= HELP MENU =================*/ @@ -308,7 +321,13 @@ break; case eventObj.menu.exitItem: ApplicationParent.extCall("closeWindow", null); - break; + break; + case eventObj.menu.revertItem : + org.lamsfoundation.lams.authoring.Application(app).getCanvas().revertCanvas(); + break; + case eventObj.menu.finishItem : + org.lamsfoundation.lams.authoring.Application(app).getCanvas().finishEditOnFly(); + break; } } @@ -460,8 +479,12 @@ private function setStyles() { var styleObj = tm.getStyleObject('LFMenuBar'); _mb.setStyle('styleName',styleObj); - } - + } + + public function setVisible(b:Boolean) { + _mb.visible = b; + } + function get className():String { return 'LFMenuBar'; }