@@ -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+ }
0 commit comments