playlist.h 3.58 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 30 31 32 33
/***************************************************************************
                          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
public:
    Playlist(QWidget *parent = 0, const char *name = 0);
    virtual ~Playlist();

34 35 36 37
    virtual void save();
    virtual void saveAs();

    /** Set sorted = false to add the items at the end of the list rather
38
	than adding them into the list in their sorted place. */
39 40 41 42
    virtual void add(const QString &item, bool sorted = true);
    virtual void add(const QStringList &items, bool sorted = true);

    virtual void refresh();
43

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

46 47 48 49 50
    /** All of the files in the list. */
    QStringList files() const;
    /** All of the items in the list. */
    PlaylistItemList items() const;
    PlaylistItemList selectedItems() const;
51 52

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

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

58 59 60 61 62 63 64 65 66
    // These are used in a hard-core, encapsulation breaking way and should be
    // replaced soon (see PlaylistItem).  Unfortunately they're more efficient
    // than elegant solutions.  These also should be removed by doing the
    // checking that is currently done in PlaylistItem in the CollectionList
    // subclass of Playlist.

    QStringList &getArtistList();
    QStringList &getAlbumList();

67
protected:
68 69 70
    virtual QDragObject *dragObject();
    virtual void contentsDropEvent(QDropEvent *e);
    virtual void contentsDragMoveEvent(QDragMoveEvent *e);
71 72
    /** This is being used as a mini-factory of sorts to make the construction
	of PlaylistItems virtual. */
73 74
    virtual PlaylistItem *createItem(const QFileInfo &file, bool sorted = true);
    virtual void addImpl(const QString &item, bool sorted = true);
75

76 77
private:
    void setup();
78
    void processEvents();
79 80 81 82 83 84

    QStringList extensions;
    QStringList members;
    QStringList artistList;
    QStringList albumList;
    int processed;
85 86
    bool collectionListChanged;
    bool allowDuplicates;
87 88 89 90 91

private slots:
    void emitSelected();

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

96 97 98 99
    /** 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();
100

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

#endif