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.
tdenetwork/kopete/kopete/chatwindow/kopetechatwindowstylemanager.h

149 lines
4.5 KiB

/*
kopetechatwindowstylemanager.h - Manager all chat window styles
Copyright (c) 2005 by Michaël Larouche <michael.larouche@kdemail.net>
Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@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. *
* *
*************************************************************************
*/
#ifndef KOPETECHATWINDOWSTYLEMANAGER_H
#define KOPETECHATWINDOWSTYLEMANAGER_H
#include <tqobject.h>
#include <tqmap.h>
#include <tdefileitem.h>
#include <kopete_export.h>
class ChatWindowStyle;
/**
* Sigleton class that handle Chat Window styles.
* It use style absolute path to avoid unexpected behavior that could happen when using style name.
*
* It can install, delete styles. The styles are managed in a pool, they are only retrieved on demand.
*
* Use getStyleFromPool to retrieve a ChatWindowStyle instance. Do not delete the returned instance, it
* is handled by this class.
*
* When called the first time, it list all the available styles in $KDEDATADIR/kopete/styles and
* KDirWatch (via KDirLister) watch for new styles.
*
* If you want to keep a trace of avaiable styles, connect to loadStylesFinished() signal.
* It is called when KDirLister finish a job(ex: on new directory).
*
* @author Michaël Larouche <michael.larouche@kdemail.net>
*/
class KOPETE_EXPORT ChatWindowStyleManager : public TQObject
{
Q_OBJECT
public:
/**
* StyleList typedef (a TQMap)
* key = Name of the style (currently the directory name)
* value = Path to the style
*/
typedef TQMap<TQString, TQString> StyleList;
/**
* The StyleInstallStatus enum. It gives better return value for installStyle().
* - StyleInstallOk : The install went fine.
* - StyleNotValid : The archive didn't contain a valid Chat Window style.
* - StyleNoDirectoryValid : It didn't find a suitable directory to install the theme.
* - StyleCannotOpen : The archive couldn't be openned.
* - StyleUnknow : Unknow error.
*/
enum StyleInstallStatus { StyleInstallOk = 0, StyleNotValid, StyleNoDirectoryValid, StyleCannotOpen, StyleUnknow };
/**
* Destructor.
*/
~ChatWindowStyleManager();
/**
* Singleton access to this class.
* @return the single instance of this class.
*/
static ChatWindowStyleManager *self();
/**
* List all availables styles.
* Init KDirLister and thus KDirWatch that watch for new styles.
*/
void loadStyles();
/**
* Get all available styles.
*/
StyleList getAvailableStyles();
public slots:
/**
* Install a new style into user style directory
* Note that you must pass a path to a archive.
*
* @param styleBundlePath Path to the container file to install.
* @return A status code from StyleInstallStatus enum.
*/
int installStyle(const TQString &styleBundlePath);
/**
* Remove a style from user style directory
*
* @param stylePath the path of the style to remove.
* @return true if the deletion went without problems.
*/
bool removeStyle(const TQString &stylePath);
/**
* Get a instance of a ChatWindowStyle from the pool.
* If they are no instance for the specified style, it gets created.
* DO NOT DELETE the resulting pointer, it is handled by this class.
*
* @param stylePath Path for the specified style. Name can be ambigous.
* @return the instance of ChatWindow for the specified style. DO NOT DELETE IT.
*/
ChatWindowStyle *getStyleFromPool(const TQString &stylePath);
signals:
/**
* This signal is emitted when all styles finished to list.
* Used to inform and/or update GUI.
*/
void loadStylesFinished();
private slots:
/**
* KDirLister found new files.
* @param dirList new files found.
*/
void slotNewStyles(const KFileItemList &dirList);
/**
* KDirLister finished a job.
* Emit loadStylesFinished() if they are no directory left in the stack.
*/
void slotDirectoryFinished();
private:
/**
* Private constructor(it's a singleton class)
* Call loadStyles() to list all avaiable styles.
*/
ChatWindowStyleManager(TQObject *parent = 0, const char *name = 0);
static ChatWindowStyleManager *s_self;
class Private;
Private *d;
};
#endif