diff --git a/src/commandline.cpp b/src/commandline.cpp index a235f30..71ce7bd 100644 --- a/src/commandline.cpp +++ b/src/commandline.cpp @@ -466,34 +466,14 @@ void EditableLCDNumber::keyPressEvent(QKeyEvent * event) if (event->keyCombination() == Preferences::Instance().getKeyShortcut(KeyShortcutTarget::SHORTCUT_CHANNELCHECK_NEXT)) { - if (intValue() < MAX_DMX_ADDRESS) - { - buf = intValue() + 1; - display(buf); - emit valueChanged(buf); - } - else - { - display(1); - emit valueChanged(1); - } + increment(); return; } if (event->keyCombination() == Preferences::Instance().getKeyShortcut(KeyShortcutTarget::SHORTCUT_CHANNELCHECK_PREV)) { - if (intValue() - 1 > 0) - { - buf = intValue() - 1; - display(buf); - emit valueChanged(buf); - } - else - { - display(MAX_DMX_ADDRESS); - emit valueChanged(MAX_DMX_ADDRESS); - } + decrement(); return; } @@ -530,3 +510,53 @@ void EditableLCDNumber::keyPressEvent(QKeyEvent * event) default: break; } } + +void EditableLCDNumber::focusInEvent(QFocusEvent* event) +{ + setStyleSheet("background-color:rgb(0, 0, 0);\ncolor: rgb(255, 85, 0);"); +} + +void EditableLCDNumber::focusOutEvent(QFocusEvent* event) +{ + setStyleSheet("background-color:rgb(0, 0, 0);\ncolor: rgb(24, 24, 24);"); +} + +void EditableLCDNumber::increment() +{ + auto value = intValue(); + if (value + m_offset <= MAX_DMX_ADDRESS) + { + value += m_offset; + display(value); + emit valueChanged(value); + } + else + { + display(1); + emit valueChanged(1); + } +} + +void EditableLCDNumber::decrement() +{ + auto value = intValue(); + if (value - m_offset > 0) + { + value -= m_offset; + display(value); + emit valueChanged(value); + } + else + { + display(MAX_DMX_ADDRESS); + emit valueChanged(MAX_DMX_ADDRESS); + } +} + +void EditableLCDNumber::setOffset(int offset) +{ + if (offset > 1) + { + m_offset = offset; + } +} diff --git a/src/commandline.h b/src/commandline.h index 0279397..8849578 100644 --- a/src/commandline.h +++ b/src/commandline.h @@ -140,9 +140,18 @@ class EditableLCDNumber : public QLCDNumber void valueChanged(int); void toggleOff(); -protected: +public slots: + void increment(); + void decrement(); + void setOffset(int offset); +protected: virtual void keyPressEvent(QKeyEvent * event); + virtual void focusInEvent(QFocusEvent* event); + virtual void focusOutEvent(QFocusEvent* event); + +private: + int m_offset = 1; }; #endif // COMMANDLINE_H diff --git a/src/ui/transmitwindow.cpp b/src/ui/transmitwindow.cpp index 60df2c8..aa94a0c 100644 --- a/src/ui/transmitwindow.cpp +++ b/src/ui/transmitwindow.cpp @@ -54,7 +54,7 @@ transmitwindow::transmitwindow(int universe, QWidget * parent) m_slotCount = MAX_DMX_ADDRESS; ui->sbSlotCount->setValue(m_slotCount); ui->sbSlotCount->setWrapping(true); - + ui->sbFadeRangeEnd->setMinimum(MIN_DMX_ADDRESS); ui->sbFadeRangeEnd->setMaximum(m_slotCount); ui->sbFadeRangeEnd->setValue(m_slotCount); @@ -162,7 +162,9 @@ transmitwindow::transmitwindow(int universe, QWidget * parent) ui->slChannelCheck->setMinimum(0); ui->slChannelCheck->setMaximum(MAX_SACN_LEVEL); ui->slChannelCheck->setValue(MAX_SACN_LEVEL); + ui->lcdNumber->display(1); + connect(ui->sbOffset, &QSpinBox::valueChanged, ui->lcdNumber, &EditableLCDNumber::setOffset); m_blinkTimer = new QTimer(this); m_blinkTimer->setInterval(BLINK_TIME); @@ -532,40 +534,12 @@ void transmitwindow::on_cbPriorityMode_currentIndexChanged(int index) void transmitwindow::on_btnCcNext_pressed() { - int value = ui->lcdNumber->value(); - - if (++value > m_slotCount) value = MIN_DMX_ADDRESS; - - ui->lcdNumber->display(value); - - if (m_sender) - { - // Update levels. - m_sender->setLevelRange(MIN_DMX_ADDRESS - 1, m_slotCount - 1, 0); - m_sender->setLevel(value - 1, ui->slChannelCheck->value()); - - // Update priorities if requested. - updateChanCheckPap(value - 1); - } + ui->lcdNumber->increment(); } void transmitwindow::on_btnCcPrev_pressed() { - int value = ui->lcdNumber->value(); - - if (--value < MIN_DMX_ADDRESS) value = m_slotCount; - - ui->lcdNumber->display(value); - - if (m_sender) - { - // Update levels. - m_sender->setLevelRange(MIN_DMX_ADDRESS - 1, m_slotCount - 1, 0); - m_sender->setLevel(value - 1, ui->slChannelCheck->value()); - - // Update priorities if requested. - updateChanCheckPap(value - 1); - } + ui->lcdNumber->decrement(); } void transmitwindow::on_cbCcPap_toggled(bool checked) @@ -577,7 +551,7 @@ void transmitwindow::on_cbCcPap_toggled(bool checked) if (checked) { - updateChanCheckPap(ui->lcdNumber->value() - 1); + updateChanCheckPap(ui->lcdNumber->value() - 1, ui->sbGrouping->value()); } else { @@ -590,11 +564,17 @@ void transmitwindow::on_lcdNumber_valueChanged(int value) if (m_sender) { // Update levels. + const auto grouping = ui->sbGrouping->value(); + const uint16_t maxAddress = value - 1 + grouping; + m_sender->setLevelRange(0, m_slotCount - 1, 0); - m_sender->setLevel(value - 1, ui->slChannelCheck->value()); + for (auto channel = value - 1; channel < std::min(MAX_DMX_ADDRESS, maxAddress); channel++) + { + m_sender->setLevel(channel, ui->slChannelCheck->value()); + } // Update priorities if requested. - updateChanCheckPap(value - 1); + updateChanCheckPap(value - 1, grouping); } } @@ -672,7 +652,7 @@ void transmitwindow::on_tabWidget_currentChanged(int index) { auto address = ui->lcdNumber->value() - 1; m_sender->setLevel(address, ui->slChannelCheck->value()); - updateChanCheckPap(address); + updateChanCheckPap(address, ui->sbGrouping->value()); ui->lcdNumber->setFocus(); break; @@ -1008,7 +988,7 @@ void transmitwindow::on_sbMaxFPS_editingFinished() if (ui->sbMaxFPS->value() < ui->sbMinFPS->value()) ui->sbMaxFPS->setValue(ui->sbMinFPS->value()); } -void transmitwindow::updateChanCheckPap(int address) +void transmitwindow::updateChanCheckPap(int address, int length) { Q_ASSERT(address < DMX_SLOT_MAX); if (address >= m_slotCount) @@ -1023,7 +1003,10 @@ void transmitwindow::updateChanCheckPap(int address) } std::array ccPap{0}; - ccPap[address] = m_perAddressPriorities[address]; + for (int i = address; i < std::min(address+length, DMX_SLOT_MAX); i++) + { + ccPap[i] = m_perAddressPriorities[i]; + } m_sender->setPerChannelPriorities(ccPap.data()); } diff --git a/src/ui/transmitwindow.h b/src/ui/transmitwindow.h index aed4755..44d22aa 100644 --- a/src/ui/transmitwindow.h +++ b/src/ui/transmitwindow.h @@ -105,7 +105,7 @@ private slots: void updateTitle(); void setLevel(int address, int value); void updatePerChanPriorityButton(); - void updateChanCheckPap(int address); + void updateChanCheckPap(int address, int length); void updateFadeRangePap(); Ui::transmitwindow * ui = nullptr; ConfigurePerChanPrioDlg * m_perChannelDialog = nullptr; diff --git a/ui/transmitwindow.ui b/ui/transmitwindow.ui index d9edcdd..038fb48 100644 --- a/ui/transmitwindow.ui +++ b/ui/transmitwindow.ui @@ -575,7 +575,7 @@ border-radius: 4px; Qt::FocusPolicy::NoFocus - 2 + 1 @@ -1302,6 +1302,75 @@ color: rgb(255, 85, 0); + + + + + + Offset + + + + + + + + 0 + 0 + + + + + 100 + 16777215 + + + + 1 + + + + + + + Grouping + + + + + + + + 0 + 0 + + + + + 100 + 16777215 + + + + 1 + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + @@ -2001,6 +2070,27 @@ color: rgb(255, 85, 0);
commandline.h
+ + rbPathwaySecure + lePathwaySecurePassword + sbSlotCount + sbMinFPS + sbMaxFPS + teCommandline + lcdNumber + sbOffset + sbGrouping + cbCcPap + cbFadeRangePap + rbChaseSnap + rbChaseSine + rbChaseRamp + rbVerticalBars + rbHorizBars + rbUsDate + leScrollText + rbEuDate +