From d6235d901e77858640766895218cbe085ebcf891 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 29 Dec 2016 00:49:33 +0100 Subject: [PATCH] refs #846, allow to display cmdLineErrorMessage by BlackMisc::CStatusMessageList Improved formatting and HTL escape message --- src/blackcore/application.cpp | 9 +++++++++ src/blackcore/application.h | 9 ++++++--- src/blackgui/guiapplication.cpp | 26 +++++++++++++++++++++++--- src/blackgui/guiapplication.h | 1 + 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/blackcore/application.cpp b/src/blackcore/application.cpp index b99b96fe6..78af54f79 100644 --- a/src/blackcore/application.cpp +++ b/src/blackcore/application.cpp @@ -866,6 +866,15 @@ namespace BlackCore fputs(qPrintable(this->m_parser.helpText()), stderr); } + void CApplication::cmdLineErrorMessage(const CStatusMessageList &msgs) const + { + if (msgs.isEmpty()) { return; } + if (!msgs.hasErrorMessages()) { return; } + return CApplication::cmdLineErrorMessage( + msgs.toFormattedQString(true) + ); + } + void CApplication::cmdLineHelpMessage() { this->m_parser.showHelp(); // terminates diff --git a/src/blackcore/application.h b/src/blackcore/application.h index 3f0f4924f..8f52dbb37 100644 --- a/src/blackcore/application.h +++ b/src/blackcore/application.h @@ -241,15 +241,18 @@ namespace BlackCore //! Delegates to QCommandLineParser::value QString getParserValue(const QCommandLineOption &option) const; - //! Display parser error message - virtual void cmdLineErrorMessage(const QString &cmdLineErrorMessage) const; - //! Parses and handles the standard options such as help, version, parse error //! \note in some cases (error, version, help) application is terminated during this step //! \sa parsingHookIn bool parse(); //! @} + //! Display error message + virtual void cmdLineErrorMessage(const QString &cmdLineErrorMessage) const; + + //! Display error message + virtual void cmdLineErrorMessage(const BlackMisc::CStatusMessageList &msgs) const; + // ----------------------- contexts ---------------------------------------- //! \name Context / core facade related diff --git a/src/blackgui/guiapplication.cpp b/src/blackgui/guiapplication.cpp index 54538382a..48769d93c 100644 --- a/src/blackgui/guiapplication.cpp +++ b/src/blackgui/guiapplication.cpp @@ -226,7 +226,7 @@ namespace BlackGui } if (!tableMode) { - html += l; + html += l.toHtmlEscaped(); html += "
"; } else @@ -246,7 +246,7 @@ namespace BlackGui else { html += " "; - html += l.simplified(); + html += l.simplified().toHtmlEscaped(); } } } @@ -261,7 +261,7 @@ namespace BlackGui const QString helpText(beautifyHelpMessage(this->m_parser.helpText())); QMessageBox::warning(nullptr, QGuiApplication::applicationDisplayName(), - "

" + errorMessage + "

" + helpText + ""); + "

" + errorMessage + "


" + helpText + ""); } else { @@ -269,6 +269,26 @@ namespace BlackGui } } + void CGuiApplication::cmdLineErrorMessage(const CStatusMessageList &msgs) const + { + if (msgs.isEmpty()) { return; } + if (!msgs.hasErrorMessages()) { return; } + if (CBuildConfig::isRunningOnWindowsNtPlatform()) + { + static const CPropertyIndexList propertiesSingle({ CStatusMessage::IndexMessage }); + static const CPropertyIndexList propertiesMulti({ CStatusMessage::IndexSeverityAsString, CStatusMessage::IndexMessage }); + const QString helpText(beautifyHelpMessage(this->m_parser.helpText())); + const QString msgsHtml = msgs.toHtml(msgs.size() > 1 ? propertiesMulti : propertiesSingle); + QMessageBox::critical(nullptr, + QGuiApplication::applicationDisplayName(), + "" + msgsHtml + "

" + helpText + ""); + } + else + { + CApplication::cmdLineErrorMessage(msgs); + } + } + bool CGuiApplication::displayInStatusBar(const CStatusMessage &message) { IMainWindowAccess *m = mainWindowAccess(); diff --git a/src/blackgui/guiapplication.h b/src/blackgui/guiapplication.h index ee9b47aa8..81c7ff44a 100644 --- a/src/blackgui/guiapplication.h +++ b/src/blackgui/guiapplication.h @@ -105,6 +105,7 @@ namespace BlackGui //! \name print messages generated during parsing / cmd handling //! @{ virtual void cmdLineErrorMessage(const QString &cmdLineErrorMessage) const override; + virtual void cmdLineErrorMessage(const BlackMisc::CStatusMessageList &msgs) const override; //! @} //! \name direct access to main application window