[Sv1-commits] SF.net SVN: sv1:[1236] sonic-visualiser/trunk
Brought to you by:
cannam
From: <ca...@us...> - 2008-10-09 13:13:35
|
Revision: 1236 http://sv1.svn.sourceforge.net/sv1/?rev=1236&view=rev Author: cannam Date: 2008-10-09 13:13:33 +0000 (Thu, 09 Oct 2008) Log Message: ----------- * Support transforms that output regions with more than one bin (by creating more than one region) * When model displayed in the spreadsheet dialog is deleted, close the dialog in preference to crashing Modified Paths: -------------- sonic-visualiser/trunk/data/model/ModelDataTableModel.cpp sonic-visualiser/trunk/data/model/ModelDataTableModel.h sonic-visualiser/trunk/transform/FeatureExtractionModelTransformer.cpp sonic-visualiser/trunk/widgets/ModelDataTableDialog.cpp sonic-visualiser/trunk/widgets/ModelDataTableDialog.h Modified: sonic-visualiser/trunk/data/model/ModelDataTableModel.cpp =================================================================== --- sonic-visualiser/trunk/data/model/ModelDataTableModel.cpp 2008-10-09 12:22:02 UTC (rev 1235) +++ sonic-visualiser/trunk/data/model/ModelDataTableModel.cpp 2008-10-09 13:13:33 UTC (rev 1236) @@ -33,6 +33,8 @@ connect(baseModel, SIGNAL(modelChanged()), this, SLOT(modelChanged())); connect(baseModel, SIGNAL(modelChanged(size_t, size_t)), this, SLOT(modelChanged(size_t, size_t))); + connect(baseModel, SIGNAL(aboutToBeDeleted()), + this, SLOT(modelAboutToBeDeleted())); } ModelDataTableModel::~ModelDataTableModel() @@ -42,6 +44,7 @@ QVariant ModelDataTableModel::data(const QModelIndex &index, int role) const { + if (!m_model) return QVariant(); if (role != Qt::EditRole && role != Qt::DisplayRole) return QVariant(); if (!index.isValid()) return QVariant(); return m_model->getData(getUnsorted(index.row()), index.column(), role); @@ -50,6 +53,7 @@ bool ModelDataTableModel::setData(const QModelIndex &index, const QVariant &value, int role) { + if (!m_model) return false; if (!index.isValid()) return false; Command *command = m_model->getSetDataCommand(getUnsorted(index.row()), index.column(), @@ -65,6 +69,7 @@ bool ModelDataTableModel::insertRow(int row, const QModelIndex &parent) { + if (!m_model) return false; if (parent.isValid()) return false; emit beginInsertRows(parent, row, row); @@ -83,6 +88,7 @@ bool ModelDataTableModel::removeRow(int row, const QModelIndex &parent) { + if (!m_model) return false; if (parent.isValid()) return false; emit beginRemoveRows(parent, row, row); @@ -109,6 +115,8 @@ QVariant ModelDataTableModel::headerData(int section, Qt::Orientation orientation, int role) const { + if (!m_model) return QVariant(); + if (orientation == Qt::Vertical && role == Qt::DisplayRole) { return section + 1; } @@ -133,6 +141,7 @@ int ModelDataTableModel::rowCount(const QModelIndex &parent) const { + if (!m_model) return 0; if (parent.isValid()) return 0; return m_model->getRowCount(); } @@ -140,6 +149,7 @@ int ModelDataTableModel::columnCount(const QModelIndex &parent) const { + if (!m_model) return 0; if (parent.isValid()) return 0; return m_model->getColumnCount(); } @@ -147,6 +157,7 @@ QModelIndex ModelDataTableModel::getModelIndexForFrame(size_t frame) const { + if (!m_model) return createIndex(0, 0); int row = m_model->getRowForFrame(frame); return createIndex(getSorted(row), 0, 0); } @@ -154,6 +165,7 @@ size_t ModelDataTableModel::getFrameForModelIndex(const QModelIndex &index) const { + if (!m_model) return 0; return m_model->getFrameForRow(getUnsorted(index.row())); } @@ -191,9 +203,18 @@ emit layoutChanged(); } +void +ModelDataTableModel::modelAboutToBeDeleted() +{ + m_model = 0; + emit modelRemoved(); +} + int ModelDataTableModel::getSorted(int row) const { + if (!m_model) return row; + if (m_model->isColumnTimeValue(m_sortColumn)) { if (m_sortOrdering == Qt::AscendingOrder) { return row; @@ -219,6 +240,8 @@ int ModelDataTableModel::getUnsorted(int row) const { + if (!m_model) return row; + if (m_model->isColumnTimeValue(m_sortColumn)) { if (m_sortOrdering == Qt::AscendingOrder) { return row; @@ -246,6 +269,8 @@ void ModelDataTableModel::resort() const { + if (!m_model) return; + bool numeric = (m_model->getSortType(m_sortColumn) == TabularModel::SortNumeric); @@ -275,6 +300,8 @@ void ModelDataTableModel::resortNumeric() const { + if (!m_model) return; + typedef std::multimap<double, int> MapType; MapType rowMap; @@ -295,6 +322,8 @@ void ModelDataTableModel::resortAlphabetical() const { + if (!m_model) return; + typedef std::multimap<QString, int> MapType; MapType rowMap; Modified: sonic-visualiser/trunk/data/model/ModelDataTableModel.h =================================================================== --- sonic-visualiser/trunk/data/model/ModelDataTableModel.h 2008-10-09 12:22:02 UTC (rev 1235) +++ sonic-visualiser/trunk/data/model/ModelDataTableModel.h 2008-10-09 13:13:33 UTC (rev 1236) @@ -63,10 +63,12 @@ void frameSelected(size_t); void addCommand(Command *); void currentChanged(const QModelIndex &); + void modelRemoved(); protected slots: void modelChanged(); void modelChanged(size_t, size_t); + void modelAboutToBeDeleted(); protected: TabularModel *m_model; Modified: sonic-visualiser/trunk/transform/FeatureExtractionModelTransformer.cpp =================================================================== --- sonic-visualiser/trunk/transform/FeatureExtractionModelTransformer.cpp 2008-10-09 12:22:02 UTC (rev 1235) +++ sonic-visualiser/trunk/transform/FeatureExtractionModelTransformer.cpp 2008-10-09 13:13:33 UTC (rev 1236) @@ -633,16 +633,22 @@ } else if (isOutput<SparseTimeValueModel>()) { - float value = 0.0; - if (feature.values.size() > 0) value = feature.values[0]; - SparseTimeValueModel *model = getConformingOutput<SparseTimeValueModel>(); if (!model) return; - model->addPoint(SparseTimeValueModel::Point - (frame, value, feature.label.c_str())); + for (int i = 0; i < feature.values.size(); ++i) { + float value = feature.values[i]; + + QString label = feature.label.c_str(); + if (feature.values.size() > 1) { + label = QString("[%1] %2").arg(i+1).arg(label); + } + + model->addPoint(SparseTimeValueModel::Point(frame, value, label)); + } + } else if (isOutput<NoteModel>() || isOutput<RegionModel>()) { int index = 0; @@ -678,11 +684,29 @@ feature.label.c_str())); } else { RegionModel *model = getConformingOutput<RegionModel>(); - if (model) { + if (!model) return; + + if (feature.hasDuration) { + + for (int i = 0; i < feature.values.size(); ++i) { + + float value = feature.values[i]; + + QString label = feature.label.c_str(); + if (feature.values.size() > 1) { + label = QString("[%1] %2").arg(i+1).arg(label); + } + + model->addPoint(RegionModel::Point(frame, value, + lrintf(duration), + label)); + } + } else { + model->addPoint(RegionModel::Point(frame, value, lrintf(duration), feature.label.c_str())); - } else return; + } } } else if (isOutput<EditableDenseThreeDimensionalModel>()) { Modified: sonic-visualiser/trunk/widgets/ModelDataTableDialog.cpp =================================================================== --- sonic-visualiser/trunk/widgets/ModelDataTableDialog.cpp 2008-10-09 12:22:02 UTC (rev 1235) +++ sonic-visualiser/trunk/widgets/ModelDataTableDialog.cpp 2008-10-09 13:13:33 UTC (rev 1236) @@ -125,6 +125,8 @@ this, SLOT(addCommand(Command *))); connect(m_table, SIGNAL(currentChanged(const QModelIndex &)), this, SLOT(currentChangedThroughResort(const QModelIndex &))); + connect(m_table, SIGNAL(modelRemoved()), + this, SLOT(modelRemoved())); QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Close); connect(bb, SIGNAL(rejected()), this, SLOT(close())); @@ -268,5 +270,10 @@ makeCurrent(index.row()); } +void +ModelDataTableDialog::modelRemoved() +{ + close(); +} Modified: sonic-visualiser/trunk/widgets/ModelDataTableDialog.h =================================================================== --- sonic-visualiser/trunk/widgets/ModelDataTableDialog.h 2008-10-09 12:22:02 UTC (rev 1235) +++ sonic-visualiser/trunk/widgets/ModelDataTableDialog.h 2008-10-09 13:13:33 UTC (rev 1236) @@ -55,6 +55,8 @@ void editRow(); void togglePlayTracking(); + void modelRemoved(); + protected: void makeCurrent(int row); ModelDataTableModel *m_table; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |