/** * Project  : AMDA-NG * Name : InteropModule.js * @class amdaDesktop.InteropModule * @extends amdaDesktop.InteractiveModule * @brief Interop Module controller definition * @author Benjamin RENARD * $Id: InteropModule.js 1870 2013-11-22 13:43:34Z elena $ ***************************************************************************** * FT Id : Date : Name - Description ******************************************************************************* * 23/04/2012: BRE - file creation */ Ext.define('amdaDesktop.InteropModule', { extend: 'amdaDesktop.AmdaModule', requires: [ 'amdaUI.InteropUI', 'amdaDesktop.SampModule' ], contentId : 'interopUI', /** * @cfg {String} window definitions * @required */ height: 580, width: 850, uiType : 'panelInterop', helpTitle :'Help on Interop Module', samp : null, sampclientsStore : new Ext.data.SimpleStore({ idProperty: 'id', fields: [ {name: 'id'}, {name: 'name'}, {name: 'descriptionText'}, {name: 'iconUrl'}, {name: 'acceptVOTable', type : 'boolean'}, {name: 'acceptFITS', type : 'boolean'} ] }), init : function() { this.launcher = { text : this.title, iconCls : this.icon, handler : this.createWindow, scope : this }; }, initSampConnector : function(successfn) { var me = this; if (!this.samp) { this.samp = Ext.create('amdaDesktop.SampModule',{ listeners : { connected : function(o,success) { if (!success) Ext.Msg.show( { title : 'SAMP', msg : 'Cannot connect AMDA to a hub', modal : false, icon : Ext.Msg.ERROR, buttons : Ext.Msg.OK }); me.updateStatus(); me.updateClients(); }, disconnected : function(o,success) { me.updateStatus(); me.sampclientsStore.removeAll(); me.updateClients(); }, clientregister : function(o,id) { me.updateClients(); }, clientunregister : function(o,id) { var record = me.sampclientsStore.getById(id); if (record) { me.sampclientsStore.remove(record); me.updateClients(); } }, clientmetachange : function(o,id,data,subs) { var record = me.sampclientsStore.getById(id); if (!record) { me.sampclientsStore.add({id : id}); record = me.sampclientsStore.getById(id); } if (record) { record.set('descriptionText',data['samp.description.text']); record.set('iconUrl',data['samp.icon.url']); record.set('name',data['samp.name']); if (subs) { record.set('acceptVOTable', me.samp.isSubscribed(subs,"table.load.votable")); record.set('acceptFITS', me.samp.isSubscribed(subs,"image.load.fits")); } } me.updateClients(); }, clientsubs : function(o,id,data) { var record = me.sampclientsStore.getById(id); if (!record) return; if (record) { record.set('acceptVOTable', me.samp.isSubscribed(data,"table.load.votable")); record.set('acceptFITS', me.samp.isSubscribed(data,"image.load.fits")); } me.updateClients(); }, uploadfile : function(o,clientName,url,format) { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.upload.id, true, function (module) { module.uploadNotification(url,format); }); } } }); this.samp.loadScript(function (s){ if (successfn) successfn.call(me.samp); }); } else this.samp.loadScript(function (s){ if (successfn) successfn.call(me.samp); }); }, updateStatus : function() { if (this.app && this.samp) { var desktop = this.app.getDesktop(); var isConnected = this.samp.isConnected(); if (desktop) { var win = desktop.getWindow(this.id); if (win && win.isVisible) win.items.items[0].updateStatus(isConnected); var taskbar = desktop.taskbar; if (taskbar) { var samptb = taskbar.getComponent('samptb'); if (samptb) samptb.updateStatus(isConnected); } } } }, updateClients : function() { if (this.app && this.samp) { var desktop = this.app.getDesktop(); var isConnected = this.samp.isConnected(); if (desktop) { var win = desktop.getWindow(this.id); var taskbar = desktop.taskbar; if (taskbar) { var samptb = taskbar.getComponent('samptb'); if (samptb) samptb.updateClients(this.sampclientsStore); } } } }, sampConnected : function() { if (!this.samp) return false; return this.samp.isConnected(); }, sendVOTable : function(file,clientId) { if (!this.samp) return false; var href = window.location.href; var baseurl = href.replace('desktop.php',''); this.samp.sendVOTable(baseurl+file,clientId); }, sendAladinScript : function(script) { if (!this.samp) return false; this.samp.sendAladinScript(script); }, sendFITS : function(url,name) { if (!this.samp) return false; this.samp.sendFITS(url,name); }, generateAladinScript : function(urlList, scriptType) { /*var script="reset;"; //reset all views & all planes // first get files var scriptHead=''; //var script="#AJS;\n"; //scriptHead+="trace 3;"; // for( var i=0; i < urlList.length; i++) { var url = urlList[i].url; var name = urlList[i].name; scriptHead += 'get File(' + url +','+name+');'; scriptHead += 'sync;'; }*/ //scriptHead += 'sync;'; /*for( var i=0; i < urlList.length; i++) { //then modify some fits values var name = urlList[i].name; scriptHead += 'set '+name+' FITS:CRVAL1=0;'; scriptHead += 'set '+name+' FITS:CRVAL2=0;'; }*/ //scriptHead += 'sync;'; // add som method specific lines /*switch( scriptType ) { case( 'mosaic' ): // first insert the modeview script += "mview 16;"; // then download the files script += scriptHead; //for( var i=0; i < urlList.length; i++){ // // we also shall position each image in the grid // var gridCols = ["A", "B", "C", "D"]; // var colIndex = i%4; // var lineIndex = 1+Math.floor(i/4); // script += "cview "+i+" "+gridCols[colIndex]+lineIndex+";\n"; //} break; case( 'movie' ): // download first script += scriptHead; script += 'blink '; for( var i=1; i < urlList.length; i++){ script += urlList[i].name+" "; } script += ';'; break; case( 'diff' ): // download first script += scriptHead; for( var i=1; i < urlList.length; i++){ var diffName = 'diff' + i; var currRawName = urlList[i].name; var prevRawNum = i-1; var prevRawName = urlList[prevRawNum].name; script += diffName + ' = ' + currRawName + ' - ' + prevRawName + ';\n'; } script += 'sync;'; script += 'diff_movie = blink '; for( var i=1; i < urlList.length; i++){ script += 'diff'+i+' '; } script += ';'; break; } //script += 'sync;';*/ var script = 'reset;'; for( var i=0; i < urlList.length; i++) { var url = urlList[i].url; var name = urlList[i].name; script += 'get File(' + url +','+name+');'; } script += 'sync;'; /*for( var i=0; i < urlList.length; i++) { //then modify some fits values var name = urlList[i].name; script += 'set '+name+' FITS:CRPIX1=100;'; script += 'set '+name+' FITS:CRPIX2=0;'; }*/ switch( scriptType ) { case('mosaic'): { script += 'sync;mview 16'; } break; case('movie'): { script += 'blink '; for( var i=1; i < urlList.length; i++){ script += urlList[i].name+" "; } script += ';'; } break; } return script; }, switchSampConnect : function() { var me = this; //loadMask.show(); this.initSampConnector(function (s){ if (me.samp.isConnected()) { me.samp.disconnect(); } else { me.samp.connect(); // loadMask.hide(); } }); }, forceSampDisconnect : function() { if (!this.samp) return; if (!this.samp.isConnected()) return; this.samp.disconnect(); }, getVOTableClients : function () { //return list of all clients that can receive a VOTable if (!this.samp) return []; var result = new Array(); this.sampclientsStore.each(function (client){ if (client.get('acceptVOTable')) result.push({id : client.get('id'), name : client.get('name'), icon : client.get('iconUrl')}); },this); return result; }, getFITSClients : function () { //return list of all clients that can receive a FITS image if (!this.samp) return []; var result = new Array(); this.sampclientsStore.each(function (client){ if (client.get('acceptFITS')) result.push({id : client.get('id'), name : client.get('name'), icon : client.get('iconUrl')}); },this); return result; }, // arguments from launcher : CONFIG (OBJECT!!!) createWindow : function(config){ var me = this; var baseId = null; if (!Ext.isObject(config)) { baseId = config; } var desktop = this.app.getDesktop(); var win = desktop.getWindow(this.id); activeTab = 1; if(!win) { win = desktop.createWindow({ id: this.id, title:this.title, layout: 'anchor', width:600, height:550, modal: true, minimizable: false, iconCls: this.icon, animCollapse:false, constrainHeader:true, bodyPadding : 5, stateful : true, stateId : this.id, stateEvents: ['move','show','resize'], items : [ { xtype: 'panelInterop', clientsStore : this.sampclientsStore, activeTab : activeTab, baseId : baseId, onSwitchConnect : function () { me.switchSampConnect(); } } ] }); } if (me.samp && me.samp.ready) this.updateStatus(); win.show(); return win; } });