summaryrefslogtreecommitdiffstats
path: root/juk/systemtray.h
diff options
context:
space:
mode:
Diffstat (limited to 'juk/systemtray.h')
-rw-r--r--juk/systemtray.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/juk/systemtray.h b/juk/systemtray.h
new file mode 100644
index 00000000..8dd66a62
--- /dev/null
+++ b/juk/systemtray.h
@@ -0,0 +1,133 @@
+/***************************************************************************
+ copyright : (C) 2002 by Daniel Molkentin
+ email : molkentin@kde.org
+
+ copyright : (C) 2002 - 2004 by Scott Wheeler
+ email : wheeler@kde.org
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef SYSTEMTRAY_H
+#define SYSTEMTRAY_H
+
+#include <ksystemtray.h>
+#include <kpassivepopup.h>
+
+#include <qvaluevector.h>
+#include <qcolor.h>
+
+class FlickerFreeLabel;
+class QTimer;
+class QVBox;
+class FileHandle;
+
+/**
+ * Subclass of KPassivePopup intended to more easily support JuK's particular
+ * usage pattern, including things like staying open while under the mouse.
+ *
+ * @author Michael Pyne <michael.pyne@kdemail.net>
+ */
+class PassiveInfo : public KPassivePopup
+{
+ Q_OBJECT
+public:
+ PassiveInfo(QWidget *parent = 0, const char *name = 0);
+
+public slots:
+ void setTimeout(int delay);
+ virtual void show();
+
+signals:
+ void mouseEntered();
+ void timeExpired();
+
+protected:
+ virtual void enterEvent(QEvent *);
+ virtual void leaveEvent(QEvent *);
+
+private slots:
+ void timerExpired();
+
+private:
+ QTimer *m_timer;
+ bool m_justDie;
+};
+
+class SystemTray : public KSystemTray
+{
+ Q_OBJECT
+
+public:
+ SystemTray(QWidget *parent = 0, const char *name = 0);
+ virtual ~SystemTray();
+
+signals:
+ // Emitted when the fade process is complete.
+ void fadeDone();
+
+private:
+ static const int STEPS = 20; ///< Number of intermediate steps for fading.
+
+ virtual void wheelEvent(QWheelEvent *e);
+ void createPopup();
+ void setToolTip(const QString &tip = QString::null, const QPixmap &cover = QPixmap());
+ void mousePressEvent(QMouseEvent *e);
+ QPixmap createPixmap(const QString &pixName);
+
+ // Returns true if the popup will need to have its buttons on the left
+ // (because the JuK icon is on the left side of the screen.
+ bool buttonsToLeft() const;
+
+ void createButtonBox(QWidget *parent);
+
+ // Creates the widget layout for the popup, returning the QVBox that
+ // holds the text labels. Uses buttonsToLeft() to figure out which
+ // order to create them in. @p file is used to grab the cover.
+ QVBox *createPopupLayout(QWidget *parent, const FileHandle &file);
+
+ void addSeparatorLine(QWidget *parent);
+ void addCoverButton(QWidget *parent, const QPixmap &cover);
+
+ // Interpolates from start color to end color. If @p step == 0, then
+ // m_startColor is returned, while @p step == @steps returns
+ // m_endColor.
+ QColor interpolateColor(int step, int steps = STEPS);
+
+private slots:
+ void slotPlay();
+ void slotTogglePopup();
+ void slotPause() { setPixmap(m_pausePix); }
+ void slotStop();
+ void slotPopupDestroyed();
+ void slotNextStep(); ///< This is the fading routine.
+ void slotPopupLargeCover();
+ void slotForward();
+ void slotBack();
+ void slotFadeOut(); ///< Fades out the text
+ void slotMouseInPopup(); ///< Forces the text back to its normal color.
+
+private:
+ QPixmap m_playPix;
+ QPixmap m_pausePix;
+ QPixmap m_currentPix;
+ QPixmap m_backPix;
+ QPixmap m_forwardPix;
+ QPixmap m_appPix;
+ QColor m_startColor, m_endColor;
+
+ PassiveInfo *m_popup;
+ QValueVector<FlickerFreeLabel *> m_labels;
+ QTimer *m_fadeTimer;
+ int m_step;
+ bool m_fade;
+};
+
+#endif // SYSTEMTRAY_H