Index: lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as =================================================================== diff -u -rd19ff9ee34c7a400827cb0c00d7fd447f2788627 -r05edbb31d13d3be11ad19d5a26621c7cf863df0c --- lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as (.../Application.as) (revision d19ff9ee34c7a400827cb0c00d7fd447f2788627) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as (.../Application.as) (revision 05edbb31d13d3be11ad19d5a26621c7cf863df0c) @@ -26,8 +26,7 @@ import org.lamsfoundation.lams.common.ui.*; // ui import org.lamsfoundation.lams.common.*; import org.lamsfoundation.lams.learner.Header; -import org.lamsfoundation.lams.learner.ls.*; -import org.lamsfoundation.lams.learner.lb.*; +import org.lamsfoundation.lams.learner.ls.*; import mx.managers.* import mx.utils.* /** @@ -38,18 +37,21 @@ // private constants //private var _comms:Communication; - private var _seqLib:Library; + private var _lesson:Lesson; private var _header_mc:MovieClip; + private static var SHOW_DEBUGGER:Boolean = false; private static var MODULE:String = "learner"; + private static var QUESTION_MARK_KEY:Number = 191; + //private var _appRoot_mc:MovieClip; //Application root clip private static var HEADER_X:Number = -1; private static var HEADER_Y:Number = -13.5; - private static var LIBRARY_X:Number = 0; - private static var LIBRARY_Y:Number = 40; + private static var LESSON_X:Number = 0; + private static var LESSON_Y:Number = 40; private static var APP_ROOT_DEPTH:Number = 10; //depth of the application root @@ -63,15 +65,16 @@ private var _uiLoadCheckCount = 0; // instance counter for number of times we have checked to see if theme and dict are loaded private var _UILoadCheckIntervalID:Number; //Interval ID for periodic check on UILoad status private var _UILoaded:Boolean; //UI Loading status - private var _seqLibLoaded:Boolean; //Seq Library loaded flag - //private var _seqLibEventDispatched:Boolean //Seq Library loaded flag - private var _headerLoaded:Boolean; - //private var _headerEventDispatched:Boolean; + private var _lessonLoaded:Boolean; //Lesson loaded flag + private var _headerLoaded:Boolean; + //Application instance is stored as a static in the application class private static var _instance:Application = null; - private var _container_mc:MovieClip; //Main container + private var _container_mc:MovieClip; //Main container + + private var _debugDialog:MovieClip; //Reference to the debug dialog @@ -83,7 +86,7 @@ super(this); trace('Begin Application...'); - _seqLibLoaded = false; + _lessonLoaded = false; //_seqLibEventDispatched = false; _headerLoaded = false; _module = Application.MODULE; @@ -116,6 +119,9 @@ //Comms object - do this before any objects are created that require it for server communication //_comms = new Communication(); + + Key.addListener(this); + setupUI(); checkUILoaded(); } @@ -131,9 +137,10 @@ _header_mc = _container_mc.attachMovie('Header','_header_mc',HEADER_DEPTH, {_x:HEADER_X,_y:HEADER_Y}); _header_mc.addEventListener('load',Proxy.create(this,UIElementLoaded)); - _seqLib = new Library(_appRoot_mc,LIBRARY_X,LIBRARY_Y); - _seqLib.addEventListener('load',Proxy.create(this,UIElementLoaded)); + _lesson = new Lesson(_appRoot_mc,LESSON_X,LESSON_Y); + _lesson.addEventListener('load',Proxy.create(this,UIElementLoaded)); //_seqLib.addEventListener('init', Proxy.create(this,reload)); + } /** @@ -174,9 +181,9 @@ if(evt.type=='load'){ //Which item has loaded switch (evt.target.className) { - case 'Library' : - trace('Library loaded...'); - _seqLibLoaded = true; + case 'Lesson' : + trace('Lesson loaded...'); + _lessonLoaded = true; break; case 'Header' : trace('Header loaded...'); @@ -186,7 +193,7 @@ } //If all of them are loaded set UILoad accordingly - if(_seqLibLoaded && _headerLoaded){ + if(_lessonLoaded && _headerLoaded){ _UILoaded=true; } @@ -203,12 +210,13 @@ //Fire off a resize to set up sizes onResize(); - // start testing - joining a lesson/seq - var seqId:Number = 1; - var s:Sequence = Sequence(_seqLib.getSequence(seqId)); - //_seqLib.select(s); - // end testing - } + if(SHOW_DEBUGGER){ + showDebugger(); + } + + // load lesson + _lesson.getLesson(); + } /** * Receives events from the Stage resizing @@ -221,20 +229,15 @@ var someListener:Object = new Object(); someListener.onMouseUp = function () { - _seqLib.setSize(w,h); + _lesson.setSize(w,h); } - _seqLib.setSize(w,h); + _lesson.setSize(w,h); } // onKey*** methods - TODO - - public function getLibrary():Library { - return _seqLib; - } - /** * Returns the Application root, use as _root would be used * @@ -253,12 +256,37 @@ } } - public function getUserID():Number { - // return mmm - test user - return 4; + public function getLesson():Lesson{ + return _lesson; } + public function showDebugger():Void{ + _debugDialog = PopUpManager.createPopUp(Application.root, LFWindow, false,{title:'Debug',closeButton:true,scrollContentPath:'debugDialog'}); + } + + public function hideDebugger():Void{ + _debugDialog.deletePopUp(); + } + /** + * Handles KEY presses for Application + */ + private function onKeyDown(){ + + //var mouseListener:Object = new Object(); + //Debugger.log('Key.isDown(Key.CONTROL): ' + Key.isDown(Key.CONTROL),Debugger.GEN,'onKeyDown','Application'); + //Debugger.log('Key: ' + Key.getCode(),Debugger.GEN,'onKeyDown','Application'); + //the debug window: + if (Key.isDown(Key.CONTROL) && Key.isDown(Key.ALT) && Key.isDown(QUESTION_MARK_KEY)) { + if (!_debugDialog.content){ + showDebugger(); + }else { + hideDebugger(); + } + } + } + + /** * returns the the Comms instance * *public function getComms():Communication{ Index: lams_central/src/flash/org/lamsfoundation/lams/learner/Header.as =================================================================== diff -u -r0b8748c32843265961b13e661015c0f2f84248ad -r05edbb31d13d3be11ad19d5a26621c7cf863df0c --- lams_central/src/flash/org/lamsfoundation/lams/learner/Header.as (.../Header.as) (revision 0b8748c32843265961b13e661015c0f2f84248ad) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/Header.as (.../Header.as) (revision 05edbb31d13d3be11ad19d5a26621c7cf863df0c) @@ -82,22 +82,13 @@ resume_btn.onRelease = function(){ trace('on releasing resuming button..'); var app:Application = Application.getInstance(); - var seq:Sequence; - if((seq = app.getLibrary().getSelectedSequence()) != null){ - app.getLibrary().joinSequence(seq); - } + app.getLesson().joinLesson(); } exit_btn.onRelease = function(){ trace('on releasing exit button..'); var app:Application = Application.getInstance(); - var seq:Sequence; - if((seq = app.getLibrary().getSelectedSequence()) != null){ - app.getLibrary().exitSequence(seq); - //if(!seq.isFinished()) { - // app.getLibrary().getActiveSequences(); - //} - } + app.getLesson().exitLesson(); } dispatchEvent({type:'load',target:this}); Index: lams_central/src/flash/org/lamsfoundation/lams/learner/ls/Lesson.as =================================================================== diff -u -r193aeb8d5fc09aafc3973a62b657455de089a257 -r05edbb31d13d3be11ad19d5a26621c7cf863df0c --- lams_central/src/flash/org/lamsfoundation/lams/learner/ls/Lesson.as (.../Lesson.as) (revision 193aeb8d5fc09aafc3973a62b657455de089a257) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/ls/Lesson.as (.../Lesson.as) (revision 05edbb31d13d3be11ad19d5a26621c7cf863df0c) @@ -25,6 +25,7 @@ import org.lamsfoundation.lams.learner.ls.*; import org.lamsfoundation.lams.learner.lb.*; import org.lamsfoundation.lams.common.util.*; +import org.lamsfoundation.lams.common.Progress; import org.lamsfoundation.lams.authoring.DesignDataModel; import mx.managers.*; @@ -55,7 +56,7 @@ * * @param target_mc Target clip for attaching view */ - function Lesson(target_mc:MovieClip,x:Number,y:Number,libraryView:LibraryView){ + function Lesson(target_mc:MovieClip,x:Number,y:Number){ mx.events.EventDispatcher.initialize(this); //Create the model @@ -74,7 +75,6 @@ //Set the position by setting the model which will call update on the view lessonModel.setPosition(x,y); - _libraryView = LibraryView(libraryView); } /** @@ -98,18 +98,29 @@ } } - + public function getLesson():Boolean { + var callback:Function = Proxy.create(this,storeLessonData); + + // call action + var lessonId:Number = _root.lessonID; + //var userId:Number = Application.getInstance().getUserID(); + + // do request + Application.getInstance().getComms().getRequest('learning/learner.do?method=getLesson&lessonID='+String(lessonId), callback, false); + + return true; + } public function joinLesson():Boolean { var callback:Function = Proxy.create(this,startLesson); // call action - var lessonId:Number = lessonModel.getLessonID(); + var lessonId:Number = lessonModel.ID; //var userId:Number = Application.getInstance().getUserID(); // do request - Application.getInstance().getComms().getRequest('learning/learner.do?method=joinLesson&userID='+_root.userID+'&lessonID='+String(lessonId), callback, false); + Application.getInstance().getComms().getRequest('learning/learner.do?method=joinLesson&lessonId='+String(lessonId), callback, false); // get Learning Design for lesson openLearningDesign(); @@ -121,26 +132,45 @@ var callback:Function = Proxy.create(this,closeLesson); // call action - var lessonId:Number = lessonModel.getLessonID(); + var lessonId:Number = lessonModel.ID; // do request - Application.getInstance().getComms().getRequest('learning/learner.do?method=exitLesson&lessonID='+String(lessonId), callback, false); + Application.getInstance().getComms().getRequest('learning/learner.do?method=exitLesson&lessonId='+String(lessonId), callback, false); return true; } + private function storeLessonData(dto:Object){ + lessonModel.populateFromDTO(dto); + joinLesson(); + } + private function startLesson(pkt:Object){ trace('received message back from server aftering joining lesson...'); // check was successful join + getFlashProgress(); // set lesson as active lessonModel.setActive(); trace('pktobject value: '+String(pkt)); - getURL('http://localhost:8080/lams/learning'+String(pkt)+'?progressId='+lessonModel.getLessonID(),'_blank'); + getURL('http://localhost:8080/lams/learning'+String(pkt)+'?progressId='+lessonModel.getLessonID(),'contentFrame'); } + private function getFlashProgress():Void{ + var callback:Function = Proxy.create(this,saveProgressData); + var lessonId:Number = lessonModel.ID; + Application.getInstance().getComms().getRequest('learning/learner.do?method=getFlashProgressData&progressId='+String(lessonId), callback, false); + } + + private function saveProgressData(progressDTO:Object):Void{ + var p:Progress = new Progress(); + p.populateFromDTO(progressDTO); + lessonModel.setProgressData(p); + Debugger.log('progress data receieved for user..' + progressDTO,Debugger.CRITICAL,'saveProgressData','org.lamsfoundation.lams.Lesson'); + } + private function closeLesson(pkt:Object){ trace('receiving message back from server...'); @@ -152,7 +182,7 @@ private function openLearningDesign(){ trace('opening learning design...'); - var designId:Number = lessonModel.getLearningDesignID(); + var designId:Number = lessonModel.learningDesignID; var callback:Function = Proxy.create(this,saveDataDesignModel); @@ -169,10 +199,11 @@ lessonModel.setLearningDesignModel(model); // activite Progress movie + } public function getLessonID():Number { - return lessonModel.getLessonID(); + return lessonModel.ID; } public function checkState(stateID:Number):Boolean { @@ -197,10 +228,6 @@ //TODO DI 24/05/05 write validation on limits lessonModel.setPosition(x,y); } - - public function getLibrary():LibraryView { - return _libraryView; - } //Dimension accessor methods public function get width():Number{ Index: lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonModel.as =================================================================== diff -u -r193aeb8d5fc09aafc3973a62b657455de089a257 -r05edbb31d13d3be11ad19d5a26621c7cf863df0c --- lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonModel.as (.../LessonModel.as) (revision 193aeb8d5fc09aafc3973a62b657455de089a257) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonModel.as (.../LessonModel.as) (revision 05edbb31d13d3be11ad19d5a26621c7cf863df0c) @@ -24,6 +24,7 @@ import org.lamsfoundation.lams.common.util.Observable; import org.lamsfoundation.lams.learner.ls.*; import org.lamsfoundation.lams.common.util.*; +import org.lamsfoundation.lams.common.Progress; import org.lamsfoundation.lams.authoring.DesignDataModel; @@ -55,6 +56,8 @@ /* the learningDesignModel gets set when you join a lesson */ private var _learningDesignModel:DesignDataModel; + + private var _progressData:Progress; private var _active:Boolean; @@ -65,7 +68,8 @@ public function LessonModel (lesson:Lesson){ _lesson = lesson; _active = false; - _learningDesignModel = null; + _learningDesignModel = null; + _progressData = null; } public function populateFromDTO(dto:Object){ @@ -75,6 +79,14 @@ _lessonDescription = dto.lessonDescription; _lessonStateID = dto.lessonStateID; _learningDesignID = dto.learningDesignID; + + + setChanged(); + + // send update + infoObj = {}; + infoObj.updateType = "LESSON"; + notifyObservers(infoObj); } @@ -96,6 +108,10 @@ public function getLessonID():Number { return _lessonID; + } + + public function get ID():Number{ + return _lessonID; } /** @@ -124,6 +140,10 @@ public function getLessonName():String { return _lessonName; } + + public function get name():String{ + return _lessonName; + } /** * Set the lesson's description @@ -149,6 +169,10 @@ */ public function getLessonDescription():String { return _lessonDescription; + } + + public function get description():String{ + return _lessonDescription; } public function setLessonStateID(lessonStateID:Number) { @@ -166,6 +190,10 @@ return _lessonStateID; } + public function get stateID():Number{ + return _lessonStateID; + } + public function setLearningDesignID(learningDesignID:Number){ _learningDesignID = learningDesignID; @@ -181,6 +209,10 @@ return _learningDesignID; } + public function get learningDesignID():Number{ + return _learningDesignID; + } + public function setLearningDesignModel(learningDesignModel:DesignDataModel){ _learningDesignModel = learningDesignModel; @@ -196,6 +228,29 @@ return _learningDesignModel; } + public function get learningDesignModel():DesignDataModel{ + return _learningDesignModel; + } + + public function setProgressData(progressData:Progress){ + _progressData = progressData; + + setChanged(); + + // send update + infoObj = {}; + infoObj.updateType = "PROGRESS"; + notifyObservers(infoObj); + } + + public function getProgressData():Progress{ + return _progressData; + } + + public function get progressData():Progress{ + return _progressData; + } + public function setActive() { _active = true; trace('setting lesson active...'); Index: lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonView.as =================================================================== diff -u -r193aeb8d5fc09aafc3973a62b657455de089a257 -r05edbb31d13d3be11ad19d5a26621c7cf863df0c --- lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonView.as (.../LessonView.as) (revision 193aeb8d5fc09aafc3973a62b657455de089a257) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonView.as (.../LessonView.as) (revision 05edbb31d13d3be11ad19d5a26621c7cf863df0c) @@ -46,17 +46,11 @@ // Lesson clip private var _lesson_mc:MovieClip; - - // Lesson labels - private var _lessonName:Label; - private var _lessonDescription:Label; - private var _lessonStateID:Label; - - - // Lesson buttons - private var select_btn:Button; private var bkg_pnl:MovieClip; + private var _lessonName:Label; + private var progress_scp:MovieClip; + //These are defined so that the compiler can 'see' the events that are added at runtime by EventDispatcher private var dispatchEvent:Function; @@ -97,13 +91,6 @@ //Add the button handlers, essentially this is handing on clicked event to controller. var controller = getController(); - select_btn.addEventListener("click",controller); - - select_btn.onPress = Proxy.create(this,this['select']); - select_btn.onRollOver = Proxy.create(this,this['rollOver']); - select_btn.onRollOut = Proxy.create(this,this['rollOut']); - - //Now that view is setup dispatch loaded event dispatchEvent({type:'load',target:this}); @@ -126,23 +113,19 @@ break; case 'SIZE' : setSize(lm); - break; - case 'NAME' : - setLessonName(lm); - break; - case 'DESCRIPTION' : - setLessonDescription(lm); - break; - case 'STATE' : - setLessonStateID(lm); - break; + break; case 'STATUS' : - setStatus(lm); break; - case 'DESIGN' : + case 'LESSON' : + trace('setting lesson name'); + _lessonName.text = lm.name; break; case 'DESIGNMODEL' : trace('updating design model for lesson..'); + break; + case 'PROGRESS' : + Debugger.log('progress data receieved for user..' + lm.progressData.getUserName(),Debugger.CRITICAL,'update','org.lamsfoundation.lams.LessonView'); + break; default : Debugger.log('unknown update type :' + infoObj.updateType,Debugger.CRITICAL,'update','org.lamsfoundation.lams.LessonView'); @@ -159,7 +142,8 @@ //Size panel trace('lesson view setting width to '+s.w); - bkg_pnl.setSize(s.w,bkg_pnl._width); + bkg_pnl.setSize(s.w,s.h); + progress_scp.setSize(s.w, s.h-progress_scp._y) } /** @@ -171,62 +155,14 @@ this._x = p.x; this._y = p.y; } - - private function setLessonName(lm:LessonModel):Void { - var name:String = lm.getLessonName(); - this._lessonName.text = name; - } - - private function setLessonDescription(lm:LessonModel):Void { - var desc:String = lm.getLessonDescription(); - this._lessonDescription.text = desc; - } - - private function setLessonStateID(lm:LessonModel):Void { - var state:Number = lm.getLessonStateID(); - this._lessonStateID.text = "State ID: " + String(state); - } - - private function setStatus(lm:LessonModel):Void { - var status:Boolean = lm.getStatus(); - trace('inside setStatus method of View'); - // do stuff based on status value - if(status) { - trace('joined lesson... lesson is active'); - // show active - } else { - // show inactive - trace('exited lesson... lesson is inactive'); - } - } - - private function select():Void{ - var l:Lesson = this.getModel().getLesson(); - var libraryController = l.getLibrary().getController(); - libraryController.selectLesson(this); - } - - private function rollOver():Void{ - // mouse over style - //join_btn.setStyle("backgroundColor",0xFFFFFF); - //join_btn.setStyle("borderStyle","outset"); - } - - private function rollOut():Void{ - // original style - //join_btn.setStyle("styleName",_styleName); - } - - + /** * Set the styles for the Lesson */ private function setStyles() { // no styles to set } - - /** * Gets the LessonModel *