-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.cpp
63 lines (51 loc) · 2.03 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <QApplication>
#include "PlayerGUI.h"
#include "dialog.h"
#include "CanController.h"
#include <QtConcurrent/QtConcurrent>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
bool can_controller_configured = false;
std::unique_ptr<Dialog> init_dialog = std::make_unique<Dialog>();
std::unique_ptr<PlayerGUI> form;
std::unique_ptr<CanController> can_controller;
QFuture<QString> future;
QFutureWatcher<QString> watcher;
QObject::connect(&watcher, &QFutureWatcher<QString>::finished, [&]{
if(watcher.result().isEmpty()) {
can_controller_configured = true;
form = std::make_unique<PlayerGUI>(std::move(can_controller));
form->setWindowTitle("CAN Player");
form->show();
init_dialog->close();
} else {
QMessageBox(QMessageBox::Warning,
"CAN device error", watcher.result(), QMessageBox::Ok, init_dialog.get()).exec();
init_dialog->setEnabled(true);
}
});
QObject::connect(init_dialog.get(), &Dialog::rejected, [&] {
if (!can_controller_configured) {
exit(0);
}
});
QObject::connect(init_dialog.get(), &Dialog::btnOk_click, [&]{
future = QtConcurrent::run([&] {
auto settings = init_dialog->getSettings();
try {
can_controller = std::make_unique<CanController>(settings.port_name,
static_cast<uint32_t>(!settings.autodetect
? settings.baudrate : 0),
settings.maximize);
} catch (std::runtime_error& ex) {
return QString(ex.what());
}
return QString();
});
watcher.setFuture(future);
});
init_dialog->setWindowTitle("Settings");
init_dialog->show();
return QApplication::exec();
}