Mercurial > hg > svgui
changeset 401:96531861b2f3
* a bit of progress on retaining current row when sorting changes &c
author | Chris Cannam |
---|---|
date | Tue, 17 Jun 2008 16:07:56 +0000 |
parents | 32acd578fcba |
children | 66e01a6c9554 |
files | widgets/ModelDataTableDialog.cpp widgets/ModelDataTableDialog.h |
diffstat | 2 files changed, 44 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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()); +} + + +
--- 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