refs #338 Convenience methods.

This commit is contained in:
Mathew Sutcliffe
2014-10-22 23:12:20 +01:00
parent 8962368278
commit 82da5fca6f
2 changed files with 27 additions and 2 deletions

View File

@@ -46,6 +46,13 @@ namespace BlackMisc
//! \warning This must only be called from the main thread.
CLogPatternHandler *handlerForPattern(const CLogPattern &pattern);
//! Return a pattern handler for subscribing to all validation warnings and errors.
//! \warning This must only be called from the main thread.
CLogPatternHandler *handlerForValidation()
{
return handlerForPattern(CLogPattern::exactMatch(CLogCategory::validation()).withSeverityAtOrAbove(CStatusMessage::SeverityWarning));
}
signals:
//! Emitted when a message is logged in this process.
void localMessageLogged(const BlackMisc::CStatusMessage &message);
@@ -128,6 +135,25 @@ namespace BlackMisc
*/
void messageLogged(const CStatusMessage &message);
public:
/*!
* Convenience method to connect the messageLogged signal to a slot in the given receiver object.
*/
template <typename T, typename F>
QMetaObject::Connection subscribe(T *receiver, F slot)
{
return connect(this, &CLogPatternHandler::messageLogged, receiver, slot);
}
/*!
* Convenience method to connect the messageLogged signal to a functor.
*/
template <typename F>
QMetaObject::Connection subscribe(F slot)
{
return connect(this, &CLogPatternHandler::messageLogged, slot);
}
private:
friend class CLogHandler;
CLogPatternHandler(QObject *parent) : QObject(parent) {}

View File

@@ -112,8 +112,7 @@ void MainWindow::init(const CRuntimeConfig &runtimeConfig)
this->connect(this->ui->comp_MainInfoArea->getSettingsComponent(), &CSettingsComponent::changedAtcStationsUpdateInterval, this->ui->comp_MainInfoArea->getAtcStationComponent(), &::CAtcStationComponent::setUpdateIntervalSeconds);
// log messages
auto *logHandler = CLogHandler::instance()->handlerForPattern(CLogPattern().withSeverityAtOrAbove(CStatusMessage::SeverityInfo));
this->connect(logHandler, &CLogPatternHandler::messageLogged, this, &MainWindow::ps_displayStatusMessageInGui);
CLogHandler::instance()->handlerForPattern(CLogPattern().withSeverityAtOrAbove(CStatusMessage::SeverityInfo))->subscribe(this, &MainWindow::ps_displayStatusMessageInGui);
Q_ASSERT(connect);
Q_UNUSED(connect); // suppress GCC warning in release build