defuze.me
Client
|
00001 /************************************************************************** 00002 ** defuze.me Epitech Innovative Project 00003 ** 00004 ** Copyright 2010 00005 ** Athena Calmettes - Jocelyn De La Rosa - Francois Gaillard 00006 ** Adrien Jarthon - Alexandre Moore - Luc Peres - Arnaud Sellier 00007 ** 00008 ** All rights reserved. 00009 **************************************************************************/ 00010 00011 #ifndef PARAMETERIZABLE_HPP 00012 #define PARAMETERIZABLE_HPP 00013 00014 #include <QtCore/QSettings> 00015 #include <QtCore/QString> 00016 #include <QtCore/QVariant> 00017 #include <QtCore/QHash> 00018 #include <QtGui/QValidator> 00019 00020 #define INT_VALIDATOR new QIntValidator 00021 //#define INT_RANGE_VALIDATOR(min, max) new QIntValidator(min, max) 00022 //#define INT_TOP_VALIDATOR(max) new IntTopValidator(max) 00023 //#define INT_BOTTOM_VALIDATOR(min) new IntBottomValidator(min) 00024 #define DOUBLE_VALIDATOR new QDoubleValidator 00025 //#define DOUBLE_RANGE_VALIDATOR(min, max) new QDoubleValidator(s) 00026 //#define DOUBLE_TOP_VALIDATOR(max) new IntTopValidator(max) 00027 //#define DOUBLE_BOTTOM_VALIDATOR(min) new IntBottomValidator(min) 00028 #define BASIC_REGEXP_VALIDATOR(regexp) new QRegExpValidator(QRegExp(regexp)) 00029 #define REGEXP_VALIDATOR(regexp) new QRegExpValidator(regexp) 00030 //#define URL_VALIDATOR new UrlValidator 00031 //#define URL_VALIDATOR(protocol) new UrlValidator(protocol) 00032 00033 namespace DB 00034 { 00035 class DBCore; 00036 } 00037 00038 namespace Params 00039 { 00040 00041 class ParamsCore; 00042 00063 class Parameterizable : public QObject 00064 { 00065 Q_OBJECT 00066 public: 00067 enum BackEnd 00068 { 00069 DATABASE, 00070 SETTINGS, 00071 NONE, 00072 UNSET 00073 }; 00074 00075 Parameterizable(Parameterizable::BackEnd backEnd = Parameterizable::UNSET, QString name = ""); 00076 QVariant getPublicParameter(const QString &key) const; 00077 QVariant getPublicParameter(const QString &key, QVariant falloutValue) const; 00078 const QString& paramsName() const; 00079 Parameterizable::BackEnd paramsBackEnd() const; 00080 void registerToParamsCore(ParamsCore *paramsCore); 00081 void setParamsBackEnd(DB::DBCore *dbCore); 00082 void setParamsBackEnd(Parameterizable::BackEnd backEnd, DB::DBCore *dbCore = 0); 00083 00084 protected slots: 00085 virtual void updatedValues(const QStringList &keys); 00086 00087 signals: 00088 void commitedValues(const QStringList &keys); 00089 00090 protected: 00091 bool setParamsName(const QString &name); 00092 bool commitParameters(); 00093 QVariant getParameter(const QString &key) const; 00094 QVariant getParameter(const QString &key, QVariant falloutValue) const; 00095 void setParameter(const QString &key, QVariant value); 00096 void addValidator(QString key, QValidator*); 00097 void deleteValidators(); 00098 00099 virtual void defineParams()=0; 00100 00101 QHash<QString, QVariant> parameters; 00102 QHash<QString, QVariant> publicParameters; 00103 QHash<QString, QValidator*> paramsValidators; 00104 00105 private: 00106 bool hasNameAndBackEnd() const; 00107 void copyParamsToPublic(); 00108 void loadFromSettings(); 00109 void loadDefaultParams(); 00110 void loadFromCommandLine(ParamsCore *paramsCore); 00111 void loadFromDatabase(); 00112 void applyCmdLineParameters(const QHash<QString, QVariant>& cmdLineParameters); 00113 QString _paramsName; 00114 BackEnd _paramsBackEnd; 00115 bool paramsLocked; 00116 DB::DBCore *_dbCore; 00117 }; 00118 00119 } 00120 00121 #endif // PARAMETERIZABLE_HPP