diff --git a/src/plugins/cppcheck/cppcheckoptions.cpp b/src/plugins/cppcheck/cppcheckoptions.cpp index 11563430cc1..9a16319bb29 100644 --- a/src/plugins/cppcheck/cppcheckoptions.cpp +++ b/src/plugins/cppcheck/cppcheckoptions.cpp @@ -120,6 +120,33 @@ void OptionsWidget::save(CppcheckOptions &options) const options.guessArguments = m_guessArguments->isChecked(); } +class CppcheckOptionsPageWidget : public Core::IOptionsPageWidget +{ +public: + CppcheckOptionsPageWidget(CppcheckOptionsPage *page) + : m_page(page) + { + m_optionWidget = new OptionsWidget; + + auto vbox = new QVBoxLayout(this); + vbox->addWidget(m_optionWidget); + + m_optionWidget->load(m_page->m_tool.options()); + } + + void apply() final + { + CppcheckOptions options; + m_optionWidget->save(options); + m_page->save(options); + m_page->m_tool.updateOptions(options); + m_page->m_trigger.recheck(); + } + + OptionsWidget *m_optionWidget; + CppcheckOptionsPage *m_page; +}; + CppcheckOptionsPage::CppcheckOptionsPage(CppcheckTool &tool, CppcheckTrigger &trigger): m_tool(tool), m_trigger(trigger) @@ -130,6 +157,8 @@ CppcheckOptionsPage::CppcheckOptionsPage(CppcheckTool &tool, CppcheckTrigger &tr setDisplayCategory(::Debugger::Tr::tr("Analyzer")); setCategoryIconPath(Analyzer::Icons::SETTINGSCATEGORY_ANALYZER); + setWidgetCreator([this] { return new CppcheckOptionsPageWidget(this); }); + CppcheckOptions options; if (HostOsInfo::isAnyUnixHost()) { options.binary = "cppcheck"; @@ -145,27 +174,6 @@ CppcheckOptionsPage::CppcheckOptionsPage(CppcheckTool &tool, CppcheckTrigger &tr m_tool.updateOptions(options); } -QWidget *CppcheckOptionsPage::widget() -{ - if (!m_widget) - m_widget = new OptionsWidget; - m_widget->load(m_tool.options()); - return m_widget.data(); -} - -void CppcheckOptionsPage::apply() -{ - CppcheckOptions options; - m_widget->save(options); - save(options); - m_tool.updateOptions(options); - m_trigger.recheck(); -} - -void CppcheckOptionsPage::finish() -{ -} - void CppcheckOptionsPage::save(const CppcheckOptions &options) const { QSettings *s = Core::ICore::settings(); diff --git a/src/plugins/cppcheck/cppcheckoptions.h b/src/plugins/cppcheck/cppcheckoptions.h index 7c23d69f605..48526cd540f 100644 --- a/src/plugins/cppcheck/cppcheckoptions.h +++ b/src/plugins/cppcheck/cppcheckoptions.h @@ -6,10 +6,6 @@ #include #include -#include -#include -#include - QT_BEGIN_NAMESPACE class QLineEdit; class QCheckBox; @@ -75,17 +71,13 @@ class CppcheckOptionsPage final : public Core::IOptionsPage public: explicit CppcheckOptionsPage(CppcheckTool &tool, CppcheckTrigger &trigger); - QWidget *widget() final; - void apply() final; - void finish() final; - private: + friend class CppcheckOptionsPageWidget; void save(const CppcheckOptions &options) const; void load(CppcheckOptions &options) const; CppcheckTool &m_tool; CppcheckTrigger &m_trigger; - QPointer m_widget; }; } // Cppcheck::Internal