mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-04-23 10:39:46 -05:00
Prevent accidental edits of actions and conditions when scrolling
This commit is contained in:
parent
95409dfa26
commit
84e4b740a8
|
|
@ -34,7 +34,7 @@ private:
|
|||
static std::map<std::string, MacroActionInfo> _methods;
|
||||
};
|
||||
|
||||
class MacroActionEdit : public QWidget {
|
||||
class MacroActionEdit : public MacroSegmentEdit {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ private:
|
|||
static std::map<std::string, MacroConditionInfo> _methods;
|
||||
};
|
||||
|
||||
class MacroConditionEdit : public QWidget {
|
||||
class MacroConditionEdit : public MacroSegmentEdit {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -159,3 +159,23 @@ public:
|
|||
void ResolveMacroRef();
|
||||
MacroRef _macro;
|
||||
};
|
||||
|
||||
// TODO: Rework macro condition and action edit to allow moving control
|
||||
// handling to MacroSegmentEdit
|
||||
class MacroSegmentEdit : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MacroSegmentEdit(QWidget *parent = nullptr);
|
||||
// Use this function to avoid accidental edits when scrolling through
|
||||
// list of actions and conditions
|
||||
void SetFocusPolicyOfWidgets();
|
||||
};
|
||||
|
||||
class MouseWheelWidgetAdjustmentGuard : public QObject {
|
||||
public:
|
||||
explicit MouseWheelWidgetAdjustmentGuard(QObject *parent);
|
||||
|
||||
protected:
|
||||
bool eventFilter(QObject *o, QEvent *e) override;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ static inline void populateActionSelection(QComboBox *list)
|
|||
MacroActionEdit::MacroActionEdit(QWidget *parent,
|
||||
std::shared_ptr<MacroAction> *entryData,
|
||||
const std::string &id)
|
||||
: QWidget(parent), _entryData(entryData)
|
||||
: MacroSegmentEdit(parent), _entryData(entryData)
|
||||
{
|
||||
_actionSelection = new QComboBox();
|
||||
_section = new Section(300);
|
||||
|
|
@ -140,6 +140,7 @@ void MacroActionEdit::ActionSelectionChanged(const QString &text)
|
|||
QWidget::connect(widget, SIGNAL(HeaderInfoChanged(const QString &)),
|
||||
this, SLOT(HeaderInfoChanged(const QString &)));
|
||||
_section->SetContent(widget, false);
|
||||
SetFocusPolicyOfWidgets();
|
||||
}
|
||||
|
||||
void MacroActionEdit::UpdateEntryData(const std::string &id)
|
||||
|
|
@ -152,6 +153,7 @@ void MacroActionEdit::UpdateEntryData(const std::string &id)
|
|||
HeaderInfoChanged(
|
||||
QString::fromStdString((*_entryData)->GetShortDesc()));
|
||||
_section->SetContent(widget, (*_entryData)->GetCollapsed());
|
||||
SetFocusPolicyOfWidgets();
|
||||
}
|
||||
|
||||
void MacroActionEdit::HeaderInfoChanged(const QString &text)
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ static inline void populateConditionSelection(QComboBox *list)
|
|||
MacroConditionEdit::MacroConditionEdit(
|
||||
QWidget *parent, std::shared_ptr<MacroCondition> *entryData,
|
||||
const std::string &id, bool root)
|
||||
: QWidget(parent), _isRoot(root), _entryData(entryData)
|
||||
: MacroSegmentEdit(parent), _isRoot(root), _entryData(entryData)
|
||||
{
|
||||
_logicSelection = new QComboBox();
|
||||
_conditionSelection = new QComboBox();
|
||||
|
|
@ -164,7 +164,6 @@ void MacroConditionEdit::leaveEvent(QEvent *)
|
|||
{
|
||||
_controls->Show(false);
|
||||
}
|
||||
|
||||
void MacroConditionEdit::LogicSelectionChanged(int idx)
|
||||
{
|
||||
if (_loading || !_entryData) {
|
||||
|
|
@ -216,6 +215,7 @@ void MacroConditionEdit::UpdateEntryData(const std::string &id)
|
|||
_dur->setVisible(MacroConditionFactory::UsesDurationConstraint(id));
|
||||
auto constraint = (*_entryData)->GetDurationConstraint();
|
||||
_dur->SetValue(constraint);
|
||||
SetFocusPolicyOfWidgets();
|
||||
}
|
||||
|
||||
void MacroConditionEdit::ConditionSelectionChanged(const QString &text)
|
||||
|
|
@ -241,6 +241,7 @@ void MacroConditionEdit::ConditionSelectionChanged(const QString &text)
|
|||
this, SLOT(HeaderInfoChanged(const QString &)));
|
||||
_section->SetContent(widget, false);
|
||||
_dur->setVisible(MacroConditionFactory::UsesDurationConstraint(id));
|
||||
SetFocusPolicyOfWidgets();
|
||||
}
|
||||
|
||||
void MacroConditionEdit::DurationChanged(double seconds)
|
||||
|
|
|
|||
|
|
@ -649,3 +649,30 @@ void MacroRefAction::ResolveMacroRef()
|
|||
{
|
||||
_macro.UpdateRef();
|
||||
}
|
||||
|
||||
MouseWheelWidgetAdjustmentGuard::MouseWheelWidgetAdjustmentGuard(QObject *parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
}
|
||||
|
||||
bool MouseWheelWidgetAdjustmentGuard::eventFilter(QObject *o, QEvent *e)
|
||||
{
|
||||
const QWidget *widget = static_cast<QWidget *>(o);
|
||||
if (e->type() == QEvent::Wheel && widget && !widget->hasFocus()) {
|
||||
e->ignore();
|
||||
return true;
|
||||
}
|
||||
|
||||
return QObject::eventFilter(o, e);
|
||||
}
|
||||
|
||||
MacroSegmentEdit::MacroSegmentEdit(QWidget *parent) : QWidget(parent) {}
|
||||
|
||||
void MacroSegmentEdit::SetFocusPolicyOfWidgets()
|
||||
{
|
||||
QList<QWidget *> widgets = this->findChildren<QWidget *>();
|
||||
for (auto w : widgets) {
|
||||
w->setFocusPolicy(Qt::StrongFocus);
|
||||
w->installEventFilter(new MouseWheelWidgetAdjustmentGuard(w));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user