playlist.h 3.56 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
/***************************************************************************
                          playlist.h  -  description
                             -------------------
    begin                : Sat Feb 16 2002
    copyright            : (C) 2002 by Scott Wheeler
    email                : scott@slackorama.net
***************************************************************************/

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

#include <klistview.h>

#include <qstringlist.h>

#include "playlistitem.h"

class Playlist : public KListView
{
    Q_OBJECT
30

31 32
public:
    Playlist(QWidget *parent = 0, const char *name = 0);
33
    Playlist(const QFileInfo &playlistFile, QWidget *parent = 0, const char *name = 0);
34 35
    virtual ~Playlist();

36 37 38 39
    virtual void save();
    virtual void saveAs();
    virtual void refresh();
    virtual void clearItems(const PlaylistItemList &items);
40

41 42 43
    /** 
     * All of the (media) files in the list. 
     */
44
    QStringList files() const;
45 46 47
    /** 
     * All of the items in the list.
     */
48 49
    PlaylistItemList items() const;
    PlaylistItemList selectedItems() const;
50 51

    void remove();
52
    void remove(const PlaylistItemList &items);
53

54 55 56
    /** 
     * Allow duplicate files in the playlist. 
     */
57 58
    void setAllowDuplicates(bool allow);

59 60 61 62 63
    /** 
     * This is being used as a mini-factory of sorts to make the construction
     * of PlaylistItems virtual. 
     */
    virtual PlaylistItem *createItem(const QFileInfo &file, QListViewItem *after = 0);
64

65
    bool isInternalFile() const;
66 67 68 69 70 71 72 73
    QString fileName() const;

    // static methods

    /** 
     * This gets the next item to be played in the specified playlist.
     */
    static PlaylistItem *nextItem(PlaylistItem *current, bool random = false);
74

75
protected:
76 77 78
    virtual QDragObject *dragObject();
    virtual void contentsDropEvent(QDropEvent *e);
    virtual void contentsDragMoveEvent(QDragMoveEvent *e);
79

80 81 82 83 84
private:
    void setup();

    QStringList members;
    int processed;
85
    bool allowDuplicates;
86

87 88 89 90 91 92
    /**
     * If a file is "internal" it is not one that the user has yet chosen to 
     * save.  However for the purposes of being able to restore a user's 
     * loaded playlists it will be saved "internally" in:
     * $KDEHOME/share/apps/juk/playlists.
     */
93
    bool internalFile;
94
    QString playlistFileName;
95

96 97 98 99
private slots:
    void emitSelected();

signals:
100 101 102 103
    /** 
     * This signal is connected to PlaylistItem::refreshed() in the 
     * PlaylistItem class. 
     */
104
    void dataChanged();
105 106 107 108 109
    /** 
     * This signal is emitted when items are added to the collection list.  
     * This happens in the createItem() method when items are added to the 
     * collection. 
     */
110
    void collectionChanged();
111

112 113 114 115
    /** 
     * This is emitted when the playlist selection is changed.  This is used
     * primarily to notify the TagEditor of the new data. 
     */
116
    void selectionChanged(const PlaylistItemList &selection);
117
    void fileNameChanged(const QString &fileName);
118 119 120
};

#endif