1 /******************************************************************************
2 * copyright: (c) 2007 Alexandre Pereira de Oliveira <aleprj@gmail.com> *
3 * (c) 2007 Maximilian Kossick <maximilian.kossick@googlemail.com> *
4 * (c) 2007 Nikolaj Hald Nielsen <nhnFreespirit@gmail.com> *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License version 2 *
7 * as published by the Free Software Foundation. *
8 ******************************************************************************/
11 #ifndef COLLECTIONTREEITEMMODELBASE_H
12 #define COLLECTIONTREEITEMMODELBASE_H
14 #include "amarok_export.h"
16 #include "../querybuilder.h"
17 #include "meta/Meta.h"
20 #include <QAbstractItemModel>
26 class CollectionTreeItem
;
29 typedef QPair
<Collection
*, CollectionTreeItem
* > CollectionRoot
;
35 Album
= QueryBuilder::tabAlbum
,
36 Artist
= QueryBuilder::tabArtist
,
37 Composer
= QueryBuilder::tabComposer
,
38 Genre
= QueryBuilder::tabGenre
,
39 Year
= QueryBuilder::tabYear
45 @author Nikolaj Hald Nielsen <nhnFreespirit@gmail.com>
47 class AMAROK_EXPORT CollectionTreeItemModelBase
: public QAbstractItemModel
{
52 CollectionTreeItemModelBase( );
53 virtual ~CollectionTreeItemModelBase();
55 virtual Qt::ItemFlags
flags(const QModelIndex
&index
) const;
56 virtual QVariant
headerData(int section
, Qt::Orientation orientation
,
57 int role
= Qt::DisplayRole
) const;
58 virtual QModelIndex
index(int row
, int column
,
59 const QModelIndex
&parent
= QModelIndex()) const;
60 virtual QModelIndex
parent(const QModelIndex
&index
) const;
61 virtual int rowCount(const QModelIndex
&parent
= QModelIndex()) const;
62 virtual int columnCount(const QModelIndex
&parent
= QModelIndex()) const;
64 virtual QStringList
mimeTypes() const;
65 virtual QMimeData
* mimeData( const QModelIndexList
&indices
) const;
67 virtual QPixmap
iconForLevel( int level
) const;
68 virtual void listForLevel( int level
, QueryMaker
*qm
, CollectionTreeItem
* parent
) const;
71 virtual void setLevels( const QList
<int> &levelType
) = 0;
72 virtual QList
<int> levels() const { return m_levelType
; }
74 virtual void addFilters( QueryMaker
*qm
) const;
76 void setCurrentFilter( const QString
&filter
);
79 void expandIndex( const QModelIndex
&index
);
83 virtual void queryDone();
84 virtual void newResultReady( const QString
&collectionId
, Meta::DataList data
);
88 void slotCollapsed( const QModelIndex
&index
);
92 virtual void populateChildren(const Meta::DataList
&dataList
, CollectionTreeItem
*parent
) const;
93 virtual void ensureChildrenLoaded( CollectionTreeItem
*item
) const = 0;
94 virtual void updateHeaderText();
95 virtual QString
nameForLevel( int level
) const;
97 virtual void filterChildren() = 0;
99 void handleCompilations( CollectionTreeItem
*parent
) const;
101 QString m_headerText
;
102 CollectionTreeItem
*m_rootItem
;
103 QList
<int> m_levelType
;
108 QTimeLine
*m_timeLine
;
110 QPixmap m_loading1
, m_loading2
, m_currentAnimPixmap
; //icons for loading animation
112 QString m_currentFilter
;
113 QSet
<Meta::DataPtr
> m_expandedItems
;
114 QSet
<Collection
*> m_expandedCollections
;
117 void loadingAnimationTick();
123 struct CollectionTreeItemModelBase::Private
125 QMap
<QString
, CollectionRoot
> m_collections
; //I'll concide this one... :-)
126 QMap
<QueryMaker
* , CollectionTreeItem
* > m_childQueries
;
127 QMap
<QueryMaker
* , CollectionTreeItem
* > m_compilationQueries
;