Index: lams_central/web/lams_authoring.swf =================================================================== diff -u -r507885144beb497c8639eb64931c04b6e31c917f -r6071623eaaab7f58e5c1befe499b0fc1c76850dc Binary files differ Index: lams_central/web/lams_authoring_library.swf =================================================================== diff -u -r507885144beb497c8639eb64931c04b6e31c917f -r6071623eaaab7f58e5c1befe499b0fc1c76850dc Binary files differ Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as =================================================================== diff -u -r470bd43cd17fa6128a767fec948850a5815c1c55 -r6071623eaaab7f58e5c1befe499b0fc1c76850dc --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as (.../DesignDataModel.as) (revision 470bd43cd17fa6128a767fec948850a5815c1c55) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as (.../DesignDataModel.as) (revision 6071623eaaab7f58e5c1befe499b0fc1c76850dc) @@ -83,9 +83,9 @@ private var _groupings:Hashtable; private var _branches:Hashtable; private var _branchMappings:Hashtable; + private var _competences:Hashtable; private var _outputConditions:Hashtable; - private var _licenseID:Number; private var _licenseText:String; private var _workspaceFolderID:Number; @@ -108,6 +108,7 @@ _groupings = new Hashtable("_groupings"); _branches = new Hashtable("_branches"); _branchMappings = new Hashtable("_branchMappings"); + _competences = new Hashtable("_competences"); _outputConditions = new Hashtable("_outputConditions"); //set the defualts: @@ -582,6 +583,13 @@ _branchMappings.put(newMappingEntry.entryUIID, newMappingEntry); } + //set the competences in the hashtable + _competences = new Hashtable("_competences"); + for(var i=0; i 0) { + for (var i=0; i 0) for(var i=0; i 0) { + for (var i=0; i<_competenceMappings.length; i++) { + dto.competenceMappings.push(_competenceMappings[i]); + } + } + /* THESE are internal flags, not part of the design dto.supportsContribute = (_supportsContribute!=null) ? _supportsContribute: Config.BOOLEAN_NULL_VALUE; dto.supportsDefineLater = (_supportsDefineLater!=null) ? _supportsDefineLater: Config.BOOLEAN_NULL_VALUE; @@ -235,6 +253,10 @@ return _toolOutputDefinitions.values(); } + public function get competenceMappings():Array { + return _competenceMappings + } + //GETTERS + SETTERS /** Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cmpt/CompetenceContainer.as =================================================================== diff -u --- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cmpt/CompetenceContainer.as (revision 0) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/cmpt/CompetenceContainer.as (revision 6071623eaaab7f58e5c1befe499b0fc1c76850dc) @@ -0,0 +1,284 @@ +/*************************************************************************** + * 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.* +import org.lamsfoundation.lams.common.ws.* +import org.lamsfoundation.lams.common.ui.* +import org.lamsfoundation.lams.common.util.* +import org.lamsfoundation.lams.common.dict.* +import org.lamsfoundation.lams.common.style.* + +import org.lamsfoundation.lams.authoring.* +import org.lamsfoundation.lams.authoring.br.* +import org.lamsfoundation.lams.authoring.cmpt.*; + +import mx.controls.* +import mx.utils.* +import mx.managers.* +import mx.events.* + +/* +* Competence Container representing a single competence within the competence editor dialog +* @author Daniel Carlier +*/ +class org.lamsfoundation.lams.authoring.cmpt.CompetenceContainer extends MovieClip { + + //References to components + clips + private var _container:MovieClip; //The container window that holds the dialog + + private var _competenceTitle:String; + private var _description:String; + + private var competence_title_lbl:Label; + private var competence_description_lbl:Label; + + private var competence_title_txt:TextField; + private var competence_description_txt:TextArea; + + private var edit_competence_btn:Button; + private var delete_competence_btn:Button; + + private var _bgpanel:MovieClip; //The underlaying panel base + private var definitionDialog:MovieClip; + + private var app:Application; + 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; + private var yCancelOffset: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 CompetenceContainer(){ + //Set up this class to use the Flash event delegation model + EventDispatcher.initialize(this); + + app = Application.getInstance(); + + //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():Void{ + //Delete the enterframe dispatcher + delete this.onEnterFrame; + + //set the reference to the StyleManager + themeManager = ThemeManager.getInstance(); + + competence_title_lbl.text = "Title"; + competence_description_lbl.text = "Description"; + + edit_competence_btn.label = "Edit"; + delete_competence_btn.label = "Delete"; + + competence_title_txt.editable = false; + competence_description_txt.editable = false; + + if (_competenceTitle != null) competence_title_txt.text = _competenceTitle; + if (_description != null) competence_description_txt.text = _description; + + //get focus manager + set focus to OK button, focus manager is available to all components through getFocusManager + fm = _container.getFocusManager(); + fm.enabled = true; + + //EVENTS + //Add event listeners for ok, cancel and close buttons + edit_competence_btn.addEventListener('click',Delegate.create(this, editHandler)); + delete_competence_btn.addEventListener('click',Delegate.create(this, deleteHandler)); + + //work out offsets from bottom RHS of panel + xOkOffset = _bgpanel._width;// - close_btn._x; + yOkOffset = _bgpanel._height;// - close_btn._y; + + //Register as listener with StyleManager and set Styles + themeManager.addEventListener('themeChanged',this); + setStyles(); + + //fire event to say we have loaded + _container.contentLoaded(); + } + + public function setUpContent():Void{ + this._visible = true; + } + + public function editHandler():Void { + Debugger.log("editCompetence clicked: _competenceTitle "+_competenceTitle, Debugger.CRITICAL, "editHandler", "CompetenceContainer"); + CompetenceEditorDialog(app.dialog.scrollContent).editingCompetence = _competenceTitle; + + definitionDialog = app.getCanvas().openCompetenceDefinitionWindow(); + Selection.setFocus(definitionDialog.scrollContent); + } + + public function deleteHandler():Void { + Debugger.log("delete button clicked", Debugger.CRITICAL, "editCompetence", "CompetenceContainer"); + + var _isMapped:Boolean = isCompetenceMapped(); + + if (_isMapped) { + LFMessage.showMessageConfirm("The competence you are attempting to delete is currently mapped to one or more activities. Deleting this competence will remove it's mappings. Are you sure you want to proceed?", Proxy.create(this, deleteMappedCompetences, _competenceTitle), null); + } else { + deleteCompetence(); + } + + } + + /* + * Returns true if the competence is mapped to an activity + */ + private function isCompetenceMapped():Boolean { + + var activityKeys = app.getDesignDataModel().activities.keys(); + + for (var i=0; i 0) { + app.getDesignDataModel().competences.remove(editingCompetence); // remove the original competencetitle + app.getDesignDataModel().competences.put(updatedCompetenceName, updatedCompetenceDesc); + + // if the competence title has changed, update the mappings for all activities to the new competence title + if (editingCompetence != updatedCompetenceName) { + + var activityKeys:Array = app.getDesignDataModel().activities.keys(); // contains the activity UIIDs + + for (var i=0; iConstructor", Debugger.CRITICAL, "ViewCompetencesDialog", "ViewCompetencesDialog"); + + app = Application.getInstance(); + + //Create a clip that will wait a frame before dispatching init to give components time to setup + //MovieClipUtils.doLater(Proxy.create(this,init)); + + this.onEnterFrame = init; + } + + /** + * Called a frame after movie attached to allow components to initialise + */ + private function init():Void{ + + delete this.onEnterFrame; + + //set the reference to the StyleManager + themeManager = ThemeManager.getInstance(); + + Debugger.log("ViewCompetencesDialog->init", Debugger.CRITICAL, "init", "ViewCompetencesDialog"); + + // Set the styles + setStyles(); + + //Set the text for buttons + close_btn.label = Dictionary.getValue('ls_win_learners_close_btn'); + + //Set the labels + competences_lbl.text = "Competences in learning design: "+ app.monitor.ddm.title; + + //EVENTS + //Add event listeners for ok, cancel and close buttons + close_btn.addEventListener('click',Delegate.create(this, close)); + + //Assign Click (close button) and resize handlers + _container.addEventListener('click',this); + _container.addEventListener('size',this); + + //work out offsets from bottom RHS of panel + xCloseOffset = panel._width - close_btn._x; + yCloseOffset = panel._height - close_btn._y; + + loadCompetences(); + + //fire event to say we have loaded + _container.contentLoaded(); + } + + /** + * Called by the worspaceView after the content has loaded + * @usage + * @return + */ + public function setUpContent():Void{ + + //Add event listeners for ok, cancel and close buttons + close_btn.addEventListener('onPress',Delegate.create(this, close)); + } + + /** + * Called on initialisation + */ + private function setStyles(){ + //LFWindow, goes first to prevent being overwritten with inherited styles. + var styleObj = themeManager.getStyleObject('LFWindow'); + _container.setStyle('styleName',styleObj); + + //Apply panel style + styleObj = themeManager.getStyleObject('BGPanel'); + panel.setStyle('styleName', styleObj); + + //Apply scrollpane style + styleObj = themeManager.getStyleObject('scrollpane'); + competences_scp.setStyle('styleName', styleObj); + + //Get the button style from the style manager and apply to both buttons + styleObj = themeManager.getStyleObject('button'); + close_btn.setStyle('styleName',styleObj); + + //Apply label style + styleObj = themeManager.getStyleObject('label'); + competences_lbl.setStyle('styleName', styleObj); + + } + + /** + * 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(event:Object):Void{ + 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'); + } + } + + /** + * Called by the close button + */ + private function close(){ + _container.deletePopUp(); + } + + /** + * If an alert was spawned by this dialog this method is called when it's closed + */ + private function alertClosed(evt:Object){ + //Should prefs dialog be closed? + //TODO DI 01/06/05 check for delete of dialog + //_container.deletePopUp(); + } + + /** + * + * @usage + * @param newworkspaceView + * @return + */ + public function set monitorView (newMonitorView:MonitorView):Void { + _monitorView = newMonitorView; + } + + /** + * + * @usage + * @return + */ + public function get monitorView ():MonitorView { + return _monitorView; + } + + /** + * Event dispatched by parent container when close button clicked + */ + public function click(e:Object):Void{ + e.target.deletePopUp(); + } + + /* + * Clear Method to clear movies from scrollpane + * + */ + public static function clearScp(array:Array):Array{ + if(array != null){ + for (var i=0; i VIEW_COMPETENCES_DIALOG update received", Debugger.CRITICAL, "update", "LessonTabView"); + _monitorController = getController(); + showCompetencesDialog(mm); + break; case 'LEARNERS_LOADED' : _dialog.checkLearners(mm.organisation); break; @@ -697,6 +702,19 @@ opendialog.addEventListener('contentLoaded',Delegate.create(_monitorController,_monitorController.openDialogLoaded)); } + + + /** + * Opens the view competences dialog + */ + public function showCompetencesDialog(mm:MonitorModel) { + var opendialog:MovieClip = PopUpManager.createPopUp(mm.getMonitor().root, LFWindow, false,{title:"View Competences",closeButton:true,scrollContentPath:'viewCompetencesDialog'}); + opendialog.addEventListener('contentLoaded',Delegate.create(_monitorController,testFunction)); + } + + public function testFunction():Void { + Debugger.log("testFunction invoked, therefore content has been loaded", Debugger.CRITICAL, "testFunction", "LessonTabView"); + } /** * Index: lams_flash/src/common/flash/org/lamsfoundation/lams/common/ui/LFMenuBar.as =================================================================== diff -u -r5b44cd0646c0ee06e57059948a5d5f730040f431 -r6071623eaaab7f58e5c1befe499b0fc1c76850dc --- lams_flash/src/common/flash/org/lamsfoundation/lams/common/ui/LFMenuBar.as (.../LFMenuBar.as) (revision 5b44cd0646c0ee06e57059948a5d5f730040f431) +++ lams_flash/src/common/flash/org/lamsfoundation/lams/common/ui/LFMenuBar.as (.../LFMenuBar.as) (revision 6071623eaaab7f58e5c1befe499b0fc1c76850dc) @@ -175,7 +175,12 @@ tools_menu.addMenuItem({label:Dictionary.getValue('mnu_tools_trans'), instanceName:"drawTransitionalItem"}); tools_menu.addMenuItem({label:Dictionary.getValue('mnu_tools_opt'), instanceName:"drawOptionalItem"}); - //tools_menu.addMenuItem({type:"separator"}); + + tools_menu.addMenuItem({type:"separator"}); + tools_menu.addMenuItem({label:"Competence Editor", instanceName:"competenceEditor"}); + //tools_menu.addMenuItem({label:Dictionary.getValue('mnu_tools_competence'), instanceName:"competenceEditor"}); + + //tools_menu.addMenuItem({type:"separator"}); //tools_menu.addMenuItem({label:Dictionary.getValue('mnu_tools_prefs'), instanceName:"prefsItem", enabled:false}); /*================= @@ -220,6 +225,8 @@ view_menu = _mb.addMenu(Dictionary.getValue('mnu_view')); view_menu.addMenuItem({label:Dictionary.getValue('mnu_view_learners'), instanceName:"viewLearners", enabled:false}); + //view_menu.addMenuItem({label:Dictionary.getValue('mnu_view_competences'), instanceName:"viewCompetences", enabled:false}); + view_menu.addMenuItem({label:"View Competences", instanceName:"viewCompetences", enabled:true}); /*================= GO MENU @@ -377,6 +384,9 @@ case eventObj.menu.viewLearners : org.lamsfoundation.lams.monitoring.Application(app).getMonitor().getMM().setDialogOpen("VM_DIALOG"); break; + case eventObj.menu.viewCompetences : + org.lamsfoundation.lams.monitoring.Application(app).getMonitor().getMM().setDialogOpen("VIEW_COMPETENCES_DIALOG"); + break; } } @@ -394,6 +404,9 @@ break; case eventObj.menu.drawOptionalItem : org.lamsfoundation.lams.authoring.Application(app).getCanvas().toggleOptionalActivity(); + break; + case eventObj.menu.competenceEditor : + org.lamsfoundation.lams.authoring.Application(app).getCanvas().openCompetenceEditorWindow(); break; } } Index: lams_flash/src/common/flash/org/lamsfoundation/lams/common/util/CustomContextMenu.as =================================================================== diff -u -r5b44cd0646c0ee06e57059948a5d5f730040f431 -r6071623eaaab7f58e5c1befe499b0fc1c76850dc --- lams_flash/src/common/flash/org/lamsfoundation/lams/common/util/CustomContextMenu.as (.../CustomContextMenu.as) (revision 5b44cd0646c0ee06e57059948a5d5f730040f431) +++ lams_flash/src/common/flash/org/lamsfoundation/lams/common/util/CustomContextMenu.as (.../CustomContextMenu.as) (revision 6071623eaaab7f58e5c1befe499b0fc1c76850dc) @@ -116,7 +116,9 @@ menuArr[4] = [Dictionary.getValue('ccm_monitor_activityhelp'),getMonitorHelp, false, v, monitorC]; menuArr[5] = [Dictionary.getValue('ccm_paste_activity'),getPaste, false, v, authorC]; menuArr[6] = [Dictionary.getValue('ccm_pi'),getPI, true, true, authorC]; - menuArr[7] = [Dictionary.getValue('ccm_author_activityhelp'),getHelp, false, v, authorC]; + menuArr[7] = [Dictionary.getValue('ccm_author_activityhelp'),getHelp, false, v, authorC]; + //menuArr[8] = [Dictionary.getValue('ccm_author_activityhelp'),getHelp, false, v, authorC]; + menuArr[8] = ["View Mapped Competences",getMappedCompetences, false, v, monitorC]; for (var i=0; i