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
This commit is contained in:
Eberhard Graether
2016-12-13 01:41:06 +01:00
parent 790afcf572
commit 48ece50eca
17 changed files with 100 additions and 48 deletions
+1
View File
@@ -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
+12
View File
@@ -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<FilePath> 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<FilePath> 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<FilePath> 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<FilePath> 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)
{
+11 -7
View File
@@ -70,6 +70,8 @@ void Application::destroyInstance()
void Application::loadSettings()
{
MessageStatus("Load settings: " + UserPaths::getAppSettingsPath()).dispatch();
std::shared_ptr<ApplicationSettings> 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()
-4
View File
@@ -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();
+2
View File
@@ -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;
@@ -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();
}
@@ -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<MessageActivateTokenLocations>(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();
@@ -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);
}
}
@@ -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;
status.push_back(Status(message->status, message->isError));
@@ -25,7 +25,6 @@ public:
~StatusController();
private:
bool m_enabled;
StatusView* getView() const;
virtual void clear();
+14 -3
View File
@@ -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> 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> logger)
@@ -3,13 +3,14 @@
#include "utility/messaging/Message.h"
class MessageRefresh: public Message<MessageRefresh>
class MessageRefresh
: public Message<MessageRefresh>
{
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
@@ -2,13 +2,14 @@
#define MESSAGE_STATUS_H
#include "utility/messaging/Message.h"
#include "utility/utilityString.h"
class MessageStatus
: public Message<MessageStatus>
{
public:
MessageStatus(const std::string& status, bool isError = false, bool showLoader = false)
: status(status)
: status(utility::replace(status, "\n", " "))
, isError(isError)
, showLoader(showLoader)
{
+4 -4
View File
@@ -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)
+9 -6
View File
@@ -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(
[=]()
+7 -2
View File
@@ -7,6 +7,7 @@
#include <QPushButton>
#include <QStandardItemModel>
#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();
}
@@ -643,6 +643,10 @@ void QtProjectWizzard::createProject()
forceRefreshProject = true;
}
}
else
{
MessageStatus("Created project: " + path.str()).dispatch();
}
MessageDispatchWhenLicenseValid(
std::make_shared<MessageLoadProject>(path, forceRefreshProject)
@@ -666,6 +670,8 @@ void QtProjectWizzard::savePreferences()
MessagePluginPortChange().dispatch();
}
Application::getInstance()->loadSettings();
if (appSettingsChanged)
{
Project* currentProject = Application::getInstance()->getCurrentProject().get();