playlist.h 3.38 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
    /** Set sorted = false to append the items at the end of the list rather
	than adding them into the list in their sorted place. */
    virtual void append(const QString &item, bool sorted = true);
    virtual void append(const QStringList &items, bool sorted = true);
38 39 40 41 42 43 44 45

    virtual void clearItems(const QPtrList<PlaylistItem> &items);

    QPtrList<PlaylistItem> selectedItems() const;

    void remove();
    void remove(const QPtrList<PlaylistItem> &items);

46 47 48
    /** Allow duplicate files in the playlist. */
    void setAllowDuplicates(bool allow);

49 50 51 52 53 54 55 56 57
    // 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();

58
protected:
59 60 61
    virtual QDragObject *dragObject();
    virtual void contentsDropEvent(QDropEvent *e);
    virtual void contentsDragMoveEvent(QDragMoveEvent *e);
62 63 64
    /** This is being used as a mini-factory of sorts to make the construction
	of PlaylistItems virtual. */
    virtual PlaylistItem *createItem(const QFileInfo &file);
65
    virtual void appendImpl(const QString &item, bool sorted = true);
66

67 68
private:
    void setup();
69
    void processEvents();
70 71 72 73 74 75

    QStringList extensions;
    QStringList members;
    QStringList artistList;
    QStringList albumList;
    int processed;
76 77
    bool collectionListChanged;
    bool allowDuplicates;
78 79 80 81 82

private slots:
    void emitSelected();

signals:
83 84
    /** This signal is connected to PlaylistItem::refreshed() in the 
	PlaylistItem class. */
85 86
    void dataChanged();

87 88 89 90
    /** 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();
91

92 93
    /** This is emitted when the playlist selection is changed.  This is used
	primarily to notify the TagEditor of the new data. */
94 95 96 97
    void selectionChanged(const QPtrList<PlaylistItem> &selection);
};

#endif