SendToSampButtonUI.js 2.93 KB
/**
 * Project   : AMDA-NG
 * Name      : SendToSampButtonUI.js
 * @class    amdaUI.SendToSampButtonUI
 * @extends  Ext.Button 
 * @brief    Button use to send VOTable or FITS images via SAMP protocole (View)
 * @author   Benjamin RENARD 
 * @version  $Id: SendToSampButtonUI.js 1459 2013-04-22 13:19:43Z benjamin $
 ********************************************************************************
 *    FT Id     :   Date   : Name - Description
 *******************************************************************************
 *              
 */

Ext.define('amdaUI.SendToSampButtonUI', {
    extend: 'Ext.Button',
   
    alias: 'widget.sendToSampButton',
    
    folderId  : '',
    voTableId : '',
    
    type : 'votable',
    
    sendOpt : {},
    
    onSendToSamp : null,
    
    constructor: function(config)
    {	 
    	this.initConfig(config);
    	this.callParent();	
    }, 
        
    getMenuItem : function(name,id,icon)
    {
    	var me = this;
    	
    	return {
    		text     : name+' ('+id+')',
    		clientId : id,
    		handler  : function ()
    		{
    			me.testSAMPConnection(function () {
				if (me.onSendToSamp)
					 me.onSendToSamp.call(this,id,me.sendOpt);
			});
    		},
    		icon     : icon
    	};
    },
    
    testSAMPConnection : function(onConnected)
    {
	var me = this;
	myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) {
		if (!module.sampConnected()) {
			module.switchSampConnect();
		}
		else {
			if (onConnected)
				onConnected.call();
		}
	});
    },
    
    updateMenu : function()
    {
    	var me = this;
    	
    	this.menu.removeAll();
    	
    	this.testSAMPConnection(function () {
    		var clients = [];
    	
    		var interopModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id);
    		if (!interopModule)
    			return false;
    	
    		switch (me.type)
    		{
    		case 'fits' :
    			clients = interopModule.getFITSClients();
    			break;
    		default :
    			clients = interopModule.getVOTableClients();
    		}
    	
    		Ext.each(clients,function(client)
    			{
    				if (client['id'] != 'hub')
    					me.menu.add(me.getMenuItem(client['name'],client['id'],client['icon']));
    			});
    		if (clients.length > 0)
    		{
    			me.menu.add('-');
    			me.menu.add(me.getMenuItem('all clients','hub'));
    		}
	});
    	
    	return true;
    },
    
    maybeShowMenu: function() //overrided function
    {
        var me = this;
        if (me.updateMenu() && me.menu && !me.hasVisibleMenu() && !me.ignoreNextClick) 
        {
            me.showMenu();
        }
    },
    
    initConfig: function(config)
    {
    	this.onSendToSamp = config.onSendToSamp;
    	this.sendOpt = config.sendOpt;
    	
    	if (config.type)
    		this.type = config.type;
    	
        var newConfig = {
    			text: 'Send (via SAMP) to ...',
    			menu      : [],
    			scope : this
    	};
    	
    	Ext.apply(this, newConfig);
    }
});