diff --git a/forms/advanced-scene-switcher.ui b/forms/advanced-scene-switcher.ui
index 3b136777..a3b4f8f2 100644
--- a/forms/advanced-scene-switcher.ui
+++ b/forms/advanced-scene-switcher.ui
@@ -765,7 +765,7 @@
AdvSceneSwitcher.macroTab.edit
-
+
-
-
@@ -819,218 +819,405 @@
Qt::Vertical
-
-
- true
-
-
-
-
- 0
- 0
- 792
- 218
-
+
+
+
+ 0
-
-
- QLayout::SetMinAndMaxSize
-
-
-
-
-
- QLayout::SetMinAndMaxSize
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 792
+ 188
+
-
-
-
-
- false
-
-
- AdvSceneSwitcher.macroTab.editConditionHelp
-
-
- Qt::AlignCenter
-
-
- true
-
-
-
- -
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 0
- 0
-
-
-
-
- -
-
-
-
-
-
-
- 22
- 22
-
-
-
- true
-
-
- addIconSmall
-
-
-
- -
-
-
-
- 22
- 22
-
-
-
- true
-
-
- removeIconSmall
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
-
-
-
+
+
+ QLayout::SetMinAndMaxSize
+
+ -
+
+
+ QLayout::SetMinAndMaxSize
+
+
-
+
+
+ false
+
+
+ AdvSceneSwitcher.macroTab.editConditionHelp
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+
+ -
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+ -
+
+
+ 9
+
+
-
+
+
+
+ 22
+ 22
+
+
+
+ true
+
+
+ addIconSmall
+
+
+
+ -
+
+
+
+ 22
+ 22
+
+
+
+ true
+
+
+ removeIconSmall
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 5
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 5
+ 20
+
+
+
+
+ -
+
+
+
+ 22
+ 22
+
+
+
+
+
+
+ true
+
+
+ upArrowIconSmall
+
+
+
+ -
+
+
+
+ 22
+ 22
+
+
+
+ true
+
+
+ downArrowIconSmall
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
-
-
- true
-
-
-
-
- 0
- 0
- 792
- 218
-
+
+
+
+ 0
-
-
- QLayout::SetMinAndMaxSize
-
- -
-
-
-
-
-
- false
-
-
- AdvSceneSwitcher.macroTab.editActionHelp
-
-
- Qt::AlignCenter
-
-
- true
-
-
-
- -
-
-
-
-
- -
-
-
- Qt::Vertical
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 792
+ 188
+
-
-
- 0
- 0
-
-
-
-
- -
-
-
-
-
-
-
- 22
- 22
-
-
-
- true
-
-
- addIconSmall
-
-
-
- -
-
-
-
- 22
- 22
-
-
-
- true
-
-
- removeIconSmall
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
-
-
-
+
+
+ QLayout::SetMinAndMaxSize
+
+ -
+
+
-
+
+
+ false
+
+
+ AdvSceneSwitcher.macroTab.editActionHelp
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+
+ -
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+ -
+
+
+ 9
+
+
-
+
+
+
+ 22
+ 22
+
+
+
+ true
+
+
+ addIconSmall
+
+
+
+ -
+
+
+
+ 22
+ 22
+
+
+
+ true
+
+
+ removeIconSmall
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 5
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 5
+ 20
+
+
+
+
+ -
+
+
+
+ 22
+ 22
+
+
+
+ true
+
+
+ upArrowIconSmall
+
+
+
+ -
+
+
+
+ 22
+ 22
+
+
+
+ true
+
+
+ downArrowIconSmall
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
diff --git a/src/headers/advanced-scene-switcher.hpp b/src/headers/advanced-scene-switcher.hpp
index e70cf2f4..e85e615e 100644
--- a/src/headers/advanced-scene-switcher.hpp
+++ b/src/headers/advanced-scene-switcher.hpp
@@ -120,8 +120,12 @@ public slots:
void on_macros_currentRowChanged(int idx);
void on_conditionAdd_clicked();
void on_conditionRemove_clicked();
+ void on_conditionUp_clicked();
+ void on_conditionDown_clicked();
void on_actionAdd_clicked();
void on_actionRemove_clicked();
+ void on_actionUp_clicked();
+ void on_actionDown_clicked();
void ShowMacroContextMenu(const QPoint &);
void ShowMacroActionsContextMenu(const QPoint &);
void ShowMacroConditionsContextMenu(const QPoint &);
@@ -132,10 +136,12 @@ public slots:
void CollapseAllConditions();
void MinimizeActions();
void MinimizeConditions();
+ void MacroActionSelectionChanged(int idx);
void AddMacroAction(int idx);
void RemoveMacroAction(int idx);
void MoveMacroActionUp(int idx);
void MoveMacroActionDown(int idx);
+ void MacroConditionSelectionChanged(int idx);
void AddMacroCondition(int idx);
void RemoveMacroCondition(int idx);
void MoveMacroConditionUp(int idx);
@@ -277,6 +283,8 @@ public slots:
void on_close_clicked();
private:
+ int currentConditionIdx = -1;
+ int currentActionIdx = -1;
};
/******************************************************************************
diff --git a/src/headers/macro-segment.hpp b/src/headers/macro-segment.hpp
index cc534f05..dd566777 100644
--- a/src/headers/macro-segment.hpp
+++ b/src/headers/macro-segment.hpp
@@ -42,6 +42,7 @@ public:
// list of actions and conditions
void SetFocusPolicyOfWidgets();
void SetCollapsed(bool collapsed);
+ void SetSelected(bool);
protected slots:
void HeaderInfoChanged(const QString &);
@@ -63,10 +64,12 @@ signals:
void RemoveAt(int idx);
void UpAt(int idx);
void DownAt(int idx);
+ void SelectionChagned(int idx);
protected:
void enterEvent(QEvent *e);
void leaveEvent(QEvent *e);
+ void mousePressEvent(QMouseEvent *event);
Section *_section;
QLabel *_headerInfo;
diff --git a/src/macro-action-edit.cpp b/src/macro-action-edit.cpp
index c31ede5f..bb91ecf5 100644
--- a/src/macro-action-edit.cpp
+++ b/src/macro-action-edit.cpp
@@ -87,7 +87,8 @@ MacroActionEdit::MacroActionEdit(QWidget *parent,
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->setContentsMargins(0, 0, 0, 0);
if (switcher->useVerticalMacroControls) {
- mainLayout->addWidget(_controls);
+
+ _controls->hide();
} else {
actionLayout->addWidget(_controls);
}
@@ -181,7 +182,16 @@ void AdvSceneSwitcher::on_actionAdd_clicked()
return;
}
- AddMacroAction((int)macro->Actions().size());
+ if (currentActionIdx == -1) {
+ auto macro = getSelectedMacro();
+ if (!macro) {
+ return;
+ }
+ AddMacroAction((int)macro->Actions().size());
+ } else {
+ AddMacroAction(currentActionIdx + 1);
+ }
+ MacroActionSelectionChanged(currentActionIdx + 1);
ui->macroEditActionHelp->setVisible(false);
}
@@ -208,11 +218,33 @@ void AdvSceneSwitcher::RemoveMacroAction(int idx)
void AdvSceneSwitcher::on_actionRemove_clicked()
{
- auto macro = getSelectedMacro();
- if (!macro) {
+ if (currentActionIdx == -1) {
+ auto macro = getSelectedMacro();
+ if (!macro) {
+ return;
+ }
+ RemoveMacroAction((int)macro->Actions().size() - 1);
+ } else {
+ RemoveMacroAction(currentActionIdx);
+ }
+ MacroActionSelectionChanged(-1);
+}
+
+void AdvSceneSwitcher::on_actionUp_clicked()
+{
+ if (currentActionIdx == -1) {
return;
}
- RemoveMacroAction((int)macro->Actions().size() - 1);
+ MoveMacroActionUp(currentActionIdx);
+ MacroActionSelectionChanged(currentActionIdx - 1);
+}
+void AdvSceneSwitcher::on_actionDown_clicked()
+{
+ if (currentActionIdx == -1) {
+ return;
+ }
+ MoveMacroActionDown(currentActionIdx);
+ MacroActionSelectionChanged(currentActionIdx + 1);
}
void AdvSceneSwitcher::SwapActions(Macro *m, int pos1, int pos2)
@@ -272,3 +304,25 @@ void AdvSceneSwitcher::MoveMacroActionDown(int idx)
SwapActions(macro, idx, idx + 1);
HighlightAction(idx + 1);
}
+
+void AdvSceneSwitcher::MacroActionSelectionChanged(int idx)
+{
+ auto macro = getSelectedMacro();
+ if (!macro) {
+ return;
+ }
+
+ for (int i = 0; i < ui->macroEditActionLayout->count(); ++i) {
+ auto widget = static_cast(
+ ui->macroEditActionLayout->itemAt(i)->widget());
+ if (widget) {
+ widget->SetSelected(i == idx);
+ }
+ }
+
+ if (idx < 0 || idx >= macro->Actions().size()) {
+ currentActionIdx = -1;
+ } else {
+ currentActionIdx = idx;
+ }
+}
diff --git a/src/macro-condition-edit.cpp b/src/macro-condition-edit.cpp
index 80a0c886..cea0c7a8 100644
--- a/src/macro-condition-edit.cpp
+++ b/src/macro-condition-edit.cpp
@@ -131,7 +131,7 @@ MacroConditionEdit::MacroConditionEdit(
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->setContentsMargins(0, 0, 0, 0);
if (switcher->useVerticalMacroControls) {
- mainLayout->addWidget(_controls);
+ _controls->hide();
} else {
conditionLayout->addWidget(_controls);
}
@@ -305,7 +305,16 @@ void AdvSceneSwitcher::on_conditionAdd_clicked()
return;
}
- AddMacroCondition((int)macro->Conditions().size());
+ if (currentConditionIdx == -1) {
+ auto macro = getSelectedMacro();
+ if (!macro) {
+ return;
+ }
+ AddMacroCondition((int)macro->Conditions().size());
+ } else {
+ AddMacroCondition(currentConditionIdx + 1);
+ }
+ MacroConditionSelectionChanged(currentConditionIdx + 1);
ui->macroEditConditionHelp->setVisible(false);
}
@@ -335,11 +344,34 @@ void AdvSceneSwitcher::RemoveMacroCondition(int idx)
void AdvSceneSwitcher::on_conditionRemove_clicked()
{
- auto macro = getSelectedMacro();
- if (!macro) {
+ if (currentConditionIdx == -1) {
+ auto macro = getSelectedMacro();
+ if (!macro) {
+ return;
+ }
+ RemoveMacroCondition((int)macro->Conditions().size() - 1);
+ } else {
+ RemoveMacroCondition(currentConditionIdx);
+ }
+ MacroConditionSelectionChanged(-1);
+}
+
+void AdvSceneSwitcher::on_conditionUp_clicked()
+{
+ if (currentConditionIdx == -1) {
return;
}
- RemoveMacroCondition((int)macro->Conditions().size() - 1);
+ MoveMacroConditionUp(currentConditionIdx);
+ MacroConditionSelectionChanged(currentConditionIdx - 1);
+}
+
+void AdvSceneSwitcher::on_conditionDown_clicked()
+{
+ if (currentConditionIdx == -1) {
+ return;
+ }
+ MoveMacroConditionDown(currentConditionIdx);
+ MacroConditionSelectionChanged(currentConditionIdx + 1);
}
void AdvSceneSwitcher::SwapConditions(Macro *m, int pos1, int pos2)
@@ -409,3 +441,25 @@ void AdvSceneSwitcher::MoveMacroConditionDown(int idx)
SwapConditions(macro, idx, idx + 1);
HighlightCondition(idx + 1);
}
+
+void AdvSceneSwitcher::MacroConditionSelectionChanged(int idx)
+{
+ auto macro = getSelectedMacro();
+ if (!macro) {
+ return;
+ }
+
+ for (int i = 0; i < ui->macroEditConditionLayout->count(); ++i) {
+ auto widget = static_cast(
+ ui->macroEditConditionLayout->itemAt(i)->widget());
+ if (widget) {
+ widget->SetSelected(i == idx);
+ }
+ }
+
+ if (idx < 0 || idx >= macro->Conditions().size()) {
+ currentConditionIdx = -1;
+ } else {
+ currentConditionIdx = idx;
+ }
+}
diff --git a/src/macro-segment.cpp b/src/macro-segment.cpp
index 273a6514..0272f49d 100644
--- a/src/macro-segment.cpp
+++ b/src/macro-segment.cpp
@@ -4,6 +4,7 @@
#include
#include
+#include
#include
#include
@@ -169,6 +170,13 @@ void MacroSegmentEdit::leaveEvent(QEvent *)
_leaveTimer.start();
}
+void MacroSegmentEdit::mousePressEvent(QMouseEvent *event)
+{
+ if (event->button() == Qt::LeftButton && Data()) {
+ emit SelectionChagned(Data()->GetIndex());
+ }
+}
+
void MacroSegmentEdit::SetFocusPolicyOfWidgets()
{
QList widgets = this->findChildren();
@@ -187,3 +195,14 @@ void MacroSegmentEdit::SetCollapsed(bool collapsed)
{
_section->SetCollapsed(collapsed);
}
+
+void MacroSegmentEdit::SetSelected(bool selected)
+{
+ if (selected) {
+ _frame->setStyleSheet(
+ "#segmentFrame { border-width: 2px; border-style: dashed; border-radius: 4px; background-color: rgba(0,0,0,100); }");
+ } else {
+ _frame->setStyleSheet(
+ "#segmentFrame { border-style: none; border-radius: 4px; background-color: rgba(0,0,0,50); }");
+ }
+}
diff --git a/src/macro-tab.cpp b/src/macro-tab.cpp
index 18090bba..bc077120 100644
--- a/src/macro-tab.cpp
+++ b/src/macro-tab.cpp
@@ -272,6 +272,9 @@ void AdvSceneSwitcher::SetEditMacro(Macro &m)
PopulateMacroConditions(m);
PopulateMacroActions(m);
ui->macroEdit->setDisabled(false);
+
+ currentActionIdx = -1;
+ currentConditionIdx = -1;
}
void AdvSceneSwitcher::HighlightAction(int idx)
@@ -300,16 +303,18 @@ void AdvSceneSwitcher::HighlightCondition(int idx)
PulseWidget(widget, QColor(Qt::green), QColor(0, 0, 0, 0), true);
}
-void AdvSceneSwitcher::ConnectControlSignals(MacroActionEdit *c)
+void AdvSceneSwitcher::ConnectControlSignals(MacroActionEdit *a)
{
- connect(c, &MacroActionEdit::AddAt, this,
+ connect(a, &MacroActionEdit::AddAt, this,
&AdvSceneSwitcher::AddMacroAction);
- connect(c, &MacroActionEdit::RemoveAt, this,
+ connect(a, &MacroActionEdit::RemoveAt, this,
&AdvSceneSwitcher::RemoveMacroAction);
- connect(c, &MacroActionEdit::UpAt, this,
+ connect(a, &MacroActionEdit::UpAt, this,
&AdvSceneSwitcher::MoveMacroActionUp);
- connect(c, &MacroActionEdit::DownAt, this,
+ connect(a, &MacroActionEdit::DownAt, this,
&AdvSceneSwitcher::MoveMacroActionDown);
+ connect(a, &MacroActionEdit::SelectionChagned, this,
+ &AdvSceneSwitcher::MacroActionSelectionChanged);
}
void AdvSceneSwitcher::ConnectControlSignals(MacroConditionEdit *c)
@@ -322,6 +327,8 @@ void AdvSceneSwitcher::ConnectControlSignals(MacroConditionEdit *c)
&AdvSceneSwitcher::MoveMacroConditionUp);
connect(c, &MacroConditionEdit::DownAt, this,
&AdvSceneSwitcher::MoveMacroConditionDown);
+ connect(c, &MacroActionEdit::SelectionChagned, this,
+ &AdvSceneSwitcher::MacroConditionSelectionChanged);
}
Macro *AdvSceneSwitcher::getSelectedMacro()