summaryrefslogtreecommitdiff
path: root/libopie2/opiecore/oconfig.h
Side-by-side diff
Diffstat (limited to 'libopie2/opiecore/oconfig.h') (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiecore/oconfig.h167
1 files changed, 167 insertions, 0 deletions
diff --git a/libopie2/opiecore/oconfig.h b/libopie2/opiecore/oconfig.h
new file mode 100644
index 0000000..afe14b1
--- a/dev/null
+++ b/libopie2/opiecore/oconfig.h
@@ -0,0 +1,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