playlist.h 3.36 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
    // "File Menu" like operations.  "Open" is the constructor above.

38 39 40 41
    virtual void save();
    virtual void saveAs();

    virtual void refresh();
42

43
    virtual void clearItems(const PlaylistItemList &items);
44

45 46 47 48 49
    /** All of the files in the list. */
    QStringList files() const;
    /** All of the items in the list. */
    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. */
    void setAllowDuplicates(bool allow);

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

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

64 65 66
    bool isInternalFile() const;
    QString file() const;

67
protected:
68 69 70
    virtual QDragObject *dragObject();
    virtual void contentsDropEvent(QDropEvent *e);
    virtual void contentsDragMoveEvent(QDragMoveEvent *e);
71

72 73 74 75 76
private:
    void setup();

    QStringList members;
    int processed;
77
    bool allowDuplicates;
78

79 80 81 82 83 84 85 86
    // 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.

    bool internalFile;
    QString fileName;

87 88 89 90
private slots:
    void emitSelected();

signals:
91 92
    /** This signal is connected to PlaylistItem::refreshed() in the 
	PlaylistItem class. */
93 94
    void dataChanged();

95 96 97 98
    /** 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. */
    void collectionChanged();
99

100 101
    /** This is emitted when the playlist selection is changed.  This is used
	primarily to notify the TagEditor of the new data. */
102
    void selectionChanged(const PlaylistItemList &selection);
103 104 105
};

#endif