Blame view

js/app/views/PlotComponents/PlotTabPanel.js 6.96 KB
437c4dbc   Benjamin Renard   First implementat...
1
2
3
4
5
6
7
8
9
10
11
/**
 * 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', {
495fc7a3   Benjamin Renard   Adapt plot UI in ...
12
    extend: 'Ext.tab.Panel',
437c4dbc   Benjamin Renard   First implementat...
13
	
495fc7a3   Benjamin Renard   Adapt plot UI in ...
14
15
16
    requires: [
        'amdaPlotComp.PlotTabContent'
    ],
437c4dbc   Benjamin Renard   First implementat...
17
	
495fc7a3   Benjamin Renard   Adapt plot UI in ...
18
19
    //Link to the Plot UI
    plotUI : null,
437c4dbc   Benjamin Renard   First implementat...
20
	
495fc7a3   Benjamin Renard   Adapt plot UI in ...
21
22
    //Multiplot object
    multiplot_object: null,
84d442b4   Benjamin Renard   Synchronize plot ...
23
24

    tabbar_destroy : false,
437c4dbc   Benjamin Renard   First implementat...
25
	
495fc7a3   Benjamin Renard   Adapt plot UI in ...
26
27
28
29
    constructor: function(config) {
        this.init(config);	    
        this.callParent(arguments);
    },
437c4dbc   Benjamin Renard   First implementat...
30
	
495fc7a3   Benjamin Renard   Adapt plot UI in ...
31
32
33
34
    setMultiplotObject: function(multiplot_object) {
        var me = this;
        this.removeAll();
        this.multiplot_object = multiplot_object;
b9249413   Elena.Budnik   correct init value
35

495fc7a3   Benjamin Renard   Adapt plot UI in ...
36
        this.multiplot_object.plots().each(function (rec, index) {
4efeb459   Benjamin Renard   First version for...
37
            this.addPlotNode(rec, index == 0, false);
495fc7a3   Benjamin Renard   Adapt plot UI in ...
38
        }, this);
4efeb459   Benjamin Renard   First version for...
39
        this.refreshMultiPlot();
495fc7a3   Benjamin Renard   Adapt plot UI in ...
40
    },
8dddc557   Benjamin Renard   Fix plot reload
41
42
43
44
45
46
47
48
49
50
51

    reloadPlot : function(plotNode) {
        for (i = 0; i < this.items.getCount(); ++i)
        {
            var tabItem = this.items.getAt(i);
            var tabContent = tabItem.items.getAt(0);
            if (plotNode == tabContent.plotNode) {
                tabContent.updateUI();
            }
        }
    },
437c4dbc   Benjamin Renard   First implementat...
52
	
4efeb459   Benjamin Renard   First version for...
53
    addPlotNode: function(plotNode, selectTab, refreshMultiPlot)
495fc7a3   Benjamin Renard   Adapt plot UI in ...
54
    {
2048f5bc   Benjamin Renard   Fix save & edit plot
55
56
57
58
59
60
61
62
63
64
65
        for (i = 0; i < this.items.getCount(); ++i)
        {
            var tabItem = this.items.getAt(i);
            var tabContent = tabItem.items.getAt(0);
            if (plotNode == tabContent.plotNode) {
                //Already opened => select tab
                this.setActiveTab(tabItem);
                return;
            }
        }

495fc7a3   Benjamin Renard   Adapt plot UI in ...
66
        var tabNumber = this.getTabBar().items.getCount();
9705c573   Benjamin Renard   Duplicate plot
67
        var tabContent = new amdaPlotComp.PlotTabContent({plotNode: plotNode, tabIndex: tabNumber-1, plotTabPanel: this});
495fc7a3   Benjamin Renard   Adapt plot UI in ...
68
69
        var me = this;
        var tabComp = this.add({
d29f5012   Benjamin Renard   Fix doPlot
70
            title: tabContent.getPlotTitle(),
495fc7a3   Benjamin Renard   Adapt plot UI in ...
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
            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 ) {
5c744625   Benjamin Renard   Synchronize reque...
91
                    if (tab.items.getAt(0).plotNode) {
d794a307   Benjamin Renard   Fix bug when a pl...
92
                        tab.items.getAt(0).resetModif();
57e15214   Benjamin Renard   Fix addParameter ...
93
                        this.multiplot_object.removePlotByInternalId(tab.items.getAt(0).plotNode.internalId);
5c744625   Benjamin Renard   Synchronize reque...
94
                    }
495fc7a3   Benjamin Renard   Adapt plot UI in ...
95
                },
84d442b4   Benjamin Renard   Synchronize plot ...
96
                destroy: function(tab, eOpts) {
d794a307   Benjamin Renard   Fix bug when a pl...
97
98
99
                    if (tab.items.getAt(0) && tab.items.getAt(0).plotNode) {
                        tab.items.getAt(0).resetModif();
                    }
84d442b4   Benjamin Renard   Synchronize plot ...
100
101
                    if (!this.tabbar_destroy)
                        this.updatePlotTabs();
495fc7a3   Benjamin Renard   Adapt plot UI in ...
102
103
104
                }
            }
        });
27b2a53e   Benjamin Renard   Link tab plot to ...
105
    	
495fc7a3   Benjamin Renard   Adapt plot UI in ...
106
107
        if (selectTab)
            this.setActiveTab(tabComp);
4efeb459   Benjamin Renard   First version for...
108
109
110

        if (refreshMultiPlot)
            this.refreshMultiPlot();
437c4dbc   Benjamin Renard   First implementat...
111
    	
495fc7a3   Benjamin Renard   Adapt plot UI in ...
112
113
        return tabContent;
    },
d794a307   Benjamin Renard   Fix bug when a pl...
114
115
116
117
118
119
120
121

    duplicatePlotNode: function(plotNode)
    {
        var newPlotNode = this.multiplot_object.duplicatePlot(plotNode);
        if (!newPlotNode)
            return null;
        return newPlotNode;
    },
437c4dbc   Benjamin Renard   First implementat...
122
	
495fc7a3   Benjamin Renard   Adapt plot UI in ...
123
124
    updatePlotTabs: function()
    {
57e15214   Benjamin Renard   Fix addParameter ...
125
126
127
128
        for (i = 0; i < this.items.getCount(); ++i)
        {
            var tabItem = this.items.getAt(i);
            var tabContent = tabItem.items.getAt(0);
d29f5012   Benjamin Renard   Fix doPlot
129
            tabContent.tabIndex = i;
57e15214   Benjamin Renard   Fix addParameter ...
130
            var plotNode = tabContent.plotNode;
d29f5012   Benjamin Renard   Fix doPlot
131
            var title = tabContent.getPlotTitle();
57e15214   Benjamin Renard   Fix addParameter ...
132
133
134
135
            tabItem.setTitle(title);
            if (!this.getActiveTab())
                this.setActiveTab(tabItem);
        }
4efeb459   Benjamin Renard   First version for...
136
        this.refreshMultiPlot();
57e15214   Benjamin Renard   Fix addParameter ...
137
138
    },

d794a307   Benjamin Renard   Fix bug when a pl...
139
140
141
142
143
144
145
146
    closePlotTabIfOpened: function(plotNodeToClose) {
        for (i = 0; i < this.items.getCount(); ++i)
        {
            var tabItem = this.items.getAt(i);
            var tabContent = tabItem.items.getAt(0);
            var plotNode = tabContent.plotNode;
            if (plotNode == renamedNode) {
                this.remove(tabItem.getId());
4efeb459   Benjamin Renard   First version for...
147
                this.refreshMultiPlot();
d794a307   Benjamin Renard   Fix bug when a pl...
148
149
150
151
            }
        }
    },

5c744625   Benjamin Renard   Synchronize reque...
152
153
154
155
156
157
158
159
160
161
    updateRequestName: function(renamedNode)
    {
        for (i = 0; i < this.items.getCount(); ++i)
        {
            var tabItem = this.items.getAt(i);
            var tabContent = tabItem.items.getAt(0);
            var plotNode = tabContent.plotNode;
            if (plotNode == renamedNode) {
		plotNode.get('object').set('name', renamedNode.get('text'));
                tabContent.updateUI();
4efeb459   Benjamin Renard   First version for...
162
                this.refreshMultiPlot();
5c744625   Benjamin Renard   Synchronize reque...
163
164
165
166
            }
        }
    },

57e15214   Benjamin Renard   Fix addParameter ...
167
168
169
170
    getCurrentPlotTabContent : function() {
        if (this.getActiveTab())
            return this.getActiveTab().child();
        return null;
495fc7a3   Benjamin Renard   Adapt plot UI in ...
171
    },
27b2a53e   Benjamin Renard   Link tab plot to ...
172
	
acafe456   Benjamin Renard   Fix Get Data
173
    updateTimeObjects : function() {
495fc7a3   Benjamin Renard   Adapt plot UI in ...
174
175
176
177
178
        for (i = 0; i < this.items.getCount(); ++i)
        {
            this.items.getAt(i).items.getAt(0).updateTimeObject();
        }
    },
27b2a53e   Benjamin Renard   Link tab plot to ...
179
	
495fc7a3   Benjamin Renard   Adapt plot UI in ...
180
181
182
183
    getTreeFromPlotTab: function(plotTab)
    {
        return plotTab.child().treePlot;
    },
4efeb459   Benjamin Renard   First version for...
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205

    getTabsInfo: function()
    {
        var tabsInfo = [];
        for (i = 0; i < this.items.getCount(); ++i) {
            var tabItem = this.items.getAt(i);
            var tabContent = tabItem.items.getAt(0);
            var plotNode = tabContent.plotNode;
            tabsInfo.push({
                name: tabContent.getPlotTitle(),
                object: plotNode.get('object'),
                selected: (tabItem == this.getActiveTab())
            });
        }
        return tabsInfo;
    },

    refreshMultiPlot: function()
    {
        var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id);
        plotModule.refreshMultiPlot();
    },
437c4dbc   Benjamin Renard   First implementat...
206
	
495fc7a3   Benjamin Renard   Adapt plot UI in ...
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
    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){
4efeb459   Benjamin Renard   First version for...
225
                            var tabContent = me.addPlotNode(me.multiplot_object.createNewPlot(), true, true);
495fc7a3   Benjamin Renard   Adapt plot UI in ...
226
227
                        }
                    }
84d442b4   Benjamin Renard   Synchronize plot ...
228
229
230
231
232
233
                ],
                listeners: {
                    beforedestroy: function(tabbar, eOpts) {
                        me.tabbar_destroy = true;
                    }
                }
495fc7a3   Benjamin Renard   Adapt plot UI in ...
234
235
236
237
238
            }
        };

        Ext.apply (this , Ext.apply (arguments, myConf));
    }
0b0c7bc6   Benjamin Renard   Fix bug #6488
239
});