annotate data/model/ModelDataTableModel.h @ 986:e8e6c4e7437b

Correct some really stupid fixed-length string stuff, including a genuine stack overflow that causes a crash on OS/X for certain colour 3d plot data.
author Chris Cannam
date Mon, 29 Sep 2014 13:27:13 +0100
parents cd42620e3f40
children cc27f35aa75c
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@929 54 QModelIndex getModelIndexForFrame(int frame) const;
Chris@929 55 int getFrameForModelIndex(const QModelIndex &) const;
Chris@416 56
Chris@420 57 void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
Chris@413 58
Chris@618 59 QModelIndex findText(QString text) const;
Chris@618 60
Chris@428 61 void setCurrentRow(int row);
Chris@618 62 int getCurrentRow() const;
Chris@428 63
Chris@416 64 signals:
Chris@929 65 void frameSelected(int);
Chris@427 66 void addCommand(Command *);
Chris@428 67 void currentChanged(const QModelIndex &);
Chris@454 68 void modelRemoved();
Chris@416 69
Chris@413 70 protected slots:
Chris@413 71 void modelChanged();
Chris@947 72 void modelChangedWithin(int, int);
Chris@454 73 void modelAboutToBeDeleted();
Chris@413 74
Chris@413 75 protected:
Chris@420 76 TabularModel *m_model;
Chris@420 77 int m_sortColumn;
Chris@420 78 Qt::SortOrder m_sortOrdering;
Chris@428 79 int m_currentRow;
Chris@420 80 typedef std::vector<int> RowList;
Chris@426 81 mutable RowList m_sort;
Chris@426 82 mutable RowList m_rsort;
Chris@426 83 int getSorted(int row) const;
Chris@426 84 int getUnsorted(int row) const;
Chris@426 85 void resort() const;
Chris@426 86 void resortNumeric() const;
Chris@426 87 void resortAlphabetical() const;
Chris@428 88 void clearSort();
Chris@413 89 };
Chris@413 90
Chris@413 91 #endif