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.
This commit is contained in:
Klaus Basan
2017-02-14 04:33:25 +01:00
committed by Mathew Sutcliffe
parent 83dbd3fcb6
commit 368b955c66
3 changed files with 56 additions and 12 deletions

View File

@@ -54,6 +54,7 @@ namespace BlackGui
connect(sGui, &CGuiApplication::styleSheetsChanged, this, &COverlayMessages::ps_onStyleSheetsChanged); connect(sGui, &CGuiApplication::styleSheetsChanged, this, &COverlayMessages::ps_onStyleSheetsChanged);
connect(ui->pb_Ok, &QPushButton::clicked, this, &COverlayMessages::ps_okClicked); connect(ui->pb_Ok, &QPushButton::clicked, this, &COverlayMessages::ps_okClicked);
connect(ui->pb_Cancel, &QPushButton::clicked, this, &COverlayMessages::ps_cancelClicked); 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->tvp_StatusMessages->setResizeMode(CStatusMessageView::ResizingAuto);
ui->fr_Confirmation->setVisible(false); ui->fr_Confirmation->setVisible(false);
@@ -73,9 +74,9 @@ namespace BlackGui
ui->setupUi(this); ui->setupUi(this);
this->resize(w, h); this->resize(w, h);
this->setAutoFillBackground(true); this->setAutoFillBackground(true);
this->m_autoCloseTimer.setObjectName(objectName() + ":autoCloseTimer");
ui->tvp_StatusMessages->setMode(CStatusMessageListModel::Simplified); ui->tvp_StatusMessages->setMode(CStatusMessageListModel::Simplified);
connect(ui->tb_Close, &QToolButton::released, this, &COverlayMessages::close); connect(ui->tb_Close, &QToolButton::released, this, &COverlayMessages::close);
this->m_autoCloseTimer.setObjectName(objectName() + ":autoCloseTimer");
connect(&m_autoCloseTimer, &QTimer::timeout, this, &COverlayMessages::close); connect(&m_autoCloseTimer, &QTimer::timeout, this, &COverlayMessages::close);
} }
@@ -112,11 +113,31 @@ namespace BlackGui
this->close(); 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 bool COverlayMessages::useSmall() const
{ {
return (this->width() < 400); 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 bool COverlayMessages::displayTextMessage(const CTextMessage &textMessage) const
{ {
const CTextMessageSettings s = this->m_messageSettings.getThreadLocal(); const CTextMessageSettings s = this->m_messageSettings.getThreadLocal();
@@ -142,8 +163,9 @@ namespace BlackGui
return; return;
} }
this->setModeToMessages();
ui->tvp_StatusMessages->updateContainer(messages); ui->tvp_StatusMessages->updateContainer(messages);
this->showKill(false);
this->setModeToMessages(messages.hasErrorMessages());
this->display(timeOutMs); this->display(timeOutMs);
} }
@@ -162,12 +184,12 @@ namespace BlackGui
if (this->useSmall()) if (this->useSmall())
{ {
this->setModeToMessageSmall(); this->setModeToMessageSmall(message.isFailure());
ui->form_StatusMessageSmall->setValue(message); ui->form_StatusMessageSmall->setValue(message);
} }
else else
{ {
this->setModeToMessage(); this->setModeToMessage(message.isFailure());
ui->form_StatusMessage->setValue(message); ui->form_StatusMessage->setValue(message);
} }
this->display(timeOutMs); this->display(timeOutMs);
@@ -266,21 +288,24 @@ namespace BlackGui
} }
} }
void COverlayMessages::setModeToMessages() void COverlayMessages::setModeToMessages(bool withKillButton)
{ {
ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessages); ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessages);
this->showKill(withKillButton);
this->setHeader("Messages"); this->setHeader("Messages");
} }
void COverlayMessages::setModeToMessage() void COverlayMessages::setModeToMessage(bool withKillButton)
{ {
ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessage); ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessage);
this->showKill(withKillButton);
this->setHeader("Message"); this->setHeader("Message");
} }
void COverlayMessages::setModeToMessageSmall() void COverlayMessages::setModeToMessageSmall(bool withKillButton)
{ {
ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessageSmall); ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_StatusMessageSmall);
this->showKill(withKillButton);
this->setHeader("Message"); this->setHeader("Message");
} }

View File

@@ -54,13 +54,13 @@ namespace BlackGui
virtual ~COverlayMessages(); virtual ~COverlayMessages();
//! Messages mode //! Messages mode
void setModeToMessages(); void setModeToMessages(bool withKillButton = false);
//! Single Message mode //! Single Message mode
void setModeToMessage(); void setModeToMessage(bool withKillButton = false);
//! Single Message mode //! Single Message mode
void setModeToMessageSmall(); void setModeToMessageSmall(bool withKillButton = false);
//! Single Text message mode //! Single Text message mode
void setModeToTextMessage(); void setModeToTextMessage();
@@ -129,6 +129,9 @@ namespace BlackGui
//! Cancel clicked (only when confirmation bar is active) //! Cancel clicked (only when confirmation bar is active)
void ps_cancelClicked(); void ps_cancelClicked();
//! Kill clicked (only when errors)
void ps_killClicked();
private: private:
QScopedPointer<Ui::COverlayMessages> ui; QScopedPointer<Ui::COverlayMessages> ui;
BlackMisc::CSettingReadOnly<BlackGui::Settings::TextMessageSettings> m_messageSettings { this }; BlackMisc::CSettingReadOnly<BlackGui::Settings::TextMessageSettings> m_messageSettings { this };
@@ -148,6 +151,9 @@ namespace BlackGui
//! Small //! Small
bool useSmall() const; bool useSmall() const;
//! Show kill button
void showKill(bool show);
//! Display this message (use settings to decide) //! Display this message (use settings to decide)
bool displayTextMessage(const BlackMisc::Network::CTextMessage &textMessage) const; bool displayTextMessage(const BlackMisc::Network::CTextMessage &textMessage) const;
}; };

View File

@@ -63,7 +63,7 @@
</property> </property>
<layout class="QHBoxLayout" name="hl_Header"> <layout class="QHBoxLayout" name="hl_Header">
<property name="spacing"> <property name="spacing">
<number>0</number> <number>10</number>
</property> </property>
<property name="leftMargin"> <property name="leftMargin">
<number>0</number> <number>0</number>
@@ -97,6 +97,19 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item>
<widget class="QPushButton" name="pb_Kill">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>kill application</string>
</property>
<property name="text">
<string>Kill</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QToolButton" name="tb_Close"> <widget class="QToolButton" name="tb_Close">
<property name="text"> <property name="text">
@@ -114,7 +127,7 @@
<item> <item>
<widget class="QStackedWidget" name="sw_StatusMessagesComponent"> <widget class="QStackedWidget" name="sw_StatusMessagesComponent">
<property name="currentIndex"> <property name="currentIndex">
<number>4</number> <number>3</number>
</property> </property>
<widget class="QWidget" name="pg_StatusMessages"> <widget class="QWidget" name="pg_StatusMessages">
<layout class="QVBoxLayout" name="vl_PgStatusMessages"> <layout class="QVBoxLayout" name="vl_PgStatusMessages">