You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/kcontrol/kthememanager/ktheme.h

225 lines
6.7 KiB

// -*- 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 <tqdom.h>
#include <tqguardedptr.h>
#include <tqstring.h>
#include <tqstringlist.h>
#include <tqwidget.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( 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<TQWidget> m_parent;
};
#endif