aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/openmpt-trunk/mptrack/InputHandler.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/external_dependencies/openmpt-trunk/mptrack/InputHandler.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/mptrack/InputHandler.h')
-rw-r--r--Src/external_dependencies/openmpt-trunk/mptrack/InputHandler.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/mptrack/InputHandler.h b/Src/external_dependencies/openmpt-trunk/mptrack/InputHandler.h
new file mode 100644
index 00000000..37b21a67
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/mptrack/InputHandler.h
@@ -0,0 +1,84 @@
+/*
+ * InputHandler.h
+ * --------------
+ * Purpose: Implementation of keyboard input handling, keymap loading, ...
+ * Notes : (currently none)
+ * Authors: OpenMPT Devs
+ * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
+ */
+
+
+#pragma once
+
+#include "openmpt/all/BuildSettings.hpp"
+
+#include "CommandSet.h"
+
+OPENMPT_NAMESPACE_BEGIN
+
+// Hook codes
+enum
+{
+ HC_MIDI = 0x8000,
+};
+
+class CInputHandler
+{
+protected:
+ CWnd *m_pMainFrm;
+ KeyMap m_keyMap;
+ FlagSet<Modifiers> m_modifierMask = ModNone;
+ int m_bypassCount = 0;
+ bool m_bInterceptWindowsKeys : 1, m_bInterceptNumLock : 1, m_bInterceptCapsLock : 1, m_bInterceptScrollLock : 1;
+
+public:
+ std::unique_ptr<CCommandSet> m_activeCommandSet;
+
+ std::array<CommandID, 10> m_lastCommands;
+ size_t m_lastCommandPos = 0;
+
+public:
+ CInputHandler(CWnd *mainframe);
+ CommandID GeneralKeyEvent(InputTargetContext context, int code, WPARAM wParam , LPARAM lParam);
+ CommandID KeyEvent(InputTargetContext context, UINT &nChar, UINT &nRepCnt, UINT &nFlags, KeyEventType keyEventType, CWnd *pSourceWnd = nullptr);
+ static KeyEventType GetKeyEventType(UINT nFlags);
+ bool IsKeyPressHandledByTextBox(DWORD wparam, HWND hWnd) const;
+ CommandID HandleMIDIMessage(InputTargetContext context, uint32 message);
+
+ int GetKeyListSize(CommandID cmd) const;
+
+protected:
+ void LogModifiers();
+ bool CatchModifierChange(WPARAM wParam, KeyEventType keyEventType, int scancode);
+ bool InterceptSpecialKeys(UINT nChar, UINT nFlags, bool generateMsg);
+ void SetupSpecialKeyInterception();
+ CommandID SendCommands(CWnd *wnd, const KeyMapRange &cmd);
+
+public:
+ bool ShiftPressed() const;
+ bool SelectionPressed() const;
+ bool CtrlPressed() const;
+ bool AltPressed() const;
+ bool IsBypassed() const;
+ void Bypass(bool);
+ FlagSet<Modifiers> GetModifierMask() const;
+ void SetModifierMask(FlagSet<Modifiers> mask);
+ CString GetKeyTextFromCommand(CommandID c, const TCHAR *prependText = nullptr) const;
+ CString GetMenuText(UINT id) const;
+ void UpdateMainMenu();
+ void SetNewCommandSet(const CCommandSet *newSet);
+ bool SetEffectLetters(const CModSpecifications &modSpecs);
+};
+
+
+// RAII object for temporarily bypassing the input handler
+class BypassInputHandler
+{
+private:
+ bool bypassed = false;
+public:
+ BypassInputHandler();
+ ~BypassInputHandler();
+};
+
+OPENMPT_NAMESPACE_END