From 8f85c5498955b014531555dae0dce5abf612a2e7 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 5 Dec 2015 16:39:54 +0100 Subject: [PATCH] refs #538, Formatting, minor tweaks, comments * new slot syntax in ATC station component * formatting, comments * tab order * utility function for severity in status message * null checks in threadutils * invalidKey function in datastore * changed data object keys (cached objets) * added missing value object compare cases * renamed timer in context network * finder function for model list * renamed getContainer to container (as it is just a reference) --- src/blackcore/contextnetworkimpl.cpp | 6 +++--- src/blackcore/contextnetworkimpl.h | 2 +- src/blackcore/contextownaircraftimpl.h | 1 - src/blackcore/data/globalsetup.h | 2 +- src/blackcore/data/updateinfo.h | 2 +- src/blackgui/components/atcstationcomponent.cpp | 17 ++++++++--------- src/blackgui/components/atcstationcomponent.h | 5 ++++- src/blackgui/components/dblogincomponent.ui | 12 ++++++++++-- src/blackgui/components/mappingcomponent.cpp | 9 +++++---- src/blackgui/editors/modelmappingform.ui | 9 +++++++++ src/blackgui/models/actionmodel.h | 6 ++---- src/blackgui/models/atcstationlistmodel.cpp | 4 ++-- src/blackgui/models/columns.cpp | 2 +- src/blackgui/models/listmodelbase.cpp | 6 +++--- src/blackgui/models/listmodelbase.h | 7 ++----- src/blackgui/views/atcstationview.h | 1 - src/blackmisc/aviation/aircrafticaocode.cpp | 6 ++++++ src/blackmisc/aviation/aircrafticaocode.h | 2 +- src/blackmisc/aviation/airlineicaocode.cpp | 2 ++ src/blackmisc/datastore.h | 6 ++++++ src/blackmisc/simulation/aircraftmodellist.cpp | 10 ++++++++++ src/blackmisc/simulation/aircraftmodellist.h | 3 +++ src/blackmisc/statusmessage.h | 9 ++++++--- src/blackmisc/threadutils.cpp | 6 ++++-- 24 files changed, 90 insertions(+), 45 deletions(-) diff --git a/src/blackcore/contextnetworkimpl.cpp b/src/blackcore/contextnetworkimpl.cpp index 3313006b4..b67b26e59 100644 --- a/src/blackcore/contextnetworkimpl.cpp +++ b/src/blackcore/contextnetworkimpl.cpp @@ -52,9 +52,9 @@ namespace BlackCore connect(this->m_network, &INetwork::textMessageSent, this, &CContextNetwork::textMessageSent); // 2. Update timer for data (network data such as frequency) - this->m_dataUpdateTimer = new QTimer(this); - connect(this->m_dataUpdateTimer, &QTimer::timeout, this, &CContextNetwork::requestDataUpdates); - this->m_dataUpdateTimer->start(30 * 1000); + this->m_networkDataUpdateTimer = new QTimer(this); + connect(this->m_networkDataUpdateTimer, &QTimer::timeout, this, &CContextNetwork::requestDataUpdates); + this->m_networkDataUpdateTimer->start(30 * 1000); // 3. data reader, start reading when setup is synced with xx delay this->m_webDataReader = new CWebDataServices(CWebReaderFlags::AllReaders, 1000, this); diff --git a/src/blackcore/contextnetworkimpl.h b/src/blackcore/contextnetworkimpl.h index d5dccf200..dd68bbce7 100644 --- a/src/blackcore/contextnetworkimpl.h +++ b/src/blackcore/contextnetworkimpl.h @@ -241,7 +241,7 @@ namespace BlackCore CWebDataServices *m_webDataReader = nullptr; //!< web service readers QList m_webReaderSignalConnections; INetwork::ConnectionStatus m_currentStatus = INetwork::Disconnected; //!< used to detect pending connections - QTimer *m_dataUpdateTimer = nullptr; //!< general updates such as ATIS, frequencies, see requestDataUpdates() + QTimer *m_networkDataUpdateTimer = nullptr; //!< general updates such as ATIS, frequencies, see requestDataUpdates() // Digest signals, only sending after some time BlackMisc::CDigestSignal m_dsAtcStationsBookedChanged { this, &IContextNetwork::changedAtcStationsBooked, &IContextNetwork::changedAtcStationsBookedDigest, 750, 2 }; diff --git a/src/blackcore/contextownaircraftimpl.h b/src/blackcore/contextownaircraftimpl.h index 88020e8cd..929ac8029 100644 --- a/src/blackcore/contextownaircraftimpl.h +++ b/src/blackcore/contextownaircraftimpl.h @@ -70,7 +70,6 @@ namespace BlackCore virtual bool updateOwnParts(const BlackMisc::Aviation::CAircraftParts &parts) override; public slots: - //! \copydoc IContextOwnAircraft::getOwnAircraft() //! \ingroup ownaircraftprovider virtual BlackMisc::Simulation::CSimulatedAircraft getOwnAircraft() const override; diff --git a/src/blackcore/data/globalsetup.h b/src/blackcore/data/globalsetup.h index 0ac13da87..3e3d72e90 100644 --- a/src/blackcore/data/globalsetup.h +++ b/src/blackcore/data/globalsetup.h @@ -149,7 +149,7 @@ namespace BlackCore struct GlobalSetup : public BlackCore::CDataTrait { //! Key in data cache - static const char *key() { return "readers/global/setup"; } + static const char *key() { return "readers/setup"; } //! Default value static const CGlobalSetup &defaultValue() diff --git a/src/blackcore/data/updateinfo.h b/src/blackcore/data/updateinfo.h index 9a64bde2c..8d82eea66 100644 --- a/src/blackcore/data/updateinfo.h +++ b/src/blackcore/data/updateinfo.h @@ -106,7 +106,7 @@ namespace BlackCore struct UpdateInfo : public BlackCore::CDataTrait { //! Key in data cache - static const char *key() { return "readers/global/updateinfo"; } + static const char *key() { return "readers/updateinfo"; } //! Default value static const CUpdateInfo &defaultValue() diff --git a/src/blackgui/components/atcstationcomponent.cpp b/src/blackgui/components/atcstationcomponent.cpp index 3f9ab3591..4383d9267 100644 --- a/src/blackgui/components/atcstationcomponent.cpp +++ b/src/blackgui/components/atcstationcomponent.cpp @@ -53,21 +53,20 @@ namespace BlackGui this->ui->tvp_AtcStationsOnlineTree->setHeaderHidden(true); // Signal / Slots - bool connected = this->connect(this->ui->le_AtcStationsOnlineMetar, SIGNAL(returnPressed()), this, SLOT(getMetar())); - Q_ASSERT(connected); - connected = this->connect(this->ui->pb_AtcStationsLoadMetar, SIGNAL(clicked()), this, SLOT(getMetar())); - Q_ASSERT(connected); - Q_UNUSED(connected); + connect(this->ui->le_AtcStationsOnlineMetar, &QLineEdit::returnPressed, this, &CAtcStationComponent::ps_getMetarAsEntered); + connect(this->ui->pb_AtcStationsLoadMetar, &QPushButton::clicked, this, &CAtcStationComponent::ps_getMetarAsEntered); connect(this, &QTabWidget::currentChanged, this, &CAtcStationComponent::ps_atcStationsTabChanged); // "local" tab changed (booked, online) connect(this->ui->tvp_AtcStationsOnline, &QTableView::clicked, this, &CAtcStationComponent::ps_onlineAtcStationSelected); connect(this->ui->tvp_AtcStationsOnline, &CAtcStationView::testRequestDummyAtcOnlineStations, this, &CAtcStationComponent::ps_testCreateDummyOnlineAtcStations); connect(this->ui->tvp_AtcStationsOnline, &CAtcStationView::requestUpdate, this, &CAtcStationComponent::ps_requestOnlineStationsUpdate); + connect(this->ui->tvp_AtcStationsOnline, &CAtcStationView::requestNewBackendData, this, &CAtcStationComponent::ps_requestOnlineStationsUpdate); connect(this->ui->tvp_AtcStationsOnline, &CAtcStationView::rowCountChanged, this, &CAtcStationComponent::ps_onCountChanged); connect(this->ui->tvp_AtcStationsOnline, &CAtcStationView::rowCountChanged, this, &CAtcStationComponent::ps_onCountChanged); connect(this->ui->tvp_AtcStationsOnline, &CAtcStationView::requestComFrequency, this, &CAtcStationComponent::ps_setComFrequency); connect(this->ui->tvp_AtcStationsOnline, &CAtcStationView::requestTextMessageWidget, this, &CAtcStationComponent::requestTextMessageWidget); connect(this->ui->tvp_AtcStationsBooked, &CAtcStationView::requestUpdate, this, &CAtcStationComponent::ps_reloadAtcStationsBooked); + connect(this->ui->tvp_AtcStationsBooked, &CAtcStationView::requestNewBackendData, this, &CAtcStationComponent::ps_reloadAtcStationsBooked); connect(this->ui->tvp_AtcStationsBooked, &CAtcStationView::rowCountChanged, this, &CAtcStationComponent::ps_onCountChanged); connect(this->ui->pb_AtcStationsAtisReload, &QPushButton::clicked, this, &CAtcStationComponent::ps_requestAtis); @@ -133,7 +132,6 @@ namespace BlackGui ); this->m_timestampLastReadOnlineStations = QDateTime::currentDateTimeUtc(); this->m_timestampOnlineStationsChanged = this->m_timestampLastReadOnlineStations; - this->updateTreeView(); } } @@ -151,7 +149,7 @@ namespace BlackGui void CAtcStationComponent::getMetar(const QString &airportIcaoCode) { - QString icao = airportIcaoCode.isEmpty() ? this->ui->le_AtcStationsOnlineMetar->text().trimmed().toUpper() : airportIcaoCode.trimmed().toUpper(); + QString icao(airportIcaoCode.isEmpty() ? this->ui->le_AtcStationsOnlineMetar->text().trimmed().toUpper() : airportIcaoCode.trimmed().toUpper()); this->ui->le_AtcStationsOnlineMetar->setText(icao); if (icao.length() != 4) { return; } CMetar metar(this->getIContextNetwork()->getMetarForAirport(icao)); @@ -183,7 +181,7 @@ namespace BlackGui } else { - this->ui->tvp_AtcStationsBooked->updateContainer(this->getIContextNetwork()->getAtcStationsBooked()); + this->ui->tvp_AtcStationsBooked->updateContainerMaybeAsync(this->getIContextNetwork()->getAtcStationsBooked()); this->m_timestampLastReadBookedStations = QDateTime::currentDateTimeUtc(); } } @@ -235,7 +233,7 @@ namespace BlackGui if (this->isParentDockWidgetFloating()) { return; } // here I know I am the selected widget, update, but keep GUI responsive (-> timer) - QTimer::singleShot(1000, this, SLOT(update())); + QTimer::singleShot(1000, this, &CAtcStationComponent::update); Q_UNUSED(index); } @@ -263,6 +261,7 @@ namespace BlackGui void CAtcStationComponent::updateTreeView() { // EXPERIMENTAL CODE + //! \todo change model so we can directly use hierarchies QAbstractItemModel *old = (this->ui->tvp_AtcStationsOnlineTree->model()); this->ui->tvp_AtcStationsOnlineTree->setModel( this->ui->tvp_AtcStationsOnline->derivedModel()->toAtcGroupModel() diff --git a/src/blackgui/components/atcstationcomponent.h b/src/blackgui/components/atcstationcomponent.h index 7240d607d..94af7ae2d 100644 --- a/src/blackgui/components/atcstationcomponent.h +++ b/src/blackgui/components/atcstationcomponent.h @@ -66,7 +66,7 @@ namespace BlackGui void stopTimer() { Q_ASSERT(this->m_updateTimer); this->m_updateTimer->stopTimer(); } //! Get METAR for given ICAO airport code - void getMetar(const QString &airportIcaoCode = ""); + void getMetar(const QString &airportIcaoCode); //! \copydoc CAtcStationListModel::changedAtcStationConnectionStatus void changedAtcStationOnlineConnectionStatus(const BlackMisc::Aviation::CAtcStation &station, bool added); @@ -76,6 +76,9 @@ namespace BlackGui void runtimeHasBeenSet() override; private slots: + //! Get all METARs + void ps_getMetarAsEntered() { this->getMetar(""); } + //! Request new ATIS void ps_requestAtis(); diff --git a/src/blackgui/components/dblogincomponent.ui b/src/blackgui/components/dblogincomponent.ui index 47fc0c17c..1d0586868 100644 --- a/src/blackgui/components/dblogincomponent.ui +++ b/src/blackgui/components/dblogincomponent.ui @@ -2,6 +2,14 @@ CDbLoginComponent + + + 0 + 0 + 345 + 325 + + DB login @@ -73,7 +81,7 @@ - DB + DB replaced by URL @@ -126,7 +134,7 @@ - User: + Name: diff --git a/src/blackgui/components/mappingcomponent.cpp b/src/blackgui/components/mappingcomponent.cpp index 2ddd6a508..5b6f18b0c 100644 --- a/src/blackgui/components/mappingcomponent.cpp +++ b/src/blackgui/components/mappingcomponent.cpp @@ -71,6 +71,7 @@ namespace BlackGui this->ui->lbl_AircraftIconDisplayed->setText("Icon displayed here"); // Updates + this->ui->tvp_AircraftModels->setDisplayAutomatically(false); this->m_updateTimer->setUpdateInterval(10 * 1000); } @@ -92,7 +93,7 @@ namespace BlackGui CAircraftModelList CMappingComponent::findModelsStartingWith(const QString modelName, Qt::CaseSensitivity cs) { Q_ASSERT(this->ui->tvp_AircraftModels); - return this->ui->tvp_AircraftModels->getContainer().findModelsStartingWith(modelName, cs); + return this->ui->tvp_AircraftModels->container().findModelsStartingWith(modelName, cs); } void CMappingComponent::runtimeHasBeenSet() @@ -217,7 +218,7 @@ namespace BlackGui } const CCallsign callsign(cs); - bool hasCallsign = this->ui->tvp_SimulatedAircraft->getContainer().containsCallsign(callsign); + bool hasCallsign = this->ui->tvp_SimulatedAircraft->container().containsCallsign(callsign); if (!hasCallsign) { CLogMessage(this).validationError("Unmapped callsign %1 for mapping") << callsign.asString(); @@ -231,7 +232,7 @@ namespace BlackGui return; } - bool hasModel = this->ui->tvp_AircraftModels->getContainer().containsModelString(modelString); + bool hasModel = this->ui->tvp_AircraftModels->container().containsModelString(modelString); if (!hasModel) { CLogMessage(this).validationError("Invalid model for mapping"); @@ -297,7 +298,7 @@ namespace BlackGui void CMappingComponent::ps_onModelsUpdateRequested() { Q_ASSERT(getIContextSimulator()); - CAircraftModelList ml = getIContextSimulator()->getInstalledModels(); + CAircraftModelList ml(getIContextSimulator()->getInstalledModels()); this->ui->tvp_AircraftModels->updateContainer(ml); // model completer diff --git a/src/blackgui/editors/modelmappingform.ui b/src/blackgui/editors/modelmappingform.ui index aba090ee9..df5010b57 100644 --- a/src/blackgui/editors/modelmappingform.ui +++ b/src/blackgui/editors/modelmappingform.ui @@ -181,6 +181,15 @@ 1 + + le_Id + le_ModelKey + le_Name + le_Description + ph_Stash + pb_Save + le_LastUpdated + diff --git a/src/blackgui/models/actionmodel.h b/src/blackgui/models/actionmodel.h index e10268830..b2fc3fefe 100644 --- a/src/blackgui/models/actionmodel.h +++ b/src/blackgui/models/actionmodel.h @@ -20,7 +20,6 @@ namespace BlackGui { namespace Models { - class ActionItem; /*! @@ -31,7 +30,6 @@ namespace BlackGui Q_OBJECT public: - //! User roles enum ItemRole { @@ -63,12 +61,12 @@ namespace BlackGui int columnCount(const QModelIndex &parent = QModelIndex()) const override; private: + //! Init model data void setupModelData(); QScopedPointer m_rootItem; }; - } -} +} // ns #endif // guard diff --git a/src/blackgui/models/atcstationlistmodel.cpp b/src/blackgui/models/atcstationlistmodel.cpp index c752d5004..bb8554bad 100644 --- a/src/blackgui/models/atcstationlistmodel.cpp +++ b/src/blackgui/models/atcstationlistmodel.cpp @@ -94,14 +94,14 @@ namespace BlackGui QStandardItemModel *model = new QStandardItemModel(); if (this->isEmpty()) { return model; } model->setColumnCount(4); - QMap types = this->getContainer().getSuffixes(); + QMap types = this->container().getSuffixes(); for (const QString &type : types.keys()) { // ownership of QStandardItem is taken by model QStandardItem *typeFolderFirstColumn = new QStandardItem(CCallsign::atcSuffixToIcon(type).toQIcon(), type); QList typeFolderRow { typeFolderFirstColumn }; model->invisibleRootItem()->appendRow(typeFolderRow); - CAtcStationList stations = this->getContainer().findBySuffix(type); + CAtcStationList stations = this->container().findBySuffix(type); for (const CAtcStation &station : stations) { QList stationRow; diff --git a/src/blackgui/models/columns.cpp b/src/blackgui/models/columns.cpp index ce14738c5..0eb640e24 100644 --- a/src/blackgui/models/columns.cpp +++ b/src/blackgui/models/columns.cpp @@ -200,7 +200,7 @@ namespace BlackGui const CDefaultFormatter *CColumns::getFormatter(const QModelIndex &index) const { - if (!isValidColumn(index)) return nullptr; + if (!isValidColumn(index)) { return nullptr; } return this->m_columns.at(index.column()).getFormatter(); } diff --git a/src/blackgui/models/listmodelbase.cpp b/src/blackgui/models/listmodelbase.cpp index ad38550bb..4562e2e7a 100644 --- a/src/blackgui/models/listmodelbase.cpp +++ b/src/blackgui/models/listmodelbase.cpp @@ -184,7 +184,7 @@ namespace BlackGui // check / init if (!this->isValidIndex(index)) { return QVariant(); } const CDefaultFormatter *formatter = this->m_columns.getFormatter(index); - Q_ASSERT(formatter); + Q_ASSERT_X(formatter, Q_FUNC_INFO, "Missing formatter"); if (!formatter) { return QVariant(); } //! Formatted data @@ -372,7 +372,7 @@ namespace BlackGui } template - const ContainerType &CListModelBase::getContainer() const + const ContainerType &CListModelBase::container() const { return this->m_container; } @@ -507,7 +507,7 @@ namespace BlackGui { this->sort(); // make sure container is sorted } - ContainerType container(this->getContainer()); + ContainerType container(this->container()); container.truncate(maxNumber); this->updateContainerMaybeAsync(container, false); } diff --git a/src/blackgui/models/listmodelbase.h b/src/blackgui/models/listmodelbase.h index 2bb0349ac..4ba5c62c7 100644 --- a/src/blackgui/models/listmodelbase.h +++ b/src/blackgui/models/listmodelbase.h @@ -138,7 +138,7 @@ namespace BlackGui virtual bool isValidIndex(const QModelIndex &index) const; //! Used container data - virtual const ContainerType &getContainer() const; + const ContainerType &container() const; //! \copydoc QAbstractItemModel::data() virtual QVariant data(const QModelIndex &index, int role) const override; @@ -226,9 +226,7 @@ namespace BlackGui protected: std::unique_ptr > m_filter; //!< Used filter - //! Constructor - //! \param translationContext I18N context - //! \param parent + //! \copydoc CListModelBaseNonTemplate::CListModelBaseNonTemplate CListModelBase(const QString &translationContext, QObject *parent = nullptr) : CListModelBaseNonTemplate(translationContext, parent) { } @@ -268,7 +266,6 @@ namespace BlackGui BlackMisc::CVariant bQv = b.propertyByIndex(index); return (order == Qt::AscendingOrder) ? (aQv < bQv) : (bQv < aQv); } - } // namespace } // namespace } // namespace diff --git a/src/blackgui/views/atcstationview.h b/src/blackgui/views/atcstationview.h index 0bb9b1ffc..3e1a226dc 100644 --- a/src/blackgui/views/atcstationview.h +++ b/src/blackgui/views/atcstationview.h @@ -27,7 +27,6 @@ namespace BlackGui Q_OBJECT public: - //! Constructor explicit CAtcStationView(QWidget *parent = nullptr); diff --git a/src/blackmisc/aviation/aircrafticaocode.cpp b/src/blackmisc/aviation/aircrafticaocode.cpp index b1305d08d..00938767c 100644 --- a/src/blackmisc/aviation/aircrafticaocode.cpp +++ b/src/blackmisc/aviation/aircrafticaocode.cpp @@ -302,8 +302,14 @@ namespace BlackMisc return Compare::compare(m_legacy, compareValue.isLegacyAircraft()); case IndexIsMilitary: return Compare::compare(m_military, compareValue.isMilitary()); + case IndexIsVtol: + return Compare::compare(isVtol(), compareValue.isVtol()); + case IndexIsRealworld: + return Compare::compare(m_realWorld, compareValue.isRealWorld()); case IndexRank: return Compare::compare(m_rank, compareValue.getRank()); + case IndexDesignatorManufacturer: + return getDesignatorManufacturer().compare(compareValue.getDesignatorManufacturer(), Qt::CaseInsensitive); default: break; } diff --git a/src/blackmisc/aviation/aircrafticaocode.h b/src/blackmisc/aviation/aircrafticaocode.h index 5f5f5440d..832e10e9c 100644 --- a/src/blackmisc/aviation/aircrafticaocode.h +++ b/src/blackmisc/aviation/aircrafticaocode.h @@ -44,7 +44,7 @@ namespace BlackMisc IndexIsLegacy, IndexIsVtol, IndexRank, - IndexDesignatorManufacturer + IndexDesignatorManufacturer //!< designator and manufacturer }; //! Default constructor. diff --git a/src/blackmisc/aviation/airlineicaocode.cpp b/src/blackmisc/aviation/airlineicaocode.cpp index b345dd63c..cc2236131 100644 --- a/src/blackmisc/aviation/airlineicaocode.cpp +++ b/src/blackmisc/aviation/airlineicaocode.cpp @@ -166,6 +166,8 @@ namespace BlackMisc return this->m_designator.compare(compareValue.getDesignator()); case IndexAirlineCountry: return this->m_country.comparePropertyByIndex(compareValue.getCountry(), index.copyFrontRemoved()); + case IndexDesignatorNameCountry: + return this->m_country.getName().compare(compareValue.getCountry().getName(), Qt::CaseInsensitive); case IndexAirlineName: return this->m_name.compare(compareValue.getName(), Qt::CaseInsensitive); case IndexTelephonyDesignator: diff --git a/src/blackmisc/datastore.h b/src/blackmisc/datastore.h index c41524357..e3b97faac 100644 --- a/src/blackmisc/datastore.h +++ b/src/blackmisc/datastore.h @@ -49,6 +49,9 @@ namespace BlackMisc //! Has valid DB key bool hasValidDbKey() const { return m_dbKey >= 0; } + //! Invalid key + static int invalidDbKey() { return -1; } + protected: //! Constructor IDatastoreObjectWithIntegerKey() {} @@ -98,6 +101,9 @@ namespace BlackMisc //! Has valid DB key bool hasValidDbKey() const { return !m_dbKey.isEmpty(); } + //! Invalid key + static QString invalidDbKey() { return ""; } + protected: //! Constructor IDatastoreObjectWithStringKey() {} diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index 703e9e88e..28d14efba 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -28,6 +28,16 @@ namespace BlackMisc return false; } + bool CAircraftModelList::containsModelStringOrId(const CAircraftModel &model, Qt::CaseSensitivity sensitivity) const + { + for (const CAircraftModel &m : (*this)) + { + if (m.hasValidDbKey() && m.getDbKey() == model.getDbKey()) { return true; } + if (m.matchesModelString(model.getModelString(), sensitivity)) { return true; } + } + return false; + } + CAircraftModelList CAircraftModelList::findByModelString(const QString &modelString, Qt::CaseSensitivity sensitivity) const { return this->findBy([ = ](const CAircraftModel & model) diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index 8b3940e33..8a112c6ac 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -40,6 +40,9 @@ namespace BlackMisc //! Contains model string bool containsModelString(const QString &modelString, Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const; + //! Contains model with model string or id + bool containsModelStringOrId(const BlackMisc::Simulation::CAircraftModel &model, Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const; + //! Find by model string CAircraftModelList findByModelString(const QString &modelString, Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const; diff --git a/src/blackmisc/statusmessage.h b/src/blackmisc/statusmessage.h index d8b46f8eb..005080fb3 100644 --- a/src/blackmisc/statusmessage.h +++ b/src/blackmisc/statusmessage.h @@ -94,15 +94,18 @@ namespace BlackMisc //! Message severity StatusSeverity getSeverity() const { return this->m_severity; } + //! Info or debug, no warning or error + bool isSeverityInfoOrLess() const { return this->m_severity == SeverityInfo || this->m_severity == SeverityDebug; } + + //! Warning or above + bool isWarningOrAbove() const { return this->m_severity == SeverityWarning || this->m_severity == SeverityError; } + //! Message QString getMessage() const { return this->m_message; } //! Message empty bool isEmpty() const { return this->m_message.isEmpty(); } - //! Info or debug, no warning or error - bool isSeverityInfoOrLess() const { return this->m_severity == SeverityInfo || this->m_severity == SeverityDebug; } - //! Returns true if this message was sent by an instance of class T. template bool isFromClass(const T *pointer = nullptr) const diff --git a/src/blackmisc/threadutils.cpp b/src/blackmisc/threadutils.cpp index 3a81f2e3c..e89e695a2 100644 --- a/src/blackmisc/threadutils.cpp +++ b/src/blackmisc/threadutils.cpp @@ -24,13 +24,15 @@ namespace BlackMisc bool CThreadUtils::isApplicationThreadObjectThread(QObject *toBeTested) { Q_ASSERT_X(toBeTested, Q_FUNC_INFO, "missing QObject"); - if (!toBeTested) { return false; } - if (!toBeTested->thread()) { return false; } + if (!toBeTested || !toBeTested->thread()) { return false; } + if (!QCoreApplication::instance() || !QCoreApplication::instance()->thread()) { return false; } return (QCoreApplication::instance()->thread() == toBeTested->thread()); } bool CThreadUtils::isCurrentThreadApplicationThread() { + if (!QCoreApplication::instance()) { return false; } + if (!QCoreApplication::instance()->thread()) { return false; } return (QCoreApplication::instance()->thread() == QThread::currentThread()); }