Refactor widget highlighting

This commit is contained in:
WarmUpTill
2024-06-02 16:10:15 +02:00
committed by WarmUpTill
parent d72a0c0d38
commit c05a92d417
28 changed files with 112 additions and 106 deletions

View File

@@ -12,7 +12,7 @@
namespace advss {
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
SceneGroupEditWidget *typeEdit = nullptr;
std::deque<SceneGroup> &GetSceneGroups()
@@ -170,7 +170,8 @@ void AdvSceneSwitcher::on_sceneGroupAdd_clicked()
item->setData(Qt::UserRole, text);
ui->sceneGroups->setCurrentItem(item);
ui->sceneGroupAdd->disconnect(addPulse);
addPulse->deleteLater();
addPulse = nullptr;
ui->sceneGroupHelp->setVisible(false);
emit SceneGroupAdded(QString::fromStdString(name));
@@ -512,8 +513,8 @@ void AdvSceneSwitcher::SetupSceneGroupTab()
if (switcher->sceneGroups.size() == 0) {
if (!switcher->disableHints) {
addPulse = PulseWidget(ui->sceneGroupAdd,
QColor(Qt::green));
addPulse = HighlightWidget(ui->sceneGroupAdd,
QColor(Qt::green));
}
ui->sceneGroupHelp->setVisible(true);
} else {

View File

@@ -12,7 +12,7 @@
namespace advss {
bool SceneTrigger::pause = false;
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
void AdvSceneSwitcher::on_triggerAdd_clicked()
{
@@ -22,7 +22,7 @@ void AdvSceneSwitcher::on_triggerAdd_clicked()
listAddClicked(ui->sceneTriggers,
new SceneTriggerWidget(this,
&switcher->sceneTriggers.back()),
ui->triggerAdd, &addPulse);
ui->triggerAdd, addPulse);
ui->triggerHelp->setVisible(false);
}
@@ -370,8 +370,8 @@ void AdvSceneSwitcher::SetupTriggerTab()
if (switcher->sceneTriggers.size() == 0) {
if (!switcher->disableHints) {
addPulse =
PulseWidget(ui->triggerAdd, QColor(Qt::green));
addPulse = HighlightWidget(ui->triggerAdd,
QColor(Qt::green));
}
ui->triggerHelp->setVisible(true);
} else {

View File

@@ -12,7 +12,7 @@
namespace advss {
bool AudioSwitch::pause = false;
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
void AdvSceneSwitcher::on_audioAdd_clicked()
{
@@ -22,7 +22,7 @@ void AdvSceneSwitcher::on_audioAdd_clicked()
AudioSwitchWidget *sw =
new AudioSwitchWidget(this, &switcher->audioSwitches.back());
listAddClicked(ui->audioSwitches, sw, ui->audioAdd, &addPulse);
listAddClicked(ui->audioSwitches, sw, ui->audioAdd, addPulse);
ui->audioHelp->setVisible(false);
}
@@ -232,7 +232,8 @@ void AdvSceneSwitcher::SetupAudioTab()
if (switcher->audioSwitches.size() == 0) {
if (!switcher->disableHints) {
addPulse = PulseWidget(ui->audioAdd, QColor(Qt::green));
addPulse = HighlightWidget(ui->audioAdd,
QColor(Qt::green));
}
ui->audioHelp->setVisible(true);
} else {

View File

@@ -9,7 +9,7 @@
namespace advss {
bool ExecutableSwitch::pause = false;
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
void AdvSceneSwitcher::on_executableAdd_clicked()
{
@@ -19,7 +19,7 @@ void AdvSceneSwitcher::on_executableAdd_clicked()
listAddClicked(ui->executables,
new ExecutableSwitchWidget(
this, &switcher->executableSwitches.back()),
ui->executableAdd, &addPulse);
ui->executableAdd, addPulse);
ui->exeHelp->setVisible(false);
}
@@ -177,8 +177,8 @@ void AdvSceneSwitcher::SetupExecutableTab()
if (switcher->executableSwitches.size() == 0) {
if (!switcher->disableHints) {
addPulse = PulseWidget(ui->executableAdd,
QColor(Qt::green));
addPulse = HighlightWidget(ui->executableAdd,
QColor(Qt::green));
}
ui->exeHelp->setVisible(true);
} else {

View File

@@ -18,7 +18,7 @@
namespace advss {
bool FileSwitch::pause = false;
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
static std::hash<std::string> strHash;
void AdvSceneSwitcher::on_browseButton_clicked()
@@ -291,7 +291,7 @@ void AdvSceneSwitcher::on_fileAdd_clicked()
listAddClicked(ui->fileSwitches,
new FileSwitchWidget(this,
&switcher->fileSwitches.back()),
ui->fileAdd, &addPulse);
ui->fileAdd, addPulse);
ui->fileHelp->setVisible(false);
}
@@ -441,7 +441,8 @@ void AdvSceneSwitcher::SetupFileTab()
if (switcher->fileSwitches.size() == 0) {
if (!switcher->disableHints) {
addPulse = PulseWidget(ui->fileAdd, QColor(Qt::green));
addPulse =
HighlightWidget(ui->fileAdd, QColor(Qt::green));
}
ui->fileHelp->setVisible(true);
} else {

View File

@@ -9,7 +9,7 @@
namespace advss {
bool MediaSwitch::pause = false;
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
constexpr auto media_played_to_end_idx = 8;
constexpr auto media_any_idx = 9;
@@ -22,7 +22,7 @@ void AdvSceneSwitcher::on_mediaAdd_clicked()
listAddClicked(ui->mediaSwitches,
new MediaSwitchWidget(this,
&switcher->mediaSwitches.back()),
ui->mediaAdd, &addPulse);
ui->mediaAdd, addPulse);
ui->mediaHelp->setVisible(false);
}
@@ -252,7 +252,8 @@ void AdvSceneSwitcher::SetupMediaTab()
if (switcher->mediaSwitches.size() == 0) {
if (!switcher->disableHints) {
addPulse = PulseWidget(ui->mediaAdd, QColor(Qt::green));
addPulse = HighlightWidget(ui->mediaAdd,
QColor(Qt::green));
}
ui->mediaHelp->setVisible(true);
} else {

View File

@@ -10,7 +10,7 @@
namespace advss {
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
void AdvSceneSwitcher::on_pauseAdd_clicked()
{
@@ -20,7 +20,7 @@ void AdvSceneSwitcher::on_pauseAdd_clicked()
listAddClicked(ui->pauseEntries,
new PauseEntryWidget(this,
&switcher->pauseEntries.back()),
ui->pauseAdd, &addPulse);
ui->pauseAdd, addPulse);
ui->pauseHelp->setVisible(false);
}
@@ -264,7 +264,8 @@ void AdvSceneSwitcher::SetupPauseTab()
if (switcher->pauseEntries.size() == 0) {
if (!switcher->disableHints) {
addPulse = PulseWidget(ui->pauseAdd, QColor(Qt::green));
addPulse = HighlightWidget(ui->pauseAdd,
QColor(Qt::green));
}
ui->pauseHelp->setVisible(true);
} else {

View File

@@ -9,7 +9,7 @@
namespace advss {
bool RandomSwitch::pause = false;
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
void AdvSceneSwitcher::on_randomAdd_clicked()
{
@@ -19,7 +19,7 @@ void AdvSceneSwitcher::on_randomAdd_clicked()
listAddClicked(ui->randomSwitches,
new RandomSwitchWidget(this,
&switcher->randomSwitches.back()),
ui->randomAdd, &addPulse);
ui->randomAdd, addPulse);
ui->randomHelp->setVisible(false);
}
@@ -131,8 +131,8 @@ void AdvSceneSwitcher::SetupRandomTab()
if (switcher->randomSwitches.size() == 0) {
if (!switcher->disableHints) {
addPulse =
PulseWidget(ui->randomAdd, QColor(Qt::green));
addPulse = HighlightWidget(ui->randomAdd,
QColor(Qt::green));
}
ui->randomHelp->setVisible(true);
} else {
@@ -147,8 +147,8 @@ void AdvSceneSwitcher::SetupRandomTab()
}");
if (switcher->switchIfNotMatching != NoMatchBehavior::RANDOM_SWITCH) {
if (!switcher->disableHints) {
PulseWidget(ui->randomDisabledWarning, QColor(Qt::red),
QColor(0, 0, 0, 0));
HighlightWidget(ui->randomDisabledWarning,
QColor(Qt::red), QColor(0, 0, 0, 0));
}
} else {
ui->randomDisabledWarning->setVisible(false);

View File

@@ -11,7 +11,7 @@
namespace advss {
bool ScreenRegionSwitch::pause = false;
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
void AdvSceneSwitcher::ClearFrames(QListWidget *list)
{
@@ -79,7 +79,7 @@ void AdvSceneSwitcher::on_screenRegionAdd_clicked()
listAddClicked(ui->screenRegionSwitches,
new ScreenRegionWidget(
this, &switcher->screenRegionSwitches.back()),
ui->screenRegionAdd, &addPulse);
ui->screenRegionAdd, addPulse);
ui->regionHelp->setVisible(false);
}
@@ -248,8 +248,8 @@ void AdvSceneSwitcher::SetupRegionTab()
if (switcher->screenRegionSwitches.size() == 0) {
if (!switcher->disableHints) {
addPulse = PulseWidget(ui->screenRegionAdd,
QColor(Qt::green));
addPulse = HighlightWidget(ui->screenRegionAdd,
QColor(Qt::green));
}
ui->regionHelp->setVisible(true);
} else {

View File

@@ -16,7 +16,7 @@ namespace advss {
constexpr auto max_extend_text_size = 150;
bool SceneSequenceSwitch::pause = false;
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
void AdvSceneSwitcher::on_sceneSequenceAdd_clicked()
{
@@ -26,7 +26,7 @@ void AdvSceneSwitcher::on_sceneSequenceAdd_clicked()
listAddClicked(ui->sceneSequenceSwitches,
new SequenceWidget(
this, &switcher->sceneSequenceSwitches.back()),
ui->sceneSequenceAdd, &addPulse);
ui->sceneSequenceAdd, addPulse);
ui->sequenceHelp->setVisible(false);
}
@@ -299,8 +299,8 @@ void AdvSceneSwitcher::SetupSequenceTab()
if (switcher->sceneSequenceSwitches.size() == 0) {
if (!switcher->disableHints) {
addPulse = PulseWidget(ui->sceneSequenceAdd,
QColor(Qt::green));
addPulse = HighlightWidget(ui->sceneSequenceAdd,
QColor(Qt::green));
}
ui->sequenceHelp->setVisible(true);
} else {

View File

@@ -7,7 +7,7 @@
namespace advss {
bool TimeSwitch::pause = false;
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
void AdvSceneSwitcher::on_timeAdd_clicked()
{
@@ -17,7 +17,7 @@ void AdvSceneSwitcher::on_timeAdd_clicked()
listAddClicked(ui->timeSwitches,
new TimeSwitchWidget(this,
&switcher->timeSwitches.back()),
ui->timeAdd, &addPulse);
ui->timeAdd, addPulse);
ui->timeHelp->setVisible(false);
}
@@ -197,7 +197,8 @@ void AdvSceneSwitcher::SetupTimeTab()
if (switcher->timeSwitches.size() == 0) {
if (!switcher->disableHints) {
addPulse = PulseWidget(ui->timeAdd, QColor(Qt::green));
addPulse =
HighlightWidget(ui->timeAdd, QColor(Qt::green));
}
ui->timeHelp->setVisible(true);
} else {

View File

@@ -14,7 +14,7 @@
namespace advss {
bool VideoSwitch::pause = false;
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
void AdvSceneSwitcher::on_videoAdd_clicked()
{
@@ -24,7 +24,7 @@ void AdvSceneSwitcher::on_videoAdd_clicked()
VideoSwitchWidget *sw =
new VideoSwitchWidget(this, &switcher->videoSwitches.back());
listAddClicked(ui->videoSwitches, sw, ui->videoAdd, &addPulse);
listAddClicked(ui->videoSwitches, sw, ui->videoAdd, addPulse);
ui->videoHelp->setVisible(false);
}
@@ -202,7 +202,8 @@ void AdvSceneSwitcher::SetupVideoTab()
if (switcher->videoSwitches.size() == 0) {
if (!switcher->disableHints) {
addPulse = PulseWidget(ui->videoAdd, QColor(Qt::green));
addPulse = HighlightWidget(ui->videoAdd,
QColor(Qt::green));
}
ui->videoHelp->setVisible(true);
} else {

View File

@@ -11,7 +11,7 @@
namespace advss {
bool WindowSwitch::pause = false;
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
void AdvSceneSwitcher::on_windowAdd_clicked()
{
@@ -21,7 +21,7 @@ void AdvSceneSwitcher::on_windowAdd_clicked()
listAddClicked(ui->windowSwitches,
new WindowSwitchWidget(this,
&switcher->windowSwitches.back()),
ui->windowAdd, &addPulse);
ui->windowAdd, addPulse);
ui->windowHelp->setVisible(false);
}
@@ -335,8 +335,8 @@ void AdvSceneSwitcher::SetupTitleTab()
if (switcher->windowSwitches.size() == 0) {
if (!switcher->disableHints) {
addPulse =
PulseWidget(ui->windowAdd, QColor(Qt::green));
addPulse = HighlightWidget(ui->windowAdd,
QColor(Qt::green));
}
ui->windowHelp->setVisible(true);
} else {

View File

@@ -167,7 +167,7 @@ void MacroDock::Highlight()
}
if (_lastHighlightCheckTime.time_since_epoch().count() != 0 &&
macro->WasExecutedSince(_lastHighlightCheckTime)) {
PulseWidget(this, Qt::green, QColor(0, 0, 0, 0), true);
HighlightWidget(this, Qt::green, QColor(0, 0, 0, 0), true);
}
_lastHighlightCheckTime = std::chrono::high_resolution_clock::now();
}

View File

@@ -130,7 +130,7 @@ void MacroSegmentList::Highlight(int idx, QColor color)
if (!widget) {
return;
}
PulseWidget(widget, color, QColor(0, 0, 0, 0), true);
HighlightWidget(widget, color, QColor(0, 0, 0, 0), true);
}
void MacroSegmentList::SetCollapsed(bool collapse)

View File

@@ -175,7 +175,7 @@ void MacroSegmentSelection::MarkSelectedSegment()
index - 1, QColor(Qt::lightGray));
}
PulseWidget(this, QColor(Qt::lightGray), QColor(0, 0, 0, 0), true);
HighlightWidget(this, QColor(Qt::lightGray), QColor(0, 0, 0, 0), true);
}
} // namespace advss

View File

@@ -23,7 +23,7 @@
namespace advss {
static QMetaObject::Connection addPulse;
static QObject *addPulse = nullptr;
static QTimer onChangeHighlightTimer;
static bool macroNameExists(const std::string &name)
@@ -99,7 +99,8 @@ void AdvSceneSwitcher::on_macroAdd_clicked()
}
ui->macros->Add(newMacro);
ui->macroAdd->disconnect(addPulse);
addPulse->deleteLater();
addPulse = nullptr;
emit MacroAdded(QString::fromStdString(name));
}
@@ -753,8 +754,8 @@ void AdvSceneSwitcher::HighlightOnChange()
}
if (macro->OnChangePreventedActionsRecently()) {
PulseWidget(ui->runMacroOnChange, Qt::yellow, Qt::transparent,
true);
HighlightWidget(ui->runMacroOnChange, Qt::yellow,
Qt::transparent, true);
}
}
@@ -832,7 +833,7 @@ void AdvSceneSwitcher::SetupMacroTab()
ui->macros->installEventFilter(this);
if (GetMacros().size() == 0 && !switcher->disableHints) {
addPulse = PulseWidget(ui->macroAdd, QColor(Qt::green));
addPulse = HighlightWidget(ui->macroAdd, QColor(Qt::green));
}
ui->macros->Reset(GetMacros(),
GetGlobalMacroProperties()._highlightExecuted);
@@ -1106,7 +1107,8 @@ void AdvSceneSwitcher::CopyMacro()
Macro::PrepareMoveToGroup(macro->Parent(), newMacro);
ui->macros->Add(newMacro, macro);
ui->macroAdd->disconnect(addPulse);
addPulse->deleteLater();
addPulse = nullptr;
emit MacroAdded(QString::fromStdString(name));
}

View File

@@ -108,7 +108,7 @@ void MacroTreeItem::HighlightIfExecuted()
if (_lastHighlightCheckTime.time_since_epoch().count() != 0 &&
_macro->WasExecutedSince(_lastHighlightCheckTime)) {
PulseWidget(this, Qt::green, QColor(0, 0, 0, 0), true);
HighlightWidget(this, Qt::green, QColor(0, 0, 0, 0), true);
}
_lastHighlightCheckTime = std::chrono::high_resolution_clock::now();
}

View File

@@ -81,9 +81,13 @@ void ResourceTable::SetHelpVisible(bool visible) const
void ResourceTable::HighlightAddButton(bool enable)
{
_add->disconnect(_highlightConnection);
if (_highlightConnection) {
_highlightConnection->deleteLater();
_highlightConnection = nullptr;
}
if (enable && HighlightUIElementsEnabled()) {
_highlightConnection = PulseWidget(_add, QColor(Qt::green));
_highlightConnection = HighlightWidget(_add, QColor(Qt::green));
}
}

View File

@@ -37,7 +37,7 @@ private:
QPushButton *_remove;
QLabel *_help;
QMetaObject::Connection _highlightConnection;
QObject *_highlightConnection = nullptr;
};
EXPORT void AddItemTableRow(QTableWidget *table, const QStringList &cells);

View File

@@ -132,9 +132,8 @@ void StatusControl::SetStarted()
_button->setText(
obs_module_text("AdvSceneSwitcher.generalTab.status.stop"));
_status->setText(obs_module_text("AdvSceneSwitcher.status.active"));
_status->disconnect(_pulse);
_pulse->deleteLater();
SetStatusStyleSheet(false);
_setToStopped = false;
}
@@ -144,9 +143,8 @@ void StatusControl::SetStopped()
obs_module_text("AdvSceneSwitcher.generalTab.status.start"));
_status->setText(obs_module_text("AdvSceneSwitcher.status.inactive"));
if (HighlightUIElementsEnabled()) {
SetStatusStyleSheet(true);
_pulse = PulseWidget(_status, QColor(Qt::red),
QColor(0, 0, 0, 0));
_pulse = HighlightWidget(_status, QColor(Qt::red),
QColor(0, 0, 0, 0));
}
_setToStopped = true;
}

View File

@@ -33,7 +33,7 @@ private:
QLabel *_status;
QLabel *_statusPrefix;
QTimer _timer;
QMetaObject::Connection _pulse;
QObject *_pulse = nullptr;
bool _setToStopped = true;
};

View File

@@ -13,8 +13,8 @@
namespace advss {
QMetaObject::Connection PulseWidget(QWidget *widget, QColor startColor,
QColor endColor, bool once)
QObject *HighlightWidget(QWidget *widget, QColor startColor, QColor endColor,
bool once)
{
QGraphicsColorizeEffect *effect = new QGraphicsColorizeEffect(widget);
widget->setGraphicsEffect(effect);
@@ -24,33 +24,22 @@ QMetaObject::Connection PulseWidget(QWidget *widget, QColor startColor,
animation->setEndValue(endColor);
animation->setDuration(1000);
QMetaObject::Connection con;
// Clean up the effect when the animation is deleted
QWidget::connect(animation, &QPropertyAnimation::destroyed, [widget]() {
if (widget) {
widget->setGraphicsEffect(nullptr);
}
});
if (once) {
auto widgetPtr = widget;
con = QWidget::connect(
animation, &QPropertyAnimation::finished,
[widgetPtr]() {
if (widgetPtr) {
widgetPtr->setGraphicsEffect(nullptr);
}
});
animation->start(QPropertyAnimation::DeleteWhenStopped);
} else {
auto widgetPtr = widget;
con = QWidget::connect(
animation, &QPropertyAnimation::finished,
[animation, widgetPtr]() {
QTimer *timer = new QTimer(widgetPtr);
QWidget::connect(timer, &QTimer::timeout,
[animation] {
animation->start();
});
timer->setSingleShot(true);
timer->start(1000);
});
animation->start();
return animation;
}
return con;
QWidget::connect(animation, &QPropertyAnimation::finished,
[animation]() { animation->start(); });
animation->start();
return animation;
}
static int getHorizontalScrollBarHeight(QListWidget *list)

View File

@@ -12,9 +12,11 @@
namespace advss {
EXPORT QMetaObject::Connection PulseWidget(QWidget *widget, QColor startColor,
QColor endColor = QColor(0, 0, 0, 0),
bool once = false);
// Returns QObject* to QPropertyAnimation object
// Delete it to stop the animation
EXPORT QObject *HighlightWidget(QWidget *widget, QColor startColor,
QColor endColor = QColor(0, 0, 0, 0),
bool once = false);
EXPORT void SetHeightToContentHeight(QListWidget *list);
EXPORT void SetButtonIcon(QPushButton *button, const char *path);

View File

@@ -76,15 +76,15 @@ std::string ToString(double value)
}
void listAddClicked(QListWidget *list, QWidget *newWidget,
QPushButton *addButton,
QMetaObject::Connection *addHighlight)
QPushButton *addButton, QObject *addHighlight)
{
if (!list || !newWidget) {
return;
}
if (addButton && addHighlight) {
addButton->disconnect(*addHighlight);
if (addHighlight) {
addHighlight->deleteLater();
addHighlight = nullptr;
}
QListWidgetItem *item;

View File

@@ -24,7 +24,7 @@ std::string ToString(double value);
void listAddClicked(QListWidget *list, QWidget *newWidget,
QPushButton *addButton = nullptr,
QMetaObject::Connection *addHighlight = nullptr);
QObject *addHighlight = nullptr);
bool listMoveUp(QListWidget *list);
bool listMoveDown(QListWidget *list);

View File

@@ -529,7 +529,8 @@ TwitchTokenSettingsDialog::TwitchTokenSettingsDialog(
HideToken();
if (_name->text().isEmpty()) {
PulseWidget(_requestToken, Qt::green, QColor(0, 0, 0, 0), true);
HighlightWidget(_requestToken, Qt::green, QColor(0, 0, 0, 0),
true);
}
_currentToken = settings;
@@ -573,7 +574,8 @@ void TwitchTokenSettingsDialog::HideToken()
void TwitchTokenSettingsDialog::TokenOptionChanged(int)
{
if (!_name->text().isEmpty()) {
PulseWidget(_requestToken, Qt::green, QColor(0, 0, 0, 0), true);
HighlightWidget(_requestToken, Qt::green, QColor(0, 0, 0, 0),
true);
}
_name->setText("");
SetTokenInfoVisible(false);

View File

@@ -1,11 +1,13 @@
#include "ui-helpers.hpp"
class QObejct;
namespace advss {
QMetaObject::Connection PulseWidget(QWidget *widget, QColor startColor,
QColor endColor, bool once)
QObject *HighlightWidget(QWidget *widget, QColor startColor, QColor endColor,
bool once)
{
return {};
return nullptr;
}
void SetHeightToContentHeight(QListWidget *list) {}