#pragma once #include "macro-condition-edit.hpp" #include "striped-frame.hpp" #include "variable-spinbox.hpp" #include #include #include namespace advss { class MacroConditionCursor : public MacroCondition { public: MacroConditionCursor(Macro *m) : MacroCondition(m, true) {} bool CheckCondition(); bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetId() const { return id; }; static std::shared_ptr Create(Macro *m) { return std::make_shared(m); } enum class Condition { REGION, MOVING, CLICK, }; enum class Button { LEFT, MIDDLE, RIGHT, }; Condition _condition = Condition::REGION; Button _button = Button::LEFT; NumberVariable _minX = 0, _minY = 0, _maxX = 0, _maxY = 0; private: void SetupTempVars(); bool CheckClick(); std::chrono::high_resolution_clock::time_point _lastCheckTime{}; int _lastX = 0; int _lastY = 0; static bool _registered; static const std::string id; }; class MacroConditionCursorEdit : public QWidget { Q_OBJECT public: MacroConditionCursorEdit( QWidget *parent, std::shared_ptr cond = nullptr); void UpdateEntryData(); static QWidget *Create(QWidget *parent, std::shared_ptr cond) { return new MacroConditionCursorEdit( parent, std::dynamic_pointer_cast(cond)); } private slots: void ConditionChanged(int idx); void ButtonChanged(int idx); void MinXChanged(const NumberVariable &pos); void MinYChanged(const NumberVariable &pos); void MaxXChanged(const NumberVariable &pos); void MaxYChanged(const NumberVariable &pos); void UpdateCursorPos(); void ToggleFrame(); protected: VariableSpinBox *_minX; VariableSpinBox *_minY; VariableSpinBox *_maxX; VariableSpinBox *_maxY; QComboBox *_conditions; QComboBox *_buttons; QPushButton *_frameToggle; QLabel *_xPos; QLabel *_yPos; QHBoxLayout *_curentPosLayout; std::shared_ptr _entryData; private: void SetWidgetVisibility(); void SetupFrame(); QTimer _timer; StripedFrame _frame; bool _loading = true; }; } // namespace advss