From 4b4cbd142cca05e03d6a182030cf58d4cca60e1b Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 9 Aug 2023 09:26:57 +0200 Subject: [PATCH] Debugger: Rename main option page to DebuggerSettingsPage That's the page in the 'Kits' category. Also, move code to the canonical place at the end of the file and self-register the factory at plugin load. Change-Id: I6bdf7288a6a475447ea8a5a57b9118d49831a7b2 Reviewed-by: Jarek Kobus --- src/plugins/debugger/debuggeritemmanager.cpp | 327 +++++++++---------- 1 file changed, 162 insertions(+), 165 deletions(-) diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp index ff08d9d8d89..62c58e5abc6 100644 --- a/src/plugins/debugger/debuggeritemmanager.cpp +++ b/src/plugins/debugger/debuggeritemmanager.cpp @@ -79,7 +79,6 @@ public: PersistentSettingsWriter m_writer; DebuggerItemModel *m_model = nullptr; - IOptionsPage *m_optionsPage = nullptr; }; static DebuggerItemManagerPrivate *d = nullptr; @@ -493,168 +492,6 @@ void DebuggerItemConfigWidget::binaryPathHasChanged() store(); } -// -------------------------------------------------------------------------- -// DebuggerConfigWidget -// -------------------------------------------------------------------------- - -class DebuggerConfigWidget : public IOptionsPageWidget -{ -public: - DebuggerConfigWidget() - { - m_addButton = new QPushButton(Tr::tr("Add"), this); - - m_cloneButton = new QPushButton(Tr::tr("Clone"), this); - m_cloneButton->setEnabled(false); - - m_delButton = new QPushButton(this); - m_delButton->setEnabled(false); - - m_container = new DetailsWidget(this); - m_container->setState(DetailsWidget::NoSummary); - m_container->setVisible(false); - - m_debuggerView = new QTreeView(this); - m_debuggerView->setModel(d->m_model); - m_debuggerView->setUniformRowHeights(true); - m_debuggerView->setSelectionMode(QAbstractItemView::SingleSelection); - m_debuggerView->setSelectionBehavior(QAbstractItemView::SelectRows); - m_debuggerView->expandAll(); - - auto header = m_debuggerView->header(); - header->setStretchLastSection(false); - header->setSectionResizeMode(0, QHeaderView::ResizeToContents); - header->setSectionResizeMode(1, QHeaderView::ResizeToContents); - header->setSectionResizeMode(2, QHeaderView::Stretch); - - auto buttonLayout = new QVBoxLayout(); - buttonLayout->setSpacing(6); - buttonLayout->setContentsMargins(0, 0, 0, 0); - buttonLayout->addWidget(m_addButton); - buttonLayout->addWidget(m_cloneButton); - buttonLayout->addWidget(m_delButton); - buttonLayout->addItem(new QSpacerItem(10, 40, QSizePolicy::Minimum, QSizePolicy::Expanding)); - - auto verticalLayout = new QVBoxLayout(); - verticalLayout->addWidget(m_debuggerView); - verticalLayout->addWidget(m_container); - - auto horizontalLayout = new QHBoxLayout(this); - horizontalLayout->addLayout(verticalLayout); - horizontalLayout->addLayout(buttonLayout); - - connect(m_debuggerView->selectionModel(), &QItemSelectionModel::currentChanged, - this, &DebuggerConfigWidget::currentDebuggerChanged, Qt::QueuedConnection); - - connect(m_addButton, &QAbstractButton::clicked, - this, &DebuggerConfigWidget::addDebugger, Qt::QueuedConnection); - connect(m_cloneButton, &QAbstractButton::clicked, - this, &DebuggerConfigWidget::cloneDebugger, Qt::QueuedConnection); - connect(m_delButton, &QAbstractButton::clicked, - this, &DebuggerConfigWidget::removeDebugger, Qt::QueuedConnection); - - m_itemConfigWidget = new DebuggerItemConfigWidget; - m_container->setWidget(m_itemConfigWidget); - updateButtons(); - } - - void apply() final - { - m_itemConfigWidget->store(); - d->m_model->apply(); - } - - void finish() final - { - d->m_model->cancel(); - } - - void cloneDebugger(); - void addDebugger(); - void removeDebugger(); - void currentDebuggerChanged(const QModelIndex &newCurrent); - void updateButtons(); - - QTreeView *m_debuggerView; - QPushButton *m_addButton; - QPushButton *m_cloneButton; - QPushButton *m_delButton; - DetailsWidget *m_container; - DebuggerItemConfigWidget *m_itemConfigWidget; -}; - -void DebuggerConfigWidget::cloneDebugger() -{ - DebuggerTreeItem *treeItem = d->m_model->currentTreeItem(); - if (!treeItem) - return; - - DebuggerItem *item = &treeItem->m_item; - DebuggerItem newItem; - newItem.createId(); - newItem.setCommand(item->command()); - newItem.setUnexpandedDisplayName(d->uniqueDisplayName(Tr::tr("Clone of %1").arg(item->displayName()))); - newItem.reinitializeFromFile(); - newItem.setAutoDetected(false); - newItem.setGeneric(item->isGeneric()); - newItem.setEngineType(item->engineType()); - auto addedItem = d->m_model->addDebugger(newItem, true); - m_debuggerView->setCurrentIndex(d->m_model->indexForItem(addedItem)); -} - -void DebuggerConfigWidget::addDebugger() -{ - DebuggerItem item; - item.createId(); - item.setEngineType(NoEngineType); - item.setUnexpandedDisplayName(d->uniqueDisplayName(Tr::tr("New Debugger"))); - item.setAutoDetected(false); - auto addedItem = d->m_model->addDebugger(item, true); - m_debuggerView->setCurrentIndex(d->m_model->indexForItem(addedItem)); -} - -void DebuggerConfigWidget::removeDebugger() -{ - DebuggerTreeItem *treeItem = d->m_model->currentTreeItem(); - QTC_ASSERT(treeItem, return); - treeItem->m_removed = !treeItem->m_removed; - treeItem->update(); - updateButtons(); -} - -void DebuggerConfigWidget::currentDebuggerChanged(const QModelIndex &newCurrent) -{ - d->m_model->setCurrentIndex(newCurrent); - updateButtons(); -} - -void DebuggerConfigWidget::updateButtons() -{ - DebuggerTreeItem *titem = d->m_model->currentTreeItem(); - DebuggerItem *item = titem ? &titem->m_item : nullptr; - - m_itemConfigWidget->load(item); - m_container->setVisible(item != nullptr); - m_cloneButton->setEnabled(item && item->isValid() && item->canClone()); - m_delButton->setEnabled(item && !item->isAutoDetected()); - m_delButton->setText(item && titem->m_removed ? Tr::tr("Restore") : Tr::tr("Remove")); -} - -// -------------------------------------------------------------------------- -// DebuggerOptionsPage -// -------------------------------------------------------------------------- - -class DebuggerOptionsPage : public Core::IOptionsPage -{ -public: - DebuggerOptionsPage() { - setId(ProjectExplorer::Constants::DEBUGGER_SETTINGS_PAGE_ID); - setDisplayName(Tr::tr("Debuggers")); - setCategory(ProjectExplorer::Constants::KITS_SETTINGS_CATEGORY); - setWidgetCreator([] { return new DebuggerConfigWidget; }); - } -}; - void DebuggerItemManagerPrivate::autoDetectCdbDebuggers() { FilePaths cdbs; @@ -891,12 +728,10 @@ DebuggerItemManagerPrivate::DebuggerItemManagerPrivate() { d = this; m_model = new DebuggerItemModel; - m_optionsPage = new DebuggerOptionsPage; } DebuggerItemManagerPrivate::~DebuggerItemManagerPrivate() { - delete m_optionsPage; delete m_model; } @@ -1120,4 +955,166 @@ void DebuggerItemManager::listDetectedDebuggers(const QString &detectionSource, *logMessage = logMessages.join('\n'); } + +// DebuggerSettingsPageWidget + +class DebuggerSettingsPageWidget : public IOptionsPageWidget +{ +public: + DebuggerSettingsPageWidget() + { + m_addButton = new QPushButton(Tr::tr("Add"), this); + + m_cloneButton = new QPushButton(Tr::tr("Clone"), this); + m_cloneButton->setEnabled(false); + + m_delButton = new QPushButton(this); + m_delButton->setEnabled(false); + + m_container = new DetailsWidget(this); + m_container->setState(DetailsWidget::NoSummary); + m_container->setVisible(false); + + m_debuggerView = new QTreeView(this); + m_debuggerView->setModel(d->m_model); + m_debuggerView->setUniformRowHeights(true); + m_debuggerView->setSelectionMode(QAbstractItemView::SingleSelection); + m_debuggerView->setSelectionBehavior(QAbstractItemView::SelectRows); + m_debuggerView->expandAll(); + + auto header = m_debuggerView->header(); + header->setStretchLastSection(false); + header->setSectionResizeMode(0, QHeaderView::ResizeToContents); + header->setSectionResizeMode(1, QHeaderView::ResizeToContents); + header->setSectionResizeMode(2, QHeaderView::Stretch); + + auto buttonLayout = new QVBoxLayout(); + buttonLayout->setSpacing(6); + buttonLayout->setContentsMargins(0, 0, 0, 0); + buttonLayout->addWidget(m_addButton); + buttonLayout->addWidget(m_cloneButton); + buttonLayout->addWidget(m_delButton); + buttonLayout->addItem(new QSpacerItem(10, 40, QSizePolicy::Minimum, QSizePolicy::Expanding)); + + auto verticalLayout = new QVBoxLayout(); + verticalLayout->addWidget(m_debuggerView); + verticalLayout->addWidget(m_container); + + auto horizontalLayout = new QHBoxLayout(this); + horizontalLayout->addLayout(verticalLayout); + horizontalLayout->addLayout(buttonLayout); + + connect(m_debuggerView->selectionModel(), &QItemSelectionModel::currentChanged, + this, &DebuggerSettingsPageWidget::currentDebuggerChanged, Qt::QueuedConnection); + + connect(m_addButton, &QAbstractButton::clicked, + this, &DebuggerSettingsPageWidget::addDebugger, Qt::QueuedConnection); + connect(m_cloneButton, &QAbstractButton::clicked, + this, &DebuggerSettingsPageWidget::cloneDebugger, Qt::QueuedConnection); + connect(m_delButton, &QAbstractButton::clicked, + this, &DebuggerSettingsPageWidget::removeDebugger, Qt::QueuedConnection); + + m_itemConfigWidget = new DebuggerItemConfigWidget; + m_container->setWidget(m_itemConfigWidget); + updateButtons(); + } + + void apply() final + { + m_itemConfigWidget->store(); + d->m_model->apply(); + } + + void finish() final + { + d->m_model->cancel(); + } + + void cloneDebugger(); + void addDebugger(); + void removeDebugger(); + void currentDebuggerChanged(const QModelIndex &newCurrent); + void updateButtons(); + + QTreeView *m_debuggerView; + QPushButton *m_addButton; + QPushButton *m_cloneButton; + QPushButton *m_delButton; + DetailsWidget *m_container; + DebuggerItemConfigWidget *m_itemConfigWidget; +}; + +void DebuggerSettingsPageWidget::cloneDebugger() +{ + DebuggerTreeItem *treeItem = d->m_model->currentTreeItem(); + if (!treeItem) + return; + + DebuggerItem *item = &treeItem->m_item; + DebuggerItem newItem; + newItem.createId(); + newItem.setCommand(item->command()); + newItem.setUnexpandedDisplayName(d->uniqueDisplayName(Tr::tr("Clone of %1").arg(item->displayName()))); + newItem.reinitializeFromFile(); + newItem.setAutoDetected(false); + newItem.setGeneric(item->isGeneric()); + newItem.setEngineType(item->engineType()); + auto addedItem = d->m_model->addDebugger(newItem, true); + m_debuggerView->setCurrentIndex(d->m_model->indexForItem(addedItem)); +} + +void DebuggerSettingsPageWidget::addDebugger() +{ + DebuggerItem item; + item.createId(); + item.setEngineType(NoEngineType); + item.setUnexpandedDisplayName(d->uniqueDisplayName(Tr::tr("New Debugger"))); + item.setAutoDetected(false); + auto addedItem = d->m_model->addDebugger(item, true); + m_debuggerView->setCurrentIndex(d->m_model->indexForItem(addedItem)); +} + +void DebuggerSettingsPageWidget::removeDebugger() +{ + DebuggerTreeItem *treeItem = d->m_model->currentTreeItem(); + QTC_ASSERT(treeItem, return); + treeItem->m_removed = !treeItem->m_removed; + treeItem->update(); + updateButtons(); +} + +void DebuggerSettingsPageWidget::currentDebuggerChanged(const QModelIndex &newCurrent) +{ + d->m_model->setCurrentIndex(newCurrent); + updateButtons(); +} + +void DebuggerSettingsPageWidget::updateButtons() +{ + DebuggerTreeItem *titem = d->m_model->currentTreeItem(); + DebuggerItem *item = titem ? &titem->m_item : nullptr; + + m_itemConfigWidget->load(item); + m_container->setVisible(item != nullptr); + m_cloneButton->setEnabled(item && item->isValid() && item->canClone()); + m_delButton->setEnabled(item && !item->isAutoDetected()); + m_delButton->setText(item && titem->m_removed ? Tr::tr("Restore") : Tr::tr("Remove")); +} + + +// DebuggerSettingsPage + +class DebuggerSettingsPage : public Core::IOptionsPage +{ +public: + DebuggerSettingsPage() { + setId(ProjectExplorer::Constants::DEBUGGER_SETTINGS_PAGE_ID); + setDisplayName(Tr::tr("Debuggers")); + setCategory(ProjectExplorer::Constants::KITS_SETTINGS_CATEGORY); + setWidgetCreator([] { return new DebuggerSettingsPageWidget; }); + } +}; + +const DebuggerSettingsPage settingsPage; + } // namespace Debugger