Initial MP support in the launcher.
This commit is contained in:
parent
7e607b8403
commit
9650cf4e6a
3 changed files with 175 additions and 4 deletions
|
@ -269,7 +269,7 @@
|
|||
<property name="bottomMargin">
|
||||
<number>8</number>
|
||||
</property>
|
||||
<item row="8" column="0">
|
||||
<item row="9" column="0">
|
||||
<widget class="QPushButton" name="restoreDefaultsButton">
|
||||
<property name="text">
|
||||
<string>Restore Defaults...</string>
|
||||
|
@ -452,7 +452,7 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="2">
|
||||
<item row="8" column="0" colspan="2">
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Additional options</string>
|
||||
|
@ -480,7 +480,7 @@
|
|||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<item row="7" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
|
@ -493,6 +493,64 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<widget class="QGroupBox" name="mpBox">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>100</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Multi-player</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout" columnstretch="1,2,0">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
<string>Callsign:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_10">
|
||||
<property name="text">
|
||||
<string>Server:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="mpCallsign">
|
||||
<property name="maxLength">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>G-FGFS</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="text">
|
||||
<string>(Ten characters maximum)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="2">
|
||||
<widget class="QComboBox" name="mpServerCombo"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
|
|
|
@ -67,6 +67,7 @@
|
|||
#include "PathsDialog.hxx"
|
||||
|
||||
#include <Main/globals.hxx>
|
||||
#include <Main/fg_props.hxx>
|
||||
#include <Navaids/NavDataCache.hxx>
|
||||
#include <Navaids/navrecord.hxx>
|
||||
#include <Navaids/SHPParser.hxx>
|
||||
|
@ -75,6 +76,7 @@
|
|||
#include <Main/fg_init.hxx>
|
||||
#include <Viewer/WindowBuilder.hxx>
|
||||
#include <Network/HTTPClient.hxx>
|
||||
#include <Network/RemoteXMLRequest.hxx>
|
||||
|
||||
using namespace flightgear;
|
||||
using namespace simgear::pkg;
|
||||
|
@ -495,7 +497,8 @@ QtLauncher::QtLauncher() :
|
|||
QDialog(),
|
||||
m_ui(NULL),
|
||||
m_subsystemIdleTimer(NULL),
|
||||
m_inAppMode(false)
|
||||
m_inAppMode(false),
|
||||
m_doRestoreMPServer(false)
|
||||
{
|
||||
m_ui.reset(new Ui::Launcher);
|
||||
m_ui->setupUi(this);
|
||||
|
@ -627,6 +630,8 @@ QtLauncher::QtLauncher() :
|
|||
|
||||
checkOfficialCatalogMessage();
|
||||
restoreSettings();
|
||||
|
||||
onRefreshMPServers();
|
||||
}
|
||||
|
||||
QtLauncher::~QtLauncher()
|
||||
|
@ -719,6 +724,10 @@ void QtLauncher::restoreSettings()
|
|||
maybeRestoreAircraftSelection();
|
||||
|
||||
m_ui->commandLineArgs->setPlainText(settings.value("additional-args").toString());
|
||||
|
||||
m_ui->mpCallsign->setText(settings.value("mp-callsign").toString());
|
||||
// don't restore MP server here, we do it after a refresh
|
||||
m_doRestoreMPServer = true;
|
||||
}
|
||||
|
||||
void QtLauncher::delayedAircraftModelReset()
|
||||
|
@ -757,6 +766,9 @@ void QtLauncher::saveSettings()
|
|||
settings.setValue("additional-args", m_ui->commandLineArgs->toPlainText());
|
||||
|
||||
m_ui->location->saveSettings();
|
||||
|
||||
settings.setValue("mp-callsign", m_ui->mpCallsign->text());
|
||||
settings.setValue("mp-server", m_ui->mpServerCombo->currentData());
|
||||
}
|
||||
|
||||
void QtLauncher::setEnableDisableOptionFromCheckbox(QCheckBox* cbox, QString name) const
|
||||
|
@ -831,6 +843,14 @@ void QtLauncher::onRun()
|
|||
m_recentAircraft.pop_back();
|
||||
}
|
||||
|
||||
if (m_ui->mpBox->isChecked()) {
|
||||
opt->addOption("callsign", m_ui->mpCallsign->text().toStdString());
|
||||
QString host = m_ui->mpServerCombo->currentData().toString();
|
||||
globals->get_props()->setStringValue("/sim/multiplay/txhost", host.toStdString());
|
||||
int port = findMPServerPort(host.toStdString());
|
||||
globals->get_props()->setIntValue("/sim/multiplay/txport", port);
|
||||
}
|
||||
|
||||
m_ui->location->setLocationOptions();
|
||||
|
||||
// time of day
|
||||
|
@ -1257,6 +1277,86 @@ void QtLauncher::onOfficialCatalogMessageLink(QUrl link)
|
|||
checkOfficialCatalogMessage();
|
||||
}
|
||||
|
||||
void QtLauncher::onRefreshMPServers()
|
||||
{
|
||||
if (m_mpServerRequest.get()) {
|
||||
return; // in-progress
|
||||
}
|
||||
|
||||
string url(fgGetString("/sim/multiplay/serverlist-url",
|
||||
"http://liveries.flightgear.org/mpstatus/mpservers.xml"));
|
||||
|
||||
if (url.empty()) {
|
||||
SG_LOG(SG_IO, SG_ALERT, "do_multiplayer.refreshserverlist: no URL given");
|
||||
return;
|
||||
}
|
||||
|
||||
SGPropertyNode *targetnode = fgGetNode("/sim/multiplay/server-list", true);
|
||||
m_mpServerRequest.reset(new RemoteXMLRequest(url, targetnode));
|
||||
m_mpServerRequest->done(this, &QtLauncher::onRefreshMPServersDone);
|
||||
m_mpServerRequest->fail(this, &QtLauncher::onRefreshMPServersFailed);
|
||||
globals->get_subsystem<FGHTTPClient>()->makeRequest(m_mpServerRequest);
|
||||
}
|
||||
|
||||
void QtLauncher::onRefreshMPServersDone(simgear::HTTP::Request*)
|
||||
{
|
||||
// parse the properties
|
||||
SGPropertyNode *targetnode = fgGetNode("/sim/multiplay/server-list", true);
|
||||
|
||||
|
||||
m_ui->mpServerCombo->clear();
|
||||
|
||||
for (int i=0; i<targetnode->nChildren(); ++i) {
|
||||
SGPropertyNode* c = targetnode->getChild(i);
|
||||
if (c->getName() != std::string("server")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
QString name = QString::fromStdString(c->getStringValue("name"));
|
||||
QString loc = QString::fromStdString(c->getStringValue("location"));
|
||||
QString host = QString::fromStdString(c->getStringValue("hostname"));
|
||||
m_ui->mpServerCombo->addItem(tr("%1 - %2").arg(name,loc), host);
|
||||
}
|
||||
|
||||
if (m_doRestoreMPServer) {
|
||||
QSettings settings;
|
||||
int index = m_ui->mpServerCombo->findData(settings.value("mp-server"));
|
||||
if (index >= 0) {
|
||||
m_ui->mpServerCombo->setCurrentIndex(index);
|
||||
}
|
||||
}
|
||||
|
||||
m_mpServerRequest.clear();
|
||||
}
|
||||
|
||||
void QtLauncher::onRefreshMPServersFailed(simgear::HTTP::Request*)
|
||||
{
|
||||
qWarning() << "refreshing MP servers failed:" << QString::fromStdString(m_mpServerRequest->responseReason());
|
||||
m_mpServerRequest.clear();
|
||||
}
|
||||
|
||||
void QtLauncher::onMPServerEdited(QString text)
|
||||
{
|
||||
// parse as server hostname + optional URL
|
||||
}
|
||||
|
||||
int QtLauncher::findMPServerPort(const std::string& host)
|
||||
{
|
||||
SGPropertyNode *targetnode = fgGetNode("/sim/multiplay/server-list", true);
|
||||
for (int i=0; i<targetnode->nChildren(); ++i) {
|
||||
SGPropertyNode* c = targetnode->getChild(i);
|
||||
if (c->getName() != std::string("server")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (c->getStringValue("hostname") == host) {
|
||||
return c->getIntValue("port");
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
simgear::pkg::PackageRef QtLauncher::packageForAircraftURI(QUrl uri) const
|
||||
{
|
||||
if (uri.scheme() != "package") {
|
||||
|
|
|
@ -41,6 +41,7 @@ class AircraftProxyModel;
|
|||
class AircraftItemModel;
|
||||
class QCheckBox;
|
||||
class CatalogListModel;
|
||||
class RemoteXMLRequest;
|
||||
|
||||
class QtLauncher : public QDialog
|
||||
{
|
||||
|
@ -96,6 +97,11 @@ private slots:
|
|||
void onRestoreDefaults();
|
||||
|
||||
void onDownloadDirChanged();
|
||||
|
||||
void onRefreshMPServers();
|
||||
void onMPServerEdited(QString text);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
|
@ -118,6 +124,10 @@ private:
|
|||
void checkOfficialCatalogMessage();
|
||||
void onOfficialCatalogMessageLink(QUrl link);
|
||||
|
||||
void onRefreshMPServersDone(simgear::HTTP::Request*);
|
||||
void onRefreshMPServersFailed(simgear::HTTP::Request*);
|
||||
int findMPServerPort(const std::string& host);
|
||||
|
||||
// need to wait after a model reset before restoring selection and
|
||||
// scrolling, to give the view time it seems.
|
||||
void delayedAircraftModelReset();
|
||||
|
@ -133,6 +143,9 @@ private:
|
|||
bool m_inAppMode;
|
||||
|
||||
int m_ratingFilters[4];
|
||||
|
||||
SGSharedPtr<RemoteXMLRequest> m_mpServerRequest;
|
||||
bool m_doRestoreMPServer;
|
||||
};
|
||||
|
||||
#endif // of FG_QTLAUNCHER_PRIVATE_HXX
|
||||
|
|
Loading…
Reference in a new issue