comparison widgets/ModelDataTableDialog.cpp @ 404:4075bf03faef

* Add playback controls to data edit dialog * Make data edit dialog close properly when layer is removed from view * More fixes to playback tracking & selection model in data edit dialog * Remove edit button from data edit dialog for now
author Chris Cannam
date Wed, 18 Jun 2008 15:53:23 +0000
parents dc32f6e7839b
children 7920688d8e70
comparison
equal deleted inserted replaced
403:dc32f6e7839b 404:4075bf03faef
32 #include <QAction> 32 #include <QAction>
33 #include <QToolBar> 33 #include <QToolBar>
34 34
35 #include <iostream> 35 #include <iostream>
36 36
37 ModelDataTableDialog::ModelDataTableDialog(TabularModel *model, QString title, QWidget *parent) : 37 ModelDataTableDialog::ModelDataTableDialog(TabularModel *model,
38 QString title, QWidget *parent) :
38 QMainWindow(parent), 39 QMainWindow(parent),
39 m_currentRow(0), 40 m_currentRow(0),
40 m_trackPlayback(false) 41 m_trackPlayback(true)
41 { 42 {
42 setWindowTitle(tr("Data Editor")); 43 setWindowTitle(tr("Data Editor"));
43 44
44 QToolBar *toolbar = addToolBar(tr("Toolbar")); 45 QToolBar *toolbar;
45 46
47 toolbar = addToolBar(tr("Playback Toolbar"));
48 m_playToolbar = toolbar;
49 toolbar = addToolBar(tr("Play Mode Toolbar"));
50
46 IconLoader il; 51 IconLoader il;
47 52
48 QAction *action = new QAction(il.load("playfollow"), tr("Track Playback"), this); 53 QAction *action = new QAction(il.load("playfollow"), tr("Track Playback"), this);
49 action->setStatusTip(tr("Toggle tracking of playback position")); 54 action->setStatusTip(tr("Toggle tracking of playback position"));
50 action->setCheckable(true); 55 action->setCheckable(true);
56 action->setChecked(m_trackPlayback);
51 connect(action, SIGNAL(triggered()), this, SLOT(togglePlayTracking())); 57 connect(action, SIGNAL(triggered()), this, SLOT(togglePlayTracking()));
52 toolbar->addAction(action); 58 toolbar->addAction(action);
53 59
54 CommandHistory::getInstance()->registerToolbar(toolbar); 60 toolbar = addToolBar(tr("Edit Toolbar"));
55 61
56 action = new QAction(il.load("datainsert"), tr("Insert New Item"), this); 62 action = new QAction(il.load("datainsert"), tr("Insert New Item"), this);
57 action->setShortcut(tr("Insert")); 63 action->setShortcut(tr("Insert"));
58 action->setStatusTip(tr("Insert a new item")); 64 action->setStatusTip(tr("Insert a new item"));
59 connect(action, SIGNAL(triggered()), this, SLOT(insertRow())); 65 connect(action, SIGNAL(triggered()), this, SLOT(insertRow()));
63 action->setShortcut(tr("Delete")); 69 action->setShortcut(tr("Delete"));
64 action->setStatusTip(tr("Delete the selected item or items")); 70 action->setStatusTip(tr("Delete the selected item or items"));
65 connect(action, SIGNAL(triggered()), this, SLOT(deleteRows())); 71 connect(action, SIGNAL(triggered()), this, SLOT(deleteRows()));
66 toolbar->addAction(action); 72 toolbar->addAction(action);
67 73
74 CommandHistory::getInstance()->registerToolbar(toolbar);
75
76 /*
68 action = new QAction(il.load("dataedit"), tr("Edit Selected Item"), this); 77 action = new QAction(il.load("dataedit"), tr("Edit Selected Item"), this);
69 action->setShortcut(tr("Edit")); 78 action->setShortcut(tr("Edit"));
70 action->setStatusTip(tr("Edit the selected item")); 79 action->setStatusTip(tr("Edit the selected item"));
71 connect(action, SIGNAL(triggered()), this, SLOT(editRow())); 80 connect(action, SIGNAL(triggered()), this, SLOT(editRow()));
72 toolbar->addAction(action); 81 toolbar->addAction(action);
82 */
73 83
74 QFrame *mainFrame = new QFrame; 84 QFrame *mainFrame = new QFrame;
75 setCentralWidget(mainFrame); 85 setCentralWidget(mainFrame);
76 86
77 QGridLayout *grid = new QGridLayout; 87 QGridLayout *grid = new QGridLayout;
159 169
160 void 170 void
161 ModelDataTableDialog::makeCurrent(int row) 171 ModelDataTableDialog::makeCurrent(int row)
162 { 172 {
163 int rh = m_tableView->height() / m_tableView->rowHeight(0); 173 int rh = m_tableView->height() / m_tableView->rowHeight(0);
164 int topRow = row - rh/2; 174 int topRow = row - rh/4;
165 if (topRow < 0) topRow = 0; 175 if (topRow < 0) topRow = 0;
166 //!!! should not do any of this if an item in the given row is 176
167 //already current; should not scroll if the current row is already 177 // should only scroll if the desired row is not currently visible
168 //visible 178
179 // should only select if no part of the desired row is currently selected
180
169 std::cerr << "rh = " << rh << ", row = " << row << ", scrolling to " 181 std::cerr << "rh = " << rh << ", row = " << row << ", scrolling to "
170 << topRow << std::endl; 182 << topRow << std::endl;
171 m_tableView->scrollTo 183
172 (m_table->getModelIndexForRow(topRow)); 184 int pos = m_tableView->rowViewportPosition(row);
173 m_tableView->selectionModel()->setCurrentIndex 185
174 (m_table->getModelIndexForRow(row), 186 if (pos < 0 || pos >= m_tableView->height() - rh) {
175 QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); 187 m_tableView->scrollTo(m_table->index(topRow, 0));
188 }
189
190 bool haveRowSelected = false;
191 for (int i = 0; i < m_table->columnCount(); ++i) {
192 if (m_tableView->selectionModel()->isSelected(m_table->index(row, i))) {
193 haveRowSelected = true;
194 break;
195 }
196 }
197
198 if (!haveRowSelected) {
199 m_tableView->selectionModel()->setCurrentIndex
200 (m_table->index(row, 0),
201 QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
202 }
176 } 203 }
177 204
178 void 205 void
179 ModelDataTableDialog::viewClicked(const QModelIndex &index) 206 ModelDataTableDialog::viewClicked(const QModelIndex &index)
180 { 207 {