Commit 525485e0bff513588870bc752bc11e51a59538ed
Exists in
master
and in
109 other branches
Merge branch 'upgrade-save-plot-requests' into 'master'
Upgrade save plot requests See merge request !33
Showing
14 changed files
with
304 additions
and
199 deletions
Show diff stats
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | +<h3>Implemented Layouts</h3> | ||
2 | + | ||
3 | + <i>Vertical</i> ( default ): vertical stack of panels;<br/> | ||
4 | + all time panels are of the same width;<br/> | ||
5 | + one XY panel in the line;<br/> | ||
6 | + generic panel height (for Time and XY panel)<br/> | ||
7 | + and width (for XY panel) can be defined at this level<br/><br/> | ||
8 | + | ||
9 | + <i>Auto</i> : automatic layout - if possible combines<br/> | ||
10 | + several XY panels at the same level; | ||
11 | + only panel height can be defined (XY panel is 'square')<br/><br/> | ||
12 | + | ||
13 | + <i>Manual</i> : everything is to be defined by user | ||
14 | + | ||
15 | + <hr> | ||
16 | +Two generic panel types : 'Time/Epoch' and 'XY (Scatter/Instant)'; | ||
17 | +<br/> | ||
18 | + | ||
0 | \ No newline at end of file | 19 | \ No newline at end of file |
@@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
1 | +<h3>Save Plot Request[s]</h3> | ||
2 | +You can save you plot request to use it in the next AMDA sessions. | ||
3 | +Two options are possible: | ||
4 | +<ul> | ||
5 | +<li>Save current active plot tab request only (<i>All Plot Tabs</i> checkbox <b>unchecked</b>) | ||
6 | +<li>Save all the layout - all the plot tabs requests (<i>All Plot Tabs</i> checkbox <b>checked</b>) | ||
7 | +</ul> | ||
8 | +<br/> | ||
9 | + |
js/app/AmdaApp.js
@@ -268,6 +268,33 @@ Ext.define('amdaApp.AmdaApp', { | @@ -268,6 +268,33 @@ Ext.define('amdaApp.AmdaApp', { | ||
268 | }); | 268 | }); |
269 | }, | 269 | }, |
270 | 270 | ||
271 | + // add info icon; onCick AmdaHelp is shown | ||
272 | + addAmdaInfo : function(help, style) { | ||
273 | + if (style) { | ||
274 | + help += '" style="' + style; | ||
275 | + } | ||
276 | + var html = '<img amda_clicktip="' + help + '" src="js/resources/images/16x16/info_mini.png"' | ||
277 | + return { | ||
278 | + xtype: 'label', | ||
279 | + html: html, | ||
280 | + listeners: { | ||
281 | + click: { | ||
282 | + element: 'el', | ||
283 | + fn: function(e,t) { | ||
284 | + var me = t, | ||
285 | + text = me.getAttribute('amda_clicktip'); | ||
286 | + if (text) { | ||
287 | + e.preventDefault(); | ||
288 | + AmdaAction.getInfo({name : text}, function(res,e) { | ||
289 | + if (res.success) myDesktopApp.infoMsg(res.result); | ||
290 | + }); | ||
291 | + } | ||
292 | + } | ||
293 | + } | ||
294 | + } | ||
295 | + }; | ||
296 | + }, | ||
297 | + | ||
271 | getModules : function(){ | 298 | getModules : function(){ |
272 | var allModules = []; | 299 | var allModules = []; |
273 | 300 |
js/app/models/InteractiveNode.js
@@ -279,25 +279,23 @@ Ext.define('amdaModel.InteractiveNode', { | @@ -279,25 +279,23 @@ Ext.define('amdaModel.InteractiveNode', { | ||
279 | //TODO do we need this commission ??? | 279 | //TODO do we need this commission ??? |
280 | // fix the modifications for object | 280 | // fix the modifications for object |
281 | this.get('object').commit(); | 281 | this.get('object').commit(); |
282 | + | ||
282 | // if ownerTree panel is not active | 283 | // if ownerTree panel is not active |
283 | - if (this.myGetOwnerTree().ownerCt.getActiveTab()!==this.myGetOwnerTree()) | ||
284 | - { | 284 | + if (this.myGetOwnerTree().ownerCt.getActiveTab()!==this.myGetOwnerTree()) { |
285 | // set ownerTree panel as the active tab - to enable selection of this node his ownerTree must have a view | 285 | // set ownerTree panel as the active tab - to enable selection of this node his ownerTree must have a view |
286 | this.myGetOwnerTree().ownerCt.setActiveTab(this.myGetOwnerTree()); | 286 | this.myGetOwnerTree().ownerCt.setActiveTab(this.myGetOwnerTree()); |
287 | } | 287 | } |
288 | 288 | ||
289 | Ext.Msg.alert('Complete', 'New object '+this.get('object').get('name')+' has been created'); | 289 | Ext.Msg.alert('Complete', 'New object '+this.get('object').get('name')+' has been created'); |
290 | // expand the contextNode | 290 | // expand the contextNode |
291 | - this.get('contextNode').expand(false, function() | ||
292 | - { | 291 | + this.get('contextNode').expand(false, function() { |
293 | if (!this.get('contextNode').findChild('text',this.get('text'))) { | 292 | if (!this.get('contextNode').findChild('text',this.get('text'))) { |
294 | // create node in tree as child of contextNode | 293 | // create node in tree as child of contextNode |
295 | this.get('contextNode').appendChild(this); | 294 | this.get('contextNode').appendChild(this); |
296 | } | 295 | } |
297 | // select the new node | 296 | // select the new node |
298 | this.myGetOwnerTree().getSelectionModel().select(this); | 297 | this.myGetOwnerTree().getSelectionModel().select(this); |
299 | - if (opt) | ||
300 | - { | 298 | + if (opt) { |
301 | var scope = opt.scope ? opt.scope : this; | 299 | var scope = opt.scope ? opt.scope : this; |
302 | if (opt.callback) | 300 | if (opt.callback) |
303 | opt.callback.call(scope,'create'); | 301 | opt.callback.call(scope,'create'); |
js/app/models/PlotNode.js
@@ -15,20 +15,15 @@ | @@ -15,20 +15,15 @@ | ||
15 | 15 | ||
16 | Ext.define('amdaModel.PlotNode', { | 16 | Ext.define('amdaModel.PlotNode', { |
17 | extend: 'amdaModel.ExecutableNode', | 17 | extend: 'amdaModel.ExecutableNode', |
18 | - | ||
19 | - requires: [ | ||
20 | - ], | ||
21 | - | 18 | + |
22 | statics: { | 19 | statics: { |
23 | nodeType: 'request' | 20 | nodeType: 'request' |
24 | }, | 21 | }, |
25 | 22 | ||
26 | constructor : function(config){ | 23 | constructor : function(config){ |
27 | - | ||
28 | this.callParent(arguments); | 24 | this.callParent(arguments); |
29 | this.set('moduleId',myDesktopApp.dynamicModules.plot.id); | 25 | this.set('moduleId',myDesktopApp.dynamicModules.plot.id); |
30 | this.set('objectDataModel','amdaPlotObj.PlotRequestObject'); | 26 | this.set('objectDataModel','amdaPlotObj.PlotRequestObject'); |
31 | - this.set('ownerTreeId',amdaUI.ExplorerUI.OPE_TAB.TREE_ID); | ||
32 | this.set('nodeType',this.self.nodeType); | 27 | this.set('nodeType',this.self.nodeType); |
33 | }, | 28 | }, |
34 | 29 |
js/app/models/PlotObjects/PlotRequestObject.js
@@ -29,7 +29,9 @@ Ext.define('amdaPlotObj.PlotRequestObject', { | @@ -29,7 +29,9 @@ Ext.define('amdaPlotObj.PlotRequestObject', { | ||
29 | {name: 'file-prefix', type: 'string'}, | 29 | {name: 'file-prefix', type: 'string'}, |
30 | {name: 'one-file-per-interval', type: 'boolean'}, | 30 | {name: 'one-file-per-interval', type: 'boolean'}, |
31 | {name: 'last-plotted-tab', type: 'int', defaultValue: 0}, | 31 | {name: 'last-plotted-tab', type: 'int', defaultValue: 0}, |
32 | - {name: 'last-tab-id', type: 'int', defaultValue: 0} | 32 | + {name: 'last-tab-id', type: 'int', defaultValue: 0}, |
33 | + {name: 'active-tab-id', type: 'int', defaultValue: 1}, | ||
34 | + {name: 'all-in-one', type: 'boolean', defaultValue: false} | ||
33 | ], | 35 | ], |
34 | 36 | ||
35 | hasMany: { | 37 | hasMany: { |
@@ -122,8 +124,10 @@ Ext.define('amdaPlotObj.PlotRequestObject', { | @@ -122,8 +124,10 @@ Ext.define('amdaPlotObj.PlotRequestObject', { | ||
122 | requestValues['one-file-per-interval'] = this.get('one-file-per-interval'); | 124 | requestValues['one-file-per-interval'] = this.get('one-file-per-interval'); |
123 | requestValues['last-plotted-tab'] = this.get('last-plotted-tab'); | 125 | requestValues['last-plotted-tab'] = this.get('last-plotted-tab'); |
124 | requestValues['name'] = this.get('name'); | 126 | requestValues['name'] = this.get('name'); |
125 | - | ||
126 | - requestValues['timesrc'] = this.get('timesrc'); | 127 | + requestValues['all-in-one'] = this.get('all-in-one'); |
128 | + | ||
129 | + requestValues['timesrc'] = this.get('timesrc'); | ||
130 | + | ||
127 | // if there's at least one timeTable name into 'timeTables' collection | 131 | // if there's at least one timeTable name into 'timeTables' collection |
128 | if (this.get('timesrc') == amdaModel.AmdaTimeObject.inputTimeSrc[0] && this.get('timeTables') && this.get('timeTables').length){ | 132 | if (this.get('timesrc') == amdaModel.AmdaTimeObject.inputTimeSrc[0] && this.get('timeTables') && this.get('timeTables').length){ |
129 | // get complete timeTables collection | 133 | // get complete timeTables collection |
@@ -141,22 +145,34 @@ Ext.define('amdaPlotObj.PlotRequestObject', { | @@ -141,22 +145,34 @@ Ext.define('amdaPlotObj.PlotRequestObject', { | ||
141 | } | 145 | } |
142 | }); | 146 | }); |
143 | } else { | 147 | } else { |
144 | - requestValues['startDate'] = this.get('startDate'); | ||
145 | - requestValues['stopDate'] = this.get('stopDate'); | ||
146 | - requestValues['durationDay'] = this.get('durationDay'); | ||
147 | - requestValues['durationHour'] = this.get('durationHour'); | ||
148 | - requestValues['durationMin'] = this.get('durationMin'); | ||
149 | - requestValues['durationSec'] = this.get('durationSec'); | ||
150 | - } | ||
151 | - | ||
152 | - requestValues['tabs'] = []; | ||
153 | - | ||
154 | - this.tabs().each(function (tab, index) { | ||
155 | - requestValues['tabs'][index] = tab.getJsonValues(); | ||
156 | - }); | ||
157 | - | ||
158 | - requestValues['last-tab-id'] = this.get('last-tab-id'); | 148 | + requestValues['startDate'] = this.get('startDate'); |
149 | + requestValues['stopDate'] = this.get('stopDate'); | ||
150 | + requestValues['durationDay'] = this.get('durationDay'); | ||
151 | + requestValues['durationHour'] = this.get('durationHour'); | ||
152 | + requestValues['durationMin'] = this.get('durationMin'); | ||
153 | + requestValues['durationSec'] = this.get('durationSec'); | ||
154 | + } | ||
159 | 155 | ||
160 | - return requestValues; | 156 | + requestValues['tabs'] = []; |
157 | + | ||
158 | + if (this.get('all-in-one')) { | ||
159 | + this.tabs().each(function (tab, index) { | ||
160 | + requestValues['tabs'][index] = tab.getJsonValues(); | ||
161 | + }); | ||
162 | + | ||
163 | + requestValues['active-tab-id'] = this.get('active-tab-id'); | ||
164 | + requestValues['last-tab-id'] = this.get('last-tab-id'); | ||
165 | + } | ||
166 | + else { | ||
167 | + var tab = this.tabs().getAt(this.get('active-tab-id')-1); | ||
168 | + requestValues['tabs'][0] = tab.getJsonValues(); | ||
169 | + | ||
170 | + requestValues['tabs'][0]['id'] = "1"; | ||
171 | + requestValues['active-tab-id'] = "1"; | ||
172 | + requestValues['last-tab-id'] = "1"; | ||
173 | + requestValues['last-plotted-tab'] = "0"; | ||
174 | + } | ||
175 | + | ||
176 | + return requestValues; | ||
161 | } | 177 | } |
162 | }); | 178 | }); |
163 | \ No newline at end of file | 179 | \ No newline at end of file |
js/app/views/CatalogUI.js
@@ -113,7 +113,7 @@ Ext.define('amdaUI.CatalogUI', { | @@ -113,7 +113,7 @@ Ext.define('amdaUI.CatalogUI', { | ||
113 | 113 | ||
114 | columns[0] = Ext.create('Ext.grid.column.RowNumberer', { width: 50, | 114 | columns[0] = Ext.create('Ext.grid.column.RowNumberer', { width: 50, |
115 | renderer: function(value, metaData, record){ | 115 | renderer: function(value, metaData, record){ |
116 | - var msg = record.index; | 116 | + var msg = record.index + 1; |
117 | if (record.get('isNew') || record.get('isModified')) { | 117 | if (record.get('isNew') || record.get('isModified')) { |
118 | msg += ' *'; | 118 | msg += ' *'; |
119 | metaData.style = 'font-weight: bold' | 119 | metaData.style = 'font-weight: bold' |
js/app/views/PlotComponents/PlotBaseSerieForm.js
@@ -90,12 +90,13 @@ Ext.define('amdaPlotComp.PlotBaseSerieForm', { | @@ -90,12 +90,13 @@ Ext.define('amdaPlotComp.PlotBaseSerieForm', { | ||
90 | me.object.set('serie-yaxis', value); | 90 | me.object.set('serie-yaxis', value); |
91 | me.crtTree.refresh(); | 91 | me.crtTree.refresh(); |
92 | }), | 92 | }), |
93 | + myDesktopApp.addAmdaInfo('MinMaxThreshold','vertical-align:bottom'), | ||
93 | this.addStandardFieldSet('Min/Max thresholds', '', this.getValuesRangeItems()), | 94 | this.addStandardFieldSet('Min/Max thresholds', '', this.getValuesRangeItems()), |
94 | this.addStandardParamDropTarget('serie-colored-param', 'Colored Parameter'), | 95 | this.addStandardParamDropTarget('serie-colored-param', 'Colored Parameter'), |
95 | this.addStandardFieldSet('Lines', 'serie-lines-activated', this.addStandardLineItems('serie-lines')), | 96 | this.addStandardFieldSet('Lines', 'serie-lines-activated', this.addStandardLineItems('serie-lines')), |
96 | this.addStandardFieldSet('Symbols', 'serie-symbols-activated', this.addStandardSymbolsItems('serie-symbols')), | 97 | this.addStandardFieldSet('Symbols', 'serie-symbols-activated', this.addStandardSymbolsItems('serie-symbols')), |
97 | this.addStandardFieldSet('Time ticks', 'serie-timetick-activated', this.getTimeTickItems()), | 98 | this.addStandardFieldSet('Time ticks', 'serie-timetick-activated', this.getTimeTickItems()), |
98 | - this.addStandardFieldSet('Interval ticks', 'serie-intervaltick-activated', this.getIntervalTickItems()) | 99 | + this.addStandardFieldSet('Interval ticks', 'serie-intervaltick-activated', this.getIntervalTickItems()) |
99 | ]; | 100 | ]; |
100 | } | 101 | } |
101 | }); | 102 | }); |
js/app/views/PlotComponents/PlotSpectroForm.js
@@ -18,22 +18,23 @@ Ext.define('amdaPlotComp.PlotSpectroForm', { | @@ -18,22 +18,23 @@ Ext.define('amdaPlotComp.PlotSpectroForm', { | ||
18 | 18 | ||
19 | getValuesRangeItems: function() { | 19 | getValuesRangeItems: function() { |
20 | return [ | 20 | return [ |
21 | - this.addStandardFloat2('spectro-value-min', 'Min value', -Number.MAX_VALUE, Number.MAX_VALUE, true), | ||
22 | - this.addStandardFloat2('spectro-value-max', 'Max value', -Number.MAX_VALUE, Number.MAX_VALUE, true) | 21 | + this.addStandardFloat2('spectro-value-min', 'Min value', -Number.MAX_VALUE, Number.MAX_VALUE, true), |
22 | + this.addStandardFloat2('spectro-value-max', 'Max value', -Number.MAX_VALUE, Number.MAX_VALUE, true) | ||
23 | ]; | 23 | ]; |
24 | }, | 24 | }, |
25 | 25 | ||
26 | getFormItems: function() { | 26 | getFormItems: function() { |
27 | var me = this; | 27 | var me = this; |
28 | return [ | 28 | return [ |
29 | - this.addStandardCombo('spectro-yaxis', 'Y axis', amdaPlotObj.PlotObjectConfig.availableYAxes, function(name, value, oldValue) { | ||
30 | - me.object.set('spectro-yaxis', value); | ||
31 | - me.crtTree.refresh(); | ||
32 | - }), | ||
33 | - this.addStandardFieldSet('Min/Max thresholds', '', this.getValuesRangeItems()), | ||
34 | - this.addStandardCheck('spectro-log0-as-min', 'Show 0 values as Min Values in log scale', function(name, value, oldValue) { | ||
35 | - me.object.set('spectro-log0-as-min', value); | ||
36 | - }) | 29 | + this.addStandardCombo('spectro-yaxis', 'Y axis', amdaPlotObj.PlotObjectConfig.availableYAxes, function(name, value, oldValue) { |
30 | + me.object.set('spectro-yaxis', value); | ||
31 | + me.crtTree.refresh(); | ||
32 | + }), | ||
33 | + myDesktopApp.addAmdaInfo('MinMaxThreshold','vertical-align:bottom'), | ||
34 | + this.addStandardFieldSet('Min/Max thresholds', '', this.getValuesRangeItems()), | ||
35 | + this.addStandardCheck('spectro-log0-as-min', 'Show 0 values as Min Values in log scale', function(name, value, oldValue) { | ||
36 | + me.object.set('spectro-log0-as-min', value); | ||
37 | + }) | ||
37 | ]; | 38 | ]; |
38 | } | 39 | } |
39 | }); | 40 | }); |
js/app/views/PlotComponents/PlotTabPanel.js
@@ -33,10 +33,14 @@ Ext.define('amdaPlotComp.PlotTabPanel', { | @@ -33,10 +33,14 @@ Ext.define('amdaPlotComp.PlotTabPanel', { | ||
33 | { | 33 | { |
34 | this.object = object; | 34 | this.object = object; |
35 | this.removeAll(); | 35 | this.removeAll(); |
36 | - var isFirstTab = true; | ||
37 | - this.object.tabs().each(function (rec) { | ||
38 | - this.addPlotTab(rec, isFirstTab); | ||
39 | - isFirstTab = false; | 36 | + var selectedTab = this.object.get('active-tab-id'); |
37 | + | ||
38 | + this.object.tabs().each(function (rec, index) { | ||
39 | + var isSelected = false; | ||
40 | + if (index+1 == selectedTab) | ||
41 | + isSelected = true; | ||
42 | + | ||
43 | + this.addPlotTab(rec, isSelected); | ||
40 | }, this); | 44 | }, this); |
41 | }, | 45 | }, |
42 | 46 |
js/app/views/PlotTabResultUI.js
@@ -313,7 +313,8 @@ Ext.define('amdaUI.PlotTabResultUI', { | @@ -313,7 +313,8 @@ Ext.define('amdaUI.PlotTabResultUI', { | ||
313 | 313 | ||
314 | me.contextualMenu.add([ | 314 | me.contextualMenu.add([ |
315 | { | 315 | { |
316 | - text:'Extend/Shift Time request', | 316 | + text:'Extend/Shift Time interval', |
317 | + disabled : me.isTTNavBar, | ||
317 | handler : function () | 318 | handler : function () |
318 | { | 319 | { |
319 | var extendShiftPlugin = this.getPlugin('plot-extendshift-plugin-id'); | 320 | var extendShiftPlugin = this.getPlugin('plot-extendshift-plugin-id'); |
js/app/views/PlotUI.js
@@ -32,6 +32,8 @@ Ext.define('amdaUI.PlotUI', { | @@ -32,6 +32,8 @@ Ext.define('amdaUI.PlotUI', { | ||
32 | 32 | ||
33 | plotElement : null, | 33 | plotElement : null, |
34 | 34 | ||
35 | + allPlots : false, | ||
36 | + | ||
35 | constructor: function(config) { | 37 | constructor: function(config) { |
36 | this.init(config); | 38 | this.init(config); |
37 | this.callParent(arguments); | 39 | this.callParent(arguments); |
@@ -45,88 +47,81 @@ Ext.define('amdaUI.PlotUI', { | @@ -45,88 +47,81 @@ Ext.define('amdaUI.PlotUI', { | ||
45 | this.plotTabs.setRequestObject(this.object); | 47 | this.plotTabs.setRequestObject(this.object); |
46 | this.timeSelector.intervalSel.setInterval(this.object.get('startDate'), this.object.get('stopDate')); | 48 | this.timeSelector.intervalSel.setInterval(this.object.get('startDate'), this.object.get('stopDate')); |
47 | this.addTTs(this.object.get('timeTables')); | 49 | this.addTTs(this.object.get('timeTables')); |
50 | + this.updateRequestOption(this.object.get('all-in-one')); | ||
48 | }, | 51 | }, |
49 | 52 | ||
50 | - saveProcess : function() { | ||
51 | - var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); | ||
52 | - if (!plotModule) | ||
53 | - return; | ||
54 | - | ||
55 | - this.updateObject(); | ||
56 | - | ||
57 | - if ((this.object.get('id') != '') && (plotModule.linkedNode.get('text') == this.object.get('name'))) | ||
58 | - //update existing request | ||
59 | - plotModule.linkedNode.update(); | ||
60 | - else | ||
61 | - { | ||
62 | - var me = this; | ||
63 | - //Request Name validation | ||
64 | - plotModule.linkedNode.isValidName(this.object.get('name'), function (res) { | ||
65 | - if (!res) | ||
66 | - { | ||
67 | - myDesktopApp.errorMsg('Error during object validation'); | ||
68 | - return; | ||
69 | - } | ||
70 | - | ||
71 | - if (!res.valid) | ||
72 | - { | ||
73 | - if (res.error) | ||
74 | - myDesktopApp.errorMsg(res.error); | ||
75 | - else | ||
76 | - myDesktopApp.errorMsg('Invalid object name'); | ||
77 | - return; | ||
78 | - } | ||
79 | - | ||
80 | - //Save | ||
81 | - if (me.object.get('id') != '') | ||
82 | - { | ||
83 | - //Duplicate request | ||
84 | - plotModule.createLinkedNode(); | ||
85 | - plotModule.linkedNode.set('object',me.object); | ||
86 | - } | ||
87 | - else | ||
88 | - { | ||
89 | - //Create new request | ||
90 | - } | ||
91 | - plotModule.linkedNode.create(); | ||
92 | - }); | ||
93 | - } | 53 | + updateRequestOption : function(allInOne) { |
54 | + var requestOptionCB = this.formPanel.getForm().findField('all-in-one'); | ||
55 | + requestOptionCB.setValue(allInOne); | ||
56 | + }, | ||
57 | + | ||
58 | + /** | ||
59 | + * overwrite metod called by Save button | ||
60 | + */ | ||
61 | + overwriteProcess : function(btn) | ||
62 | + { | ||
63 | + if (btn == 'cancel') return; | ||
64 | + | ||
65 | + this.saveProcess(true); | ||
94 | }, | 66 | }, |
67 | + | ||
68 | + | ||
69 | + /** | ||
70 | + * save method called by Save button to launch the save process | ||
71 | + */ | ||
72 | + saveProcess : function(toRename) { | ||
73 | + var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); | ||
74 | + if (!plotModule) | ||
75 | + return; | ||
76 | + | ||
77 | + if (toRename) { | ||
78 | + plotModule.linkedNode.set('object',this.object); | ||
79 | + plotModule.linkedNode.update(); | ||
80 | + } | ||
81 | + else { | ||
82 | + //Save | ||
83 | + if (this.object.get('id') != '') { | ||
84 | + //Duplicate request | ||
85 | + plotModule.createLinkedNode(); | ||
86 | + plotModule.linkedNode.set('object',this.object); | ||
87 | + } | ||
88 | + plotModule.linkedNode.create(); | ||
89 | + } | ||
90 | + }, | ||
95 | 91 | ||
96 | - resetProcess : function(){ | ||
97 | - var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); | 92 | + resetProcess : function(){ |
93 | + var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); | ||
98 | plotModule.createLinkedNode(); | 94 | plotModule.createLinkedNode(); |
99 | plotModule.createObject(); | 95 | plotModule.createObject(); |
100 | this.setObject(plotModule.linkedNode.get('object')); | 96 | this.setObject(plotModule.linkedNode.get('object')); |
101 | - }, | 97 | + }, |
102 | 98 | ||
103 | - getDataProcess : function(){ | 99 | + getDataProcess : function(){ |
104 | this.updateObject(); | 100 | this.updateObject(); |
105 | // plot was not called - form only | 101 | // plot was not called - form only |
106 | - if (this.object.get('last-plotted-tab') == 0) | ||
107 | - { | 102 | + if (this.object.get('last-plotted-tab') == 0) { |
108 | this.object.set('last-plotted-tab', this.plotTabs.getSelectedTabId()); | 103 | this.object.set('last-plotted-tab', this.plotTabs.getSelectedTabId()); |
109 | } | 104 | } |
110 | - var downObject = amdaModel.DownloadNode.decodeObject(this.object); | ||
111 | - amdaModel.DownloadNode.set('object',Ext.create('amdaModel.Download',downObject)); | ||
112 | - amdaModel.DownloadNode.editInModule(); | ||
113 | - }, | 105 | + var downObject = amdaModel.DownloadNode.decodeObject(this.object); |
106 | + amdaModel.DownloadNode.set('object',Ext.create('amdaModel.Download',downObject)); | ||
107 | + amdaModel.DownloadNode.editInModule(); | ||
108 | + }, | ||
114 | 109 | ||
115 | - addParameter : function(node){ | ||
116 | - var crtTree = this.plotTabs.getTreeFromPlotTab(this.plotTabs.getActiveTab()); | ||
117 | - crtTree.dropRecord(node,null,'append'); | ||
118 | - }, | 110 | + addParameter : function(node){ |
111 | + var crtTree = this.plotTabs.getTreeFromPlotTab(this.plotTabs.getActiveTab()); | ||
112 | + crtTree.dropRecord(node,null,'append'); | ||
113 | + }, | ||
119 | 114 | ||
120 | /** | 115 | /** |
121 | * plot method called by 'Do Plot' button to launch the plot process | 116 | * plot method called by 'Do Plot' button to launch the plot process |
122 | */ | 117 | */ |
123 | - doPlot : function(){ | ||
124 | - this.updateObject(); | ||
125 | - this.object.set('last-plotted-tab', this.plotTabs.getSelectedTabId()); | ||
126 | - var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); | ||
127 | - if (plotModule) | ||
128 | - plotModule.linkedNode.execute(); | ||
129 | - }, | 118 | + doPlot : function(){ |
119 | + this.updateObject(); | ||
120 | + this.object.set('last-plotted-tab', this.plotTabs.getSelectedTabId()); | ||
121 | + var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); | ||
122 | + if (plotModule) | ||
123 | + plotModule.linkedNode.execute(); | ||
124 | + }, | ||
130 | 125 | ||
131 | /** | 126 | /** |
132 | * Check if changes were made before closing window | 127 | * Check if changes were made before closing window |
@@ -140,19 +135,19 @@ Ext.define('amdaUI.PlotUI', { | @@ -140,19 +135,19 @@ Ext.define('amdaUI.PlotUI', { | ||
140 | return this.object.isDirty(); | 135 | return this.object.isDirty(); |
141 | }, | 136 | }, |
142 | 137 | ||
143 | - /** | ||
144 | - * update this.object from form | ||
145 | - */ | ||
146 | - updateObject : function(){ | ||
147 | - var timeSource = this.timeSelector.getActiveTimeSource(); | ||
148 | - // var multiPlotForm = this.multiPlotIntervalPanel.getForm(); | 138 | + /** |
139 | + * update time selector of this.object from form | ||
140 | + */ | ||
141 | + updateObject : function(){ | ||
142 | + var timeSource = this.timeSelector.getActiveTimeSource(); | ||
143 | + | ||
149 | var multiPlotForm = this.timeSelector.getForm(); | 144 | var multiPlotForm = this.timeSelector.getForm(); |
150 | - multiPlotForm.updateRecord(this.object); | ||
151 | - this.object.set('timesrc', timeSource); | ||
152 | - if (timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0]) | ||
153 | - this.object.set('timeTables',this.timeSelector.TTGrid.getStore().data.items); | ||
154 | - this.plotTabs.updateTimeObject(); | ||
155 | - }, | 145 | + multiPlotForm.updateRecord(this.object); |
146 | + this.object.set('timesrc', timeSource); | ||
147 | + if (timeSource === amdaModel.AmdaTimeObject.inputTimeSrc[0]) | ||
148 | + this.object.set('timeTables',this.timeSelector.TTGrid.getStore().data.items); | ||
149 | + this.plotTabs.updateTimeObject(); | ||
150 | + }, | ||
156 | 151 | ||
157 | addTT : function(newTTName,newTTid,timeSelectorId) { | 152 | addTT : function(newTTName,newTTid,timeSelectorId) { |
158 | var crtTimeSelector = Ext.getCmp(timeSelectorId); | 153 | var crtTimeSelector = Ext.getCmp(timeSelectorId); |
@@ -183,8 +178,7 @@ Ext.define('amdaUI.PlotUI', { | @@ -183,8 +178,7 @@ Ext.define('amdaUI.PlotUI', { | ||
183 | this.timeSelector.intervalSel.setInterval(dateStart, dateStop); | 178 | this.timeSelector.intervalSel.setInterval(dateStart, dateStop); |
184 | }, | 179 | }, |
185 | 180 | ||
186 | - updateLinkedToMultiPlotMode : function(isLinkedToMultiPlotMode) { | ||
187 | - // this.multiPlotIntervalPanel.setVisible(isLinkedToMultiPlotMode); | 181 | + updateLinkedToMultiPlotMode : function(isLinkedToMultiPlotMode) { |
188 | this.timeSelector.setVisible(isLinkedToMultiPlotMode); | 182 | this.timeSelector.setVisible(isLinkedToMultiPlotMode); |
189 | }, | 183 | }, |
190 | 184 | ||
@@ -213,20 +207,6 @@ Ext.define('amdaUI.PlotUI', { | @@ -213,20 +207,6 @@ Ext.define('amdaUI.PlotUI', { | ||
213 | ] | 207 | ] |
214 | }); | 208 | }); |
215 | 209 | ||
216 | -// this.multiPlotIntervalPanel = new Ext.form.Panel({ | ||
217 | -// flex: 2, | ||
218 | -// layout: 'fit', | ||
219 | -// bodyStyle: { background : '#dfe8f6' }, | ||
220 | -// visible : false, | ||
221 | -// collapsible : true, | ||
222 | -// defaults: { | ||
223 | -// border: false | ||
224 | -// }, | ||
225 | -// items : [ | ||
226 | -// this.timeSelector | ||
227 | -// ] | ||
228 | -// }); | ||
229 | - | ||
230 | this.formPanel = new Ext.form.Panel({ | 210 | this.formPanel = new Ext.form.Panel({ |
231 | region: 'center', | 211 | region: 'center', |
232 | layout: { | 212 | layout: { |
@@ -269,66 +249,116 @@ Ext.define('amdaUI.PlotUI', { | @@ -269,66 +249,116 @@ Ext.define('amdaUI.PlotUI', { | ||
269 | ] | 249 | ] |
270 | } | 250 | } |
271 | ], | 251 | ], |
272 | - fbar: [ | ||
273 | - { | ||
274 | - xtype: 'button', | ||
275 | - text: 'Plot', | ||
276 | - scope: this, | ||
277 | - handler: function(button) { | ||
278 | - this.doPlot(); | ||
279 | - } | ||
280 | - }, | ||
281 | - ' ', | ||
282 | - { | ||
283 | - xtype: 'button', | ||
284 | - text: 'Get Data', | ||
285 | - scope: this, | ||
286 | - handler: function(button) { | ||
287 | - this.getDataProcess(); | ||
288 | - } | ||
289 | - }, | ||
290 | - ' ', | ||
291 | - { | ||
292 | - xtype: 'button', | ||
293 | - text: 'Reset', | ||
294 | - scope: this, | ||
295 | - handler: function(button) { | ||
296 | - this.resetProcess(); | ||
297 | - } | ||
298 | - }, | ||
299 | - '->', | ||
300 | - { | ||
301 | - xtype: 'button', | ||
302 | - text: 'Save Request', | ||
303 | - scope: this, | ||
304 | - handler: function(button) { | ||
305 | - this.saveProcess(); | ||
306 | - } | ||
307 | - } | 252 | + fbar: [{ |
253 | + xtype: 'button', | ||
254 | + text: 'Plot', | ||
255 | + scope: this, | ||
256 | + handler: function(button) { | ||
257 | + this.doPlot(); | ||
258 | + } | ||
259 | + },' ', { | ||
260 | + xtype: 'button', | ||
261 | + text: 'Get Data', | ||
262 | + scope: this, | ||
263 | + handler: function(button) { | ||
264 | + this.getDataProcess(); | ||
265 | + } | ||
266 | + },' ', { | ||
267 | + xtype: 'button', | ||
268 | + text: 'Reset', | ||
269 | + scope: this, | ||
270 | + handler: function(button) { | ||
271 | + this.resetProcess(); | ||
272 | + } | ||
273 | + }, | ||
274 | + '->', '-', { | ||
275 | + xtype: 'button', | ||
276 | + text: 'Save Request', | ||
277 | + scope: this, | ||
278 | + handler: function(button) { | ||
279 | + var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); | ||
280 | + if (!plotModule) | ||
281 | + return; | ||
282 | + | ||
283 | + this.updateObject(); | ||
284 | + this.object.set('active-tab-id', this.plotTabs.getSelectedTabId()); | ||
285 | + this.object.set('all-in-one', this.allPlots); | ||
286 | + | ||
287 | + //update existing request | ||
288 | + if ((this.object.get('id') != '') && | ||
289 | + (plotModule.linkedNode.get('text') == this.object.get('name'))) | ||
290 | + plotModule.linkedNode.update(); | ||
291 | + else { | ||
292 | + var me = this; | ||
293 | + plotModule.linkedNode.isValidName(this.object.get('name'), function (res) { | ||
294 | + if (!res) { | ||
295 | + myDesktopApp.errorMsg('Error during object validation'); | ||
296 | + return; | ||
297 | + } | ||
298 | + if (!res.valid) { | ||
299 | + if (res.error) { | ||
300 | + if (res.error.search('subtree') != -1) { | ||
301 | + Ext.Msg.show( { title : 'Warning', | ||
302 | + msg: res.error + '<br/>Do you want to overwrite it?', | ||
303 | + width: 300, | ||
304 | + buttons: Ext.Msg.OKCANCEL, | ||
305 | + icon: Ext.Msg.WARNING, | ||
306 | + fn : me.overwriteProcess, | ||
307 | + scope : me | ||
308 | + }); | ||
309 | + } | ||
310 | + else { | ||
311 | + myDesktopApp.errorMsg(res.error); | ||
312 | + } | ||
313 | + } | ||
314 | + else { | ||
315 | + myDesktopApp.errorMsg('Invalid object name'); | ||
316 | + } | ||
317 | + | ||
318 | + return; | ||
319 | + } | ||
320 | + me.saveProcess(false); | ||
321 | + }) | ||
322 | + } | ||
323 | + } | ||
324 | + }, ' ', | ||
325 | + myDesktopApp.addAmdaInfo('plotSaveRequest'), | ||
326 | + ' ', { | ||
327 | + xtype: 'checkbox', | ||
328 | + boxLabel: 'All Plot Tabs', | ||
329 | + name : 'all-in-one', | ||
330 | + listeners : { | ||
331 | + scope: this, | ||
332 | + change: function (cb, nv, ov) { | ||
333 | + this.allPlots = nv; | ||
334 | + } | ||
335 | + } | ||
336 | + } | ||
308 | ] | 337 | ] |
309 | }); | 338 | }); |
310 | - | 339 | + |
311 | var myConf = { | 340 | var myConf = { |
312 | - layout: 'border', | ||
313 | - items: [ | ||
314 | - this.formPanel, | ||
315 | - { | ||
316 | - xtype: 'panel', | ||
317 | - region: 'south', | ||
318 | - title: 'Information', | ||
319 | - collapsible: true, | ||
320 | - collapseMode: 'header', | ||
321 | - height: 100, | ||
322 | - autoHide: false, | ||
323 | - bodyStyle: 'padding:5px', | ||
324 | - iconCls: 'icon-information', | ||
325 | - loader: { | ||
326 | - autoLoad: true, | ||
327 | - url: helpDir+'plotHOWTO' | ||
328 | - } | ||
329 | - } | ||
330 | - ] | 341 | + layout: 'border', |
342 | + items: [ | ||
343 | + this.formPanel, | ||
344 | + { | ||
345 | + xtype: 'panel', | ||
346 | + region: 'south', | ||
347 | + title: 'Information', | ||
348 | + collapsible: true, | ||
349 | + collapseMode: 'header', | ||
350 | + height: 100, | ||
351 | + autoHide: false, | ||
352 | + bodyStyle: 'padding:5px', | ||
353 | + iconCls: 'icon-information', | ||
354 | + loader: { | ||
355 | + autoLoad: true, | ||
356 | + url: helpDir+'plotHOWTO' | ||
357 | + } | ||
358 | + } | ||
359 | + ] | ||
331 | }; | 360 | }; |
332 | - Ext.apply (this , Ext.apply (arguments, myConf)); | 361 | + |
362 | + Ext.apply(this, Ext.apply(arguments, myConf)); | ||
333 | } | 363 | } |
334 | }); | 364 | }); |
js/app/views/TimeTableUI.js
@@ -454,7 +454,7 @@ Ext.define('amdaUI.TimeTableUI', { | @@ -454,7 +454,7 @@ Ext.define('amdaUI.TimeTableUI', { | ||
454 | xtype: 'rownumberer', | 454 | xtype: 'rownumberer', |
455 | width: 50, | 455 | width: 50, |
456 | renderer: function(value, metaData, record, row, col, store, gridView){ | 456 | renderer: function(value, metaData, record, row, col, store, gridView){ |
457 | - var msg = record.index; | 457 | + var msg = record.index + 1; |
458 | if (record.get('isNew') || record.get('isModified')) | 458 | if (record.get('isNew') || record.get('isModified')) |
459 | { | 459 | { |
460 | msg += ' *'; | 460 | msg += ' *'; |