Exemplo n.º 1
0
bool MusicLibraryProxyModel::filterAcceptsAlbum(const MusicLibraryItem *item) const
{
    foreach (const MusicLibraryItem *i, static_cast<const MusicLibraryItemContainer *>(item)->childItems()) {
        if (filterAcceptsSong(i)) {
            return true;
        }
    }

    return false;
}
Exemplo n.º 2
0
bool MusicLibraryProxyModel::filterAcceptsRoot(const MusicLibraryItem *item) const
{
    foreach (const MusicLibraryItem *i, static_cast<const MusicLibraryItemContainer *>(item)->childItems()) {
        if (MusicLibraryItem::Type_Artist==i->itemType() && filterAcceptsArtist(i)) {
            return true;
        } else if (MusicLibraryItem::Type_Song==i->itemType() && filterAcceptsSong(i)) {
            return true;
        }
    }

    return false;
}
Exemplo n.º 3
0
bool MusicLibraryProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
    if (!filterEnabled) {
        return true;
    }
    if (!isChildOfRoot(sourceParent)) {
        return true;
    }

    const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
    const MusicLibraryItem *item = static_cast<const MusicLibraryItem *>(index.internalPointer());

    if (!filterGenre.isEmpty() && !item->hasGenre(filterGenre)) {
        return false;
    }

    if (filter) {
        if (!sourceParent.isValid()) {
            // All top level items are valid
            return true;
        }

        const MusicLibraryItem *p=item->parentItem();
        while (p->parentItem()) {
            p=p->parentItem();
        }
        if (p!=filter) {
            // If item is not part of 'filter' tree - then we accept it
            return true;
        }
    }

    if (filterStrings.isEmpty()) {
        return true;
    }

    switch (item->itemType()) {
    case MusicLibraryItem::Type_Root:
        return filterAcceptsRoot(item);
    case MusicLibraryItem::Type_Artist:
        return filterAcceptsArtist(item);
    case MusicLibraryItem::Type_Album:
        return filterAcceptsAlbum(item);
    case MusicLibraryItem::Type_Song:
        return filterAcceptsSong(item);
    default:
        break;
    }

    return false;
}
Exemplo n.º 4
0
bool MusicLibraryProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
    if (!filterEnabled) {
        return true;
    }
    if (!isChildOfRoot(sourceParent)) {
        return true;
    }

    const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
    const MusicLibraryItem *item = static_cast<const MusicLibraryItem *>(index.internalPointer());

    if (!filterGenre.isEmpty() && !item->hasGenre(filterGenre)) {
        return false;
    }

    if (filter) {
        if (item==filter) { // Accept top-level item!
            return true;
        }
        const MusicLibraryItem *p=item->parentItem();
        while (p && p->parentItem()) {
            p=p->parentItem();
        }
        if (p!=filter) {  // Accept all items that are not children of top-level item!
            return true;
        }
    }

    if (filterStrings.isEmpty()) {
        return true;
    }

    switch (item->itemType()) {
    case MusicLibraryItem::Type_Root:
        return filterAcceptsRoot(item);
    case MusicLibraryItem::Type_Artist:
        return filterAcceptsArtist(item);
    case MusicLibraryItem::Type_Podcast:
    case MusicLibraryItem::Type_Album:
        return filterAcceptsAlbum(item);
    case MusicLibraryItem::Type_Song:
        return filterAcceptsSong(item);
    default:
        break;
    }

    return false;
}