summaryrefslogtreecommitdiffstats
path: root/kcontrol/kthememanager/ktheme.h
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol/kthememanager/ktheme.h')
-rw-r--r--kcontrol/kthememanager/ktheme.h224
1 files changed, 224 insertions, 0 deletions
diff --git a/kcontrol/kthememanager/ktheme.h b/kcontrol/kthememanager/ktheme.h
new file mode 100644
index 000000000..1401b49e7
--- /dev/null
+++ b/kcontrol/kthememanager/ktheme.h
@@ -0,0 +1,224 @@
+// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+/* Copyright (C) 2003 Lukas Tinkl <lukas@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef KTHEME_H
+#define KTHEME_H
+
+#include <qdom.h>
+#include <qguardedptr.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qwidget.h>
+
+#include <kurl.h>
+
+class KStandardDirs;
+class KConfig;
+
+/// defines the syntax version used by the XML
+#define SYNTAX_VERSION 1
+
+/**
+ * The base class representing a KDE theme. The data are stored internally
+ * in a DOM tree and accessed using the member methods.
+ *
+ * @brief Class representing a theme
+ * @author Lukas Tinkl <lukas@kde.org>
+ */
+class KTheme
+{
+public:
+ /**
+ * Constructs KTheme using an installed theme
+ * @param xmlFile The theme's XML file
+ */
+ KTheme( QWidget *parent, const QString & xmlFile );
+
+ /**
+ * Constructs an empty theme, to be used with
+ * #createYourself()
+ * @param create Whether to start the DOM tree
+ */
+ KTheme( QWidget *parent, bool create = false );
+
+ /**
+ * Destructor
+ */
+ ~KTheme();
+
+ /**
+ * Download from @p url, unpack the tarball and load the theme definition
+ *
+ * @return true on success
+ */
+ bool load( const KURL & url );
+
+ /**
+ * Creates a snapshot of the current configuration in the work directory
+ * (used for getting the defaults or to create a new user theme).
+ * @param pack Whether to also pack the theme in tar.gz format
+ * @return The path to the newly created tarball with theme (if @p pack == true)
+ */
+ QString createYourself( bool pack = false );
+
+ /**
+ * Apply the theme to the system, ie. set the config variables and
+ * adjust file paths
+ */
+ void apply();
+
+ /**
+ * Uninstall the theme from the system
+ * @param name The name of the theme
+ * @return true on success
+ */
+ static bool remove( const QString & name );
+
+ /**
+ * @return the theme name
+ */
+ QString name() const { return m_name; }
+ /**
+ * Set the theme name
+ */
+ void setName( const QString & name );
+
+ QString author() const {
+ return getProperty( "author" );
+ }
+ void setAuthor( const QString & author );
+
+ QString email() const {
+ return getProperty( "email" );
+ }
+ void setEmail( const QString & email );
+
+ QString homepage() const {
+ return getProperty( "homepage" );
+ }
+ void setHomepage( const QString & homepage );
+
+ QString comment() const {
+ return getProperty( "comment" );
+ }
+ void setComment ( const QString & comment );
+
+ QString version() const {
+ return getProperty( "version" );
+ }
+ void setVersion ( const QString & version );
+
+ /**
+ * Creates a preview file called theme_name.preview.png
+ * (i.e. takes a snapshot of the current desktop)
+ */
+ void addPreview();
+
+private:
+ /**
+ * Create a property with @p name, value @p value
+ * and append it to @p parent element
+ */
+ void setProperty( const QString & name,
+ const QString & value,
+ QDomElement parent );
+ /**
+ * Get a simple property from the "general" section of the DOM tree
+ */
+ QString getProperty( const QString & name ) const;
+
+ /**
+ * Get a property from the DOM tree, based on:
+ * @param parent Parent tag
+ * @param tag From the this tag
+ * @param attr From this attribute
+ */
+ QString getProperty( QDomElement parent, const QString & tag,
+ const QString & attr ) const;
+
+ /**
+ * Creates a list of "icon" elements based on:
+ * @param group The group in the KConfig object @p cfg
+ * @param object Specifier (similiar, but not identical to @p group)
+ * @param parent Parent element to append to
+ * @param cfg The KConfig object to work with
+ */
+ void createIconElems( const QString & group, const QString & object,
+ QDomElement parent, KConfig * cfg );
+
+ /**
+ * Creates a color DOM element @p name, with a specifier @p object,
+ * appends it to @p parent; used when creating themes
+ * @param cfg The KConfig object to work with
+ */
+ void createColorElem( const QString & name, const QString & object,
+ QDomElement parent, KConfig * cfg );
+ /**
+ * Creates a list of "event" elements based on:
+ * @param events The list of events to work on
+ * @param object Specifier (currently "global" or "kwin")
+ * @param parent Parent element to append to
+ * @param cfg The KConfig object to work with
+ */
+ void createSoundList( const QStringList & events, const QString & object,
+ QDomElement parent, KConfig * cfg );
+
+ /**
+ * Tries to find out absolute path to a resource and copy it to the theme's temp dir;
+ * used when creating themes
+ * @param section The theme section to work on, corresponds to toplevel XML tags
+ * @param path The original path, relative or absolute
+ * @return an internal path suitable for writing into the XML file or QString::null
+ * in case the resource couldn't be found
+ */
+ QString processFilePath( const QString & section, const QString & path );
+
+ /**
+ * Converts an internal theme:/ representation of a resource
+ * to a real path
+ */
+ QString unprocessFilePath( const QString & section, QString path );
+
+ /**
+ * Wrapper around KIO::NetAccess::file_copy
+ */
+ bool copyFile( const QString & from, const QString & to );
+
+ /**
+ * Wrapper around KGlobal::dirs()->findResource()
+ * @param section Section to work on (desktop, sounds, panel etc)
+ * @param path The file to find
+ */
+ QString findResource( const QString & section, const QString & path );
+
+ /// name of the theme
+ QString m_name;
+
+ /// DOM holding the theme
+ QDomDocument m_dom;
+ /// the DOM root element
+ QDomElement m_root;
+ /// "general" section
+ QDomElement m_general;
+
+ KStandardDirs * m_kgd;
+
+ QGuardedPtr<QWidget> m_parent;
+};
+
+#endif