6#include <simgear/misc/sg_path.hxx>
13#include <QGuiApplication>
20 QDataStream ds(&device);
23 for (
int i=0;
i < count; ++
i) {
35 QDataStream ds(&device);
38 Q_FOREACH(QString key, map.keys()) {
39 ds << key << map.value(key);
67 const auto extraArgs = extraArgNames();
69 std::for_each(m_values.begin(), m_values.end(),
72 const auto name = arg.arg.toStdString();
73 if (arg.origin == Launcher) {
74 auto it = extraArgs.find(name);
75 if (it != extraArgs.end()) {
83std::set<std::string> LaunchConfig::extraArgNames()
const
86 std::set<std::string> r;
87 for (
auto arg : m_values) {
89 if (arg.arg ==
"prop")
continue;
92 if (arg.arg ==
"fg-scenery")
98 r.insert(arg.arg.toStdString());
105 m_values.push_back(
Arg(
name, value, origin));
115 m_values.push_back(
Arg(
"prop", path +
"=" + value.toString(), origin));
120 m_values.push_back(
Arg((value ?
"enable-" :
"disable-") +
name,
"",
Launcher));
127 if (!commandLineOpts.empty()) {
128 html += tr(
"<p>Options passed on the command line:</p>\n");
130 for (
auto opt : commandLineOpts) {
131 html += QString(
"<li>--") + QString::fromStdString(opt) +
"</li>\n";
139 const auto extraArgs = extraArgNames();
141 html += tr(
"<p>Options set in the launcher:</p>\n");
144 auto it = extraArgs.find(arg.arg.toStdString());
146 bool strikeThrough = (it != extraArgs.end());
150 if (arg.value.isEmpty()) {
151 html += QString(
"--") + arg.arg;
152 }
else if (arg.arg ==
"prop") {
153 html += QString(
"--") + arg.arg +
":" + arg.value;
155 html += QString(
"--") + arg.arg +
"=" + arg.value;
158 html += tr(
" (will be skipped due to being specified as an additional argument)") +
"</i> ";
164 html += tr(
"<p>Options set as additional arguments:</p>\n");
167 if (arg.value.isEmpty()) {
168 html += QString(
"<li>--") + arg.arg +
"</li>\n";
169 }
else if (arg.arg ==
"prop") {
170 html += QString(
"<li>--") + arg.arg +
":" + arg.value +
"</li>\n";
172 html += QString(
"<li>--") + arg.arg +
"=" + arg.value +
"</li>\n";
182 if (a.
value.isEmpty()) {
183 return "--" + a.
arg +
" ";
184 }
else if (a.
arg ==
"prop") {
185 return "--" + a.
arg +
":" + a.
value +
" ";
187 return "--" + a.
arg +
"=" + a.
value +
" ";
196 r +=
"--" + QString::fromStdString(opt) +
" ";
201 const auto extraArgs = extraArgNames();
204 auto it = extraArgs.find(arg.arg.toStdString());
205 if (it != extraArgs.end()) {
216 QClipboard *clipboard = QGuiApplication::clipboard();
217 clipboard->setText(r);
224 m_loadSaveSettings.reset(
new QSettings);
226 m_loadSaveSettings->sync();
227 m_loadSaveSettings.reset();
236 m_loadSaveSettings.reset(
new QSettings);
239 m_loadSaveSettings.reset();
247 m_loadSaveSettings.reset();
258 m_loadSaveSettings.reset();
264 if (!m_loadSaveSettings) {
268 m_loadSaveSettings.reset(
new QSettings);
271 m_loadSaveSettings->beginGroup(group);
272 auto v = m_loadSaveSettings->value(key, defaultValue);
273 bool convertedOk = v.convert(
static_cast<int>(defaultValue.type()));
275 qWarning() <<
"type forcing on loaded value failed:" << key << v << v.typeName() << defaultValue;
283 Q_ASSERT(m_loadSaveSettings);
284 m_loadSaveSettings->beginGroup(group);
286 m_loadSaveSettings->setValue(key, var);
287 m_loadSaveSettings->endGroup();
312 std::vector<Arg> result;
313 std::copy_if(m_values.begin(), m_values.end(), std::back_inserter(result), [](
const Arg& a)
314 { return a.origin == Launcher; });
320 std::vector<Arg> result;
321 std::copy_if(m_values.begin(), m_values.end(), std::back_inserter(result), [](
const Arg& a)
322 { return a.origin == ExtraArgs; });
bool options(int, char **)
static bool static_enableDownloadDirUI
static bool binaryReadFunc(QIODevice &device, QSettings::SettingsMap &map)
static bool binaryWriteFunc(QIODevice &device, const QSettings::SettingsMap &map)
static QSettings::Format static_binaryFormat
static QString formatArgForClipboard(const LaunchConfig::Arg &a)
Q_INVOKABLE void setValueForKey(QString group, QString key, QVariant var)
Q_INVOKABLE QString htmlForCommandLine()
QString defaultDownloadDir
std::vector< Arg > values() const
Q_INVOKABLE bool saveConfigToFile(QString path)
static void setEnableDownloadDirUI(bool enableDownloadDirUI)
std::vector< Arg > valuesFromExtraArgs() const
std::vector< Arg > valuesFromLauncher() const
Q_INVOKABLE void setEnableDisableOption(QString name, bool value)
LaunchConfig(QObject *parent=nullptr)
Q_INVOKABLE void setArg(QString name, QString value=QString(), Origin origin=Launcher)
Q_INVOKABLE void copyCommandLine()
Q_INVOKABLE void setProperty(QString path, QVariant value, Origin origin=Launcher)
Q_INVOKABLE bool loadConfigFromFile(QString path)
void applyToOptions() const
Q_INVOKABLE QVariant getValueForKey(QString group, QString key, QVariant defaultValue=QVariant()) const
string_list extractOptions() const
extractOptions - extract the currently set options as a string array.
static Options * sharedInstance()
std::vector< std::string > string_list
SGPath defaultDownloadDir()
return the default platform dependant download directory.