// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*- /* Copyright (C) 2003 Lukas Tinkl 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 #include #include #include #include #include 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 */ class KTheme { public: /** * Constructs KTheme using an installed theme * @param xmlFile The theme's XML file */ KTheme( TQWidget *parent, const TQString & xmlFile ); /** * Constructs an empty theme, to be used with * #createYourself() * @param create Whether to start the DOM tree */ KTheme( TQWidget *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) */ TQString 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 TQString & name ); /** * @return the theme name */ TQString name() const { return m_name; } /** * Set the theme name */ void setName( const TQString & name ); TQString author() const { return getProperty( "author" ); } void setAuthor( const TQString & author ); TQString email() const { return getProperty( "email" ); } void setEmail( const TQString & email ); TQString homepage() const { return getProperty( "homepage" ); } void setHomepage( const TQString & homepage ); TQString comment() const { return getProperty( "comment" ); } void setComment ( const TQString & comment ); TQString version() const { return getProperty( "version" ); } void setVersion ( const TQString & 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 TQString & name, const TQString & value, TQDomElement parent ); /** * Get a simple property from the "general" section of the DOM tree */ TQString getProperty( const TQString & 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 */ TQString getProperty( TQDomElement parent, const TQString & tag, const TQString & 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 TQString & group, const TQString & object, TQDomElement 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 TQString & name, const TQString & object, TQDomElement 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 "twin") * @param parent Parent element to append to * @param cfg The KConfig object to work with */ void createSoundList( const TQStringList & events, const TQString & object, TQDomElement 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 TQString::null * in case the resource couldn't be found */ TQString processFilePath( const TQString & section, const TQString & path ); /** * Converts an internal theme:/ representation of a resource * to a real path */ TQString unprocessFilePath( const TQString & section, TQString path ); /** * Wrapper around KIO::NetAccess::file_copy */ bool copyFile( const TQString & from, const TQString & to ); /** * Wrapper around KGlobal::dirs()->findResource() * @param section Section to work on (desktop, sounds, panel etc) * @param path The file to find */ TQString findResource( const TQString & section, const TQString & path ); /// name of the theme TQString m_name; /// DOM holding the theme TQDomDocument m_dom; /// the DOM root element TQDomElement m_root; /// "general" section TQDomElement m_general; KStandardDirs * m_kgd; TQGuardedPtr m_parent; }; #endif