Mercurial > hg > svcore
changeset 424:eafef13bb0b3
* Add more data-editor support to various models
author | Chris Cannam |
---|---|
date | Thu, 12 Jun 2008 14:33:45 +0000 |
parents | 6a96bff0bd59 |
children | f5e8f12d2e58 |
files | data/model/ImageModel.h data/model/ModelDataTableModel.cpp data/model/NoteModel.h data/model/SparseOneDimensionalModel.h data/model/SparseTimeValueModel.h data/model/TabularModel.h data/model/TextModel.h |
diffstat | 7 files changed, 241 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/data/model/ImageModel.h Thu Jun 12 10:47:11 2008 +0000 +++ b/data/model/ImageModel.h Thu Jun 12 14:33:45 2008 +0000 @@ -136,6 +136,75 @@ ImagePoint m_oldPoint; ImagePoint m_newPoint; }; + + /** + * TabularModel methods. + */ + + virtual int getColumnCount() const + { + return 4; + } + + virtual QString getHeading(int column) const + { + switch (column) { + case 0: return tr("Time"); + case 1: return tr("Frame"); + case 2: return tr("Image"); + case 3: return tr("Label"); + default: return tr("Unknown"); + } + } + + virtual QVariant getData(int row, int column, int role) const + { + PointListIterator i = getPointListIteratorForRow(row); + if (i == m_points.end()) return QVariant(); + + switch (column) { + case 0: { + if (role == SortRole) return int(i->frame); + RealTime rt = RealTime::frame2RealTime(i->frame, getSampleRate()); + return rt.toText().c_str(); + } + case 1: return int(i->frame); + case 2: return i->image; + case 3: return i->label; + default: return QVariant(); + } + } + + virtual Command *getSetDataCommand(int row, int column, const QVariant &value, int role) + { + if (role != Qt::EditRole) return false; + PointListIterator i = getPointListIteratorForRow(row); + if (i == m_points.end()) return false; + EditCommand *command = new EditCommand(this, tr("Edit Data")); + + Point point(*i); + command->deletePoint(point); + + switch (column) { + case 0: case 1: point.frame = value.toInt(); break; + case 2: point.image = value.toString(); break; + case 3: point.label = value.toString(); break; + } + + command->addPoint(point); + return command->finish(); + } + + virtual bool isColumnTimeValue(int column) const + { + return (column < 2); + } + + virtual SortType getSortType(int column) const + { + if (column > 2) return SortAlphabetical; + return SortNumeric; + } };
--- a/data/model/ModelDataTableModel.cpp Thu Jun 12 10:47:11 2008 +0000 +++ b/data/model/ModelDataTableModel.cpp Thu Jun 12 14:33:45 2008 +0000 @@ -41,6 +41,7 @@ QVariant ModelDataTableModel::data(const QModelIndex &index, int role) const { + if (role != Qt::EditRole && role != Qt::DisplayRole) return QVariant(); if (!index.isValid()) return QVariant(); return m_model->getData(getUnsorted(index.row()), index.column(), role); } @@ -236,8 +237,7 @@ int rows = m_model->getRowCount(); for (int i = 0; i < rows; ++i) { - QVariant value = - m_model->getData(i, m_sortColumn, TabularModel::SortRole); + QVariant value = m_model->getData(i, m_sortColumn, TabularModel::SortRole); rowMap.insert(MapType::value_type(value.toDouble(), i)); }
--- a/data/model/NoteModel.h Thu Jun 12 10:47:11 2008 +0000 +++ b/data/model/NoteModel.h Thu Jun 12 14:33:45 2008 +0000 @@ -162,6 +162,83 @@ .arg(extraAttributes).arg(m_valueQuantization)); } + /** + * TabularModel methods. + */ + + virtual int getColumnCount() const + { + return 6; + } + + virtual QString getHeading(int column) const + { + switch (column) { + case 0: return tr("Time"); + case 1: return tr("Frame"); + case 2: return tr("Pitch"); + case 3: return tr("Duration"); + case 4: return tr("Level"); + case 5: return tr("Label"); + default: return tr("Unknown"); + } + } + + virtual QVariant getData(int row, int column, int role) const + { + PointListIterator i = getPointListIteratorForRow(row); + if (i == m_points.end()) return QVariant(); + + switch (column) { + case 0: { + if (role == SortRole) return int(i->frame); + RealTime rt = RealTime::frame2RealTime(i->frame, getSampleRate()); + return rt.toText().c_str(); + } + case 1: return int(i->frame); + case 2: + if (role == Qt::EditRole || role == SortRole) return i->value; + else return QString("%1 %2").arg(i->value).arg(getScaleUnits()); + case 3: return int(i->duration); + case 4: return i->level; + case 5: return i->label; + default: return QVariant(); + } + } + + virtual Command *getSetDataCommand(int row, int column, const QVariant &value, int role) + { + if (role != Qt::EditRole) return false; + PointListIterator i = getPointListIteratorForRow(row); + if (i == m_points.end()) return false; + EditCommand *command = new EditCommand(this, tr("Edit Data")); + + Point point(*i); + command->deletePoint(point); + + switch (column) { + case 0: case 1: point.frame = value.toInt(); break; + case 2: point.value = value.toDouble(); break; + case 3: point.duration = value.toInt(); break; + case 4: point.level = value.toDouble(); break; + case 5: point.label = value.toString(); break; + } + + command->addPoint(point); + return command->finish(); + } + + virtual bool isColumnTimeValue(int column) const + { + return (column < 2); + } + + virtual SortType getSortType(int column) const + { + if (column == 5) return SortAlphabetical; + return SortNumeric; + } + protected: float m_valueQuantization; };
--- a/data/model/SparseOneDimensionalModel.h Thu Jun 12 10:47:11 2008 +0000 +++ b/data/model/SparseOneDimensionalModel.h Thu Jun 12 14:33:45 2008 +0000 @@ -132,9 +132,6 @@ virtual QVariant getData(int row, int column, int role) const { - if (role != Qt::EditRole && - role != Qt::DisplayRole && - role != SortRole) return QVariant(); PointListIterator i = getPointListIteratorForRow(row); if (i == m_points.end()) return QVariant(); @@ -150,6 +147,25 @@ } } + virtual Command *getSetDataCommand(int row, int column, const QVariant &value, int role) + { + if (role != Qt::EditRole) return false; + PointListIterator i = getPointListIteratorForRow(row); + if (i == m_points.end()) return false; + EditCommand *command = new EditCommand(this, tr("Edit Data")); + + Point point(*i); + command->deletePoint(point); + + switch (column) { + case 0: case 1: point.frame = value.toInt(); break; + case 2: point.label = value.toString(); break; + } + + command->addPoint(point); + return command->finish(); + } + virtual bool isColumnTimeValue(int column) const { return (column < 2);
--- a/data/model/SparseTimeValueModel.h Thu Jun 12 10:47:11 2008 +0000 +++ b/data/model/SparseTimeValueModel.h Thu Jun 12 14:33:45 2008 +0000 @@ -122,9 +122,6 @@ virtual QVariant getData(int row, int column, int role) const { - if (role != Qt::EditRole && - role != Qt::DisplayRole && - role != SortRole) return QVariant(); PointListIterator i = getPointListIteratorForRow(row); if (i == m_points.end()) return QVariant(); @@ -143,22 +140,18 @@ } } - virtual Command *getSetDataCommand(int row, int column, const QVariant &value, int role) const + virtual Command *getSetDataCommand(int row, int column, const QVariant &value, int role) { if (role != Qt::EditRole) return false; PointListIterator i = getPointListIteratorForRow(row); - if (i == m_points.end()) { - std::cerr << "Failed to find point iterator for row " << row << std::endl; - return false; - } + if (i == m_points.end()) return false; EditCommand *command = new EditCommand(this, tr("Edit Data")); Point point(*i); command->deletePoint(point); switch (column) { - case 0: break; - case 1: break; + case 0: case 1: point.frame = value.toInt(); break; case 2: point.value = value.toDouble(); break; case 3: point.label = value.toString(); break; }
--- a/data/model/TabularModel.h Thu Jun 12 10:47:11 2008 +0000 +++ b/data/model/TabularModel.h Thu Jun 12 14:33:45 2008 +0000 @@ -50,7 +50,7 @@ virtual int getRowForFrame(long frame) const = 0; virtual bool isEditable() const { return false; } - virtual Command *getSetDataCommand(int row, int column, const QVariant &, int role) const { return 0; } + virtual Command *getSetDataCommand(int row, int column, const QVariant &, int role) { return 0; } }; #endif
--- a/data/model/TextModel.h Thu Jun 12 10:47:11 2008 +0000 +++ b/data/model/TextModel.h Thu Jun 12 14:33:45 2008 +0000 @@ -101,6 +101,76 @@ } QString getTypeName() const { return tr("Text"); } + + /** + * TabularModel methods. + */ + + virtual int getColumnCount() const + { + return 4; + } + + virtual QString getHeading(int column) const + { + switch (column) { + case 0: return tr("Time"); + case 1: return tr("Frame"); + case 2: return tr("Height"); + case 3: return tr("Label"); + default: return tr("Unknown"); + } + } + + virtual QVariant getData(int row, int column, int role) const + { + PointListIterator i = getPointListIteratorForRow(row); + if (i == m_points.end()) return QVariant(); + + switch (column) { + case 0: { + if (role == SortRole) return int(i->frame); + RealTime rt = RealTime::frame2RealTime(i->frame, getSampleRate()); + return rt.toText().c_str(); + } + case 1: return int(i->frame); + case 2: return i->height; + case 3: return i->label; + default: return QVariant(); + } + } + + virtual Command *getSetDataCommand(int row, int column, const QVariant &value, int role) + { + if (role != Qt::EditRole) return false; + PointListIterator i = getPointListIteratorForRow(row); + if (i == m_points.end()) return false; + EditCommand *command = new EditCommand(this, tr("Edit Data")); + + Point point(*i); + command->deletePoint(point); + + switch (column) { + case 0: case 1: point.frame = value.toInt(); break; + case 2: point.height = value.toDouble(); break; + case 3: point.label = value.toString(); break; + } + + command->addPoint(point); + return command->finish(); + } + + virtual bool isColumnTimeValue(int column) const + { + return (column < 2); + } + + virtual SortType getSortType(int column) const + { + if (column == 3) return SortAlphabetical; + return SortNumeric; + } + };