From 368b955c666f476d3137c110f4e27607802ce7bc Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 14 Feb 2017 04:33:25 +0100 Subject: [PATCH] refs #883, Kill button for overlay error messages Example: swift pilot client started for core, but core not running. There is no way to stop the application as there are permanent errors. --- src/blackgui/overlaymessages.cpp | 39 ++++++++++++++++++++++++++------ src/blackgui/overlaymessages.h | 12 +++++++--- src/blackgui/overlaymessages.ui | 17 ++++++++++++-- 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/src/blackgui/overlaymessages.cpp b/src/blackgui/overlaymessages.cpp index 3ea6d0c41..d44d09657 100644 --- a/src/blackgui/overlaymessages.cpp +++ b/src/blackgui/overlaymessages.cpp @@ -54,6 +54,7 @@ namespace BlackGui connect(sGui, &CGuiApplication::styleSheetsChanged, this, &COverlayMessages::ps_onStyleSheetsChanged); connect(ui->pb_Ok, &QPushButton::clicked, this, &COverlayMessages::ps_okClicked); connect(ui->pb_Cancel, &QPushButton::clicked, this, &COverlayMessages::ps_cancelClicked); + connect(ui->pb_Kill, &QPushButton::clicked, this, &COverlayMessages::ps_killClicked); ui->tvp_StatusMessages->setResizeMode(CStatusMessageView::ResizingAuto); ui->fr_Confirmation->setVisible(false); @@ -73,9 +74,9 @@ namespace BlackGui ui->setupUi(this); this->resize(w, h); this->setAutoFillBackground(true); + this->m_autoCloseTimer.setObjectName(objectName() + ":autoCloseTimer"); ui->tvp_StatusMessages->setMode(CStatusMessageListModel::Simplified); connect(ui->tb_Close, &QToolButton::released, this, &COverlayMessages::close); - this->m_autoCloseTimer.setObjectName(objectName() + ":autoCloseTimer"); connect(&m_autoCloseTimer, &QTimer::timeout, this, &COverlayMessages::close); } @@ -112,11 +113,31 @@ namespace BlackGui this->close(); } + void COverlayMessages::ps_killClicked() + { + QMessageBox msgBox; + msgBox.setText("Shutdown the application."); + msgBox.setInformativeText("Do you want to terminate " + sGui->getApplicationNameAndVersion() + "?"); + msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Save); + if (QMessageBox::Ok == msgBox.exec()) + { + sGui->gracefulShutdown(); + sGui->exit(); + } + } + bool COverlayMessages::useSmall() const { return (this->width() < 400); } + void COverlayMessages::showKill(bool show) + { + ui->pb_Kill->setVisible(show); + ui->pb_Kill->setEnabled(show); + } + bool COverlayMessages::displayTextMessage(const CTextMessage &textMessage) const { const CTextMessageSettings s = this->m_messageSettings.getThreadLocal(); @@ -142,8 +163,9 @@ namespace BlackGui return; } - this->setModeToMessages(); ui->tvp_StatusMessages->updateContainer(messages); + this->showKill(false); + this->setModeToMessages(messages.hasErrorMessages()); this->display(timeOutMs); } @@ -162,12 +184,12 @@ namespace BlackGui if (this->useSmall()) { - this->setModeToMessageSmall(); + this->setModeToMessageSmall(message.isFailure()); ui->form_StatusMessageSmall->setValue(message); } else { - this->setModeToMessage(); + this->setModeToMessage(message.isFailure()); ui->form_StatusMessage->setValue(message); } this->display(timeOutMs); @@ -266,21 +288,24 @@ namespace BlackGui } } - void COverlayMessages::setModeToMessages() + void COverlayMessages::setModeToMessages(bool withKillButton) { ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessages); + this->showKill(withKillButton); this->setHeader("Messages"); } - void COverlayMessages::setModeToMessage() + void COverlayMessages::setModeToMessage(bool withKillButton) { ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessage); + this->showKill(withKillButton); this->setHeader("Message"); } - void COverlayMessages::setModeToMessageSmall() + void COverlayMessages::setModeToMessageSmall(bool withKillButton) { ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessageSmall); + this->showKill(withKillButton); this->setHeader("Message"); } diff --git a/src/blackgui/overlaymessages.h b/src/blackgui/overlaymessages.h index 533ba690d..57d204826 100644 --- a/src/blackgui/overlaymessages.h +++ b/src/blackgui/overlaymessages.h @@ -54,13 +54,13 @@ namespace BlackGui virtual ~COverlayMessages(); //! Messages mode - void setModeToMessages(); + void setModeToMessages(bool withKillButton = false); //! Single Message mode - void setModeToMessage(); + void setModeToMessage(bool withKillButton = false); //! Single Message mode - void setModeToMessageSmall(); + void setModeToMessageSmall(bool withKillButton = false); //! Single Text message mode void setModeToTextMessage(); @@ -129,6 +129,9 @@ namespace BlackGui //! Cancel clicked (only when confirmation bar is active) void ps_cancelClicked(); + //! Kill clicked (only when errors) + void ps_killClicked(); + private: QScopedPointer ui; BlackMisc::CSettingReadOnly m_messageSettings { this }; @@ -148,6 +151,9 @@ namespace BlackGui //! Small bool useSmall() const; + //! Show kill button + void showKill(bool show); + //! Display this message (use settings to decide) bool displayTextMessage(const BlackMisc::Network::CTextMessage &textMessage) const; }; diff --git a/src/blackgui/overlaymessages.ui b/src/blackgui/overlaymessages.ui index 03d04875d..e06c5e49c 100644 --- a/src/blackgui/overlaymessages.ui +++ b/src/blackgui/overlaymessages.ui @@ -63,7 +63,7 @@ - 0 + 10 0 @@ -97,6 +97,19 @@ + + + + false + + + kill application + + + Kill + + + @@ -114,7 +127,7 @@ - 4 + 3