@@ -24,7 +24,7 @@ DialogDisplayDefinition::DialogDisplayDefinition(DisplayDefinition dd, QWidget*
2424
2525 ui->lineEditPointAddress ->setInputMode (dd.HexAddress ? NumericLineEdit::HexMode : NumericLineEdit::Int32Mode);
2626 ui->lineEditPointAddress ->setInputRange (ModbusLimits::addressRange (dd.AddrSpace , dd.ZeroBasedAddress ));
27- ui->lineEditLength ->setInputRange (ModbusLimits::lengthRange ());
27+ ui->lineEditLength ->setInputRange (ModbusLimits::lengthRange (dd. PointAddress , dd. ZeroBasedAddress , dd. AddrSpace ));
2828 ui->lineEditSlaveAddress ->setInputRange (ModbusLimits::slaveRange ());
2929 ui->lineEditLogLimit ->setInputRange (4 , 1000 );
3030 ui->checkBoxAutoscrollLog ->setChecked (dd.AutoscrollLog );
@@ -72,10 +72,42 @@ void DialogDisplayDefinition::accept()
7272// / \brief DialogDisplayDefinition::on_comboBoxAddressBase_currentIndexChanged
7373// / \param index
7474// /
75+ void DialogDisplayDefinition::on_lineEditPointAddress_valueChanged (const QVariant&)
76+ {
77+ const auto addrSpace = _displayDefinition.AddrSpace ;
78+ const bool zeroBased = (ui->comboBoxAddressBase ->currentAddressBase () == AddressBase::Base0);
79+ const int address = ui->lineEditPointAddress ->value <int >();
80+ const auto lenRange = ModbusLimits::lengthRange (address, zeroBased, addrSpace);
81+
82+ ui->lineEditLength ->setInputRange (lenRange);
83+ if (ui->lineEditLength ->value <int >() > lenRange.to ()) {
84+ ui->lineEditLength ->setValue (lenRange.to ());
85+ ui->lineEditLength ->update ();
86+ }
87+ }
88+
89+ // /
90+ // / \brief DialogDisplayDefinition::on_lineEditLength_valueChanged
91+ // /
92+ void DialogDisplayDefinition::on_lineEditLength_valueChanged (const QVariant&)
93+ {
94+ }
95+
96+ // /
97+ // / \brief DialogDisplayDefinition::on_comboBoxAddressBase_addressBaseChanged
98+ // / \param base
99+ // /
75100void DialogDisplayDefinition::on_comboBoxAddressBase_addressBaseChanged (AddressBase base)
76101{
102+ const auto addrSpace = _displayDefinition.AddrSpace ;
103+ const bool zeroBased = (base == AddressBase::Base0);
77104 const auto addr = ui->lineEditPointAddress ->value <int >();
78105
79- ui->lineEditPointAddress ->setInputRange (ModbusLimits::addressRange (_displayDefinition. AddrSpace , base == AddressBase::Base0 ));
106+ ui->lineEditPointAddress ->setInputRange (ModbusLimits::addressRange (addrSpace, zeroBased ));
80107 ui->lineEditPointAddress ->setValue (base == AddressBase::Base1 ? qMax (1 , addr + 1 ) : qMax (0 , addr - 1 ));
108+ const int newAddr = ui->lineEditPointAddress ->value <int >();
109+ const auto lenRange = ModbusLimits::lengthRange (newAddr, zeroBased, addrSpace);
110+ ui->lineEditLength ->setInputRange (lenRange);
111+ if (ui->lineEditLength ->value <int >() > lenRange.to ())
112+ ui->lineEditLength ->setValue (lenRange.to ());
81113}
0 commit comments