Show invite menu in wlm chat window immediately
[kdenetwork.git] / kopete / kopete / kopeteaccountstatusbaricon.cpp
blobc7faad7283cde5b3c0ceecef17e23a89b4fca936
1 /*
2 kopeteaccountstatusbaricon.cpp - Kopete Account StatusBar Dock Icon
4 Copyright (c) 2008 by Roman Jarosz <kedgedev@centrum.cz>
5 Kopete (c) 2008 by the Kopete developers <kopete-devel@kde.org>
7 *************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 *************************************************************************
17 #include "kopeteaccountstatusbaricon.h"
19 #include <QtGui/QToolTip>
20 #include <QtGui/QMouseEvent>
21 #include <QtGui/QMovie>
23 #include <KMenu>
24 #include <KActionMenu>
25 #include <KGlobal>
26 #include <KDebug>
28 #include <kopeteaccount.h>
29 #include <kopetecontact.h>
30 #include <kopetestatusrootaction.h>
32 KopeteAccountStatusBarIcon::KopeteAccountStatusBarIcon( Kopete::Account *account, QWidget *parent )
33 : QLabel( parent ), mAccount(account), mMovie(0)
35 setFixedSize ( 16, 16 );
36 setCursor(QCursor(Qt::PointingHandCursor));
38 connect( account, SIGNAL(colorChanged(const QColor&)), this, SLOT(statusIconChanged()) );
39 connect( account->myself(), SIGNAL(onlineStatusChanged(Kopete::Contact*, const Kopete::OnlineStatus&, const Kopete::OnlineStatus&)),
40 this, SLOT(statusIconChanged()) );
42 statusIconChanged();
45 KopeteAccountStatusBarIcon::~KopeteAccountStatusBarIcon()
47 if ( mMovie )
49 mMovie->stop();
50 delete mMovie;
54 void KopeteAccountStatusBarIcon::mousePressEvent( QMouseEvent *event )
56 KActionMenu *actionMenu = new KActionMenu( mAccount->accountId(), mAccount );
57 if ( !mAccount->hasCustomStatusMenu() )
58 Kopete::StatusRootAction::createAccountStatusActions( mAccount, actionMenu );
60 mAccount->fillActionMenu( actionMenu );
62 actionMenu->menu()->exec( QPoint( event->globalX(), event->globalY() ) );
63 delete actionMenu;
66 void KopeteAccountStatusBarIcon::statusIconChanged()
68 Kopete::Contact* myself = mAccount->myself();
70 if ( mMovie )
72 mMovie->stop();
73 delete mMovie;
74 mMovie = 0;
77 if ( myself->onlineStatus().status() == Kopete::OnlineStatus::Connecting && !myself->onlineStatus().overlayIcons().isEmpty() )
78 mMovie = KIconLoader::global()->loadMovie( myself->onlineStatus().overlayIcons().first(), KIconLoader::Small );
80 if ( !mMovie )
82 setPixmap( myself->onlineStatus().iconFor( myself->account() ).pixmap( 16, 16 ) );
84 else
86 mMovie->setCacheMode( QMovie::CacheAll );
87 setMovie( mMovie );
88 mMovie->start();
92 bool KopeteAccountStatusBarIcon::event( QEvent *event )
94 if ( event->type() == QEvent::ToolTip )
96 QHelpEvent *helpEvent = static_cast<QHelpEvent*>(event);
97 QToolTip::showText( helpEvent->globalPos(), mAccount->myself()->toolTip() );
100 return QLabel::event( event );
103 #include "kopeteaccountstatusbaricon.moc"