kdelibs/kutils/kemoticons/kemoticonsprovider.h
2014-11-13 01:04:59 +02:00

169 lines
5.1 KiB
C++

/**********************************************************************************
* Copyright (C) 2008 by Carlo Segato <brandon.ml@gmail.com> *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. If not, see <http://www.gnu.org/licenses/>.*
* *
**********************************************************************************/
#ifndef KEMOTICONS_PROVIDER_H
#define KEMOTICONS_PROVIDER_H
#include "kemoticons_export.h"
#include <QtCore/QObject>
#include <QtCore/QVariant>
#include <QtCore/QStringList>
#include <QtCore/QPair>
class QString;
class KEmoticonsProviderPrivate;
struct Emoticon;
/**
* This is the base class for the emoticons provider plugins
*/
class KEMOTICONS_EXPORT KEmoticonsProvider : public QObject
{
Q_OBJECT
public:
struct Emoticon
{
Emoticon(){}
/* sort by longest to shortest matchText */
bool operator < (const Emoticon &e) const { return matchText.length() > e.matchText.length(); }
QString matchText;
QString matchTextEscaped;
QString picPath;
QString picHTMLCode;
};
/**
* Options to pass to addEmoticon
*/
enum AddEmoticonOption {
DoNotCopy, /**<< Don't copy the emoticon file into the theme directory */
Copy /**<< Copy the emoticon file into the theme directory */
};
/**
* Default constructor
*/
explicit KEmoticonsProvider(QObject *parent = 0);
/**
* Destructor
*/
virtual ~KEmoticonsProvider();
/**
* Load the theme inside the directory @p path
* @param path path to the directory
*/
virtual bool loadTheme(const QString &path);
/**
* Remove the emoticon @p emo, this will not delete the image file too
* @param emo the emoticon text to remove
* @return @c true if it can delete the emoticon
*/
virtual bool removeEmoticon(const QString &emo);
/**
* Add the emoticon @p emo with text @p text
* @param emo path to the emoticon image
* @param text the text of the emoticon separated by space for multiple text
* @param copy whether or not copy @p emo into the theme directory
* @return @c true if it can add the emoticon
*/
virtual bool addEmoticon(const QString &emo, const QString &text, AddEmoticonOption option = DoNotCopy);
/**
* Save the emoticon theme
*/
virtual void save();
/**
* Returns the theme name
*/
QString themeName() const;
/**
* Set the theme name
* @param name name of the theme
*/
void setThemeName(const QString &name);
/**
* Returns the theme path
*/
QString themePath() const;
/**
* Returns the file name of the theme
*/
QString fileName() const;
/**
* Returns a QHash that contains the emoticons path as keys and the text as values
*/
QHash<QString, QStringList> emoticonsMap() const;
/**
* Returns a QHash that contains emoticons indexed by the first char
*/
QHash<QChar, QList<Emoticon> > emoticonsIndex() const;
/**
* Create a new theme
*/
virtual void createNew();
protected:
/**
* Clears the emoticons map
*/
void clearEmoticonsMap();
/**
* Insert a new item in the emoticons map
*/
void addEmoticonsMap(QString key, QStringList value);
/**
* Remove an item from the emoticons map
*/
void removeEmoticonsMap(QString key);
/**
* Add an emoticon to the index
* @param path path to the emoticon
* @param emoList list of text associated with this emoticon
*/
void addEmoticonIndex(const QString &path, const QStringList &emoList);
/**
* Remove an emoticon from the index
* @param path path to the emoticon
* @param emoList list of text associated with this emoticon
*/
void removeEmoticonIndex(const QString &path, const QStringList &emoList);
/**
* Private class
*/
KEmoticonsProviderPrivate * const d;
};
#endif /* KEMOTICONS_PROVIDER_H */
// kate: space-indent on; indent-width 4; replace-tabs on;