summaryrefslogtreecommitdiffstats
path: root/src/komposesystray.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/komposesystray.cpp')
-rw-r--r--src/komposesystray.cpp127
1 files changed, 127 insertions, 0 deletions
diff --git a/src/komposesystray.cpp b/src/komposesystray.cpp
new file mode 100644
index 0000000..41df920
--- /dev/null
+++ b/src/komposesystray.cpp
@@ -0,0 +1,127 @@
+//
+// C++ Implementation: komposesystray
+//
+// Description:
+//
+//
+// Author: Hans Oischinger <hans.oischinger@kde-mail.net>, (C) 2004
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "komposesystray.h"
+
+#include "komposeviewmanager.h"
+#include "komposefullscreenwidget.h"
+#include "komposesettings.h"
+#include "komposeglobal.h"
+#include "komposetaskmanager.h"
+
+#include <qpixmap.h>
+#include <qbitmap.h>
+#include <qpainter.h>
+
+#include <kapplication.h>
+#include <kaction.h>
+#include <kpopupmenu.h>
+#include <kiconeffect.h>
+#include <kglobalsettings.h>
+
+KomposeSysTray::KomposeSysTray(QWidget *parent, const char *name)
+ : KSystemTray(parent, name)
+{
+ // Create Menu
+ menu = contextMenu();
+ move( -1000, -1000 );
+ // Fill Menu
+ KomposeGlobal::instance()->getActShowWorldView()->plug(menu);
+ KomposeGlobal::instance()->getActShowVirtualDesktopView()->plug(menu);
+ KomposeGlobal::instance()->getActShowCurrentDesktopView()->plug(menu);
+ menu->insertSeparator();
+ KomposeGlobal::instance()->getActPreferencesDialog()->plug(menu);
+ KomposeGlobal::instance()->getActConfigGlobalShortcuts()->plug(menu);
+ KomposeGlobal::instance()->getActAboutDlg()->plug(menu);
+
+ slotConfigChanged();
+ connect( KomposeSettings::instance(), SIGNAL(settingsChanged()), this, SLOT(slotConfigChanged()) );
+}
+
+
+KomposeSysTray::~KomposeSysTray()
+{}
+
+void KomposeSysTray::slotConfigChanged( )
+{
+ // set the icon here
+ QPixmap iconPixmap = loadIcon("kompose");
+ setPixmap(iconPixmap);
+ icon = iconPixmap.convertToImage();
+ currentDesktopChanged(KomposeTaskManager::instance()->getCurrentDesktopNum());
+}
+
+void KomposeSysTray::mouseReleaseEvent (QMouseEvent * )
+{}
+
+void KomposeSysTray::mousePressEvent ( QMouseEvent * e )
+{
+ if ( !rect().contains( e->pos() ) )
+ return;
+
+ switch ( e->button() )
+ {
+ case LeftButton:
+ KomposeViewManager::instance()->createView( KomposeSettings::instance()->getDefaultView() );
+ break;
+ case MidButton:
+ // fall through
+ case RightButton:
+ contextMenuAboutToShow( menu );
+ menu->popup( e->globalPos() );
+ break;
+ default:
+ // nothing
+ break;
+ }
+}
+
+void KomposeSysTray::currentDesktopChanged(int desktop)
+{
+ if (!KomposeSettings::instance()->getShowDesktopNum())
+ return;
+ // update the icon to display the current desktop number
+ // qDebug("Displaying current desktop number on the tray icon....\n");
+
+ // copying from aKregator/src/trayicon.cpp
+ // from KMSystemTray
+ int oldW = pixmap()->size().width();
+ int oldH = pixmap()->size().height();
+
+ QString uStr=QString::number( desktop );
+ QFont f=KGlobalSettings::generalFont();
+ f.setBold(true);
+ f.setItalic(true);
+ float pointSize=f.pointSizeFloat();
+ QFontMetrics fm(f);
+ int w=fm.width(uStr);
+ if( w > (oldW) )
+ {
+ pointSize *= float(oldW) / float(w);
+ f.setPointSizeFloat(pointSize);
+ }
+ QPixmap pix(oldW, oldH);
+ pix.fill(Qt::white);
+ QPainter p(&pix);
+ p.setFont(f);
+ p.setPen(Qt::black);
+ p.drawText(pix.rect(), Qt::AlignCenter, uStr);
+ pix.setMask(pix.createHeuristicMask());
+ QImage img=pix.convertToImage();
+ // overlay
+ QImage overlayImg=icon.copy();
+ KIconEffect::overlay(overlayImg, img);
+ QPixmap newIcon;
+ newIcon.convertFromImage(overlayImg);
+ setPixmap(newIcon);
+}
+
+#include "komposesystray.moc"