Mixxx

/home/maxime/Projets/Mixxx/1.10/mixxx/src/library/trackmodel.h

Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines