Skip to content

Commit 95ffb5e

Browse files
committed
Fix save/restore geometry of dialog windows
1 parent 03e4565 commit 95ffb5e

31 files changed

+382
-279
lines changed

src/client/gui/dialogs/client_dialogdataviewitem.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ MBSETTINGS mbClientDialogDataViewItem::cachedSettings() const
8484
{
8585
const mbClientDataViewItem::Strings &sItem = mbClientDataViewItem::Strings::instance();
8686
MBSETTINGS settings = mbCoreDialogDataViewItem::cachedSettings();
87-
const QString &prefix = Strings().settings_prefix;
87+
const QString &prefix = Strings().cachePrefix;
8888
settings[prefix+sItem.period] = ui->spPeriod->value();
8989
return settings;
9090
}
@@ -96,15 +96,15 @@ void mbClientDialogDataViewItem::setCachedSettings(const MBSETTINGS &settings)
9696
MBSETTINGS::const_iterator it;
9797
MBSETTINGS::const_iterator end = settings.end();
9898
const mbClientDataViewItem::Strings &sItem = mbClientDataViewItem::Strings::instance();
99-
const QString &prefix = Strings().settings_prefix;
99+
const QString &prefix = Strings().cachePrefix;
100100

101101
it = settings.find(prefix+sItem.period); if (it != end) ui->spPeriod->setValue(it.value().toInt());
102102
}
103103

104104
void mbClientDialogDataViewItem::fillFormInner(const MBSETTINGS &settings)
105105
{
106106
const mbClientDataViewItem::Strings &sItem = mbClientDataViewItem::Strings::instance();
107-
const QString &prefix = Strings().settings_prefix;
107+
const QString &prefix = Strings().cachePrefix;
108108
int period = settings.value(sItem.period).toInt();
109109
ui->spPeriod->setValue(period);
110110
}

src/client/gui/dialogs/client_dialogdevice.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ MBSETTINGS mbClientDialogDevice::cachedSettings() const
182182
const mbClientPort::Strings &ms = mbClientPort::Strings();
183183
const Modbus::Strings ss = Modbus::Strings::instance();
184184
const Strings &ds = Strings();
185-
const QString &prefix = Strings().settings_prefix;
185+
const QString &prefix = Strings().cachePrefix;
186186

187187
MBSETTINGS m = mbCoreDialogDevice::cachedSettings();
188188

@@ -210,7 +210,7 @@ void mbClientDialogDevice::setCachedSettings(const MBSETTINGS &m)
210210
const mbClientPort::Strings &ms = mbClientPort::Strings();
211211
const Modbus::Strings ss = Modbus::Strings::instance();
212212
const Strings &ds = Strings();
213-
const QString &prefix = Strings().settings_prefix;
213+
const QString &prefix = Strings().cachePrefix;
214214

215215
MBSETTINGS::const_iterator it;
216216
MBSETTINGS::const_iterator end = m.end();

src/client/gui/dialogs/client_dialogport.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131

3232
mbClientDialogPort::Strings::Strings() :
33-
settings_prefix(QStringLiteral("Client.Ui.Dialogs.Port."))
33+
cachePrefix(QStringLiteral("Client.Ui.Dialogs.Port."))
3434
{
3535
}
3636

@@ -82,7 +82,7 @@ mbClientDialogPort::~mbClientDialogPort()
8282
MBSETTINGS mbClientDialogPort::cachedSettings() const
8383
{
8484
Modbus::Strings ss = Modbus::Strings::instance();
85-
const QString &prefix = Strings().settings_prefix;
85+
const QString &prefix = Strings().cachePrefix;
8686
MBSETTINGS m = mbCoreDialogPort::cachedSettings();
8787
m[prefix+ss.host] = ui->lnHost->text();
8888
return m;
@@ -93,7 +93,7 @@ void mbClientDialogPort::setCachedSettings(const MBSETTINGS &m)
9393
mbCoreDialogPort::setCachedSettings(m);
9494

9595
Modbus::Strings ss = Modbus::Strings::instance();
96-
const QString &prefix = Strings().settings_prefix;
96+
const QString &prefix = Strings().cachePrefix;
9797
MBSETTINGS::const_iterator it;
9898
MBSETTINGS::const_iterator end = m.end();
9999
//bool ok;

src/client/gui/dialogs/client_dialogport.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class mbClientDialogPort : public mbCoreDialogPort
3535

3636
struct Strings : public mbCoreDialogPort::Strings
3737
{
38-
const QString settings_prefix;
38+
const QString cachePrefix;
3939
Strings();
4040
static const Strings &instance();
4141
};

src/client/gui/scanner/client_scannerui.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include "client_scannermodel.h"
1414
#include "client_dialogscannerrequest.h"
1515

16-
mbClientScannerUi::Strings::Strings() :
16+
mbClientScannerUi::Strings::Strings() : mbCoreDialogBase::Strings(),
1717
prefix (QStringLiteral("Ui.Scanner.")),
1818
type (prefix+Modbus::Strings::instance().type),
1919
timeout (prefix+Modbus::Strings::instance().timeout),
@@ -28,7 +28,6 @@ mbClientScannerUi::Strings::Strings() :
2828
dataBitsList (QStringLiteral("dataBitsList")),
2929
parityList (QStringLiteral("parityList")),
3030
stopBitsList (QStringLiteral("stopBitsList")),
31-
wGeometry (QStringLiteral("geometry")),
3231
wSplitterState(QStringLiteral("splitterState"))
3332
{
3433

@@ -41,7 +40,7 @@ const mbClientScannerUi::Strings &mbClientScannerUi::Strings::instance()
4140
}
4241

4342
mbClientScannerUi::mbClientScannerUi(QWidget *parent) :
44-
QDialog(parent),
43+
mbCoreDialogBase(Strings::instance().prefix, parent),
4544
ui(new Ui::mbClientScannerUi)
4645
{
4746
ui->setupUi(this);
@@ -163,7 +162,9 @@ mbClientScannerUi::~mbClientScannerUi()
163162

164163
MBSETTINGS mbClientScannerUi::cachedSettings() const
165164
{
166-
MBSETTINGS m = m_dialogRequest->cachedSettings();
165+
MBSETTINGS m = mbCoreDialogBase::cachedSettings();
166+
mb::unite(m, m_dialogRequest->cachedSettings());
167+
167168
const Strings &s = Strings::instance();
168169

169170
m[s.type ] = ui->cmbType ->currentText();
@@ -179,20 +180,20 @@ MBSETTINGS mbClientScannerUi::cachedSettings() const
179180
m[s.dataBitsList ] = getValues(ui->lsDataBits);
180181
m[s.parityList ] = getValues(ui->lsParity );
181182
m[s.stopBitsList ] = getValues(ui->lsStopBits);
182-
m[s.wGeometry ] = this->saveGeometry();
183183
m[s.wSplitterState] = ui->splitter->saveState();
184184

185185
return m;
186186
}
187187

188188
void mbClientScannerUi::setCachedSettings(const MBSETTINGS &m)
189189
{
190+
mbCoreDialogBase::setCachedSettings(m);
190191
m_dialogRequest->setCachedSettings(m);
192+
191193
const Strings &s = Strings::instance();
192194

193195
MBSETTINGS::const_iterator it;
194196
MBSETTINGS::const_iterator end = m.end();
195-
//bool ok;
196197

197198
it = m.find(s.type ); if (it != end) ui->cmbType ->setCurrentText(it.value().toString());
198199
it = m.find(s.timeout ); if (it != end) ui->spTimeout ->setValue (it.value().toInt() );
@@ -207,7 +208,6 @@ void mbClientScannerUi::setCachedSettings(const MBSETTINGS &m)
207208
it = m.find(s.dataBitsList ); if (it != end) setValues(ui->lsDataBits, it.value().toList());
208209
it = m.find(s.parityList ); if (it != end) setValues(ui->lsParity , it.value().toList());
209210
it = m.find(s.stopBitsList ); if (it != end) setValues(ui->lsStopBits, it.value().toList());
210-
it = m.find(s.wGeometry ); if (it != end) this ->restoreGeometry(it.value().toByteArray());
211211
it = m.find(s.wSplitterState); if (it != end) ui->splitter ->restoreState (it.value().toByteArray());
212212
}
213213

src/client/gui/scanner/client_scannerui.h

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
#ifndef CLIENT_SCANNERUI_H
22
#define CLIENT_SCANNERUI_H
33

4-
#include <QDialog>
5-
6-
#include <mbcore.h>
4+
#include <gui/dialogs/core_dialogbase.h>
75

86
#include "client_scanner.h"
97

@@ -16,12 +14,12 @@ class QListWidget;
1614
class mbClientScannerModel;
1715
class mbClientDialogScannerRequest;
1816

19-
class mbClientScannerUi : public QDialog
17+
class mbClientScannerUi : public mbCoreDialogBase
2018
{
2119
Q_OBJECT
2220

2321
public:
24-
struct Strings
22+
struct Strings : public mbCoreDialogBase::Strings
2523
{
2624
const QString prefix ;
2725
const QString type ;
@@ -37,7 +35,6 @@ class mbClientScannerUi : public QDialog
3735
const QString dataBitsList ;
3836
const QString parityList ;
3937
const QString stopBitsList ;
40-
const QString wGeometry ;
4138
const QString wSplitterState;
4239

4340
Strings();
@@ -49,8 +46,8 @@ class mbClientScannerUi : public QDialog
4946
~mbClientScannerUi();
5047

5148
public:
52-
MBSETTINGS cachedSettings() const;
53-
void setCachedSettings(const MBSETTINGS &settings);
49+
MBSETTINGS cachedSettings() const override;
50+
void setCachedSettings(const MBSETTINGS &settings) override;
5451

5552
private Q_SLOTS:
5653
void slotEditRequest ();

src/client/gui/sendmessage/client_sendmessageui.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ mbClientSendMessageUi::Strings::Strings() :
4444
writeData (prefix+QStringLiteral("writeData")),
4545
period (prefix+QStringLiteral("period")),
4646
writeMaskAnd (prefix+QStringLiteral("writeMaskAnd")),
47-
writeMaskOr (prefix+QStringLiteral("writeMaskOr")),
48-
wGeometry (prefix+QStringLiteral("geometry"))
47+
writeMaskOr (prefix+QStringLiteral("writeMaskOr"))
4948
{
5049
}
5150

@@ -56,7 +55,7 @@ const mbClientSendMessageUi::Strings &mbClientSendMessageUi::Strings::instance()
5655
}
5756

5857
mbClientSendMessageUi::mbClientSendMessageUi(QWidget *parent) :
59-
QDialog(parent),
58+
mbCoreDialogBase(Strings::instance().prefix, parent),
6059
ui(new Ui::mbClientSendMessageUi)
6160
{
6261
ui->setupUi(this);
@@ -180,9 +179,9 @@ mbClientSendMessageUi::~mbClientSendMessageUi()
180179

181180
MBSETTINGS mbClientSendMessageUi::cachedSettings() const
182181
{
183-
MBSETTINGS m;
184182
const Strings &s = Strings::instance();
185183

184+
MBSETTINGS m = mbCoreDialogBase::cachedSettings();
186185
m[s.function ] = getCurrentFuncNum();
187186
//m[s.readAdrType ] = ui->cmbReadAdrType ->currentText();
188187
m[s.readAddress ] = ui->spReadAddress ->value ();
@@ -203,6 +202,8 @@ MBSETTINGS mbClientSendMessageUi::cachedSettings() const
203202

204203
void mbClientSendMessageUi::setCachedSettings(const MBSETTINGS &m)
205204
{
205+
mbCoreDialogBase::setCachedSettings(m);
206+
206207
const Strings &s = Strings::instance();
207208

208209
MBSETTINGS::const_iterator it;

src/client/gui/sendmessage/client_sendmessageui.h

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#ifndef CLIENT_DIALOGSENDMESSAGE_H
2424
#define CLIENT_DIALOGSENDMESSAGE_H
2525

26-
#include <QDialog>
26+
#include <gui/dialogs/core_dialogbase.h>
2727

2828
class mbCoreProject;
2929
class mbClientProject;
@@ -36,12 +36,12 @@ namespace Ui {
3636
class mbClientSendMessageUi;
3737
}
3838

39-
class mbClientSendMessageUi : public QDialog
39+
class mbClientSendMessageUi : public mbCoreDialogBase
4040
{
4141
Q_OBJECT
4242

4343
public:
44-
struct Strings
44+
struct Strings : public mbCoreDialogBase::Strings
4545
{
4646
const QString prefix ;
4747
const QString function ;
@@ -57,7 +57,6 @@ class mbClientSendMessageUi : public QDialog
5757
const QString period ;
5858
const QString writeMaskAnd ;
5959
const QString writeMaskOr ;
60-
const QString wGeometry ;
6160
Strings();
6261
static const Strings &instance();
6362
};
@@ -67,8 +66,8 @@ class mbClientSendMessageUi : public QDialog
6766
~mbClientSendMessageUi();
6867

6968
public:
70-
MBSETTINGS cachedSettings() const;
71-
void setCachedSettings(const MBSETTINGS &settings);
69+
MBSETTINGS cachedSettings() const override;
70+
void setCachedSettings(const MBSETTINGS &settings) override;
7271

7372
private Q_SLOTS:
7473
void setProject(mbCoreProject *p);
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include "core_dialogbase.h"
2+
3+
mbCoreDialogBase::Strings::Strings() :
4+
wGeometry(QStringLiteral("geometry"))
5+
{
6+
}
7+
8+
const mbCoreDialogBase::Strings &mbCoreDialogBase::Strings::instance()
9+
{
10+
static const Strings s;
11+
return s;
12+
}
13+
14+
15+
mbCoreDialogBase::mbCoreDialogBase(const QString &cachePrefix, QWidget *parent) : QDialog(parent),
16+
m_cachePrefix(cachePrefix)
17+
{
18+
}
19+
20+
MBSETTINGS mbCoreDialogBase::cachedSettings() const
21+
{
22+
const Strings &ds = Strings::instance();
23+
const QString &prefix = m_cachePrefix;
24+
25+
MBSETTINGS m;
26+
QRect r = this->geometry();
27+
if (!r.topLeft().isNull())
28+
m[prefix+ds.wGeometry] = this->saveGeometry();
29+
return m;
30+
}
31+
32+
void mbCoreDialogBase::setCachedSettings(const MBSETTINGS &m)
33+
{
34+
const Strings &ds = Strings::instance();
35+
const QString &prefix = m_cachePrefix;
36+
37+
MBSETTINGS::const_iterator it;
38+
MBSETTINGS::const_iterator end = m.end();
39+
40+
it = m.find(prefix+ds.wGeometry); if (it != end) this->restoreGeometry(it.value().toByteArray());
41+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
Modbus Tools
3+
4+
Created: 2023
5+
Author: Serhii Marchuk, https://github.com/serhmarch
6+
7+
Copyright (C) 2023 Serhii Marchuk
8+
9+
This program is free software: you can redistribute it and/or modify
10+
it under the terms of the GNU General Public License as published by
11+
the Free Software Foundation, either version 3 of the License, or
12+
(at your option) any later version.
13+
14+
This program is distributed in the hope that it will be useful,
15+
but WITHOUT ANY WARRANTY; without even the implied warranty of
16+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17+
GNU General Public License for more details.
18+
19+
You should have received a copy of the GNU General Public License
20+
along with this program. If not, see <http://www.gnu.org/licenses/>.
21+
22+
*/
23+
#ifndef CORE_DIALOGBASE_H
24+
#define CORE_DIALOGBASE_H
25+
26+
#include <QDialog>
27+
28+
#include <mbcore.h>
29+
30+
class MB_EXPORT mbCoreDialogBase : public QDialog
31+
{
32+
public:
33+
struct MB_EXPORT Strings
34+
{
35+
const QString wGeometry;
36+
Strings();
37+
static const Strings &instance();
38+
};
39+
40+
public:
41+
mbCoreDialogBase(const QString &cachePrefix, QWidget *parent = nullptr);
42+
43+
public:
44+
virtual MBSETTINGS cachedSettings() const;
45+
virtual void setCachedSettings(const MBSETTINGS &);
46+
47+
protected:
48+
QString m_cachePrefix;
49+
};
50+
51+
#endif // CORE_DIALOGBASE_H

0 commit comments

Comments
 (0)