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.
170 lines
5.3 KiB
170 lines
5.3 KiB
/*
|
|
kopeteonlinestatusmanager.h
|
|
|
|
Copyright (c) 2004-2005 by Olivier Goffart <ogoffart @ kde.org>
|
|
|
|
Kopete (c) 2004-2005 by the Kopete developers <kopete-devel@kde.org>
|
|
|
|
*************************************************************************
|
|
* *
|
|
* 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 of the License, or (at your option) any later version. *
|
|
* *
|
|
*************************************************************************
|
|
*/
|
|
|
|
#ifndef kopeteonlinestatusmanager_h__
|
|
#define kopeteonlinestatusmanager_h__
|
|
|
|
#include <tqobject.h>
|
|
|
|
#include "kopeteonlinestatus.h"
|
|
#include "kaction.h"
|
|
|
|
class TQString;
|
|
class TQPixmap;
|
|
class TQColor;
|
|
class KActionMenu;
|
|
|
|
namespace Kopete
|
|
{
|
|
class OnlineStatus;
|
|
class Account;
|
|
|
|
|
|
/**
|
|
* OnlineStatusManager is a singleton which manage OnlineStatus
|
|
*
|
|
* @author Olivier Goffart
|
|
*/
|
|
class KOPETE_EXPORT OnlineStatusManager : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
static OnlineStatusManager* self();
|
|
~OnlineStatusManager();
|
|
|
|
/**
|
|
* Kopete will uses categories to have a more general system than siply globaly away.
|
|
*
|
|
* Idealy, in each protocol, there should be one status per categories (status may be in several or in none categories
|
|
*
|
|
* Idle is the status used for auto-away
|
|
*
|
|
* Status number are organised so that make a tree.
|
|
*/
|
|
//please be carrefull when modifying values of status. read comment in onlineStatus()
|
|
enum Categories
|
|
{
|
|
Idle=1<<8, ExtendedAway=1<<9 , Invisible=1<<10,
|
|
// \ / __________/
|
|
/*1<<4*/ Busy=1<<5, FreeForChat=1<<6, /* 1<<7*/
|
|
// \ / /
|
|
Away=1<<2, /* 1<<3 */
|
|
// \ /
|
|
Online=1<<1,
|
|
Offline=1
|
|
};
|
|
|
|
|
|
/**
|
|
* @see registerOnlineStatus
|
|
*/
|
|
enum Options
|
|
{
|
|
/// The user may set away messages for this online status
|
|
HasAwayMessage = 0x01,
|
|
/// The action of the status will be disabled if the account is offline.
|
|
/// use it if your protocol doesn't support connecting with the status as initial status.
|
|
/// You praticaly shouldn't abuse of that, and automaticaly set status after connecting if possible
|
|
DisabledIfOffline = 0x02,
|
|
/// The status will not appears in the action menu. Used if you want to register the status for e.g. autoaway,
|
|
/// without letting the user set itself that status
|
|
HideFromMenu = 0x04
|
|
};
|
|
|
|
/**
|
|
* You need to register each status an account can be.
|
|
* Registered statuses will appear in the account menu.
|
|
*
|
|
* The Protocol constructor is a good place to call this function.
|
|
* But if you want, you may use a special OnlineStatus constructor that call this function automaticaly
|
|
*
|
|
* You can set the status to be in the predefined categories.
|
|
* Ideally, each category should own one status.
|
|
* A status may be in several categories, or in none.
|
|
* There shouldn't be more than one status per protocol per categories.
|
|
*
|
|
* @param status The status to register
|
|
* @param caption The caption that will appear in menus (e.g. "Set &Away")
|
|
* @param categories A bitflag of @ref Categories
|
|
* @param options is a bitflag of @ref Options
|
|
*/
|
|
void registerOnlineStatus(const OnlineStatus& status, const TQString &caption, unsigned int categories=0x00 , unsigned int options=0x0);
|
|
|
|
/**
|
|
* insert "setStatus" actions from the given account to the specified actionMenu.
|
|
* (actions have that menu as parent TQObject)
|
|
* they are connected to the Account::setOnlineStatus signal
|
|
*
|
|
* Items are stored by status height.
|
|
*
|
|
* @param account the account
|
|
* @param parent the ActionMenu where action are inserted
|
|
*/
|
|
void createAccountStatusActions( Account *account , KActionMenu *parent);
|
|
|
|
/**
|
|
* return the status of the @p protocol which is in the category @p category
|
|
*
|
|
* If no status has been registered in this category, return the one in the category which is the most similair
|
|
*/
|
|
OnlineStatus onlineStatus(Protocol *protocol, Categories category) const;
|
|
|
|
private:
|
|
friend class OnlineStatus;
|
|
TQPixmap cacheLookupByObject( const OnlineStatus &statusFor, const TQString& icon, int size, TQColor color, bool idle = false);
|
|
TQPixmap cacheLookupByMimeSource( const TQString &mimeSource );
|
|
TQString fingerprint( const OnlineStatus &statusFor, const TQString& icon, int size, TQColor color, bool idle = false);
|
|
TQPixmap* renderIcon( const OnlineStatus &statusFor, const TQString& baseicon, int size, TQColor color, bool idle = false) const;
|
|
|
|
signals:
|
|
void iconsChanged();
|
|
|
|
private slots:
|
|
void slotIconsChanged();
|
|
|
|
private:
|
|
|
|
static OnlineStatusManager *s_self;
|
|
OnlineStatusManager();
|
|
class Private;
|
|
Private *d;
|
|
};
|
|
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
class OnlineStatusAction : public KAction
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
OnlineStatusAction ( const OnlineStatus& status, const TQString &text, const TQIconSet &pix, TQObject *parent=0, const char *name=0);
|
|
signals:
|
|
void activated( const Kopete::OnlineStatus& status );
|
|
private slots:
|
|
void slotActivated();
|
|
private:
|
|
OnlineStatus m_status;
|
|
};
|
|
|
|
} //END namespace Kopete
|
|
|
|
#endif
|
|
|
|
// vim: set noet ts=4 sts=4 sw=4:
|
|
|