Members of the KDE Community are recommended to subscribe to the kde-community mailing list at https://mail.kde.org/mailman/listinfo/kde-community to allow them to participate in important discussions and receive other important announcements

nowplaying.h 3.57 KB
Newer Older
1
/***************************************************************************
2 3 4
    begin                : Tue Nov 9 2004
    copyright            : (C) 2004 by Scott Wheeler
    email                : wheeler@kde.org
5 6 7 8 9 10 11 12 13 14 15 16 17 18
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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 NOWPLAYING_H
#define NOWPLAYING_H

19
#include <QWidget>
20
#include <QLabel>
21 22
#include <QPointer>
#include <QList>
23

24
#include "filehandle.h"
25
#include "playlistinterface.h"
26

27
class QTimer;
28
class QPoint;
29

30
class NowPlayingItem;
31
class PlaylistCollection;
32
class Playlist;
33 34 35 36 37 38

/**
 * This is the widget that holds all of the other items and handles updating them
 * when the playing item changes.
 */

39
class NowPlaying : public QWidget
40 41 42 43
{
    Q_OBJECT

public:
44
    NowPlaying(QWidget *parent, PlaylistCollection *collection);
45
    void addItem(NowPlayingItem *item);
46
    PlaylistCollection *collection() const;
47

48 49 50
public slots:
    void slotUpdate(const FileHandle &file);
    void slotReloadCurrentItem();
51

52 53 54
signals:
    void nowPlayingHidden();

55
private:
56 57 58 59 60 61
    struct Observer : public PlaylistObserver
    {
        Observer(NowPlaying *parent, PlaylistInterface *playlist) :
            PlaylistObserver(playlist),
            m_parent(parent) {}
        virtual void updateCurrent() {}
62
        virtual void updateData() { m_parent->slotReloadCurrentItem(); }
63 64
        NowPlaying *m_parent;
    };
65
    friend struct Observer;
66 67

    Observer m_observer;
68
    Observer m_collectionListObserver;
69
    PlaylistCollection *m_collection;
70
    QList<NowPlayingItem *> m_items;
71
    FileHandle m_file;
72
};
73

74 75 76
/**
 * Abstract base for the other NowPlaying items.
 */
77

78 79 80
class NowPlayingItem
{
public:
81
    virtual ~NowPlayingItem() {}
82
    virtual void update(const FileHandle &file) = 0;
83
    NowPlaying *parent() const { return m_parent; }
84
protected:
85 86 87
    NowPlayingItem(NowPlaying *parent) : m_parent(parent) { parent->addItem(this); }
private:
    NowPlaying *m_parent;
88 89 90 91 92 93 94 95 96 97 98 99
};

/**
 * 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);
100
    virtual void mouseReleaseEvent(QMouseEvent *event);
101

102 103 104 105
protected:
    virtual void dragEnterEvent(QDragEnterEvent *e);
    virtual void dropEvent(QDropEvent *e);

106 107 108
    virtual void mousePressEvent(QMouseEvent *e);
    virtual void mouseMoveEvent(QMouseEvent *e);

109 110
private:
    FileHandle m_file;
111 112
    bool m_dragging;
    QPoint m_dragStart;
113 114 115 116 117 118 119 120 121
};

/**
 * 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
{
122 123
    Q_OBJECT

124 125 126 127
public:
    TrackItem(NowPlaying *parent);
    virtual void update(const FileHandle &file);

128 129
private slots:
    void slotOpenLink(const QString &link);
130
    void slotUpdate();
131
    void slotClearShowMore();
132

133
private:
134
    FileHandle m_file;
135
    QLabel *m_label;
136 137
};

138
#endif
139 140

// vim: set et sw=4 tw=0 sta: