From 4bd26c3e4b03dba2825dc77583f6d85a8f696345 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 10 Dec 2019 10:35:45 +0100 Subject: [PATCH] Debugger: Add ability to hide view columns Not perfect, e.g. one would probably expect the items to appear in the context menu of the header views, too, not just on the main background of the view, but better than nothing. Task-number: QTCREATORBUG-23342 Change-Id: Ifdc44dcfd390112faa7b15bb8a51d809e42d7b29 Reviewed-by: Christian Stenger --- src/plugins/debugger/breakhandler.cpp | 6 ++---- src/plugins/debugger/commonoptionspage.cpp | 2 -- src/plugins/debugger/debuggeractions.cpp | 18 ----------------- src/plugins/debugger/debuggeractions.h | 2 -- src/plugins/debugger/debuggercore.h | 3 +++ src/plugins/debugger/debuggerengine.cpp | 2 -- src/plugins/debugger/debuggerplugin.cpp | 20 +++++++++++++++++++ src/plugins/debugger/moduleshandler.cpp | 2 +- .../debugger/peripheralregisterhandler.cpp | 2 +- src/plugins/debugger/registerhandler.cpp | 2 +- src/plugins/debugger/sourcefileshandler.cpp | 2 +- src/plugins/debugger/stackhandler.cpp | 5 +---- src/plugins/debugger/stackwindow.cpp | 6 ------ src/plugins/debugger/threadshandler.cpp | 1 + src/plugins/debugger/watchhandler.cpp | 2 +- 15 files changed, 32 insertions(+), 43 deletions(-) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index f393bcff4ad..dece318182b 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -1680,8 +1680,7 @@ bool BreakHandler::contextMenuEvent(const ItemViewEvent &ev) menu->addSeparator(); menu->addAction(action(UseToolTipsInBreakpointsView)); - menu->addAction(action(UseAddressInBreakpointsView)); - menu->addSeparator(); + Internal::addHideColumnActions(menu, ev.view()); menu->addAction(action(SettingsDialog)); menu->popup(ev.globalPos()); @@ -2669,8 +2668,7 @@ bool BreakpointManager::contextMenuEvent(const ItemViewEvent &ev) menu->addSeparator(); menu->addAction(action(UseToolTipsInBreakpointsView)); - menu->addAction(action(UseAddressInBreakpointsView)); - menu->addSeparator(); + Internal::addHideColumnActions(menu, ev.view()); menu->addAction(action(SettingsDialog)); menu->popup(ev.globalPos()); diff --git a/src/plugins/debugger/commonoptionspage.cpp b/src/plugins/debugger/commonoptionspage.cpp index de39258df10..52007a36365 100644 --- a/src/plugins/debugger/commonoptionspage.cpp +++ b/src/plugins/debugger/commonoptionspage.cpp @@ -228,8 +228,6 @@ QWidget *CommonOptionsPage::widget() m_group.insert(action(AlwaysAdjustColumnWidths), nullptr); m_group.insert(action(UseToolTipsInBreakpointsView), nullptr); m_group.insert(action(UseToolTipsInStackView), nullptr); - m_group.insert(action(UseAddressInBreakpointsView), nullptr); - m_group.insert(action(UseAddressInStackView), nullptr); m_group.insert(action(MaximalStackDepth), spinBoxMaximalStackDepth); m_group.insert(action(ShowStdNamespace), nullptr); m_group.insert(action(ShowQtNamespace), nullptr); diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index ace0f759dc2..49ebc219e50 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -541,24 +541,6 @@ DebuggerSettings::DebuggerSettings() item->setDefaultValue(true); insertItem(UseToolTipsInStackView, item); - item = new SavedAction; - item->setSettingsKey(debugModeGroup, "UseAddressInBreakpointsView"); - item->setText(tr("Show Address Data in Breakpoints View when Debugging")); - item->setToolTip(tr("

Checking this will show a column with address " - "information in the breakpoint view during debugging.")); - item->setCheckable(true); - item->setDefaultValue(false); - insertItem(UseAddressInBreakpointsView, item); - - item = new SavedAction; - item->setSettingsKey(debugModeGroup, "UseAddressInStackView"); - item->setText(tr("Show Address Data in Stack View when Debugging")); - item->setToolTip(tr("

Checking this will show a column with address " - "information in the stack view during debugging.")); - item->setCheckable(true); - item->setDefaultValue(false); - insertItem(UseAddressInStackView, item); - item = new SavedAction; item->setSettingsKey(debugModeGroup, "SkipKnownFrames"); item->setText(tr("Skip Known Frames")); diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h index 12fcae4e78f..05d9855b34d 100644 --- a/src/plugins/debugger/debuggeractions.h +++ b/src/plugins/debugger/debuggeractions.h @@ -101,8 +101,6 @@ enum DebuggerActionCode UseToolTipsInLocalsView, UseToolTipsInBreakpointsView, UseToolTipsInStackView, - UseAddressInBreakpointsView, - UseAddressInStackView, RegisterForPostMortem, AlwaysAdjustColumnWidths, diff --git a/src/plugins/debugger/debuggercore.h b/src/plugins/debugger/debuggercore.h index af0de1c25b9..d3672e78012 100644 --- a/src/plugins/debugger/debuggercore.h +++ b/src/plugins/debugger/debuggercore.h @@ -77,6 +77,9 @@ QAction *addAction(QMenu *menu, const QString &d1, const QString &d2, bool on, QAction *addCheckableAction(QMenu *menu, const QString &display, bool on, bool checked, const std::function &onTriggered); +void addHideColumnActions(QMenu *menu, QWidget *widget); + + // Qt's various build paths for unpatched versions QStringList qtBuildPaths(); diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index a90c569c6dc..e0f00b883f1 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -731,8 +731,6 @@ void DebuggerEnginePrivate::setupViews() m_breakView->setWindowIcon(Icons::BREAKPOINTS.icon()); m_breakView->setSelectionMode(QAbstractItemView::ExtendedSelection); m_breakView->setSpanColumn(BreakpointFunctionColumn); - connect(action(UseAddressInBreakpointsView), &QAction::toggled, - this, [this](bool on) { m_breakView->setColumnHidden(BreakpointAddressColumn, !on); }); m_breakView->setSettings(settings, "Debugger.BreakWindow"); m_breakView->setModel(m_breakHandler.model()); m_breakView->setRootIsDecorated(true); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index d75389764a6..a394e7b76da 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -460,6 +460,26 @@ QAction *addCheckableAction(QMenu *menu, const QString &display, bool on, bool c return act; } +void addHideColumnActions(QMenu *menu, QWidget *widget) +{ + QTreeView *view = qobject_cast(widget); + QTC_ASSERT(view, return); + QAbstractItemModel *model = view->model(); + QTC_ASSERT(model, return); + const int columns = model->columnCount(); + menu->addSeparator(); + for (int i = 0; i < columns; ++i) { + QString columnName = model->headerData(i, Qt::Horizontal).toString(); + QAction *act = menu->addAction(DebuggerPlugin::tr("Show %1 Column").arg(columnName)); + act->setCheckable(true); + act->setChecked(!view->isColumnHidden(i)); + QObject::connect(act, &QAction::toggled, menu, [view, i](bool on) { + view->setColumnHidden(i, !on); + }); + } + menu->addSeparator(); +} + /////////////////////////////////////////////////////////////////////// // // DebugMode diff --git a/src/plugins/debugger/moduleshandler.cpp b/src/plugins/debugger/moduleshandler.cpp index 4fd1e40669d..dda92488c39 100644 --- a/src/plugins/debugger/moduleshandler.cpp +++ b/src/plugins/debugger/moduleshandler.cpp @@ -223,7 +223,7 @@ bool ModulesModel::contextMenuEvent(const ItemViewEvent &ev) canShowSymbols && moduleNameValid, [this, modulePath] { engine->requestModuleSections(modulePath); }); - menu->addSeparator(); + Internal::addHideColumnActions(menu, ev.view()); menu->addAction(action(SettingsDialog)); menu->popup(ev.globalPos()); diff --git a/src/plugins/debugger/peripheralregisterhandler.cpp b/src/plugins/debugger/peripheralregisterhandler.cpp index 1603faf3dc9..0e0f035a979 100644 --- a/src/plugins/debugger/peripheralregisterhandler.cpp +++ b/src/plugins/debugger/peripheralregisterhandler.cpp @@ -772,7 +772,7 @@ bool PeripheralRegisterHandler::contextMenuEvent(const ItemViewEvent &ev) menu->addMenu(fmtMenu); } - menu->addSeparator(); + Internal::addHideColumnActions(menu, ev.view()); menu->addAction(action(SettingsDialog)); menu->popup(ev.globalPos()); return true; diff --git a/src/plugins/debugger/registerhandler.cpp b/src/plugins/debugger/registerhandler.cpp index d35abc5c65a..0553efd82a1 100644 --- a/src/plugins/debugger/registerhandler.cpp +++ b/src/plugins/debugger/registerhandler.cpp @@ -756,7 +756,7 @@ bool RegisterHandler::contextMenuEvent(const ItemViewEvent &ev) addFormatAction(tr("Octal"), OctalFormat); addFormatAction(tr("Binary"), BinaryFormat); - menu->addSeparator(); + Internal::addHideColumnActions(menu, ev.view()); menu->addAction(action(SettingsDialog)); menu->popup(ev.globalPos()); return true; diff --git a/src/plugins/debugger/sourcefileshandler.cpp b/src/plugins/debugger/sourcefileshandler.cpp index eec9a4cca58..16873197768 100644 --- a/src/plugins/debugger/sourcefileshandler.cpp +++ b/src/plugins/debugger/sourcefileshandler.cpp @@ -137,7 +137,7 @@ bool SourceFilesHandler::setData(const QModelIndex &idx, const QVariant &data, i addAction(tr("Open File \"%1\"").arg(name), true, [this, name] { m_engine->gotoLocation(name); }); - menu->addSeparator(); + Internal::addHideColumnActions(menu, ev.view()); menu->addAction(action(SettingsDialog)); menu->popup(ev.globalPos()); return true; diff --git a/src/plugins/debugger/stackhandler.cpp b/src/plugins/debugger/stackhandler.cpp index ea26e929995..7f20afaeef3 100644 --- a/src/plugins/debugger/stackhandler.cpp +++ b/src/plugins/debugger/stackhandler.cpp @@ -444,12 +444,9 @@ bool StackHandler::contextMenuEvent(const ItemViewEvent &ev) [this] { m_engine->loadSymbolsForStack(); }); } - if (m_engine->hasCapability(MemoryAddressCapability)) - menu->addAction(action(UseAddressInStackView)); - menu->addSeparator(); menu->addAction(action(UseToolTipsInStackView)); - menu->addSeparator(); + Internal::addHideColumnActions(menu, ev.view()); menu->addAction(action(SettingsDialog)); menu->popup(ev.globalPos()); return true; diff --git a/src/plugins/debugger/stackwindow.cpp b/src/plugins/debugger/stackwindow.cpp index 7ed3da160d2..e810fbec0c4 100644 --- a/src/plugins/debugger/stackwindow.cpp +++ b/src/plugins/debugger/stackwindow.cpp @@ -40,10 +40,7 @@ namespace Internal { StackTreeView::StackTreeView(QWidget *parent) : BaseTreeView(parent) { - connect(action(UseAddressInStackView), &QAction::toggled, - this, &StackTreeView::showAddressColumn); setSpanColumn(StackFunctionNameColumn); - showAddressColumn(false); } void StackTreeView::setModel(QAbstractItemModel *model) @@ -58,9 +55,6 @@ void StackTreeView::setModel(QAbstractItemModel *model) if (!m_contentsAdjusted) adjustForContents(); }); - - // Resize for the current contents if any are available. - showAddressColumn(action(UseAddressInStackView)->isChecked()); } void StackTreeView::showAddressColumn(bool on) diff --git a/src/plugins/debugger/threadshandler.cpp b/src/plugins/debugger/threadshandler.cpp index 24ec22c693c..c63a6d5469b 100644 --- a/src/plugins/debugger/threadshandler.cpp +++ b/src/plugins/debugger/threadshandler.cpp @@ -258,6 +258,7 @@ bool ThreadsHandler::setData(const QModelIndex &idx, const QVariant &data, int r if (ev.as()) { auto menu = new QMenu; + Internal::addHideColumnActions(menu, ev.view()); menu->addAction(action(SettingsDialog)); menu->popup(ev.globalPos()); return true; diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index e444044fb54..d7c3e11f997 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -1741,7 +1741,7 @@ bool WatchModel::contextMenuEvent(const ItemViewEvent &ev) menu->addAction(action(UseDynamicType)); menu->addAction(action(SettingsDialog)); - menu->addSeparator(); + Internal::addHideColumnActions(menu, ev.view()); menu->addAction(action(SettingsDialog)); connect(menu, &QMenu::aboutToHide, menu, &QObject::deleteLater); menu->popup(ev.globalPos());