Skip to content

Commit 4ffe101

Browse files
committed
fixed #38
1 parent d161257 commit 4ffe101

3 files changed

Lines changed: 64 additions & 1 deletion

File tree

omodsim/mainwindow.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,6 +1510,7 @@ void MainWindow::loadSettings()
15101510
setLanguage(_lang);
15111511

15121512
m >> firstMdiChild();
1513+
m >> qobject_cast<MenuConnect*>(ui->actionConnect->menu());
15131514
}
15141515

15151516
///
@@ -1549,4 +1550,5 @@ void MainWindow::saveSettings()
15491550
m.setValue("Language", _lang);
15501551

15511552
m << firstMdiChild();
1553+
m << qobject_cast<MenuConnect*>(ui->actionConnect->menu());
15521554
}

omodsim/menuconnect.cpp

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ MenuConnect::MenuConnect(MenuType type, ModbusMultiServer& server, QWidget *pare
1313
,_menuType(type)
1414
,_mbMultiServer(server)
1515
{
16-
if(type == MenuType::ConnectMenu)
16+
if(_menuType == MenuType::ConnectMenu)
1717
{
1818
addAction(tr("Modbus/TCP Srv"), ConnectionType::Tcp, QString());
1919
for(auto&& port: getAvailableSerialPorts())
@@ -179,3 +179,61 @@ void MenuConnect::addAction(const QString& text, ConnectionType type, const QStr
179179
const auto data = QPair<ConnectionType, QString>(type, port);
180180
action->setData(QVariant::fromValue(data));
181181
}
182+
183+
///
184+
/// \brief operator <<
185+
/// \param out
186+
/// \param menu
187+
/// \return
188+
///
189+
QSettings& operator <<(QSettings& out, const MenuConnect* menu)
190+
{
191+
if(!menu)
192+
return out;
193+
194+
QMapIterator it(menu->_connectionDetailsMap);
195+
while(it.hasNext())
196+
{
197+
const auto item = it.next();
198+
const QAction* action = it.key();
199+
const ConnectionDetails& cd = it.value();
200+
201+
QByteArray a;
202+
QDataStream ds(&a, QIODeviceBase::WriteOnly);
203+
ds << cd;
204+
out.setValue("MenuConnect/" + action->text(), a);
205+
}
206+
207+
return out;
208+
}
209+
210+
///
211+
/// \brief operator >>
212+
/// \param in
213+
/// \param menu
214+
/// \return
215+
///
216+
QSettings& operator >>(QSettings& in, MenuConnect* menu)
217+
{
218+
if(!menu)
219+
return in;
220+
221+
QMapIterator it(menu->_connectionDetailsMap);
222+
while(it.hasNext())
223+
{
224+
auto&& item = it.next();
225+
QAction* action = it.key();
226+
227+
const QByteArray a = in.value("MenuConnect/" + action->text()).toByteArray();
228+
if(!a.isEmpty())
229+
{
230+
QDataStream ds(a);
231+
ConnectionDetails cd;
232+
ds >> cd;
233+
234+
menu->_connectionDetailsMap[action] = cd;
235+
}
236+
}
237+
238+
return in;
239+
}

omodsim/menuconnect.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ class MenuConnect : public QMenu
2020
bool canConnect(const ConnectionDetails& cd);
2121
void updateConnectionDetails(const QList<ConnectionDetails>& conns);
2222

23+
friend QSettings& operator <<(QSettings& out, const MenuConnect* menu);
24+
friend QSettings& operator >>(QSettings& in, MenuConnect* menu);
25+
2326
signals:
2427
void connectAction(ConnectionDetails& cd);
2528
void disconnectAction(ConnectionType type, const QString& port);

0 commit comments

Comments
 (0)