/*************************************************************************** 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 #include #include #include class FlickerFreeLabel; class TQTimer; class TQVBox; 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 */ class PassiveInfo : public KPassivePopup { Q_OBJECT public: PassiveInfo(TQWidget *parent = 0, const char *name = 0); public slots: void setTimeout(int delay); virtual void show(); signals: void mouseEntered(); void timeExpired(); protected: virtual void enterEvent(TQEvent *); virtual void leaveEvent(TQEvent *); private slots: void timerExpired(); private: TQTimer *m_timer; bool m_justDie; }; class SystemTray : public KSystemTray { Q_OBJECT public: SystemTray(TQWidget *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(TQWheelEvent *e); void createPopup(); void setToolTip(const TQString &tip = TQString(), const TQPixmap &cover = TQPixmap()); void mousePressEvent(TQMouseEvent *e); TQPixmap createPixmap(const TQString &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(TQWidget *parent); // Creates the widget layout for the popup, returning the TQVBox that // holds the text labels. Uses buttonsToLeft() to figure out which // order to create them in. @p file is used to grab the cover. TQVBox *createPopupLayout(TQWidget *parent, const FileHandle &file); void addSeparatorLine(TQWidget *parent); void addCoverButton(TQWidget *parent, const TQPixmap &cover); // Interpolates from start color to end color. If @p step == 0, then // m_startColor is returned, while @p step == @steps returns // m_endColor. TQColor 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: TQPixmap m_playPix; TQPixmap m_pausePix; TQPixmap m_currentPix; TQPixmap m_backPix; TQPixmap m_forwardPix; TQPixmap m_appPix; TQColor m_startColor, m_endColor; PassiveInfo *m_popup; TQValueVector m_labels; TQTimer *m_fadeTimer; int m_step; bool m_fade; }; #endif // SYSTEMTRAY_H