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

dynamicplaylist.cpp 3.72 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/***************************************************************************
                          dynamicplaylist.h
                             -------------------
    begin                : Mon May 5 2003
    copyright            : (C) 2003 by Scott Wheeler
    email                : wheeler@kde.org
***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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.                                   *
 *                                                                         *
 ***************************************************************************/

18 19
#include <kdebug.h>

20 21 22 23 24 25 26 27 28 29 30 31
#include "dynamicplaylist.h"
#include "collectionlist.h"

////////////////////////////////////////////////////////////////////////////////
// public methods
////////////////////////////////////////////////////////////////////////////////

DynamicPlaylist::DynamicPlaylist(const PlaylistList &playlists, QWidget *parent, const QString &name) :
    Playlist(parent, name),
    m_playlists(playlists),
    m_dirty(true)
{
32 33
    setSorting(columns() + 1);

34 35 36
    for(PlaylistList::ConstIterator it = m_playlists.begin(); it != m_playlists.end(); ++it) {
        if(*it) {
            connect(*it, SIGNAL(signalDataChanged()), this, SLOT(slotSetDirty()));
37
            connect(*it, SIGNAL(signalCountChanged(Playlist *)), this, SLOT(slotSetDirty()));
38 39 40 41
        }
        else
            m_playlists.remove(*it);
    }
42
    connect(CollectionList::instance(), SIGNAL(signalCollectionChanged()), this, SLOT(slotSetDirty()));
43 44
}

45 46 47 48 49 50 51 52 53 54 55 56
////////////////////////////////////////////////////////////////////////////////
// public slots
////////////////////////////////////////////////////////////////////////////////

void DynamicPlaylist::slotReload()
{
    for(PlaylistList::Iterator it = m_playlists.begin(); it != m_playlists.end(); ++it)
	(*it)->slotReload();

    checkUpdateItems();
}

57 58 59 60
////////////////////////////////////////////////////////////////////////////////
// protected methods
////////////////////////////////////////////////////////////////////////////////

61
PlaylistItemList DynamicPlaylist::items()
62
{
63 64
    checkUpdateItems();
    return Playlist::items();
65 66 67
}

void DynamicPlaylist::showEvent(QShowEvent *e)
68 69 70 71 72
{
    checkUpdateItems();
    Playlist::showEvent(e);
}

73
void DynamicPlaylist::updateItems()
74
{
75 76 77 78 79 80 81 82 83 84
    PlaylistItemList siblings;

    for(PlaylistList::ConstIterator it = m_playlists.begin(); it != m_playlists.end(); ++it)
        siblings += (*it)->items();


    PlaylistItemList newSiblings = siblings;
    if(m_siblings != newSiblings) {
	m_siblings = newSiblings;
        QTimer::singleShot(0, this, SLOT(slotUpdateItems()));
85
    }
86 87 88 89 90 91 92 93 94 95 96 97 98
}

////////////////////////////////////////////////////////////////////////////////
// private methods
////////////////////////////////////////////////////////////////////////////////

void DynamicPlaylist::checkUpdateItems()
{
    if(!m_dirty)
	return;

    updateItems();

99
    m_dirty = false;
100 101
}

102 103 104 105 106 107 108 109 110 111
////////////////////////////////////////////////////////////////////////////////
// private slots
////////////////////////////////////////////////////////////////////////////////

void DynamicPlaylist::slotUpdateItems()
{
    // This should be optimized to check to see which items are already in the
    // list and just adding those and removing the ones that aren't.

    clear();
112
    createItems(m_siblings);
113 114
}

115
#include "dynamicplaylist.moc"