@@ -54,7 +54,7 @@ transmitwindow::transmitwindow(int universe, QWidget * parent)
5454 m_slotCount = MAX_DMX_ADDRESS;
5555 ui->sbSlotCount ->setValue (m_slotCount);
5656 ui->sbSlotCount ->setWrapping (true );
57-
57+
5858 ui->sbFadeRangeEnd ->setMinimum (MIN_DMX_ADDRESS);
5959 ui->sbFadeRangeEnd ->setMaximum (m_slotCount);
6060 ui->sbFadeRangeEnd ->setValue (m_slotCount);
@@ -162,7 +162,9 @@ transmitwindow::transmitwindow(int universe, QWidget * parent)
162162 ui->slChannelCheck ->setMinimum (0 );
163163 ui->slChannelCheck ->setMaximum (MAX_SACN_LEVEL);
164164 ui->slChannelCheck ->setValue (MAX_SACN_LEVEL);
165+
165166 ui->lcdNumber ->display (1 );
167+ connect (ui->sbOffset , &QSpinBox::valueChanged, ui->lcdNumber , &EditableLCDNumber::setOffset);
166168
167169 m_blinkTimer = new QTimer (this );
168170 m_blinkTimer->setInterval (BLINK_TIME);
@@ -532,40 +534,12 @@ void transmitwindow::on_cbPriorityMode_currentIndexChanged(int index)
532534
533535void transmitwindow::on_btnCcNext_pressed ()
534536{
535- int value = ui->lcdNumber ->value ();
536-
537- if (++value > m_slotCount) value = MIN_DMX_ADDRESS;
538-
539- ui->lcdNumber ->display (value);
540-
541- if (m_sender)
542- {
543- // Update levels.
544- m_sender->setLevelRange (MIN_DMX_ADDRESS - 1 , m_slotCount - 1 , 0 );
545- m_sender->setLevel (value - 1 , ui->slChannelCheck ->value ());
546-
547- // Update priorities if requested.
548- updateChanCheckPap (value - 1 );
549- }
537+ ui->lcdNumber ->increment ();
550538}
551539
552540void transmitwindow::on_btnCcPrev_pressed ()
553541{
554- int value = ui->lcdNumber ->value ();
555-
556- if (--value < MIN_DMX_ADDRESS) value = m_slotCount;
557-
558- ui->lcdNumber ->display (value);
559-
560- if (m_sender)
561- {
562- // Update levels.
563- m_sender->setLevelRange (MIN_DMX_ADDRESS - 1 , m_slotCount - 1 , 0 );
564- m_sender->setLevel (value - 1 , ui->slChannelCheck ->value ());
565-
566- // Update priorities if requested.
567- updateChanCheckPap (value - 1 );
568- }
542+ ui->lcdNumber ->decrement ();
569543}
570544
571545void transmitwindow::on_cbCcPap_toggled (bool checked)
@@ -577,7 +551,7 @@ void transmitwindow::on_cbCcPap_toggled(bool checked)
577551
578552 if (checked)
579553 {
580- updateChanCheckPap (ui->lcdNumber ->value () - 1 );
554+ updateChanCheckPap (ui->lcdNumber ->value () - 1 , ui-> sbGrouping -> value () );
581555 }
582556 else
583557 {
@@ -590,11 +564,17 @@ void transmitwindow::on_lcdNumber_valueChanged(int value)
590564 if (m_sender)
591565 {
592566 // Update levels.
567+ const auto grouping = ui->sbGrouping ->value ();
568+ const uint16_t maxAddress = value - 1 + grouping;
569+
593570 m_sender->setLevelRange (0 , m_slotCount - 1 , 0 );
594- m_sender->setLevel (value - 1 , ui->slChannelCheck ->value ());
571+ for (auto channel = value - 1 ; channel < std::min (MAX_DMX_ADDRESS, maxAddress); channel++)
572+ {
573+ m_sender->setLevel (channel, ui->slChannelCheck ->value ());
574+ }
595575
596576 // Update priorities if requested.
597- updateChanCheckPap (value - 1 );
577+ updateChanCheckPap (value - 1 , grouping );
598578 }
599579}
600580
@@ -672,7 +652,7 @@ void transmitwindow::on_tabWidget_currentChanged(int index)
672652 {
673653 auto address = ui->lcdNumber ->value () - 1 ;
674654 m_sender->setLevel (address, ui->slChannelCheck ->value ());
675- updateChanCheckPap (address);
655+ updateChanCheckPap (address, ui-> sbGrouping -> value () );
676656
677657 ui->lcdNumber ->setFocus ();
678658 break ;
@@ -1008,7 +988,7 @@ void transmitwindow::on_sbMaxFPS_editingFinished()
1008988 if (ui->sbMaxFPS ->value () < ui->sbMinFPS ->value ()) ui->sbMaxFPS ->setValue (ui->sbMinFPS ->value ());
1009989}
1010990
1011- void transmitwindow::updateChanCheckPap (int address)
991+ void transmitwindow::updateChanCheckPap (int address, int length )
1012992{
1013993 Q_ASSERT (address < DMX_SLOT_MAX);
1014994 if (address >= m_slotCount)
@@ -1023,7 +1003,10 @@ void transmitwindow::updateChanCheckPap(int address)
10231003 }
10241004
10251005 std::array<quint8, MAX_DMX_ADDRESS> ccPap{0 };
1026- ccPap[address] = m_perAddressPriorities[address];
1006+ for (int i = address; i < std::min (address+length, DMX_SLOT_MAX); i++)
1007+ {
1008+ ccPap[i] = m_perAddressPriorities[i];
1009+ }
10271010 m_sender->setPerChannelPriorities (ccPap.data ());
10281011}
10291012
0 commit comments