defuze.me  Client
parameterizable.hpp
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