FGCom: add dialog for FGCom
Update server list Server list is now dynamic
This commit is contained in:
parent
6d850081e0
commit
9ca7b020d0
4 changed files with 424 additions and 1 deletions
|
@ -148,6 +148,7 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
|
||||||
menuEnable("rembrandt-buffers-choice", getprop("/sim/rendering/rembrandt/enabled"));
|
menuEnable("rembrandt-buffers-choice", getprop("/sim/rendering/rembrandt/enabled"));
|
||||||
menuEnable("stereoscopic-options", !getprop("/sim/rendering/rembrandt/enabled"));
|
menuEnable("stereoscopic-options", !getprop("/sim/rendering/rembrandt/enabled"));
|
||||||
menuEnable("sound-config", getprop("/sim/sound/working"));
|
menuEnable("sound-config", getprop("/sim/sound/working"));
|
||||||
|
menuEnable("fgcom-settings", getprop("/sim/fgcom/enabled"));
|
||||||
|
|
||||||
# frame-per-second display
|
# frame-per-second display
|
||||||
var fps = props.globals.getNode("/sim/rendering/fps-display", 1);
|
var fps = props.globals.getNode("/sim/rendering/fps-display", 1);
|
||||||
|
|
|
@ -74,6 +74,7 @@
|
||||||
<!-- Multiplayer menu -->
|
<!-- Multiplayer menu -->
|
||||||
<multiplayer>Multiplayer</multiplayer>
|
<multiplayer>Multiplayer</multiplayer>
|
||||||
<mp-settings>Multiplayer Settings</mp-settings>
|
<mp-settings>Multiplayer Settings</mp-settings>
|
||||||
|
<fgcom-settings>FGCom Settings</fgcom-settings>
|
||||||
<mp-chat>Chat Dialog</mp-chat>
|
<mp-chat>Chat Dialog</mp-chat>
|
||||||
<mp-chat-menu>Chat Menu</mp-chat-menu>
|
<mp-chat-menu>Chat Menu</mp-chat-menu>
|
||||||
<mp-list>Pilot List</mp-list>
|
<mp-list>Pilot List</mp-list>
|
||||||
|
|
412
gui/dialogs/fgcom.xml
Normal file
412
gui/dialogs/fgcom.xml
Normal file
|
@ -0,0 +1,412 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<PropertyList>
|
||||||
|
<name>fgcom</name>
|
||||||
|
<layout>vbox</layout>
|
||||||
|
<resizable>false</resizable>
|
||||||
|
|
||||||
|
<nasal>
|
||||||
|
<open><![CDATA[
|
||||||
|
var autofill = func {
|
||||||
|
if ((getprop("/sim/fgcom/selected-server") == nil) or
|
||||||
|
(getprop("/sim/fgcom/selected-server") == "" ) ){
|
||||||
|
var tx = getprop("/sim/fgcom/server");
|
||||||
|
var dlg = cmdarg();
|
||||||
|
#var servers = cmdarg().getChildren("group")[5].getChildren("combo")[0].getChildren("value");
|
||||||
|
var servers = props.globals.getNode("/sim/gui/dialogs/multiplay/fgcom-servers", 1);
|
||||||
|
foreach (var s; servers.getChildren("value")) {
|
||||||
|
var server = s.getValue();
|
||||||
|
var host = split(" ", server)[0];
|
||||||
|
if (host == tx) {
|
||||||
|
setprop("/sim/fgcom/selected-server", server);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var servers = props.globals.getNode("/sim/gui/dialogs/multiplay/fgcom-servers", 1);
|
||||||
|
var updateServers = func {
|
||||||
|
servers.removeChildren("value");
|
||||||
|
# get the results list from the server
|
||||||
|
var serverlist = props.globals.getNode("/sim/multiplay/server-list", 1);
|
||||||
|
|
||||||
|
var i=0;
|
||||||
|
foreach (var s; serverlist.getChildren("fgcom")) {
|
||||||
|
|
||||||
|
if (!s.getNode("online").getBoolValue()) {
|
||||||
|
continue; # skip offline servers
|
||||||
|
}
|
||||||
|
|
||||||
|
# label is name and location, for the moment
|
||||||
|
# should we include the number of users? or wait until we
|
||||||
|
# have a better UI toolkit?
|
||||||
|
var nm = s.getNode("hostname").getValue() ~ " - " ~ s.getNode("location").getValue();
|
||||||
|
servers.getNode("value[" ~ i ~ "]", 1).setValue(nm);
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
autofill();
|
||||||
|
gui.dialog_update("fgcom", "server");
|
||||||
|
}
|
||||||
|
|
||||||
|
var static_serverList = [
|
||||||
|
['fgcom.flightgear.org', 'Avignon, France'],
|
||||||
|
['delta384.server4you.de', 'Unknown']
|
||||||
|
];
|
||||||
|
|
||||||
|
var updateServersFailed = func {
|
||||||
|
debug.dump("Failed to retrieve server list!");
|
||||||
|
|
||||||
|
servers.removeChildren("value");
|
||||||
|
var i=0;
|
||||||
|
foreach (var s; static_serverList) {
|
||||||
|
# create the node the PUI combo
|
||||||
|
var nm = s[0] ~ " - " ~ s[1];
|
||||||
|
servers.getNode("value[" ~ i ~ "]", 1).setValue(nm);
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
autofill();
|
||||||
|
gui.dialog_update("fgcom", "server");
|
||||||
|
}
|
||||||
|
|
||||||
|
# listen for results arriving
|
||||||
|
setlistener("/sim/multiplay/got-servers", updateServers);
|
||||||
|
setlistener("/sim/multiplay/get-servers-failure", updateServersFailed);
|
||||||
|
|
||||||
|
fgcommand("xmlhttprequest", props.Node.new({
|
||||||
|
"url" : "http://liveries.flightgear.org/mpstatus/mpservers.xml",
|
||||||
|
"targetnode" : "/sim/multiplay/server-list",
|
||||||
|
"complete" : "/sim/multiplay/got-servers",
|
||||||
|
"failure" : "/sim/multiplay/get-servers-failure"
|
||||||
|
}));
|
||||||
|
]]>
|
||||||
|
</open>
|
||||||
|
<close>
|
||||||
|
</close>
|
||||||
|
</nasal>
|
||||||
|
|
||||||
|
<!-- titlebar -->
|
||||||
|
<group>
|
||||||
|
<layout>hbox</layout>
|
||||||
|
<empty>
|
||||||
|
<stretch>1</stretch>
|
||||||
|
</empty>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<label>FGCom Settings</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<empty>
|
||||||
|
<stretch>1</stretch>
|
||||||
|
</empty>
|
||||||
|
|
||||||
|
<button>
|
||||||
|
<pref-width>16</pref-width>
|
||||||
|
<pref-height>16</pref-height>
|
||||||
|
<legend></legend>
|
||||||
|
<keynum>27</keynum>
|
||||||
|
<border>2</border>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-close</command>
|
||||||
|
</binding>
|
||||||
|
</button>
|
||||||
|
</group>
|
||||||
|
<hrule/>
|
||||||
|
|
||||||
|
<!-- main dialog area -->
|
||||||
|
<group>
|
||||||
|
<layout>table</layout>
|
||||||
|
<halign>left</halign>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<row>0</row>
|
||||||
|
<col>0</col>
|
||||||
|
<label>Enabled:</label>
|
||||||
|
<halign>right</halign>
|
||||||
|
</text>
|
||||||
|
<checkbox>
|
||||||
|
<row>0</row>
|
||||||
|
<col>1</col>
|
||||||
|
<colspan>2</colspan>
|
||||||
|
<halign>left</halign>
|
||||||
|
<name>enabled</name>
|
||||||
|
<label></label>
|
||||||
|
<property>/sim/fgcom/enabled</property>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>enabled</object-name>
|
||||||
|
</binding>
|
||||||
|
</checkbox>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<row>2</row>
|
||||||
|
<col>0</col>
|
||||||
|
<label>Mic Volume:</label>
|
||||||
|
<halign>right</halign>
|
||||||
|
</text>
|
||||||
|
<slider>
|
||||||
|
<row>2</row>
|
||||||
|
<col>1</col>
|
||||||
|
<colspan>2</colspan>
|
||||||
|
<halign>left</halign>
|
||||||
|
<name>mic-vol</name>
|
||||||
|
<label></label>
|
||||||
|
<min>0</min>
|
||||||
|
<max>1.0</max>
|
||||||
|
<step>0.1</step>
|
||||||
|
<property>/sim/fgcom/mic-level</property>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>mic-vol</object-name>
|
||||||
|
</binding>
|
||||||
|
</slider>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<row>3</row>
|
||||||
|
<col>0</col>
|
||||||
|
<label>Speaker Volume:</label>
|
||||||
|
<halign>right</halign>
|
||||||
|
</text>
|
||||||
|
<slider>
|
||||||
|
<row>3</row>
|
||||||
|
<col>1</col>
|
||||||
|
<colspan>2</colspan>
|
||||||
|
<halign>left</halign>
|
||||||
|
<name>speaker-vol</name>
|
||||||
|
<label></label>
|
||||||
|
<min>0</min>
|
||||||
|
<max>1.0</max>
|
||||||
|
<step>0.1</step>
|
||||||
|
<property>/sim/fgcom/speaker-level</property>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>speaker-vol</object-name>
|
||||||
|
</binding>
|
||||||
|
</slider>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<hrule/>
|
||||||
|
|
||||||
|
<!-- registration -->
|
||||||
|
<group>
|
||||||
|
<layout>hbox</layout>
|
||||||
|
<empty>
|
||||||
|
<stretch>1</stretch>
|
||||||
|
</empty>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<label>Registration</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<empty>
|
||||||
|
<stretch>1</stretch>
|
||||||
|
</empty>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<group>
|
||||||
|
<layout>table</layout>
|
||||||
|
<halign>left</halign>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<row>0</row>
|
||||||
|
<col>0</col>
|
||||||
|
<halign>right</halign>
|
||||||
|
<label>Enabled:</label>
|
||||||
|
<enable>
|
||||||
|
<equals>
|
||||||
|
<property>/sim/fgcom/enabled</property>
|
||||||
|
<value>0</value>
|
||||||
|
</equals>
|
||||||
|
</enable>
|
||||||
|
</text>
|
||||||
|
<checkbox>
|
||||||
|
<row>0</row>
|
||||||
|
<col>1</col>
|
||||||
|
<colspan>2</colspan>
|
||||||
|
<halign>left</halign>
|
||||||
|
<name>reg-enabled</name>
|
||||||
|
<label></label>
|
||||||
|
<property>/sim/fgcom/register/enabled</property>
|
||||||
|
<enable>
|
||||||
|
<equals>
|
||||||
|
<property>/sim/fgcom/enabled</property>
|
||||||
|
<value>0</value>
|
||||||
|
</equals>
|
||||||
|
</enable>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>reg-enabled</object-name>
|
||||||
|
</binding>
|
||||||
|
</checkbox>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<row>1</row>
|
||||||
|
<col>0</col>
|
||||||
|
<halign>right</halign>
|
||||||
|
<label>Username:</label>
|
||||||
|
<enable>
|
||||||
|
<equals>
|
||||||
|
<property>/sim/fgcom/enabled</property>
|
||||||
|
<value>0</value>
|
||||||
|
</equals>
|
||||||
|
</enable>
|
||||||
|
</text>
|
||||||
|
<input>
|
||||||
|
<name>username</name>
|
||||||
|
<row>1</row>
|
||||||
|
<col>1</col>
|
||||||
|
<colspan>2</colspan>
|
||||||
|
<halign>left</halign>
|
||||||
|
<pref-width>125</pref-width>
|
||||||
|
<editable>true</editable>
|
||||||
|
<property>/sim/fgcom/register/username</property>
|
||||||
|
<enable>
|
||||||
|
<equals>
|
||||||
|
<property>/sim/fgcom/enabled</property>
|
||||||
|
<value>0</value>
|
||||||
|
</equals>
|
||||||
|
</enable>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>username</object-name>
|
||||||
|
</binding>
|
||||||
|
</input>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<row>2</row>
|
||||||
|
<col>0</col>
|
||||||
|
<halign>right</halign>
|
||||||
|
<label>Password:</label>
|
||||||
|
<enable>
|
||||||
|
<equals>
|
||||||
|
<property>/sim/fgcom/enabled</property>
|
||||||
|
<value>0</value>
|
||||||
|
</equals>
|
||||||
|
</enable>
|
||||||
|
</text>
|
||||||
|
<input>
|
||||||
|
<name>password</name>
|
||||||
|
<row>2</row>
|
||||||
|
<col>1</col>
|
||||||
|
<colspan>2</colspan>
|
||||||
|
<halign>left</halign>
|
||||||
|
<pref-width>125</pref-width>
|
||||||
|
<editable>true</editable>
|
||||||
|
<property>/sim/fgcom/register/password</property>
|
||||||
|
<enable>
|
||||||
|
<equals>
|
||||||
|
<property>/sim/fgcom/enabled</property>
|
||||||
|
<value>0</value>
|
||||||
|
</equals>
|
||||||
|
</enable>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>password</object-name>
|
||||||
|
</binding>
|
||||||
|
</input>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<hrule/>
|
||||||
|
|
||||||
|
<!-- server -->
|
||||||
|
<group>
|
||||||
|
<layout>hbox</layout>
|
||||||
|
<empty>
|
||||||
|
<stretch>1</stretch>
|
||||||
|
</empty>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<label>Server</label>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<empty>
|
||||||
|
<stretch>1</stretch>
|
||||||
|
</empty>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<group>
|
||||||
|
<layout>table</layout>
|
||||||
|
<halign>left</halign>
|
||||||
|
|
||||||
|
<text>
|
||||||
|
<row>0</row>
|
||||||
|
<col>0</col>
|
||||||
|
<label>Test:</label>
|
||||||
|
<halign>right</halign>
|
||||||
|
</text>
|
||||||
|
<checkbox>
|
||||||
|
<row>0</row>
|
||||||
|
<col>1</col>
|
||||||
|
<colspan>2</colspan>
|
||||||
|
<halign>left</halign>
|
||||||
|
<name>test</name>
|
||||||
|
<label></label>
|
||||||
|
<property>/sim/fgcom/test</property>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>test</object-name>
|
||||||
|
</binding>
|
||||||
|
</checkbox>
|
||||||
|
|
||||||
|
<combo>
|
||||||
|
<name>server</name>
|
||||||
|
<row>1</row>
|
||||||
|
<col>0</col>
|
||||||
|
<colspan>6</colspan>
|
||||||
|
<pref-width>275</pref-width>
|
||||||
|
<editable>false</editable>
|
||||||
|
<property>/sim/fgcom/selected-server</property>
|
||||||
|
<properties>/sim/gui/dialogs/multiplay/fgcom-servers</properties>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>server</object-name>
|
||||||
|
</binding>
|
||||||
|
<binding>
|
||||||
|
<command>nasal</command>
|
||||||
|
<script>
|
||||||
|
<![CDATA[
|
||||||
|
setprop("/sim/fgcom/enabled", 0);
|
||||||
|
|
||||||
|
var server = getprop("/sim/fgcom/selected-server");
|
||||||
|
server = split(" ", server)[0];
|
||||||
|
setprop("/sim/fgcom/server", server);
|
||||||
|
|
||||||
|
setprop("/sim/fgcom/enabled", 1);
|
||||||
|
]]>
|
||||||
|
</script>
|
||||||
|
</binding>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-apply</command>
|
||||||
|
<object-name>test</object-name>
|
||||||
|
</binding>
|
||||||
|
</combo>
|
||||||
|
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<!-- button area -->
|
||||||
|
|
||||||
|
<hrule/>
|
||||||
|
<group>
|
||||||
|
<layout>hbox</layout>
|
||||||
|
<default-padding>10</default-padding>
|
||||||
|
<empty>
|
||||||
|
<stretch>true</stretch>
|
||||||
|
</empty>
|
||||||
|
|
||||||
|
<button>
|
||||||
|
<legend>Close</legend>
|
||||||
|
<default>true</default>
|
||||||
|
<equal>true</equal>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-close</command>
|
||||||
|
</binding>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<empty>
|
||||||
|
<stretch>true</stretch>
|
||||||
|
</empty>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
</PropertyList>
|
||||||
|
|
|
@ -446,6 +446,15 @@
|
||||||
</binding>
|
</binding>
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<name>fgcom-settings</name>
|
||||||
|
<binding>
|
||||||
|
<command>dialog-show</command>
|
||||||
|
<dialog-name>fgcom</dialog-name>
|
||||||
|
</binding>
|
||||||
|
<enabled>false</enabled>
|
||||||
|
</item>
|
||||||
|
|
||||||
<item>
|
<item>
|
||||||
<name>mp-chat</name>
|
<name>mp-chat</name>
|
||||||
<binding>
|
<binding>
|
||||||
|
|
Loading…
Reference in a new issue