PlotModule.js
8.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
/**
* Project : AMDA-NG
* Name : PlotModule.js
* @class amdaDesktop.PlotModule
* @extends amdaDesktop.InteractiveModule
* @brief Plot Module controller definition
* @author Caroline DARMON
* $Id: PlotModule.js 2152 2014-02-28 16:32:22Z elena $
*/
Ext.define('amdaDesktop.PlotModule', {
extend: 'amdaDesktop.InteractiveModule',
requires: [
'amdaUI.TabPlotUI'
],
contentId : 'tabPlotUI',
linkedNode : null,
//array of linked nodes (TabPanel!!!)
linkedNodes : null,
/**
* @cfg {String} data models
* @required
*/
nodeDataModel : 'amdaModel.PlotNode',
/**
* @cfg {String} window definitions
* @required
*/
height: 680,
width: 850,
uiType : 'tabPlot',
helpTitle : 'Help on Plot Module',
/**
* Window Creation method of the Module
*/
createWindow : function () {
// init Result Win
var win = myDesktopApp.desktop.getWindow(this.id);
if (!win)
{
win = myDesktopApp.desktop.createWindow({
id : this.id,
title : this.title,
width : this.width,
// minWidth : this.width,
height : this.height,
minHeight: this.height,
iconCls : this.icon,
border : false,
constrainHeader : true,
layout : 'fit',
stateful : true,
stateId : this.id,
stateEvents: ['move','show','resize'],
tools: [
{
type:'help',
qtip: this.helpTitle,
scope:this,
handler: function(event, toolEl, panel){
var me = this;
myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.info.id, true, function (module) {
module.createWindow('plotStart', me.helpTitle);
});
}
}
],
items : [
{
xtype : this.uiType,
id : this.contentId
}
]
});
this.closed = false;
win.on({
scope: this,
activate: function(){
// order to pin this Module with WsExplorer
this.pin();
},
show: function(){
var multiMgrWin = myDesktopApp.desktop.getWindow(myDesktopApp.dynamicModules.interactive_plot.id);
if (!multiMgrWin) {
myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interactive_plot.id, true, function (module) {
module.createWindow();
module.win.show();
});
}
},
// on window closing event
beforeclose: function(){
this.saveState();
var isDirty = win.down('form').getForm().isDirty();
if (!this.closed && isDirty) {
Ext.Msg.confirm('Close', 'Current window has been modified.\nDo you want to close the window ?' , function (btn, text){
if (btn == 'yes'){
// mark this.closed as true before the call to close() as that will fire the beforeclose event again
this.closed = true;
win.close();
}
},this);
} else if (!isDirty) {
this.closed = true;
}
if (this.closed) {
// close Interactive Plot Mgr Window if exists
var multiMgrWin = myDesktopApp.desktop.getWindow(myDesktopApp.dynamicModules.interactive_plot.id);
if (multiMgrWin) multiMgrWin.close();
if (this.linkedNodes) this.linkedNodes.clear();
this.linkedNode.set('object','');
// unlink Node
this.setLinkedNode(null);
this.unpin();
}
// Don't automatically close if the form is dirty, let the call to this.close() within the confirm box close the window.
return this.closed;
}
});
} // if !win
win.show();
this.linkedNode = this.getLinkedNode();
if (!this.linkedNode) {
this.createLinkedNode();
this.createObject();
}
var tabId = this.getUiContent().tabPanel.getActiveTab().id;
var editedNode = this.getTabNode(tabId);
if (editedNode !== this.linkedNode) {
this.getUiContent().setObject(this.linkedNode.get('object'));
}
// add linked node to the array of nodes and set object to UI (TabPlotUI)
this.addLinkedNode(this.linkedNode, null);
},
/**
* add the current node in this module
* @param {amdaModel.InteractiveNode} myLinkedNode
*/
addLinkedNode : function (myLinkedNode, tabId)
{
if (!this.linkedNodes){
this.linkedNodes = new Ext.util.HashMap();
}
//TODO link the same request node to multi tabs - or interdit???
if (!tabId) tabId = this.getUiContent().tabPanel.getActiveTab().id;
this.linkedNodes.replace(tabId,myLinkedNode);
},
/**
* get active Tab linked node in Plot module
*
*/
getTabNode : function (tabId)
{
if (!this.linkedNodes){
return null;
}
// var tabId = this.getUiContent().tabPanel.getActiveTab().id;
var linkedNode = this.linkedNodes.get(tabId);
return linkedNode;
},
saveState: function() {
var uiContent = this.getUiContent();
var form = uiContent.tabPanel.getActiveTab().down('form').getForm();
var values = form.getValues();
// Ext.state.Manager.set(this.id + '_form', values);
Ext.state.Manager.set('timeinterval', {'startDate' : values.startDate,'stopDate' : values.stopDate });
},
getState : function() {
// return Ext.state.Manager.get(this.id + '_form');
return Ext.state.Manager.get('timeinterval');
}
});