summaryrefslogtreecommitdiff
path: root/libopie2/opiecore/oconfig.h
blob: afe14b18a24af7da5f685fd12ef2e6588f989d4d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*
                             This file is part of the Opie Project

                             (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
                             Inspired by the config classes from the KDE Project which are
              =.             (C) 1997 Matthias Kalle Dalheimer <kalle@kde.org>
            .=l.
           .>+-=
 _;:,     .>    :=|.         This program is free software; you can
.> <`_,   >  .   <=          redistribute it and/or  modify it under
:`=1 )Y*s>-.--   :           the terms of the GNU Library General Public
.="- .-=="i,     .._         License as published by the Free Software
 - .   .-<_>     .<>         Foundation; either version 2 of the License,
     ._= =}       :          or (at your option) any later version.
    .%`+i>       _;_.
    .i_,=:_.      -<s.       This program is distributed in the hope that
     +  .  -:.       =       it will be useful,  but WITHOUT ANY WARRANTY;
    : ..    .:,     . . .    without even the implied warranty of
    =_        +     =;=|`    MERCHANTABILITY or FITNESS FOR A
  _.=:.       :    :=>`:     PARTICULAR PURPOSE. See the GNU
..}^=.=       =       ;      Library General Public License for more
++=   -.     .`     .:       details.
 :     =  ...= . :.=-
 -.   .:....=;==+<;          You should have received a copy of the GNU
  -_. . .   )=.  =           Library General Public License along with
    --        :-=`           this library; see the file COPYING.LIB.
                             If not, write to the Free Software Foundation,
                             Inc., 59 Temple Place - Suite 330,
                             Boston, MA 02111-1307, USA.
*/

#ifndef OCONFIG_H
#define OCONFIG_H

//FIXME: Implement for X11 or reuse libqpe/Config there also?

#include <qpe/config.h>

class QColor;
class QFont;

/**
  * A Configuration class based on the Qtopia @ref Config class
  * featuring additional handling of color and font entries
  */

class OConfig : public Config
{
  public:

  /**
    * Constructs a OConfig object.
    *
    * @param name A file to parse.
    */
    OConfig( const QString &name, Domain domain = User );

  /**
    * Destructs the OConfig object.
    *
    * Writes back any dirty configuration entries, and destroys
    * dynamically created objects.
    */
    virtual ~OConfig();

   /**
    * Returns the name of the group in which we are
    * searching for keys and from which we are retrieving entries.
    *
    * @return The current group.
    */
    const QString& group() { return git.key(); };

   /**
    * Reads a @ref QColor entry.
    *
    * Read the value of an entry specified by @p pKey in the current group
    * and interpret it as a color.
    *
    * @param pKey The key to search for.
    * @param pDefault A default value (null QColor by default) returned if the
    * key was not found or if the value cannot be interpreted.
    * @return The value for this key.
    */
    QColor readColorEntry( const QString& key, const QColor* pDefault ) const;

   /**
    * Reads a @ref QFont value.
    *
    * Read the value of an entry specified by @p pKey in the current group
    * and interpret it as a font object.
    *
    * @param pKey The key to search for.
    * @param pDefault A default value (null QFont by default) returned if the
    * key was not found or if the read value cannot be interpreted.
    * @return The value for this key.
    */
    QFont readFontEntry( const QString& key, const QFont* pDefault ) const;

};

/**
  * Helper class to facilitate working with @ref OConfig / @ref OSimpleConfig
  * groups.
  *
  * Careful programmers always set the group of a
  * @ref OConfig object to the group they want to read from
  * and set it back to the old one of afterwards. This is usually
  * written as:
  * <pre>
  *
  * QString oldgroup config()->group();
  * config()->setGroup( "TheGroupThatIWant" );
  * ...
  * config()->writeEntry( "Blah", "Blubb" );
  *
  * config()->setGroup( oldgroup );
  * </pre>
  *
  * In order to facilitate this task, you can use
  * OConfigGroupSaver. Simply construct such an object ON THE STACK
  * when you want to switch to a new group. Then, when the object goes
  * out of scope, the group will automatically be restored. If you
  * want to use several different groups within a function or method,
  * you can still use OConfigGroupSaver: Simply enclose all work with
  * one group (including the creation of the OConfigGroupSaver object)
  * in one block.
  *
  * @author Matthias Kalle Dalheimer <Kalle@kde.org>
  * @version $Id$
  * @see OConfig
  * @short Helper class for easier use of OConfig groups
  */

class OConfigGroupSaver
{
  public:
   /**
    * Constructor. You pass a pointer to the OConfigBase-derived
    * object you want to work with and a string indicating the _new_
    * group.
    * @param config The OConfig-derived object this
    *               OConfigGroupSaver works on.
    * @param group  The new group that the config object should switch to.
    */
    OConfigGroupSaver( OConfig* config, QString group ) :_config(config), _oldgroup(config->group() )
        { _config->setGroup( group ); }

    OConfigGroupSaver( OConfig* config, const char *group ) :_config(config), _oldgroup(config->group())
        { _config->setGroup( group ); }

    OConfigGroupSaver( OConfig* config, const QCString &group ) : _config(config), _oldgroup(config->group())
        { _config->setGroup( group ); }

    ~OConfigGroupSaver() { _config->setGroup( _oldgroup ); }

    OConfig* config() { return _config; };

  private:
    OConfig* _config;
    QString _oldgroup;

    OConfigGroupSaver( const OConfigGroupSaver& );
    OConfigGroupSaver& operator=( const OConfigGroupSaver& );
};

#endif // OCONFIG_H