1
0
Fork 0
fgdata/gui/dialogs/replay.xml
Julian Smith de40bf5f94 gui/dialogs/replay.xml: in slider, measure time from start of recording.
This avoids problems in simple-time mode because PUI slider code uses float,
not double, so UTC values don't work properly because resolution is not enough.
2021-06-09 10:44:11 +01:00

627 lines
14 KiB
XML

<?xml version="1.0"?>
<PropertyList>
<name>replay</name>
<layout>vbox</layout>
<modal>false</modal>
<default-padding>1</default-padding>
<y>5</y>
<color>
<red>0.2</red>
<green>0.2</green>
<blue>0.2</blue>
<alpha>0.7</alpha>
</color>
<nasal>
<open><![CDATA[
var ReplayDialogController = {
new : func( dlgRoot ) {
var obj = { parents: [ReplayDialogController] };
obj.dlgRoot = dlgRoot;
obj.initViews(1);
return obj;
},
# Populate the view combo box with a list of the available views
initViews : func(update) {
var combo = gui.findElementByName( me.dlgRoot, "view-selector" );
if (update)
combo.removeChildren("value");
var current_view = getprop("/sim/current-view/view-number");
var i = 0;
foreach (var v; view.views) {
if (v.getNode("name") == nil) {
continue;
}
var name = v.getNode("name").getValue();
if (name == nil) {
continue;
}
# Pre-populate the combo box selected value
if (i == current_view) {
setprop("/sim/replay/view-name", name);
}
if (update)
combo.getNode("value[" ~ i ~ "]", 1).setValue(name);
i += 1;
}
},
open : func {
var replaySlider = gui.findElementByName( me.dlgRoot, "replay-time-slider" );
me.maxProp = replaySlider.getChild("max");
me.minProp = replaySlider.getChild("min");
me.speedUpListenerId = setlistener( "/sim/speed-up", func(n) { me.updateListener(n); }, 1, 1 );
me.timeOffsetListenerId = setlistener( "/sim/replay/time-offset",
func(n)
{
var offset = n.getValue();
if (offset < 0) offset = 0;
var t = getprop("/sim/replay/start-time") + offset;
setprop("/sim/replay/time", t);
},
0, # init.
);
me.timeListenerId = setlistener( "/sim/replay/time",
func(n)
{
var offset = n.getValue() - getprop("/sim/replay/start-time");
setprop("/sim/replay/time-offset", offset);
},
0, # init.
);
me.endTimeListenerId = setlistener( "/sim/replay/end-time",
func(n)
{
var offset = n.getValue() - getprop("/sim/replay/start-time");
setprop("/sim/replay/begin-end-duration", offset);
},
1, # init.
);
me.viewListenerId = setlistener( "/sim/current-view/view-number", func(n) { me.updateListener(n); }, 1, 1 );
if (getprop("/sim/replay/end-time")!=nil)
{
# update max/min range of replay-time slider
me.minProp.setValue(0);
me.maxProp.setValue(getprop("/sim/replay/end-time") - getprop("/sim/replay/start-time"));
#printf("Have set replay time range %s-%s", me.minProp.getValue(), me.maxProp.getValue());
}
me.updateListener(1);
},
updateListener : func( n ) {
var SpeedUp = getprop("/sim/speed-up");
if (SpeedUp<0.9)
{
SpeedUp=1/SpeedUp;
SpeedUp = "1/" ~ SpeedUp;
}
setprop("/sim/gui/dialogs/replay/time-factor","" ~ SpeedUp ~ "x");
me.initViews(0);
},
close : func {
removelistener( me.speedUpListenerId );
removelistener( me.viewListenerId );
removelistener( me.timeOffsetListenerId );
removelistener( me.timeListenerId );
removelistener( me.endTimeListenerId );
},
};
var controller = ReplayDialogController.new( cmdarg() );
controller.open();
if (props.globals.getNode("/rotors",0)!=nil)
setprop("/sim/replay/disable-my-controls",1);
]]></open>
<close><![CDATA[
controller.close();
]]></close>
</nasal>
<group>
<layout>hbox</layout>
<halign>fill</halign>
<pref-height>28</pref-height>
<text>
<font>
<property>sim/gui/selected-style/fonts/replay</property>
</font>
<label>REPLAY</label>
<color>
<red>0.9</red>
<green>0.9</green>
<blue>0.9</blue>
<alpha>1</alpha>
</color>
<pref-width>70</pref-width>
</text>
<text>
<label>Loop:</label>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
</text>
<empty><pref-width>1</pref-width></empty>
<checkbox>
<name>replay-looped</name>
<halign>left</halign>
<color-highlight>
<red type="float">0.6</red>
<green type="float">0.6</green>
<blue type="float">0.6</blue>
<alpha type="float">0.8</alpha>
</color-highlight>
<property>/sim/replay/looped</property>
<binding>
<command>dialog-apply</command>
<object-name>replay-looped</object-name>
</binding>
</checkbox>
<text>
<label>Show only last:</label>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
</text>
<empty><pref-width>10</pref-width></empty>
<checkbox>
<name>replay-duration-act</name>
<halign>center</halign>
<color-highlight>
<red type="float">0.6</red>
<green type="float">0.6</green>
<blue type="float">0.6</blue>
<alpha type="float">0.8</alpha>
</color-highlight>
<property>/sim/replay/duration-act</property>
<binding>
<command>dialog-apply</command>
<object-name>replay-duration-act</object-name>
</binding>
</checkbox>
<input>
<name>replay-duration</name>
<pref-width>40</pref-width>
<color>
<red>0.5</red>
<green>0.5</green>
<blue>0.5</blue>
<alpha type="float">0.8</alpha>
</color>
<property>/sim/replay/duration</property>
<binding>
<command>dialog-apply</command>
<object-name>replay-duration</object-name>
</binding>
</input>
<text>
<label>seconds</label>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
</text>
<empty><pref-width>40</pref-width></empty>
<text>
<label>Time: 99:99:99.9</label>
<format>Time: %s</format>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
<live>true</live>
<property>/sim/replay/time-str</property>
</text>
<empty><pref-width>10</pref-width></empty>
<text>
<label>Size: 999.9MB</label>
<format>Size: %.1fMB</format>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
<property>/sim/replay/buffer-size-mbyte</property>
</text>
<empty><pref-width>40</pref-width></empty>
<text>
<label>Speed:</label>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
</text>
<button>
<legend><![CDATA[-]]></legend>
<pref-width>20</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.speedup(-1);</script>
</binding>
</button>
<text>
<label>1/16x</label>
<pref-width>28</pref-width>
<format>%s</format>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
<live>true</live>
<property>/sim/gui/dialogs/replay/time-factor</property>
</text>
<button>
<legend><![CDATA[+]]></legend>
<pref-width>20</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.speedup(1);</script>
</binding>
</button>
<empty><stretch>1</stretch></empty>
<button>
<legend>Hide</legend>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<pref-width>40</pref-width>
<binding>
<command>nasal</command>
<script><![CDATA[
setprop("/sim/messages/copilot", "Replay active. 'Esc' to stop. 'Ctrl-R' to show replay controls.");
]]></script>
</binding>
<binding>
<command>dialog-close</command>
</binding>
</button>
</group>
<group>
<layout>hbox</layout>
<halign>center</halign>
<button>
<legend><![CDATA[<<]]></legend>
<pref-width>30</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.replaySkip(-30);</script>
</binding>
</button>
<button>
<legend><![CDATA[<]]></legend>
<pref-width>30</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.replaySkip(-5);</script>
</binding>
</button>
<text>
<label>0</label>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
<format>%8s</format>
<halign>right</halign>
<live>true</live>
</text>
<slider>
<name>replay-time-slider</name>
<border>0</border>
<color>
<red>0.4</red>
<green>0.4</green>
<blue>0.4</blue>
<alpha>1</alpha>
</color>
<halign>left</halign>
<pref-width>350</pref-width>
<min>0</min><!-- property is updated on "dialog open" -->
<max>1.0</max><!-- property is updated on "dialog open" -->
<property>/sim/replay/time-offset</property>
<live>true</live>
<binding>
<command>dialog-apply</command>
<object-name>replay-time-slider</object-name>
</binding>
</slider>
<text>
<label>9:99:99</label>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
<format>%.1f</format>
<halign>left</halign>
<live>true</live>
<property>/sim/replay/begin-end-duration</property>
</text>
<button>
<legend><![CDATA[>]]></legend>
<pref-width>30</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.replaySkip(5);</script>
</binding>
</button>
<button>
<legend><![CDATA[>>]]></legend>
<pref-width>30</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.replaySkip(30);</script>
</binding>
</button>
</group>
<group>
<layout>hbox</layout>
<halign>fill</halign>
<stretch>true</stretch>
<default-padding>3</default-padding>
<empty><pref-width>26</pref-width></empty>
<button>
<legend>Pause</legend>
<default>true</default>
<border>2</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<property>/sim/freeze/master</property>
<live>true</live>
<pref-width>70</pref-width>
<binding>
<command>property-toggle</command>
<property>/sim/freeze/clock</property>
</binding>
<binding>
<command>property-toggle</command>
<property>/sim/freeze/master</property>
</binding>
</button>
<empty><pref-width>80</pref-width></empty>
<button>
<name>mute</name>
<legend>Mute</legend>
<border>2</border>
<pref-width>55</pref-width>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<halign>left</halign>
<property>/sim/replay/mute</property>
<live>true</live>
<binding>
<command>nasal</command>
<script><![CDATA[
var mute = !getprop("/sim/replay/mute");
setprop("/sim/replay/mute",mute);
setprop("/sim/sound/enabled",!mute);
]]></script>
</binding>
</button>
<combo>
<name>view-selector</name>
<halign>left</halign>
<pref-width>150</pref-width>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<color-highlight>
<red type="float">0.6</red>
<green type="float">0.6</green>
<blue type="float">0.6</blue>
<alpha type="float">0.8</alpha>
</color-highlight>
<live>true</live>
<property>/sim/replay/view-name</property>
<binding>
<command>dialog-apply</command>
<object-name>view-selector</object-name>
</binding>
<binding>
<command>nasal</command>
<script>
var index = view.indexof(getprop("/sim/replay/view-name"));
setprop("/sim/current-view/view-number", index);
</script>
</binding>
</combo>
<empty><pref-width>30</pref-width></empty>
<!-- Future features...
<empty><pref-width>10</pref-width></empty>
<button>
<legend>Save</legend>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<pref-width>43</pref-width>
<binding>
<command>nasal</command>
<script>gui.popupTip("Not implemented yet. Comming soon.");</script>
</binding>
</button>
<button>
<legend>Load</legend>
<border>1</border>
<enable>0</enable>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<pref-width>43</pref-width>
<binding>
<command>nasal</command>
<script>gui.popupTip("Not implemented yet. Comming soon.");</script>
</binding>
</button>
-->
<button>
<legend>My Controls!</legend>
<border>1</border>
<color>
<red>1</red>
<green>0.3</green>
<blue>0.3</blue>
<alpha>0.8</alpha>
</color>
<pref-width>90</pref-width>
<binding>
<command>property-assign</command>
<property>/sim/freeze/replay-state</property>
<value type="int">3</value>
</binding>
<binding>
<command>property-assign</command>
<property>/sim/replay/disable</property>
<value type="bool">true</value>
</binding>
<binding>
<command>dialog-close</command>
</binding>
</button>
<button>
<legend>End Replay</legend>
<key>Esc</key>
<border>1</border>
<pref-width>90</pref-width>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>property-assign</command>
<property>/sim/replay/disable</property>
<value type="bool">true</value>
</binding>
<binding>
<command>dialog-close</command>
</binding>
</button>
</group>
</PropertyList>