/** * Copyright (C) 2004 Scott Wheeler * * 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. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ #ifndef NOWPLAYING_H #define NOWPLAYING_H #include #include #include #include #include "filehandle.h" #include "playlistinterface.h" class QTimer; class QPoint; class NowPlayingItem; class PlaylistCollection; class Playlist; /** * This is the widget that holds all of the other items and handles updating them * when the playing item changes. */ class NowPlaying : public QWidget { Q_OBJECT public: NowPlaying(QWidget *parent, PlaylistCollection *collection); void addItem(NowPlayingItem *item); PlaylistCollection *collection() const; public slots: void slotUpdate(const FileHandle &file); void slotReloadCurrentItem(); signals: void nowPlayingHidden(); private: struct Observer : public PlaylistObserver { Observer(NowPlaying *parent, PlaylistInterface *playlist) : PlaylistObserver(playlist), m_parent(parent) {} virtual void updateCurrent() {} virtual void updateData() { m_parent->slotReloadCurrentItem(); } NowPlaying *m_parent; }; friend struct Observer; Observer m_observer; Observer m_collectionListObserver; PlaylistCollection *m_collection; QList m_items; FileHandle m_file; }; /** * Abstract base for the other NowPlaying items. */ class NowPlayingItem { public: virtual ~NowPlayingItem() {} virtual void update(const FileHandle &file) = 0; NowPlaying *parentManager() const { return m_parent; } protected: NowPlayingItem(NowPlaying *parent) : m_parent(parent) { parent->addItem(this); } private: NowPlaying *m_parent; }; /** * Displays the cover of the currently playing file if available, or hides * itself if not. */ class CoverItem : public QLabel, public NowPlayingItem { public: CoverItem(NowPlaying *parent); virtual void update(const FileHandle &file); virtual void mouseReleaseEvent(QMouseEvent *event); protected: virtual void dragEnterEvent(QDragEnterEvent *e); virtual void dropEvent(QDropEvent *e); virtual void mousePressEvent(QMouseEvent *e); virtual void mouseMoveEvent(QMouseEvent *e); private: FileHandle m_file; bool m_dragging; QPoint m_dragStart; }; /** * Show the text information on the current track and provides links to the * album and artist of the currently playing item. */ class TrackItem : public QWidget, public NowPlayingItem { Q_OBJECT public: TrackItem(NowPlaying *parent); virtual void update(const FileHandle &file); private slots: void slotOpenLink(const QString &link); void slotUpdate(); void slotClearShowMore(); private: FileHandle m_file; QLabel *m_label; }; #endif // vim: set et sw=4 tw=0 sta: