From: <sv...@op...> - 2024-11-18 22:43:39
|
Author: sagamusix Date: Mon Nov 18 23:43:26 2024 New Revision: 22233 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22233 Log: [Imp] Keyboard config: Turn awkward Yes/No buttons for Repeat Notes on Hold into an auto-updating checkbox. Modified: trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/KeyConfigDlg.cpp trunk/OpenMPT/mptrack/KeyConfigDlg.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/CommandSet.h ============================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h Mon Nov 18 23:15:33 2024 (r22232) +++ trunk/OpenMPT/mptrack/CommandSet.h Mon Nov 18 23:43:26 2024 (r22233) @@ -1274,6 +1274,7 @@ // Communication KeyCombination GetKey(CommandID cmd, UINT key) const { return m_commands[cmd].kcList[key]; } + std::span<const KeyCombination> GetKeyChoices(CommandID cmd) const { return m_commands[cmd].kcList; } bool IsHidden(UINT c) const { return m_commands[c].IsHidden(); } int GetKeyListSize(CommandID cmd) const { return (cmd != kcNull) ? static_cast<int>(m_commands[cmd].kcList.size()) : 0; } CString GetCommandText(CommandID cmd) const { return m_commands[cmd].Message; } Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.cpp ============================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.cpp Mon Nov 18 23:15:33 2024 (r22232) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.cpp Mon Nov 18 23:43:26 2024 (r22233) @@ -148,8 +148,7 @@ ON_COMMAND(IDC_CHECKKEYDOWN, &COptionsKeyboard::OnCheck) ON_COMMAND(IDC_CHECKKEYHOLD, &COptionsKeyboard::OnCheck) ON_COMMAND(IDC_CHECKKEYUP, &COptionsKeyboard::OnCheck) - ON_COMMAND(IDC_NOTESREPEAT, &COptionsKeyboard::OnNotesRepeat) - ON_COMMAND(IDC_NONOTESREPEAT, &COptionsKeyboard::OnNoNotesRepeat) + ON_COMMAND(IDC_NOTESREPEAT, &COptionsKeyboard::OnToggleNotesRepeat) ON_COMMAND(IDC_RESTORE_KEYMAP, &COptionsKeyboard::OnRestoreDefaultKeymap) ON_COMMAND(ID_KEYPRESET_MPT, &COptionsKeyboard::OnRestoreMPTKeymap) ON_COMMAND(ID_KEYPRESET_IT, &COptionsKeyboard::OnRestoreITKeymap) @@ -537,10 +536,8 @@ if(searchByKey) { addKey = false; - int numChoices = m_localCmdSet->GetKeyListSize(com); - for(int choice = 0; choice < numChoices; choice++) + for(const KeyCombination &kc : m_localCmdSet->GetKeyChoices(com)) { - const KeyCombination &kc = m_localCmdSet->GetKey(com, choice); if(kc.KeyCode() == m_eFindHotKey.code && kc.Modifier() == m_eFindHotKey.mod) { addKey = true; @@ -779,7 +776,6 @@ void COptionsKeyboard::OnRestoreKeyChoice() { - KeyCombination kc; CommandID cmd = m_curCommand; CInputHandler *ih = CMainFrame::GetInputHandler(); @@ -796,14 +792,14 @@ // Restore the defaults for this key mpt::heap_value<CCommandSet> defaultSet; defaultSet->LoadDefaultKeymap(); - for(int i = 0; i < defaultSet->GetKeyListSize(cmd); i++) + for(const KeyCombination &kc : defaultSet->GetKeyChoices(cmd)) { - m_localCmdSet->Add(defaultSet->GetKey(cmd, i), cmd, true, m_curKeyChoice); + m_localCmdSet->Add(kc, cmd, true, m_curKeyChoice); } } else { // Restore current key combination choice for currently selected command. - kc = ih->m_activeCommandSet->GetKey(cmd, m_curKeyChoice); + KeyCombination kc = ih->m_activeCommandSet->GetKey(cmd, m_curKeyChoice); m_localCmdSet->Remove(m_curKeyChoice, cmd); UpdateWarning(m_localCmdSet->Add(kc, cmd, true, m_curKeyChoice)); } @@ -1057,17 +1053,10 @@ } -void COptionsKeyboard::OnNotesRepeat() +void COptionsKeyboard::OnToggleNotesRepeat() { - m_localCmdSet->QuickChange_NotesRepeat(true); - ForceUpdateGUI(); -} - - -void COptionsKeyboard::OnNoNotesRepeat() -{ - m_localCmdSet->QuickChange_NotesRepeat(false); - ForceUpdateGUI(); + m_localCmdSet->QuickChange_NotesRepeat(IsDlgButtonChecked(IDC_NOTESREPEAT) != BST_CHECKED); + ForceUpdateGUI(true); } @@ -1088,10 +1077,33 @@ if(const auto cmd = static_cast<CommandID>(m_lbnCommandKeys.GetItemData(i)); cmd != kcNull) m_lbnCommandKeys.SetItemText(i, 1, m_localCmdSet->GetKeyTextFromCommand(cmd)); } + UpdateNoteRepeatCheckbox(); } else if(m_curCommand != kcNull) { m_lbnCommandKeys.SetItemText(m_lbnCommandKeys.GetSelectionMark(), 1, m_localCmdSet->GetKeyTextFromCommand(m_curCommand)); + if(mpt::is_in_range(m_curCommand, kcVPStartNotes, kcVPEndNotes)) + UpdateNoteRepeatCheckbox(); + } +} + + +void COptionsKeyboard::UpdateNoteRepeatCheckbox() +{ + UINT state = uint32_max; + for(CommandID cmd = kcVPStartNotes; cmd <= kcVPEndNotes && state != BST_INDETERMINATE; cmd = static_cast<CommandID>(cmd + 1)) + { + for(auto &kc : m_localCmdSet->GetKeyChoices(cmd)) + { + const bool repeat = (kc.EventType() & kKeyEventRepeat); + if(repeat && (state == uint32_max || state == BST_CHECKED)) + state = BST_CHECKED; + else if(!repeat && (state == uint32_max || state == BST_UNCHECKED)) + state = BST_UNCHECKED; + else + state = BST_INDETERMINATE; + } } + CheckDlgButton(IDC_NOTESREPEAT, state); } Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.h ============================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.h Mon Nov 18 23:15:33 2024 (r22232) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.h Mon Nov 18 23:43:26 2024 (r22233) @@ -103,6 +103,7 @@ void DefineCommandCategories(); void ForceUpdateGUI(bool updateAllKeys = false); + void UpdateNoteRepeatCheckbox(); void InsertGroup(const TCHAR *title, int groupId); void UpdateShortcutList(int category = -1); void UpdateCategory(); @@ -131,8 +132,7 @@ afx_msg void OnChordWaitTimeChanged(); afx_msg void OnSettingsChanged() { SetModified(TRUE); } afx_msg void OnCheck() { OnSetKeyChoice(&m_eCustHotKey); }; - afx_msg void OnNotesRepeat(); - afx_msg void OnNoNotesRepeat(); + afx_msg void OnToggleNotesRepeat(); afx_msg void OnListenForKeys(); afx_msg void OnDeleteKeyChoice(); afx_msg void OnRestoreKeyChoice(); Modified: trunk/OpenMPT/mptrack/mptrack.rc ============================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc Mon Nov 18 23:15:33 2024 (r22232) +++ trunk/OpenMPT/mptrack/mptrack.rc Mon Nov 18 23:43:26 2024 (r22233) @@ -1266,9 +1266,7 @@ CONTROL "On Key Up",IDC_CHECKKEYUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,138,206,54,8 ICON "",IDC_STATIC1,12,223,20,20,SS_CENTERIMAGE | SS_REALSIZEIMAGE | NOT WS_VISIBLE LTEXT "No conflicts found.",IDC_KEYREPORT,26,224,254,13 - LTEXT "Repeat notes on hold?",IDC_STATIC,6,248,84,8 - PUSHBUTTON "Yes",IDC_NOTESREPEAT,90,246,24,12 - PUSHBUTTON "No",IDC_NONOTESREPEAT,120,246,24,12 + CONTROL "Repeat Note Keys on Hold",IDC_NOTESREPEAT,"Button",BS_3STATE | WS_TABSTOP,6,246,144,12 LTEXT "Chord detect interval (ms):",IDC_STATIC,156,248,94,8 EDITTEXT IDC_CHORDDETECTWAITTIME,252,246,30,12,ES_AUTOHSCROLL | ES_NUMBER PUSHBUTTON "&Import Key Map...",IDC_LOAD,6,264,72,13 Modified: trunk/OpenMPT/mptrack/resource.h ============================================================================== --- trunk/OpenMPT/mptrack/resource.h Mon Nov 18 23:15:33 2024 (r22232) +++ trunk/OpenMPT/mptrack/resource.h Mon Nov 18 23:43:26 2024 (r22233) @@ -662,8 +662,6 @@ #define IDC_FINDHOTKEY_LABEL 2107 #define IDC_NOTESREPEAT 2108 #define IDC_REMCHANSLIST 2108 -#define IDC_NOTESREPEAT2 2109 -#define IDC_NONOTESREPEAT 2109 #define IDC_EFFECTLETTERSIT 2110 #define IDC_INSVIEWPLG 2110 #define IDC_EFFECTLETTERSXM 2111 |