|
|
|
// -*- 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 "kwin")
|
|
|
|
* @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
|