diff --git a/samples/blackmisc/samplesmetadata.cpp b/samples/blackmisc/samplesmetadata.cpp index 15254a268..dd39372f5 100644 --- a/samples/blackmisc/samplesmetadata.cpp +++ b/samples/blackmisc/samplesmetadata.cpp @@ -11,6 +11,7 @@ #include "blackmisc/blackmiscfreefunctions.h" #include "blackmisc/avatcstationlist.h" #include +#include #include using namespace BlackMisc::Aviation; @@ -26,14 +27,16 @@ namespace BlackMiscTest */ int CSamplesMetadata::samples() { + int argv = 0; QTextStream cin(stdin); - + QTextStream cout(stdout); + QGuiApplication dummy(argv, nullptr); // otherwise no QPixmap metadata + Q_UNUSED(dummy); BlackMisc::registerMetadata(); - BlackMisc::displayAllUserMetatypesTypes(); + BlackMisc::displayAllUserMetatypesTypes(cout); cin.readLine(); - qDebug() << "------- Enter --------"; - + cout << "------- Enter --------" << endl; return 0; } diff --git a/samples/blackmisc/samplesvariant.cpp b/samples/blackmisc/samplesvariant.cpp index 086bbe4c0..585fb4bcc 100644 --- a/samples/blackmisc/samplesvariant.cpp +++ b/samples/blackmisc/samplesvariant.cpp @@ -11,6 +11,7 @@ #include "blackmisc/variant.h" #include "blackmisc/pqallquantities.h" #include "blackmisc/avallclasses.h" +#include "blackmisc/simulation/simulatedaircraft.h" #include "blackmisc/blackmiscfreefunctions.h" #include #include @@ -18,6 +19,8 @@ using namespace BlackMisc; using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::Aviation; +using namespace BlackMisc::Simulation; +using namespace BlackMisc::Network; namespace BlackMiscTest { @@ -32,12 +35,16 @@ namespace BlackMiscTest CHeading h1(45, CHeading::True, CAngleUnit::deg()); CHeading h2(60, CHeading::True, CAngleUnit::deg()); - CVariant cvh = h1.toCVariant(); qDebug() << h1 << cvh.userType(); - qDebug() << cva << cvh; // CVariant knows how to stringify the contained value object + CSimulatedAircraft sa(CAircraft("FOO", CUser("123", "Joe Doe"), CAircraftSituation())); + CVariant cvsa = sa.toCVariant(); + qDebug() << sa << cvsa.userType(); + qDebug() << cva << cvh << cvsa; // CVariant knows how to stringify the contained value object + + // from variant CAngle *ap_heading = &h1; // angle actually heading CAngle *ap_angle = &a1; // angle really heading qDebug() << (*ap_heading) << ap_heading->toCVariant().userType(); @@ -51,6 +58,15 @@ namespace BlackMiscTest ap_angle->convertFromCVariant(a1.toCVariant()); qDebug() << (*ap_angle) << ap_angle->toCVariant().userType(); + // Sim aircraft + CAircraft a; + sa.convertFromCVariant(cvsa); + a.convertFromCVariant(cvsa); + qDebug() << sa << a; + + qDebug() << "--"; + qDebug() << "Expected 2xASSERT"; + // This gives me an unwanted(!) assert, canConvert is not smart enough to detect upcasting // because CValueObjects are not QObjects ap_angle->convertFromCVariant(h2.toCVariant()); diff --git a/samples/blackmiscdbus/servicetool.cpp b/samples/blackmiscdbus/servicetool.cpp index 819b7b0e5..9de20dfe8 100644 --- a/samples/blackmiscdbus/servicetool.cpp +++ b/samples/blackmiscdbus/servicetool.cpp @@ -379,6 +379,13 @@ namespace BlackMiscTest qDebug() << "Pinged aircraft via interface" << ((aircraft == aircraftReceived) ? "OK" : "ERROR!") << aircraftReceived; + CSimulatedAircraft simAircraft(aircraft); + CAircraftModel model("foobar", CAircraftModel::TypeModelMapping); + simAircraft.setModel(model); + CSimulatedAircraft simAircraftReceived = testserviceInterface.pingSimulatedAircraft(simAircraft); + qDebug() << "Pinged simulated aircraft via interface" + << ((simAircraft == simAircraftReceived) ? "OK" : "ERROR!") << simAircraftReceived; + CAtcStationList atcStationList; atcStationList.push_back(station); atcStationList.push_back(station); diff --git a/samples/blackmiscdbus/testservice.cpp b/samples/blackmiscdbus/testservice.cpp index 5d851c27a..12463442f 100644 --- a/samples/blackmiscdbus/testservice.cpp +++ b/samples/blackmiscdbus/testservice.cpp @@ -246,7 +246,7 @@ namespace BlackMiscTest } /* - * Ping aircrafts + * Ping aircraft */ CAircraftList Testservice::pingAircraftList(const CAircraftList &aircraftList) { @@ -326,6 +326,15 @@ namespace BlackMiscTest return aircraft; } + /* + * Ping simulated aircraft + */ + Simulation::CSimulatedAircraft Testservice::pingSimulatedAircraft(const Simulation::CSimulatedAircraft &aircraft) + { + qDebug() << "Pid:" << ServiceTool::getPid() << "ping simulated aircraft:" << aircraft; + return aircraft; + } + /* * Ping variant */ diff --git a/samples/blackmiscdbus/testservice.h b/samples/blackmiscdbus/testservice.h index e40b718c1..4ed9baa60 100644 --- a/samples/blackmiscdbus/testservice.h +++ b/samples/blackmiscdbus/testservice.h @@ -19,6 +19,7 @@ #include "blackmisc/avallclasses.h" #include "blackmisc/networkallclasses.h" #include "blackmisc/pqallquantities.h" +#include "blackmisc/simulation/simulatedaircraft.h" #include "blackmisc/mathallclasses.h" #include "blacksim/fscommon/aircraftcfgentrieslist.h" #include "servicetool.h" @@ -105,10 +106,7 @@ namespace BlackMiscTest //! Receive speed BlackMisc::PhysicalQuantities::CSpeed pingSpeed(const BlackMisc::PhysicalQuantities::CSpeed &speed); - /*! //! Receive altitude - * \param comUnit - */ BlackMisc::Aviation::CAltitude pingAltitude(const BlackMisc::Aviation::CAltitude &altitude); //! Ping ATC station @@ -117,6 +115,9 @@ namespace BlackMiscTest //! Ping aircraft BlackMisc::Aviation::CAircraft pingAircraft(const BlackMisc::Aviation::CAircraft &aircraft); + //! Ping simulated aircraft + BlackMisc::Simulation::CSimulatedAircraft pingSimulatedAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + //! Ping ATC list BlackMisc::Aviation::CAtcStationList pingAtcStationList(const BlackMisc::Aviation::CAtcStationList &atcStationList) const; diff --git a/samples/blackmiscdbus/testservice_interface.h b/samples/blackmiscdbus/testservice_interface.h index 46bf27480..754138f61 100644 --- a/samples/blackmiscdbus/testservice_interface.h +++ b/samples/blackmiscdbus/testservice_interface.h @@ -102,6 +102,13 @@ namespace BlackMiscTest return asyncCallWithArgumentList(QLatin1String("pingAircraft"), argumentList); } + inline QDBusPendingReply pingSimulatedAircraft(BlackMisc::Simulation::CSimulatedAircraft aircraft) + { + QList argumentList; + argumentList << QVariant::fromValue(aircraft); + return asyncCallWithArgumentList(QLatin1String("pingSimulatedAircraft"), argumentList); + } + inline QDBusPendingReply pingAtcStationList(BlackMisc::Aviation::CAtcStationList atcStationList) { QList argumentList; diff --git a/src/blackmisc/blackmiscfreefunctions.cpp b/src/blackmisc/blackmiscfreefunctions.cpp index 5cb717261..ddbe9e630 100644 --- a/src/blackmisc/blackmiscfreefunctions.cpp +++ b/src/blackmisc/blackmiscfreefunctions.cpp @@ -333,13 +333,15 @@ size_t BlackMisc::heapSizeOf(const QMetaObject &) /* * Dump all user types */ -void BlackMisc::displayAllUserMetatypesTypes() +void BlackMisc::displayAllUserMetatypesTypes(QTextStream &out) { + for (int mt = QMetaType::User; mt < QMetaType::User + 1000; mt++) { - if (!QMetaType::isRegistered(mt)) continue; + if (!QMetaType::isRegistered(mt)) { continue; } QMetaType metaType(mt); - qDebug() << "type:" << mt << "name:" << QMetaType::typeName(mt) << QMetaType::sizeOf(mt) << BlackMisc::heapSizeOf(metaType); + out << "type: " << mt << " name:" << QMetaType::typeName(mt) << " | " + << QMetaType::sizeOf(mt) << " / " << BlackMisc::heapSizeOf(metaType) << endl; } } diff --git a/src/blackmisc/blackmiscfreefunctions.h b/src/blackmisc/blackmiscfreefunctions.h index f8dd4c680..c0a7126bd 100644 --- a/src/blackmisc/blackmiscfreefunctions.h +++ b/src/blackmisc/blackmiscfreefunctions.h @@ -16,7 +16,9 @@ #include #include #include +#include #include +#include #include @@ -145,9 +147,9 @@ namespace BlackMisc */ QVariant complexQtTypeFromDbusArgument(const QDBusArgument &argument, int type); - //! brief Display all user metatypes + //! Display all user metatypes //! \remarks Used in order to debug code, do not remove - void displayAllUserMetatypesTypes(); + void displayAllUserMetatypesTypes(QTextStream &out = QTextStream(stdout)); /*! * \brief Calculate a single hash value based on a list of individual hash values diff --git a/src/blacksound/soundgenerator.cpp b/src/blacksound/soundgenerator.cpp index 22ea6e0ff..6c5fae633 100644 --- a/src/blacksound/soundgenerator.cpp +++ b/src/blacksound/soundgenerator.cpp @@ -500,19 +500,18 @@ namespace BlackSound if (removeFileAfterPlaying) BlackMisc::CFileDeleter::addFileForDeletion(file); } - void CSoundGenerator::printAllQtSoundDevices() + void CSoundGenerator::printAllQtSoundDevices(QTextStream &out) { - QTextStream qtout(stdout); - qtout << "output" << endl; + out << "output:" << endl; foreach(QAudioDeviceInfo qd, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) { - qtout << qd.deviceName() << endl; + out << qd.deviceName() << endl; } - qtout << "input" << endl; + out << "input:" << endl; foreach(QAudioDeviceInfo qd, QAudioDeviceInfo::availableDevices(QAudio::AudioInput)) { - qtout << qd.deviceName() << endl; + out << qd.deviceName() << endl; } } diff --git a/src/blacksound/soundgenerator.h b/src/blacksound/soundgenerator.h index 35b6ac10d..b5163289d 100644 --- a/src/blacksound/soundgenerator.h +++ b/src/blacksound/soundgenerator.h @@ -191,7 +191,7 @@ namespace BlackSound static void playNotificationSound(qint32 volume, CNotificationSounds::Notification notification); //! For debugging purposes - void static printAllQtSoundDevices(); + void static printAllQtSoundDevices(QTextStream &qtout = QTextStream(stdout)); signals: /*! diff --git a/src/swiftcore/tool.cpp b/src/swiftcore/tool.cpp index 7989bbfa5..3faeef71e 100644 --- a/src/swiftcore/tool.cpp +++ b/src/swiftcore/tool.cpp @@ -96,7 +96,7 @@ namespace BlackMiscTest { qtout << "-------------" << endl; qtout << "Qt audio devices" << endl; - BlackSound::CSoundGenerator::printAllQtSoundDevices(); + BlackSound::CSoundGenerator::printAllQtSoundDevices(qtout); } else if (line.startsWith("level")) { @@ -105,6 +105,10 @@ namespace BlackMiscTest refreshSubscriptionSeverities(); qtout << "Changed level to " << CStatusMessage::severityToString(messageSeverity) << endl; } + else if (line.startsWith("meta")) + { + BlackMisc::displayAllUserMetatypesTypes(qtout); + } else if (line.startsWith("log")) { line.replace("log", ""); @@ -124,7 +128,8 @@ namespace BlackMiscTest qtout << " log + context + [e]nabled / [d]isabled" << endl; qtout << " contexts: app / aud / net / own (aircraft) / set / sim / all" << endl; qtout << " examples: logappd, lognete, logsimd, logalle" << endl; - qtout << "3) all . commands can be used, e.g. .com1 127.35" << endl; + qtout << "3) display metadata data: meta" << endl; + qtout << "4) all . commands can be used, e.g. .com1 127.35" << endl; qtout << endl; } else if (line.startsWith(".")) diff --git a/src/swiftgui_standard/swiftguistd.ui b/src/swiftgui_standard/swiftguistd.ui index bb124aa5a..7a444b868 100644 --- a/src/swiftgui_standard/swiftguistd.ui +++ b/src/swiftgui_standard/swiftguistd.ui @@ -243,8 +243,15 @@ + + + Debug + + + + @@ -357,6 +364,11 @@ Font + + + Meta types (to console) + + diff --git a/src/swiftgui_standard/swiftguistd_init.cpp b/src/swiftgui_standard/swiftguistd_init.cpp index c242d24bf..d9a7ca360 100644 --- a/src/swiftgui_standard/swiftguistd_init.cpp +++ b/src/swiftgui_standard/swiftguistd_init.cpp @@ -157,6 +157,7 @@ void SwiftGuiStd::initGuiSignals() connect(this->ui->menu_FileResetSettings, &QAction::triggered, this, &SwiftGuiStd::ps_onMenuClicked); connect(this->ui->menu_FileReloadStyleSheets, &QAction::triggered, this, &SwiftGuiStd::ps_onMenuClicked); connect(this->ui->menu_FileFont, &QAction::triggered, this, &SwiftGuiStd::ps_onMenuClicked); + connect(this->ui->menu_DebugMetaTypes, &QAction::triggered, this, &SwiftGuiStd::ps_onMenuClicked); // command line / text messages connect(this->ui->comp_MainInfoArea->getTextMessageComponent(), &CTextMessageComponent::displayInInfoWindow, this->m_compInfoWindow, &CInfoWindowComponent::display); diff --git a/src/swiftgui_standard/swiftguistd_menus.cpp b/src/swiftgui_standard/swiftguistd_menus.cpp index 02d9e5b2c..fea44de66 100644 --- a/src/swiftgui_standard/swiftguistd_menus.cpp +++ b/src/swiftgui_standard/swiftguistd_menus.cpp @@ -66,6 +66,13 @@ void SwiftGuiStd::ps_onMenuClicked() Q_ASSERT(this->getIContextSettings()); this->getIContextSettings()->reset(true); } + else if (sender == this->ui->menu_DebugMetaTypes) + { + QString metadata; + QTextStream stream(&metadata); + BlackMisc::displayAllUserMetatypesTypes(stream); + this->ui->comp_MainInfoArea->getLogComponent()->appendPlainTextToConsole(metadata); + } } void SwiftGuiStd::initDynamicMenus()