From 48ece50eca8a72ef54390053c412a89ec019d252 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Tue, 13 Dec 2016 01:41:06 +0100 Subject: [PATCH] src: Added more status messages and some fixes * Elide status bar messages to avoid window resize window * Fixed status view clearing when switching projects * Refactored app setting loading * Replace newline characters with spaces in status view --- bin/test/data/log/test_log.txt | 1 + src/app/main.cpp | 12 ++++++++++++ src/lib/Application.cpp | 18 +++++++++++------- src/lib/LicenseChecker.cpp | 4 ---- src/lib/Project.cpp | 2 ++ .../component/controller/CodeController.cpp | 10 ++++++++-- .../controller/IDECommunicationController.cpp | 12 +++++++----- .../controller/StatusBarController.cpp | 8 +++----- .../component/controller/StatusController.cpp | 10 +++++++--- .../component/controller/StatusController.h | 1 - src/lib/utility/logging/LogManager.cpp | 17 ++++++++++++++--- .../utility/messaging/type/MessageRefresh.h | 12 +++++++----- src/lib/utility/messaging/type/MessageStatus.h | 3 ++- src/lib_gui/qt/element/QtStatusBar.cpp | 8 ++++---- src/lib_gui/qt/view/QtDialogView.cpp | 15 +++++++++------ src/lib_gui/qt/view/QtLogView.cpp | 9 +++++++-- .../project_wizzard/QtProjectWizzard.cpp | 6 ++++++ 17 files changed, 100 insertions(+), 48 deletions(-) diff --git a/bin/test/data/log/test_log.txt b/bin/test/data/log/test_log.txt index fe348b06..a46a0280 100644 --- a/bin/test/data/log/test_log.txt +++ b/bin/test/data/log/test_log.txt @@ -41,6 +41,7 @@ Edge.cpp ERROR: Nodes are not plain copies. INFO: Indexer - indexing source file: input.cc INFO: Indexer - indexing source file: input.cc INFO: Indexer - indexing source file: input.cc + INFO: send MessageStatus Enabled console and file logging. INFO: send TestMessage INFO: send TestMessage INFO: send TestMessage diff --git a/src/app/main.cpp b/src/app/main.cpp index 59f3e28c..5db610da 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -18,6 +18,7 @@ #include "utility/logging/FileLogger.h" #include "utility/logging/logging.h" #include "utility/logging/LogManager.h" +#include "utility/messaging/type/MessageStatus.h" #include "utility/ResourcePaths.h" #include "utility/ScopedFunctor.h" #include "utility/UserPaths.h" @@ -49,11 +50,14 @@ void prefillJavaRuntimePath() std::vector paths = javaPathDetector->getPaths(); if (!paths.empty()) { + MessageStatus("Run Java runtime path detection, found: " + paths.front().str()); + settings->setJavaPath(paths.front().str()); settings->save(); } else { + MessageStatus("Run Java runtime path detection, no path found."); std::cout << "no javapath" << std::endl; } } @@ -68,6 +72,8 @@ void prefillCxxHeaderPaths() std::vector paths = cxxHeaderDetector->getPaths(); if (!paths.empty()) { + MessageStatus("Run C/C++ header path detection, found " + std::to_string(paths.size()) + " paths"); + settings->setHeaderSearchPaths(paths); settings->save(); } @@ -83,6 +89,8 @@ void prefillCxxFrameworkPaths() std::vector paths = cxxFrameworkDetector->getPaths(); if (!paths.empty()) { + MessageStatus("Run C/C++ framework path detection, found " + std::to_string(paths.size()) + " paths"); + settings->setFrameworkSearchPaths(paths); settings->save(); } @@ -101,6 +109,8 @@ int main(int argc, char *argv[]) Version version = Version::fromString(GIT_VERSION_NUMBER); QApplication::setApplicationVersion(version.toDisplayString().c_str()); + MessageStatus("Starting Coati " + version.toDisplayString()).dispatch(); + CommandLineParser commandLineParser(argc, argv, version.toString()); if (commandLineParser.exitApplication()) { @@ -199,6 +209,8 @@ int main(int argc, char *argv[]) const std::vector storedIndexingFiles = ApplicationStateMonitor::getStoredIndexingFiles(); if (storedIndexingFiles.size() > 0) { + MessageStatus("The application crashed during last project indexing. Please follow the instructions to help us fix this problem.").dispatch(); + ApplicationStateMonitor::clearStoredIndexingFiles(); if (storedIndexingFiles.size() > 1) { diff --git a/src/lib/Application.cpp b/src/lib/Application.cpp index 9d7d2da9..6752704e 100644 --- a/src/lib/Application.cpp +++ b/src/lib/Application.cpp @@ -70,6 +70,8 @@ void Application::destroyInstance() void Application::loadSettings() { + MessageStatus("Load settings: " + UserPaths::getAppSettingsPath()).dispatch(); + std::shared_ptr settings = ApplicationSettings::getInstance(); settings->load(FilePath(UserPaths::getAppSettingsPath())); @@ -162,13 +164,13 @@ void Application::createAndLoadProject(const FilePath& projectSettingsFilePath) else { LOG_ERROR_STREAM(<< "Failed to load project."); - MessageStatus("Failed to load project.", true).dispatch(); + MessageStatus("Failed to load project: " + projectSettingsFilePath.str(), true).dispatch(); } } catch (...) { LOG_ERROR_STREAM(<< "Failed to load project."); - MessageStatus("Failed to load project.", true).dispatch(); + MessageStatus("Failed to load project: " + projectSettingsFilePath.str(), true).dispatch(); } } @@ -198,6 +200,8 @@ void Application::handleMessage(MessageActivateWindow* message) void Application::handleMessage(MessageEnteredLicense* message) { + MessageStatus("Found valid license key, unlocked application.").dispatch(); + m_isInTrial = false; } @@ -215,8 +219,6 @@ void Application::handleMessage(MessageLoadProject* message) { TRACE("app load project"); - loadSettings(); - FilePath projectSettingsFilePath(message->projectSettingsFilePath); if (projectSettingsFilePath.empty()) { @@ -241,9 +243,9 @@ void Application::handleMessage(MessageRefresh* message) { TRACE("app refresh"); - if (message->reloadSettings) + if (message->loadStyle) { - loadSettings(); + loadStyle(ApplicationSettings::getInstance()->getColorSchemePath()); } if (m_hasGUI) @@ -259,8 +261,10 @@ void Application::handleMessage(MessageRefresh* message) void Application::handleMessage(MessageSwitchColorScheme* message) { + MessageStatus("Switch color scheme: " + message->colorSchemePath.str()).dispatch(); + loadStyle(message->colorSchemePath); - MessageRefresh().refreshUiOnly().keepSettings().dispatch(); + MessageRefresh().refreshUiOnly().noReloadStyle().dispatch(); } void Application::startMessagingAndScheduling() diff --git a/src/lib/LicenseChecker.cpp b/src/lib/LicenseChecker.cpp index 7602502c..c09867e4 100644 --- a/src/lib/LicenseChecker.cpp +++ b/src/lib/LicenseChecker.cpp @@ -117,12 +117,8 @@ LicenseChecker::LicenseChecker() void LicenseChecker::handleMessage(MessageDispatchWhenLicenseValid* message) { - MessageStatus("preparing...", false, true).dispatch(); - LicenseState state = checkCurrentLicense(); - MessageStatus("ready").dispatch(); - if (state == LICENSE_VALID) { message->content->dispatch(); diff --git a/src/lib/Project.cpp b/src/lib/Project.cpp index aff3c7a2..e8601252 100644 --- a/src/lib/Project.cpp +++ b/src/lib/Project.cpp @@ -308,6 +308,8 @@ bool Project::requestIndex(bool forceRefresh, bool needsFullRefresh) return false; } + MessageStatus((fullRefresh ? "Reindexing Project" : "Refreshing Project"), false, true).dispatch(); + buildIndex(filesToClean, filesToIndex, fullRefresh); return true; diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp index 7e536105..7d275b47 100644 --- a/src/lib/component/controller/CodeController.cpp +++ b/src/lib/component/controller/CodeController.cpp @@ -139,6 +139,12 @@ void CodeController::handleMessage(MessageActivateTokens* message) size_t referenceCount = m_collection->getTokenLocationCount(); std::stringstream ss; + + if (message->unknownNames.size()) + { + ss << "Activate \"" << message->unknownNames[0] << "\": "; + } + ss << message->tokenIds.size() << ' '; ss << (message->tokenIds.size() == 1 ? "result" : "results"); @@ -270,8 +276,8 @@ void CodeController::handleMessage(MessageScrollToLine* message) if (message->isModified) { MessageStatus( - "The file was modified, please refresh. Showing source location: " + message->filePath.str() - + " : " + std::to_string(message->line), + "Showing source location: " + message->filePath.str() + + " : " + std::to_string(message->line) + ". The file was modified, please refresh.", true ).dispatch(); } diff --git a/src/lib/component/controller/IDECommunicationController.cpp b/src/lib/component/controller/IDECommunicationController.cpp index 5864b96e..2d9f75e8 100644 --- a/src/lib/component/controller/IDECommunicationController.cpp +++ b/src/lib/component/controller/IDECommunicationController.cpp @@ -102,7 +102,9 @@ void IDECommunicationController::handleSetActiveTokenMessage( if (selectedLocationIds.size() > 0) { - MessageStatus("Activating a source location from plug-in succeeded.").dispatch(); + MessageStatus("Activating source location from plug-in succeeded: " + message.fileLocation + ", row: " + + std::to_string(message.row) + ", col: " + std::to_string(message.column)).dispatch(); + MessageDispatchWhenLicenseValid( std::make_shared(selectedLocationIds) ).dispatch(); @@ -180,7 +182,7 @@ void IDECommunicationController::handlePing(const NetworkProtocolHelper::PingMes } // TODO: add the other ides - std::string message = ideName + " instance detected"; + std::string message = ideName + " instance detected via plugin port"; MessageStatus(message, false, false).dispatch(); MessageDispatchWhenLicenseValid(msg).dispatch(); @@ -195,7 +197,7 @@ void IDECommunicationController::handleMessage(MessageIDECreateCDB* message) { std::string networkMessage = NetworkProtocolHelper::buildCreateCDBMessage(); - MessageStatus("Requesting IDE to create CDB.").dispatch(); + MessageStatus("Requesting IDE to create Compilation Database via plug-in.").dispatch(); sendMessage(networkMessage); } @@ -204,10 +206,10 @@ void IDECommunicationController::handleMessage(MessageMoveIDECursor* message) { std::string networkMessage = NetworkProtocolHelper::buildSetIDECursorMessage( message->FilePosition, message->Row, message->Column - ); + ); MessageStatus( - "Jumping the external tool to the following location: " + message->FilePosition + ", row: " + + "Jump to source location via plug-in: " + message->FilePosition + ", row: " + std::to_string(message->Row) + ", col: " + std::to_string(message->Column) ).dispatch(); diff --git a/src/lib/component/controller/StatusBarController.cpp b/src/lib/component/controller/StatusBarController.cpp index 24055f87..028fa0bf 100644 --- a/src/lib/component/controller/StatusBarController.cpp +++ b/src/lib/component/controller/StatusBarController.cpp @@ -57,12 +57,10 @@ void StatusBarController::handleMessage(MessageStatus* message) void StatusBarController::setStatus(const std::string& status, bool isError, bool showLoader) { - std::string str = utility::replace(status, "\n", " "); - - if (!str.empty()) + if (!status.empty()) { - LOG_INFO_STREAM(<< "STATUS " << str); + LOG_INFO_STREAM(<< "STATUS " << status); - getView()->showMessage(str, isError, showLoader); + getView()->showMessage(status, isError, showLoader); } } diff --git a/src/lib/component/controller/StatusController.cpp b/src/lib/component/controller/StatusController.cpp index 0ce741f4..5ab7b15b 100644 --- a/src/lib/component/controller/StatusController.cpp +++ b/src/lib/component/controller/StatusController.cpp @@ -20,13 +20,12 @@ StatusView* StatusController::getView() const void StatusController::clear() { - m_status.clear(); - getView()->clear(); } void StatusController::handleMessage(MessageClearStatusView* message) { - clear(); + m_status.clear(); + getView()->clear(); } void StatusController::handleMessage(MessageShowStatus* message) @@ -36,6 +35,11 @@ void StatusController::handleMessage(MessageShowStatus* message) void StatusController::handleMessage(MessageStatus* message) { + if (!message->status.size()) + { + return; + } + std::vector status; status.push_back(Status(message->status, message->isError)); diff --git a/src/lib/component/controller/StatusController.h b/src/lib/component/controller/StatusController.h index 6b342a0e..5a1fe3f7 100644 --- a/src/lib/component/controller/StatusController.h +++ b/src/lib/component/controller/StatusController.h @@ -25,7 +25,6 @@ public: ~StatusController(); private: - bool m_enabled; StatusView* getView() const; virtual void clear(); diff --git a/src/lib/utility/logging/LogManager.cpp b/src/lib/utility/logging/LogManager.cpp index ade8eb54..fc785db0 100644 --- a/src/lib/utility/logging/LogManager.cpp +++ b/src/lib/utility/logging/LogManager.cpp @@ -4,6 +4,7 @@ #include "utility/logging/LogMessage.h" #include "utility/logging/logging.h" +#include "utility/messaging/type/MessageStatus.h" #include "utility/Version.h" std::shared_ptr LogManager::createInstance() @@ -31,11 +32,21 @@ LogManager::~LogManager() void LogManager::setLoggingEnabled(bool enabled) { - m_loggingEnabled = enabled; - if (m_loggingEnabled) + if (m_loggingEnabled != enabled) { - LOG_INFO("Enabled logging for Coati " + Version::getApplicationVersion().toDisplayString()); + if (enabled) + { + LOG_INFO("Enabled logging for Coati " + Version::getApplicationVersion().toDisplayString()); + MessageStatus("Enabled console and file logging.").dispatch(); + } + else + { + LOG_INFO("Disabled logging"); + MessageStatus("Disabled console and file logging.").dispatch(); + } } + + m_loggingEnabled = enabled; } void LogManager::addLogger(std::shared_ptr logger) diff --git a/src/lib/utility/messaging/type/MessageRefresh.h b/src/lib/utility/messaging/type/MessageRefresh.h index 5fa5b3b1..52c9ba9d 100644 --- a/src/lib/utility/messaging/type/MessageRefresh.h +++ b/src/lib/utility/messaging/type/MessageRefresh.h @@ -3,13 +3,14 @@ #include "utility/messaging/Message.h" -class MessageRefresh: public Message +class MessageRefresh + : public Message { public: MessageRefresh() : uiOnly(false) , all(false) - , reloadSettings(true) + , loadStyle(true) { } @@ -30,9 +31,9 @@ public: return *this; } - MessageRefresh& keepSettings() + MessageRefresh& noReloadStyle() { - reloadSettings = false; + loadStyle = false; return *this; } @@ -50,7 +51,8 @@ public: bool uiOnly; bool all; - bool reloadSettings; + + bool loadStyle; }; #endif // MESSAGE_REFRESH_H diff --git a/src/lib/utility/messaging/type/MessageStatus.h b/src/lib/utility/messaging/type/MessageStatus.h index 722ae357..7f3d3b7a 100644 --- a/src/lib/utility/messaging/type/MessageStatus.h +++ b/src/lib/utility/messaging/type/MessageStatus.h @@ -2,13 +2,14 @@ #define MESSAGE_STATUS_H #include "utility/messaging/Message.h" +#include "utility/utilityString.h" class MessageStatus : public Message { public: MessageStatus(const std::string& status, bool isError = false, bool showLoader = false) - : status(status) + : status(utility::replace(status, "\n", " ")) , isError(isError) , showLoader(showLoader) { diff --git a/src/lib_gui/qt/element/QtStatusBar.cpp b/src/lib_gui/qt/element/QtStatusBar.cpp index 98bda876..201360a9 100644 --- a/src/lib_gui/qt/element/QtStatusBar.cpp +++ b/src/lib_gui/qt/element/QtStatusBar.cpp @@ -26,7 +26,7 @@ QtStatusBar::QtStatusBar() m_text.setFlat(true); m_text.setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac - addWidget(&m_text); + addWidget(&m_text, 1); setText("", false, false); connect(&m_text, SIGNAL(clicked()), this, SLOT(showStatus())); @@ -52,11 +52,11 @@ void QtStatusBar::setText(const std::string& text, bool isError, bool showLoader { if (isError) { - m_text.setStyleSheet("QPushButton { color: #D00000; margin-right: 0; spacing: none; }"); + m_text.setStyleSheet("QPushButton { color: #D00000; margin-right: 0; spacing: none; text-align: left; }"); } else { - m_text.setStyleSheet("QPushButton { color: #000000; margin-right: 0; spacing: none; }"); + m_text.setStyleSheet("QPushButton { color: #000000; margin-right: 0; spacing: none; text-align: left; }"); } if (showLoader) @@ -68,7 +68,7 @@ void QtStatusBar::setText(const std::string& text, bool isError, bool showLoader m_loader.hide(); } - m_text.setText(text.c_str()); + m_text.setText(m_text.fontMetrics().elidedText(QString::fromStdString(text), Qt::ElideRight, m_text.width())); } void QtStatusBar::setErrorCount(ErrorCountInfo errorCount) diff --git a/src/lib_gui/qt/view/QtDialogView.cpp b/src/lib_gui/qt/view/QtDialogView.cpp index 8c5c810a..d08773ea 100644 --- a/src/lib_gui/qt/view/QtDialogView.cpp +++ b/src/lib_gui/qt/view/QtDialogView.cpp @@ -105,12 +105,15 @@ DialogView::IndexMode QtDialogView::startIndexingDialog( void QtDialogView::updateIndexingDialog(size_t fileCount, size_t totalFileCount, std::string sourcePath) { - std::stringstream ss; - ss << "Indexing files: ["; - ss << fileCount << "/"; - ss << totalFileCount << "] "; - ss << sourcePath; - MessageStatus(ss.str(), false, true).dispatch(); + if (sourcePath.size()) + { + std::stringstream ss; + ss << "Indexing files: ["; + ss << fileCount << "/"; + ss << totalFileCount << "] "; + ss << sourcePath; + MessageStatus(ss.str(), false, true).dispatch(); + } m_onQtThread( [=]() diff --git a/src/lib_gui/qt/view/QtLogView.cpp b/src/lib_gui/qt/view/QtLogView.cpp index ad51b661..01494d39 100644 --- a/src/lib_gui/qt/view/QtLogView.cpp +++ b/src/lib_gui/qt/view/QtLogView.cpp @@ -7,6 +7,7 @@ #include #include +#include "Application.h" #include "settings/ApplicationSettings.h" #include "settings/ColorScheme.h" #include "qt/view/QtViewWidgetWrapper.h" @@ -143,8 +144,10 @@ void QtLogView::setLoggingEnabled(bool enabled) ApplicationSettings::getInstance()->setLoggingEnabled(enabled); ApplicationSettings::getInstance()->save(); + + Application::getInstance()->loadSettings(); + MessageRefresh msg; - msg.reloadSettings = true; msg.uiOnly = true; msg.dispatchImmediately(); } @@ -153,8 +156,10 @@ void QtLogView::setAstLoggingEnabled(bool enabled) { ApplicationSettings::getInstance()->setVerboseIndexerLoggingEnabled(enabled); ApplicationSettings::getInstance()->save(); + + Application::getInstance()->loadSettings(); + MessageRefresh msg; - msg.reloadSettings = true; msg.uiOnly = true; msg.dispatchImmediately(); } diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp index 34fbfd91..e16ad89f 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp @@ -643,6 +643,10 @@ void QtProjectWizzard::createProject() forceRefreshProject = true; } } + else + { + MessageStatus("Created project: " + path.str()).dispatch(); + } MessageDispatchWhenLicenseValid( std::make_shared(path, forceRefreshProject) @@ -666,6 +670,8 @@ void QtProjectWizzard::savePreferences() MessagePluginPortChange().dispatch(); } + Application::getInstance()->loadSettings(); + if (appSettingsChanged) { Project* currentProject = Application::getInstance()->getCurrentProject().get();