mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-09-29 12:57:57 -05:00
Add list-like controls to macro actions and conditions
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<MacroSegmentEdit *>(
|
||||
ui->macroEditActionLayout->itemAt(i)->widget());
|
||||
if (widget) {
|
||||
widget->SetSelected(i == idx);
|
||||
}
|
||||
}
|
||||
|
||||
if (idx < 0 || idx >= macro->Actions().size()) {
|
||||
currentActionIdx = -1;
|
||||
} else {
|
||||
currentActionIdx = idx;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MacroSegmentEdit *>(
|
||||
ui->macroEditConditionLayout->itemAt(i)->widget());
|
||||
if (widget) {
|
||||
widget->SetSelected(i == idx);
|
||||
}
|
||||
}
|
||||
|
||||
if (idx < 0 || idx >= macro->Conditions().size()) {
|
||||
currentConditionIdx = -1;
|
||||
} else {
|
||||
currentConditionIdx = idx;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <obs.hpp>
|
||||
#include <QEvent>
|
||||
#include <QMouseEvent>
|
||||
#include <QLabel>
|
||||
#include <QScrollBar>
|
||||
|
||||
@@ -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<QWidget *> widgets = this->findChildren<QWidget *>();
|
||||
@@ -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); }");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user