Index: lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as =================================================================== diff -u -r28b715a01947af8f7ef21044fab203d3c9a7bd04 -ra362012d78d5a36129ae4fc4f1ff38938b9802e9 --- lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as (.../Application.as) (revision 28b715a01947af8f7ef21044fab203d3c9a7bd04) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as (.../Application.as) (revision a362012d78d5a36129ae4fc4f1ff38938b9802e9) @@ -1,7 +1,8 @@ -import org.lamsfoundation.lams.common.comms.* //communications -import org.lamsfoundation.lams.common.* ] +import org.lamsfoundation.lams.common.comms.* //communications +import org.lamsfoundation.lams.common.util.*; // utilities +import org.lamsfoundation.lams.common.*; import org.lamsfoundation.lams.learner.ls.*; -import org.lamsfoundation.lams.learner.ls.LessonModel; +import org.lamsfoundation.lams.learner.lb.*; import mx.managers.* import mx.utils.* /** @@ -14,22 +15,42 @@ // private constants private var _comms:Communication; + private var _seqLib:Library; - private static var LESSON_X:Number = 5; - private static var LESSON_Y:Number = 5; + private var _appRoot_mc:MovieClip; //Application root clip + + private static var LIBRARY_X:Number = 0; + private static var LIBRARY_Y:Number = 0; + + + private static var APP_ROOT_DEPTH:Number = 10; //depth of the application root - // UI Elements + // UI Elements + + private static var UI_LOAD_CHECK_INTERVAL:Number = 50; + private static var UI_LOAD_CHECK_TIMEOUT_COUNT:Number = 200; + + 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 + //Application instance is stored as a static in the application class private static var _instance:Application = null; private var _container_mc:MovieClip; //Main container + + /** * Application - Constructor */ private function Application(){ + _seqLibLoaded = false; + _seqLibEventDispatched = false; } @@ -54,9 +75,143 @@ //Comms object - do this before any objects are created that require it for server communication _comms = new Communication(); - + + setupUI(); + checkUILoaded(); } + private function setupUI():Void { + + //Create the application root + _appRoot_mc = _container_mc.createEmptyMovieClip('appRoot_mc',APP_ROOT_DEPTH); + + var depth:Number = _appRoot_mc.getNextHighestDepth(); + _seqLib = new Library(_appRoot_mc,depth++,LIBRARY_X,LIBRARY_Y); + _seqLib.addEventListener('load',Proxy.create(this,UIElementLoaded)); + //_seqLib.addEventListener('init', Proxy.create(this,reload)); + } + + /** + * Runs periodically and dispatches events as they are ready + */ + private function checkUILoaded() { + //If it's the first time through then set up the interval to keep polling this method + if(!_UILoadCheckIntervalID) { + _UILoadCheckIntervalID = setInterval(Proxy.create(this,checkUILoaded),UI_LOAD_CHECK_INTERVAL); + } else { + _uiLoadCheckCount++; + //If all events dispatched clear interval and call start() + if(_seqLibEventDispatched){ + //Debugger.log('Clearing Interval and calling start :',Debugger.CRITICAL,'checkUILoaded','Application'); + clearInterval(_UILoadCheckIntervalID); + start(); + }else { + //If UI loaded check which events can be broadcast + if(_UILoaded){ + //Debugger.log('ALL UI LOADED, waiting for all true to dispatch init events: _dictionaryLoaded:'+_dictionaryLoaded+'_themeLoaded:'+_themeLoaded ,Debugger.GEN,'checkUILoaded','Application'); + + //If sequence library is loaded and event hasn't been dispatched - dispatch it + /*if(_seqLibLoaded && !_seqLibEventDispatched){ + _seqLibEventDispatched = true; + _seqLib.broadcastInit(); + }*/ + if(_seqLibLoaded){ + clearInterval(_UILoadCheckIntervalID); + start(); + } + + + if(_uiLoadCheckCount >= UI_LOAD_CHECK_TIMEOUT_COUNT){ + //if we havent loaded the library by the timeout count then give up + Debugger.log('raeached time out waiting to load library, giving up.',Debugger.CRITICAL,'checkUILoaded','Application'); + clearInterval(_UILoadCheckIntervalID); + } + } + } + } + } + + /** + * This is called by each UI element as it loads to notify Application that it's loaded + * When all UIElements are loaded the Application can set UILoaded flag true allowing events to be dispatched + * and methods called on the UI Elements + * + * @param UIElementID:String - Identifier for the Element that was loaded + */ + public function UIElementLoaded(evt:Object) { + if(evt.type=='load'){ + //Which item has loaded + switch (evt.target.className) { + case 'Library' : + _seqLibLoaded = true; + break; + default: + } + + //If all of them are loaded set UILoad accordingly + if(_seqLibLoaded){ + _UILoaded=true; + } + + } + } + + /** + * Runs when application setup has completed. At this point the init/loading screen can be removed and the user can + * work with the application + */ + private function start(){ + + _seqLib.getActiveLessons(); + + //Fire off a resize to set up sizes + onResize(); + + } + + /** + * Receives events from the Stage resizing + */ + public function onResize(){ + + //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(); + someListener.onMouseUp = function () { + _seqLib.setSize(w,h); + } + + _seqLib.setSize(w,h); + + } + + // onKey*** methods - TODO + + + public function getLibrary():Library { + return _seqLib; + } + + /** + * 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 root():MovieClip { + //Return root if valid otherwise raise a big system error as app. will not work without it + if(_instance._appRoot_mc != undefined) { + return _instance._appRoot_mc; + } else { + //TODO DI 11/05/05 Raise error if _appRoot hasn't been created + + } + } + public function getUserID():Number { // return mmm - test user return 4; Index: lams_central/src/flash/org/lamsfoundation/lams/learner/lb/Library.as =================================================================== diff -u -r28b715a01947af8f7ef21044fab203d3c9a7bd04 -ra362012d78d5a36129ae4fc4f1ff38938b9802e9 --- lams_central/src/flash/org/lamsfoundation/lams/learner/lb/Library.as (.../Library.as) (revision 28b715a01947af8f7ef21044fab203d3c9a7bd04) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/lb/Library.as (.../Library.as) (revision a362012d78d5a36129ae4fc4f1ff38938b9802e9) @@ -1,5 +1,6 @@ -import org.lamsfoundation.lams.learner.lb.* -import org.lamsfoundation.lams.common.util* +import org.lamsfoundation.lams.learner.Application; +import org.lamsfoundation.lams.learner.lb.*; +import org.lamsfoundation.lams.common.util.*; import mx.managers.*; /** * Library - LAMS Application @@ -23,11 +24,11 @@ * * @param target_mc Target clip for attaching view */ - function Library(target_mc:MovieClip,x:Number,y:Number,lessonID:Number){ + function Library(target_mc:MovieClip,x:Number,y:Number){ mx.events.EventDispatcher.initialize(this); //Create the model - libraryModel = new LibraryModel(libraryID); + libraryModel = new LibraryModel(this); //Create the view libraryView_mc = target_mc.createChildAtDepth("libraryView",DepthManager.kTop); @@ -43,7 +44,15 @@ //Set the position by setting the model which will call update on the view libraryModel.setPosition(x,y); - } + } + + /** + * event broadcast when a new library is loaded + */ + public function broadcastInit(){ + dispatchEvent({type:'init',target:this}); + } + private function viewLoaded(evt:Object){ Debugger.log('viewLoaded called',Debugger.GEN,'viewLoaded','Library'); @@ -65,7 +74,7 @@ } - private function getActiveLessons(Data:Object):Void { + private function getLessonList(Data:Object):Void { trace('received active lesson data back...'); // get data and create Lesson obj's Index: lams_central/src/flash/org/lamsfoundation/lams/learner/lb/LibraryController.as =================================================================== diff -u -r28b715a01947af8f7ef21044fab203d3c9a7bd04 -ra362012d78d5a36129ae4fc4f1ff38938b9802e9 --- lams_central/src/flash/org/lamsfoundation/lams/learner/lb/LibraryController.as (.../LibraryController.as) (revision 28b715a01947af8f7ef21044fab203d3c9a7bd04) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/lb/LibraryController.as (.../LibraryController.as) (revision a362012d78d5a36129ae4fc4f1ff38938b9802e9) @@ -1,7 +1,8 @@ import org.lamsfoundation.lams.common.mvc.* import org.lamsfoundation.lams.common.util.* import org.lamsfoundation.lams.learner.* -import org.lamsfoundation.lams.learner.lb.*; +import org.lamsfoundation.lams.learner.lb.*; +import org.lamsfoundation.lams.learner.ls.Lesson; /** * Controller for the sequence library Index: lams_central/src/flash/org/lamsfoundation/lams/learner/lb/LibraryModel.as =================================================================== diff -u -r28b715a01947af8f7ef21044fab203d3c9a7bd04 -ra362012d78d5a36129ae4fc4f1ff38938b9802e9 --- lams_central/src/flash/org/lamsfoundation/lams/learner/lb/LibraryModel.as (.../LibraryModel.as) (revision 28b715a01947af8f7ef21044fab203d3c9a7bd04) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/lb/LibraryModel.as (.../LibraryModel.as) (revision a362012d78d5a36129ae4fc4f1ff38938b9802e9) @@ -1,6 +1,7 @@ -import org.lamsfoundation.lams.learner.lb.*; -import org.lamsfoundation.lams.common.util.*; -import org.lamsfoundation.lams.common.util.Observable; +import org.lamsfoundation.lams.learner.lb.*; +import org.lamsfoundation.lams.learner.ls.Lesson; +import org.lamsfoundation.lams.common.util.*; +import org.lamsfoundation.lams.learner.Application; /* @@ -92,7 +93,7 @@ // exit current lesson and join selected lesson - if(_lastSelectLesson != null) + if(_lastSelectedLesson != null) _lastSelectedLesson.exitLesson(); if(_currentlySelectedLesson != null) @@ -133,16 +134,17 @@ } public function addLesson(lesson:Lesson):Boolean { - _learningSequences.put(lesson.lessonID, lesson); + _learningSequences.put(lesson.getLessonID(), lesson); + return true; } public function removeLesson(lesson:Lesson):Boolean { _learningSequences.remove(lesson); return true; } - public function getLesson(lessonID:key):Lesson { - return Lesson(_learningSequences.get(key)); + public function getLesson(lessonID:Number):Lesson { + return Lesson(_learningSequences.get(lessonID)); } /** Index: lams_central/src/flash/org/lamsfoundation/lams/learner/lb/LibraryView.as =================================================================== diff -u -r28b715a01947af8f7ef21044fab203d3c9a7bd04 -ra362012d78d5a36129ae4fc4f1ff38938b9802e9 --- lams_central/src/flash/org/lamsfoundation/lams/learner/lb/LibraryView.as (.../LibraryView.as) (revision 28b715a01947af8f7ef21044fab203d3c9a7bd04) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/lb/LibraryView.as (.../LibraryView.as) (revision a362012d78d5a36129ae4fc4f1ff38938b9802e9) @@ -4,7 +4,8 @@ import org.lamsfoundation.lams.learner.lb.*; import org.lamsfoundation.lams.learner.ls.*; import org.lamsfoundation.lams.common.mvc.*; -import org.lamsfoundation.lams.common.ui.* +import org.lamsfoundation.lams.common.ui.* +import org.lamsfoundation.lams.common.util.*; import mx.managers.*; import mx.controls.*; @@ -53,7 +54,7 @@ * Sets up the Library (clip) */ public function createLibrary() { - _lesson_mc = this; + _library_mc = this; _depth = this.getNextHighestDepth(); //Add the button handlers, essentially this is handing on clicked event to controller. @@ -82,10 +83,10 @@ case 'SIZE' : setSize(lm); break; - case 'SEQUENCES_UPDATED' + case 'SEQUENCES_UPDATED' : updateSequences(o); break; - case 'LESSON_SELECTED' + case 'LESSON_SELECTED' : updateSelectedLesson(o); break; default : @@ -122,7 +123,7 @@ //NOW we pass in the Lesson instance var _lesson:Lesson = learningSeq.classInstanceRefs; - var lesson_mc = learningSequences_sp.content.attachMovie("Lesson","ls_"+_lesson.lessonID,_depth++,{_lesson:Lesson,_libraryView:lbv}); + var lesson_mc = learningSequences_sp.content.attachMovie("Lesson","ls_"+_lesson.getLessonID(),_depth++,{_lesson:Lesson,_libraryView:lbv}); //position it lesson_mc._y = yPos; Index: lams_central/src/flash/org/lamsfoundation/lams/learner/ls/Lesson.as =================================================================== diff -u -r28b715a01947af8f7ef21044fab203d3c9a7bd04 -ra362012d78d5a36129ae4fc4f1ff38938b9802e9 --- lams_central/src/flash/org/lamsfoundation/lams/learner/ls/Lesson.as (.../Lesson.as) (revision 28b715a01947af8f7ef21044fab203d3c9a7bd04) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/ls/Lesson.as (.../Lesson.as) (revision a362012d78d5a36129ae4fc4f1ff38938b9802e9) @@ -1,6 +1,8 @@ -import org.lamsfoundation.lams.learner.ls.*; +import org.lamsfoundation.lams.learner.*; +import org.lamsfoundation.lams.learner.ls.*; import org.lamsfoundation.lams.learner.lb.*; -import org.lamsfoundation.lams.common.util* ; +import org.lamsfoundation.lams.common.util.*; + import mx.managers.*; /** * Lesson - LAMS Application @@ -9,7 +11,7 @@ class Lesson { // Model - private var lessionModel:LessonModel; + private var lessonModel:LessonModel; // View private var lessonView:LessonView; private var lessonView_mc:MovieClip; @@ -33,7 +35,8 @@ mx.events.EventDispatcher.initialize(this); //Create the model - lessonModel = new LessonModel(lessonID); + lessonModel = new LessonModel(this); + lessonModel.setLessonID(lessonID); //Create the view lessonView_mc = target_mc.createChildAtDepth("lessonView",DepthManager.kTop); @@ -51,7 +54,14 @@ _libraryView = LibraryView(libraryView); } - + + /** + * event broadcast when a new lesson is loaded + */ + public function broadcastInit(){ + dispatchEvent({type:'init',target:this}); + } + private function viewLoaded(evt:Object){ Debugger.log('viewLoaded called',Debugger.GEN,'viewLoaded','Lesson'); @@ -70,23 +80,25 @@ var callback:Function = Proxy.create(this,startLesson); // call action - var lessonId:Number = _lessonModel.getLessonID(); - var userId:Number = getUserID(); + var lessonId:Number = lessonModel.getLessonID(); + var userId:Number = Application.getInstance().getUserID(); // do request Application.getInstance().getComms().getRequest('learning/learner.do?method=joinLession&userId='+String(userId)+'&lessonId='+String(lessonId), callback, false); - + + return true; } public function exitLesson():Boolean { var callback:Function = Proxy.create(this,closeLesson); // call action - var lessonId:Number = _lessonModel.getLessonID(); + var lessonId:Number = lessonModel.getLessonID(); // do request Application.getInstance().getComms().getRequest('learning/learner.do?method=exitLession&lessonId='+String(lessonId), callback, false); + return true; } private function startLesson(pkt:Object){ @@ -96,12 +108,16 @@ //_lessonModel.setActive(); } - private fucntion closeLesson(pkt:Object){ + private function closeLesson(pkt:Object){ trace('receiving message back from server...'); // set lesson as inactive //_lessonModel.setInactive(); } + + public function getLessonID():Number { + return lessonModel.getLessonID(); + } /** * Used by application to set the size Index: lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonController.as =================================================================== diff -u -r28b715a01947af8f7ef21044fab203d3c9a7bd04 -ra362012d78d5a36129ae4fc4f1ff38938b9802e9 --- lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonController.as (.../LessonController.as) (revision 28b715a01947af8f7ef21044fab203d3c9a7bd04) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonController.as (.../LessonController.as) (revision a362012d78d5a36129ae4fc4f1ff38938b9802e9) @@ -1,7 +1,7 @@ -import org.lamsfoundation.lams.learner.ls.LessonModel; -import org.lamsfoundation.lams.learner.ls.*; +import org.lamsfoundation.lams.learner.ls.*; import org.lamsfoundation.lams.common.mvc.* -import org.lamsfoundation.lams.common.util.* +import org.lamsfoundation.lams.common.util.* +import org.lamsfoundation.lams.common.comms.Communication; import org.lamsfoundation.lams.learner.* /* Index: lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonModel.as =================================================================== diff -u -r28b715a01947af8f7ef21044fab203d3c9a7bd04 -ra362012d78d5a36129ae4fc4f1ff38938b9802e9 --- lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonModel.as (.../LessonModel.as) (revision 28b715a01947af8f7ef21044fab203d3c9a7bd04) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonModel.as (.../LessonModel.as) (revision a362012d78d5a36129ae4fc4f1ff38938b9802e9) @@ -1,6 +1,5 @@ import org.lamsfoundation.lams.learner.ls.*; import org.lamsfoundation.lams.common.util.*; -import org.lamsfoundation.lams.common.util.Observable; /* @@ -120,6 +119,10 @@ notifyObservers(infoObj); } + public function getLessonStateID():Number { + return _lessonStateID; + } + public function setActive() { _active = true; @@ -144,8 +147,9 @@ public function getStatus():Boolean { return _active; - } + } + /** * set the size on the model, this in turn will set a changed flag and notify observers (views) * @param width - Tookit width @@ -222,10 +226,9 @@ return 'LessonModel'; } - ** + /** * - * @usage - * @return + * @return the Lesson */ public function getLesson():Lesson{ return _lesson; Index: lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonView.as =================================================================== diff -u -r28b715a01947af8f7ef21044fab203d3c9a7bd04 -ra362012d78d5a36129ae4fc4f1ff38938b9802e9 --- lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonView.as (.../LessonView.as) (revision 28b715a01947af8f7ef21044fab203d3c9a7bd04) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/ls/LessonView.as (.../LessonView.as) (revision a362012d78d5a36129ae4fc4f1ff38938b9802e9) @@ -1,10 +1,12 @@ -import org.lamsfoundation.lams.common.*; +import org.lamsfoundation.lams.learner.*; +import org.lamsfoundation.lams.learner.ls.*; +import org.lamsfoundation.lams.learner.lb.*; + +import org.lamsfoundation.lams.common.*; import org.lamsfoundation.lams.common.mvc.*; -import org.lamsfoundation.lams.learner.*; -import org.lamsfoundation.lams.learner.ls.*; -import org.lamsfoundation.lams.learner.lb.*; import org.lamsfoundation.lams.common.mvc.*; -import org.lamsfoundation.lams.common.ui.* +import org.lamsfoundation.lams.common.ui.* +import org.lamsfoundation.lams.common.util.*; import mx.managers.*; import mx.controls.*; @@ -81,7 +83,6 @@ //Now that view is setup dispatch loaded event dispatchEvent({type:'load',target:this}); - layoutToolkit(); } /* @@ -102,16 +103,16 @@ case 'SIZE' : setSize(lm); break; - case 'NAME' + case 'NAME' : setLessonName(lm); break; - case 'DESCRIPTION' + case 'DESCRIPTION' : setLessonDescription(lm); break; - case 'STATE' + case 'STATE' : setLessonStateID(lm); break; - case 'STATUS' + case 'STATUS' : setStatus(lm); break; default :