Mercurial > hg > svcore
comparison data/model/ModelDataTableModel.cpp @ 618:b1dc68507e46 sv-v1.7.1
* Layer data editor window: fix sorting for columns in region model,
add Find feature
* RDF import: assign names to layers based on event types, if no suitable
labels are found in the RDF
* Add label to status bar showing the last text that was passed in current
layer (so e.g. counting 1, 2, 3, 4 if that's what beats are labelled)
* Better layout of text labels for region layers in segmentation mode when
they are close together
* Give text layer the same method for finding "nearest point" as region and
note layers, should improve its editability
| author | Chris Cannam |
|---|---|
| date | Thu, 22 Oct 2009 15:54:21 +0000 |
| parents | ba7aaacb7211 |
| children | b4a8d8221eaf |
comparison
equal
deleted
inserted
replaced
| 617:24f06d34ac99 | 618:b1dc68507e46 |
|---|---|
| 167 { | 167 { |
| 168 if (!m_model) return 0; | 168 if (!m_model) return 0; |
| 169 return m_model->getFrameForRow(getUnsorted(index.row())); | 169 return m_model->getFrameForRow(getUnsorted(index.row())); |
| 170 } | 170 } |
| 171 | 171 |
| 172 QModelIndex | |
| 173 ModelDataTableModel::findText(QString text) const | |
| 174 { | |
| 175 if (text == "") return QModelIndex(); | |
| 176 int rows = rowCount(); | |
| 177 int cols = columnCount(); | |
| 178 int current = getCurrentRow(); | |
| 179 for (int row = 1; row <= rows; ++row) { | |
| 180 int wrapped = (row + current) % rows; | |
| 181 for (int col = 0; col < cols; ++col) { | |
| 182 if (m_model->getSortType(col) != TabularModel::SortAlphabetical) { | |
| 183 continue; | |
| 184 } | |
| 185 QString cell = m_model->getData(getUnsorted(wrapped), col, | |
| 186 Qt::DisplayRole).toString(); | |
| 187 if (cell.contains(text, Qt::CaseInsensitive)) { | |
| 188 return createIndex(wrapped, col); | |
| 189 } | |
| 190 } | |
| 191 } | |
| 192 return QModelIndex(); | |
| 193 } | |
| 194 | |
| 172 void | 195 void |
| 173 ModelDataTableModel::sort(int column, Qt::SortOrder sortOrder) | 196 ModelDataTableModel::sort(int column, Qt::SortOrder sortOrder) |
| 174 { | 197 { |
| 175 // std::cerr << "ModelDataTableModel::sort(" << column << ", " << sortOrder | 198 // std::cerr << "ModelDataTableModel::sort(" << column << ", " << sortOrder |
| 176 // << ")" << std::endl; | 199 // << ")" << std::endl; |
| 272 if (!m_model) return; | 295 if (!m_model) return; |
| 273 | 296 |
| 274 bool numeric = (m_model->getSortType(m_sortColumn) == | 297 bool numeric = (m_model->getSortType(m_sortColumn) == |
| 275 TabularModel::SortNumeric); | 298 TabularModel::SortNumeric); |
| 276 | 299 |
| 300 // std::cerr << "resort: numeric == " << numeric << std::endl; | |
| 301 | |
| 277 m_sort.clear(); | 302 m_sort.clear(); |
| 278 m_rsort.clear(); | 303 m_rsort.clear(); |
| 279 | 304 |
| 280 if (numeric) resortNumeric(); | 305 if (numeric) resortNumeric(); |
| 281 else resortAlphabetical(); | 306 else resortAlphabetical(); |
| 311 QVariant value = m_model->getData(i, m_sortColumn, TabularModel::SortRole); | 336 QVariant value = m_model->getData(i, m_sortColumn, TabularModel::SortRole); |
| 312 rowMap.insert(MapType::value_type(value.toDouble(), i)); | 337 rowMap.insert(MapType::value_type(value.toDouble(), i)); |
| 313 } | 338 } |
| 314 | 339 |
| 315 for (MapType::iterator i = rowMap.begin(); i != rowMap.end(); ++i) { | 340 for (MapType::iterator i = rowMap.begin(); i != rowMap.end(); ++i) { |
| 341 // std::cerr << "resortNumeric: " << i->second << ": " << i->first << std::endl; | |
| 316 m_rsort.push_back(i->second); | 342 m_rsort.push_back(i->second); |
| 317 } | 343 } |
| 318 | 344 |
| 319 // rsort now maps from sorted row number to original row number | 345 // rsort now maps from sorted row number to original row number |
| 320 } | 346 } |
| 334 m_model->getData(i, m_sortColumn, TabularModel::SortRole); | 360 m_model->getData(i, m_sortColumn, TabularModel::SortRole); |
| 335 rowMap.insert(MapType::value_type(value.toString(), i)); | 361 rowMap.insert(MapType::value_type(value.toString(), i)); |
| 336 } | 362 } |
| 337 | 363 |
| 338 for (MapType::iterator i = rowMap.begin(); i != rowMap.end(); ++i) { | 364 for (MapType::iterator i = rowMap.begin(); i != rowMap.end(); ++i) { |
| 365 // std::cerr << "resortAlphabetical: " << i->second << ": " << i->first.toStdString() << std::endl; | |
| 339 m_rsort.push_back(i->second); | 366 m_rsort.push_back(i->second); |
| 340 } | 367 } |
| 341 | 368 |
| 342 // rsort now maps from sorted row number to original row number | 369 // rsort now maps from sorted row number to original row number |
| 343 } | 370 } |
| 344 | 371 |
| 345 int | 372 int |
| 346 ModelDataTableModel::getCurrentRow() | 373 ModelDataTableModel::getCurrentRow() const |
| 347 { | 374 { |
| 348 return getSorted(m_currentRow); | 375 return getSorted(m_currentRow); |
| 349 } | 376 } |
| 350 | 377 |
| 351 void | 378 void |
