# HG changeset patch # User Chris Cannam # Date 1213718876 0 # Node ID 96531861b2f3ddfb93373fb2f6377aa37315faab # Parent 32acd578fcba54ee87a01417ca8d08be90e9ebd8 * a bit of progress on retaining current row when sorting changes &c diff -r 32acd578fcba -r 96531861b2f3 widgets/ModelDataTableDialog.cpp --- a/widgets/ModelDataTableDialog.cpp Mon Jun 16 14:48:42 2008 +0000 +++ b/widgets/ModelDataTableDialog.cpp Tue Jun 17 16:07:56 2008 +0000 @@ -36,7 +36,8 @@ ModelDataTableDialog::ModelDataTableDialog(TabularModel *model, QString title, QWidget *parent) : QMainWindow(parent), - m_currentRow(0) + m_currentRow(0), + m_trackPlayback(false) { setWindowTitle(tr("Data Editor")); @@ -106,6 +107,8 @@ SLOT(currentChanged(const QModelIndex &, const QModelIndex &))); connect(m_table, SIGNAL(addCommand(Command *)), this, SLOT(addCommand(Command *))); + connect(m_table, SIGNAL(currentChanged(const QModelIndex &)), + this, SLOT(currentChangedThroughResort(const QModelIndex &))); QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Close); connect(bb, SIGNAL(rejected()), this, SLOT(close())); @@ -133,9 +136,31 @@ } void -ModelDataTableDialog::scrollToFrameRequested(unsigned long frame) +ModelDataTableDialog::userScrolledToFrame(unsigned long frame) { - m_tableView->scrollTo(m_table->getModelIndexForFrame(frame)); + QModelIndex index = m_table->getModelIndexForFrame(frame); + makeCurrent(index.row()); +} + +void +ModelDataTableDialog::playbackScrolledToFrame(unsigned long frame) +{ + if (m_trackPlayback) { + QModelIndex index = m_table->getModelIndexForFrame(frame); + makeCurrent(index.row()); + } +} + +void +ModelDataTableDialog::makeCurrent(int row) +{ + int rh = m_tableView->height() / m_tableView->rowHeight(0); + int topRow = row - rh/2; + if (topRow < 0) topRow = 0; + m_tableView->scrollTo + (m_table->getModelIndexForRow(topRow)); + m_tableView->selectionModel()->setCurrentIndex + (m_table->getModelIndexForRow(row), QItemSelectionModel::Select); } void @@ -160,6 +185,7 @@ << " to " << current.row() << ", " << current.column() << std::endl; m_currentRow = current.row(); + m_table->setCurrentRow(m_currentRow); } void @@ -189,3 +215,13 @@ CommandHistory::getInstance()->addCommand(command, false, true); } +void +ModelDataTableDialog::currentChangedThroughResort(const QModelIndex &index) +{ + std::cerr << "ModelDataTableDialog::currentChangedThroughResort: row = " << index.row() << std::endl; +// m_tableView->scrollTo(index); + makeCurrent(index.row()); +} + + + diff -r 32acd578fcba -r 96531861b2f3 widgets/ModelDataTableDialog.h --- a/widgets/ModelDataTableDialog.h Mon Jun 16 14:48:42 2008 +0000 +++ b/widgets/ModelDataTableDialog.h Tue Jun 17 16:07:56 2008 +0000 @@ -36,22 +36,26 @@ void scrollToFrame(unsigned long frame); public slots: - void scrollToFrameRequested(unsigned long frame); + void userScrolledToFrame(unsigned long frame); + void playbackScrolledToFrame(unsigned long frame); void addCommand(Command *); protected slots: void viewClicked(const QModelIndex &); void viewPressed(const QModelIndex &); void currentChanged(const QModelIndex &, const QModelIndex &); + void currentChangedThroughResort(const QModelIndex &); void insertRow(); void deleteRows(); void editRow(); protected: + void makeCurrent(int row); ModelDataTableModel *m_table; QTableView *m_tableView; int m_currentRow; + bool m_trackPlayback; }; #endif