![]() |
Mixxx
|
00001 #ifndef TRACKMODEL_H 00002 #define TRACKMODEL_H 00003 00004 #include <QList> 00005 #include <QLinkedList> 00006 #include <QItemDelegate> 00007 #include <QtSql> 00008 00009 #include "trackinfoobject.h" 00010 #include "library/dao/settingsdao.h" 00011 00014 class TrackModel { 00015 public: 00016 TrackModel(QSqlDatabase db, 00017 QString settingsNamespace) 00018 : m_db(db), 00019 m_settingsNamespace(settingsNamespace), 00020 m_iDefaultSortColumn(-1), 00021 m_eDefaultSortOrder(Qt::AscendingOrder) { 00022 } 00023 virtual ~TrackModel() {} 00024 00025 enum Capabilities { 00026 TRACKMODELCAPS_NONE = 0x0000, 00027 TRACKMODELCAPS_REORDER = 0x0001, 00028 TRACKMODELCAPS_RECEIVEDROPS = 0x0002, 00029 TRACKMODELCAPS_ADDTOPLAYLIST = 0x0004, 00030 TRACKMODELCAPS_ADDTOCRATE = 0x0008, 00031 TRACKMODELCAPS_ADDTOAUTODJ = 0x0010, 00032 TRACKMODELCAPS_LOCKED = 0x0020, 00033 TRACKMODELCAPS_RELOADMETADATA = 0x0040, 00034 TRACKMODELCAPS_LOADTODECK = 0x0080, 00035 TRACKMODELCAPS_LOADTOSAMPLER = 0x0100, 00036 TRACKMODELCAPS_REMOVE = 0x0200, 00037 TRACKMODELCAPS_RELOCATE = 0x0400, 00038 }; 00039 00040 typedef int CapabilitiesFlags; 00042 // Deserialize and return the track at the given QModelIndex in this result 00043 // set. 00044 virtual TrackPointer getTrack(const QModelIndex& index) const = 0; 00045 00046 // Gets the on-disk location of the track at the given location. 00047 virtual QString getTrackLocation(const QModelIndex& index) const = 0; 00048 00049 // Gets the track ID of the track at the given QModelIndex 00050 virtual int getTrackId(const QModelIndex& index) const = 0; 00051 00052 // Gets the row of the track in the current result set. Returns -1 if the 00053 // track ID is not present in the result set. 00054 virtual const QLinkedList<int> getTrackRows(int trackId) const = 0; 00055 00056 bool isTrackModel() { return true;} 00057 virtual void search(const QString& searchText) = 0; 00058 virtual const QString currentSearch() const = 0; 00059 virtual bool isColumnInternal(int column) = 0; 00060 // if no header state exists, we may hide some columns so that the user can 00061 // reactivate them 00062 virtual bool isColumnHiddenByDefault(int column) = 0; 00063 virtual const QList<int>& showableColumns() const { return m_emptyColumns; } 00064 virtual const QList<int>& searchColumns() const { return m_emptyColumns; } 00065 virtual void removeTrack(const QModelIndex& index) { 00066 Q_UNUSED(index); 00067 } 00068 virtual void removeTracks(const QModelIndexList& indices) { 00069 Q_UNUSED(indices); 00070 } 00071 virtual bool addTrack(const QModelIndex& index, QString location) { 00072 Q_UNUSED(index); 00073 Q_UNUSED(location); 00074 return false; 00075 } 00076 virtual void moveTrack(const QModelIndex& sourceIndex, 00077 const QModelIndex& destIndex) { 00078 Q_UNUSED(sourceIndex); 00079 Q_UNUSED(destIndex); 00080 } 00081 virtual QItemDelegate* delegateForColumn(const int i) { 00082 Q_UNUSED(i); 00083 return NULL; 00084 } 00085 virtual TrackModel::CapabilitiesFlags getCapabilities() const { 00086 return TRACKMODELCAPS_NONE; 00087 } 00088 virtual QString getModelSetting(QString name) { 00089 SettingsDAO settings(m_db); 00090 QString key = m_settingsNamespace + "." + name; 00091 return settings.getValue(key); 00092 } 00093 00094 virtual bool setModelSetting(QString name, QVariant value) { 00095 SettingsDAO settings(m_db); 00096 QString key = m_settingsNamespace + "." + name; 00097 return settings.setValue(key, value); 00098 } 00099 00100 virtual int defaultSortColumn() const { 00101 return m_iDefaultSortColumn; 00102 } 00103 00104 virtual Qt::SortOrder defaultSortOrder() const { 00105 return m_eDefaultSortOrder; 00106 } 00107 00108 virtual void setDefaultSort(int sortColumn, Qt::SortOrder sortOrder) { 00109 m_iDefaultSortColumn = sortColumn; 00110 m_eDefaultSortOrder = sortOrder; 00111 } 00112 00113 private: 00114 QSqlDatabase m_db; 00115 QString m_settingsNamespace; 00116 QList<int> m_emptyColumns; 00117 int m_iDefaultSortColumn; 00118 Qt::SortOrder m_eDefaultSortOrder; 00119 }; 00120 00121 #endif