61
63
for (QModelIndexList::const_iterator iter (selectedRows.begin());
62
64
iter!=selectedRows.end(); ++iter)
64
QString hint = mModel->data (mModel->index (iter->row(), 2)).toString();
66
QString hint = mProxyModel->data (mProxyModel->index (iter->row(), 2)).toString();
66
68
if (!hint.isEmpty() && hint[0]=='R')
94
98
selectionModel()->select (index,
95
99
QItemSelectionModel::Clear | QItemSelectionModel::Select | QItemSelectionModel::Rows);
101
std::map<Qt::KeyboardModifiers, DoubleClickAction>::iterator iter =
102
mDoubleClickActions.find (modifiers);
104
if (iter==mDoubleClickActions.end())
110
switch (iter->second)
105
case Qt::ShiftModifier:
108
126
removeSelection();
111
case Qt::ControlModifier:
129
case Action_EditAndRemove:
120
138
CSVTools::ReportTable::ReportTable (CSMDoc::Document& document,
121
const CSMWorld::UniversalId& id, bool richTextDescription, QWidget *parent)
122
: CSVWorld::DragRecordTable (document, parent), mModel (document.getReport (id))
139
const CSMWorld::UniversalId& id, bool richTextDescription, int refreshState,
141
: CSVWorld::DragRecordTable (document, parent), mModel (document.getReport (id)),
142
mRefreshAction (0), mRefreshState (refreshState)
144
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
145
horizontalHeader()->setSectionResizeMode (QHeaderView::Interactive);
124
147
horizontalHeader()->setResizeMode (QHeaderView::Interactive);
125
149
horizontalHeader()->setStretchLastSection (true);
126
150
verticalHeader()->hide();
127
151
setSortingEnabled (true);
128
152
setSelectionBehavior (QAbstractItemView::SelectRows);
129
153
setSelectionMode (QAbstractItemView::ExtendedSelection);
155
mProxyModel = new QSortFilterProxyModel (this);
156
mProxyModel->setSourceModel (mModel);
158
setModel (mProxyModel);
132
159
setColumnHidden (2, true);
134
161
mIdTypeDelegate = CSVWorld::IdTypeDelegateFactory().makeDelegate (0,
139
166
if (richTextDescription)
140
167
setItemDelegateForColumn (mModel->columnCount()-1, new RichTextDelegate (this));
142
169
mShowAction = new QAction (tr ("Show"), this);
143
170
connect (mShowAction, SIGNAL (triggered()), this, SLOT (showSelection()));
144
171
addAction (mShowAction);
150
177
mReplaceAction = new QAction (tr ("Replace"), this);
151
178
connect (mReplaceAction, SIGNAL (triggered()), this, SIGNAL (replaceRequest()));
152
addAction (mReplaceAction);
179
addAction (mReplaceAction);
183
mRefreshAction = new QAction (tr ("Refresh"), this);
184
mRefreshAction->setEnabled (!(mDocument.getState() & mRefreshState));
185
connect (mRefreshAction, SIGNAL (triggered()), this, SIGNAL (refreshRequest()));
186
addAction (mRefreshAction);
189
mDoubleClickActions.insert (std::make_pair (Qt::NoModifier, Action_Edit));
190
mDoubleClickActions.insert (std::make_pair (Qt::ShiftModifier, Action_Remove));
191
mDoubleClickActions.insert (std::make_pair (Qt::ControlModifier, Action_EditAndRemove));
155
194
std::vector<CSMWorld::UniversalId> CSVTools::ReportTable::getDraggedRecords() const
170
209
void CSVTools::ReportTable::updateUserSetting (const QString& name, const QStringList& list)
172
211
mIdTypeDelegate->updateUserSetting (name, list);
213
QString base ("report-input/double");
214
if (name.startsWith (base))
216
QString modifierString = name.mid (base.size());
217
Qt::KeyboardModifiers modifiers = 0;
219
if (modifierString=="-s")
220
modifiers = Qt::ShiftModifier;
221
else if (modifierString=="-c")
222
modifiers = Qt::ControlModifier;
223
else if (modifierString=="-sc")
224
modifiers = Qt::ShiftModifier | Qt::ControlModifier;
226
DoubleClickAction action = Action_None;
228
QString value = list.at (0);
231
action = Action_Edit;
232
else if (value=="Remove")
233
action = Action_Remove;
234
else if (value=="Edit And Remove")
235
action = Action_EditAndRemove;
237
mDoubleClickActions[modifiers] = action;
175
243
std::vector<int> CSVTools::ReportTable::getReplaceIndices (bool selection) const
181
249
QModelIndexList selectedRows = selectionModel()->selectedRows();
251
std::vector<int> rows;
183
253
for (QModelIndexList::const_iterator iter (selectedRows.begin()); iter!=selectedRows.end();
186
QString hint = mModel->data (mModel->index (iter->row(), 2)).toString();
256
rows.push_back (mProxyModel->mapToSource (*iter).row());
259
std::sort (rows.begin(), rows.end());
261
for (std::vector<int>::const_iterator iter (rows.begin()); iter!=rows.end(); ++iter)
263
QString hint = mModel->data (mModel->index (*iter, 2)).toString();
188
265
if (!hint.isEmpty() && hint[0]=='R')
189
indices.push_back (iter->row());
266
indices.push_back (*iter);
208
285
mModel->flagAsReplaced (index);
211
288
void CSVTools::ReportTable::showSelection()
213
290
QModelIndexList selectedRows = selectionModel()->selectedRows();
215
292
for (QModelIndexList::const_iterator iter (selectedRows.begin()); iter!=selectedRows.end();
217
emit editRequest (mModel->getUniversalId (iter->row()), mModel->getHint (iter->row()));
295
int row = mProxyModel->mapToSource (*iter).row();
296
emit editRequest (mModel->getUniversalId (row), mModel->getHint (row));
220
300
void CSVTools::ReportTable::removeSelection()
222
302
QModelIndexList selectedRows = selectionModel()->selectedRows();
224
std::reverse (selectedRows.begin(), selectedRows.end());
304
std::vector<int> rows;
226
for (QModelIndexList::const_iterator iter (selectedRows.begin()); iter!=selectedRows.end();
306
for (QModelIndexList::iterator iter (selectedRows.begin()); iter!=selectedRows.end();
228
mModel->removeRows (iter->row(), 1);
309
rows.push_back (mProxyModel->mapToSource (*iter).row());
312
std::sort (rows.begin(), rows.end());
314
for (std::vector<int>::const_reverse_iterator iter (rows.rbegin()); iter!=rows.rend(); ++iter)
315
mProxyModel->removeRows (*iter, 1);
230
317
selectionModel()->clear();