Browse Source

Don't enforce an explicit value for TriState cmd options.

Most code from Brian Kendall <guygizmo@gmail.com> (@briankendall)
adaptive-webui-19844
sledgehammer999 8 years ago
parent
commit
1a099fa742
No known key found for this signature in database
GPG Key ID: 6E4A2D025B7CC9A2
  1. 38
      src/app/options.cpp

38
src/app/options.cpp

@ -242,24 +242,35 @@ namespace
// Option that is explicitly set to true or false, and whose value is undefined when unspecified. // Option that is explicitly set to true or false, and whose value is undefined when unspecified.
// May not have a shortcut. // May not have a shortcut.
class TriStateBoolOption: protected StringOption class TriStateBoolOption: protected Option
{ {
public: public:
constexpr TriStateBoolOption(const char *name) constexpr TriStateBoolOption(const char *name, bool defaultValue)
: StringOption {name} : Option {name, 0}
, m_defaultValue(defaultValue)
{ {
} }
using StringOption::operator==; bool operator==(const QString &arg) const
{
QStringList parts = arg.split(QLatin1Char('='));
return parts[0] == fullParameter();
}
QString usage() const QString usage() const
{ {
return StringOption::usage(QLatin1String("true|false")); return padUsageText(fullParameter() + QLatin1String("=<true|false>"));
} }
TriStateBool value(const QString &arg) const TriStateBool value(const QString &arg) const
{ {
QString val = StringOption::value(arg); QStringList parts = arg.split(QLatin1Char('='));
if (parts.size() == 1) {
return TriStateBool(m_defaultValue);
}
else if (parts.size() == 2) {
QString val = parts[1];
if (val.toUpper() == QLatin1String("TRUE") || val == QLatin1String("1")) { if (val.toUpper() == QLatin1String("TRUE") || val == QLatin1String("1")) {
return TriStateBool::True; return TriStateBool::True;
@ -267,20 +278,23 @@ namespace
else if (val.toUpper() == QLatin1String("FALSE") || val == QLatin1String("0")) { else if (val.toUpper() == QLatin1String("FALSE") || val == QLatin1String("0")) {
return TriStateBool::False; return TriStateBool::False;
} }
else { }
throw CommandLineParameterError(QObject::tr("Parameter '%1' must follow syntax '%1=%2'", throw CommandLineParameterError(QObject::tr("Parameter '%1' must follow syntax '%1=%2'",
"e.g. Parameter '--add-paused' must follow syntax " "e.g. Parameter '--add-paused' must follow syntax "
"'--add-paused=<true|false>'") "'--add-paused=<true|false>'")
.arg(fullParameter()) .arg(fullParameter())
.arg(QLatin1String("<true|false>"))); .arg(QLatin1String("<true|false>")));
} }
}
TriStateBool value(const QProcessEnvironment &env) const TriStateBool value(const QProcessEnvironment &env) const
{ {
QString val = env.value(envVarName()); QString val = env.value(envVarName(), "-1");
if (val.isEmpty()) { if (val.isEmpty()) {
return TriStateBool(m_defaultValue);
}
else if (val == QLatin1String("-1")) {
return TriStateBool::Undefined; return TriStateBool::Undefined;
} }
else if (val.toUpper() == QLatin1String("TRUE") || val == QLatin1String("1")) { else if (val.toUpper() == QLatin1String("TRUE") || val == QLatin1String("1")) {
@ -295,6 +309,8 @@ namespace
return TriStateBool::Undefined; return TriStateBool::Undefined;
} }
} }
bool m_defaultValue;
}; };
bool operator==(const QString &s, const TriStateBoolOption &o) bool operator==(const QString &s, const TriStateBoolOption &o)
@ -315,12 +331,12 @@ namespace
constexpr const BoolOption PORTABLE_OPTION = {"portable"}; constexpr const BoolOption PORTABLE_OPTION = {"portable"};
constexpr const BoolOption RELATIVE_FASTRESUME = {"relative-fastresume"}; constexpr const BoolOption RELATIVE_FASTRESUME = {"relative-fastresume"};
constexpr const StringOption SAVE_PATH_OPTION = {"save-path"}; constexpr const StringOption SAVE_PATH_OPTION = {"save-path"};
constexpr const TriStateBoolOption PAUSED_OPTION = {"add-paused"}; constexpr const TriStateBoolOption PAUSED_OPTION = {"add-paused", true};
constexpr const BoolOption SKIP_HASH_CHECK_OPTION = {"skip-hash-check"}; constexpr const BoolOption SKIP_HASH_CHECK_OPTION = {"skip-hash-check"};
constexpr const StringOption CATEGORY_OPTION = {"category"}; constexpr const StringOption CATEGORY_OPTION = {"category"};
constexpr const BoolOption SEQUENTIAL_OPTION = {"sequential"}; constexpr const BoolOption SEQUENTIAL_OPTION = {"sequential"};
constexpr const BoolOption FIRST_AND_LAST_OPTION = {"first-and-last"}; constexpr const BoolOption FIRST_AND_LAST_OPTION = {"first-and-last"};
constexpr const TriStateBoolOption SKIP_DIALOG_OPTION = {"skip-dialog"}; constexpr const TriStateBoolOption SKIP_DIALOG_OPTION = {"skip-dialog", true};
} }
QBtCommandLineParameters::QBtCommandLineParameters(const QProcessEnvironment &env) QBtCommandLineParameters::QBtCommandLineParameters(const QProcessEnvironment &env)

Loading…
Cancel
Save