• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdenetwork API Reference
  • KDE Home
  • Contact Us
 

kopete/libkopete

  • sources
  • kde-4.14
  • kdenetwork
  • kopete
  • libkopete
kopeteonlinestatus.cpp
Go to the documentation of this file.
1 /*
2  kopeteonlinestatus.cpp - Kopete Online Status
3 
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>
8 
9  Kopete (c) 2002-2007 by the Kopete developers <kopete-devel@kde.org>
10 
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  *************************************************************************
19 */
20 
21 #include "kopeteonlinestatus.h"
22 #include "kopeteonlinestatusmanager.h"
23 
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>
35 
36 namespace Kopete
37 {
38 
39 class OnlineStatusIconEngine : public QIconEngineV2
40 {
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) {}
45 
46  virtual QIconEngineV2 *clone() const
47  { return new OnlineStatusIconEngine(status,icon,color,idle); }
48 
49  virtual QString key () const
50  { return OnlineStatusManager::self()->fingerprint( status, icon, 0, color, idle ); }
51 
52  QPixmap pixmap ( const QSize & size, QIcon::Mode mode, QIcon::State state )
53  {
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);
57  }
58 
59  void paint( QPainter * painter, const QRect & rect, QIcon::Mode mode, QIcon::State state )
60  {
61  QPixmap pix = pixmap(rect.size() , mode, state);
62  painter->drawPixmap(rect, pix);
63  }
64 
65 private:
66  OnlineStatus status;
67  QString icon;
68  QColor color;
69  bool idle;
70 };
71 
72 }
73 
74 using namespace Kopete;
75 
76 class OnlineStatus::Private
77  : public KShared
78 {
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;
90 
91  QString protocolIcon() const
92  {
93  return protocol ? protocol->pluginIcon() : QString::fromLatin1( "unknown" );
94  }
95 };
96 
101 static struct
102 {
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" } ,
112  { OnlineStatus::Busy, "Busy" } };
113 
114 OnlineStatus::OnlineStatus( StatusType status, unsigned weight, Protocol *protocol,
115  unsigned internalStatus, const QStringList &overlayIcons, const QString &description )
116  : d( new Private )
117 {
118  d->status = status;
119  d->internalStatus = internalStatus;
120  d->weight = weight;
121  d->overlayIcons = overlayIcons;
122  d->protocol = protocol;
123  d->description = description;
124  d->categories = 0x00;
125  d->options = 0x00;
126 }
127 
128 OnlineStatus::OnlineStatus( StatusType status, unsigned weight, Protocol *protocol, unsigned internalStatus,
129  const QStringList &overlayIcons, const QString &description, const QString &caption, OnlineStatusManager::Categories categories , OnlineStatusManager::Options options )
130  : d( new Private )
131 {
132  d->status = status;
133  d->internalStatus = internalStatus;
134  d->weight = weight;
135  d->overlayIcons = overlayIcons;
136  d->protocol = protocol;
137  d->description = description;
138  d->caption = caption;
139  d->categories = categories;
140  d->options = options;
141 
142  OnlineStatusManager::self()->registerOnlineStatus( *this );
143 }
144 
145 OnlineStatus::OnlineStatus( StatusType status )
146  : d( new Private )
147 {
148  d->status = status;
149  d->internalStatus = 0;
150  d->weight = 0;
151  d->protocol = 0L;
152  d->categories = 0x00;
153  d->options = 0x00;
154 
155  switch( status )
156  {
157  case Online:
158  d->description = i18n( "Online" );
159  break;
160  case Away:
161  d->description = i18n( "Away" );
162  break;
163  case Connecting:
164  d->description = i18n( "Connecting" );
165  break;
166  case Invisible:
167  d->description = i18n( "Invisible" );
168  break;
169  case Offline:
170  d->description = i18n( "Offline" );
171  break;
172  case Unknown:
173  default:
174  d->description = i18n( "Unknown" );
175  d->overlayIcons = QStringList( QString::fromLatin1("status_unknown") );
176  break;
177 
178  }
179 }
180 
181 OnlineStatus::OnlineStatus()
182  : d( new Private )
183 {
184  d->status = Unknown;
185  d->internalStatus = 0;
186  d->weight = 0;
187  d->protocol = 0L;
188  d->overlayIcons = QStringList( QString::fromLatin1( "status_unknown" ) );
189  d->categories = 0x00;
190  d->options = 0x00;
191 }
192 
193 OnlineStatus::OnlineStatus( const OnlineStatus &other )
194  : d( other.d )
195 {
196 }
197 
198 bool OnlineStatus::operator==( const OnlineStatus &other ) const
199 {
200  if ( d->internalStatus == other.d->internalStatus && d->protocol == other.d->protocol &&
201  d->weight == other.d->weight && d->overlayIcons == other.d->overlayIcons &&
202  d->description == other.d->description )
203  {
204  return true;
205  }
206 
207  return false;
208 }
209 
210 bool OnlineStatus::operator!=( const OnlineStatus &other ) const
211 {
212  return !(*this == other);
213 }
214 
215 
216 bool OnlineStatus::operator>( const OnlineStatus &other ) const
217 {
218  if( d->status == other.d->status )
219  return d->weight > other.d->weight;
220  else
221  return d->status > other.d->status;
222 }
223 
224 bool OnlineStatus::operator<( const OnlineStatus &other ) const
225 {
226  if( d->status == other.d->status )
227  return d->weight < other.d->weight;
228  else
229  return d->status < other.d->status;
230 }
231 
232 OnlineStatus & OnlineStatus::operator=( const OnlineStatus &other )
233 {
234  d = other.d;
235  return *this;
236 }
237 
238 OnlineStatus::~OnlineStatus()
239 {
240 }
241 
242 OnlineStatus::StatusType OnlineStatus::status() const
243 {
244  return d->status;
245 }
246 
247 unsigned OnlineStatus::internalStatus() const
248 {
249  return d->internalStatus;
250 }
251 
252 unsigned OnlineStatus::weight() const
253 {
254  return d->weight;
255 }
256 
257 QStringList OnlineStatus::overlayIcons() const
258 {
259  return d->overlayIcons;
260 }
261 
262 QString OnlineStatus::description() const
263 {
264  return d->description;
265 }
266 
267 Protocol* OnlineStatus::protocol() const
268 {
269  return d->protocol;
270 }
271 
272 QString OnlineStatus::caption() const
273 {
274  return d->caption;
275 }
276 
277 OnlineStatusManager::Categories OnlineStatus::categories() const
278 {
279  return d->categories;
280 }
281 
282 OnlineStatusManager::Options OnlineStatus::options() const
283 {
284  return d->options;
285 }
286 
287 bool OnlineStatus::isDefinitelyOnline() const
288 {
289  if ( status() == Offline || status() == Connecting || status() == Unknown )
290  return false;
291  return true;
292 }
293 
294 QIcon OnlineStatus::iconFor( const Contact *contact ) const
295 {
296  QString iconName = contact->icon();
297  if ( iconName.isNull() )
298  iconName = contact->account()->customIcon();
299  if ( iconName.isNull() )
300  iconName = d->protocolIcon();
301  return QIcon(new OnlineStatusIconEngine( *this, iconName,
302  contact->account()->color(), contact->idleTime() >= 10*60));
303 }
304 
305 
306 QString OnlineStatus::mimeSourceFor( const Contact *contact, int size ) const
307 {
308  // figure out what icon we should use for this contact
309  QString iconName = contact->icon();
310  if ( iconName.isNull() )
311  iconName = contact->account()->customIcon();
312  if ( iconName.isNull() )
313  iconName = d->protocolIcon();
314 
315 
316  return mimeSource( iconName, size, contact->account()->color(),contact->idleTime() >= 10*60 );
317 }
318 
319 QIcon OnlineStatus::iconFor( const Account *account ) const
320 {
321  QString iconName = account->customIcon();
322  if ( iconName.isNull() )
323  iconName = d->protocolIcon();
324  return QIcon(new OnlineStatusIconEngine(*this, iconName, account->color(),false));
325 
326 }
327 
328 QString OnlineStatus::mimeSourceFor( const Account *account, int size ) const
329 {
330  QString iconName = account->customIcon();
331  if ( iconName.isNull() )
332  iconName = d->protocolIcon();
333 
334  return mimeSource( iconName, size, account->color(), false );
335 }
336 
337 QPixmap OnlineStatus::iconFor( const QString &mimeSource ) const
338 {
339  return OnlineStatusManager::self()->cacheLookupByMimeSource( mimeSource );
340 }
341 
342 QPixmap OnlineStatus::protocolIcon(const KIconLoader::StdSizes size) const
343 {
344  return OnlineStatusManager::self()->cacheLookupByObject( *this, d->protocolIcon() , size, QColor() );
345 }
346 
347 QPixmap OnlineStatus::protocolIcon() const
348 {
349  return protocolIcon(KIconLoader::SizeSmall);
350 }
351 
352 QString OnlineStatus::mimeSource( const QString& icon, int size, QColor color, bool idle) const
353 {
354  // make sure the item is in the cache
355  OnlineStatusManager::self()->cacheLookupByObject( *this, icon, size, color, idle );
356  // now return the fingerprint instead
357  return OnlineStatusManager::self()->fingerprint( *this, icon, size, color, idle );
358 }
359 
360 QString OnlineStatus::statusTypeToString(OnlineStatus::StatusType statusType)
361 {
362  const int size = sizeof(statusNames) / sizeof(statusNames[0]);
363 
364  for (int i=0; i< size; i++)
365  if (statusNames[i].status == statusType)
366  return QString::fromLatin1(statusNames[i].name);
367 
368  return QString::fromLatin1(statusNames[0].name); // Unknown
369 }
370 
371 OnlineStatus::StatusType OnlineStatus::statusStringToType(const QString& string)
372 {
373  int size = sizeof(statusNames) / sizeof(statusNames[0]);
374 
375  for (int i=0; i< size; i++)
376  if (QString::fromLatin1(statusNames[i].name) == string)
377  return statusNames[i].status;
378 
379  return OnlineStatus::Unknown;
380 }
381 
382 // vim: set noet ts=4 sts=4 sw=4:
Kopete::OnlineStatus::overlayIcons
QStringList overlayIcons() const
Return the list of overlay icons.
Definition: kopeteonlinestatus.cpp:257
Kopete::OnlineStatus
Definition: kopeteonlinestatus.h:68
statusNames
static struct @1 statusNames[]
This is required by some plugins, when a status need to be stored on the disk, to avoid problems...
status
OnlineStatus::StatusType status
Definition: kopeteonlinestatus.cpp:103
QRect::size
QSize size() const
QSize::width
int width() const
kopeteaccount.h
Kopete::OnlineStatus::description
QString description() const
Return the description.
Definition: kopeteonlinestatus.cpp:262
Kopete::Protocol
base class of every protocol.
Definition: kopeteprotocol.h:62
Kopete::OnlineStatus::caption
QString caption() const
Return the text for the action in the menu.
Definition: kopeteonlinestatus.cpp:272
Kopete::OnlineStatus::mimeSourceFor
QString mimeSourceFor(const Contact *contact, int size=16) const
Return the mime source for a status icon generated for the given Contact.
Definition: kopeteonlinestatus.cpp:306
Kopete::OnlineStatus::Unknown
Refers to protocols where state cannot be determined.
Definition: kopeteonlinestatus.h:90
Kopete::OnlineStatus::protocol
Protocol * protocol() const
Return the protocol this applies to.
Definition: kopeteonlinestatus.cpp:267
Kopete::OnlineStatus::Offline
State where you really cannot be contacted.
Definition: kopeteonlinestatus.h:98
Kopete::OnlineStatus::~OnlineStatus
~OnlineStatus()
Destructor.
Definition: kopeteonlinestatus.cpp:238
Kopete::OnlineStatus::Invisible
State where you are online but none of your contacts can see that you're online.
Definition: kopeteonlinestatus.h:110
Kopete::Contact::account
Account * account() const
Get the account that this contact belongs to.
Definition: kopetecontact.cpp:538
Kopete::OnlineStatus::OnlineStatus
OnlineStatus()
Constructor.
Definition: kopeteonlinestatus.cpp:181
Kopete::OnlineStatus::weight
unsigned weight() const
Return the weight.
Definition: kopeteonlinestatus.cpp:252
kopeteonlinestatus.h
Kopete::OnlineStatus::status
StatusType status() const
Return the status.
Definition: kopeteonlinestatus.cpp:242
Kopete::OnlineStatus::isDefinitelyOnline
bool isDefinitelyOnline() const
Definition: kopeteonlinestatus.cpp:287
QString::isNull
bool isNull() const
Kopete::OnlineStatus::statusTypeToString
static QString statusTypeToString(OnlineStatus::StatusType status)
returns a QString from a StatusType
Definition: kopeteonlinestatus.cpp:360
QRect
Kopete::OnlineStatus::iconFor
QIcon iconFor(const Contact *contact) const
Return a status icon generated for the given Contact.
Definition: kopeteonlinestatus.cpp:294
Kopete::OnlineStatus::Busy
Means that you have other things to do and don't want to get involved in messaging ('Busy' or 'Do not...
Definition: kopeteonlinestatus.h:123
QPainter::drawPixmap
void drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)
kopeteprotocol.h
QPainter
Kopete::OnlineStatus::operator==
bool operator==(const OnlineStatus &other) const
Comparison operator.
Definition: kopeteonlinestatus.cpp:198
Kopete::OnlineStatus::operator!=
bool operator!=(const OnlineStatus &other) const
Comparison operator.
Definition: kopeteonlinestatus.cpp:210
Kopete::Contact::icon
QString icon
Definition: kopetecontact.h:71
QString
Kopete::Plugin::pluginIcon
QString pluginIcon() const
Get the name of the icon for this plugin.
Definition: kopeteplugin.cpp:57
QColor
Kopete::Contact
Definition: kopetecontact.h:58
QStringList
QPixmap
Kopete::OnlineStatus::Online
Refers to a true online state, i.e.
Definition: kopeteonlinestatus.h:129
QSize
Kopete::OnlineStatus::operator>
bool operator>(const OnlineStatus &other) const
Comparison operator.
Definition: kopeteonlinestatus.cpp:216
Kopete::OnlineStatus::operator<
bool operator<(const OnlineStatus &other) const
Comparison operator.
Definition: kopeteonlinestatus.cpp:224
Kopete::OnlineStatus::operator=
OnlineStatus & operator=(const OnlineStatus &other)
Assignment operator.
Definition: kopeteonlinestatus.cpp:232
Kopete::Account::customIcon
QString customIcon() const
return the icon base This is the custom account icon set with setIcon.
Definition: kopeteaccount.cpp:733
Kopete::Account::color
QColor color
Definition: kopeteaccount.h:79
QSize::height
int height() const
Kopete::OnlineStatus::options
OnlineStatusManager::Options options() const
Return the options of this online status.
Definition: kopeteonlinestatus.cpp:282
Kopete::OnlineStatusManager::registerOnlineStatus
void registerOnlineStatus(const OnlineStatus &status)
You need to register each status an account can be.
Definition: kopeteonlinestatusmanager.cpp:84
QString::fromLatin1
QString fromLatin1(const char *str, int size)
Kopete::OnlineStatus::Away
Refers to a state where you can be technically reached, but for one reason or another it is often not...
Definition: kopeteonlinestatus.h:117
Kopete::OnlineStatus::statusStringToType
static OnlineStatus::StatusType statusStringToType(const QString &string)
returns a StatusType from a QString
Definition: kopeteonlinestatus.cpp:371
Kopete::OnlineStatus::internalStatus
unsigned internalStatus() const
Return the internal status.
Definition: kopeteonlinestatus.cpp:247
Kopete::OnlineStatusManager::self
static OnlineStatusManager * self()
Definition: kopeteonlinestatusmanager.cpp:49
Kopete::Contact::idleTime
virtual unsigned long int idleTime() const
Get the time (in seconds) this contact has been idle It will return the time set in setIdleTime() wit...
Definition: kopetecontact.cpp:595
Kopete::OnlineStatus::protocolIcon
KDE_DEPRECATED QPixmap protocolIcon() const
Returns the status icon for the protocol.
Definition: kopeteonlinestatus.cpp:347
Kopete::OnlineStatus::StatusType
StatusType
The available global states.
Definition: kopeteonlinestatus.h:78
Kopete::OnlineStatus::categories
OnlineStatusManager::Categories categories() const
Return the categories this online status is in.
Definition: kopeteonlinestatus.cpp:277
QIconEngineV2
Kopete::Account
The Kopete::Account class handles one account.
Definition: kopeteaccount.h:72
kopeteidentity.h
kopetecontact.h
kopeteonlinestatusmanager.h
QIcon
name
const char * name
Definition: kopeteonlinestatus.cpp:104
Kopete::OnlineStatus::Connecting
State where the user is not available on the network yet but trying to get onto.
Definition: kopeteonlinestatus.h:104
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:29:19 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kopete/libkopete

Skip menu "kopete/libkopete"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdenetwork API Reference

Skip menu "kdenetwork API Reference"
  • kget
  • kopete
  •   kopete
  •   libkopete
  • krdc
  • krfb

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal