1 // -*- C++ -*-
2 // $Id: setting.h,v 1.3 2010-02-15 02:57:00 robertl Exp $
3 //------------------------------------------------------------------------
4 //
5 //  Copyright (C) 2009  S. Khai Mong <khai@mangrai.com>.
6 //
7 //  This program is free software; you can redistribute it and/or
8 //  modify it under the terms of the GNU General Public License as
9 //  published by the Free Software Foundation; either version 2 of the
10 //  License, or (at your option) any later version.
11 //
12 //  This program is distributed in the hope that it will be useful,
13 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
14 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 //  General Public License for more details.
16 //
17 //  You should have received a copy of the GNU General Public License
18 //  along with this program; if not, write to the Free Software
19 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111
20 //  USA
21 //
22 //------------------------------------------------------------------------
23 #ifndef SETTING_H
24 #define SETTING_H
25 
26 #include <QSettings>
27 #include <QDate>
28 
29 
30 //------------------------------------------------------------------------
31 class VarSetting {
32  public:
VarSetting()33   VarSetting() {};
~VarSetting()34   virtual ~VarSetting() {};
35 
36   virtual void saveSetting(QSettings &) = 0;
37   virtual void restoreSetting(QSettings &) = 0;
38 };
39 
40 
41 //------------------------------------------------------------------------
42 class IntSetting: public VarSetting
43 {
44  public:
IntSetting(const QString & name,int & var)45   IntSetting(const QString &name, int &var): VarSetting(), name(name), var(var) { }
saveSetting(QSettings & st)46   void saveSetting(QSettings &st) {st.setValue(name, var); }
restoreSetting(QSettings & st)47   void restoreSetting(QSettings &st) {if (st.contains(name)) var = st.value(name).toInt(); }
48 
49  private:
50   QString name;
51   int &var;
52 };
53 
54 //------------------------------------------------------------------------
55 class DoubleSetting: public VarSetting
56 {
57  public:
DoubleSetting(const QString & name,double & var)58   DoubleSetting(const QString &name, double &var): VarSetting(), name(name), var(var) { }
saveSetting(QSettings & st)59   void saveSetting(QSettings &st) {st.setValue(name, var); }
restoreSetting(QSettings & st)60   void restoreSetting(QSettings &st) {if (st.contains(name)) var = st.value(name).toDouble(); }
61 
62  private:
63   QString name;
64   double &var;
65 };
66 
67 //------------------------------------------------------------------------
68 class StringSetting: public VarSetting
69 {
70  public:
StringSetting(const QString & name,QString & var)71   StringSetting(const QString &name, QString &var): VarSetting(), name(name), var(var) { }
saveSetting(QSettings & st)72   void saveSetting(QSettings &st) {st.setValue(name, var); }
restoreSetting(QSettings & st)73   void restoreSetting(QSettings &st) {if (st.contains(name)) var = st.value(name).toString(); }
74 
75  private:
76   QString name;
77   QString &var;
78 };
79 
80 //------------------------------------------------------------------------
81 class BoolSetting: public VarSetting
82 {
83  public:
BoolSetting(const QString & name,bool & var)84   BoolSetting(const QString &name, bool &var): VarSetting(), name(name), var(var) { }
saveSetting(QSettings & st)85   void saveSetting(QSettings &st) {st.setValue(name, var); }
restoreSetting(QSettings & st)86   void restoreSetting(QSettings &st) {if (st.contains(name)) var = st.value(name).toBool(); }
87 
88  private:
89   QString name;
90   bool &var;
91 };
92 
93 //------------------------------------------------------------------------
94 class DateTimeSetting: public VarSetting
95 {
96  public:
DateTimeSetting(const QString & name,QDateTime & var)97   DateTimeSetting(const QString &name, QDateTime &var):VarSetting(), name(name), var(var) { }
saveSetting(QSettings & st)98   void saveSetting(QSettings &st) {st.setValue(name, var); }
restoreSetting(QSettings & st)99   void restoreSetting(QSettings &st) {if (st.contains(name)) var = st.value(name).toDateTime(); }
100 
101  private:
102   QString name;
103   QDateTime &var;
104 };
105 
106 
107 //------------------------------------------------------------------------
108 class SettingGroup {
109  public:
SettingGroup()110   SettingGroup() {}
~SettingGroup()111   ~SettingGroup() {
112     for (int i=0; i<group.size(); i++)
113       delete group[i];
114   }
115 
saveSettings(QSettings & st)116   void saveSettings(QSettings &st) {
117     for (int i=0; i<group.size(); i++)
118       group[i]->saveSetting(st);
119   }
restoreSettings(QSettings & st)120   void restoreSettings(QSettings &st) {
121     for (int i=0; i<group.size(); i++)
122       group[i]->restoreSetting(st);
123   }
124 
addVarSetting(VarSetting * vs)125   void addVarSetting(VarSetting *vs) {
126     group << vs;
127   }
128 
129  private:
130   QList <VarSetting *> group;
131 };
132 
133 #endif
134 
135 
136