00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
#include <qpixmap.h>
00014
#include <qptrlist.h>
00015
#include <qstring.h>
00016
#include <qtimer.h>
00017
#include <qtooltip.h>
00018
00019
#include <kaction.h>
00020
#include <kglobal.h>
00021
#include <kglobalsettings.h>
00022
#include <kiconloader.h>
00023
#include <klocale.h>
00024
#include <kpopupmenu.h>
00025
#include <ksystemtray.h>
00026
00027
#include "mainwindow.h"
00028
#include "task.h"
00029
#include "tray.h"
00030
00031
QPtrVector<QPixmap> *KarmTray::icons = 0;
00032
00033 KarmTray::KarmTray(
MainWindow* parent)
00034 : KSystemTray(parent,
"Karm Tray")
00035 {
00036
00037 _taskActiveTimer =
new QTimer(
this);
00038 connect( _taskActiveTimer, SIGNAL( timeout() ),
this,
00039 SLOT( advanceClock()) );
00040
00041
if (icons == 0) {
00042 icons =
new QPtrVector<QPixmap>(8);
00043
for (
int i=0; i<8; i++) {
00044
QPixmap *icon =
new QPixmap();
00045
QString name;
00046 name.sprintf(
"active-icon-%d.xpm",i);
00047 *icon = UserIcon(name);
00048 icons->insert(i,icon);
00049 }
00050 }
00051
00052 parent->
actionPreferences->plug( contextMenu() );
00053 parent->
actionStopAll->plug( contextMenu() );
00054
00055 resetClock();
00056 initToolTip();
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 }
00073
00074 KarmTray::~KarmTray()
00075 {
00076 }
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
void KarmTray::startClock()
00088 {
00089 _taskActiveTimer->start(1000);
00090 setPixmap( *(*icons)[_activeIcon] );
00091 show();
00092 }
00093
00094
void KarmTray::stopClock()
00095 {
00096 _taskActiveTimer->stop();
00097 show();
00098 }
00099
00100
void KarmTray::advanceClock()
00101 {
00102 _activeIcon = (_activeIcon+1) % 8;
00103 setPixmap( *(*icons)[_activeIcon]);
00104 }
00105
00106
void KarmTray::resetClock()
00107 {
00108 _activeIcon = 0;
00109 setPixmap( *(*icons)[_activeIcon]);
00110 show();
00111 }
00112
00113
void KarmTray::initToolTip()
00114 {
00115 updateToolTip(
QPtrList<Task> ());
00116 }
00117
00118
void KarmTray::updateToolTip(
QPtrList<Task> activeTasks)
00119 {
00120
if ( activeTasks.isEmpty() ) {
00121 QToolTip::add(
this, i18n(
"No active tasks") );
00122
return;
00123 }
00124
00125
QFontMetrics fm( QToolTip::font() );
00126
const QString continued = i18n(
", ..." );
00127
const int buffer = fm.boundingRect( continued ).width();
00128
const int desktopWidth = KGlobalSettings::desktopGeometry(
this).width();
00129
const int maxWidth = desktopWidth - buffer;
00130
00131
QString qTip;
00132
QString s;
00133
00134
00135
00136
00137
QPtrListIterator<Task> item( activeTasks );
00138
for (
int i = 0; item.current(); ++item, ++i ) {
00139
Task* task = item.current();
00140
if ( i > 0 )
00141 s += i18n(
", " ) + task->
name();
00142
else
00143 s += task->
name();
00144
int width = fm.boundingRect( s ).width();
00145
if ( width > maxWidth ) {
00146 qTip += continued;
00147
break;
00148 }
00149 qTip = s;
00150 }
00151
00152 QToolTip::add(
this, qTip );
00153 }
00154
00155
#include "tray.moc"