diff --git a/samples/blackgui/mainwindow.cpp b/samples/blackgui/mainwindow.cpp index 2787ee2ac..2ffcf337e 100644 --- a/samples/blackgui/mainwindow.cpp +++ b/samples/blackgui/mainwindow.cpp @@ -22,7 +22,7 @@ MainWindow::MainWindow(GuiModes::WindowMode windowMode, QWidget *parent) : QMainWindow(parent, windowMode == GuiModes::WindowFrameless ? (Qt::Window | Qt::FramelessWindowHint) : Qt::Tool), ui(new Ui::MainWindow), m_infoWindow(nullptr), - m_windowMode(windowMode), m_init(false), m_coreMode(GuiModes::CoreExternal), + m_init(false), m_windowMode(windowMode), m_coreMode(GuiModes::CoreExternal), m_coreAvailable(false), m_contextNetworkAvailable(false), m_contextVoiceAvailable(false), m_dBusConnection("dummy"), m_coreRuntime(nullptr), m_atcListOnline(nullptr), m_atcListBooked(nullptr), diff --git a/samples/blackgui/mainwindow.ui b/samples/blackgui/mainwindow.ui index 70751a761..464694af9 100644 --- a/samples/blackgui/mainwindow.ui +++ b/samples/blackgui/mainwindow.ui @@ -1538,7 +1538,7 @@ QSizeGrip { - 0 + 1 @@ -1736,14 +1736,14 @@ QSizeGrip { - + ICAO type (e.g. A320) - + @@ -1756,14 +1756,14 @@ QSizeGrip { - + - Plane type + Aircraft type (e.g. L2J) - + diff --git a/samples/blackgui/mainwindow_aircraft.cpp b/samples/blackgui/mainwindow_aircraft.cpp index 68ada682e..c52d888b4 100644 --- a/samples/blackgui/mainwindow_aircraft.cpp +++ b/samples/blackgui/mainwindow_aircraft.cpp @@ -42,12 +42,15 @@ bool MainWindow::reloadOwnAircraft() if (this->m_contextVoiceAvailable) { CVoiceRoomList selectedRooms = this->m_contextNetwork->getSelectedVoiceRooms(); - this->m_voiceRoomCom1 = this->ui->cb_CockpitVoiceRoom1Override->isChecked() ? - this->ui->le_CockpitVoiceRoomCom1->text().trimmed() : - selectedRooms[0]; - this->m_voiceRoomCom2 = this->ui->cb_CockpitVoiceRoom2Override->isChecked() ? - this->ui->le_CockpitVoiceRoomCom2->text().trimmed() : - selectedRooms[1]; + if (selectedRooms.size() == 2) + { + this->m_voiceRoomCom1 = this->ui->cb_CockpitVoiceRoom1Override->isChecked() ? + this->ui->le_CockpitVoiceRoomCom1->text().trimmed() : + selectedRooms[0]; + this->m_voiceRoomCom2 = this->ui->cb_CockpitVoiceRoom2Override->isChecked() ? + this->ui->le_CockpitVoiceRoomCom2->text().trimmed() : + selectedRooms[1]; + } } // diff --git a/samples/blackgui/mainwindow_init.cpp b/samples/blackgui/mainwindow_init.cpp index 0878f8ad8..015de7ac8 100644 --- a/samples/blackgui/mainwindow_init.cpp +++ b/samples/blackgui/mainwindow_init.cpp @@ -117,6 +117,7 @@ void MainWindow::init(GuiModes::CoreMode coreMode) // signal / slots bool connect; this->connect(this->m_contextNetwork, &IContextNetwork::statusMessage, this, &MainWindow::displayStatusMessage); + this->connect(this->m_contextNetwork, &IContextNetwork::statusMessages, this, &MainWindow::displayStatusMessages); this->connect(this->m_contextNetwork, &IContextNetwork::connectionTerminated, this, &MainWindow::connectionTerminated); this->connect(this->m_contextNetwork, &IContextNetwork::connectionStatusChanged, this, &MainWindow::connectionStatusChanged); this->connect(this->m_contextSettings, &IContextSettings::changedNetworkSettings, this, &MainWindow::changedNetworkSettings); diff --git a/samples/blackmiscdbus/BlackMiscTest.Datacontext.xml b/samples/blackmiscdbus/BlackMiscTest.Datacontext.xml index 3eeae1bf7..1e8476a45 100644 --- a/samples/blackmiscdbus/BlackMiscTest.Datacontext.xml +++ b/samples/blackmiscdbus/BlackMiscTest.Datacontext.xml @@ -1,10 +1,10 @@ - + - + @@ -19,14 +19,12 @@ - - diff --git a/samples/blackmiscdbus/BlackMiscTest.Testservice.xml b/samples/blackmiscdbus/BlackMiscTest.Testservice.xml index 3ab70f5c0..4ba47fb73 100644 --- a/samples/blackmiscdbus/BlackMiscTest.Testservice.xml +++ b/samples/blackmiscdbus/BlackMiscTest.Testservice.xml @@ -22,7 +22,7 @@ - + @@ -66,21 +66,21 @@ - + - + - + - + - + @@ -89,7 +89,7 @@ - + @@ -97,9 +97,9 @@ - + - + @@ -107,7 +107,7 @@ - + diff --git a/samples/blackmiscdbus/datacontext.h b/samples/blackmiscdbus/datacontext.h index 4c8f97376..8ab546e6e 100644 --- a/samples/blackmiscdbus/datacontext.h +++ b/samples/blackmiscdbus/datacontext.h @@ -82,7 +82,7 @@ namespace BlackMiscTest /*! * \brief Default constructor */ - CDataContext(QObject *parent = 0) : QObject(parent) {} + CDataContext(QObject *parent = nullptr) : QObject(parent) {} /*! * \brief ctor for Qt meta system diff --git a/samples/blackmiscdbus/main.cpp b/samples/blackmiscdbus/main.cpp index 84edf08e4..d2c519c61 100644 --- a/samples/blackmiscdbus/main.cpp +++ b/samples/blackmiscdbus/main.cpp @@ -33,28 +33,81 @@ int main(int argc, char *argv[]) } // some runtime settings + QString ip = "192.168.0.133"; + QString port = "45000"; const QString executable = QString(cmdlineArgs.at(0)); // used as command to fork myself const bool clientFlag = cmdlineArgs.contains("client", Qt::CaseInsensitive); - const bool useSessionBusForServer = cmdlineArgs.contains("session", Qt::CaseInsensitive); // flag for session bus - QString address(useSessionBusForServer ? "session" : "tcp:host=192.168.0.133,port=45000"); // testing with real transfer - // loopback 127.0.0.1 + bool useSessionBusForServer; + if (cmdlineArgs.contains("session", Qt::CaseInsensitive)) + { + // session mode + useSessionBusForServer = true; + } + else + { + // TCP/IP mode + useSessionBusForServer = false; + if (cmdlineArgs.length() > 2) + { + ip = cmdlineArgs.at(cmdlineArgs.length() - 2); + port = cmdlineArgs.at(cmdlineArgs.length() - 1); + } + } + QString addressTcp = QString("tcp:host=%1,port=%2").arg(ip).arg(port); + QString address(useSessionBusForServer ? "session" : addressTcp); // testing with real transfer // Create a Testservice instance and register it with the session bus only if // the service isn't already available. if (!clientFlag) { // Configure tests - qDebug() << "1 .. Run testservice to test data transfer" << address; - qDebug() << "1sb. Run testservice via session bus"; - qDebug() << "2 .. Data context example (via TCP)" << address; - qDebug() << "2sb. Data context example (via session bus)"; - qDebug() << "3 .. Data context example, only server (via TCP)" << address; - qDebug() << "3sb. Data context example, only server (via session bus)"; + Menu: + qDebug() << "1 .. Run testservice to test data transfer" << addressTcp; + qDebug() << "1sb. Run testservice via session bus"; + qDebug() << "2 .. Data context example (via TCP)" << addressTcp; + qDebug() << "2sb. Data context example (via session bus)"; + qDebug() << "3 .. Data context example, only server (via TCP)" << addressTcp; + qDebug() << "3sb. Data context example, only server (via session bus)"; + qDebug() << "----- Change address / port (no validation, do before starting server)"; + qDebug() << "loop Address to loopback, 127.0.0.1"; + qDebug() << "ip some IP address, e.g 192.168.100.100"; + qDebug() << "port some port, e.g 12345"; + qDebug() << "-----"; qDebug() << "x .. Bye"; QTextStream qtin(stdin); - QString mode = qtin.readLine().toLower(); - bool startServer = !mode.startsWith('3'); + QString mode = qtin.readLine().toLower().trimmed(); + + if (mode.startsWith("l")) + { + ip = "127.0.0.1"; + addressTcp = QString("tcp:host=%1,port=%2").arg(ip).arg(port); + goto Menu; + } + if (mode.startsWith("i")) + { + QStringList p = mode.split(QRegExp("\\s")); + if (p.length() > 1) + { + ip = p.at(1); + addressTcp = QString("tcp:host=%1,port=%2").arg(ip).arg(port); + } + goto Menu; + } + if (mode.startsWith("p")) + { + QStringList p = mode.split(QRegExp("\\s")); + if (p.length() > 1) + { + port = p.at(1); + addressTcp = QString("tcp:host=%1,port=%2").arg(ip).arg(port); + } + goto Menu; + } + + // start DBus + address = QString(useSessionBusForServer ? "session" : addressTcp); // testing with real transfer + bool startClient = !mode.startsWith('3'); if (mode.contains("sb", Qt::CaseInsensitive)) address = "session"; if (mode.startsWith("1")) { @@ -71,6 +124,8 @@ int main(int argc, char *argv[]) // I know I am in the "server process here", so I can safely create a CDBusServer // this runs in the original process and can be directly debugged + qDebug(); + qDebug("--------------------------------------------------------"); BlackCore::CDBusServer *dBusServer = new BlackCore::CDBusServer(useSessionBusForServer ? "session" : address); qDebug() << "server" << dBusServer->address() << "connected:" << dBusServer->isConnected(); @@ -78,9 +133,16 @@ int main(int argc, char *argv[]) QStringList args; args << "client"; args << mode; - if (address == "session") args << address; - - if (startServer) BlackMiscTest::ServiceTool::startNewProcess(executable, args, &a); + if (address == "session") + { + args << address; // set session as cmd arg + } + else + { + args << ip; + args << port; + } + if (startClient) BlackMiscTest::ServiceTool::startNewProcess(executable, args, &a); // run tests if (mode == "testservice") diff --git a/samples/blackmiscdbus/servicetool.cpp b/samples/blackmiscdbus/servicetool.cpp index b12759976..28934868f 100644 --- a/samples/blackmiscdbus/servicetool.cpp +++ b/samples/blackmiscdbus/servicetool.cpp @@ -660,8 +660,7 @@ namespace BlackMiscTest value.addValue(CAtcStation::IndexBookedUntil, QDateTime::currentDateTimeUtc().addDays(2)); qDebug() << " condition" << condition; qDebug() << " values" << value; - qint32 c = dataContextInterface.updateOnlineControllers(condition, value); - qDebug() << c << "values changed in online controllers"; + dataContextInterface.updateOnlineControllers(condition, value); } // display current status @@ -679,7 +678,7 @@ namespace BlackMiscTest // next round? Client qDebug() << "Key x to exit"; qDebug() << "1 .. add new list via property on interface"; - qDebug() << "3 .. append 1 to controllers in context (no expected to change anything)"; // add to reference + qDebug() << "3 .. append 1 to controllers in context (not expected to change anything)"; // add to reference qDebug() << "5 .. foo signal directly on interface"; qDebug() << "7x . 7, update if, e.g. 7EDDM_TWR"; diff --git a/src/blackcore/blackcore.contextnetwork.xml b/src/blackcore/blackcore.contextnetwork.xml index f3352421b..23b28f64f 100644 --- a/src/blackcore/blackcore.contextnetwork.xml +++ b/src/blackcore/blackcore.contextnetwork.xml @@ -5,6 +5,10 @@ + + + + diff --git a/src/blackcore/context_network.cpp b/src/blackcore/context_network.cpp index a7c246459..85ac3f4c5 100644 --- a/src/blackcore/context_network.cpp +++ b/src/blackcore/context_network.cpp @@ -246,11 +246,11 @@ namespace BlackCore } // send as message - QString m("connection status changed "); - m.append(this->m_network->connectionStatusToString(from)).append(" ").append(this->m_network->connectionStatusToString(to)); + QString m("connection status changed from %1 to %2"); + m = m.arg(INetwork::connectionStatusToString(from), INetwork::connectionStatusToString(to)); msgs.push_back(CStatusMessage(CStatusMessage::TypeTrafficNetwork, to == INetwork::DisconnectedError ? CStatusMessage::SeverityError : CStatusMessage::SeverityInfo, m)); - emit this->statusMessage(msgs[0]); + emit this->statusMessages(msgs); // send as own signal emit this->connectionStatusChanged(from, to); diff --git a/src/blackcore/context_network_interface.cpp b/src/blackcore/context_network_interface.cpp index 0e0f5fddc..23fc2ae6e 100644 --- a/src/blackcore/context_network_interface.cpp +++ b/src/blackcore/context_network_interface.cpp @@ -38,6 +38,8 @@ namespace BlackCore "connectionTerminated", this, SIGNAL(connectionTerminated())); connection.connect(serviceName, IContextNetwork::ServicePath(), IContextNetwork::InterfaceName(), "statusMessage", this, SIGNAL(statusMessage(BlackMisc::CStatusMessage))); + connection.connect(serviceName, IContextNetwork::ServicePath(), IContextNetwork::InterfaceName(), + "statusMessages", this, SIGNAL(statusMessages(BlackMisc::CStatusMessageList))); connection.connect(serviceName, IContextNetwork::ServicePath(), IContextNetwork::InterfaceName(), "textMessagesReceived", this, SIGNAL(textMessagesReceived(BlackMisc::Network::CTextMessageList))); } diff --git a/src/blackcore/context_network_interface.h b/src/blackcore/context_network_interface.h index 73b70e57d..89c189f9c 100644 --- a/src/blackcore/context_network_interface.h +++ b/src/blackcore/context_network_interface.h @@ -106,11 +106,17 @@ namespace BlackCore signals: /*! - * \brief ATC station list has been changed + * \brief Send status messages * \param message */ void statusMessage(const BlackMisc::CStatusMessage &message); + /*! + * \brief Send status messages + * \param messages + */ + void statusMessages(const BlackMisc::CStatusMessageList &messages); + /*! * \brief List has been changed */ @@ -137,8 +143,6 @@ namespace BlackCore * \param to */ // If I use the enum, adaptor / interface are not created correctly - - void connectionStatusChanged(uint from, uint to); /*! diff --git a/src/blackcore/network.h b/src/blackcore/network.h index bf360a765..342d1b2b5 100644 --- a/src/blackcore/network.h +++ b/src/blackcore/network.h @@ -64,11 +64,20 @@ namespace BlackCore Connected }; - QString connectionStatusToString(ConnectionStatus status) const + static const QString connectionStatusToString(ConnectionStatus status) { - int index = metaObject()->indexOfEnumerator("ConnectionStatus"); - QMetaEnum metaEnum = metaObject()->enumerator(index); - return metaEnum.valueToKey(status); + // the version with metaObject, metaObject()->indexOfEnumerator does not work anymore + // an interface cannot be used with Q_DECLAREMETATYPE + switch (status) + { + case Disconnected: return "disconnected"; + case DisconnectedError: return "disconnectedError"; + case Connecting: return "connecting"; + case Connected: return "connected"; + default: break; + } + qFatal("Missing value"); + return ""; // just for compiler warning } virtual bool isConnected() const = 0; @@ -101,7 +110,7 @@ namespace BlackCore virtual void setOwnAircraftPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) = 0; virtual void setOwnAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) = 0; virtual void setOwnAircraftAvionics(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, - const BlackMisc::Aviation::CTransponder &xpdr) = 0; + const BlackMisc::Aviation::CTransponder &transponder) = 0; // Weather / flight plan virtual void requestMetar(const QString &airportICAO) = 0; diff --git a/src/blackcore/network_vatlib.cpp b/src/blackcore/network_vatlib.cpp index ad02f9bc8..9f9940934 100644 --- a/src/blackcore/network_vatlib.cpp +++ b/src/blackcore/network_vatlib.cpp @@ -31,8 +31,8 @@ namespace BlackCore CNetworkVatlib::CNetworkVatlib(CNetworkVatlib::LoginMode loginMode, QObject *parent) : INetwork(parent), m_net(Cvatlib_Network::Create()), - m_status(Cvatlib_Network::connStatus_Idle), m_loginMode(loginMode), + m_status(Cvatlib_Network::connStatus_Idle), m_fsdTextCodec(QTextCodec::codecForName("latin1")) { try diff --git a/src/blackmisc/aviomodulator.h b/src/blackmisc/aviomodulator.h index f153a0f60..19a976ce4 100644 --- a/src/blackmisc/aviomodulator.h +++ b/src/blackmisc/aviomodulator.h @@ -37,7 +37,7 @@ namespace BlackMisc * \brief Default constructor */ CModulator() : - CAvionicsBase("default"), m_volumeInput(0), m_volumeOutput(0), m_digits(2) {} + CAvionicsBase("default"), m_volumeInput(0), m_volumeOutput(0), m_enabled(true), m_digits(2) {} /*! * \brief Constructor @@ -47,7 +47,7 @@ namespace BlackMisc * \param digits */ CModulator(const QString &name, const BlackMisc::PhysicalQuantities::CFrequency &activeFrequency, const BlackMisc::PhysicalQuantities::CFrequency &standbyFrequency, int digits) : - CAvionicsBase(name), m_frequencyActive(activeFrequency), m_frequencyStandby(standbyFrequency), m_volumeInput(0), m_volumeOutput(0), m_digits(digits), m_enabled(true) {} + CAvionicsBase(name), m_frequencyActive(activeFrequency), m_frequencyStandby(standbyFrequency), m_volumeInput(0), m_volumeOutput(0), m_enabled(true), m_digits(digits) {} /*! * \brief String for converter diff --git a/src/blackmisc/pqphysicalquantity.cpp b/src/blackmisc/pqphysicalquantity.cpp index 27fcb2769..ee91eb860 100644 --- a/src/blackmisc/pqphysicalquantity.cpp +++ b/src/blackmisc/pqphysicalquantity.cpp @@ -25,7 +25,7 @@ namespace BlackMisc * (The implicitly generated copy constructor would suffice, but for what seems to be a bug in MSVC2010 template instantiation) */ template CPhysicalQuantity::CPhysicalQuantity(const CPhysicalQuantity &other) : - m_value(other.m_value), m_unit(other.m_unit) + CValueObject(), m_value(other.m_value), m_unit(other.m_unit) { // void }