Chris@413: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@413: Chris@413: /* Chris@413: Sonic Visualiser Chris@413: An audio file viewer and annotation editor. Chris@413: Centre for Digital Music, Queen Mary, University of London. Chris@413: This file copyright 2008 QMUL. Chris@413: Chris@413: This program is free software; you can redistribute it and/or Chris@413: modify it under the terms of the GNU General Public License as Chris@413: published by the Free Software Foundation; either version 2 of the Chris@413: License, or (at your option) any later version. See the file Chris@413: COPYING included with this distribution for more information. Chris@413: */ Chris@413: Chris@413: #ifndef _MODEL_DATA_TABLE_MODEL_H_ Chris@413: #define _MODEL_DATA_TABLE_MODEL_H_ Chris@413: Chris@413: #include Chris@413: Chris@413: #include "Model.h" Chris@413: Chris@413: class ModelDataTableModel : public QAbstractItemModel Chris@413: { Chris@413: Q_OBJECT Chris@413: Chris@413: public: Chris@413: ModelDataTableModel(Model *m); Chris@413: virtual ~ModelDataTableModel(); Chris@413: Chris@413: QVariant data(const QModelIndex &index, int role) const; Chris@413: Chris@413: bool setData(const QModelIndex &index, const QVariant &value, int role); Chris@413: Chris@413: Qt::ItemFlags flags(const QModelIndex &index) const; Chris@413: Chris@413: QVariant headerData(int section, Qt::Orientation orientation, Chris@413: int role = Qt::DisplayRole) const; Chris@413: Chris@413: QModelIndex index(int row, int column, Chris@413: const QModelIndex &parent = QModelIndex()) const; Chris@413: Chris@413: QModelIndex parent(const QModelIndex &index) const; Chris@413: Chris@413: int rowCount(const QModelIndex &parent = QModelIndex()) const; Chris@413: int columnCount(const QModelIndex &parent = QModelIndex()) const; Chris@413: Chris@413: static bool canHandleModelType(Model *); Chris@413: Chris@413: protected slots: Chris@413: void modelChanged(); Chris@413: void modelChanged(size_t, size_t); Chris@413: Chris@413: protected: Chris@413: // We need to have some sort of map between row and time in sample Chris@413: // frames. I guess this will do for now. Chris@413: Chris@413: std::vector m_rows; // contains sample frame Chris@413: Chris@413: Model *m_model; Chris@413: Chris@413: void rebuildRowVector(); Chris@413: template void rebuildRowVectorSparse(); Chris@413: template QVariant dataSparse(int row, int col) const; Chris@413: }; Chris@413: Chris@413: #endif