Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspectorNew.as =================================================================== diff -u --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspectorNew.as (revision 0) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/PropertyInspectorNew.as (revision 7147848f90ca32d0bc45bbdab32ddc6f4e1e616e) @@ -0,0 +1,966 @@ +/*************************************************************************** + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ************************************************************************ + */ + +import org.lamsfoundation.lams.authoring.cv.*; +import org.lamsfoundation.lams.authoring.*; +import org.lamsfoundation.lams.common.util.* +import org.lamsfoundation.lams.common.dict.* +import org.lamsfoundation.lams.common.style.* +import org.lamsfoundation.lams.common.ui.* +import org.lamsfoundation.lams.common.* +import mx.controls.* +import mx.utils.* +import mx.managers.* +import mx.events.* +/* +* +* @author DC +* @version 0.1 +* @comments Property Inspector for the canvas +* +*/ +class PropertyInspectorNew extends MovieClip{ + + private var _canvasModel:CanvasModel; + private var _canvasController:CanvasController; + private var _dictionary:Dictionary; + //References to components + clips + private var _piIsExpended:Boolean; + //private var PI_mc:MovieClip; + private var _tm:ThemeManager; + private var toolDisplayName_lbl:Label; + private var clickTarget_mc:MovieClip; + private var _depth:Number; + private var delimitLine:MovieClip; + + //Properties tab + private var title_lbl:Label; + private var title_txt:TextInput; + private var desc_lbl:Label; + private var desc_txt:TextInput; + private var piHeightHide:Number = 23; + private var piHeightFull:Number = 120; + private var grouping_lbl:Label; + private var grouping_opt_lbl:Label; + private var currentGrouping_lbl:Label; + private var appliedGroupingActivity_cmb:ComboBox; + private var appliedGroupingActivity_opt_cmb:ComboBox; + + private var editGrouping_btn:Button; + private var runOffline_chk:CheckBox; + private var defineLater_chk:CheckBox; + + //gates + private var gateType_lbl:Label; + private var gateType_cmb:ComboBox; + private var startOffset_lbl:Label; + private var endOffset_lbl:Label; + private var hours_lbl:Label; + private var mins_lbl:Label; + private var hoursEnd_lbl:Label; + private var minsEnd_lbl:Label; + private var hours_stp:NumericStepper; + private var mins_stp:NumericStepper; + private var endHours_stp:NumericStepper; + private var endMins_stp:NumericStepper; + + //grouping + private var groupType_lbl:Label; + private var numGroups_lbl:Label; + private var numLearners_lbl:Label; + private var groupType_cmb:ComboBox; + private var numGroups_rdo:RadioButton; + private var numLearners_rdo:RadioButton; + private var rndGroup_radio:RadioButtonGroup; + private var numGroups_stp:NumericStepper; + private var numRandomGroups_stp:NumericStepper; + private var numLearners_stp:NumericStepper; + + //Complex Activity + private var min_lbl:Label; + private var max_lbl:Label; + private var min_act:ComboBox; + private var max_act:ComboBox; + + //screen assets: + private var body_pnl:Label; + private var bar_pnl:Label; + + //Defined so compiler can 'see' events added at runtime by EventDispatcher + private var dispatchEvent:Function; + public var addEventListener:Function; + public var removeEventListener:Function; + + + /** + * Constructor + */ + public function PropertyInspectorNew(){ + //register to recive updates form the model + Debugger.log('Constructor',Debugger.GEN,'PropertyInspectorNew','PropertyInspectorNew'); + _tm = ThemeManager.getInstance(); + //Set up this class to use the Flash event delegation model + EventDispatcher.initialize(this); + _dictionary = Dictionary.getInstance(); + + //let it wait one frame to set up the components. + MovieClipUtils.doLater(Proxy.create(this,init)); + + + //_dictionary.addEventListener('init',Proxy.create(this,setupLabels)); + } + + public function init():Void{ + + //var yPos:Number = 0; + //_depth = this.getNextHighestDepth(); + //set SP the content path: + //PI_sp.contentPath = "empty_mc"; + //PI_mc = PI_sp.content.attachMovie("PI_items","PI_items",_depth++); + + _canvasModel = _canvasModel; + _canvasController = _canvasController; + _piIsExpended = false; + _canvasModel.setPIHeight(piHeightHide); + //_global.breakpoint(); + _canvasModel.addEventListener('viewUpdate',this); + clickTarget_mc.onRelease = Proxy.create (this, localOnRelease); + clickTarget_mc.onReleaseOutside = Proxy.create (this, localOnReleaseOutside); + //Debugger.log('_canvasModel: ' + _canvasModel,Debugger.GEN,'init','PropertyInspector'); + + //set up handlers + title_txt.addEventListener("focusOut",this); + desc_txt.addEventListener("focusOut",this); + runOffline_chk.addEventListener("click",this); + defineLater_chk.addEventListener("click",this); + + rndGroup_radio.addEventListener("click",Delegate.create(this,onGroupingMethodChange)); + groupType_cmb.addEventListener("change",Delegate.create(this,onGroupTypeChange)); + gateType_cmb.addEventListener("change",Delegate.create(this,onGateTypeChange)); + appliedGroupingActivity_cmb.addEventListener("change",Delegate.create(this,onAppliedGroupingChange)); + appliedGroupingActivity_opt_cmb.addEventListener("change",Delegate.create(this,onAppliedGroupingChange)); + hours_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); + mins_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); + hours_stp.addEventListener("focusOut",Delegate.create(this,onScheduleOffsetChange)); + mins_stp.addEventListener("focusOut",Delegate.create(this,onScheduleOffsetChange)); + endHours_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); + endMins_stp.addEventListener("change",Delegate.create(this,onScheduleOffsetChange)); + endHours_stp.addEventListener("focusOut",Delegate.create(this,onScheduleOffsetChange)); + endMins_stp.addEventListener("focusOut",Delegate.create(this,onScheduleOffsetChange)); + numGroups_stp.addEventListener("change",Delegate.create(this,updateGroupingMethodData)); + numLearners_stp.addEventListener("change",Delegate.create(this,updateGroupingMethodData)); + numLearners_stp.addEventListener("focusOut",Delegate.create(this,updateGroupingMethodData)); + numGroups_stp.addEventListener("focusOut",Delegate.create(this,updateGroupingMethodData)); + numRandomGroups_stp.addEventListener("focusOut",Delegate.create(this,updateGroupingMethodData)); + + dispatchEvent({type:'load',target:this}); + this.onEnterFrame = setupLabels; + + } + + public function setupLabels(){ + + //trace("I am in PI setupLabels") + //trace("PI_mc "+PI_mc) + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+"" + gateType_lbl.text = Dictionary.getValue('trans_dlg_gatetypecmb'); + hours_lbl.text = Dictionary.getValue('pi_hours'); + mins_lbl.text = Dictionary.getValue('pi_mins'); + hoursEnd_lbl.text = Dictionary.getValue('pi_hours'); + minsEnd_lbl.text = Dictionary.getValue('pi_mins'); + startOffset_lbl.text = Dictionary.getValue('pi_start_offset'); + endOffset_lbl.text = Dictionary.getValue('pi_end_offset'); + + groupType_lbl.text = Dictionary.getValue('pi_group_type'); + numGroups_lbl.text = Dictionary.getValue('pi_num_groups'); + numLearners_lbl.text = Dictionary.getValue('pi_num_learners'); + + //Properties tab + title_lbl.text = Dictionary.getValue('pi_lbl_title'); + desc_lbl.text = Dictionary.getValue('pi_lbl_desc'); + grouping_lbl.text = Dictionary.getValue('pi_lbl_group'); + grouping_opt_lbl.text = Dictionary.getValue('pi_lbl_group'); + currentGrouping_lbl.text = Dictionary.getValue('pi_lbl_currentgroup'); + defineLater_chk.label = Dictionary.getValue('pi_definelater'); + runOffline_chk.label = Dictionary.getValue('pi_runoffline'); + + //Complex Activity + min_lbl.text = Dictionary.getValue('pi_min_act'); + max_lbl.text = Dictionary.getValue('pi_max_act'); + + //populate the synch type combo: + gateType_cmb.dataProvider = Activity.getGateActivityTypes(); + groupType_cmb.dataProvider = Grouping.getGroupingTypesDataProvider(); + + //Call to apply style to all the labels and input fields + setStyles(); + + //fire event to say we have loaded + + delete this.onEnterFrame; + //hide all the controls at startup + delimitLine._visible = false; + showGroupingControls(false); + showGeneralControls(false); + showOptionalControls(false); + showToolActivityControls(false); + showGateControls(false); + showAppliedGroupingControls(false); + + + } + + + public function localOnRelease():Void{ + + if (_piIsExpended){ + trace("P Pressed in 'localOnRelease' and _piIsExpended is: "+_piIsExpended) + _piIsExpended = false + _canvasModel.setPIHeight(piHeightHide); + + }else { + trace("P Pressed in 'localOnRelease' and _piIsExpended is: "+_piIsExpended) + _piIsExpended = true + _canvasModel.setPIHeight(piHeightFull); + //Application.getInstance().onResize(); + } + } + + public function localOnReleaseOutside():Void{ + Debugger.log('Release outside so no event has been fired, current state is: ' + _piIsExpended,Debugger.GEN,'localOnReleaseOutside','PropertyInspectorNew'); + + } + /** + * Recieves update events from the model. + * @usage + * @param event + * @return + */ + public function viewUpdate(event:Object):Void{ + Debugger.log('Recived an Event dispather UPDATE!, updateType:'+event.updateType+', target'+event.target,4,'viewUpdate','PropertyInspectorNew'); + //Update view from info object + + var cm:CanvasModel = event.target; + + switch (event.updateType){ + case 'SELECTED_ITEM' : + updateItemProperties(cm); + break; + + + default : + //Debugger.log('unknown update type :' + event.updateType,Debugger.CRITICAL,'update','org.lamsfoundation.lams.CanvasView'); + } + + } + + /** + * Get called when something is selected in the cavas. + * Updates the details in the property inspector widgets + * Depending on the type of item selected, different controls will be shown + * @usage + * @param cm + * @return + */ + private function updateItemProperties(cm:CanvasModel):Void{ + //try to cast the selected item to see what we have (instance of des not seem to work) + if(CanvasActivity(cm.selectedItem) != null){ + // its a Canvas activity then + Debugger.log('Its a canvas activity',4,'updateItemProperties','PropertyInspector'); + var ca = CanvasActivity(cm.selectedItem); + var a:Activity = ca.activity; + if(a.isGateActivity()){ + //its a gate + delimitLine._visible = true; + showGroupingControls(false); + showToolActivityControls(false); + showOptionalControls(false); + showGateControls(true); + showAppliedGroupingControls(true); + //showGeneralProperties(a) + showGateActivityProperties(GateActivity(a)); + checkEnableGateControls(); + showAppliedGroupingProperties(a); + //show the title + title_txt.text = StringUtils.cleanNull(a.title); + desc_txt.text = StringUtils.cleanNull(a.description); + showGeneralControls(true); + //PI_sp.refreshPane(); + }else if(a.isGroupActivity()){ + //its a grouping activity + delimitLine._visible = true; + showGroupingControls(true); + showGeneralControls(true); + showOptionalControls(false); + showRelevantGroupOptions(); + showToolActivityControls(false); + showGateControls(false); + showAppliedGroupingControls(true); + //showGeneralProperties(a) + populateGroupingProperties(GroupingActivity(a)); + showAppliedGroupingProperties(a); + //show the title + title_txt.text = StringUtils.cleanNull(a.title); + desc_txt.text = StringUtils.cleanNull(a.description); + //PI_sp.refreshPane(); + + }else{ + //its a tool activity + delimitLine._visible = false; + showOptionalControls(false); + showGeneralControls(true); + showGroupingControls(false); + showToolActivityControls(true); + showGateControls(false); + showAppliedGroupingControls(true); + showToolActivityProperties(ToolActivity(a)); + //showGeneralProperties(a) + showAppliedGroupingProperties(a); + //show the title + title_txt.text = StringUtils.cleanNull(a.title); + desc_txt.text = StringUtils.cleanNull(a.description); + //PI_sp.refreshPane(); + } + + + }else if(CanvasOptionalActivity(cm.selectedItem) != null){ + var co = CanvasOptionalActivity(cm.selectedItem); + var cca:ComplexActivity = ComplexActivity(co.activity); + //its an optional activity + delimitLine._visible = true; + showOptionalControls(true); + showGeneralControls(true); + showGroupingControls(false); + //showRelevantGroupOptions(); + showToolActivityControls(false); + showGateControls(false); + showAppliedGroupingControls(true); + //showGeneralProperties(cca) + populateGroupingProperties(GroupingActivity(cca)); + showAppliedGroupingProperties(cca); + showOptionalActivityProperties(cca); + //show the title + title_txt.text = StringUtils.cleanNull(cca.title); + desc_txt.text = StringUtils.cleanNull(cca.description); + //PI_sp.refreshPane(); + }else if(CanvasParallelActivity(cm.selectedItem) != null){ + var co = CanvasParallelActivity(cm.selectedItem); + var cca:ComplexActivity = ComplexActivity(co.activity); + delimitLine._visible = true; + //its an parallel activity + showOptionalControls(false); + showGeneralControls(true); + showGroupingControls(false); + //showRelevantGroupOptions(); + showToolActivityControls(false); + showGateControls(false); + showAppliedGroupingControls(true); + //showGeneralProperties(cca) + populateGroupingProperties(GroupingActivity(cca)); + showAppliedGroupingProperties(cca); + showParallelActivityProperties(cca); + //show the title + title_txt.text = StringUtils.cleanNull(cca.title); + desc_txt.text = StringUtils.cleanNull(cca.description); + }else if(CanvasTransition(cm.selectedItem) != null){ + var ct = CanvasTransition(cm.selectedItem); + var t:Transition = ct.transition; + Debugger.log('Its a canvas transition',4,'updateItemProperties','PropertyInspector'); + delimitLine._visible = false; + showTransitionProperties(t); + //showGeneralProperties(t) + showGeneralControls(false); + showOptionalControls(false); + showGroupingControls(false); + showToolActivityControls(false); + showGateControls(false); + showAppliedGroupingControls(false); + //PI_sp.complete; + + }else{ + Debugger.log('Its a something we dont know',Debugger.CRITICAL,'updateItemProperties','PropertyInspector'); + delimitLine._visible = false; + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+"" + showGroupingControls(false); + showGeneralControls(false); + showOptionalControls(false); + showRelevantGroupOptions(); + showToolActivityControls(false); + showGateControls(false); + showAppliedGroupingControls(false); + + //PI_sp.complete + } + } + + private function showToolActivityControls(v:Boolean){ + + + //desc_lbl.visible = v; + //desc_txt.visible = v; + grouping_lbl.visible = v; + currentGrouping_lbl.visible = v; + runOffline_chk.visible = v; + defineLater_chk.visible = v; + editGrouping_btn.visible = v; + } + + + private function showGeneralControls(v:Boolean){ + + title_lbl.visible = v; + title_txt.visible = v; + } + + private function showOptionalControls(v:Boolean){ + + min_lbl.visible = v; + max_lbl.visible = v; + min_act.visible = v; + max_act.visible = v; + desc_lbl.visible = v; + desc_txt.visible = v; + grouping_opt_lbl.visible = v; + appliedGroupingActivity_opt_cmb.visible = v; + + + } + + private function showGateControls(v:Boolean){ + trace('showGateControls....'+v); + hours_lbl.visible = v; + mins_lbl.visible = v; + hoursEnd_lbl.visible = v; + minsEnd_lbl.visible = v; + hours_stp.visible = v; + mins_stp.visible = v; + endHours_stp.visible = v; + endMins_stp.visible = v; + gateType_lbl.visible = v; + gateType_cmb.visible = v; + startOffset_lbl.visible = v; + endOffset_lbl.visible = v; + + } + + /** + * Shows or hides the app.lied grouping + * AND title fields + * @usage + * @param v + * @return + */ + private function showAppliedGroupingControls(v:Boolean){ + //trace('show grp controls.....'+v); + grouping_lbl.visible = v; + appliedGroupingActivity_cmb.visible = v; + + + + } + + private function showGroupingControls(v:Boolean){ + //grouping + groupType_lbl.visible = v; + groupType_cmb.visible = v; + if(v){ + showRelevantGroupOptions(); + }else{ + numGroups_lbl.visible = v; + numLearners_lbl.visible = v; + numGroups_rdo.visible = v; + numLearners_rdo.visible = v; + numGroups_stp.visible = v; + numRandomGroups_stp.visible = v; + numLearners_stp.visible = v; + + } + + } + + private function showToolActivityProperties(ta:ToolActivity){ + + + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+" - "+StringUtils.cleanNull(ta.toolDisplayName); + //title_txt.text = StringUtils.cleanNull(ta.title); + //desc_txt.text = StringUtils.cleanNull(ta.description); + runOffline_chk.selected = ta.runOffline; + defineLater_chk.selected = ta.defineLater; + + currentGrouping_lbl.text = "GroupingUIID:"+StringUtils.cleanNull(ta.runOffline.groupingUIID); + + + } + + private function showGeneralProperties(ta:ToolActivity){ + + //desc_txt.text = StringUtils.cleanNull(ta.description); + } + + private function showOptionalActivityProperties(ca:ComplexActivity){ + + + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+" - "+Dictionary.getValue('pi_optional_title'); + //title_txt.text = StringUtils.cleanNull(ta.title); + //desc_txt.text = StringUtils.cleanNull(ta.description); + runOffline_chk.selected = ca.runOffline; + defineLater_chk.selected = ca.defineLater; + + currentGrouping_lbl.text = "GroupingUIID:"+StringUtils.cleanNull(ca.runOffline.groupingUIID); + + + } + + private function showParallelActivityProperties(ca:ComplexActivity){ + + + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+" - "+Dictionary.getValue('pi_parallel_title'); + //title_txt.text = StringUtils.cleanNull(ta.title); + //desc_txt.text = StringUtils.cleanNull(ta.description); + runOffline_chk.selected = ca.runOffline; + defineLater_chk.selected = ca.defineLater; + + currentGrouping_lbl.text = "GroupingUIID:"+StringUtils.cleanNull(ca.runOffline.groupingUIID); + + + } + + private function showGateActivityProperties(ga:GateActivity){ + toolDisplayName_lbl.text = ""+Dictionary.getValue('pi_title')+" - "+Dictionary.getValue('pi_activity_type_gate'); + //loop through combo to find SI of our gate activity type + trace("gate Type is: "+ga.activityTypeID) + for (var i=0; i - "+Dictionary.getValue('pi_activity_type_grouping'); + Debugger.log('This is the grouping object:',Debugger.GEN,'populateGroupingProperties','PropertyInspector'); + ObjectUtils.printObject(g); + //loop through combo to fins SI of our gate activity type + for (var i=0; i