diff --git a/CMakeLists.txt b/CMakeLists.txt index e3829dc8..782ec95a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -648,7 +648,6 @@ list( ${PROJECT_SOURCE_DIR}/src/app/app_module_properties.cpp ${PROJECT_SOURCE_DIR}/src/app/app_module.cpp ${PROJECT_SOURCE_DIR}/src/app/app_ui_state.cpp - ${PROJECT_SOURCE_DIR}/src/app/library_info.cpp ${PROJECT_SOURCE_DIR}/src/app/recent_files.cpp ) diff --git a/src/app/app_module.cpp b/src/app/app_module.cpp index af0d8554..9f22af8f 100644 --- a/src/app/app_module.cpp +++ b/src/app/app_module.cpp @@ -142,6 +142,27 @@ QString AppModule::languageCode() const return QString::fromUtf8(langDefault.data(), CppUtils::safeStaticCast(langDefault.size())); } +void AppModule::addLibraryInfo(const LibraryInfo& lib) +{ + if (!lib.name.empty() && !lib.version.empty()) + m_vecLibraryInfo.push_back(lib); +} + +void AppModule::addLibraryInfo( + std::string_view libName, std::string_view version, std::string_view versionDetails + ) +{ + const LibraryInfo libInfo{ + std::string{libName}, std::string{version}, std::string{versionDetails} + }; + this->addLibraryInfo(libInfo); +} + +Span AppModule::libraryInfoArray() const +{ + return m_vecLibraryInfo; +} + bool AppModule::excludeSettingPredicate(const Property& prop) { return !prop.isUserVisible(); diff --git a/src/app/app_module.h b/src/app/app_module.h index 56a57fbe..02179620 100644 --- a/src/app/app_module.h +++ b/src/app/app_module.h @@ -7,6 +7,7 @@ #pragma once #include "app_module_properties.h" +#include "library_info.h" #include "qstring_utils.h" #include "../base/application.h" @@ -78,6 +79,11 @@ class AppModule : // Short-name of the current language in use(eg. en=english) QString languageCode() const; + // Information about 3rd-party libraries used by the application + void addLibraryInfo(const LibraryInfo& lib); + void addLibraryInfo(std::string_view libName, std::string_view version, std::string_view versionDetails = ""); + Span libraryInfoArray() const; + // Logging void clearMessageLog(); Span messageLog() const { return m_messageLog; } @@ -135,6 +141,7 @@ class AppModule : QLocale m_qtLocale; std::vector> m_vecDocTreeNodePropsProvider; std::function m_fnRecentFileThumbnailRecorder; + std::vector m_vecLibraryInfo; }; } // namespace Mayo diff --git a/src/app/command_system_information.cpp b/src/app/command_system_information.cpp index 15ef44db..d1a64e60 100644 --- a/src/app/command_system_information.cpp +++ b/src/app/command_system_information.cpp @@ -208,7 +208,7 @@ QString CommandSystemInformation::data() ostr << '\n' << "OpenCascade: " << OCC_VERSION_STRING_EXT << " (build)" << '\n'; // Other registered libraries - for (const auto& libInfo : LibraryInfoArray::get()) { + for (const LibraryInfo& libInfo : AppModule::get()->libraryInfoArray()) { ostr << '\n' << libInfo.name << ": " << libInfo.version << " " << libInfo.versionDetails << '\n'; } diff --git a/src/app/commands_help.cpp b/src/app/commands_help.cpp index 8bc866cc..a88c7bb9 100644 --- a/src/app/commands_help.cpp +++ b/src/app/commands_help.cpp @@ -6,6 +6,7 @@ #include "commands_help.h" +#include "app_module.h" #include "dialog_about.h" #include "library_info.h" #include "qtwidgets_utils.h" @@ -42,7 +43,7 @@ CommandAbout::CommandAbout(IAppContext* context) void CommandAbout::execute() { auto dlg = new DialogAbout(this->widgetMain()); - for (const auto& libInfo : LibraryInfoArray::get()) + for (const LibraryInfo& libInfo : AppModule::get()->libraryInfoArray()) dlg->addLibraryInfo(libInfo.name, libInfo.version); QtWidgetsUtils::asyncDialogExec(dlg); diff --git a/src/app/library_info.cpp b/src/app/library_info.cpp deleted file mode 100644 index b62d4dd9..00000000 --- a/src/app/library_info.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/**************************************************************************** -** Copyright (c) 2024, Fougue Ltd. -** All rights reserved. -** See license at https://github.com/fougue/mayo/blob/master/LICENSE.txt -****************************************************************************/ - -#include "library_info.h" - -#include - -namespace Mayo { - -namespace { - -std::vector& getLibraryInfos() -{ - static std::vector vec; - return vec; -} - -} // namespace - -void LibraryInfoArray::add( - std::string_view libName, std::string_view version, std::string_view versionDetails - ) -{ - if (!libName.empty() && !version.empty()) { - const LibraryInfo libInfo{ - std::string{libName}, std::string{version}, std::string{versionDetails} - }; - getLibraryInfos().push_back(std::move(libInfo)); - } -} - -Span LibraryInfoArray::get() -{ - return getLibraryInfos(); -} - -} // namespace Mayo diff --git a/src/app/library_info.h b/src/app/library_info.h index 87295ffd..94a02f87 100644 --- a/src/app/library_info.h +++ b/src/app/library_info.h @@ -6,25 +6,18 @@ #pragma once -#include "../base/span.h" - #include -#include namespace Mayo { +// Provides information about a 3rd-party library used by the application struct LibraryInfo { + // Precise name of the library std::string name; + // Version string, can be codenamed and/or semantic std::string version; + // Addition details about the version, such as compilation flags std::string versionDetails; }; -struct LibraryInfoArray { - static void add( - std::string_view libName, std::string_view version, std::string_view versionDetails = "" - ); - - static Span get(); -}; - } // namespace Mayo diff --git a/src/app/main.cpp b/src/app/main.cpp index e8e4d2d2..e0571131 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -354,6 +354,13 @@ static int runApp(QCoreApplication* qtApp) auto appModule = AppModule::get(); appModule->settings()->setStorage(std::make_unique()); appModule->setRecentFileThumbnailRecorder(&createGuiDocumentThumbnail); + appModule->addLibraryInfo( + IO::AssimpLib::strName(), IO::AssimpLib::strVersion(), IO::AssimpLib::strVersionDetails() + ); + appModule->addLibraryInfo( + IO::GmioLib::strName(), IO::GmioLib::strVersion(), IO::GmioLib::strVersionDetails() + ); + { // Load translation files auto fnLoadQmFile = [=](const QString& qmFilePath) { @@ -401,14 +408,6 @@ static int runApp(QCoreApplication* qtApp) appModule->properties()->IO_bindParameters(ioSystem); appModule->properties()->retranslate(); - // Register library infos - LibraryInfoArray::add( - IO::AssimpLib::strName(), IO::AssimpLib::strVersion(), IO::AssimpLib::strVersionDetails() - ); - LibraryInfoArray::add( - IO::GmioLib::strName(), IO::GmioLib::strVersion(), IO::GmioLib::strVersionDetails() - ); - // Process CLI if (args.showSystemInformation) { CommandSystemInformation cmdSysInfo(nullptr); diff --git a/src/cli/main.cpp b/src/cli/main.cpp index e3512d2f..f5ec5db6 100644 --- a/src/cli/main.cpp +++ b/src/cli/main.cpp @@ -145,7 +145,7 @@ void showSystemInformation(std::ostream& ostr) ostr << '\n' << "OpenCascade: " << OCC_VERSION_STRING_EXT << " (build)" << '\n'; // Other registered libraries - for (const LibraryInfo& libInfo : LibraryInfoArray::get()) { + for (const LibraryInfo& libInfo : AppModule::get()->libraryInfoArray()) { ostr << '\n' << libInfo.name << ": " << libInfo.version << " " << libInfo.versionDetails << '\n'; @@ -406,6 +406,12 @@ static int runApp(QCoreApplication* qtApp) // Initialize Base application auto app = appModule->application(); + appModule->addLibraryInfo( + IO::AssimpLib::strName(), IO::AssimpLib::strVersion(), IO::AssimpLib::strVersionDetails() + ); + appModule->addLibraryInfo( + IO::GmioLib::strName(), IO::GmioLib::strVersion(), IO::GmioLib::strVersionDetails() + ); TextId::addTranslatorFunction(&qtAppTranslate); // Set Qt i18n backend #ifdef MAYO_OS_WINDOWS initOpenCascadeEnvironment("opencascade.conf"); @@ -448,14 +454,6 @@ static int runApp(QCoreApplication* qtApp) return 0; } - // Register library infos - LibraryInfoArray::add( - IO::AssimpLib::strName(), IO::AssimpLib::strVersion(), IO::AssimpLib::strVersionDetails() - ); - LibraryInfoArray::add( - IO::GmioLib::strName(), IO::GmioLib::strVersion(), IO::GmioLib::strVersionDetails() - ); - // Process CLI if (args.showSystemInformation) { showSystemInformation(std::cout);