~daschuer/mixxx/features_setlog

« back to all changes in this revision

Viewing changes to mixxx/src/library/basesqltablemodel.h

  • Committer: daschuer at gmx
  • Date: 2011-10-04 20:29:10 UTC
  • mfrom: (2840.1.15 mixxx-trunk)
  • Revision ID: daschuer@gmx.de-20111004202910-8pktjwu7f51xl515
merged with lp:mixxx

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
#include <QtGui>
9
9
#include <QtSql>
10
10
 
 
11
#include "library/basetrackcache.h"
 
12
#include "library/dao/trackdao.h"
11
13
#include "library/trackcollection.h"
12
 
#include "library/dao/trackdao.h"
 
14
#include "library/trackmodel.h"
 
15
 
 
16
#include "util.h"
13
17
 
14
18
// BaseSqlTableModel is a custom-written SQL-backed table which aggressively
15
19
// caches the contents of the table and supports lightweight updates.
16
 
class BaseSqlTableModel : public QAbstractTableModel {
 
20
class BaseSqlTableModel : public QAbstractTableModel, public TrackModel {
17
21
    Q_OBJECT
18
22
  public:
19
23
    BaseSqlTableModel(QObject* pParent,
20
24
                      TrackCollection* pTrackCollection,
21
 
                      QSqlDatabase db);
 
25
                      QSqlDatabase db, QString settingsNamespace);
22
26
    virtual ~BaseSqlTableModel();
23
27
 
24
28
    ////////////////////////////////////////////////////////////////////////////
34
38
                               const QVariant &value, int role=Qt::EditRole);
35
39
    virtual QVariant headerData(int section, Qt::Orientation orientation,
36
40
                                int role=Qt::DisplayRole) const;
 
41
    virtual QMimeData* mimeData(const QModelIndexList &indexes) const;
37
42
 
38
43
    ////////////////////////////////////////////////////////////////////////////
39
44
    // Other public methods
40
45
    ////////////////////////////////////////////////////////////////////////////
41
46
 
42
47
    virtual void search(const QString& searchText, const QString extraFilter=QString());
43
 
    virtual QString currentSearch() const;
 
48
    virtual void setSearch(const QString& searchText, const QString extraFilter=QString());
 
49
    virtual const QString currentSearch() const;
44
50
    virtual void setSort(int column, Qt::SortOrder order);
45
51
    virtual int fieldIndex(const QString& fieldName) const;
46
52
    virtual void select();
 
53
    virtual int getTrackId(const QModelIndex& index) const;
 
54
    virtual QString getTrackLocation(const QModelIndex& index) const;
47
55
 
48
56
  protected:
49
57
    // Returns the row of trackId in this result set. If trackId is not present,
51
59
    virtual const QLinkedList<int> getTrackRows(int trackId) const;
52
60
 
53
61
    virtual void setTable(const QString& tableName,
54
 
                          const QStringList& columnNames,
55
 
                          const QString& idColumn,
56
 
                          const QStringList tableColumns = QStringList());
57
 
 
58
 
    virtual void buildIndex();
 
62
                          const QString& trackIdColumn,
 
63
                          const QStringList& tableColumns,
 
64
                          QSharedPointer<BaseTrackCache> trackSource);
59
65
    QSqlDatabase database() const;
60
66
 
61
67
    /** Use this if you want a model that is read-only. */
68
74
    // Set the columns used for searching. Names must correspond to the column
69
75
    // names in the table provided to setTable. Must be called after setTable is
70
76
    // called.
71
 
    virtual void setSearchColumns(const QStringList& searchColumns);
72
77
    virtual QString orderByClause() const;
73
 
    virtual QString filterClause() const;
74
78
    virtual void initHeaderData();
75
 
    void setCaching(bool isActive);
76
 
    virtual void initDefaultSearchColumns();
77
 
 
78
 
    virtual void updateTrackInIndex(int trackId);
79
 
    virtual void updateTracksInIndex(QList<int> trackIds);
80
79
 
81
80
  private slots:
82
 
    void trackChanged(int trackId);
83
 
    void trackClean(int trackId);
 
81
    void tracksChanged(QSet<int> trackIds);
84
82
 
85
83
  private:
86
 
    inline TrackPointer lookupCachedTrack(int trackId) const;
87
 
    inline QVariant getTrackValueForColumn(TrackPointer pTrack, int column) const;
88
 
    inline QVariant getTrackValueForColumn(int trackId, int column,
89
 
                                           TrackPointer pTrack=TrackPointer()) const;
90
84
    inline void setTrackValueForColumn(TrackPointer pTrack, int column, QVariant value);
91
85
    QVariant getBaseValue(const QModelIndex& index, int role = Qt::DisplayRole) const;
92
86
 
93
 
    virtual int compareColumnValues(int iColumnNumber, Qt::SortOrder eSortOrder, QVariant val1, QVariant val2);
94
 
    virtual int findSortInsertionPoint(int trackId, TrackPointer pTrack,
95
 
                                       const QVector<QPair<int, QHash<int, QVariant> > >& rowInfo);
96
 
    bool m_isCachedModel;
 
87
    struct RowInfo {
 
88
        int trackId;
 
89
        int order;
 
90
        QHash<int, QVariant> metadata;
 
91
 
 
92
        bool operator<(const RowInfo& other) const {
 
93
            // -1 is greater than anything
 
94
            if (order == -1) {
 
95
                return false;
 
96
            } else if (other.order == -1) {
 
97
                return true;
 
98
            }
 
99
            return order < other.order;
 
100
        }
 
101
    };
 
102
 
97
103
    QString m_tableName;
98
 
    QStringList m_columnNames;
99
 
    QString m_columnNamesJoined;
100
 
    QHash<QString, int> m_columnIndex;
101
 
    QSet<QString> m_tableColumns;
 
104
    QString m_idColumn;
 
105
    QSharedPointer<BaseTrackCache> m_trackSource;
 
106
    QStringList m_tableColumns;
102
107
    QString m_tableColumnsJoined;
103
 
    QSet<int> m_tableColumnIndices;
104
 
 
105
 
    QStringList m_searchColumns;
106
 
    QVector<int> m_searchColumnIndices;
107
 
    QString m_idColumn;
 
108
    QHash<QString, int> m_tableColumnIndex;
108
109
 
109
110
    int m_iSortColumn;
110
111
    Qt::SortOrder m_eSortOrder;
111
112
 
112
113
    bool m_bInitialized;
113
 
    bool m_bIndexBuilt;
 
114
    bool m_bDirty;
114
115
    QSqlRecord m_queryRecord;
115
 
    QHash<int, QVector<QVariant> > m_recordCache;
116
 
    QVector<QPair<int, QHash<int, QVariant> > > m_rowInfo;
 
116
    QVector<RowInfo> m_rowInfo;
 
117
    QHash<int, int> m_trackSortOrder;
117
118
    QHash<int, QLinkedList<int> > m_trackIdToRows;
118
 
    QSet<int> m_trackOverrides;
119
119
 
120
120
    QString m_currentSearch;
121
121
    QString m_currentSearchFilter;
125
125
    TrackCollection* m_pTrackCollection;
126
126
    TrackDAO& m_trackDAO;
127
127
    QSqlDatabase m_database;
 
128
 
 
129
    DISALLOW_COPY_AND_ASSIGN(BaseSqlTableModel);
128
130
};
129
131
 
130
132
#endif /* BASESQLTABLEMODEL_H */