#pragma once #include <QtCore> #include "Option.h" namespace commandline { template <class T> class SwitchOption: public Option { public: SwitchOption(const QString &name, const QString &description = QString(), const QString &valueName = QString(), const QString &defaultValue = QString(), const QMap<QString, T> &switches=QMap<QString, T>()) : Option(name, description, valueName, defaultValue), _switches(switches) {} SwitchOption(const QStringList &names, const QString &description = QString(), const QString &valueName = QString(), const QString &defaultValue = QString(), const QMap<QString, T> &switches=QMap<QString, T>()) : Option(names, description, valueName, defaultValue), _switches(switches) {} SwitchOption(const QCommandLineOption &other, const QMap<QString, T> &switches) : Option(other), _switches(switches) {} virtual ~SwitchOption() {} const QMap<QString, T> &getSwitches() const { return _switches; } virtual bool validate(Parser &parser, QString &switch_) override { return hasSwitch(switch_); } bool hasSwitch(const QString &switch_) { return _switches.contains(switch_.toLower()); } void setSwitches(const QMap<QString, T> &_switches) { this->_switches = _switches; } void addSwitch(const QString &switch_, T value=T()) { _switches[switch_.toLower()] = value; } void removeSwitch(const QString &switch_) { _switches.remove(switch_.toLower()); } T & switchValue(Parser & parser) { return _switches[value(parser).toLower()]; } protected: QMap<QString, T> _switches; }; }