diff --git a/include/f1x/openauto/autoapp/UI/ConnectDialog.hpp b/include/f1x/openauto/autoapp/UI/ConnectDialog.hpp index c0b0c42..a1d348b 100644 --- a/include/f1x/openauto/autoapp/UI/ConnectDialog.hpp +++ b/include/f1x/openauto/autoapp/UI/ConnectDialog.hpp @@ -27,12 +27,14 @@ public: signals: void connectToDevice(const QString& ipAddress); - void connected(aasdk::tcp::ITCPEndpoint::SocketPointer socket); + void connectionSucceed(aasdk::tcp::ITCPEndpoint::SocketPointer socket); void connectionFailed(); private slots: void onConnectButtonClicked(); void onConnectionFailed(); + void onConnectionSucceed(); + void setControlsEnabledStatus(bool status); private: boost::asio::io_service& ioService_; diff --git a/src/autoapp/UI/ConnectDialog.cpp b/src/autoapp/UI/ConnectDialog.cpp index 54337b6..9849052 100644 --- a/src/autoapp/UI/ConnectDialog.cpp +++ b/src/autoapp/UI/ConnectDialog.cpp @@ -22,6 +22,7 @@ ConnectDialog::ConnectDialog(boost::asio::io_service& ioService, aasdk::tcp::ITC ui_->setupUi(this); connect(ui_->pushButtonCancel, &QPushButton::clicked, this, &ConnectDialog::close); connect(ui_->pushButtonConnect, &QPushButton::clicked, this, &ConnectDialog::onConnectButtonClicked); + connect(this, &ConnectDialog::connectionSucceed, this, &ConnectDialog::onConnectionSucceed); connect(this, &ConnectDialog::connectionFailed, this, &ConnectDialog::onConnectionFailed); } @@ -32,28 +33,45 @@ ConnectDialog::~ConnectDialog() void ConnectDialog::onConnectButtonClicked() { + this->setControlsEnabledStatus(false); + const auto& ipAddress = ui_->lineEditIPAddress->text().toStdString(); auto socket = std::make_shared(ioService_); + tcpWrapper_.asyncConnect(*socket, ipAddress, 5277, [this, socket](auto ec) mutable { + if(!ec) + { + emit connectionSucceed(std::move(socket)); + this->close(); + } + else + { + emit connectionFailed(); + } + }); +} - // !ec means no error - if(!tcpWrapper_.connect(*socket, ipAddress, 5277)) - { - emit connected(socket); - this->close(); - } - else - { - emit connectionFailed(); - } +void ConnectDialog::onConnectionSucceed() +{ + this->setControlsEnabledStatus(true); } void ConnectDialog::onConnectionFailed() { + this->setControlsEnabledStatus(true); + QMessageBox errorMessage(QMessageBox::Critical, "Error", "Connection failed.", QMessageBox::Ok); errorMessage.setWindowFlags(Qt::WindowStaysOnTopHint); errorMessage.exec(); } +void ConnectDialog::setControlsEnabledStatus(bool status) +{ + ui_->pushButtonConnect->setVisible(status); + ui_->pushButtonCancel->setEnabled(status); + ui_->lineEditIPAddress->setEnabled(status); + ui_->listViewRecent->setEnabled(status); +} + } } } diff --git a/src/autoapp/UI/connectdialog.ui b/src/autoapp/UI/connectdialog.ui index ba7b6ee..a9adb5d 100644 --- a/src/autoapp/UI/connectdialog.ui +++ b/src/autoapp/UI/connectdialog.ui @@ -59,7 +59,7 @@ - + 60 @@ -91,9 +91,9 @@ - 100 + 40 340 - 89 + 121 41 @@ -104,9 +104,9 @@ - 200 + 170 340 - 89 + 121 41 @@ -114,6 +114,43 @@ Connect + + + + 170 + 340 + 121 + 41 + + + + 0 + + + 0 + + + + + + 188 + 350 + 91 + 20 + + + + Connecting... + + + groupBoxIPAddress + groupBoxRecent + labelHeadUnitServerInfo + labelCopyrightsInfoIcon + pushButtonCancel + progressBarConnect + labelConnecting + pushButtonConnect diff --git a/src/autoapp/autoapp.cpp b/src/autoapp/autoapp.cpp index 0c238cf..81fe3cd 100644 --- a/src/autoapp/autoapp.cpp +++ b/src/autoapp/autoapp.cpp @@ -116,7 +116,7 @@ int main(int argc, char* argv[]) auto connectedAccessoriesEnumerator(std::make_shared(usbWrapper, ioService, queryChainFactory)); auto app = std::make_shared(ioService, usbWrapper, tcpWrapper, androidAutoEntityFactory, std::move(usbHub), std::move(connectedAccessoriesEnumerator)); - QObject::connect(&connectDialog, &autoapp::ui::ConnectDialog::connected, [&app](auto socket) { + QObject::connect(&connectDialog, &autoapp::ui::ConnectDialog::connectionSucceed, [&app](auto socket) { app->start(std::move(socket)); });