diff --git a/bin/app/user/ApplicationSettings_template.xml b/bin/app/user/ApplicationSettings_template.xml index 3029b232..69878893 100644 --- a/bin/app/user/ApplicationSettings_template.xml +++ b/bin/app/user/ApplicationSettings_template.xml @@ -18,17 +18,19 @@ - - + + + + diff --git a/src/app/main.cpp b/src/app/main.cpp index 21053547..32d28c68 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -1,8 +1,5 @@ #include "utility/AppPath.h" #include "utility/commandline/CommandLineParser.h" -#include "utility/logging/ConsoleLogger.h" -#include "utility/logging/FileLogger.h" -#include "utility/logging/LogManager.h" #include "utility/ResourcePaths.h" #include "utility/ScopedFunctor.h" #include "utility/UserPaths.h" @@ -19,18 +16,6 @@ #include "qt/window/QtMainWindow.h" #include "version.h" -void init() -{ - std::shared_ptr consoleLogger = std::make_shared(); - consoleLogger->setLogLevel(Logger::LOG_WARNINGS | Logger::LOG_ERRORS); - LogManager::getInstance()->addLogger(consoleLogger); - - std::shared_ptr fileLogger = std::make_shared(); - fileLogger->setLogLevel(Logger::LOG_ALL); - FileLogger::setFilePath(UserPaths::getLogPath()); - LogManager::getInstance()->addLogger(fileLogger); -} - int main(int argc, char *argv[]) { QApplication::setApplicationName("Coati"); @@ -57,7 +42,6 @@ int main(int argc, char *argv[]) QtCoreApplication qtApp(argc, argv); setupApp(argc, argv); - init(); Application::createInstance(version, nullptr, nullptr); ScopedFunctor f([](){ @@ -88,15 +72,12 @@ int main(int argc, char *argv[]) QtApplication qtApp(argc, argv); setupApp(argc, argv); - init(); qtApp.setAttribute(Qt::AA_UseHighDpiPixmaps); QtViewFactory viewFactory; QtNetworkFactory networkFactory; - utility::loadFontsFromDirectory(ResourcePaths::getFontsPath(), ".otf"); - utility::loadFontsFromDirectory(ResourcePaths::getFontsPath(), ".ttf"); Application::createInstance(version, &viewFactory, &networkFactory); ScopedFunctor f([](){ Application::destroyInstance(); @@ -104,6 +85,9 @@ int main(int argc, char *argv[]) commandLineParser.projectLoad(); + utility::loadFontsFromDirectory(ResourcePaths::getFontsPath(), ".otf"); + utility::loadFontsFromDirectory(ResourcePaths::getFontsPath(), ".ttf"); + return qtApp.exec(); } } diff --git a/src/lib/Application.cpp b/src/lib/Application.cpp index bd4ec310..c7fc7fa7 100644 --- a/src/lib/Application.cpp +++ b/src/lib/Application.cpp @@ -1,7 +1,10 @@ #include "Application.h" #include "utility/file/FileSystem.h" +#include "utility/logging/ConsoleLogger.h" +#include "utility/logging/FileLogger.h" #include "utility/logging/logging.h" +#include "utility/logging/LogManager.h" #include "utility/messaging/MessageQueue.h" #include "utility/messaging/type/MessageActivateNodes.h" #include "utility/messaging/type/MessageDispatchWhenLicenseValid.h" @@ -75,6 +78,23 @@ void Application::loadSettings() std::shared_ptr settings = ApplicationSettings::getInstance(); settings->load(FilePath(UserPaths::getAppSettingsPath())); + LogManager* logManager = LogManager::getInstance().get(); + if (settings->getLoggingEnabled() && !logManager->getLoggerCount()) + { + std::shared_ptr consoleLogger = std::make_shared(); + // consoleLogger->setLogLevel(Logger::LOG_WARNINGS | Logger::LOG_ERRORS); + logManager->addLogger(consoleLogger); + + FileLogger::setFilePath(UserPaths::getLogPath()); + std::shared_ptr fileLogger = std::make_shared(); + fileLogger->setLogLevel(Logger::LOG_ALL); + logManager->addLogger(fileLogger); + } + else + { + logManager->clearLoggers(); + } + loadStyle(settings->getColorSchemePath()); } diff --git a/src/lib/settings/ApplicationSettings.cpp b/src/lib/settings/ApplicationSettings.cpp index 28e67e9a..46a751db 100644 --- a/src/lib/settings/ApplicationSettings.cpp +++ b/src/lib/settings/ApplicationSettings.cpp @@ -155,6 +155,16 @@ void ApplicationSettings::setScrollSpeed(float scrollSpeed) setValue("application/scroll_speed", scrollSpeed); } +bool ApplicationSettings::getLoggingEnabled() const +{ + return getValue("application/logging_enabled", false); +} + +void ApplicationSettings::setLoggingEnabled(bool loggingEnabled) +{ + setValue("application/logging_enabled", loggingEnabled); +} + int ApplicationSettings::getIndexerThreadCount() const { return getValue("indexing/indexer_thread_count", 4); @@ -167,12 +177,12 @@ void ApplicationSettings::setIndexerThreadCount(const int count) bool ApplicationSettings::getShowExternalNonFatalErrors() const { - return getValue("application/show_external_non_fatal_errors", false); + return getValue("indexing/show_external_non_fatal_errors", false); } void ApplicationSettings::setShowExternalNonFatalErrors(const bool show) { - setValue("application/show_external_non_fatal_errors", show); + setValue("indexing/show_external_non_fatal_errors", show); } std::string ApplicationSettings::getJavaPath() const diff --git a/src/lib/settings/ApplicationSettings.h b/src/lib/settings/ApplicationSettings.h index 73eda20f..172a7fbe 100644 --- a/src/lib/settings/ApplicationSettings.h +++ b/src/lib/settings/ApplicationSettings.h @@ -47,6 +47,9 @@ public: float getScrollSpeed() const; void setScrollSpeed(float scrollSpeed); + bool getLoggingEnabled() const; + void setLoggingEnabled(bool loggingEnabled); + // indexing int getIndexerThreadCount() const; void setIndexerThreadCount(const int count); diff --git a/src/lib/utility/logging/LogManager.cpp b/src/lib/utility/logging/LogManager.cpp index 39fcc9b8..e1feebf0 100644 --- a/src/lib/utility/logging/LogManager.cpp +++ b/src/lib/utility/logging/LogManager.cpp @@ -39,6 +39,11 @@ void LogManager::removeLoggersByType(const std::string& type) m_logManagerImplementation.removeLoggersByType(type); } +void LogManager::clearLoggers() +{ + m_logManagerImplementation.clearLoggers(); +} + int LogManager::getLoggerCount() const { return m_logManagerImplementation.getLoggerCount(); diff --git a/src/lib/utility/logging/LogManager.h b/src/lib/utility/logging/LogManager.h index 93e1f4ac..6b0d133c 100644 --- a/src/lib/utility/logging/LogManager.h +++ b/src/lib/utility/logging/LogManager.h @@ -18,6 +18,7 @@ public: void addLogger(std::shared_ptr logger); void removeLogger(std::shared_ptr logger); void removeLoggersByType(const std::string& type); + void clearLoggers(); int getLoggerCount() const; void logInfo( diff --git a/src/lib/utility/logging/LogManagerImplementation.cpp b/src/lib/utility/logging/LogManagerImplementation.cpp index e6e80dbe..1c11403a 100644 --- a/src/lib/utility/logging/LogManagerImplementation.cpp +++ b/src/lib/utility/logging/LogManagerImplementation.cpp @@ -49,6 +49,11 @@ void LogManagerImplementation::removeLoggersByType(const std::string& type) } } +void LogManagerImplementation::clearLoggers() +{ + m_loggers.clear(); +} + int LogManagerImplementation::getLoggerCount() const { std::lock_guard lockGuard(m_loggerMutex); diff --git a/src/lib/utility/logging/LogManagerImplementation.h b/src/lib/utility/logging/LogManagerImplementation.h index ca8a0780..62debcf8 100644 --- a/src/lib/utility/logging/LogManagerImplementation.h +++ b/src/lib/utility/logging/LogManagerImplementation.h @@ -24,6 +24,7 @@ public: void addLogger(std::shared_ptr logger); void removeLogger(std::shared_ptr logger); void removeLoggersByType(const std::string& type); + void clearLoggers(); int getLoggerCount() const; void logInfo( diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp index f829c75b..ed952700 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp @@ -99,6 +99,19 @@ void QtProjectWizzardContentPreferences::populateForm(QGridLayout* layout, int& ); row++; + // logging + m_loggingEnabled = new QCheckBox("Enable console and file logging", this); + + layout->addWidget(createFormLabel("Logging"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight); + layout->addWidget(m_loggingEnabled, row, QtProjectWizzardWindow::BACK_COL, Qt::AlignLeft); + + addHelpButton( + "Save log files and show log information in the console." + , layout, row + ); + + row++; + layout->setRowMinimumHeight(row++, 20); // indexing @@ -191,6 +204,7 @@ void QtProjectWizzardContentPreferences::load() } m_scrollSpeed->setText(QString::number(appSettings->getScrollSpeed(), 'f', 1)); + m_loggingEnabled->setChecked(appSettings->getLoggingEnabled()); m_threads->setCurrentIndex(appSettings->getIndexerThreadCount() - 1); m_fatalErrors->setChecked(appSettings->getShowExternalNonFatalErrors()); @@ -219,6 +233,8 @@ void QtProjectWizzardContentPreferences::save() appSettings->setScrollSpeed(scrollSpeed); } + appSettings->setLoggingEnabled(m_loggingEnabled->isChecked()); + appSettings->setIndexerThreadCount(m_threads->currentIndex() + 1); appSettings->setShowExternalNonFatalErrors(m_fatalErrors->isChecked()); diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h index 347529c3..434cd870 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h @@ -38,10 +38,12 @@ private: QComboBox* m_tabWidth; QComboBox* m_colorSchemes; - QLineEdit* m_scrollSpeed; std::vector m_colorSchemePaths; int m_oldColorSchemeIndex; + QLineEdit* m_scrollSpeed; + QCheckBox* m_loggingEnabled; + QComboBox* m_threads; QCheckBox* m_fatalErrors; diff --git a/src/trial/main.cpp b/src/trial/main.cpp index 585bc36a..4827bbca 100644 --- a/src/trial/main.cpp +++ b/src/trial/main.cpp @@ -1,7 +1,4 @@ #include "utility/AppPath.h" -#include "utility/logging/ConsoleLogger.h" -#include "utility/logging/FileLogger.h" -#include "utility/logging/LogManager.h" #include "utility/ResourcePaths.h" #include "utility/ScopedFunctor.h" #include "utility/UserPaths.h" @@ -16,18 +13,6 @@ #include "qt/window/QtMainWindow.h" #include "version.h" -void init() -{ - std::shared_ptr consoleLogger = std::make_shared(); - consoleLogger->setLogLevel(Logger::LOG_WARNINGS | Logger::LOG_ERRORS); - LogManager::getInstance()->addLogger(consoleLogger); - - std::shared_ptr fileLogger = std::make_shared(); - fileLogger->setLogLevel(Logger::LOG_ALL); - FileLogger::setFilePath(UserPaths::getLogPath()); - LogManager::getInstance()->addLogger(fileLogger); -} - int main(int argc, char *argv[]) { QApplication::setApplicationName("Coati Trial"); @@ -45,20 +30,19 @@ int main(int argc, char *argv[]) QtApplication qtApp(argc, argv); setupApp(argc, argv); - init(); qtApp.setAttribute(Qt::AA_UseHighDpiPixmaps); QtViewFactory viewFactory; QtNetworkFactory networkFactory; - utility::loadFontsFromDirectory(ResourcePaths::getFontsPath(), ".otf"); - utility::loadFontsFromDirectory(ResourcePaths::getFontsPath(), ".ttf"); - Application::createInstance(version, &viewFactory, &networkFactory); ScopedFunctor f([](){ Application::destroyInstance(); }); + utility::loadFontsFromDirectory(ResourcePaths::getFontsPath(), ".otf"); + utility::loadFontsFromDirectory(ResourcePaths::getFontsPath(), ".ttf"); + return qtApp.exec(); }