Add menu bindings/dialog to save/load flight recorder tapes.
[fg:toms-fgdata.git] / gui / dialogs / flight-recorder-load.xml
1 <?xml version="1.0"?>
2
3 <PropertyList>
4     <name>flight-recorder-load</name>
5     <layout>vbox</layout>
6     <resizable>true</resizable>
7         <default-padding>3</default-padding>
8
9         <nasal>
10                 <open><![CDATA[
11                         var DialogController = {
12                                 new : func( dlgRoot ) {
13                                         var obj = { parents: [DialogController] };
14                                         obj.dlgRoot = dlgRoot;
15                                         obj.updateCombo();
16                                         return obj;
17                                 },
18                                 updateCombo : func {
19                                         fgcommand("load-tape", props.Node.new({"tape": "",
20                                                           "same-aircraft": getprop("/sim/gui/dialogs/flightrecorder/show-matching-aircraft-only")}));
21
22                                         var combo = gui.findElementByName( me.dlgRoot, "selected-tape" );
23                                         combo.removeChildren("value");
24
25                                         var i = 0;
26                                         var name = 1;
27                                         while (name != nil)
28                                         {
29                                                 var name = getprop("/sim/replay/tape-list/tape[" ~ i ~ "]");
30                                                 if (name != nil)
31                                                 {
32                                                         combo.getNode("value[" ~ i ~ "]", 1).setValue(name);
33                                                         if (i==0)
34                                                         {
35                                                                 setprop("/sim/gui/dialogs/flightrecorder/selected-tape", name);
36                                                         }
37                                                 }
38                                                 i += 1;
39                                         }
40                                         if (i == 1)
41                                         {
42                                                 setprop("/sim/gui/dialogs/flightrecorder/selected-tape", "No tapes in selected directory!");
43                                                 me.haveData = 0;
44                                         }
45                                         else
46                                         {
47                                                 me.haveData = 1;
48                                         }
49                                         me.preview();
50                                 },
51                                 preview: func {
52                                         var tape = getprop("/sim/gui/dialogs/flightrecorder/selected-tape");
53                                         setprop("/sim/gui/dialogs/flightrecorder/preview/aircraft-description", "");
54                                         setprop("/sim/gui/dialogs/flightrecorder/preview/version/flightgear", "");
55                                         setprop("/sim/gui/dialogs/flightrecorder/preview/user-data/description", "");
56                                         setprop("/sim/gui/dialogs/flightrecorder/preview/tape-duration-str", "");
57                                         setprop("/sim/gui/dialogs/flightrecorder/preview/aircraft-version", "");
58                                         setprop("/sim/gui/dialogs/flightrecorder/preview/aircraft-type", "");
59                                         setprop("/sim/gui/dialogs/flightrecorder/preview/closest-airport-id", "");
60                                         setprop("/sim/gui/dialogs/flightrecorder/preview/author-name", "");
61                                         setprop("/sim/gui/dialogs/flightrecorder/warning", "");
62                                         if (!me.haveData)
63                                                 tape = "";
64                                         fgcommand("load-tape", props.Node.new({"tape": tape, "preview": 1} ) );
65                                         var actype = getprop("/sim/gui/dialogs/flightrecorder/preview/aircraft-type");
66                                         if ((actype != "")and(actype != getprop("/sim/aircraft")))
67                                         {
68                                                 setprop("/sim/gui/dialogs/flightrecorder/warning",
69                                                                 "Tape was recorded for another aircraft (" ~ actype ~ "). It may not work (properly). Good luck! :)");
70                                         }
71                                 },
72                                 close: func {},
73                                 redraw: func{gui.dialog_update("flight-recorder-load", "selected-tape");},
74                         };
75                         var setdefault = func (prop, value) { if (getprop(prop) == nil) setprop(prop, value);}
76                         setdefault("/sim/gui/dialogs/flightrecorder/show-matching-aircraft-only", 1);
77                         var controller = DialogController.new( cmdarg() );
78                 ]]></open>
79         </nasal>
80 <!--
81
82 -->
83
84     <!-- titlebar -->
85     <group>
86         <layout>hbox</layout>
87         <empty><stretch>1</stretch></empty>
88
89         <text>
90             <label>Load Flight Recorder Tape</label>
91         </text>
92
93         <empty><stretch>1</stretch></empty>
94
95         <button>
96             <pref-width>16</pref-width>
97             <pref-height>16</pref-height>
98             <legend></legend>
99             <keynum>27</keynum>
100             <border>2</border>
101             <binding>
102                 <command>dialog-close</command>
103             </binding>
104         </button>
105     </group>
106     <hrule/>
107
108     <!-- main dialog area -->
109
110     <group>
111         <layout>table</layout>
112
113         <text>
114             <row>0</row><col>0</col>
115             <label>Tape Directory:</label>
116             <halign>left</halign>
117                         <valign>top</valign>
118         </text>
119                 <text>
120                         <row>0</row><col>1</col>
121                         <halign>left</halign>
122                         <valign>top</valign>
123                         <label>MMMMMMMMMMMMMMMMM</label>
124                         <stretch>1</stretch>
125                         <format>%s</format>
126                         <property>/sim/replay/tape-directory</property>
127                         <live>true</live>
128                         <color>
129                                 <red>0.7</red>
130                                 <green>0.7</green>
131                                 <blue>0.7</blue>
132                                 <alpha>1</alpha>
133                         </color>
134         </text>
135         <button>
136                         <equal>false</equal>
137             <row>0</row><col>2</col>
138             <legend>Change</legend>
139                         <halign>left</halign>
140                         <valign>top</valign>
141             <binding>
142                 <command>nasal</command>
143                                 <script><![CDATA[
144                                         var set_tapedir_sel = gui.DirSelector.new(
145                                                                 func(result) { setprop("/sim/replay/tape-directory", result.getValue());
146                                                                         controller.updateCombo();controller.redraw();
147                                                                 },
148                                                                 "Select Tape Directory", "Ok", getprop("/sim/replay/tape-directory"));
149                                         set_tapedir_sel.open();
150                                 ]]></script>
151             </binding>
152         </button>
153
154                 <text>
155                         <row>1</row><col>0</col>
156                         <label>Hide Mismatching Tapes:</label>
157                         <halign>left</halign>
158                 </text>
159                 <checkbox>
160                         <row>1</row><col>1</col>
161                         <name>matching-aircraft</name>
162                         <halign>left</halign>
163                         <property>/sim/gui/dialogs/flightrecorder/show-matching-aircraft-only</property>
164                         <live>true</live>
165                         <binding>
166                                 <command>dialog-apply</command>
167                                 <object-name>matching-aircraft</object-name>
168                         </binding>
169             <binding>
170                 <command>nasal</command>
171                                 <script>controller.updateCombo();controller.redraw();</script>
172             </binding>
173                         <label>(Don't show tapes from other aircraft)</label>
174                 </checkbox>
175
176                 <text>
177                         <row>2</row><col>0</col>
178                         <label>Selected Tape:</label>
179                         <halign>left</halign>
180                 </text>
181         <combo>
182             <name>selected-tape</name>
183             <halign>left</halign>
184             <row>2</row><col>1</col>
185             <pref-width>300</pref-width>
186             <property>/sim/gui/dialogs/flightrecorder/selected-tape</property>
187             <editable>false</editable>
188                         <live>true</live>
189                         <binding>
190                                 <command>dialog-apply</command>
191                                 <object-name>selected-tape</object-name>
192                         </binding>
193             <binding>
194                 <command>nasal</command>
195                                 <script>controller.preview();controller.redraw();</script>
196             </binding>
197         </combo>
198
199             <hrule><row>3</row><col>0</col><colspan>3</colspan></hrule>
200
201                 <text>
202                         <row>5</row><col>0</col><colspan>3</colspan>
203                         <label>Tape Recording Details</label>
204                         <halign>center</halign>
205                 </text>
206
207                 <text>
208                         <row>6</row><col>0</col>
209                         <label>Author/Pilot:</label>
210                         <halign>left</halign>
211                 </text>
212                 <text>
213                         <row>6</row><col>1</col>
214                         <format>%s</format>
215                         <property>/sim/gui/dialogs/flightrecorder/preview/user-data/author-name</property>
216                         <live>true</live>
217                         <halign>left</halign>
218                         <color>
219                                 <red>0.8</red>
220                                 <green>0.8</green>
221                                 <blue>0.0</blue>
222                                 <alpha>1</alpha>
223                         </color>
224                 </text>
225
226                 <text>
227                         <row>8</row><col>0</col>
228                         <label>Aircraft:</label>
229                         <halign>left</halign>
230                 </text>
231                 <text>
232                         <row>8</row><col>1</col>
233                         <format>%s</format>
234                         <property>/sim/gui/dialogs/flightrecorder/preview/aircraft-description</property>
235                         <live>true</live>
236                         <halign>left</halign>
237                         <color>
238                                 <red>0.8</red>
239                                 <green>0.8</green>
240                                 <blue>0.0</blue>
241                                 <alpha>1</alpha>
242                         </color>
243                 </text>
244
245                 <text>
246                         <row>10</row><col>0</col>
247                         <label>Aircraft Version:</label>
248                         <halign>left</halign>
249                 </text>
250                 <text>
251                         <row>10</row><col>1</col>
252                         <format>%s</format>
253                         <property>/sim/gui/dialogs/flightrecorder/preview/aircraft-version</property>
254                         <live>true</live>
255                         <halign>left</halign>
256                         <color>
257                                 <red>0.8</red>
258                                 <green>0.8</green>
259                                 <blue>0.0</blue>
260                                 <alpha>1</alpha>
261                         </color>
262                 </text>
263
264                 <text>
265                         <row>14</row><col>0</col>
266                         <label>Airport (nearby):</label>
267                         <halign>left</halign>
268                 </text>
269                 <text>
270                         <row>14</row><col>1</col>
271                         <format>%s</format>
272                         <property>/sim/gui/dialogs/flightrecorder/preview/closest-airport-id</property>
273                         <live>true</live>
274                         <halign>left</halign>
275                         <color>
276                                 <red>0.8</red>
277                                 <green>0.8</green>
278                                 <blue>0.0</blue>
279                                 <alpha>1</alpha>
280                         </color>
281                 </text>
282
283                 <text>
284                         <row>18</row><col>0</col>
285                         <label>Tape Duration:</label>
286                         <halign>left</halign>
287                 </text>
288                 <text>
289                         <row>18</row><col>1</col>
290                         <property>/sim/gui/dialogs/flightrecorder/preview/tape-duration-str</property>
291                         <halign>left</halign>
292                         <live>true</live>
293                         <color>
294                                 <red>0.8</red>
295                                 <green>0.8</green>
296                                 <blue>0.0</blue>
297                                 <alpha>1</alpha>
298                         </color>
299                 </text>
300
301                 <text>
302                         <row>22</row><col>0</col>
303                         <label>FG Version (recorder):</label>
304                         <halign>left</halign>
305                 </text>
306                 <text>
307                         <row>22</row><col>1</col>
308                         <property>/sim/gui/dialogs/flightrecorder/preview/version/flightgear</property>
309                         <halign>left</halign>
310                         <live>true</live>
311                         <color>
312                                 <red>0.8</red>
313                                 <green>0.8</green>
314                                 <blue>0.0</blue>
315                                 <alpha>1</alpha>
316                         </color>
317                 </text>
318
319         <text>
320             <row>25</row>
321             <col>0</col>
322                         <colspan>3</colspan>
323             <label>Description:</label>
324             <halign>left</halign>
325             <valign>top</valign>
326         </text>
327         </group>
328
329         <group>
330                 <layout>vbox</layout>
331                 <stretch>10</stretch>
332                 <halign>fill</halign>
333                 <valign>fill</valign>
334                 <textbox>
335                         <wrap>false</wrap>
336                         <live>true</live>
337                         <name>description-string</name>
338                         <halign>fill</halign>
339                         <valign>fill</valign>
340                         <stretch>1</stretch>
341                         <pref-width>550</pref-width>
342                         <pref-height>150</pref-height>
343                         <editable>false</editable>
344                         <top-line>1</top-line>
345                         <property>/sim/gui/dialogs/flightrecorder/preview/user-data/description</property>
346                         <binding>
347                                 <command>dialog-apply</command>
348                                 <object-name>description-string</object-name>
349                         </binding>
350                 </textbox>
351                 <text>
352                         <valign>top</valign>
353                         <stretch>true</stretch>
354                         <property>/sim/gui/dialogs/flightrecorder/warning</property>
355                         <halign>left</halign>
356                         <live>true</live>
357                         <color>
358                                 <red>1.0</red>
359                                 <green>0.4</green>
360                                 <blue>0.4</blue>
361                                 <alpha>1</alpha>
362                         </color>
363                 </text>
364     </group>
365
366         <!-- button area -->
367         <hrule/>
368         <group>
369                 <layout>hbox</layout>
370                 <default-padding>10</default-padding>
371                 <empty><stretch>true</stretch></empty>
372
373                 <button>
374                         <legend>Load</legend>
375                         <equal>true</equal>
376                         <binding>
377                                 <command>dialog-apply</command>
378                         </binding>
379                         <binding>
380                                 <command>nasal</command>
381                                 <script>
382                                 # close old replay dialog and delay loading - until current replay was properly stopped
383                                 fgcommand("dialog-close", props.Node.new({ "dialog-name": "replay" }));
384                                 setprop("/sim/replay/disable", 0);
385                                 settimer(func {
386                                         var Config = props.Node.new({
387                                                 "tape": getprop("/sim/gui/dialogs/flightrecorder/selected-tape", ""),
388                                                 "same-aircraft": 0
389                                                 });
390                                         if (fgcommand("load-tape", Config))
391                                                 gui.showDialog("replay");
392                                 }, 0.2);
393                                 </script>
394                         </binding>
395                         <binding>
396                                 <command>dialog-close</command>
397                         </binding>
398         </button>
399
400         <button>
401           <legend>Cancel</legend>
402           <default>true</default>
403           <equal>true</equal>
404           <binding>
405             <command>dialog-close</command>
406           </binding>
407         </button>
408
409         <empty><stretch>true</stretch></empty>
410     </group>
411
412 </PropertyList>