Add macro action "hotkey" (#226)

This commit is contained in:
WarmUpTill
2021-06-13 16:21:23 -07:00
committed by GitHub
parent d692444687
commit ae4e861f7f
12 changed files with 1174 additions and 6 deletions

125
src/headers/hotkey.hpp Normal file
View File

@@ -0,0 +1,125 @@
#pragma once
extern bool canSimulateKeyPresses;
enum class HotkeyType {
Key_NoKey = 0,
Key_A,
Key_B,
Key_C,
Key_D,
Key_E,
Key_F,
Key_G,
Key_H,
Key_I,
Key_J,
Key_K,
Key_L,
Key_M,
Key_N,
Key_O,
Key_P,
Key_Q,
Key_R,
Key_S,
Key_T,
Key_U,
Key_V,
Key_W,
Key_X,
Key_Y,
Key_Z,
Key_0,
Key_1,
Key_2,
Key_3,
Key_4,
Key_5,
Key_6,
Key_7,
Key_8,
Key_9,
Key_F1,
Key_F2,
Key_F3,
Key_F4,
Key_F5,
Key_F6,
Key_F7,
Key_F8,
Key_F9,
Key_F10,
Key_F11,
Key_F12,
Key_F13,
Key_F14,
Key_F15,
Key_F16,
Key_F17,
Key_F18,
Key_F19,
Key_F20,
Key_F21,
Key_F22,
Key_F23,
Key_F24,
Key_Escape,
Key_Space,
Key_Return,
Key_Backspace,
Key_Tab,
Key_Shift_L,
Key_Shift_R,
Key_Control_L,
Key_Control_R,
Key_Alt_L,
Key_Alt_R,
Key_Win_L,
Key_Win_R,
Key_Apps,
Key_CapsLock,
Key_NumLock,
Key_ScrollLock,
Key_PrintScreen,
Key_Pause,
Key_Insert,
Key_Delete,
Key_PageUP,
Key_PageDown,
Key_Home,
Key_End,
Key_Left,
Key_Right,
Key_Up,
Key_Down,
Key_Numpad0,
Key_Numpad1,
Key_Numpad2,
Key_Numpad3,
Key_Numpad4,
Key_Numpad5,
Key_Numpad6,
Key_Numpad7,
Key_Numpad8,
Key_Numpad9,
Key_NumpadAdd,
Key_NumpadSubtract,
Key_NumpadMultiply,
Key_NumpadDivide,
Key_NumpadDecimal,
Key_NumpadEnter
};
void registerHotkeys();

View File

@@ -0,0 +1,78 @@
#pragma once
#include "macro-action-edit.hpp"
#include "hotkey.hpp"
#include <QCheckBox>
class MacroActionHotkey : public MacroAction {
public:
bool PerformAction();
void LogAction();
bool Save(obs_data_t *obj);
bool Load(obs_data_t *obj);
std::string GetId() { return id; };
static std::shared_ptr<MacroAction> Create()
{
return std::make_shared<MacroActionHotkey>();
}
OBSWeakSource _HotkeySource;
HotkeyType _key = HotkeyType::Key_NoKey;
bool _leftShift = false;
bool _rightShift = false;
bool _leftCtrl = false;
bool _rightCtrl = false;
bool _leftAlt = false;
bool _rightAlt = false;
bool _leftMeta = false;
bool _rightMeta = false;
private:
static bool _registered;
static const std::string id;
};
class MacroActionHotkeyEdit : public QWidget {
Q_OBJECT
public:
MacroActionHotkeyEdit(
QWidget *parent,
std::shared_ptr<MacroActionHotkey> entryData = nullptr);
void UpdateEntryData();
static QWidget *Create(QWidget *parent,
std::shared_ptr<MacroAction> action)
{
return new MacroActionHotkeyEdit(
parent,
std::dynamic_pointer_cast<MacroActionHotkey>(action));
}
private slots:
void KeyChanged(int key);
void LShiftChanged(int state);
void RShiftChanged(int state);
void LCtrlChanged(int state);
void RCtrlChanged(int state);
void LAltChanged(int state);
void RAltChanged(int state);
void LMetaChanged(int state);
void RMetaChanged(int state);
protected:
QComboBox *_keys;
QCheckBox *_leftShift;
QCheckBox *_rightShift;
QCheckBox *_leftCtrl;
QCheckBox *_rightCtrl;
QCheckBox *_leftAlt;
QCheckBox *_rightAlt;
QCheckBox *_leftMeta;
QCheckBox *_rightMeta;
std::shared_ptr<MacroActionHotkey> _entryData;
private:
QHBoxLayout *_mainLayout;
bool _loading = true;
};

View File

@@ -1,4 +1,5 @@
#pragma once
#include "hotkey.hpp"
void GetWindowList(std::vector<std::string> &windows);
void GetWindowList(QStringList &windows);
@@ -9,3 +10,6 @@ std::pair<int, int> getCursorPos();
int secondsSinceLastInput();
void GetProcessList(QStringList &processes);
bool isInFocus(const QString &executable);
void PressKeys(const std::vector<HotkeyType> keys);
void PlatformInit();
void PlatformCleanup();