/** * Project : AMDA-NG4 * Name : InteractiveModule.js * @class amdaDesktop.InteractiveModule * @extends amdaDesktop.AmdaModule * @brief Generic Interactive Module controller definition * @author CDA * @version $Id: InteractiveModule.js 2109 2014-02-19 17:47:37Z elena $ */ Ext.define('amdaDesktop.InteractiveModule', { extend: 'amdaDesktop.AmdaModule', /** * @cfg {amdaModel.InteractiveNode} the explorer node linked to this module */ linkedNode : null, nodeDataModel: ' ', width : 700, height: 510, uiType : ' ', // helpTitle : 'help on the module', /** * Module link in Start Menu */ init : function() { this.launcher = { text : this.title, iconCls : this.icon, handler : this.createWindow, scope : this }; }, /** * Window Creation method of the Module */ createWindow : function (onShowEvent, onAfterCreateObject) { if (this.linkedNode === null){ this.createLinkedNode(); } this.createObject(); if (onAfterCreateObject) { onAfterCreateObject(); } var desktop = this.app.getDesktop(); var win = desktop.getWindow(this.id); var me = this; if (!win) { win = desktop.createWindow({ id : this.id, title : this.title, width : this.width, minWidth : this.width, height : this.height, minHeight: this.height, iconCls : this.icon, border : false, //constrainHeader : true, layout : 'fit', stateful : true, stateId : this.id, stateEvents: ['move','show','resize'], tools: [ { type:'help', qtip: this.helpTitle, scope:this, handler: function(event, toolEl, panel){ myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.info.id, true, function(module) { module.createWindow(me.helpFile, me.helpTitle); }); } } ], items : [ { xtype : this.uiType, object : this.linkedNode.get('object'), id : this.contentId } ] }); this.closed = false; win.on({ scope: this, // on window activation event activate: function(){ // order to pin this Module with WsExplorer this.pin(); }, // on window closing event beforeclose: function (win, eOpts) { this.saveState(); var isDirty = this.getUiContent().fclose(); if (!this.closed && isDirty) { Ext.Msg.confirm('Close', 'Current window has been modified.\nDo you want to close the window ?' , function (btn, text){ if (btn == 'yes'){ // mark this.closed as true before the call to close() as that will fire the beforeclose event again this.closed = true; win.close(); } },this); } else if (!isDirty) { this.closed = true; } if (this.closed) { //remove object from linkedNode in order to minimize used memory this.linkedNode.set('object',''); // unlink Node this.setLinkedNode(null); // order to unpin this Module from WsExplorer this.unpin(); } // Don't automatically close if the form is dirty, let the call to this.close() within the confirm box close the window. return this.closed; }, minimize: function (win, eOpts) { // Save form if (this.getUiContent().formPanel) this.getUiContent().formPanel.getForm().updateRecord(this.linkedNode.get('object')); else this.getUiContent().items.getAt(0).getForm().updateRecord(this.linkedNode.get('object')); // Save grids this.getUiContent().updateObject(); }, show: function() { // // configuration of empty catalog // if (this.isOperationOnShow) // // Ext.Function.defer(this.operationOnShow, 2000, this); // this.operationOnShow(); if (onShowEvent) onShowEvent(); } }); } else { // second arg 'true' is used in CatalogUI to mark if Grid Reconfiguration is needed this.getUiContent().setObject(this.linkedNode.get('object'), true); } if (!win.isVisible()) { win.show(); } else if (onShowEvent) { onShowEvent(); } }, /** * Mechanism to attach a Module to the Workspace Explorer to enable interactions * @param moduleName the module to attach */ pin : function() { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id).pinMechanism(this.id); }, /** * Mechanism to detach a Module to the Workspace Explorer to enable interactions * @param moduleName the module to detach */ unpin : function() { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id).setPinedModule(null); }, /** * Getter of linkedNode * @return {amdaModel.InteractiveNode} linkedNode */ getLinkedNode : function (){ return this.linkedNode; }, /** * link the current node in the current module * @param {amdaModel.InteractiveNode} myLinkedNode */ setLinkedNode : function (myLinkedNode){ if (this.linkedNode) { this.linkedNode.set('object',''); } this.linkedNode = myLinkedNode; }, /** * * create Node of Appropriate Type if it doesn't exist */ createLinkedNode : function (){ var newNode = Ext.create(this.nodeDataModel, { leaf : true, contextNode : this.contextNode }); this.setLinkedNode(newNode); }, /** * * */ createObject : function (obj){ var object; if (this.linkedNode.get('object')){ object = this.linkedNode.get('object'); } else { if (!obj) { obj = this.getState(); } object = Ext.create(this.linkedNode.get('objectDataModel'), obj); this.linkedNode.set('object',object); } }, /** * Setter of contextNode * @param {amdaModel.InteractiveNode} contextNode * the node from which the Module was called */ setContextNode : function (myContextNode){ this.contextNode = myContextNode; }, /** * Color mechanism of Header of this intarctive module */ colorHeaderModule : function() { myDesktopApp.desktop.getWindow(this.id).getEl().addCls('window-active'); }, /** * UnColor mechanism of Header of this intarctive module */ uncolorHeaderModule : function() { myDesktopApp.desktop.getWindow(this.id).getEl().removeCls('window-active'); }, /** * Receiption method of a parameter sent from explorer (by drop) * @param {String} objectName The name of sent object * @param {String} isLeaf boolean true if it's a leaf parameter */ addParam : function(objectName, isLeaf, needsArgs, components, predefined_args) { var uiContent = this.getUiContent(); uiContent.addParam(objectName, isLeaf, needsArgs, components, predefined_args); }, parseTemplatedParam: function(templatedParamId, onParamParsed) { AmdaAction.parseTemplatedParam(templatedParamId, function(res,e) { if (!res || !res.success) { if (!res || !res.message) { myDesktopApp.errorMsg('Internal Error - Cannot parse the templated parameter'); } else { myDesktopApp.errorMsg('Internal Error - ' + res.message); } } else { if (onParamParsed) { onParamParsed(res.info); } } }); }, saveState : Ext.emptyFn, getState : function() { return null; } });