karm
tray.cpp00001
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(karmPart * parent)
00075 : KSystemTray( 0 , "Karm Tray")
00076 {
00077
00078 _taskActiveTimer = 0;
00079 }
00080
00081 KarmTray::~KarmTray()
00082 {
00083 }
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094 void KarmTray::startClock()
00095 {
00096 if ( _taskActiveTimer )
00097 {
00098 _taskActiveTimer->start(1000);
00099 setPixmap( *(*icons)[_activeIcon] );
00100 show();
00101 }
00102 }
00103
00104 void KarmTray::stopClock()
00105 {
00106 if ( _taskActiveTimer )
00107 {
00108 _taskActiveTimer->stop();
00109 show();
00110 }
00111 }
00112
00113 void KarmTray::advanceClock()
00114 {
00115 _activeIcon = (_activeIcon+1) % 8;
00116 setPixmap( *(*icons)[_activeIcon]);
00117 }
00118
00119 void KarmTray::resetClock()
00120 {
00121 _activeIcon = 0;
00122 setPixmap( *(*icons)[_activeIcon]);
00123 show();
00124 }
00125
00126 void KarmTray::initToolTip()
00127 {
00128 updateToolTip(QPtrList<Task> ());
00129 }
00130
00131 void KarmTray::updateToolTip(QPtrList<Task> activeTasks)
00132 {
00133 if ( activeTasks.isEmpty() ) {
00134 QToolTip::add( this, i18n("No active tasks") );
00135 return;
00136 }
00137
00138 QFontMetrics fm( QToolTip::font() );
00139 const QString continued = i18n( ", ..." );
00140 const int buffer = fm.boundingRect( continued ).width();
00141 const int desktopWidth = KGlobalSettings::desktopGeometry(this).width();
00142 const int maxWidth = desktopWidth - buffer;
00143
00144 QString qTip;
00145 QString s;
00146
00147
00148
00149
00150 QPtrListIterator<Task> item( activeTasks );
00151 for ( int i = 0; item.current(); ++item, ++i ) {
00152 Task* task = item.current();
00153 if ( i > 0 )
00154 s += i18n( ", " ) + task->name();
00155 else
00156 s += task->name();
00157 int width = fm.boundingRect( s ).width();
00158 if ( width > maxWidth ) {
00159 qTip += continued;
00160 break;
00161 }
00162 qTip = s;
00163 }
00164
00165 QToolTip::add( this, qTip );
00166 }
00167
00168 #include "tray.moc"
|