modbus_tcp_configure.cpp
Go to the documentation of this file.
2 
3 namespace industrial_modbus_tcp
4 {
5 
6 ModbusTCPConfigure::ModbusTCPConfigure(const industrial_modbus_tcp::ConfigureRequest &req)
7 {
8  qRegisterMetaType<QMessageBox::Icon>();
10 
11  setObjectName("Modbus TCP settings");
12  setWindowTitle(objectName());
13  resize(930, 570);
14 
15  layout_ = new QVBoxLayout();
16  setLayout(layout_);
17 
18  QDialogButtonBox *buttons_box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
19  connect(buttons_box, &QDialogButtonBox::accepted, this, &ModbusTCPConfigure::checkHandlers);
20  connect(buttons_box, &QDialogButtonBox::rejected, this, &ModbusTCPConfigure::reject);
21 
22  remove_handler_ = new QPushButton("Remove handler");
23  QPushButton *add_handler = new QPushButton("Add handler");
24  connect(remove_handler_, &QPushButton::clicked, this, &ModbusTCPConfigure::removeHandler);
25  connect(add_handler, &QPushButton::clicked, this, qOverload<>(&ModbusTCPConfigure::addHandler));
26 
27  QHBoxLayout *handler_op_layout = new QHBoxLayout;
28  handler_op_layout->addWidget(remove_handler_);
29  handler_op_layout->addWidget(add_handler);
30 
31  tabs_ = new QTabWidget;
32 
33  for (auto &handler : req.handlers)
34  addHandler(handler);
35 
36  layout_->addLayout(handler_op_layout);
37  layout_->addWidget(tabs_);
38  layout_->addWidget(buttons_box);
39 
40  if (tabs_->count() == 0)
41  remove_handler_->setEnabled(false);
42 }
43 
45 {
46 }
47 
48 void ModbusTCPConfigure::getConfigureRequest(industrial_modbus_tcp::ConfigureRequest &req)
49 {
50  // Verify handlers
51  // Does not check for duplicate registers/topic names etc.
52  // Does not check for dupplicate handler names
53  req.handlers.clear();
54  for (std::size_t i(0); i < (unsigned)tabs_->count(); ++i)
55  req.handlers.push_back(static_cast<ModbusTCPHandler *>(tabs_->widget(i))->getHandler()); // ModbusTCP catches
56 }
57 
59 {
60  if (tabs_->count() == 0)
61  return;
62 
63  tabs_->removeTab(tabs_->count() - 1);
64 
65  if (tabs_->count() == 0)
66  remove_handler_->setEnabled(false);
67 }
68 
69 void ModbusTCPConfigure::addHandler(const industrial_modbus_tcp::ModbusHandler h)
70 {
71  ModbusTCPHandler *tab = new ModbusTCPHandler(h);
73  remove_handler_->setEnabled(true);
74  tabs_->addTab(tab, "Handler");
76 }
77 
79 {
80  industrial_modbus_tcp::ModbusHandler h;
81  h.name = "Handler";
82  h.ip_address = "192.168.100.000";
83  h.port = 502;
84  h.modbus_error_recovery_mode = 3;
85  addHandler(h);
86 }
87 
89 {
90  tabs_->removeTab(tabs_->currentIndex());
91 }
92 
94 {
95  try
96  {
97  for (std::size_t i(0); i < (unsigned)tabs_->count(); ++i)
98  static_cast<ModbusTCPHandler *>(tabs_->widget(i))->getHandler();
99  }
100  catch (std::runtime_error &e)
101  {
102  Q_EMIT displayMessageBox("Error in handlers",
103  e.what(), "",
104  QMessageBox::Icon::Warning);
105  return;
106  }
107 
108  accept();
109 }
110 
112 {
113  for (std::size_t i(0); i < std::size_t(tabs_->count()); ++i)
114  tabs_->setTabText(i, static_cast<ModbusTCPHandler *>(tabs_->widget(i))->name());
115 }
116 
118  const QString text,
119  const QString info,
120  const QMessageBox::Icon icon)
121 {
122  const bool old_state(isEnabled());
123  setEnabled(false);
124  QMessageBox msg_box;
125  msg_box.setWindowTitle(title);
126  msg_box.setText(text);
127  msg_box.setInformativeText(info);
128  msg_box.setIcon(icon);
129  msg_box.setStandardButtons(QMessageBox::Ok);
130  msg_box.exec();
131  setEnabled(old_state);
132 }
133 
134 }
void getConfigureRequest(industrial_modbus_tcp::ConfigureRequest &req)
ModbusTCPConfigure(const industrial_modbus_tcp::ConfigureRequest &req)
void displayMessageBox(const QString, const QString, const QString, const QMessageBox::Icon)
void displayMessageBoxHandler(const QString title, const QString text, const QString info="", const QMessageBox::Icon icon=QMessageBox::Icon::Information)


industrial_modbus_tcp
Author(s): Victor Lamoine - Institut Maupertuis
autogenerated on Mon Feb 28 2022 22:33:12