Skip to content

Commit 66f5c55

Browse files
committed
Reorganize connect menu
1 parent 3126ddc commit 66f5c55

2 files changed

Lines changed: 41 additions & 13 deletions

File tree

omodsim/menuconnect.cpp

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,16 @@ MenuConnect::MenuConnect(MenuType type, ModbusMultiServer& server, QWidget *pare
1515
{
1616
if(_menuType == MenuType::ConnectMenu)
1717
{
18-
addAction(tr("Modbus/TCP Srv"), ConnectionType::Tcp, QString(), "Modbus/TCP Srv");
19-
for(auto&& port: getAvailableSerialPorts())
20-
{
21-
const auto text = QString(tr("Port %1")).arg(port);
22-
addAction(text, ConnectionType::Serial, port, QString("Port %1").arg(port));
18+
addAction(this, tr("Modbus/TCP Srv"), ConnectionType::Tcp, QString(), "Modbus/TCP Srv");
19+
20+
const auto availablePorts = getAvailableSerialPorts();
21+
if(!availablePorts.isEmpty()) {
22+
auto serialMenu = new QMenu(tr("Modbus/RTU Srv"), parent);
23+
for(auto&& port: availablePorts) {
24+
const auto text = QString(tr("Port %1")).arg(port);
25+
addAction(serialMenu, text, ConnectionType::Serial, port, QString("Port %1").arg(port));
26+
}
27+
addMenu(serialMenu);
2328
}
2429
}
2530

@@ -32,18 +37,18 @@ MenuConnect::MenuConnect(MenuType type, ModbusMultiServer& server, QWidget *pare
3237
case ConnectionType::Tcp:
3338
{
3439
const auto port = QString("%1:%2").arg(cd.TcpParams.IPAddress, QString::number(cd.TcpParams.ServicePort));
35-
addAction(tr("Modbus/TCP Srv %1").arg(port), ConnectionType::Tcp, port, QString("Modbus/TCP Srv %1").arg(port));
40+
addAction(this, tr("Modbus/TCP Srv %1").arg(port), ConnectionType::Tcp, port, QString("Modbus/TCP Srv %1").arg(port));
3641
}
3742
break;
3843

3944
case ConnectionType::Serial:
40-
addAction(tr("Port %1").arg(cd.SerialParams.PortName), ConnectionType::Serial, cd.SerialParams.PortName, QString("Port %1").arg(cd.SerialParams.PortName));
45+
addAction(this, tr("Port %1").arg(cd.SerialParams.PortName), ConnectionType::Serial, cd.SerialParams.PortName, QString("Port %1").arg(cd.SerialParams.PortName));
4146
break;
4247
}
4348
}
4449
else
4550
{
46-
for(auto&& a : actions())
51+
for(auto&& a : actions(this))
4752
{
4853
const auto data = a->data().value<QPair<ConnectionType, QString>>();
4954
const bool isConnected = _mbMultiServer.isConnected(data.first, data.second);
@@ -54,7 +59,7 @@ MenuConnect::MenuConnect(MenuType type, ModbusMultiServer& server, QWidget *pare
5459

5560
connect(&_mbMultiServer, &ModbusMultiServer::disconnected, this, [&](const ConnectionDetails& cd)
5661
{
57-
for(auto&& a : actions())
62+
for(auto&& a : actions(this))
5863
{
5964
const auto data = a->data().value<QPair<ConnectionType, QString>>();
6065
if(_menuType == MenuType::DisconnectMenu)
@@ -85,7 +90,7 @@ void MenuConnect::changeEvent(QEvent* event)
8590
{
8691
if (event->type() == QEvent::LanguageChange)
8792
{
88-
for(auto&& a : actions())
93+
for(auto&& a : actions(this))
8994
{
9095
const auto data = a->data().value<QPair<ConnectionType, QString>>();
9196
switch(data.first)
@@ -149,16 +154,38 @@ void MenuConnect::updateConnectionDetails(const QList<ConnectionDetails>& conns)
149154
}
150155
}
151156

157+
///
158+
/// \brief MenuConnect::actions
159+
/// \param menu
160+
/// \return
161+
///
162+
QList<QAction*> MenuConnect::actions(const QMenu* menu) const
163+
{
164+
QList<QAction*> listActions;
165+
for(auto a: menu->actions())
166+
{
167+
if(auto* subMenu = a->menu()) {
168+
listActions.append(actions(subMenu));
169+
}
170+
else {
171+
listActions.append(a);
172+
}
173+
}
174+
175+
return listActions;
176+
}
177+
152178
///
153179
/// \brief MenuConnect::addAction
180+
/// \param menu
154181
/// \param text
155182
/// \param type
156183
/// \param port
157184
/// \param id
158185
///
159-
void MenuConnect::addAction(const QString& text, ConnectionType type, const QString& port, const QString& id)
186+
void MenuConnect::addAction(QMenu* menu, const QString& text, ConnectionType type, const QString& port, const QString& id)
160187
{
161-
auto action = QMenu::addAction(text);
188+
auto action = menu->addAction(text);
162189
connect(action, &QAction::triggered, this, [this, action, type, port]
163190
{
164191
if(_menuType == ConnectMenu)

omodsim/menuconnect.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ class MenuConnect : public QMenu
3131
void changeEvent(QEvent* event) override;
3232

3333
private:
34-
void addAction(const QString& text, ConnectionType type, const QString& port, const QString& id);
34+
QList<QAction*> actions(const QMenu* menu) const;
35+
void addAction(QMenu* menu, const QString& text, ConnectionType type, const QString& port, const QString& id);
3536

3637
private:
3738
MenuType _menuType;

0 commit comments

Comments
 (0)