@@ -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
6567void 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+
569573void mbCoreDialogDataViewItem::deviceChanged (int i)
570574{
571575 mbCoreProject *project = mbCore::globalCore ()->projectCore ();
0 commit comments