Skip to content

Commit 66cc9e7

Browse files
committed
Made a general setting for AddressType for all dialogs and other windows
1 parent 1c0340b commit 66cc9e7

22 files changed

+323
-139
lines changed

src/core/core/core_global.cpp

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
*/
2323
#include "core_global.h"
2424

25+
#include <QComboBox>
26+
#include <QSpinBox>
27+
2528
namespace mb {
2629

2730
MBSETTINGS parseExtendedAttributesStr(const QString &str)
@@ -81,4 +84,87 @@ QVariantList availableFlowControl()
8184
return ls;
8285
}
8386

87+
Address getModbusAddress(QComboBox *cmb, QSpinBox *sp, AddressNotation notation)
88+
{
89+
mb::Address adr;
90+
switch (cmb->currentIndex())
91+
{
92+
case 0:
93+
adr.type = Modbus::Memory_0x;
94+
break;
95+
case 1:
96+
adr.type = Modbus::Memory_1x;
97+
break;
98+
case 2:
99+
adr.type = Modbus::Memory_3x;
100+
break;
101+
default:
102+
adr.type = Modbus::Memory_4x;
103+
break;
104+
}
105+
106+
switch (notation)
107+
{
108+
case mb::Address_IEC61131:
109+
adr.offset = static_cast<quint16>(sp->value());
110+
break;
111+
default:
112+
adr.offset = static_cast<quint16>(sp->value()-1);
113+
break;
114+
}
115+
return adr;
116+
}
117+
118+
void setModbusAddress(QComboBox *cmb, QSpinBox *sp, Address adr, AddressNotation notation)
119+
{
120+
switch (adr.type)
121+
{
122+
case Modbus::Memory_0x:
123+
cmb->setCurrentIndex(0);
124+
break;
125+
case Modbus::Memory_1x:
126+
cmb->setCurrentIndex(1);
127+
break;
128+
case Modbus::Memory_3x:
129+
cmb->setCurrentIndex(2);
130+
break;
131+
default:
132+
cmb->setCurrentIndex(3);
133+
break;
134+
}
135+
136+
switch (notation)
137+
{
138+
case mb::Address_IEC61131:
139+
sp->setValue(adr.offset);
140+
break;
141+
default:
142+
sp->setValue(adr.offset+1);
143+
break;
144+
}
145+
}
146+
147+
void fillModbusAddressUi(QComboBox *cmb, QSpinBox *sp, Address adr, AddressNotation notation)
148+
{
149+
cmb->clear();
150+
cmb->addItem(mb::toModbusMemoryTypeString(Modbus::Memory_0x, notation));
151+
cmb->addItem(mb::toModbusMemoryTypeString(Modbus::Memory_1x, notation));
152+
cmb->addItem(mb::toModbusMemoryTypeString(Modbus::Memory_3x, notation));
153+
cmb->addItem(mb::toModbusMemoryTypeString(Modbus::Memory_4x, notation));
154+
155+
switch (notation)
156+
{
157+
case mb::Address_IEC61131:
158+
sp->setMinimum(0);
159+
sp->setMaximum(USHRT_MAX);
160+
break;
161+
default:
162+
sp->setMinimum(1);
163+
sp->setMaximum(USHRT_MAX+1);
164+
break;
165+
}
166+
167+
setModbusAddress(cmb, sp, adr, notation);
168+
}
169+
84170
} // namespace mb

src/core/core/core_global.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
#ifndef CORE_GLOBAL_H
2424
#define CORE_GLOBAL_H
2525

26+
class QComboBox;
27+
class QSpinBox;
28+
2629
#include <mbcore.h>
2730

2831
namespace mb {
@@ -44,6 +47,15 @@ MB_EXPORT QVariantList availableStopBits();
4447
/// \details Return list of `FlowControl` values
4548
MB_EXPORT QVariantList availableFlowControl();
4649

50+
/// \details
51+
MB_EXPORT mb::Address getModbusAddress(QComboBox *cmb, QSpinBox *sp, mb::AddressNotation notation);
52+
53+
/// \details
54+
MB_EXPORT void setModbusAddress(QComboBox *cmb, QSpinBox *sp, mb::Address adr, mb::AddressNotation notation);
55+
56+
/// \details
57+
MB_EXPORT void fillModbusAddressUi(QComboBox *cmb, QSpinBox *sp, mb::Address address, mb::AddressNotation notation);
58+
4759
} // namespace mb
4860

4961
#endif // CORE_GLOBAL_H

src/core/gui/dialogs/core_dialogdataviewitem.cpp

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ mbCoreDialogDataViewItem::mbCoreDialogDataViewItem(QWidget *parent) :
6060
m_formatLast = static_cast<mb::Format>(-1);
6161

6262
memset(&m_ui, 0, sizeof(m_ui));
63+
64+
connect(mbCore::globalCore(), &mbCore::addressNotationChanged, this, &mbCoreDialogDataViewItem::setModbusAddresNotation);
6365
}
6466

6567
void mbCoreDialogDataViewItem::initializeBaseUi()
@@ -73,18 +75,9 @@ void mbCoreDialogDataViewItem::initializeBaseUi()
7375
cmb = m_ui.cmbDevice;
7476
connect(cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(deviceChanged(int)));
7577

76-
// Address type
77-
cmb = m_ui.cmbAdrType;
78-
cmb->addItem(mb::toModbusMemoryTypeString(Modbus::Memory_0x));
79-
cmb->addItem(mb::toModbusMemoryTypeString(Modbus::Memory_1x));
80-
cmb->addItem(mb::toModbusMemoryTypeString(Modbus::Memory_3x));
81-
cmb->addItem(mb::toModbusMemoryTypeString(Modbus::Memory_4x));
82-
cmb->setCurrentIndex(3);
83-
84-
// Offset
85-
sp = m_ui.spOffset;
86-
sp->setMinimum(1);
87-
sp->setMaximum(USHRT_MAX+1);
78+
// Address type + Offset
79+
m_ui.cmbAdrType->setMinimumWidth(55);
80+
setModbusAddresNotation(mbCore::globalCore()->addressNotation());
8881

8982
// Count
9083
sp = m_ui.spCount;
@@ -130,7 +123,6 @@ void mbCoreDialogDataViewItem::initializeBaseUi()
130123
ln->setText(nonDefaultByteArraySeparator());
131124
connect(m_ui.btnTogleDefaultByteArraySeparator, SIGNAL(clicked()), this, SLOT(togleDefaultByteArraySeparator()));
132125

133-
134126
// String Length Type
135127
cmb = m_ui.cmbStringLengthType;
136128
ls = mb::enumStringLengthTypeKeyList();
@@ -160,9 +152,7 @@ MBSETTINGS mbCoreDialogDataViewItem::cachedSettings() const
160152

161153
MBSETTINGS m = mbCoreDialogEdit::cachedSettings();
162154

163-
mb::Address adr;
164-
adr.type = mb::toModbusMemoryType(m_ui.cmbAdrType->currentText());
165-
adr.offset = static_cast<quint16>(m_ui.spOffset->value()-1);
155+
mb::Address adr = modbusAddress();
166156

167157
m[prefix+vs.address ] = mb::toInt(adr);
168158
m[prefix+vs.device ] = m_ui.cmbDevice->currentText();
@@ -193,9 +183,7 @@ void mbCoreDialogDataViewItem::setCachedSettings(const MBSETTINGS &m)
193183
it = m.find(prefix+vs.address);
194184
if (it != end)
195185
{
196-
mb::Address adr = mb::toAddress(it.value().toInt());
197-
m_ui.cmbAdrType->setCurrentText(mb::toModbusMemoryTypeString(adr.type));
198-
m_ui.spOffset->setValue(adr.offset+1);
186+
setModbusAddress(it.value());
199187
}
200188

201189
it = m.find(prefix+vs.device ); if (it != end) m_ui.cmbDevice->setCurrentText(it.value().toString());
@@ -259,9 +247,7 @@ void mbCoreDialogDataViewItem::fillForm(const MBSETTINGS &settings)
259247
it = settings.find(sItem.address);
260248
if (it != end)
261249
{
262-
mb::Address adr = mb::toAddress(it.value().toInt());
263-
m_ui.cmbAdrType->setCurrentText(mb::toModbusMemoryTypeString(adr.type));
264-
m_ui.spOffset->setValue(adr.offset+1);
250+
setModbusAddress(it.value());
265251
}
266252

267253
it = settings.find(sItem.format ); if (it != end) fillFormFormat (it.value());
@@ -464,9 +450,7 @@ void mbCoreDialogDataViewItem::fillData(MBSETTINGS &settings) const
464450
const Strings &s = Strings::instance();
465451
const mbCoreDataViewItem::Strings &sItem = mbCoreDataViewItem::Strings::instance();
466452

467-
mb::Address adr;
468-
adr.type = mb::toModbusMemoryType(m_ui.cmbAdrType->currentText());
469-
adr.offset = static_cast<quint16>(m_ui.spOffset->value()-1);
453+
mb::Address adr = this->modbusAddress();
470454
mb::Format format = mb::enumFormatValueByIndex(m_ui.cmbFormat->currentIndex());
471455
settings[sItem.device] = QVariant::fromValue<void*>(project->deviceCore(m_ui.cmbDevice->currentIndex()));
472456
settings[sItem.address] = mb::toInt(adr);
@@ -566,6 +550,26 @@ void mbCoreDialogDataViewItem::fillDataInner(MBSETTINGS &/*settings*/) const
566550
// base implementation do nothing
567551
}
568552

553+
mb::Address mbCoreDialogDataViewItem::modbusAddress() const
554+
{
555+
return mb::getModbusAddress(m_ui.cmbAdrType,
556+
m_ui.spOffset,
557+
mbCore::globalCore()->addressNotation());
558+
}
559+
560+
void mbCoreDialogDataViewItem::setModbusAddress(const QVariant &v)
561+
{
562+
mb::setModbusAddress(m_ui.cmbAdrType,
563+
m_ui.spOffset,
564+
mb::toAddress(v.toInt()),
565+
mbCore::globalCore()->addressNotation());
566+
}
567+
568+
void mbCoreDialogDataViewItem::setModbusAddresNotation(mb::AddressNotation notation)
569+
{
570+
mb::fillModbusAddressUi(m_ui.cmbAdrType, m_ui.spOffset, modbusAddress(), notation);
571+
}
572+
569573
void mbCoreDialogDataViewItem::deviceChanged(int i)
570574
{
571575
mbCoreProject *project = mbCore::globalCore()->projectCore();

src/core/gui/dialogs/core_dialogdataviewitem.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,12 @@ class MB_EXPORT mbCoreDialogDataViewItem : public mbCoreDialogEdit
8484
virtual void fillFormNewInner(const MBSETTINGS &settings);
8585
virtual void fillDataInner(MBSETTINGS &settings) const;
8686

87+
protected:
88+
mb::Address modbusAddress() const;
89+
void setModbusAddress(const QVariant &v);
90+
8791
protected Q_SLOTS:
92+
void setModbusAddresNotation(mb::AddressNotation notation);
8893
void deviceChanged(int i);
8994
void adrTypeChanged(int i);
9095
void formatChanged(int i);

src/core/gui/dialogs/settings/core_dialogsettings.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,11 @@ void mbCoreDialogSettings::fillForm(const MBSETTINGS &m)
9696
const mbCoreUi::Strings &sUi = mbCoreUi::Strings::instance();
9797

9898
m_view->setUseNameWithSettings(m.value(sUi.settings_useNameWithSettings).toBool());
99+
m_view->setAddressNotation(mb::toAddressNotation(mb::toAddressNotation(m.value(sCore.settings_addressNotation))));
99100

100101

101102
m_log->setLogFlags(static_cast<mb::LogFlag>(m.value(sCore.settings_logFlags).toInt()));
102103
m_log->setFormatDateTime(m.value(sCore.settings_formatDateTime).toString());
103-
m_dataView->setAddressNotation(mb::toAddressNotation(mb::toAddressNotation(m.value(sCore.settings_addressNotation))));
104104
m_dataView->setColumns(m.value(sCore.settings_columns).toStringList());
105105
}
106106

@@ -110,10 +110,10 @@ void mbCoreDialogSettings::fillData(MBSETTINGS &m)
110110
const mbCoreUi::Strings &sUi = mbCoreUi::Strings::instance();
111111

112112
m[sUi.settings_useNameWithSettings] = m_view->useNameWithSettings();
113+
m[sCore.settings_addressNotation] = m_view->addressNotation();
113114

114115
m[sCore.settings_logFlags ] = static_cast<int>(m_log->logFlags());
115116
m[sCore.settings_formatDateTime ] = m_log->formatDateTime();
116-
m[sCore.settings_addressNotation] = m_dataView->addressNotation();
117117
m[sCore.settings_columns ] = m_dataView->getColumns();
118118

119119
}

src/core/gui/dialogs/settings/core_widgetsettingsdataview.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@ mbCoreWidgetSettingsDataView::mbCoreWidgetSettingsDataView(QWidget *parent) :
1111
{
1212
ui->setupUi(this);
1313

14-
QComboBox *cmb;
15-
cmb = ui->cmbAddressNotation;
16-
cmb->addItem(mb::toFineString(mb::Address_Modbus));
17-
cmb->addItem(mb::toFineString(mb::Address_IEC61131));
18-
cmb->setCurrentIndex(0);
19-
2014
QStringList columns = mbCore::globalCore()->availableDataViewColumns();
2115
setColumns(columns);
2216
connect(ui->btnEditDataViewColumns, &QPushButton::clicked, this, &mbCoreWidgetSettingsDataView::slotEditColumns);
@@ -27,16 +21,6 @@ mbCoreWidgetSettingsDataView::~mbCoreWidgetSettingsDataView()
2721
delete ui;
2822
}
2923

30-
mb::AddressNotation mbCoreWidgetSettingsDataView::addressNotation() const
31-
{
32-
return static_cast<mb::AddressNotation>(ui->cmbAddressNotation->currentIndex()+1);
33-
}
34-
35-
void mbCoreWidgetSettingsDataView::setAddressNotation(mb::AddressNotation notation)
36-
{
37-
ui->cmbAddressNotation->setCurrentIndex(notation-1);
38-
}
39-
4024
QStringList mbCoreWidgetSettingsDataView::getColumns() const
4125
{
4226
QStringList res;

src/core/gui/dialogs/settings/core_widgetsettingsdataview.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ class mbCoreWidgetSettingsDataView : public QWidget
1818
~mbCoreWidgetSettingsDataView();
1919

2020
public: // properties
21-
mb::AddressNotation addressNotation() const;
22-
void setAddressNotation(mb::AddressNotation notation);
2321
QStringList getColumns() const;
2422
void setColumns(const QStringList &columns);
2523

src/core/gui/dialogs/settings/core_widgetsettingsdataview.ui

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,13 @@
1515
</property>
1616
<layout class="QFormLayout" name="formLayout">
1717
<item row="0" column="0">
18-
<widget class="QLabel" name="label">
19-
<property name="text">
20-
<string>Address notation:</string>
21-
</property>
22-
</widget>
23-
</item>
24-
<item row="0" column="1">
25-
<widget class="QComboBox" name="cmbAddressNotation"/>
26-
</item>
27-
<item row="1" column="0">
2818
<widget class="QLabel" name="label_2">
2919
<property name="text">
3020
<string>Columns</string>
3121
</property>
3222
</widget>
3323
</item>
34-
<item row="1" column="1">
24+
<item row="0" column="1">
3525
<widget class="QGroupBox" name="grDataViewColumns">
3626
<property name="title">
3727
<string/>

src/core/gui/dialogs/settings/core_widgetsettingsview.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ mbCoreWidgetSettingsView::mbCoreWidgetSettingsView(QWidget *parent) :
66
ui(new Ui::mbCoreWidgetSettingsView)
77
{
88
ui->setupUi(this);
9+
10+
QComboBox *cmb;
11+
cmb = ui->cmbAddressNotation;
12+
cmb->addItem(mb::toFineString(mb::Address_Modbus));
13+
cmb->addItem(mb::toFineString(mb::Address_IEC61131));
14+
cmb->setCurrentIndex(0);
915
}
1016

1117
mbCoreWidgetSettingsView::~mbCoreWidgetSettingsView()
@@ -22,3 +28,14 @@ void mbCoreWidgetSettingsView::setUseNameWithSettings(bool use)
2228
{
2329
ui->chbUseNameWithSettings->setChecked(use);
2430
}
31+
32+
mb::AddressNotation mbCoreWidgetSettingsView::addressNotation() const
33+
{
34+
return static_cast<mb::AddressNotation>(ui->cmbAddressNotation->currentIndex()+1);
35+
}
36+
37+
void mbCoreWidgetSettingsView::setAddressNotation(mb::AddressNotation notation)
38+
{
39+
ui->cmbAddressNotation->setCurrentIndex(notation-1);
40+
}
41+

src/core/gui/dialogs/settings/core_widgetsettingsview.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
#include <QWidget>
55

6+
#include <mbcore.h>
7+
68
namespace Ui {
79
class mbCoreWidgetSettingsView;
810
}
@@ -18,6 +20,8 @@ class mbCoreWidgetSettingsView : public QWidget
1820
public: // properties
1921
bool useNameWithSettings() const;
2022
void setUseNameWithSettings(bool use);
23+
mb::AddressNotation addressNotation() const;
24+
void setAddressNotation(mb::AddressNotation notation);
2125

2226
private:
2327
Ui::mbCoreWidgetSettingsView *ui;

0 commit comments

Comments
 (0)