Ported all process code from K3Process/K3ProcIO to KProcess based classes (see Proces...
[amarok.git] / src / collectionbrowser / CollectionTreeItemModelBase.h
blob1114805759cc050e0ca61ce06e47f09292e377b2
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>
21 #include <QMap>
22 #include <QPair>
23 #include <QSet>
24 #include <QTimeLine>
26 class CollectionTreeItem;
27 class Collection;
28 class QueryMaker;
29 typedef QPair<Collection*, CollectionTreeItem* > CollectionRoot;
31 namespace CategoryId
33 enum CatMenuId {
34 None = 0,
35 Album = QueryBuilder::tabAlbum,
36 Artist = QueryBuilder::tabArtist,
37 Composer = QueryBuilder::tabComposer,
38 Genre = QueryBuilder::tabGenre,
39 Year = QueryBuilder::tabYear
44 /**
45 @author Nikolaj Hald Nielsen <nhnFreespirit@gmail.com>
47 class AMAROK_EXPORT CollectionTreeItemModelBase : public QAbstractItemModel {
48 Q_OBJECT
50 public:
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 );
78 signals:
79 void expandIndex( const QModelIndex &index );
81 public slots:
83 virtual void queryDone();
84 virtual void newResultReady( const QString &collectionId, Meta::DataList data );
86 void slotFilter();
88 void slotCollapsed( const QModelIndex &index );
90 protected:
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;
105 class Private;
106 Private * const d;
108 QTimeLine *m_timeLine;
109 int m_animFrame;
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;
115 protected slots:
117 void loadingAnimationTick();
118 void update();
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;
130 #endif