From 08ab75f2628c2c078c4e3e4f82e95f8dafee642d Mon Sep 17 00:00:00 2001 From: mlangkabel Date: Mon, 25 Jun 2018 16:00:20 +0200 Subject: [PATCH] logic: refactored QtProjectWizzard to remove duplicate definition of contents shown for setup and summary * also added current page count (e.g. 1/3) to project setup * moved the code for copying a source group to the settings classes so that the wizzard doesn't need to know which source groups may be there anymore. --- src/lib/CMakeLists.txt | 2 + src/lib/settings/SourceGroupSettings.h | 2 + .../settings/SourceGroupSettingsCEmpty.cpp | 5 + src/lib/settings/SourceGroupSettingsCEmpty.h | 2 + .../settings/SourceGroupSettingsCppEmpty.cpp | 5 + .../settings/SourceGroupSettingsCppEmpty.h | 2 + .../settings/SourceGroupSettingsCxxCdb.cpp | 5 + src/lib/settings/SourceGroupSettingsCxxCdb.h | 2 + .../settings/SourceGroupSettingsCxxCdbVs.cpp | 11 + .../settings/SourceGroupSettingsCxxCdbVs.h | 16 + .../SourceGroupSettingsCxxCodeblocks.cpp | 5 + .../SourceGroupSettingsCxxCodeblocks.h | 2 + .../SourceGroupSettingsCxxSonargraph.cpp | 5 + .../SourceGroupSettingsCxxSonargraph.h | 2 + .../settings/SourceGroupSettingsJavaEmpty.cpp | 5 + .../settings/SourceGroupSettingsJavaEmpty.h | 2 + .../SourceGroupSettingsJavaGradle.cpp | 5 + .../settings/SourceGroupSettingsJavaGradle.h | 2 + .../settings/SourceGroupSettingsJavaMaven.cpp | 5 + .../settings/SourceGroupSettingsJavaMaven.h | 2 + .../SourceGroupSettingsJavaSonargraph.cpp | 5 + .../SourceGroupSettingsJavaSonargraph.h | 2 + .../SonargraphXsdCmakeJsonModule.cpp | 6 +- .../sonargraph/SonargraphXsdCmakeJsonModule.h | 6 +- src/lib_gui/CMakeLists.txt | 2 + .../project_wizzard/QtProjectWizzard.cpp | 986 ++++++++---------- .../window/project_wizzard/QtProjectWizzard.h | 30 +- .../QtProjectWizzardContentCStandard.cpp | 12 - .../QtProjectWizzardContentCppStandard.cpp | 12 - .../QtProjectWizzardContentGroup.cpp | 13 + .../QtProjectWizzardContentGroup.h | 1 + .../QtProjectWizzardContentJavaStandard.cpp | 12 - .../QtProjectWizzardContentPaths.cpp | 2 +- .../QtProjectWizzardContentPaths.h | 2 +- .../project_wizzard/QtSourceGroupWizzard.h | 154 +++ .../QtSourceGroupWizzardPage.h | 163 +++ src/test/RefreshInfoGeneratorTestSuite.h | 5 + 37 files changed, 901 insertions(+), 599 deletions(-) create mode 100644 src/lib/settings/SourceGroupSettingsCxxCdbVs.cpp create mode 100644 src/lib/settings/SourceGroupSettingsCxxCdbVs.h create mode 100644 src/lib_gui/qt/window/project_wizzard/QtSourceGroupWizzard.h create mode 100644 src/lib_gui/qt/window/project_wizzard/QtSourceGroupWizzardPage.h diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 5ec92044..f6dc1d89 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -322,6 +322,8 @@ add_files( settings/SourceGroupSettingsCppEmpty.h settings/SourceGroupSettingsCxxCdb.cpp settings/SourceGroupSettingsCxxCdb.h + settings/SourceGroupSettingsCxxCdbVs.cpp + settings/SourceGroupSettingsCxxCdbVs.h settings/SourceGroupSettingsCxxCodeblocks.cpp settings/SourceGroupSettingsCxxCodeblocks.h settings/SourceGroupSettingsCxxSonargraph.cpp diff --git a/src/lib/settings/SourceGroupSettings.h b/src/lib/settings/SourceGroupSettings.h index 6f0782db..35d9b8eb 100644 --- a/src/lib/settings/SourceGroupSettings.h +++ b/src/lib/settings/SourceGroupSettings.h @@ -21,6 +21,8 @@ public: SourceGroupSettings(const std::string& id, SourceGroupType type, const ProjectSettings* projectSettings); virtual ~SourceGroupSettings() = default; + virtual std::shared_ptr createCopy() const = 0; + virtual void load(std::shared_ptr config); virtual void save(std::shared_ptr config); diff --git a/src/lib/settings/SourceGroupSettingsCEmpty.cpp b/src/lib/settings/SourceGroupSettingsCEmpty.cpp index b0b4ce76..24f1f2c3 100644 --- a/src/lib/settings/SourceGroupSettingsCEmpty.cpp +++ b/src/lib/settings/SourceGroupSettingsCEmpty.cpp @@ -5,6 +5,11 @@ SourceGroupSettingsCEmpty::SourceGroupSettingsCEmpty(const std::string& id, cons { } +std::shared_ptr SourceGroupSettingsCEmpty::createCopy() const +{ + return std::make_shared(*this); +} + void SourceGroupSettingsCEmpty::load(std::shared_ptr config) { SourceGroupSettingsCxx::load(config); diff --git a/src/lib/settings/SourceGroupSettingsCEmpty.h b/src/lib/settings/SourceGroupSettingsCEmpty.h index 2500e686..c136181d 100644 --- a/src/lib/settings/SourceGroupSettingsCEmpty.h +++ b/src/lib/settings/SourceGroupSettingsCEmpty.h @@ -19,6 +19,8 @@ class SourceGroupSettingsCEmpty public: SourceGroupSettingsCEmpty(const std::string& id, const ProjectSettings* projectSettings); + std::shared_ptr createCopy() const override; + void load(std::shared_ptr config) override; void save(std::shared_ptr config) override; diff --git a/src/lib/settings/SourceGroupSettingsCppEmpty.cpp b/src/lib/settings/SourceGroupSettingsCppEmpty.cpp index e354f7a6..59aab664 100644 --- a/src/lib/settings/SourceGroupSettingsCppEmpty.cpp +++ b/src/lib/settings/SourceGroupSettingsCppEmpty.cpp @@ -5,6 +5,11 @@ SourceGroupSettingsCppEmpty::SourceGroupSettingsCppEmpty(const std::string& id, { } +std::shared_ptr SourceGroupSettingsCppEmpty::createCopy() const +{ + return std::make_shared(*this); +} + void SourceGroupSettingsCppEmpty::load(std::shared_ptr config) { SourceGroupSettingsCxx::load(config); diff --git a/src/lib/settings/SourceGroupSettingsCppEmpty.h b/src/lib/settings/SourceGroupSettingsCppEmpty.h index 5a4155d0..d2036ff5 100644 --- a/src/lib/settings/SourceGroupSettingsCppEmpty.h +++ b/src/lib/settings/SourceGroupSettingsCppEmpty.h @@ -19,6 +19,8 @@ class SourceGroupSettingsCppEmpty public: SourceGroupSettingsCppEmpty(const std::string& id, const ProjectSettings* projectSettings); + std::shared_ptr createCopy() const override; + void load(std::shared_ptr config) override; void save(std::shared_ptr config) override; diff --git a/src/lib/settings/SourceGroupSettingsCxxCdb.cpp b/src/lib/settings/SourceGroupSettingsCxxCdb.cpp index 80b9b56d..77dc598e 100644 --- a/src/lib/settings/SourceGroupSettingsCxxCdb.cpp +++ b/src/lib/settings/SourceGroupSettingsCxxCdb.cpp @@ -9,6 +9,11 @@ SourceGroupSettingsCxxCdb::SourceGroupSettingsCxxCdb(const std::string& id, cons { } +std::shared_ptr SourceGroupSettingsCxxCdb::createCopy() const +{ + return std::make_shared(*this); +} + void SourceGroupSettingsCxxCdb::load(std::shared_ptr config) { SourceGroupSettingsCxx::load(config); diff --git a/src/lib/settings/SourceGroupSettingsCxxCdb.h b/src/lib/settings/SourceGroupSettingsCxxCdb.h index dfed9879..14721039 100644 --- a/src/lib/settings/SourceGroupSettingsCxxCdb.h +++ b/src/lib/settings/SourceGroupSettingsCxxCdb.h @@ -14,6 +14,8 @@ class SourceGroupSettingsCxxCdb public: SourceGroupSettingsCxxCdb(const std::string& id, const ProjectSettings* projectSettings); + std::shared_ptr createCopy() const override; + void load(std::shared_ptr config) override; void save(std::shared_ptr config) override; diff --git a/src/lib/settings/SourceGroupSettingsCxxCdbVs.cpp b/src/lib/settings/SourceGroupSettingsCxxCdbVs.cpp new file mode 100644 index 00000000..fa464ba7 --- /dev/null +++ b/src/lib/settings/SourceGroupSettingsCxxCdbVs.cpp @@ -0,0 +1,11 @@ +#include "settings/SourceGroupSettingsCxxCdbVs.h" + +SourceGroupSettingsCxxCdbVs::SourceGroupSettingsCxxCdbVs(const std::string& id, const ProjectSettings* projectSettings) + : SourceGroupSettingsCxxCdb(id, projectSettings) +{ +} + +std::shared_ptr SourceGroupSettingsCxxCdbVs::createCopy() const +{ + return std::make_shared(*this); +} diff --git a/src/lib/settings/SourceGroupSettingsCxxCdbVs.h b/src/lib/settings/SourceGroupSettingsCxxCdbVs.h new file mode 100644 index 00000000..91973ab1 --- /dev/null +++ b/src/lib/settings/SourceGroupSettingsCxxCdbVs.h @@ -0,0 +1,16 @@ +#ifndef SOURCE_GROUP_SETTINGS_CXX_CDB_VS_H +#define SOURCE_GROUP_SETTINGS_CXX_CDB_VS_H + +#include "settings/SourceGroupSettingsCxxCdb.h" +#include "utility/file/FilePath.h" + +class SourceGroupSettingsCxxCdbVs + : public SourceGroupSettingsCxxCdb +{ +public: + SourceGroupSettingsCxxCdbVs(const std::string& id, const ProjectSettings* projectSettings); + + std::shared_ptr createCopy() const override; +}; + +#endif // SOURCE_GROUP_SETTINGS_CXX_CDB_VS_H diff --git a/src/lib/settings/SourceGroupSettingsCxxCodeblocks.cpp b/src/lib/settings/SourceGroupSettingsCxxCodeblocks.cpp index 4a7804bf..5f6ce46c 100644 --- a/src/lib/settings/SourceGroupSettingsCxxCodeblocks.cpp +++ b/src/lib/settings/SourceGroupSettingsCxxCodeblocks.cpp @@ -8,6 +8,11 @@ SourceGroupSettingsCxxCodeblocks::SourceGroupSettingsCxxCodeblocks(const std::st { } +std::shared_ptr SourceGroupSettingsCxxCodeblocks::createCopy() const +{ + return std::make_shared(*this); +} + void SourceGroupSettingsCxxCodeblocks::load(std::shared_ptr config) { SourceGroupSettingsCxx::load(config); diff --git a/src/lib/settings/SourceGroupSettingsCxxCodeblocks.h b/src/lib/settings/SourceGroupSettingsCxxCodeblocks.h index 7f70795f..cbd8b3d4 100644 --- a/src/lib/settings/SourceGroupSettingsCxxCodeblocks.h +++ b/src/lib/settings/SourceGroupSettingsCxxCodeblocks.h @@ -19,6 +19,8 @@ class SourceGroupSettingsCxxCodeblocks public: SourceGroupSettingsCxxCodeblocks(const std::string& id, const ProjectSettings* projectSettings); + std::shared_ptr createCopy() const override; + void load(std::shared_ptr config) override; void save(std::shared_ptr config) override; diff --git a/src/lib/settings/SourceGroupSettingsCxxSonargraph.cpp b/src/lib/settings/SourceGroupSettingsCxxSonargraph.cpp index 95433fcc..c3e36b68 100644 --- a/src/lib/settings/SourceGroupSettingsCxxSonargraph.cpp +++ b/src/lib/settings/SourceGroupSettingsCxxSonargraph.cpp @@ -5,6 +5,11 @@ SourceGroupSettingsCxxSonargraph::SourceGroupSettingsCxxSonargraph(const std::st { } +std::shared_ptr SourceGroupSettingsCxxSonargraph::createCopy() const +{ + return std::make_shared(*this); +} + void SourceGroupSettingsCxxSonargraph::load(std::shared_ptr config) { SourceGroupSettingsCxx::load(config); diff --git a/src/lib/settings/SourceGroupSettingsCxxSonargraph.h b/src/lib/settings/SourceGroupSettingsCxxSonargraph.h index 3a491728..5231af5f 100644 --- a/src/lib/settings/SourceGroupSettingsCxxSonargraph.h +++ b/src/lib/settings/SourceGroupSettingsCxxSonargraph.h @@ -15,6 +15,8 @@ class SourceGroupSettingsCxxSonargraph public: SourceGroupSettingsCxxSonargraph(const std::string& id, const ProjectSettings* projectSettings); + std::shared_ptr createCopy() const override; + void load(std::shared_ptr config) override; void save(std::shared_ptr config) override; diff --git a/src/lib/settings/SourceGroupSettingsJavaEmpty.cpp b/src/lib/settings/SourceGroupSettingsJavaEmpty.cpp index 7d9abe0f..52852d31 100644 --- a/src/lib/settings/SourceGroupSettingsJavaEmpty.cpp +++ b/src/lib/settings/SourceGroupSettingsJavaEmpty.cpp @@ -5,6 +5,11 @@ SourceGroupSettingsJavaEmpty::SourceGroupSettingsJavaEmpty(const std::string& id { } +std::shared_ptr SourceGroupSettingsJavaEmpty::createCopy() const +{ + return std::make_shared(*this); +} + void SourceGroupSettingsJavaEmpty::load(std::shared_ptr config) { SourceGroupSettings::load(config); diff --git a/src/lib/settings/SourceGroupSettingsJavaEmpty.h b/src/lib/settings/SourceGroupSettingsJavaEmpty.h index 4e50deec..1cd003a5 100644 --- a/src/lib/settings/SourceGroupSettingsJavaEmpty.h +++ b/src/lib/settings/SourceGroupSettingsJavaEmpty.h @@ -13,6 +13,8 @@ class SourceGroupSettingsJavaEmpty public: SourceGroupSettingsJavaEmpty(const std::string& id, const ProjectSettings* projectSettings); + std::shared_ptr createCopy() const override; + void load(std::shared_ptr config) override; void save(std::shared_ptr config) override; diff --git a/src/lib/settings/SourceGroupSettingsJavaGradle.cpp b/src/lib/settings/SourceGroupSettingsJavaGradle.cpp index 469f5780..c71db28e 100644 --- a/src/lib/settings/SourceGroupSettingsJavaGradle.cpp +++ b/src/lib/settings/SourceGroupSettingsJavaGradle.cpp @@ -11,6 +11,11 @@ SourceGroupSettingsJavaGradle::SourceGroupSettingsJavaGradle(const std::string& { } +std::shared_ptr SourceGroupSettingsJavaGradle::createCopy() const +{ + return std::make_shared(*this); +} + void SourceGroupSettingsJavaGradle::load(std::shared_ptr config) { SourceGroupSettingsJava::load(config); diff --git a/src/lib/settings/SourceGroupSettingsJavaGradle.h b/src/lib/settings/SourceGroupSettingsJavaGradle.h index 341f0227..33f8c0b7 100644 --- a/src/lib/settings/SourceGroupSettingsJavaGradle.h +++ b/src/lib/settings/SourceGroupSettingsJavaGradle.h @@ -10,6 +10,8 @@ class SourceGroupSettingsJavaGradle public: SourceGroupSettingsJavaGradle(const std::string& id, const ProjectSettings* projectSettings); + std::shared_ptr createCopy() const override; + void load(std::shared_ptr config) override; void save(std::shared_ptr config) override; diff --git a/src/lib/settings/SourceGroupSettingsJavaMaven.cpp b/src/lib/settings/SourceGroupSettingsJavaMaven.cpp index a2878999..e9090548 100644 --- a/src/lib/settings/SourceGroupSettingsJavaMaven.cpp +++ b/src/lib/settings/SourceGroupSettingsJavaMaven.cpp @@ -11,6 +11,11 @@ SourceGroupSettingsJavaMaven::SourceGroupSettingsJavaMaven(const std::string& id { } +std::shared_ptr SourceGroupSettingsJavaMaven::createCopy() const +{ + return std::make_shared(*this); +} + void SourceGroupSettingsJavaMaven::load(std::shared_ptr config) { SourceGroupSettingsJava::load(config); diff --git a/src/lib/settings/SourceGroupSettingsJavaMaven.h b/src/lib/settings/SourceGroupSettingsJavaMaven.h index 2a22c760..0298ebce 100644 --- a/src/lib/settings/SourceGroupSettingsJavaMaven.h +++ b/src/lib/settings/SourceGroupSettingsJavaMaven.h @@ -10,6 +10,8 @@ class SourceGroupSettingsJavaMaven public: SourceGroupSettingsJavaMaven(const std::string& id, const ProjectSettings* projectSettings); + std::shared_ptr createCopy() const override; + void load(std::shared_ptr config) override; void save(std::shared_ptr config) override; diff --git a/src/lib/settings/SourceGroupSettingsJavaSonargraph.cpp b/src/lib/settings/SourceGroupSettingsJavaSonargraph.cpp index 24377a5c..73c71e04 100644 --- a/src/lib/settings/SourceGroupSettingsJavaSonargraph.cpp +++ b/src/lib/settings/SourceGroupSettingsJavaSonargraph.cpp @@ -5,6 +5,11 @@ SourceGroupSettingsJavaSonargraph::SourceGroupSettingsJavaSonargraph(const std:: { } +std::shared_ptr SourceGroupSettingsJavaSonargraph::createCopy() const +{ + return std::make_shared(*this); +} + void SourceGroupSettingsJavaSonargraph::load(std::shared_ptr config) { SourceGroupSettings::load(config); diff --git a/src/lib/settings/SourceGroupSettingsJavaSonargraph.h b/src/lib/settings/SourceGroupSettingsJavaSonargraph.h index 068dd051..5a0e6d32 100644 --- a/src/lib/settings/SourceGroupSettingsJavaSonargraph.h +++ b/src/lib/settings/SourceGroupSettingsJavaSonargraph.h @@ -15,6 +15,8 @@ class SourceGroupSettingsJavaSonargraph public: SourceGroupSettingsJavaSonargraph(const std::string& id, const ProjectSettings* projectSettings); + std::shared_ptr createCopy() const override; + void load(std::shared_ptr config) override; void save(std::shared_ptr config) override; diff --git a/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.cpp b/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.cpp index 27db442b..e22b7593 100644 --- a/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.cpp +++ b/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.cpp @@ -293,10 +293,10 @@ namespace Sonargraph std::vector> XsdCmakeJsonModule::getIndexerCommandsForRootPath( std::shared_ptr rootPath, - const std::set indexedHeaderPaths, + const std::set& indexedHeaderPaths, const std::string& languageStandard, - const std::vector systemHeaderSearchPaths, - const std::vector frameworkSearchPaths) const + const std::vector& systemHeaderSearchPaths, + const std::vector& frameworkSearchPaths) const { std::vector> indexerCommands; if (rootPath) diff --git a/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.h b/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.h index d85ced8e..3cdba7f3 100644 --- a/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.h +++ b/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.h @@ -33,10 +33,10 @@ namespace Sonargraph std::vector> getIndexerCommandsForRootPath( std::shared_ptr rootPath, - const std::set indexedHeaderPaths, + const std::set& indexedHeaderPaths, const std::string& languageStandard, - const std::vector systemHeaderSearchPaths, - const std::vector frameworkSearchPaths) const; + const std::vector& systemHeaderSearchPaths, + const std::vector& frameworkSearchPaths) const; std::vector> m_rootPathWithFiles; }; diff --git a/src/lib_gui/CMakeLists.txt b/src/lib_gui/CMakeLists.txt index fd18a1df..f8307fda 100644 --- a/src/lib_gui/CMakeLists.txt +++ b/src/lib_gui/CMakeLists.txt @@ -219,6 +219,8 @@ add_files( qt/window/project_wizzard/QtProjectWizzardContentVS.h qt/window/project_wizzard/QtProjectWizzardWindow.cpp qt/window/project_wizzard/QtProjectWizzardWindow.h + qt/window/project_wizzard/QtSourceGroupWizzard.h + qt/window/project_wizzard/QtSourceGroupWizzardPage.h qt/window/QtAbout.cpp qt/window/QtAbout.h diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp index b96f95e1..15263342 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp @@ -22,9 +22,11 @@ #include "qt/window/project_wizzard/QtProjectWizzardContentSourceGroupInfoText.h" #include "qt/window/project_wizzard/QtProjectWizzardContentGroup.h" #include "qt/window/project_wizzard/QtProjectWizzardContentVS.h" +#include "qt/window/project_wizzard/QtSourceGroupWizzardPage.h" #include "settings/SourceGroupSettingsCEmpty.h" #include "settings/SourceGroupSettingsCppEmpty.h" #include "settings/SourceGroupSettingsCxxCdb.h" +#include "settings/SourceGroupSettingsCxxCdbVs.h" #include "settings/SourceGroupSettingsCxxCodeblocks.h" #include "settings/SourceGroupSettingsCxxSonargraph.h" #include "settings/SourceGroupSettingsJavaEmpty.h" @@ -83,6 +85,338 @@ namespace settings->setCompilerFlags(flags); } } + + template + std::vector> getSourceGroupWizzardPages(); + + template <> + std::vector> getSourceGroupWizzardPages() + { + std::vector> pages; + { + QtSourceGroupWizzardPage page("Language Standard", 470, 460); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Indexed Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Include Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + if (utility::getOsType() == OS_MAC) + { + QtSourceGroupWizzardPage page("Framework Search Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Advanced (optional)"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + + return pages; + } + + template <> + std::vector> getSourceGroupWizzardPages() + { + std::vector> pages; + { + QtSourceGroupWizzardPage page("Language Standard", 470, 460); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Indexed Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Include Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + if (utility::getOsType() == OS_MAC) + { + QtSourceGroupWizzardPage page("Framework Search Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Advanced (optional)"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + + return pages; + } + + template <> + std::vector> getSourceGroupWizzardPages() + { + std::vector> pages; + { + QtSourceGroupWizzardPage page("Compilation Database Path"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL, "Compilation Database"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Include Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_SUMMARY); + pages.push_back(page); + } + if (utility::getOsType() == OS_MAC) + { + QtSourceGroupWizzardPage page("Framework Search Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_SUMMARY); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Advanced (optional)"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + pages.push_back(page); + } + + return pages; + } + + template <> + std::vector> getSourceGroupWizzardPages() + { + std::vector> pages; + { + QtSourceGroupWizzardPage page("Code::Blocks Project Path"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL, std::string("Code::Blocks Project")); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Include Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_SUMMARY); + pages.push_back(page); + } + if (utility::getOsType() == OS_MAC) + { + QtSourceGroupWizzardPage page("Framework Search Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_SUMMARY); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Advanced (optional)"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + pages.push_back(page); + } + + return pages; + } + + template <> + std::vector> getSourceGroupWizzardPages() + { + std::vector> pages; + { + QtSourceGroupWizzardPage page("Sonargraph Project Path"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreator( + WIZZARD_CONTENT_CONTEXT_ALL, + [](std::shared_ptr settings, QtProjectWizzardWindow* window) + { + return new QtProjectWizzardContentSonargraphProjectPath(settings, settings, settings, window); + } + ); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL, std::string("Sonargraph project")); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Include Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_SUMMARY); + pages.push_back(page); + } + if (utility::getOsType() == OS_MAC) + { + QtSourceGroupWizzardPage page("Framework Search Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_SUMMARY); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Advanced (optional)"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + pages.push_back(page); + } + + return pages; + } + + template <> + std::vector> getSourceGroupWizzardPages() + { + std::vector> pages; + { + QtSourceGroupWizzardPage page("VS Solution"); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_SETUP); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL, std::string("Compilation Database")); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Include Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_SUMMARY); + pages.push_back(page); + } + if (utility::getOsType() == OS_MAC) + { + QtSourceGroupWizzardPage page("Framework Search Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + page.addContentCreatorSimple(WIZZARD_CONTENT_CONTEXT_SUMMARY); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Advanced (optional)"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_SUMMARY, true); + pages.push_back(page); + } + + return pages; + } + + + template<> + std::vector> getSourceGroupWizzardPages() + { + std::vector> pages; + { + QtSourceGroupWizzardPage page("Language Standard", 470, 230); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Indexed Paths", 750, 600); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Dependencies", 750, 600); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + + return pages; + } + + template<> + std::vector> getSourceGroupWizzardPages() + { + std::vector> pages; + { + QtSourceGroupWizzardPage page("Indexed Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Advanced (optional)"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + + return pages; + } + + template<> + std::vector> getSourceGroupWizzardPages() + { + std::vector> pages; + { + QtSourceGroupWizzardPage page("Indexed Paths"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Advanced (optional)"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + + return pages; + } + + template<> + std::vector> getSourceGroupWizzardPages() + { + std::vector> pages; + { + QtSourceGroupWizzardPage page("Sonargraph Project Path"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + page.addContentCreator( + WIZZARD_CONTENT_CONTEXT_ALL, + [](std::shared_ptr settings, QtProjectWizzardWindow* window) + { + return new QtProjectWizzardContentSonargraphProjectPath(settings, std::shared_ptr(), settings, window); + } + ); + pages.push_back(page); + } + { + QtSourceGroupWizzardPage page("Dependencies"); + page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL); + pages.push_back(page); + } + + return pages; + } + + template + void fillSummary(QtProjectWizzardContentGroup* summary, std::shared_ptr settings, QtProjectWizzardWindow* window) + { + const std::vector> pages = getSourceGroupWizzardPages(); + + for (const QtSourceGroupWizzardPage& page : pages) + { + QtProjectWizzardContentGroup* contentGroup = page.createContentGroup(WIZZARD_CONTENT_CONTEXT_SUMMARY, settings, window); + if (contentGroup && contentGroup->hasContents()) + { + summary->addContent(contentGroup); + summary->addSpace(); + } + } + } } QtProjectWizzard::QtProjectWizzard(QWidget* parent) @@ -138,12 +472,11 @@ void QtProjectWizzard::newProjectFromCDB(const FilePath& filePath) cancelSourceGroup(); - std::shared_ptr sourceGroupSettings = - std::make_shared(utility::getUuidString(), m_projectSettings.get()); + std::shared_ptr sourceGroupSettings = + std::make_shared(utility::getUuidString(), m_projectSettings.get()); sourceGroupSettings->setCompilationDatabasePath(filePath); - m_newSourceGroupSettings = sourceGroupSettings; - emptySourceGroupCDBVS(); + executeSoureGroupSetup(sourceGroupSettings); } void QtProjectWizzard::editProject(const FilePath& settingsPath) @@ -299,6 +632,24 @@ void QtProjectWizzard::handlePrevious() QtWindow::handlePrevious(); } +template +void QtProjectWizzard::executeSoureGroupSetup(std::shared_ptr settings) +{ + std::shared_ptr> wizzard = std::make_shared>( + settings, + std::bind(&QtProjectWizzard::cancelSourceGroup, this), + std::bind(&QtProjectWizzard::createSourceGroup, this, std::placeholders::_1) + ); + + for (const QtSourceGroupWizzardPage& page : getSourceGroupWizzardPages()) + { + wizzard->addPage(page); + } + + m_sourceGroupWizzard = wizzard; + m_sourceGroupWizzard->execute(m_windowStack); +} + QtProjectWizzardWindow* QtProjectWizzard::createWindowWithContent( std::function func ){ @@ -416,10 +767,7 @@ void QtProjectWizzard::selectedSourceGroupChanged(int index) if (!canExitContent()) { - QTimer::singleShot(1, [&]() { - m_sourceGroupList->setCurrentRow(m_previouslySelectedIndex); - }); - + QTimer::singleShot(1, [&]() { m_sourceGroupList->setCurrentRow(m_previouslySelectedIndex); }); return; } @@ -437,125 +785,45 @@ void QtProjectWizzard::selectedSourceGroupChanged(int index) summary->addContent(content); summary->addSpace(); - if (std::shared_ptr settingsJava = std::dynamic_pointer_cast(group)) + if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) { - summary->addContent(new QtProjectWizzardContentJavaStandard(settingsJava, this)); - summary->addSpace(); - - if (std::shared_ptr settingsJavaEmpty = std::dynamic_pointer_cast(group)) - { - summary->addContent(new QtProjectWizzardContentPathsSource(group, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentPathsExclude(group, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentExtensions(settingsJava, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentPathsClassJava(group, this)); - } - else - { - if (std::shared_ptr settingsJavaGradle = std::dynamic_pointer_cast(group)) - { - summary->addContent(new QtProjectWizzardContentPathSourceGradle(settingsJavaGradle, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentPathDependenciesGradle(settingsJavaGradle, this)); - } - else if (std::shared_ptr settingsJavaMaven = std::dynamic_pointer_cast(group)) - { - summary->addContent(new QtProjectWizzardContentPathSourceMaven(settingsJavaMaven, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentPathDependenciesMaven(settingsJavaMaven, this)); - } - - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentPathsExclude(group, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentExtensions(settingsJava, this)); - } + fillSummary(summary, settings, this); } - else if (std::shared_ptr settingsJavaSonargraph = std::dynamic_pointer_cast(group)) + else if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) { - summary->addContent(new QtProjectWizzardContentJavaStandard(settingsJavaSonargraph, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentSonargraphProjectPath( - settingsJavaSonargraph, std::shared_ptr(), settingsJavaSonargraph, this - )); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentPathsClassJava(group, this)); + fillSummary(summary, settings, this); } - else if (std::shared_ptr settingsCxx = std::dynamic_pointer_cast(group)) + else if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) { - bool indicateSearchPathsAsAdditional = false; - if (std::shared_ptr settingsCEmpty = std::dynamic_pointer_cast(group)) - { - summary->addContent(new QtProjectWizzardContentCStandard(settingsCEmpty, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentCrossCompilationOptions(settingsCEmpty, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentPathsSource(group, this)); - summary->addContent(new QtProjectWizzardContentPathsExclude(group, this)); - summary->addContent(new QtProjectWizzardContentExtensions(settingsCEmpty, this)); - } - else if (std::shared_ptr settingsCppEmpty = std::dynamic_pointer_cast(group)) - { - summary->addContent(new QtProjectWizzardContentCppStandard(settingsCppEmpty, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentCrossCompilationOptions(settingsCppEmpty, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentPathsSource(group, this)); - summary->addContent(new QtProjectWizzardContentPathsExclude(group, this)); - summary->addContent(new QtProjectWizzardContentExtensions(settingsCppEmpty, this)); - } - else if (std::shared_ptr settingsCxxCdb = std::dynamic_pointer_cast(group)) - { - indicateSearchPathsAsAdditional = true; - - summary->addContent(new QtProjectWizzardContentPathCDB(settingsCxxCdb, this)); - summary->addSpace(); - - summary->addContent(new QtProjectWizzardContentIndexedHeaderPaths("Compilation Database", group, this)); - summary->addContent(new QtProjectWizzardContentPathsExclude(group, this)); - } - else if (std::shared_ptr settingsCxxCodeblocks = std::dynamic_pointer_cast(group)) - { - indicateSearchPathsAsAdditional = true; - - summary->addContent(new QtProjectWizzardContentCppStandard(settingsCxxCodeblocks, this)); - summary->addContent(new QtProjectWizzardContentCStandard(settingsCxxCodeblocks, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentCodeblocksProjectPath(settingsCxxCodeblocks, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentIndexedHeaderPaths("Code::Blocks project", settingsCxxCodeblocks, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentPathsExclude(group, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentExtensions(settingsCxxCodeblocks, this)); - } - else if (std::shared_ptr settingsCxxSonargraph = std::dynamic_pointer_cast(group)) - { - indicateSearchPathsAsAdditional = true; - - summary->addContent(new QtProjectWizzardContentCppStandard(settingsCxxSonargraph, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentSonargraphProjectPath(settingsCxxSonargraph, settingsCxxSonargraph, settingsCxxSonargraph, this)); - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentIndexedHeaderPaths("Sonargraph project", group, this)); - } - - summary->addSpace(); - summary->addContent(new QtProjectWizzardContentPathsHeaderSearch(group, this, indicateSearchPathsAsAdditional)); - - summary->addContent(new QtProjectWizzardContentPathsHeaderSearchGlobal(this)); - summary->addSpace(); - - if (utility::getOsType() == OS_MAC) - { - summary->addContent(new QtProjectWizzardContentPathsFrameworkSearch(group, this, indicateSearchPathsAsAdditional)); - summary->addContent(new QtProjectWizzardContentPathsFrameworkSearchGlobal(this)); - summary->addSpace(); - } - - summary->addContent(new QtProjectWizzardContentFlags(settingsCxx, this, indicateSearchPathsAsAdditional)); + fillSummary(summary, settings, this); + } + else if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) + { + fillSummary(summary, settings, this); + } + else if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) + { + fillSummary(summary, settings, this); + } + else if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) + { + fillSummary(summary, settings, this); + } + else if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) + { + fillSummary(summary, settings, this); + } + else if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) + { + fillSummary(summary, settings, this); + } + else if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) + { + fillSummary(summary, settings, this); + } + else if (std::shared_ptr settings = std::dynamic_pointer_cast(group)) + { + fillSummary(summary, settings, this); } setContent(summary); @@ -619,41 +887,9 @@ void QtProjectWizzard::duplicateSelectedSourceGroup() return; } - std::shared_ptr oldSourceGroup = m_allSourceGroupSettings[m_sourceGroupList->currentRow()]; + std::shared_ptr oldSourceGroup = m_allSourceGroupSettings[m_sourceGroupList->currentRow()]; - std::shared_ptr newSourceGroup; - switch (oldSourceGroup->getType()) - { - case SOURCE_GROUP_JAVA_EMPTY: - newSourceGroup = std::make_shared(*dynamic_cast(oldSourceGroup.get())); - break; - case SOURCE_GROUP_JAVA_MAVEN: - newSourceGroup = std::make_shared(*dynamic_cast(oldSourceGroup.get())); - break; - case SOURCE_GROUP_JAVA_GRADLE: - newSourceGroup = std::make_shared(*dynamic_cast(oldSourceGroup.get())); - break; - case SOURCE_GROUP_JAVA_SONARGRAPH: - newSourceGroup = std::make_shared(*dynamic_cast(oldSourceGroup.get())); - break; - case SOURCE_GROUP_C_EMPTY: - newSourceGroup = std::make_shared(*dynamic_cast(oldSourceGroup.get())); - break; - case SOURCE_GROUP_CPP_EMPTY: - newSourceGroup = std::make_shared(*dynamic_cast(oldSourceGroup.get())); - break; - case SOURCE_GROUP_CXX_CDB: - newSourceGroup = std::make_shared(*dynamic_cast(oldSourceGroup.get())); - break; - case SOURCE_GROUP_CXX_CODEBLOCKS: - newSourceGroup = std::make_shared(*dynamic_cast(oldSourceGroup.get())); - break; - case SOURCE_GROUP_CXX_SONARGRAPH: - newSourceGroup = std::make_shared(*dynamic_cast(oldSourceGroup.get())); - break; - default: - return; - } + std::shared_ptr newSourceGroup = oldSourceGroup->createCopy(); newSourceGroup->setId(utility::getUuidString()); @@ -701,7 +937,6 @@ void QtProjectWizzard::duplicateSelectedSourceGroup() void QtProjectWizzard::cancelSourceGroup() { m_windowStack.clearWindows(); - m_newSourceGroupSettings.reset(); } void QtProjectWizzard::cancelWizzard() @@ -765,404 +1000,93 @@ void QtProjectWizzard::selectedProjectType(SourceGroupType sourceGroupType) switch (sourceGroupType) { case SOURCE_GROUP_C_EMPTY: - m_newSourceGroupSettings = std::make_shared(sourceGroupId, m_projectSettings.get()); - addMsvcCompatibilityFlagsOnDemand(std::dynamic_pointer_cast(m_newSourceGroupSettings)); - emptySourceGroup(); + { + std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); + addMsvcCompatibilityFlagsOnDemand(settings); + executeSoureGroupSetup(settings); + } break; case SOURCE_GROUP_CPP_EMPTY: - m_newSourceGroupSettings = std::make_shared(sourceGroupId, m_projectSettings.get()); - addMsvcCompatibilityFlagsOnDemand(std::dynamic_pointer_cast(m_newSourceGroupSettings)); - emptySourceGroup(); + { + std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); + addMsvcCompatibilityFlagsOnDemand(settings); + executeSoureGroupSetup(settings); + } break; case SOURCE_GROUP_CXX_CDB: - m_newSourceGroupSettings = std::make_shared(sourceGroupId, m_projectSettings.get()); - emptySourceGroupCDB(); + { + std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); + executeSoureGroupSetup(settings); + } break; case SOURCE_GROUP_CXX_CODEBLOCKS: - m_newSourceGroupSettings = std::make_shared(sourceGroupId, m_projectSettings.get()); - addMsvcCompatibilityFlagsOnDemand(std::dynamic_pointer_cast(m_newSourceGroupSettings)); - emptySourceGroupCxxCodeblocks(); + { + std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); + addMsvcCompatibilityFlagsOnDemand(settings); + executeSoureGroupSetup(settings); + } break; case SOURCE_GROUP_CXX_SONARGRAPH: - m_newSourceGroupSettings = std::make_shared(sourceGroupId, m_projectSettings.get()); - addMsvcCompatibilityFlagsOnDemand(std::dynamic_pointer_cast(m_newSourceGroupSettings)); - emptySourceGroupCxxSonargraph(); + { + std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); + addMsvcCompatibilityFlagsOnDemand(settings); + executeSoureGroupSetup(settings); + } break; case SOURCE_GROUP_CXX_VS: - m_newSourceGroupSettings = std::make_shared(sourceGroupId, m_projectSettings.get()); - emptySourceGroupCDBVS(); + { + std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); + executeSoureGroupSetup(settings); + } break; case SOURCE_GROUP_JAVA_EMPTY: - m_newSourceGroupSettings = std::make_shared(sourceGroupId, m_projectSettings.get()); - emptySourceGroup(); + { + std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); + executeSoureGroupSetup(settings); + } break; case SOURCE_GROUP_JAVA_MAVEN: - m_newSourceGroupSettings = std::make_shared(sourceGroupId, m_projectSettings.get()); - sourcePathsJavaMaven(); + { + std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); + settings->setMavenDependenciesDirectory( + FilePath( + L"./sourcetrail_dependencies/" + utility::replace(m_projectSettings->getProjectName(), L" ", L"_") + + L"/" + + utility::decodeFromUtf8(settings->getId()) + + L"/maven" + ) + ); + executeSoureGroupSetup(settings); + } break; case SOURCE_GROUP_JAVA_GRADLE: - m_newSourceGroupSettings = std::make_shared(sourceGroupId, m_projectSettings.get()); - sourcePathsJavaGradle(); + { + std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); + settings->setGradleDependenciesDirectory( + FilePath( + L"./sourcetrail_dependencies/" + utility::replace(m_projectSettings->getProjectName(), L" ", L"_") + + L"/" + + utility::decodeFromUtf8(settings->getId()) + + L"/gradle" + ) + ); + executeSoureGroupSetup(settings); + } break; - case SOURCE_GROUP_JAVA_SONARGRAPH: - m_newSourceGroupSettings = std::make_shared(sourceGroupId, m_projectSettings.get()); - emptySourceGroupJavaSonargraph(); + case SOURCE_GROUP_JAVA_SONARGRAPH: + { + std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get()); + executeSoureGroupSetup(settings); + } break; case SOURCE_GROUP_UNKNOWN: break; } } -void QtProjectWizzard::emptySourceGroup() +void QtProjectWizzard::createSourceGroup(std::shared_ptr settings) { - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settingsCEmpty = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentCStandard(settingsCEmpty, this)); - } - else if (std::shared_ptr settingsCppEmpty = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentCppStandard(settingsCppEmpty, this)); - } - else if (std::shared_ptr settingsJavaEmpty = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentJavaStandard(settingsJavaEmpty, this)); - } - - if (std::shared_ptr settingsCrossCompile = - std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentCrossCompilationOptions(settingsCrossCompile, window)); - window->setPreferredSize(QSize(470, 460)); - } - else - { - window->setPreferredSize(QSize(470, 230)); - } - } - ); - - if (m_newSourceGroupSettings->getType() == SOURCE_GROUP_JAVA_EMPTY) - { - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::sourcePathsJava); - } - else - { - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::sourcePaths); - } - - window->updateSubTitle("Standard"); -} - -void QtProjectWizzard::emptySourceGroupCDBVS() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settings = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentVS(window)); - contentGroup->addContent(new QtProjectWizzardContentPathCDB(settings, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentIndexedHeaderPaths("Compilation Database", m_newSourceGroupSettings, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentPathsExclude(m_newSourceGroupSettings, window)); - } - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::createSourceGroup); - window->updateSubTitle("VS Solution"); -} - -void QtProjectWizzard::emptySourceGroupCDB() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settings = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentPathCDB(settings, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentIndexedHeaderPaths("Compilation Database", m_newSourceGroupSettings, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentPathsExclude(m_newSourceGroupSettings, window)); - } - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::createSourceGroup); - window->updateSubTitle("Compilation Database Path"); -} - -void QtProjectWizzard::emptySourceGroupCxxCodeblocks() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settings = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentCppStandard(settings, this)); - contentGroup->addContent(new QtProjectWizzardContentCStandard(settings, this)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentCodeblocksProjectPath(settings, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentIndexedHeaderPaths("Code::Blocks project", settings, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentPathsExclude(settings, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentExtensions(settings, window)); - } - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::createSourceGroup); - window->updateSubTitle("Code::Blocks Project Path"); -} - -void QtProjectWizzard::emptySourceGroupCxxSonargraph() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settings = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentCppStandard(settings, this)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentSonargraphProjectPath(settings, settings, settings, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentIndexedHeaderPaths("Sonargraph project", m_newSourceGroupSettings, window)); - } - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::createSourceGroup); - window->updateSubTitle("Sonargraph Project Path"); -} - -void QtProjectWizzard::emptySourceGroupJavaSonargraph() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settings = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentJavaStandard(settings, this)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentSonargraphProjectPath( - settings, std::shared_ptr(), settings, window) - ); - } - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::dependenciesJava); - window->updateSubTitle("Sonargraph Project Path"); -} - -void QtProjectWizzard::sourcePaths() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settingsCxx = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentPathsSource(settingsCxx, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentPathsExclude(settingsCxx, window)); - } - if (std::shared_ptr settingsSourceExtension = - std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentExtensions(settingsSourceExtension, window)); - } - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::headerSearchPaths); - window->updateSubTitle("Indexed Paths"); -} - -void QtProjectWizzard::headerSearchPaths() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - contentGroup->addContent(new QtProjectWizzardContentPathsHeaderSearch(m_newSourceGroupSettings, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentPathsHeaderSearchGlobal(window)); - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::headerSearchPathsDone); - window->updateSubTitle("Include Paths"); -} - -void QtProjectWizzard::headerSearchPathsDone() -{ - if (utility::getOsType() == OS_MAC) - { - frameworkSearchPaths(); - } - else - { - advancedSettingsCxx(); - } -} - -void QtProjectWizzard::frameworkSearchPaths() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - contentGroup->addContent(new QtProjectWizzardContentPathsFrameworkSearch(m_newSourceGroupSettings, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentPathsFrameworkSearchGlobal(window)); - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::advancedSettingsCxx); - window->updateSubTitle("Framework Search Paths"); -} - -void QtProjectWizzard::sourcePathsJava() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settingsJava = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentPathsSource(settingsJava, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentPathsExclude(settingsJava, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentExtensions(settingsJava, window)); - } - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::dependenciesJava); - window->updateSubTitle("Indexed Paths"); -} - -void QtProjectWizzard::dependenciesJava() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - contentGroup->addContent(new QtProjectWizzardContentPathsClassJava(m_newSourceGroupSettings, window)); - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::createSourceGroup); - window->updateSubTitle("Dependencies"); -} - -void QtProjectWizzard::sourcePathsJavaMaven() -{ - if (std::shared_ptr settingsJavaMaven = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - settingsJavaMaven->setMavenDependenciesDirectory( - FilePath( - L"./sourcetrail_dependencies/" + utility::replace(m_projectSettings->getProjectName(), L" ", L"_") + - L"/" + - utility::decodeFromUtf8(m_newSourceGroupSettings->getId()) + - L"/maven" - ) - ); - } - - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settingsJavaMaven = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentJavaStandard(settingsJavaMaven, this)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentPathSourceMaven(settingsJavaMaven, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentPathDependenciesMaven(settingsJavaMaven, window)); - } - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::advancedSettingsJava); - window->updateSubTitle("Indexed Paths"); -} - -void QtProjectWizzard::sourcePathsJavaGradle() -{ - if (std::shared_ptr settingsJavaGradle = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - settingsJavaGradle->setGradleDependenciesDirectory( - FilePath( - L"./sourcetrail_dependencies/" + utility::replace(m_projectSettings->getProjectName(), L" ", L"_") + - L"/" + - utility::decodeFromUtf8(m_newSourceGroupSettings->getId()) + - L"/gradle" - ) - ); - } - - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settingsJavaGradle = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentJavaStandard(settingsJavaGradle, this)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentPathSourceGradle(settingsJavaGradle, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentPathDependenciesGradle(settingsJavaGradle, window)); - } - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::advancedSettingsJava); - window->updateSubTitle("Indexed Paths"); -} - -void QtProjectWizzard::advancedSettingsCxx() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settings = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentFlags(settings, window)); - } - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::createSourceGroup); - window->updateSubTitle("Advanced (optional)"); -} - -void QtProjectWizzard::advancedSettingsJava() -{ - QtProjectWizzardWindow* window = createWindowWithContentGroup( - [this](QtProjectWizzardWindow* window, QtProjectWizzardContentGroup* contentGroup) - { - if (std::shared_ptr settingsJava = std::dynamic_pointer_cast(m_newSourceGroupSettings)) - { - contentGroup->addContent(new QtProjectWizzardContentPathsExclude(settingsJava, window)); - contentGroup->addSpace(); - contentGroup->addContent(new QtProjectWizzardContentExtensions(settingsJava, window)); - } - } - ); - - connect(window, &QtProjectWizzardWindow::next, this, &QtProjectWizzard::createSourceGroup); - window->updateSubTitle("Advanced (optional)"); -} - -void QtProjectWizzard::createSourceGroup() -{ - m_allSourceGroupSettings.push_back(m_newSourceGroupSettings); - m_newSourceGroupSettings.reset(); + m_allSourceGroupSettings.push_back(settings); updateSourceGroupList(); cancelSourceGroup(); diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.h index 303558fe..5d8a2ee8 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.h @@ -6,8 +6,8 @@ #include #include "qt/window/project_wizzard/QtProjectWizzardWindow.h" +#include "qt/window/project_wizzard/QtSourceGroupWizzard.h" #include "qt/window/QtWindow.h" - #include "settings/ApplicationSettings.h" #include "settings/ProjectSettings.h" @@ -41,6 +41,9 @@ protected: virtual void handlePrevious() override; private: + template + void executeSoureGroupSetup(std::shared_ptr settings); + QtProjectWizzardWindow* createWindowWithContent( std::function func); @@ -54,7 +57,7 @@ private: std::shared_ptr m_projectSettings; std::vector> m_allSourceGroupSettings; - std::shared_ptr m_newSourceGroupSettings; + std::shared_ptr m_sourceGroupWizzard; ApplicationSettings m_appSettings; bool m_editing; @@ -83,28 +86,7 @@ private slots: void newSourceGroup(); void selectedProjectType(SourceGroupType sourceGroupType); - void emptySourceGroup(); - void emptySourceGroupCDBVS(); - void emptySourceGroupCDB(); - void emptySourceGroupCxxCodeblocks(); - void emptySourceGroupCxxSonargraph(); - void emptySourceGroupJavaSonargraph(); - - void sourcePaths(); - void headerSearchPaths(); - - void headerSearchPathsDone(); - void frameworkSearchPaths(); - - void sourcePathsJava(); - void dependenciesJava(); - void sourcePathsJavaMaven(); - void sourcePathsJavaGradle(); - - void advancedSettingsCxx(); - void advancedSettingsJava(); - - void createSourceGroup(); + void createSourceGroup(std::shared_ptr settings); void createProject(); }; diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCStandard.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCStandard.cpp index 8f7df189..a57a3bab 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCStandard.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCStandard.cpp @@ -17,22 +17,10 @@ QtProjectWizzardContentCStandard::QtProjectWizzardContentCStandard( void QtProjectWizzardContentCStandard::populate(QGridLayout* layout, int& row) { - if (!isInForm()) - { - layout->setRowMinimumHeight(row, 15); - row++; - } - m_standard = new QComboBox(); layout->addWidget(createFormLabel("C Standard"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight); layout->addWidget(m_standard, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft); row++; - - if (!isInForm()) - { - layout->setRowMinimumHeight(row, 15); - layout->setRowStretch(row, 1); - } } void QtProjectWizzardContentCStandard::load() diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCppStandard.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCppStandard.cpp index c4fbb707..1bb16843 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCppStandard.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCppStandard.cpp @@ -17,22 +17,10 @@ QtProjectWizzardContentCppStandard::QtProjectWizzardContentCppStandard( void QtProjectWizzardContentCppStandard::populate(QGridLayout* layout, int& row) { - if (!isInForm()) - { - layout->setRowMinimumHeight(row, 15); - row++; - } - m_standard = new QComboBox(); layout->addWidget(createFormLabel("C++ Standard"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight); layout->addWidget(m_standard, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft); row++; - - if (!isInForm()) - { - layout->setRowMinimumHeight(row, 15); - layout->setRowStretch(row, 1); - } } void QtProjectWizzardContentCppStandard::load() diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentGroup.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentGroup.cpp index 0e37918c..e4040fe2 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentGroup.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentGroup.cpp @@ -28,6 +28,19 @@ void QtProjectWizzardContentGroup::setIsForm(bool isForm) m_isForm = isForm; } +bool QtProjectWizzardContentGroup::hasContents() const +{ + for (QtProjectWizzardContent* content : m_contents) + { + if (content) + { + return true; + } + } + + return false; +} + void QtProjectWizzardContentGroup::populate(QGridLayout* layout, int& row) { if (m_isForm) diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentGroup.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentGroup.h index 44949ff3..fa459427 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentGroup.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentGroup.h @@ -17,6 +17,7 @@ public: void addSpace(); void setIsForm(bool isForm); + bool hasContents() const; protected: // QtProjectWizzardContent implementation diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentJavaStandard.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentJavaStandard.cpp index d8d44bec..7f46fb1a 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentJavaStandard.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentJavaStandard.cpp @@ -17,22 +17,10 @@ QtProjectWizzardContentJavaStandard::QtProjectWizzardContentJavaStandard( void QtProjectWizzardContentJavaStandard::populate(QGridLayout* layout, int& row) { - if (!isInForm()) - { - layout->setRowMinimumHeight(row, 15); - row++; - } - m_standard = new QComboBox(); layout->addWidget(createFormLabel("Java Standard"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight); layout->addWidget(m_standard, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft); row++; - - if (!isInForm()) - { - layout->setRowMinimumHeight(row, 15); - layout->setRowStretch(row, 1); - } } void QtProjectWizzardContentJavaStandard::load() diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp index 4d719f0e..0f91d197 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp @@ -386,7 +386,7 @@ std::vector QtProjectWizzardContentIndexedHeaderPaths::getIndexedPaths } QtProjectWizzardContentIndexedHeaderPaths::QtProjectWizzardContentIndexedHeaderPaths( - const std::string& projectKindName, std::shared_ptr settings, QtProjectWizzardWindow* window + std::shared_ptr settings, QtProjectWizzardWindow* window, std::string projectKindName ) : QtProjectWizzardContentPaths(settings, window, QtPathListBox::SELECTION_POLICY_FILES_AND_DIRECTORIES) , m_projectKindName(projectKindName) diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.h index 305b068b..5c3ff942 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.h @@ -93,7 +93,7 @@ public: static std::vector getIndexedPathsDerivedFromCDB(std::shared_ptr settings); QtProjectWizzardContentIndexedHeaderPaths( - const std::string& projectKindName, std::shared_ptr settings, QtProjectWizzardWindow* window); + std::shared_ptr settings, QtProjectWizzardWindow* window, std::string projectKindName); virtual void populate(QGridLayout* layout, int& row) override; diff --git a/src/lib_gui/qt/window/project_wizzard/QtSourceGroupWizzard.h b/src/lib_gui/qt/window/project_wizzard/QtSourceGroupWizzard.h new file mode 100644 index 00000000..8d11bb0b --- /dev/null +++ b/src/lib_gui/qt/window/project_wizzard/QtSourceGroupWizzard.h @@ -0,0 +1,154 @@ +#ifndef QT_SOURCE_GROUP_WIZZARD_H +#define QT_SOURCE_GROUP_WIZZARD_H + +#include +#include +#include + +#include "qt/window/project_wizzard/QtProjectWizzardContentGroup.h" +#include "qt/window/project_wizzard/QtProjectWizzardWindow.h" +#include "qt/window/project_wizzard/QtSourceGroupWizzardPage.h" +#include "utility/logging/logging.h" + +class SourceGroupSettings; + +class QtSourceGroupWizzardBase +{ +public: + virtual ~QtSourceGroupWizzardBase() = default; + virtual void execute(QtWindowStack& windowStack) = 0; + virtual bool canProcessSettings(std::shared_ptr settings) = 0; +}; + +template +class QtSourceGroupWizzard: public QtSourceGroupWizzardBase +{ +public: + QtSourceGroupWizzard( + std::shared_ptr settings, + std::function onCancelClicked, + std::function)> onFinishedWizzard + ); + + void addPage(const QtSourceGroupWizzardPage& page); + void execute(QtWindowStack& windowStack) override; + bool canProcessSettings(std::shared_ptr settings) override; + +private: + void createWindowForPage(const size_t pageId, QtWindowStack& windowStack); + int mapToPageIdWithContentForContext(size_t pageId, WizzardContentContextType contextType) const; + + std::shared_ptr m_settings; + std::function m_onCancelClicked; + std::function)> m_onFinishedWizzard; + std::vector> m_pages; +}; + +template +QtSourceGroupWizzard::QtSourceGroupWizzard( + std::shared_ptr settings, + std::function onCancelClicked, + std::function)> onFinishedWizzard +) + : m_settings(settings) + , m_onCancelClicked(onCancelClicked) + , m_onFinishedWizzard(onFinishedWizzard) +{ +} + +template +void QtSourceGroupWizzard::addPage(const QtSourceGroupWizzardPage& page) +{ + m_pages.push_back(page); +} + +template +void QtSourceGroupWizzard::execute(QtWindowStack& windowStack) +{ + if (!m_pages.empty()) + { + createWindowForPage(mapToPageIdWithContentForContext(0, WIZZARD_CONTENT_CONTEXT_SETUP), windowStack); + } +} + +template +bool QtSourceGroupWizzard::canProcessSettings(std::shared_ptr settings) +{ + if (std::dynamic_pointer_cast(settings)) + { + return true; + } + return false; +} + +template +void QtSourceGroupWizzard::createWindowForPage(const size_t pageId, QtWindowStack& windowStack) +{ + if (pageId >= m_pages.size()) + { + LOG_ERROR("Project Setup does not contain page " + std::to_string(pageId)); + return; + } + + const QtSourceGroupWizzardPage& page = m_pages.at(pageId); + const int nextPageId = mapToPageIdWithContentForContext(pageId + 1, WIZZARD_CONTENT_CONTEXT_SETUP); + + QtProjectWizzardWindow* window = new QtProjectWizzardWindow(nullptr); + + window->connect(window, &QtProjectWizzardWindow::previous, &windowStack, &QtWindowStack::popWindow); + window->connect(window, &QtProjectWizzardWindow::canceled, m_onCancelClicked); + + if (nextPageId > 0) + { + window->connect( + window, &QtProjectWizzardWindow::next, + [this, nextPageId, &windowStack]() { this->createWindowForPage(nextPageId, windowStack); } + ); + } + else + { + window->connect(window, &QtProjectWizzardWindow::next, [&]() { m_onFinishedWizzard(m_settings); }); + } + + QtProjectWizzardContentGroup* contentGroup = page.createContentGroup(WIZZARD_CONTENT_CONTEXT_SETUP, m_settings, window); + + window->setPreferredSize(QSize(page.getPreferredWidth(), page.getPreferredHeight())); + window->setContent(contentGroup); + window->setScrollAble(window->content()->isScrollAble()); + window->setup(); + + size_t currentPage = 0; + size_t totalPages = 0; + for (size_t i = 0; i < m_pages.size(); i++) + { + if (m_pages[i].hasContentForContext(WIZZARD_CONTENT_CONTEXT_SETUP)) + { + if (i <= pageId) + { + currentPage++; + } + totalPages++; + } + } + + window->updateSubTitle(QString::fromStdString(page.getTitle() + " - " + std::to_string(currentPage) + "/" + std::to_string(totalPages))); + + windowStack.pushWindow(window); +} + +template +int QtSourceGroupWizzard::mapToPageIdWithContentForContext(size_t pageId, WizzardContentContextType contextType) const +{ + while (pageId < m_pages.size()) + { + const QtSourceGroupWizzardPage& page = m_pages.at(pageId); + if (page.hasContentForContext(contextType)) + { + return pageId; + } + pageId++; + } + return -1; +} + +#endif // QT_SOURCE_GROUP_WIZZARD_H diff --git a/src/lib_gui/qt/window/project_wizzard/QtSourceGroupWizzardPage.h b/src/lib_gui/qt/window/project_wizzard/QtSourceGroupWizzardPage.h new file mode 100644 index 00000000..dbb0dc71 --- /dev/null +++ b/src/lib_gui/qt/window/project_wizzard/QtSourceGroupWizzardPage.h @@ -0,0 +1,163 @@ +#ifndef QT_SOURCE_GROUP_WIZZARD_PAGE_H +#define QT_SOURCE_GROUP_WIZZARD_PAGE_H + +#include +#include +#include + +class QtProjectWizzardWindow; + +enum WizzardContentContextType +{ + WIZZARD_CONTENT_CONTEXT_SETUP = 1, + WIZZARD_CONTENT_CONTEXT_SUMMARY = 2, + WIZZARD_CONTENT_CONTEXT_ALL = 3 +}; + +template +class QtSourceGroupWizzardPage +{ +public: + typedef std::function settings, QtProjectWizzardWindow* window)> ContentCreator; + + QtSourceGroupWizzardPage(const std::string& title, int preferredWidth = 750, int preferredHeight = 600); + + void addContentCreator( + WizzardContentContextType contextType, + ContentCreator contentCreator + ); + + template + void addContentCreatorSimple(WizzardContentContextType contextType); + + template + void addContentCreatorWithSettings(WizzardContentContextType contextType); + + template + void addContentCreatorWithSettings(WizzardContentContextType contextType, ParamTypes ... params); + + bool hasContentForContext(WizzardContentContextType contextType) const; + + std::string getTitle() const; + int getPreferredWidth() const; + int getPreferredHeight() const; + QtProjectWizzardContentGroup* createContentGroup(WizzardContentContextType contextType, std::shared_ptr settings, QtProjectWizzardWindow* window) const; + +private: + const std::string m_title; + const int m_preferredWidth; + const int m_preferredHeight; + std::vector> m_contentCreators; +}; + +template +QtSourceGroupWizzardPage::QtSourceGroupWizzardPage(const std::string& title, int preferredWidth, int preferredHeight) + : m_title(title) + , m_preferredWidth(preferredWidth) + , m_preferredHeight(preferredHeight) +{ +} + +template +void QtSourceGroupWizzardPage::addContentCreator( + WizzardContentContextType contextType, + ContentCreator contentCreator +) +{ + m_contentCreators.push_back(std::make_pair(contextType, contentCreator)); +} + +template +template +void QtSourceGroupWizzardPage::addContentCreatorSimple(WizzardContentContextType contextType) +{ + addContentCreator( + contextType, + [](std::shared_ptr settings, QtProjectWizzardWindow* window) + { + return new ContentType(window); + } + ); +} + +template +template +void QtSourceGroupWizzardPage::addContentCreatorWithSettings(WizzardContentContextType contextType) +{ + addContentCreator( + contextType, + [](std::shared_ptr settings, QtProjectWizzardWindow* window) + { + return new ContentType(settings, window); + } + ); +} + +template +template +void QtSourceGroupWizzardPage::addContentCreatorWithSettings(WizzardContentContextType contextType, ParamTypes ... params) +{ + addContentCreator( + contextType, + [=](std::shared_ptr settings, QtProjectWizzardWindow* window) + { + return new ContentType(settings, window, params...); + } + ); +} + +template +std::string QtSourceGroupWizzardPage::getTitle() const +{ + return m_title; +} + +template +int QtSourceGroupWizzardPage::getPreferredWidth() const +{ + return m_preferredWidth; +} + +template +int QtSourceGroupWizzardPage::getPreferredHeight() const +{ + return m_preferredHeight; +} + +template +bool QtSourceGroupWizzardPage::hasContentForContext(WizzardContentContextType contextType) const +{ + for (const std::pair& contentCreator : m_contentCreators) + { + if (contentCreator.first & contextType) + { + return true; + } + } + return false; +} + +template +QtProjectWizzardContentGroup* QtSourceGroupWizzardPage::createContentGroup(WizzardContentContextType contextType, std::shared_ptr settings, QtProjectWizzardWindow* window) const +{ + QtProjectWizzardContentGroup* contentGroup = new QtProjectWizzardContentGroup(window); + + bool firstContentAdded = false; + for (const std::pair& contentCreator : m_contentCreators) + { + if (contentCreator.first & contextType) + { + if (firstContentAdded) + { + contentGroup->addSpace(); + } + contentGroup->addContent(contentCreator.second(settings, window)); + firstContentAdded = true; + } + } + + return contentGroup; +} + + +#endif // QT_SOURCE_GROUP_WIZZARD_PAGE_H diff --git a/src/test/RefreshInfoGeneratorTestSuite.h b/src/test/RefreshInfoGeneratorTestSuite.h index 5985a0e4..a76149be 100644 --- a/src/test/RefreshInfoGeneratorTestSuite.h +++ b/src/test/RefreshInfoGeneratorTestSuite.h @@ -425,6 +425,11 @@ private: : SourceGroupSettings("TEST_ID", SOURCE_GROUP_UNKNOWN, projectSettings) { } + + std::shared_ptr createCopy() const override + { + return std::shared_ptr(); + } }; class SourceGroupTest : public SourceGroup