diff --git a/src/config.cpp b/src/config.cpp index 31a148c8..ace17016 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -84,6 +84,7 @@ void CConfig::Load (void) m_nEncoderPinClock = m_Properties.GetNumber ("EncoderPinClock", 5); m_nEncoderPinData = m_Properties.GetNumber ("EncoderPinData", 6); m_nEncoderPinSwitch = m_Properties.GetNumber ("EncoderPinSwitch", 26); + m_bEncoderClickIsConfirm = m_Properties.GetNumber ("EncoderClickIsConfirm", 0) != 0; m_bMIDIDumpEnabled = m_Properties.GetNumber ("MIDIDumpEnabled", 0) != 0; m_bProfileEnabled = m_Properties.GetNumber ("ProfileEnabled", 0) != 0; @@ -194,6 +195,11 @@ unsigned CConfig::GetEncoderPinSwitch (void) const return m_nEncoderPinSwitch; } +bool CConfig::GetEncoderClickIsConfirm (void) const +{ + return m_bEncoderClickIsConfirm; +} + bool CConfig::GetMIDIDumpEnabled (void) const { return m_bMIDIDumpEnabled; diff --git a/src/config.h b/src/config.h index 5c4ada6e..22a3fa84 100644 --- a/src/config.h +++ b/src/config.h @@ -93,6 +93,7 @@ class CConfig // Configuration for MiniDexed unsigned GetEncoderPinClock (void) const; unsigned GetEncoderPinData (void) const; unsigned GetEncoderPinSwitch (void) const; + bool GetEncoderClickIsConfirm (void) const; // Debug bool GetMIDIDumpEnabled (void) const; @@ -125,6 +126,7 @@ class CConfig // Configuration for MiniDexed unsigned m_nEncoderPinClock; unsigned m_nEncoderPinData; unsigned m_nEncoderPinSwitch; + bool m_bEncoderClickIsConfirm; bool m_bMIDIDumpEnabled; bool m_bProfileEnabled; diff --git a/src/minidexed.ini b/src/minidexed.ini index 327b6498..2e6f8131 100644 --- a/src/minidexed.ini +++ b/src/minidexed.ini @@ -31,6 +31,7 @@ EncoderEnabled=1 EncoderPinClock=5 EncoderPinData=6 EncoderPinSwitch=26 +EncoderClickIsConfirm=0 # Debug MIDIDumpEnabled=0 diff --git a/src/uimenu.cpp b/src/uimenu.cpp index 51344d9c..0375bfc8 100644 --- a/src/uimenu.cpp +++ b/src/uimenu.cpp @@ -254,9 +254,10 @@ const char CUIMenu::s_NoteName[100][4] = }; static const unsigned NoteC3 = 27; -CUIMenu::CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed) +CUIMenu::CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed, CConfig *pConfig) : m_pUI (pUI), m_pMiniDexed (pMiniDexed), + m_pConfig (pConfig), m_pParentMenu (s_MenuRoot), m_pCurrentMenu (s_MainMenu), m_nCurrentMenuItem (0), @@ -393,6 +394,14 @@ void CUIMenu::EditGlobalParameter (CUIMenu *pUIMenu, TMenuEvent Event) } pUIMenu->m_pMiniDexed->SetParameter (Param, nValue); break; + + case MenuEventSelect: + if( pUIMenu->m_pConfig->GetEncoderClickIsConfirm() ) + { + // when a parameter is selected --> accept change and return one level up + pUIMenu->EventHandler( CUIMenu::MenuEventBack ); + } + return; default: return; @@ -444,6 +453,14 @@ void CUIMenu::EditVoiceBankNumber (CUIMenu *pUIMenu, TMenuEvent Event) pUIMenu->TGShortcutHandler (Event); return; + case MenuEventSelect: + if( pUIMenu->m_pConfig->GetEncoderClickIsConfirm() ) + { + // when a parameter is selected --> accept change and return one level up + pUIMenu->EventHandler( CUIMenu::MenuEventBack ); + } + return; + default: return; } @@ -492,6 +509,14 @@ void CUIMenu::EditProgramNumber (CUIMenu *pUIMenu, TMenuEvent Event) pUIMenu->TGShortcutHandler (Event); return; + case MenuEventSelect: + if( pUIMenu->m_pConfig->GetEncoderClickIsConfirm() ) + { + // when a parameter is selected --> accept change and return one level up + pUIMenu->EventHandler( CUIMenu::MenuEventBack ); + } + return; + default: return; } @@ -544,6 +569,14 @@ void CUIMenu::EditTGParameter (CUIMenu *pUIMenu, TMenuEvent Event) pUIMenu->TGShortcutHandler (Event); return; + case MenuEventSelect: + if( pUIMenu->m_pConfig->GetEncoderClickIsConfirm() ) + { + // when a parameter is selected --> accept change and return one level up + pUIMenu->EventHandler( CUIMenu::MenuEventBack ); + } + return; + default: return; } @@ -596,6 +629,14 @@ void CUIMenu::EditVoiceParameter (CUIMenu *pUIMenu, TMenuEvent Event) pUIMenu->TGShortcutHandler (Event); return; + case MenuEventSelect: + if( pUIMenu->m_pConfig->GetEncoderClickIsConfirm() ) + { + // when a parameter is selected --> accept change and return one level up + pUIMenu->EventHandler( CUIMenu::MenuEventBack ); + } + return; + default: return; } @@ -649,6 +690,14 @@ void CUIMenu::EditOPParameter (CUIMenu *pUIMenu, TMenuEvent Event) pUIMenu->OPShortcutHandler (Event); return; + case MenuEventSelect: + if( pUIMenu->m_pConfig->GetEncoderClickIsConfirm() ) + { + // when a parameter is selected --> accept change and return one level up + pUIMenu->EventHandler( CUIMenu::MenuEventBack ); + } + return; + default: return; } diff --git a/src/uimenu.h b/src/uimenu.h index f48f6594..ee90ba86 100644 --- a/src/uimenu.h +++ b/src/uimenu.h @@ -28,6 +28,7 @@ class CMiniDexed; class CUserInterface; +class CConfig; class CUIMenu { @@ -49,7 +50,7 @@ class CUIMenu }; public: - CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed); + CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed, CConfig *pConfig); void EventHandler (TMenuEvent Event); @@ -110,6 +111,7 @@ class CUIMenu private: CUserInterface *m_pUI; CMiniDexed *m_pMiniDexed; + CConfig *m_pConfig; const TMenuItem *m_pParentMenu; const TMenuItem *m_pCurrentMenu; diff --git a/src/userinterface.cpp b/src/userinterface.cpp index 0fbf440f..a5da0ee2 100644 --- a/src/userinterface.cpp +++ b/src/userinterface.cpp @@ -35,7 +35,7 @@ CUserInterface::CUserInterface (CMiniDexed *pMiniDexed, CGPIOManager *pGPIOManag m_pLCDBuffered (0), m_pRotaryEncoder (0), m_bSwitchPressed (false), - m_Menu (this, pMiniDexed) + m_Menu (this, pMiniDexed, pConfig) { } @@ -91,6 +91,8 @@ bool CUserInterface::Initialize (void) m_pRotaryEncoder->RegisterEventHandler (EncoderEventStub, this); LOGDBG ("Rotary encoder initialized"); + if( m_pConfig->GetEncoderClickIsConfirm() ) + LOGDBG ("Encoder click is Confirm, dbl click is up"); } m_Menu.EventHandler (CUIMenu::MenuEventUpdate); @@ -197,11 +199,19 @@ void CUserInterface::EncoderEventHandler (CKY040::TEvent Event) break; case CKY040::EventSwitchClick: - m_Menu.EventHandler (CUIMenu::MenuEventBack); + // Click = Select / Confirm (option) or Back / Up (Default) + if( m_pConfig->GetEncoderClickIsConfirm() ) + m_Menu.EventHandler (CUIMenu::MenuEventSelect); + else + m_Menu.EventHandler (CUIMenu::MenuEventBack); break; case CKY040::EventSwitchDoubleClick: - m_Menu.EventHandler (CUIMenu::MenuEventSelect); + // Double Click = Back / Up (option) or Select (Default) + if( m_pConfig->GetEncoderClickIsConfirm() ) + m_Menu.EventHandler (CUIMenu::MenuEventBack); + else + m_Menu.EventHandler (CUIMenu::MenuEventSelect); break; case CKY040::EventSwitchTripleClick: