libqutim  0.3.2.0
datasettingsobject.h
Go to the documentation of this file.
00001 #ifndef QUTIM_SDK_0_3_DATASETTINGSOBJECT_H
00002 #define QUTIM_SDK_0_3_DATASETTINGSOBJECT_H
00003 
00004 #include "menucontroller.h"
00005 #include "settingslayer.h"
00006 #include "dataforms.h"
00007 
00008 namespace qutim_sdk_0_3 {
00009 
00010 class DataSettingsItemPrivate;
00011 class DataSettingsGenerator;
00012 class DataSettingsObjectPrivate;
00013 
00014 class LIBQUTIM_EXPORT DataSettingsObject : public QObject
00015 {
00016     Q_OBJECT
00017     Q_DECLARE_PRIVATE(DataSettingsObject)
00018     Q_PROPERTY(qutim_sdk_0_3::DataItem item READ item NOTIFY itemChanged)
00019     Q_PROPERTY(QObject *controller READ controller WRITE setController NOTIFY controllerChanged)
00020 public:
00021     DataSettingsObject(QObject *parent = 0);
00022     ~DataSettingsObject();
00023     
00024     qutim_sdk_0_3::DataItem item() const;
00025     void setController(QObject *controller);
00026     QObject *controller() const;
00027     
00028 public slots:
00029     void load();
00030     void save(const qutim_sdk_0_3::DataItem &item);
00031     void cancel();
00032     
00033 protected:
00034     virtual void loadImpl() = 0;
00035     virtual void saveImpl(const qutim_sdk_0_3::DataItem &item) = 0;
00036     virtual void cancelImpl();
00037     virtual void setControllerImpl(QObject *controller);
00038     void setItem(const qutim_sdk_0_3::DataItem &item);
00039     
00040 signals:
00041     void itemChanged(const qutim_sdk_0_3::DataItem &item);
00042     void controllerChanged(QObject *controller);
00043     
00044 private:
00045     QScopedPointer<DataSettingsObjectPrivate> d_ptr;
00046 };
00047 
00048 class LIBQUTIM_EXPORT DataSettingsItem : public SettingsItem
00049 {
00050     Q_DECLARE_PRIVATE(DataSettingsItem)
00051 public:
00052     DataSettingsItem(Settings::Type type, const QIcon &icon, const LocalizedString &text);
00053     DataSettingsItem(Settings::Type type, const LocalizedString &text);
00054     virtual ~DataSettingsItem();
00055 
00056 protected:
00057     virtual DataSettingsObject *createObject() = 0;
00058     virtual const ObjectGenerator *generator() const;
00059     friend class DataSettingsGenerator;
00060 };
00061 
00062 template<typename T>
00063 class GeneralDataSettingsItem : public DataSettingsItem
00064 {
00065 public:
00066     GeneralDataSettingsItem(Settings::Type type, const QIcon &icon, const LocalizedString &text)
00067             : DataSettingsItem(type, icon, text) {}
00068     GeneralDataSettingsItem(Settings::Type type, const LocalizedString &text)
00069             : DataSettingsItem(type, text) {}
00070     virtual ~GeneralDataSettingsItem() {}
00071 protected:
00072     virtual DataSettingsObject *createObject()
00073     {
00074         return new T();
00075     }
00076 };
00077 
00078 } // namespace qutim_sdk_0_3
00079 
00080 #endif // QUTIM_SDK_0_3_DATASETTINGSOBJECT_H