Skip to content

Commit 9ec427e

Browse files
authored
#339 Add Channel Check Grouping and Offset
Feature Request 339 Add Channel Check and Offset
2 parents 268c49a + bd0cfa9 commit 9ec427e

5 files changed

Lines changed: 174 additions & 62 deletions

File tree

src/commandline.cpp

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -466,34 +466,14 @@ void EditableLCDNumber::keyPressEvent(QKeyEvent * event)
466466
if (event->keyCombination()
467467
== Preferences::Instance().getKeyShortcut(KeyShortcutTarget::SHORTCUT_CHANNELCHECK_NEXT))
468468
{
469-
if (intValue() < MAX_DMX_ADDRESS)
470-
{
471-
buf = intValue() + 1;
472-
display(buf);
473-
emit valueChanged(buf);
474-
}
475-
else
476-
{
477-
display(1);
478-
emit valueChanged(1);
479-
}
469+
increment();
480470
return;
481471
}
482472

483473
if (event->keyCombination()
484474
== Preferences::Instance().getKeyShortcut(KeyShortcutTarget::SHORTCUT_CHANNELCHECK_PREV))
485475
{
486-
if (intValue() - 1 > 0)
487-
{
488-
buf = intValue() - 1;
489-
display(buf);
490-
emit valueChanged(buf);
491-
}
492-
else
493-
{
494-
display(MAX_DMX_ADDRESS);
495-
emit valueChanged(MAX_DMX_ADDRESS);
496-
}
476+
decrement();
497477
return;
498478
}
499479

@@ -530,3 +510,53 @@ void EditableLCDNumber::keyPressEvent(QKeyEvent * event)
530510
default: break;
531511
}
532512
}
513+
514+
void EditableLCDNumber::focusInEvent(QFocusEvent* event)
515+
{
516+
setStyleSheet("background-color:rgb(0, 0, 0);\ncolor: rgb(255, 85, 0);");
517+
}
518+
519+
void EditableLCDNumber::focusOutEvent(QFocusEvent* event)
520+
{
521+
setStyleSheet("background-color:rgb(0, 0, 0);\ncolor: rgb(24, 24, 24);");
522+
}
523+
524+
void EditableLCDNumber::increment()
525+
{
526+
auto value = intValue();
527+
if (value + m_offset <= MAX_DMX_ADDRESS)
528+
{
529+
value += m_offset;
530+
display(value);
531+
emit valueChanged(value);
532+
}
533+
else
534+
{
535+
display(1);
536+
emit valueChanged(1);
537+
}
538+
}
539+
540+
void EditableLCDNumber::decrement()
541+
{
542+
auto value = intValue();
543+
if (value - m_offset > 0)
544+
{
545+
value -= m_offset;
546+
display(value);
547+
emit valueChanged(value);
548+
}
549+
else
550+
{
551+
display(MAX_DMX_ADDRESS);
552+
emit valueChanged(MAX_DMX_ADDRESS);
553+
}
554+
}
555+
556+
void EditableLCDNumber::setOffset(int offset)
557+
{
558+
if (offset > 1)
559+
{
560+
m_offset = offset;
561+
}
562+
}

src/commandline.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,18 @@ class EditableLCDNumber : public QLCDNumber
140140
void valueChanged(int);
141141
void toggleOff();
142142

143-
protected:
143+
public slots:
144+
void increment();
145+
void decrement();
146+
void setOffset(int offset);
144147

148+
protected:
145149
virtual void keyPressEvent(QKeyEvent * event);
150+
virtual void focusInEvent(QFocusEvent* event);
151+
virtual void focusOutEvent(QFocusEvent* event);
152+
153+
private:
154+
int m_offset = 1;
146155
};
147156

148157
#endif // COMMANDLINE_H

src/ui/transmitwindow.cpp

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -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

533535
void 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

552540
void 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

571545
void 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

src/ui/transmitwindow.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ private slots:
105105
void updateTitle();
106106
void setLevel(int address, int value);
107107
void updatePerChanPriorityButton();
108-
void updateChanCheckPap(int address);
108+
void updateChanCheckPap(int address, int length);
109109
void updateFadeRangePap();
110110
Ui::transmitwindow * ui = nullptr;
111111
ConfigurePerChanPrioDlg * m_perChannelDialog = nullptr;

ui/transmitwindow.ui

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ border-radius: 4px;
575575
<enum>Qt::FocusPolicy::NoFocus</enum>
576576
</property>
577577
<property name="currentIndex">
578-
<number>2</number>
578+
<number>1</number>
579579
</property>
580580
<widget class="QWidget" name="tabFaders">
581581
<attribute name="title">
@@ -1302,6 +1302,75 @@ color: rgb(255, 85, 0);</string>
13021302
</property>
13031303
</widget>
13041304
</item>
1305+
<item>
1306+
<layout class="QHBoxLayout" name="horizontalLayout_10">
1307+
<item>
1308+
<widget class="QLabel" name="label_11">
1309+
<property name="text">
1310+
<string>Offset</string>
1311+
</property>
1312+
</widget>
1313+
</item>
1314+
<item>
1315+
<widget class="QSpinBox" name="sbOffset">
1316+
<property name="sizePolicy">
1317+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
1318+
<horstretch>0</horstretch>
1319+
<verstretch>0</verstretch>
1320+
</sizepolicy>
1321+
</property>
1322+
<property name="maximumSize">
1323+
<size>
1324+
<width>100</width>
1325+
<height>16777215</height>
1326+
</size>
1327+
</property>
1328+
<property name="minimum">
1329+
<number>1</number>
1330+
</property>
1331+
</widget>
1332+
</item>
1333+
<item>
1334+
<widget class="QLabel" name="label_10">
1335+
<property name="text">
1336+
<string>Grouping</string>
1337+
</property>
1338+
</widget>
1339+
</item>
1340+
<item>
1341+
<widget class="QSpinBox" name="sbGrouping">
1342+
<property name="sizePolicy">
1343+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
1344+
<horstretch>0</horstretch>
1345+
<verstretch>0</verstretch>
1346+
</sizepolicy>
1347+
</property>
1348+
<property name="maximumSize">
1349+
<size>
1350+
<width>100</width>
1351+
<height>16777215</height>
1352+
</size>
1353+
</property>
1354+
<property name="minimum">
1355+
<number>1</number>
1356+
</property>
1357+
</widget>
1358+
</item>
1359+
<item>
1360+
<spacer name="horizontalSpacer_3">
1361+
<property name="orientation">
1362+
<enum>Qt::Orientation::Horizontal</enum>
1363+
</property>
1364+
<property name="sizeHint" stdset="0">
1365+
<size>
1366+
<width>40</width>
1367+
<height>20</height>
1368+
</size>
1369+
</property>
1370+
</spacer>
1371+
</item>
1372+
</layout>
1373+
</item>
13051374
<item>
13061375
<layout class="QHBoxLayout" name="horizontalLayout_4">
13071376
<item>
@@ -2001,6 +2070,27 @@ color: rgb(255, 85, 0);</string>
20012070
<header>commandline.h</header>
20022071
</customwidget>
20032072
</customwidgets>
2073+
<tabstops>
2074+
<tabstop>rbPathwaySecure</tabstop>
2075+
<tabstop>lePathwaySecurePassword</tabstop>
2076+
<tabstop>sbSlotCount</tabstop>
2077+
<tabstop>sbMinFPS</tabstop>
2078+
<tabstop>sbMaxFPS</tabstop>
2079+
<tabstop>teCommandline</tabstop>
2080+
<tabstop>lcdNumber</tabstop>
2081+
<tabstop>sbOffset</tabstop>
2082+
<tabstop>sbGrouping</tabstop>
2083+
<tabstop>cbCcPap</tabstop>
2084+
<tabstop>cbFadeRangePap</tabstop>
2085+
<tabstop>rbChaseSnap</tabstop>
2086+
<tabstop>rbChaseSine</tabstop>
2087+
<tabstop>rbChaseRamp</tabstop>
2088+
<tabstop>rbVerticalBars</tabstop>
2089+
<tabstop>rbHorizBars</tabstop>
2090+
<tabstop>rbUsDate</tabstop>
2091+
<tabstop>leScrollText</tabstop>
2092+
<tabstop>rbEuDate</tabstop>
2093+
</tabstops>
20042094
<resources>
20052095
<include location="../res/resources.qrc"/>
20062096
</resources>

0 commit comments

Comments
 (0)