Index: lams_common/src/flash/org/lamsfoundation/lams/common/ws/Workspace.as =================================================================== diff -u -r4f7a556ac0a2c0a63f5b030068542968678b3167 -re10a5d443d7b79cb23358f7c11e0f89d61d5cf60 --- lams_common/src/flash/org/lamsfoundation/lams/common/ws/Workspace.as (.../Workspace.as) (revision 4f7a556ac0a2c0a63f5b030068542968678b3167) +++ lams_common/src/flash/org/lamsfoundation/lams/common/ws/Workspace.as (.../Workspace.as) (revision e10a5d443d7b79cb23358f7c11e0f89d61d5cf60) @@ -1,5 +1,7 @@ import org.lamsfoundation.lams.common.ws.* import org.lamsfoundation.lams.authoring.* +import org.lamsfoundation.lams.common.util.* +import mx.utils.* /** * @@ -33,14 +35,16 @@ * @param id - the Learning design ID */ public function userSelectItem(){ - trace('Workspace.userSelectItem'); - //todo DI 07/04/05 write code user design selection, just a stub at the moment, calls itemSelected - itemSelected(1); //Open the workspace dialog in the centre of the screen - workspaceView.createWorkspacePopup('centre'); + workspaceView.createWorkspaceDialog('centre',Delegate.create(this,itemSelected)); } + /** + * Called when design has been selected from within the workspace dialog, inovked via callback method. + */ private function itemSelected(designId:Number){ + Debugger.log('!!designID:'+designId,Debugger.GEN,'itemSelected','org.lamsfoundation.lams.Workspace'); + //Design has been chosen, get Canvas to open design Application.getInstance().getCanvas().openDesignById(designId); } Index: lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceDialog.as =================================================================== diff -u -rf76324667b76e42eaf63b62175a38b12c1c27cfb -re10a5d443d7b79cb23358f7c11e0f89d61d5cf60 --- lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceDialog.as (.../WorkspaceDialog.as) (revision f76324667b76e42eaf63b62175a38b12c1c27cfb) +++ lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceDialog.as (.../WorkspaceDialog.as) (revision e10a5d443d7b79cb23358f7c11e0f89d61d5cf60) @@ -1,109 +1,130 @@ -import mx.controls.* -import mx.utils.* -import mx.managers.* -import org.lamsfoundation.lams.common.ws.* -import org.lamsfoundation.lams.common.util.* +import mx.controls.* +import mx.utils.* +import mx.managers.* +import mx.events.* +import org.lamsfoundation.lams.common.ws.* +import org.lamsfoundation.lams.common.util.* import org.lamsfoundation.lams.common.dict.* -import org.lamsfoundation.lams.common.style.* - -/** -* @author DI -*/ -class WorkspaceDialog extends MovieClip{ - - //private static var OK_OFFSET:Number = 50; +import org.lamsfoundation.lams.common.style.* + +/** +* @author DI +*/ +class WorkspaceDialog extends MovieClip{ + + //private static var OK_OFFSET:Number = 50; //private static var CANCEL_OFFSET:Number = 50; - //References to components + clips + //References to components + clips private var _container:MovieClip; //The container window that holds the dialog - private var ok_btn:Button; //OK+Cancel buttons - private var cancel_btn:Button; - private var panel:MovieClip; //The underlaying panel base - private var treeview:Tree; //Treeview for navigation through workspace folder structure - private var datagrid:DataGrid; //The details grid + private var ok_btn:Button; //OK+Cancel buttons + private var cancel_btn:Button; + private var panel:MovieClip; //The underlaying panel base + private var treeview:Tree; //Treeview for navigation through workspace folder structure + private var datagrid:DataGrid; //The details grid private var myLabel_lbl:Label; //Text labels private var input_txt:TextInput; //Text labels - private var combo:ComboBox; //Text labels + private var combo:ComboBox; //Text labels - private var fm:FocusManager; //Reference to focus manager private var themeManager:ThemeManager; //Theme manager - //Dimensions for resizing - private var xOkOffset:Number; - private var yOkOffset:Number; - private var xCancelOffset:Number; + //Dimensions for resizing + private var xOkOffset:Number; + private var yOkOffset:Number; + private var xCancelOffset:Number; private var yCancelOffset:Number; - + private var _okCallBack:Function; + private var _selectedDesignId:Number; + + //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; + public var removeEventListener:Function; + + /** * constructor */ - function WorkspaceDialog(){ - trace('WorkSpaceDialog.constructor'); - //Create a clip that will wait a frame before dispatching init to give components time to setup - this.onEnterFrame = init; - } + function WorkspaceDialog(){ + //trace('WorkSpaceDialog.constructor'); + //Set up this class to use the Flash event delegation model + EventDispatcher.initialize(this); + + //Create a clip that will wait a frame before dispatching init to give components time to setup + this.onEnterFrame = init; + } /** * Called a frame after movie attached to allow components to initialise - */ - private function init(){ - //Delete the enterframe dispatcher + */ + private function init(){ + //Delete the enterframe dispatcher delete this.onEnterFrame; + //TODO DI 25/05/05 ID set as 1 is just a stub, selected id from dialog should replace + _selectedDesignId = 1; + //Set up the treeview setUpTreeview(); //set the reference to the StyleManager themeManager = ThemeManager.getInstance(); - - //Set the container reference + + //Set the container reference Debugger.log('container=' + _container,Debugger.GEN,'init','org.lamsfoundation.lams.wsDialog'); //Set the text on the labels myLabel_lbl.text = 'text label'; - - //Set the text for buttons - ok_btn.label = Dictionary.getValue(1); - cancel_btn.label = Dictionary.getValue(2); - - //get focus manager + set focus to OK button, focus manager is available to all components through getFocusManager - fm = _container.getFocusManager(); - fm.enabled = true; - treeview.setFocus(); - fm.defaultPushButton = ok_btn; + //Set the text for buttons + ok_btn.label = Dictionary.getValue(1); + cancel_btn.label = Dictionary.getValue(2); + + //get focus manager + set focus to OK button, focus manager is available to all components through getFocusManager + fm = _container.getFocusManager(); + fm.enabled = true; + ok_btn.setFocus(); + //fm.defaultPushButton = ok_btn; + Debugger.log('ok_btn.tabIndex: '+ok_btn.tabIndex,Debugger.GEN,'init','org.lamsfoundation.lams.WorkspaceDialog'); - - //Add event listeners for ok, cancel and close buttons - ok_btn.addEventListener('click',Delegate.create(this, ok)); - cancel_btn.addEventListener('click',Delegate.create(this, cancel)); - //Tie parent click event (generated on clicking close button) to this instance - _container.addEventListener('click',this); - //Register for LFWindow size events - _container.addEventListener('size',this); - - Debugger.log('setting offsets',Debugger.GEN,'init','org.lamsfoundation.lams.common.ws.WorkspaceDialog'); - - //work out offsets from bottom RHS of panel - xOkOffset = panel._width - ok_btn._x; - yOkOffset = panel._height - ok_btn._y; - xCancelOffset = panel._width - cancel_btn._x; + + //Add event listeners for ok, cancel and close buttons + ok_btn.addEventListener('click',Delegate.create(this, ok)); + cancel_btn.addEventListener('click',Delegate.create(this, cancel)); + //Tie parent click event (generated on clicking close button) to this instance + _container.addEventListener('click',this); + //Register for LFWindow size events + _container.addEventListener('size',this); + + Debugger.log('setting offsets',Debugger.GEN,'init','org.lamsfoundation.lams.common.ws.WorkspaceDialog'); + + //work out offsets from bottom RHS of panel + xOkOffset = panel._width - ok_btn._x; + yOkOffset = panel._height - ok_btn._y; + xCancelOffset = panel._width - cancel_btn._x; yCancelOffset = panel._height - cancel_btn._y; //Register as listener with StyleManager and set Styles themeManager.addEventListener('themeChanged',this); setStyles(); + + //Fire contentLoaded event, this is required by all dialogs so that creator of LFWindow can know content loaded + _container.contentLoaded(); } /** * Event fired by StyleManager class to notify listeners that Theme has changed * it is up to listeners to then query Style Manager for relevant style info */ - public function themeChanged(){ - //Theme has changed so update objects to reflect new styles - setStyles(); + public function themeChanged(event:Object){ + if(event.type=='themeChanged') { + //Theme has changed so update objects to reflect new styles + setStyles(); + }else { + Debugger.log('themeChanged event broadcast with an object.type not equal to "themeChanged"',Debugger.CRITICAL,'themeChanged','org.lamsfoundation.lams.WorkspaceDialog'); + } } /** @@ -137,34 +158,36 @@ //Apply combo style styleObj = themeManager.getStyleObject('combo'); combo.setStyle('styleName',styleObj); - } - - /** - * Called by the cancel button - */ - private function cancel(){ - trace('Cancel'); - //close parent window - _container.deletePopUp(); - } - - /** - * Called by the OK button - */ - private function ok(){ - trace('OK'); - //If validation successful commit + close parent window - } - - /** - * Event dispatched by parent container when close button clicked - */ - private function click(e:Object){ - trace('WorkspaceDialog.click'); - e.target.deletePopUp(); - } + + /** + * Called by the cancel button + */ + private function cancel(){ + trace('Cancel'); + //close parent window + _container.deletePopUp(); + } + /** + * Called by the OK button + */ + private function ok(){ + trace('OK'); + //If validation successful commit + close parent window + //Fire callback with selectedId + dispatchEvent({type:'okClicked',target:this}); + _container.deletePopUp(); + } + + /** + * Event dispatched by parent container when close button clicked + */ + private function click(e:Object){ + trace('WorkspaceDialog.click'); + e.target.deletePopUp(); + } + //Sets up the treeview to load initial data private function setUpTreeview(){ //TODO DI 12/05/05 Make call to server to get inital workspace root folders Stub for now uses dummy XML @@ -213,26 +236,29 @@ treeview.selectedNode = null; } } - - /** - * Main resize method, called by scrollpane container/parent - */ - public function setSize(w:Number,h:Number){ - //Debugger.log('setSize',Debugger.GEN,'setSize','org.lamsfoundation.lams.common.ws.WorkspaceDialog'); - //Size the panel - panel.setSize(w,h); - - //Buttons - ok_btn.move(w-xOkOffset,h-yOkOffset); - cancel_btn.move(w-xCancelOffset,h-yCancelOffset); - } - - //Gets+Sets - /** - * set the container refernce to the window holding the dialog - */ - function set container(value:MovieClip){ - _container = value; - } - + + /** + * Main resize method, called by scrollpane container/parent + */ + public function setSize(w:Number,h:Number){ + //Debugger.log('setSize',Debugger.GEN,'setSize','org.lamsfoundation.lams.common.ws.WorkspaceDialog'); + //Size the panel + panel.setSize(w,h); + + //Buttons + ok_btn.move(w-xOkOffset,h-yOkOffset); + cancel_btn.move(w-xCancelOffset,h-yCancelOffset); + } + + //Gets+Sets + /** + * set the container refernce to the window holding the dialog + */ + function set container(value:MovieClip){ + _container = value; + } + + function get selectedDesignId():Number { + return _selectedDesignId; + } } \ No newline at end of file Index: lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceView.as =================================================================== diff -u -r4f7a556ac0a2c0a63f5b030068542968678b3167 -re10a5d443d7b79cb23358f7c11e0f89d61d5cf60 --- lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceView.as (.../WorkspaceView.as) (revision 4f7a556ac0a2c0a63f5b030068542968678b3167) +++ lams_common/src/flash/org/lamsfoundation/lams/common/ws/WorkspaceView.as (.../WorkspaceView.as) (revision e10a5d443d7b79cb23358f7c11e0f89d61d5cf60) @@ -5,6 +5,7 @@ import org.lamsfoundation.lams.common.dict.* import org.lamsfoundation.lams.authoring.* import mx.managers.* +import mx.utils.* /** * Authoring view for the canvas @@ -14,7 +15,9 @@ { //Canvas clip private var _workspace_mc:MovieClip; - private var workspaceDialog:MovieClip; + private var workspaceDialog:MovieClip; + private var _popup:MovieClip; + private var okClickedCallback:Function; /* * Constructor @@ -39,13 +42,45 @@ * Create a popup dialog containing workspace * @param pos - Position, either 'centre' or an object containing x + y coordinates */ - public function createWorkspacePopup(pos:Object){ + public function createWorkspaceDialog(pos:Object,callBack:Function){ + var dialog:MovieClip; //Check to see whether this should be a centered or positioned dialog if(typeof(pos)=='string'){ - var popup = PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue(0),closeButton:true,scrollContentPath:'workspaceDialog'}); - //popup.centre(); + dialog = PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue(0),closeButton:true,scrollContentPath:'workspaceDialog'}); } else { - var popup = PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue(0),closeButton:true,scrollContentPath:'workspaceDialog',_x:pos.x,_y:pos.y}); + dialog = PopUpManager.createPopUp(Application.root, LFWindow, true,{title:Dictionary.getValue(0),closeButton:true,scrollContentPath:'workspaceDialog',_x:pos.x,_y:pos.y}); } - } + //Assign dialog load handler + dialog.addEventListener('contentLoaded',Delegate.create(this,dialogLoaded)); + okClickedCallback = callBack; + } + + /** + * called when the dialog is loaded + */ + public function dialogLoaded(evt:Object) { + Debugger.log('!evt.type:'+evt.type,Debugger.GEN,'dialogLoaded','org.lamsfoundation.lams.WorkspaceView'); + //Check type is correct + if(evt.type == 'contentLoaded'){ + //Set up callback for ok button click + Debugger.log('!evt.target.scrollContent:'+evt.target.scrollContent,Debugger.GEN,'dialogLoaded','org.lamsfoundation.lams.WorkspaceView'); + evt.target.scrollContent.addEventListener('okClicked',Delegate.create(this,okClicked)); + }else { + //TODO DI 25/05/05 raise wrong event type error + } + } + + /** + * Workspace dialog OK button clicked handler + */ + private function okClicked(evt:Object) { + Debugger.log('!okClicked:',Debugger.GEN,'okClicked','org.lamsfoundation.lams.WorkspaceView'); + //Check type is correct + if(evt.type == 'okClicked'){ + //Call the callback, passing in the design selected designId + okClickedCallback(evt.target.selectedDesignId); + }else { + //TODO DI 25/05/05 raise wrong event type error + } + } }