tray.cpp
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"
This file is part of the documentation for karm Library Version 3.2.2.