annotate data/model/ModelDataTableModel.h @ 534:6038cb6fcd30

* Some simple compression for dense 3d models that actually represent multirate data such as wavelet transform outputs. If a column has many elements at top or bottom that are the same as those of an earlier column, store a reference to that one and truncate the duplicate values.
author Chris Cannam
date Fri, 23 Jan 2009 13:31:51 +0000
parents ba7aaacb7211
children b1dc68507e46
rev   line source
Chris@413 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@413 2
Chris@413 3 /*
Chris@413 4 Sonic Visualiser
Chris@413 5 An audio file viewer and annotation editor.
Chris@413 6 Centre for Digital Music, Queen Mary, University of London.
Chris@413 7 This file copyright 2008 QMUL.
Chris@413 8
Chris@413 9 This program is free software; you can redistribute it and/or
Chris@413 10 modify it under the terms of the GNU General Public License as
Chris@413 11 published by the Free Software Foundation; either version 2 of the
Chris@413 12 License, or (at your option) any later version. See the file
Chris@413 13 COPYING included with this distribution for more information.
Chris@413 14 */
Chris@413 15
Chris@413 16 #ifndef _MODEL_DATA_TABLE_MODEL_H_
Chris@413 17 #define _MODEL_DATA_TABLE_MODEL_H_
Chris@413 18
Chris@413 19 #include <QAbstractItemModel>
Chris@413 20
Chris@420 21 #include <vector>
Chris@413 22
Chris@420 23 class TabularModel;
Chris@416 24 class Command;
Chris@416 25
Chris@413 26 class ModelDataTableModel : public QAbstractItemModel
Chris@413 27 {
Chris@413 28 Q_OBJECT
Chris@413 29
Chris@413 30 public:
Chris@420 31 ModelDataTableModel(TabularModel *m);
Chris@413 32 virtual ~ModelDataTableModel();
Chris@413 33
Chris@413 34 QVariant data(const QModelIndex &index, int role) const;
Chris@413 35
Chris@413 36 bool setData(const QModelIndex &index, const QVariant &value, int role);
Chris@413 37
Chris@427 38 bool insertRow(int row, const QModelIndex &parent = QModelIndex());
Chris@427 39 bool removeRow(int row, const QModelIndex &parent = QModelIndex());
Chris@427 40
Chris@413 41 Qt::ItemFlags flags(const QModelIndex &index) const;
Chris@413 42
Chris@413 43 QVariant headerData(int section, Qt::Orientation orientation,
Chris@413 44 int role = Qt::DisplayRole) const;
Chris@413 45
Chris@413 46 QModelIndex index(int row, int column,
Chris@413 47 const QModelIndex &parent = QModelIndex()) const;
Chris@413 48
Chris@413 49 QModelIndex parent(const QModelIndex &index) const;
Chris@413 50
Chris@413 51 int rowCount(const QModelIndex &parent = QModelIndex()) const;
Chris@413 52 int columnCount(const QModelIndex &parent = QModelIndex()) const;
Chris@413 53
Chris@416 54 QModelIndex getModelIndexForFrame(size_t frame) const;
Chris@419 55 size_t getFrameForModelIndex(const QModelIndex &) const;
Chris@416 56
Chris@420 57 void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
Chris@413 58
Chris@428 59 void setCurrentRow(int row);
Chris@428 60 int getCurrentRow();
Chris@428 61
Chris@416 62 signals:
Chris@416 63 void frameSelected(size_t);
Chris@427 64 void addCommand(Command *);
Chris@428 65 void currentChanged(const QModelIndex &);
Chris@454 66 void modelRemoved();
Chris@416 67
Chris@413 68 protected slots:
Chris@413 69 void modelChanged();
Chris@413 70 void modelChanged(size_t, size_t);
Chris@454 71 void modelAboutToBeDeleted();
Chris@413 72
Chris@413 73 protected:
Chris@420 74 TabularModel *m_model;
Chris@420 75 int m_sortColumn;
Chris@420 76 Qt::SortOrder m_sortOrdering;
Chris@428 77 int m_currentRow;
Chris@420 78 typedef std::vector<int> RowList;
Chris@426 79 mutable RowList m_sort;
Chris@426 80 mutable RowList m_rsort;
Chris@426 81 int getSorted(int row) const;
Chris@426 82 int getUnsorted(int row) const;
Chris@426 83 void resort() const;
Chris@426 84 void resortNumeric() const;
Chris@426 85 void resortAlphabetical() const;
Chris@428 86 void clearSort();
Chris@413 87 };
Chris@413 88
Chris@413 89 #endif