SendToSampButtonUI.js 2.95 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 ()
    		{
    			if (!me.testSAMPConnection())
    				return;
    			if (me.onSendToSamp)
    				me.onSendToSamp.call(this,id,me.sendOpt);
    		},
    		icon     : icon
    	};
    },
    
    testSAMPConnection : function()
    {
    	var interopModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id);
    	if (!interopModule)
    		return false;
    	if (!interopModule.sampConnected())
		{
    		interopModule.switchSampConnect();
			return false;
		}
		
		return true;
    },
    
    updateMenu : function()
    {
    	var me = this;
    	
    	this.menu.removeAll();
    	
    	if (!this.testSAMPConnection())
    		return false;
    	
    	var clients = [];
    	
    	var interopModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id);
    	if (!interopModule)
    		return false;
    	
    	switch (this.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);
    }
});