Index: lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as =================================================================== diff -u -ra5518e2f5e9829d7a8a846bd96aca8f73dcfc7ef -r636e2f5d120231efb4883420ed63fdcf94248fb4 --- lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as (.../Application.as) (revision a5518e2f5e9829d7a8a846bd96aca8f73dcfc7ef) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/Application.as (.../Application.as) (revision 636e2f5d120231efb4883420ed63fdcf94248fb4) @@ -21,7 +21,9 @@ * ************************************************************************ */ -import org.lamsfoundation.lams.common.comms.* //communications +import org.lamsfoundation.lams.common.comms.*; //communications +import org.lamsfoundation.lams.common.dict.*; // dictionary +import org.lamsfoundation.lams.common.style.*; // styles/themes import org.lamsfoundation.lams.common.util.*; // utilities import org.lamsfoundation.lams.common.ui.*; // ui import org.lamsfoundation.lams.common.*; @@ -39,19 +41,16 @@ //private var _comms:Communication; 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_X:Number = -10; private static var HEADER_Y:Number = -13.5; private static var LESSON_X:Number = 0; - private static var LESSON_Y:Number = 40; + private static var LESSON_Y:Number = 82; private static var APP_ROOT_DEPTH:Number = 10; //depth of the application root @@ -61,11 +60,23 @@ 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; + private static var DATA_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 _dataLoadCheckCount = 0; + private var _UILoadCheckIntervalID:Number; //Interval ID for periodic check on UILoad status - private var _UILoaded:Boolean; //UI Loading status - private var _lessonLoaded:Boolean; //Lesson loaded flag + private var _DataLoadCheckIntervalID:Number; + + private var _dictionaryLoaded:Boolean; //Dictionary loaded flag + private var _dictionaryEventDispatched:Boolean //Event status flag + private var _themeLoaded:Boolean; //Theme loaded flag + private var _themeEventDispatched:Boolean //Dictionary loaded flag + + private var _UILoaded:Boolean; //UI Loading status + + private var _lessonLoaded:Boolean; //Lesson loaded flag private var _headerLoaded:Boolean; @@ -75,24 +86,19 @@ private var _container_mc:MovieClip; //Main container private var _debugDialog:MovieClip; //Reference to the debug dialog - - - - + + /** * Application - Constructor */ private function Application(){ super(this); - - trace('Begin Application...'); + _lessonLoaded = false; - //_seqLibEventDispatched = false; _headerLoaded = false; + _module = Application.MODULE; - //_headerEventDispatched = false; - - + } /** @@ -115,31 +121,91 @@ //add the cursors: Cursor.addCursor(C_HOURGLASS); - - //Comms object - do this before any objects are created that require it for server communication - //_comms = new Communication(); + + //Get the instance of config class + _config = Config.getInstance(); + + //Assign the config load event to + _config.addEventListener('load',Delegate.create(this,configLoaded)); + - Key.addListener(this); + + } + + /** + * Called when the config class has loaded + */ + private function configLoaded(){ + //Now that the config class is ready setup the UI and data, call to setupData() first in + //case UI element constructors use objects instantiated with setupData() + + setupData(); + checkDataLoaded(); - setupUI(); - checkUILoaded(); + } + + /** + * Loads and sets up event listeners for Theme, Dictionary etc. + */ + private function setupData() { + + //Get the language, create+load dictionary and setup load handler. + var language:String = String(_config.getItem('language')); + _dictionary = Dictionary.getInstance(); + _dictionary.addEventListener('load',Delegate.create(this,onDictionaryLoad)); + _dictionary.load(language); + + + + //Set reference to StyleManager and load Themes and setup load handler. + var theme:String = String(_config.getItem('theme')); + _themeManager = ThemeManager.getInstance(); + _themeManager.addEventListener('load',Delegate.create(this,onThemeLoad)); + _themeManager.loadTheme(theme); + Debugger.getInstance().crashDumpSeverityLevel = Number(_config.getItem('crashDumpSeverityLevelLog')); + Debugger.getInstance().severityLevel = Number(_config.getItem('severityLevelLog')); + } + /** + * Periodically checks if data has been loaded + */ + private function checkDataLoaded() { + // first time through set interval for method polling + if(!_DataLoadCheckIntervalID) { + _DataLoadCheckIntervalID = setInterval(Proxy.create(this, checkDataLoaded), DATA_LOAD_CHECK_INTERVAL); + } else { + _dataLoadCheckCount++; + // if dictionary and theme data loaded setup UI + if(_dictionaryLoaded && _themeLoaded) { + clearInterval(_DataLoadCheckIntervalID); + + setupUI(); + checkUILoaded(); + + + } else if(_dataLoadCheckCount >= DATA_LOAD_CHECK_TIMEOUT_COUNT) { + Debugger.log('reached timeout waiting for data to load.',Debugger.CRITICAL,'checkDataLoaded','Application'); + clearInterval(_DataLoadCheckIntervalID); + + + } + } + } + + private function setupUI():Void { trace('Setting up UI...'); //Create the application root _appRoot_mc = _container_mc.createEmptyMovieClip('appRoot_mc',APP_ROOT_DEPTH); - trace('_appRoot_mc: ' + _appRoot_mc); - //var depth:Number = _appRoot_mc.getNextHighestDepth(); - + _header_mc = _container_mc.attachMovie('LHeader','_header_mc',HEADER_DEPTH, {_x:HEADER_X,_y:HEADER_Y}); _header_mc.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)); } @@ -156,10 +222,8 @@ //If UI loaded check which events can be broadcast if(_UILoaded){ - //if(_seqLibLoaded && _headerLoaded){ - clearInterval(_UILoadCheckIntervalID); - start(); - //} + clearInterval(_UILoadCheckIntervalID); + start(); if(_uiLoadCheckCount >= UI_LOAD_CHECK_TIMEOUT_COUNT){ //if we havent loaded the library by the timeout count then give up @@ -232,7 +296,8 @@ _lesson.setSize(w,h); } - _lesson.setSize(w,h); + Header(_header_mc).resize(w); + _lesson.setSize(w,h-LESSON_Y); } @@ -249,6 +314,7 @@ Debugger.log('completed: ' + completed,Debugger.CRITICAL,'refreshProgress','Application'); Debugger.log('current: ' + current,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("_"); @@ -282,6 +348,10 @@ return _lesson; } + public function getHeader():Header{ + return Header(_header_mc); + } + public function showDebugger():Void{ _debugDialog = PopUpManager.createPopUp(Application.root, LFWindow, false,{title:'Debug',closeButton:true,scrollContentPath:'debugDialog'}); } @@ -307,12 +377,5 @@ } } } - - /** - * returns the the Comms instance - * - *public function getComms():Communication{ - * return _comms; - *} - */ + } \ No newline at end of file Index: lams_central/src/flash/org/lamsfoundation/lams/learner/Header.as =================================================================== diff -u -r99836743d17f7dbd8c0e9bd701947e629115741e -r636e2f5d120231efb4883420ed63fdcf94248fb4 --- lams_central/src/flash/org/lamsfoundation/lams/learner/Header.as (.../Header.as) (revision 99836743d17f7dbd8c0e9bd701947e629115741e) +++ lams_central/src/flash/org/lamsfoundation/lams/learner/Header.as (.../Header.as) (revision 636e2f5d120231efb4883420ed63fdcf94248fb4) @@ -26,19 +26,31 @@ import mx.managers.* import mx.events.* -import org.lamsfoundation.lams.learner.*; -import org.lamsfoundation.lams.common.Sequence; +import org.lamsfoundation.lams.learner.* +import org.lamsfoundation.lams.common.Sequence import org.lamsfoundation.lams.common.util.* -import org.lamsfoundation.lams.common.dict.* +import org.lamsfoundation.lams.common.dict.* +import org.lamsfoundation.lams.common.style.* class Header extends MovieClip { + private var _header_mc:MovieClip; private var _container:MovieClip; // Holding Container private var lams:MovieClip; // LAMS logo - private var resume_btn:Button; //Resume and Exit buttons - private var exit_btn:Button; + private var resume_btn:MovieClip; //Resume and Exit buttons + private var exit_btn:MovieClip; + private var resume_lbl:TextField; + private var exit_lbl:TextField; + + private var export_btn:Button; + private var export_lbl:TextField; + + private var _lessonName:Label; + private var panel:MovieClip; //The underlaying panel base - + + private var _tm:ThemeManager; + private var _dictionary:Dictionary; //These are defined so that the compiler can 'see' the events that are added at runtime by EventDispatcher private var dispatchEvent:Function; @@ -52,7 +64,11 @@ public function Header() { //Set up this class to use the Flash event delegation model EventDispatcher.initialize(this); - trace('[new Header]'); + + _tm = ThemeManager.getInstance(); + _dictionary = Dictionary.getInstance(); + _dictionary.addEventListener('init',Proxy.create(this,setLabels)); + //Create a clip that will wait a frame before dispatching init to give components time to setup this.onEnterFrame = init; } @@ -61,23 +77,21 @@ * Called a frame after movie attached to allow components to initialise */ public function init(){ - trace('initialing header..'); + trace('initialing header..'); + //Delete the enterframe dispatcher delete this.onEnterFrame; - _header_mc = this; + + _header_mc = this; + setStyles(); + setLabels(); + resize(Stage.width); - //Set the text for buttons - //resume_btn.label = Dictionary.getValue('learner_resume_btn'); - //exit_btn.label = Dictionary.getValue('learner_exit_btn'); - //get focus manager + set focus to OK button, focus manager is available to all components through getFocusManager - //fm = _container.getFocusManager(); //fm.enabled = true; //Add event listeners for resume and exit buttons - //_header_mc.resume_btn.addEventListener("release", this); - //_header_mc.exit_btn.addEventListener("release",this); resume_btn.onRelease = function(){ trace('on releasing resuming button..'); @@ -90,10 +104,36 @@ var app:Application = Application.getInstance(); app.getLesson().exitLesson(); } + + export_btn.onRelease = function(){ + var app:Application = Application.getInstance(); + app.getLesson().exportLesson(); + } dispatchEvent({type:'load',target:this}); } + + private function setStyles(){ + var styleObj = _tm.getStyleObject('smallLabel'); + _lessonName.setStyle('styleName', styleObj); + } + + private function setLabels(){ + //Set the text for buttons + resume_lbl.text = Dictionary.getValue('hd_resume_lbl'); + exit_lbl.text = Dictionary.getValue('hd_exit_lbl'); + export_lbl.text = Dictionary.getValue('ln_export_btn'); + } + + public function setLessonName(lessonName:String){ + _lessonName.text = lessonName; + } + + public function resize(width:Number){ + panel._width = width; + + } function get className():String { return 'Header';