Launcher: detect user-entered aircraft args
Avoid double-setting or conflicting aircraft arguments being passed: when the user enters an aircraft related argument manually, disable the launcher setting them.
This commit is contained in:
parent
85da09d5d5
commit
b76b6548a1
7 changed files with 47 additions and 5 deletions
|
@ -170,3 +170,10 @@ bool LauncherArgumentTokenizer::havePositionalArgs() const
|
||||||
{
|
{
|
||||||
return haveArgsIn(positionalArgs);
|
return haveArgsIn(positionalArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::set<std::string> aircraftArgs({"state", "aircraft", "aircraft-dir", "vehicle"});
|
||||||
|
|
||||||
|
bool LauncherArgumentTokenizer::haveAircraftArgs() const
|
||||||
|
{
|
||||||
|
return haveArgsIn(aircraftArgs);
|
||||||
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ class LauncherArgumentTokenizer : public QObject
|
||||||
Q_PROPERTY(bool valid READ isValid NOTIFY argStringChanged)
|
Q_PROPERTY(bool valid READ isValid NOTIFY argStringChanged)
|
||||||
Q_PROPERTY(bool havePositionalArgs READ havePositionalArgs NOTIFY argStringChanged)
|
Q_PROPERTY(bool havePositionalArgs READ havePositionalArgs NOTIFY argStringChanged)
|
||||||
Q_PROPERTY(bool haveUnsupportedArgs READ haveUnsupportedArgs NOTIFY argStringChanged)
|
Q_PROPERTY(bool haveUnsupportedArgs READ haveUnsupportedArgs NOTIFY argStringChanged)
|
||||||
|
Q_PROPERTY(bool haveAircraftArgs READ haveAircraftArgs NOTIFY argStringChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LauncherArgumentTokenizer();
|
LauncherArgumentTokenizer();
|
||||||
|
@ -43,6 +44,7 @@ public:
|
||||||
|
|
||||||
bool haveUnsupportedArgs() const;
|
bool haveUnsupportedArgs() const;
|
||||||
bool havePositionalArgs() const;
|
bool havePositionalArgs() const;
|
||||||
|
bool haveAircraftArgs() const;
|
||||||
public slots:
|
public slots:
|
||||||
void setArgString(QString argString);
|
void setArgString(QString argString);
|
||||||
|
|
||||||
|
|
|
@ -288,6 +288,9 @@ void LauncherController::saveSettings()
|
||||||
|
|
||||||
void LauncherController::collectAircraftArgs()
|
void LauncherController::collectAircraftArgs()
|
||||||
{
|
{
|
||||||
|
if (m_skipAircraftFromArgs)
|
||||||
|
return;
|
||||||
|
|
||||||
// aircraft
|
// aircraft
|
||||||
if (!m_selectedAircraft.isEmpty()) {
|
if (!m_selectedAircraft.isEmpty()) {
|
||||||
if (m_selectedAircraft.isLocalFile()) {
|
if (m_selectedAircraft.isLocalFile()) {
|
||||||
|
|
|
@ -96,6 +96,8 @@ class LauncherController : public QObject
|
||||||
Q_PROPERTY(int launchCount READ launchCount CONSTANT);
|
Q_PROPERTY(int launchCount READ launchCount CONSTANT);
|
||||||
Q_PROPERTY(int versionLaunchCount READ versionLaunchCount CONSTANT);
|
Q_PROPERTY(int versionLaunchCount READ versionLaunchCount CONSTANT);
|
||||||
|
|
||||||
|
// property to indicate if we're disabling the aircraft selection because the user entered it manuall
|
||||||
|
Q_PROPERTY(bool skipAircraftFromArgs MEMBER m_skipAircraftFromArgs NOTIFY skipAircraftFromArgsChanged)
|
||||||
public:
|
public:
|
||||||
explicit LauncherController(QObject *parent, QWindow* win);
|
explicit LauncherController(QObject *parent, QWindow* win);
|
||||||
|
|
||||||
|
@ -244,6 +246,7 @@ signals:
|
||||||
void installedAircraftCountChanged(int installedAircraftCount);
|
void installedAircraftCountChanged(int installedAircraftCount);
|
||||||
|
|
||||||
void didResetGettingStartedTips();
|
void didResetGettingStartedTips();
|
||||||
|
void skipAircraftFromArgsChanged();
|
||||||
public slots:
|
public slots:
|
||||||
void setSelectedAircraft(QUrl selectedAircraft);
|
void setSelectedAircraft(QUrl selectedAircraft);
|
||||||
|
|
||||||
|
@ -330,6 +333,7 @@ private:
|
||||||
int m_launchCount = 0;
|
int m_launchCount = 0;
|
||||||
int m_versionLaunchCount = 0;
|
int m_versionLaunchCount = 0;
|
||||||
bool m_flyRequested = false;
|
bool m_flyRequested = false;
|
||||||
|
bool m_skipAircraftFromArgs = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LAUNCHERCONTROLLER_HXX
|
#endif // LAUNCHERCONTROLLER_HXX
|
||||||
|
|
|
@ -64,6 +64,11 @@ Item {
|
||||||
onSkipFromArgsChanged: startupPagesModel.setProperty(2, "buttonDisabled", _location.skipFromArgs)
|
onSkipFromArgsChanged: startupPagesModel.setProperty(2, "buttonDisabled", _location.skipFromArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: _launcher
|
||||||
|
onSkipAircraftFromArgsChanged: startupPagesModel.setProperty(1, "buttonDisabled", _launcher.skipAircraftFromArgs)
|
||||||
|
}
|
||||||
|
|
||||||
state: "loader"
|
state: "loader"
|
||||||
states: [
|
states: [
|
||||||
State {
|
State {
|
||||||
|
|
|
@ -60,6 +60,15 @@ SettingControl {
|
||||||
"page (for example, airport or altitude) will be ignored.");
|
"page (for example, airport or altitude) will be ignored.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SettingDescription {
|
||||||
|
id: aircraftArgsText
|
||||||
|
enabled: root.enabled
|
||||||
|
visible: tokenizer.haveAircraftArgs
|
||||||
|
width: parent.width
|
||||||
|
text: qsTr("<b>Note:</b> you have entered arguments relating to the selected aircraft. " +
|
||||||
|
"To prevent problems caused by conflicting settings, the aircraft page will be ignored.");
|
||||||
|
}
|
||||||
|
|
||||||
PlainTextEditBox
|
PlainTextEditBox
|
||||||
{
|
{
|
||||||
id: edit
|
id: edit
|
||||||
|
@ -88,6 +97,12 @@ SettingControl {
|
||||||
value: tokenizer.havePositionalArgs
|
value: tokenizer.havePositionalArgs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binding {
|
||||||
|
target: _launcher
|
||||||
|
property: "skipAircraftFromArgs"
|
||||||
|
value: tokenizer.haveAircraftArgs
|
||||||
|
}
|
||||||
|
|
||||||
ArgumentTokenizer {
|
ArgumentTokenizer {
|
||||||
id: tokenizer
|
id: tokenizer
|
||||||
argString: edit.text
|
argString: edit.text
|
||||||
|
|
|
@ -155,9 +155,12 @@ Item {
|
||||||
}
|
}
|
||||||
|
|
||||||
ClickableText {
|
ClickableText {
|
||||||
text: _launcher.selectedAircraftInfo.name === "" ?
|
text: {
|
||||||
qsTr("No aircraft selected") : _launcher.selectedAircraftInfo.name
|
if (_launcher.skipAircraftFromArgs) return qsTr("<i>set from user arguments (in Settings)</i>");
|
||||||
enabled: _launcher.selectedAircraftInfo.name !== ""
|
if (_launcher.selectedAircraftInfo.name === "") return qsTr("No aircraft selected");
|
||||||
|
return _launcher.selectedAircraftInfo.name;
|
||||||
|
}
|
||||||
|
enabled: _launcher.selectedAircraftInfo.name !== "" && !_launcher.skipAircraftFromArgs
|
||||||
font.pixelSize: Style.headingFontPixelSize
|
font.pixelSize: Style.headingFontPixelSize
|
||||||
|
|
||||||
onClicked: root.showSelectedAircraft();
|
onClicked: root.showSelectedAircraft();
|
||||||
|
@ -166,7 +169,7 @@ Item {
|
||||||
HistoryPopup {
|
HistoryPopup {
|
||||||
id: aircraftHistoryPopup
|
id: aircraftHistoryPopup
|
||||||
model: _launcher.aircraftHistory
|
model: _launcher.aircraftHistory
|
||||||
enabled: !_launcher.aircraftHistory.isEmpty
|
enabled: !_launcher.aircraftHistory.isEmpty && !_launcher.skipAircraftFromArgs
|
||||||
onSelected: {
|
onSelected: {
|
||||||
_launcher.selectedAircraft = _launcher.aircraftHistory.uriAt(index)
|
_launcher.selectedAircraft = _launcher.aircraftHistory.uriAt(index)
|
||||||
}
|
}
|
||||||
|
@ -187,12 +190,14 @@ Item {
|
||||||
// empty space in next row (thumbnail, long aircraft description)
|
// empty space in next row (thumbnail, long aircraft description)
|
||||||
Item {
|
Item {
|
||||||
width: 1; height: 1
|
width: 1; height: 1
|
||||||
|
visible: aircraftDetailsRow.visible
|
||||||
}
|
}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: aircraftDetailsRow
|
id: aircraftDetailsRow
|
||||||
width: summaryGrid.middleColumnWidth
|
width: summaryGrid.middleColumnWidth
|
||||||
height: Math.max(thumbnail.height, aircraftDescriptionText.height)
|
height: Math.max(thumbnail.height, aircraftDescriptionText.height)
|
||||||
|
visible: !_launcher.skipAircraftFromArgs
|
||||||
|
|
||||||
ThumbnailImage {
|
ThumbnailImage {
|
||||||
id: thumbnail
|
id: thumbnail
|
||||||
|
@ -219,6 +224,7 @@ Item {
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
width: 1; height: 1
|
width: 1; height: 1
|
||||||
|
visible: aircraftDetailsRow.visible
|
||||||
}
|
}
|
||||||
|
|
||||||
// aircraft state row, if enabled
|
// aircraft state row, if enabled
|
||||||
|
@ -229,7 +235,7 @@ Item {
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: stateSelectionGroup
|
id: stateSelectionGroup
|
||||||
visible: _launcher.selectedAircraftInfo.hasStates
|
visible: _launcher.selectedAircraftInfo.hasStates && !_launcher.skipAircraftFromArgs
|
||||||
width: summaryGrid.middleColumnWidth
|
width: summaryGrid.middleColumnWidth
|
||||||
spacing: Style.margin
|
spacing: Style.margin
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue