Follow up of Ref T154, overlay messages can be appended and cleared

* changed signatures
* aligned naming to showOverlayMessage, ...
This commit is contained in:
Klaus Basan
2017-09-17 01:02:24 +02:00
committed by Mathew Sutcliffe
parent ab65039ca4
commit 6c3a0243ab
8 changed files with 87 additions and 42 deletions

View File

@@ -25,6 +25,7 @@
#include "blackmisc/simulation/aircraftmodel.h"
#include "blackmisc/simulation/distributorlist.h"
#include "blackmisc/verify.h"
#include "dbstashcomponent.h"
#include "ui_dbstashcomponent.h"
#include <QCheckBox>
@@ -184,7 +185,7 @@ namespace BlackGui
{
if (!ui->tvp_StashAircraftModels->hasSelection()) { return; }
CStatusMessageList msgs(livery.validate());
if (this->showMessages(msgs, acceptWarnings)) { return; }
if (this->showOverlayMessages(msgs, acceptWarnings)) { return; }
ui->tvp_StashAircraftModels->applyToSelected(livery);
}
@@ -192,7 +193,7 @@ namespace BlackGui
{
if (!ui->tvp_StashAircraftModels->hasSelection()) { return; }
CStatusMessageList msgs(icao.validate());
if (this->showMessages(msgs, acceptWarnings)) { return; }
if (this->showOverlayMessages(msgs, acceptWarnings)) { return; }
ui->tvp_StashAircraftModels->applyToSelected(icao);
}
@@ -201,7 +202,7 @@ namespace BlackGui
if (!icao.hasValidDesignator())
{
static const CStatusMessage msg(CStatusMessage::SeverityError, "No valid designator");
this->showMessage(msg);
this->showOverlayMessage(msg);
return;
}
@@ -210,7 +211,7 @@ namespace BlackGui
if (!stdLivery.hasValidDbKey())
{
static const CStatusMessage msg(CStatusMessage::SeverityError, "No valid standard livery for " + icao.getDesignator());
this->showMessage(msg);
this->showOverlayMessage(msg);
return;
}
@@ -221,7 +222,7 @@ namespace BlackGui
{
if (!ui->tvp_StashAircraftModels->hasSelection()) { return; }
CStatusMessageList msgs(distributor.validate());
if (this->showMessages(msgs, acceptWarnings)) { return; }
if (this->showOverlayMessages(msgs, acceptWarnings)) { return; }
ui->tvp_StashAircraftModels->applyToSelected(distributor);
}
@@ -256,7 +257,8 @@ namespace BlackGui
void CDbStashComponent::ps_onPublishPressed()
{
if (ui->tvp_StashAircraftModels->isEmpty()) {return; }
if (!sGui || sGui->isShuttingDown() || !sGui->hasWebDataServices()) { return; }
if (ui->tvp_StashAircraftModels->isEmpty()) { return; }
// get models right here, because later steps might affect selection
const CAircraftModelList models(getSelectedOrAllModels());
@@ -273,10 +275,10 @@ namespace BlackGui
msgs.push_back(CStatusMessage(validationCategories(), CStatusMessage::SeverityWarning, QString("More than %1 values, values skipped").arg(MaxModelPublished)));
}
msgs.push_back(sApp->getWebDataServices()->asyncPublishModels(validModels));
msgs.push_back(sGui->getWebDataServices()->asyncPublishModels(validModels));
if (msgs.hasWarningOrErrorMessages())
{
this->showMessages(msgs);
this->showOverlayMessages(msgs);
}
else
{
@@ -296,7 +298,7 @@ namespace BlackGui
{
if (publishedModels.isEmpty())
{
this->showMessages(msgs);
this->showOverlayMessages(msgs, false, true); // show messages, keep old messages
}
else
{
@@ -305,7 +307,7 @@ namespace BlackGui
{
this->unstashModels(publishedModels.getModelStringList(false));
};
this->showMessagesWithConfirmation(msgs, confirm.arg(publishedModels.size()), lambda, QMessageBox::Ok);
this->showOverlayMessagesWithConfirmation(msgs, true, confirm.arg(publishedModels.size()), lambda, QMessageBox::Ok);
}
}
@@ -341,7 +343,7 @@ namespace BlackGui
const CStatusMessageList msgs(this->validate(validModels, invalidModels));
if (msgs.hasWarningOrErrorMessages())
{
this->showMessages(msgs);
this->showOverlayMessages(msgs);
ui->tvp_StashAircraftModels->setHighlightModelStrings(invalidModels.getModelStringList(false));
}
else
@@ -352,7 +354,7 @@ namespace BlackGui
{
const QString no = QString::number(this->getStashedModelsCount());
CStatusMessage msg(validationCategories(), CStatusMessage::SeverityInfo, "Validation passed for " + no + " models");
this->showMessage(msg);
this->showOverlayMessage(msg);
}
}
return !validModels.isEmpty(); // at least some valid objects
@@ -445,7 +447,7 @@ namespace BlackGui
msgs.push_back(modelMsgs);
}
}
this->showMessages(msgs);
this->showOverlayMessages(msgs);
}
void CDbStashComponent::ps_copyOverValuesToSelectedModels()
@@ -512,27 +514,30 @@ namespace BlackGui
}
}
bool CDbStashComponent::showMessages(const CStatusMessageList &msgs, bool onlyErrors, int timeoutMs)
bool CDbStashComponent::showOverlayMessages(const CStatusMessageList &msgs, bool onlyErrors, bool appendOldMessages, int timeoutMs)
{
if (msgs.isEmpty()) { return false; }
if (!msgs.hasErrorMessages() && onlyErrors) { return false; }
BLACK_VERIFY_X(this->getMappingComponent(), Q_FUNC_INFO, "missing mapping component");
if (!this->getMappingComponent()) { return false; }
this->getMappingComponent()->showOverlayMessages(msgs, timeoutMs);
this->getMappingComponent()->showOverlayMessages(msgs, appendOldMessages, timeoutMs);
return true;
}
bool CDbStashComponent::showMessagesWithConfirmation(const CStatusMessageList &msgs, const QString &confirmation, std::function<void ()> okLambda, int defaultButton, bool onlyErrors, int timeoutMs)
bool CDbStashComponent::showOverlayMessagesWithConfirmation(
const CStatusMessageList &msgs, bool appendOldMessages,
const QString &confirmation, std::function<void ()> okLambda, int defaultButton, bool onlyErrors, int timeoutMs)
{
if (msgs.isEmpty()) { return false; }
if (!msgs.hasErrorMessages() && onlyErrors) { return false; }
BLACK_VERIFY_X(this->getMappingComponent(), Q_FUNC_INFO, "missing mapping component");
if (!this->getMappingComponent()) { return false; }
this->getMappingComponent()->showOverlayMessagesWithConfirmation(msgs, confirmation, okLambda, defaultButton, timeoutMs);
this->getMappingComponent()->showOverlayMessagesWithConfirmation(msgs, appendOldMessages, confirmation, okLambda, defaultButton, timeoutMs);
return true;
}
bool CDbStashComponent::showMessage(const CStatusMessage &msg, int timeoutMs)
bool CDbStashComponent::showOverlayMessage(const CStatusMessage &msg, int timeoutMs)
{
if (msg.isEmpty()) { return false; }
BLACK_VERIFY_X(this->getMappingComponent(), Q_FUNC_INFO, "missing mapping component");
@@ -540,5 +545,12 @@ namespace BlackGui
this->getMappingComponent()->showOverlayMessage(msg, timeoutMs);
return true;
}
void CDbStashComponent::clearOverlayMessages()
{
BLACK_VERIFY_X(this->getMappingComponent(), Q_FUNC_INFO, "missing mapping component");
if (!this->getMappingComponent()) { return; }
this->getMappingComponent()->clearOverlayMessages();
}
} // ns
} // ns

View File

@@ -176,13 +176,19 @@ namespace BlackGui
BlackMisc::CDataReadOnly<BlackCore::Data::TAuthenticatedDbUser> m_swiftDbUser {this, &CDbStashComponent::ps_userChanged}; //!< authenticated user
//! Display messages
bool showMessages(const BlackMisc::CStatusMessageList &msgs, bool onlyErrors = false, int timeoutMs = -1);
bool showOverlayMessages(const BlackMisc::CStatusMessageList &msgs, bool onlyErrors = false, bool appendOldMessages = false, int timeoutMs = -1);
//! Display messages with confirmation
bool showMessagesWithConfirmation(const BlackMisc::CStatusMessageList &msgs, const QString &confirmation, std::function<void()> okLambda, int defaultButton, bool onlyErrors = false, int timeoutMs = -1);
bool showOverlayMessagesWithConfirmation(
const BlackMisc::CStatusMessageList &msgs, bool appendOldMessages,
const QString &confirmation, std::function<void()> okLambda,
int defaultButton, bool onlyErrors = false, int timeoutMs = -1);
//! Display message
bool showMessage(const BlackMisc::CStatusMessage &msg, int timeoutMs = -1);
bool showOverlayMessage(const BlackMisc::CStatusMessage &msg, int timeoutMs = -1);
//! Clear messages
void clearOverlayMessages();
//! Validate
BlackMisc::CStatusMessageList validate(BlackMisc::Simulation::CAircraftModelList &validModels, BlackMisc::Simulation::CAircraftModelList &invalidModels) const;

View File

@@ -204,7 +204,7 @@ namespace BlackGui
return;
}
static const QString confirm("Install in '%1'?");
this->showOverlayMessagesWithConfirmation(status, confirm.arg(ui->le_XSwiftBusPluginDir->text()), [ = ] { this->installXSwiftBus(); });
this->showOverlayMessagesWithConfirmation(status, false, confirm.arg(ui->le_XSwiftBusPluginDir->text()), [ = ] { this->installXSwiftBus(); });
}
CRemoteFile CInstallXSwiftBusComponent::getRemoteFileSelected() const

View File

@@ -59,7 +59,7 @@ namespace BlackGui
connect(ui->tb_Kill, &QPushButton::clicked, this, &COverlayMessages::ps_killClicked);
ui->tvp_StatusMessages->setResizeMode(CStatusMessageView::ResizingAlways);
ui->tvp_StatusMessages->setForceColumnsToMaxSize(false); // problems with multinline entries, with T138 we need multiline messages
ui->tvp_StatusMessages->setForceColumnsToMaxSize(false); // problems with multiline entries, with T138 we need multiline messages
ui->tvp_StatusMessages->setWordWrap(true);
ui->tvp_StatusMessages->menuAddItems(CStatusMessageView::MenuSave);
ui->fr_Confirmation->setVisible(false);
@@ -145,7 +145,7 @@ namespace BlackGui
COverlayMessages::~COverlayMessages()
{}
void COverlayMessages::showOverlayMessages(const BlackMisc::CStatusMessageList &messages, int timeOutMs)
void COverlayMessages::showOverlayMessages(const BlackMisc::CStatusMessageList &messages, bool appendOldMessages, int timeOutMs)
{
if (messages.isEmpty()) { return; }
if (!sApp || sApp->isShuttingDown()) { return; }
@@ -159,10 +159,19 @@ namespace BlackGui
return;
}
ui->tvp_StatusMessages->updateContainerMaybeAsync(messages);
ui->tvp_StatusMessages->resizeRowsToContents();
if (appendOldMessages && !ui->tvp_StatusMessages->isEmpty())
{
CStatusMessageList messagesWithOld(messages);
messagesWithOld.push_back(ui->tvp_StatusMessages->container());
ui->tvp_StatusMessages->updateContainerMaybeAsync(messagesWithOld);
this->setModeToMessages(messagesWithOld.hasErrorMessages());
}
else
{
ui->tvp_StatusMessages->updateContainerMaybeAsync(messages);
this->setModeToMessages(messages.hasErrorMessages());
}
this->showKill(false);
this->setModeToMessages(messages.hasErrorMessages());
this->display(timeOutMs);
}
@@ -340,24 +349,29 @@ namespace BlackGui
}
}
void COverlayMessages::showOverlayMessagesWithConfirmation(const CStatusMessageList &messages, const QString &confirmationMessage, std::function<void ()> okLambda, int defaultButton, int timeOutMs)
void COverlayMessages::showOverlayMessagesWithConfirmation(const CStatusMessageList &messages, bool appendOldMessages, const QString &confirmationMessage, std::function<void ()> okLambda, int defaultButton, int timeOutMs)
{
if (this->hasPendingConfirmation())
{
// defer message
m_pendingMessageCalls.push_back([ = ]()
{
this->showOverlayMessagesWithConfirmation(messages, confirmationMessage, okLambda, defaultButton, timeOutMs);
this->showOverlayMessagesWithConfirmation(messages, appendOldMessages, confirmationMessage, okLambda, defaultButton, timeOutMs);
});
return;
}
this->setConfirmationMessage(confirmationMessage);
this->showOverlayMessages(messages, timeOutMs);
this->showOverlayMessages(messages, appendOldMessages, timeOutMs);
m_awaitingConfirmation = true; // needs to be after showOverlayMessages
m_okLambda = okLambda;
this->setDefaultConfirmationButton(defaultButton);
}
void COverlayMessages::clearOverlayMessages()
{
ui->tvp_StatusMessages->clear();
}
void COverlayMessages::setDefaultConfirmationButton(int button)
{
switch (button)

View File

@@ -76,14 +76,18 @@ namespace BlackGui
//! Show multiple messages with confirmation bar
void showOverlayMessagesWithConfirmation(
const BlackMisc::CStatusMessageList &messages,
const QString &confirmationMessage,
std::function<void()> okLambda,
int defaultButton = QMessageBox::Cancel,
int timeOutMs = -1);
const BlackMisc::CStatusMessageList &messages,
bool appendOldMessages,
const QString &confirmationMessage,
std::function<void()> okLambda,
int defaultButton = QMessageBox::Cancel,
int timeOutMs = -1);
//! Clear the overlay messages
void clearOverlayMessages();
//! Show multiple messages
void showOverlayMessages(const BlackMisc::CStatusMessageList &messages, int timeOutMs = -1);
void showOverlayMessages(const BlackMisc::CStatusMessageList &messages, bool appendOldMessages = false, int timeOutMs = -1);
//! Show single message
void showOverlayMessage(const BlackMisc::CStatusMessage &message, int timeOutMs = -1);

View File

@@ -46,14 +46,19 @@ namespace BlackGui
}
}
void COverlayMessagesFrame::showOverlayMessagesWithConfirmation(const BlackMisc::CStatusMessageList &messages, const QString &confirmationMessage, std::function<void ()> okLambda, int defaultButton, int timeOutMs)
void COverlayMessagesFrame::showOverlayMessagesWithConfirmation(const BlackMisc::CStatusMessageList &messages, bool appendOldMessages, const QString &confirmationMessage, std::function<void ()> okLambda, int defaultButton, int timeOutMs)
{
if (messages.isEmpty()) { return; }
this->initInnerFrame();
this->m_overlayMessages->showOverlayMessagesWithConfirmation(messages, confirmationMessage, okLambda, defaultButton, timeOutMs);
this->m_overlayMessages->showOverlayMessagesWithConfirmation(messages, appendOldMessages, confirmationMessage, okLambda, defaultButton, timeOutMs);
this->repaint();
}
void COverlayMessagesFrame::clearOverlayMessages()
{
m_overlayMessages->clearOverlayMessages();
}
void COverlayMessagesFrame::showOverlayMessage(const BlackMisc::CStatusMessage &message, int timeOutMs)
{
if (message.isEmpty()) { return; }
@@ -62,11 +67,11 @@ namespace BlackGui
this->repaint();
}
void COverlayMessagesFrame::showOverlayMessages(const BlackMisc::CStatusMessageList &messages, int timeOutMs)
void COverlayMessagesFrame::showOverlayMessages(const BlackMisc::CStatusMessageList &messages, bool appendOldMessages, int timeOutMs)
{
if (messages.isEmpty()) { return; }
this->initInnerFrame();
this->m_overlayMessages->showOverlayMessages(messages, timeOutMs);
this->m_overlayMessages->showOverlayMessages(messages, appendOldMessages, timeOutMs);
this->repaint();
}

View File

@@ -62,15 +62,19 @@ namespace BlackGui
//! \copydoc COverlayMessages::showOverlayMessagesWithConfirmation
void showOverlayMessagesWithConfirmation(
const BlackMisc::CStatusMessageList &messages,
bool appendOldMessages,
const QString &confirmationMessage,
std::function<void()> okLambda,
int defaultButton = QMessageBox::Cancel,
int timeOutMs = -1
);
//! Clear the overlay messages
void clearOverlayMessages();
public slots:
//! \copydoc COverlayMessages::showOverlayMessages
void showOverlayMessages(const BlackMisc::CStatusMessageList &messages, int timeOutMs = -1);
void showOverlayMessages(const BlackMisc::CStatusMessageList &messages, bool appendOldMessages = false, int timeOutMs = -1);
//! \copydoc COverlayMessages::showOverlayMessage
void showOverlayMessage(const BlackMisc::CStatusMessage &message, int timeOutMs = -1);

View File

@@ -423,7 +423,7 @@ void SwiftGuiStd::ps_sharedInfoObjectsLoaded()
{
sGui->getWebDataServices()->triggerLoadingDirectlyFromSharedFiles(newEntities, false);
};
ui->fr_CentralFrameInside->showOverlayMessagesWithConfirmation(sms, "Load data?", lambda);
ui->fr_CentralFrameInside->showOverlayMessagesWithConfirmation(sms, false, "Load data?", lambda);
});
}