aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/debugger/breakwindow.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2009-07-16 15:22:54 +0200
committerFriedemann Kleint <[email protected]>2009-07-16 15:22:54 +0200
commit23f11f5fe725348d48851fcf116be08357985738 (patch)
tree139c124f50ab7e9952df3de2d50c9874c1a7596c /src/plugins/debugger/breakwindow.cpp
parent0756f0b755cf26c8aa1e4273e7d5febe8759bdc2 (diff)
Add "Delete all breakpoints/Delete breakpoints by file".
Reviewed-by: hjk <[email protected]>
Diffstat (limited to 'src/plugins/debugger/breakwindow.cpp')
-rw-r--r--src/plugins/debugger/breakwindow.cpp131
1 files changed, 86 insertions, 45 deletions
diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp
index 399d5bda3c2..92d342983ac 100644
--- a/src/plugins/debugger/breakwindow.cpp
+++ b/src/plugins/debugger/breakwindow.cpp
@@ -125,6 +125,7 @@ void BreakWindow::resizeEvent(QResizeEvent *ev)
void BreakWindow::contextMenuEvent(QContextMenuEvent *ev)
{
QMenu menu;
+ const QAbstractItemModel *itemModel = model();
QItemSelectionModel *sm = selectionModel();
QTC_ASSERT(sm, return);
QModelIndexList si = sm->selectedIndexes();
@@ -133,72 +134,105 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev)
si.append(indexUnderMouse.sibling(indexUnderMouse.row(), 0));
si = normalizeIndexes(si);
- QAction *act0 = new QAction(tr("Delete breakpoint", 0, si.size()), &menu);
- act0->setEnabled(si.size() > 0);
+ const int rowCount = itemModel->rowCount();
+
+ QAction *deleteAction = new QAction(tr("Delete breakpoint", 0, si.size()), &menu);
+ deleteAction->setEnabled(si.size() > 0);
+
+ QAction *deleteAllAction = new QAction(tr("Delete all breakpoints", 0, si.size()), &menu);
+ deleteAllAction->setEnabled(si.size() > 0);
+
+ // Delete by file: Find indexes of breakpoints of the same file
+ QAction *deleteByFileAction = 0;
+ QList<int> breakPointsOfFile;
+ if (indexUnderMouse.isValid()) {
+ const QString file = itemModel->data(indexUnderMouse.sibling(indexUnderMouse.row(), 2)).toString();
+ if (!file.isEmpty()) {
+ for (int i = 0; i < rowCount; i++)
+ if (itemModel->data(itemModel->index(i, 2)).toString() == file)
+ breakPointsOfFile.push_back(i);
+ if (breakPointsOfFile.size() > 1) {
+ deleteByFileAction = new QAction(tr("Delete breakpoints of \"%1\"").arg(file), &menu);
+ deleteByFileAction->setEnabled(true);
+ }
+ }
+ }
+ if (!deleteByFileAction) {
+ deleteByFileAction = new QAction(tr("Delete breakpoints of file"), &menu);
+ deleteByFileAction->setEnabled(false);
+ }
- QAction *act1 = new QAction(tr("Adjust column widths to contents"), &menu);
+ QAction *adjustColumnAction = new QAction(tr("Adjust column widths to contents"), &menu);
- QAction *act2 = new QAction(tr("Always adjust column widths to contents"), &menu);
- act2->setCheckable(true);
- act2->setChecked(m_alwaysResizeColumnsToContents);
+ QAction *alwaysAdjustAction = new QAction(tr("Always adjust column widths to contents"), &menu);
+ alwaysAdjustAction->setCheckable(true);
+ alwaysAdjustAction->setChecked(m_alwaysResizeColumnsToContents);
- QAction *act3 = new QAction(tr("Edit condition...", 0, si.size()), &menu);
- act3->setEnabled(si.size() > 0);
+ QAction *editConditionAction = new QAction(tr("Edit condition...", 0, si.size()), &menu);
+ editConditionAction->setEnabled(si.size() > 0);
- QAction *act4 = new QAction(tr("Synchronize breakpoints"), &menu);
+ QAction *synchronizeAction = new QAction(tr("Synchronize breakpoints"), &menu);
QModelIndex idx0 = (si.size() ? si.front() : QModelIndex());
QModelIndex idx2 = idx0.sibling(idx0.row(), 2);
- bool enabled = si.isEmpty() || model()->data(idx0, Qt::UserRole).toBool();
- QString str5 = enabled ? tr("Disable breakpoint") : tr("Enable breakpoint");
- QAction *act5 = new QAction(str5, &menu);
- act5->setEnabled(si.size() > 0);
-
- bool fullpath = si.isEmpty() || model()->data(idx2, Qt::UserRole).toBool();
- QString str6 = fullpath ? tr("Use short path") : tr("Use full path");
- QAction *act6 = new QAction(str6, &menu);
- act6->setEnabled(si.size() > 0);
-
- QAction *act7 = new QAction(this);
- act7->setText(tr("Set Breakpoint at Function..."));
- QAction *act8 = new QAction(this);
- act8->setText(tr("Set Breakpoint at Function \"main\""));
-
- menu.addAction(act0);
- menu.addAction(act3);
- menu.addAction(act5);
- menu.addAction(act6);
+ bool enabled = si.isEmpty() || itemModel->data(idx0, Qt::UserRole).toBool();
+ const QString str5 = enabled ? tr("Disable breakpoint") : tr("Enable breakpoint");
+ QAction *toggleEnabledAction = new QAction(str5, &menu);
+ toggleEnabledAction->setEnabled(si.size() > 0);
+
+ const bool fullpath = si.isEmpty() || itemModel->data(idx2, Qt::UserRole).toBool();
+ const QString str6 = fullpath ? tr("Use short path") : tr("Use full path");
+ QAction *pathAction = new QAction(str6, &menu);
+ pathAction->setEnabled(si.size() > 0);
+
+ QAction *breakAtFunctionAction = new QAction(tr("Set Breakpoint at Function..."), this);
+ QAction *breakAtMainAction = new QAction(tr("Set Breakpoint at Function \"main\""), this);
+
+ menu.addAction(deleteAction);
+ menu.addAction(editConditionAction);
+ menu.addAction(toggleEnabledAction);
+ menu.addAction(pathAction);
+ menu.addSeparator();
+ menu.addAction(deleteAllAction);
+ menu.addAction(deleteByFileAction);
menu.addSeparator();
- menu.addAction(act1);
- menu.addAction(act2);
- menu.addAction(act4);
+ menu.addAction(adjustColumnAction);
+ menu.addAction(alwaysAdjustAction);
+ menu.addAction(synchronizeAction);
menu.addSeparator();
- menu.addAction(act7);
- menu.addAction(act8);
+ menu.addAction(breakAtFunctionAction);
+ menu.addAction(breakAtMainAction);
menu.addSeparator();
menu.addAction(theDebuggerAction(SettingsDialog));
QAction *act = menu.exec(ev->globalPos());
- if (act == act0)
+ if (act == deleteAction) {
deleteBreakpoints(si);
- else if (act == act1)
+ } else if (act == deleteAllAction) {
+ QList<int> allRows;
+ for (int i = 0; i < rowCount; i++)
+ allRows.push_back(i);
+ deleteBreakpoints(allRows);
+ } else if (act == deleteByFileAction)
+ deleteBreakpoints(breakPointsOfFile);
+ else if (act == adjustColumnAction)
resizeColumnsToContents();
- else if (act == act2)
+ else if (act == alwaysAdjustAction)
setAlwaysResizeColumnsToContents(!m_alwaysResizeColumnsToContents);
- else if (act == act3)
+ else if (act == editConditionAction)
editConditions(si);
- else if (act == act4)
+ else if (act == synchronizeAction)
emit breakpointSynchronizationRequested();
- else if (act == act5)
+ else if (act == toggleEnabledAction)
setBreakpointsEnabled(si, !enabled);
- else if (act == act6)
+ else if (act == pathAction)
setBreakpointsFullPath(si, !enabled);
- else if (act == act7) {
+ else if (act == breakAtFunctionAction) {
BreakByFunctionDialog dlg(this);
if (dlg.exec())
emit breakByFunctionRequested(dlg.functionName());
- } else if (act == act8)
+ } else if (act == breakAtMainAction)
emit breakByFunctionMainRequested();
}
@@ -224,14 +258,21 @@ void BreakWindow::deleteBreakpoints(const QModelIndexList &indexes)
QList<int> list;
foreach (const QModelIndex &idx, indexes)
list.append(idx.row());
+ deleteBreakpoints(list);
+}
+void BreakWindow::deleteBreakpoints(QList<int> list)
+{
+ if (list.empty())
+ return;
+ const int firstRow = list.front();
qSort(list.begin(), list.end());
for (int i = list.size(); --i >= 0; )
emit breakpointDeleted(i);
- QModelIndex idx = indexes.front();
- int row = qMax(idx.row(), model()->rowCount() - list.size() - 1);
- setCurrentIndex(idx.sibling(row, 0));
+ const int row = qMax(firstRow, model()->rowCount() - list.size() - 1);
+ if (row >= 0)
+ setCurrentIndex(model()->index(row, 0));
}
void BreakWindow::editConditions(const QModelIndexList &list)