PlotTabPanel.js 4.06 KB
/**
 * Project   : AMDA-NG
 * Name      : PlotTabPanel.js
 * @class   amdaPlotComp.PlotTabPanel
 * @extends Ext.tab.Panel
 * @brief   Component use to show Plot tabs definition
 * @author  Benjamin Renard
 * @version $Id: PlotTabPanel.js benjamin $
 */

Ext.define('amdaPlotComp.PlotTabPanel', {
    extend: 'Ext.tab.Panel',
	
    requires: [
        'amdaPlotComp.PlotTabContent'
    ],
	
    //Link to the Plot UI
    plotUI : null,
	
    //Multiplot object
    multiplot_object: null,
	
    constructor: function(config) {
        this.init(config);	    
        this.callParent(arguments);
    },
	
    setMultiplotObject: function(multiplot_object) {
        var me = this;
        this.removeAll();
        this.multiplot_object = multiplot_object;

        this.multiplot_object.plots().each(function (rec, index) {
            this.addPlotNode(rec, index == 0);
        }, this);
    },
	
    addPlotNode: function(plotNode, selectTab)
    {
        var tabNumber = this.getTabBar().items.getCount();
        var tabContent = new amdaPlotComp.PlotTabContent({plotNode: plotNode});
        var me = this;
        var tabComp = this.add({
            title: (plotNode.get('text') != '') ? plotNode.get('text') : 'Plot '+tabNumber,
            closable: true,
            layout: 'fit',
            bodyStyle: 'background: none',
            defaults: {
                border: false
            },
            items: [
                tabContent
            ],
            listeners : {
                scope : this,
                beforeclose: function( tab, eOpts ) {
                    if (this.items.getCount() == 1)
                    {
                        myDesktopApp.warningMsg('You need to keep at least one plot definition');
                        return false;
                    }
                    return true;
                },
                close: function( tab, eOpts ) {
                    if (tab.items.getAt(0).plotNode)
                        this.multiplot_object.removePlotByInternalId(tab.items.getAt(0).plotNode.internalId);
                },
                destroy: function(tab, eOpts) {	
                    this.updatePlotTabs();
                }
            }
        });
    	
        if (selectTab)
            this.setActiveTab(tabComp);
    	
        return tabContent;
    },
	
    updatePlotTabs: function()
    {
        for (i = 0; i < this.items.getCount(); ++i)
        {
            var tabItem = this.items.getAt(i);
            var tabContent = tabItem.items.getAt(0);
            var plotNode = tabContent.plotNode;
            var title = (plotNode.get('text') != '') ? plotNode.get('text') : 'Plot '+(i + 1);
            tabItem.setTitle(title);
            if (!this.getActiveTab())
                this.setActiveTab(tabItem);
        }
    },

    getCurrentPlotTabContent : function() {
        if (this.getActiveTab())
            return this.getActiveTab().child();
        return null;
    },
	
    updateTimeObjects : function() {
        for (i = 0; i < this.items.getCount(); ++i)
        {
            this.items.getAt(i).items.getAt(0).updateTimeObject();
        }
    },
	
    getTreeFromPlotTab: function(plotTab)
    {
        return plotTab.child().treePlot;
    },
	
    getSelectedTabId: function()
    {
        if (this.getActiveTab())
            return this.getActiveTab().child().tabId;
        return 0;
    },
	
    init : function(config) {
        var me = this;

        this.plotUI = config.plotUI;

        var myConf = {
            plain: true,
            bodyStyle: { background : '#dfe8f6' },
            border : false,
            defaults: {
                border: false
            },	
            tabBar:{
                items:[
                    {
                        text:'+',
                        closable: false,
                        handler:function(btn,e){
                            var tabContent = me.addPlotNode(me.multiplot_object.createNewPlot(), true);
                        }
                    }
                ]
            }
        };

        Ext.apply (this , Ext.apply (arguments, myConf));
    }
});