make webinterface translatable. there are around 20 short strings, all with context...
[kdenetwork.git] / kopete / libkopete / kopeteonlinestatus.cpp
blob1a995a7b8b13c5f2bf44e3d3afcab225fb1d0f12
1 /*
2 kopeteonlinestatus.cpp - Kopete Online Status
4 Copyright (c) 2003 by Martijn Klingens <klingens@kde.org>
5 Copyright (c) 2003 by Duncan Mac-Vicar Prett <duncan@kde.org>
6 Copyright (c) 2003 by Will Stephenson <wstephenson@kde.org>
7 Copyright (c) 2004-2008 by Olivier Goffart <ogoffart@kde.org>
9 Kopete (c) 2002-2007 by the Kopete developers <kopete-devel@kde.org>
11 *************************************************************************
12 * *
13 * This library is free software; you can redistribute it and/or *
14 * modify it under the terms of the GNU Lesser General Public *
15 * License as published by the Free Software Foundation; either *
16 * version 2 of the License, or (at your option) any later version. *
17 * *
18 *************************************************************************
21 #include "kopeteonlinestatus.h"
22 #include "kopeteonlinestatusmanager.h"
24 #include "kopeteidentity.h"
25 #include "kopeteprotocol.h"
26 #include "kopeteaccount.h"
27 #include "kopetecontact.h"
28 #include <kiconloader.h>
29 #include <kiconeffect.h>
30 #include <kdebug.h>
31 #include <klocale.h>
32 #include <QPixmap>
33 #include <QIconEngineV2>
34 #include <QPainter>
36 namespace Kopete
39 class OnlineStatusIconEngine : public QIconEngineV2
41 public:
42 OnlineStatusIconEngine( const OnlineStatus &s , const QString& i,
43 const QColor &c, bool _idle )
44 : status(s) , icon(i), color(c), idle(_idle) {}
46 virtual QIconEngineV2 *clone() const
47 { return new OnlineStatusIconEngine(status,icon,color,idle); }
49 virtual QString key () const
50 { return OnlineStatusManager::self()->fingerprint( status, icon, 0, color, idle ); }
52 QPixmap pixmap ( const QSize & size, QIcon::Mode mode, QIcon::State state )
54 const int iconSize = qMin(size.width(), size.height());
55 QIcon i(OnlineStatusManager::self()->cacheLookupByObject( status, icon, iconSize, color, idle ));
56 return i.pixmap(size, mode, state);
59 void paint( QPainter * painter, const QRect & rect, QIcon::Mode mode, QIcon::State state )
61 QPixmap pix = pixmap(rect.size() , mode, state);
62 painter->drawPixmap(rect, pix);
65 private:
66 OnlineStatus status;
67 QString icon;
68 QColor color;
69 bool idle;
74 using namespace Kopete;
76 class OnlineStatus::Private
77 : public KShared
79 public:
80 StatusType status;
81 unsigned weight;
82 Protocol *protocol;
83 unsigned internalStatus;
84 QStringList overlayIcons;
85 QString description;
86 QString caption;
87 OnlineStatusManager::Categories categories;
88 OnlineStatusManager::Options options;
89 unsigned refCount;
91 QString protocolIcon() const
93 return protocol ? protocol->pluginIcon() : QString::fromLatin1( "unknown" );
97 /**
98 * This is required by some plugins, when a status need to be stored on
99 * the disk, to avoid problems.
101 static struct
103 OnlineStatus::StatusType status;
104 const char *name;
105 } statusNames[] = {
106 { OnlineStatus::Unknown, "Unknown" },
107 { OnlineStatus::Offline, "Offline" },
108 { OnlineStatus::Connecting, "Connecting" },
109 { OnlineStatus::Invisible, "Invisible" },
110 { OnlineStatus::Online, "Online"},
111 { OnlineStatus::Away, "Away" } };
113 OnlineStatus::OnlineStatus( StatusType status, unsigned weight, Protocol *protocol,
114 unsigned internalStatus, const QStringList &overlayIcons, const QString &description )
115 : d( new Private )
117 d->status = status;
118 d->internalStatus = internalStatus;
119 d->weight = weight;
120 d->overlayIcons = overlayIcons;
121 d->protocol = protocol;
122 d->description = description;
123 d->categories = 0x00;
124 d->options = 0x00;
127 OnlineStatus::OnlineStatus( StatusType status, unsigned weight, Protocol *protocol, unsigned internalStatus,
128 const QStringList &overlayIcons, const QString &description, const QString &caption, OnlineStatusManager::Categories categories , OnlineStatusManager::Options options )
129 : d( new Private )
131 d->status = status;
132 d->internalStatus = internalStatus;
133 d->weight = weight;
134 d->overlayIcons = overlayIcons;
135 d->protocol = protocol;
136 d->description = description;
137 d->caption = caption;
138 d->categories = categories;
139 d->options = options;
141 OnlineStatusManager::self()->registerOnlineStatus( *this );
144 OnlineStatus::OnlineStatus( StatusType status )
145 : d( new Private )
147 d->status = status;
148 d->internalStatus = 0;
149 d->weight = 0;
150 d->protocol = 0L;
151 d->categories = 0x00;
152 d->options = 0x00;
154 switch( status )
156 case Online:
157 d->description = i18n( "Online" );
158 break;
159 case Away:
160 d->description = i18n( "Away" );
161 break;
162 case Connecting:
163 d->description = i18n( "Connecting" );
164 break;
165 case Invisible:
166 d->description = i18n( "Invisible" );
167 break;
168 case Offline:
169 d->description = i18n( "Offline" );
170 break;
171 case Unknown:
172 default:
173 d->description = i18n( "Unknown" );
174 d->overlayIcons = QStringList( QString::fromLatin1("status_unknown") );
175 break;
180 OnlineStatus::OnlineStatus()
181 : d( new Private )
183 d->status = Unknown;
184 d->internalStatus = 0;
185 d->weight = 0;
186 d->protocol = 0L;
187 d->overlayIcons = QStringList( QString::fromLatin1( "status_unknown" ) );
188 d->categories = 0x00;
189 d->options = 0x00;
192 OnlineStatus::OnlineStatus( const OnlineStatus &other )
193 : d( other.d )
197 bool OnlineStatus::operator==( const OnlineStatus &other ) const
199 if ( d->internalStatus == other.d->internalStatus && d->protocol == other.d->protocol &&
200 d->weight == other.d->weight && d->overlayIcons == other.d->overlayIcons &&
201 d->description == other.d->description )
203 return true;
206 return false;
209 bool OnlineStatus::operator!=( const OnlineStatus &other ) const
211 return !(*this == other);
215 bool OnlineStatus::operator>( const OnlineStatus &other ) const
217 if( d->status == other.d->status )
218 return d->weight > other.d->weight;
219 else
220 return d->status > other.d->status;
223 bool OnlineStatus::operator<( const OnlineStatus &other ) const
225 if( d->status == other.d->status )
226 return d->weight < other.d->weight;
227 else
228 return d->status < other.d->status;
231 OnlineStatus & OnlineStatus::operator=( const OnlineStatus &other )
233 d = other.d;
234 return *this;
237 OnlineStatus::~OnlineStatus()
241 OnlineStatus::StatusType OnlineStatus::status() const
243 return d->status;
246 unsigned OnlineStatus::internalStatus() const
248 return d->internalStatus;
251 unsigned OnlineStatus::weight() const
253 return d->weight;
256 QStringList OnlineStatus::overlayIcons() const
258 return d->overlayIcons;
261 QString OnlineStatus::description() const
263 return d->description;
266 Protocol* OnlineStatus::protocol() const
268 return d->protocol;
271 QString OnlineStatus::caption() const
273 return d->caption;
276 OnlineStatusManager::Categories OnlineStatus::categories() const
278 return d->categories;
281 OnlineStatusManager::Options OnlineStatus::options() const
283 return d->options;
286 bool OnlineStatus::isDefinitelyOnline() const
288 if ( status() == Offline || status() == Connecting || status() == Unknown )
289 return false;
290 return true;
293 QIcon OnlineStatus::iconFor( const Contact *contact ) const
295 QString iconName = contact->icon();
296 if ( iconName.isNull() )
297 iconName = contact->account()->customIcon();
298 if ( iconName.isNull() )
299 iconName = d->protocolIcon();
300 return QIcon(new OnlineStatusIconEngine( *this, iconName,
301 contact->account()->color(), contact->idleTime() >= 10*60));
305 QString OnlineStatus::mimeSourceFor( const Contact *contact, int size ) const
307 // figure out what icon we should use for this contact
308 QString iconName = contact->icon();
309 if ( iconName.isNull() )
310 iconName = contact->account()->customIcon();
311 if ( iconName.isNull() )
312 iconName = d->protocolIcon();
315 return mimeSource( iconName, size, contact->account()->color(),contact->idleTime() >= 10*60 );
318 QIcon OnlineStatus::iconFor( const Account *account ) const
320 QString iconName = account->customIcon();
321 if ( iconName.isNull() )
322 iconName = d->protocolIcon();
323 return QIcon(new OnlineStatusIconEngine(*this, iconName, account->color(),false));
327 QString OnlineStatus::mimeSourceFor( const Account *account, int size ) const
329 QString iconName = account->customIcon();
330 if ( iconName.isNull() )
331 iconName = d->protocolIcon();
333 return mimeSource( iconName, size, account->color(), false );
336 QPixmap OnlineStatus::iconFor( const QString &mimeSource ) const
338 return OnlineStatusManager::self()->cacheLookupByMimeSource( mimeSource );
341 QPixmap OnlineStatus::protocolIcon() const
343 return OnlineStatusManager::self()->cacheLookupByObject( *this, d->protocolIcon() , 16, QColor() );
346 QString OnlineStatus::mimeSource( const QString& icon, int size, QColor color, bool idle) const
348 // make sure the item is in the cache
349 OnlineStatusManager::self()->cacheLookupByObject( *this, icon, size, color, idle );
350 // now return the fingerprint instead
351 return OnlineStatusManager::self()->fingerprint( *this, icon, size, color, idle );
354 QString OnlineStatus::statusTypeToString(OnlineStatus::StatusType statusType)
356 const int size = sizeof(statusNames) / sizeof(statusNames[0]);
358 for (int i=0; i< size; i++)
359 if (statusNames[i].status == statusType)
360 return QString::fromLatin1(statusNames[i].name);
362 return QString::fromLatin1(statusNames[0].name); // Unknown
365 OnlineStatus::StatusType OnlineStatus::statusStringToType(const QString& string)
367 int size = sizeof(statusNames) / sizeof(statusNames[0]);
369 for (int i=0; i< size; i++)
370 if (QString::fromLatin1(statusNames[i].name) == string)
371 return statusNames[i].status;
373 return OnlineStatus::Unknown;
376 // vim: set noet ts=4 sts=4 sw=4: