UI behaviour is configurable

Parameter EncoderClickIsConfirm switches between two UI behaviours:
=0 (or missing): Default behaviour: click is Up, DblClick is down
<>0: Fast mode: click is confirm, DblClick is up
pull/155/head
fp64lib 3 years ago
parent 8e2d07b8e3
commit 521ea767a0
  1. 6
      src/config.cpp
  2. 2
      src/config.h
  3. 3
      src/minidexed.ini
  4. 46
      src/uimenu.cpp
  5. 4
      src/uimenu.h
  6. 18
      src/userinterface.cpp

@ -84,6 +84,7 @@ void CConfig::Load (void)
m_nEncoderPinClock = m_Properties.GetNumber ("EncoderPinClock", 5); m_nEncoderPinClock = m_Properties.GetNumber ("EncoderPinClock", 5);
m_nEncoderPinData = m_Properties.GetNumber ("EncoderPinData", 6); m_nEncoderPinData = m_Properties.GetNumber ("EncoderPinData", 6);
m_nEncoderPinSwitch = m_Properties.GetNumber ("EncoderPinSwitch", 26); m_nEncoderPinSwitch = m_Properties.GetNumber ("EncoderPinSwitch", 26);
m_bEncoderClickIsConfirm = m_Properties.GetNumber ("EncoderClickIsConfirm", 0) != 0;
m_bMIDIDumpEnabled = m_Properties.GetNumber ("MIDIDumpEnabled", 0) != 0; m_bMIDIDumpEnabled = m_Properties.GetNumber ("MIDIDumpEnabled", 0) != 0;
m_bProfileEnabled = m_Properties.GetNumber ("ProfileEnabled", 0) != 0; m_bProfileEnabled = m_Properties.GetNumber ("ProfileEnabled", 0) != 0;
@ -194,6 +195,11 @@ unsigned CConfig::GetEncoderPinSwitch (void) const
return m_nEncoderPinSwitch; return m_nEncoderPinSwitch;
} }
bool CConfig::GetEncoderClickIsConfirm (void) const
{
return m_bEncoderClickIsConfirm;
}
bool CConfig::GetMIDIDumpEnabled (void) const bool CConfig::GetMIDIDumpEnabled (void) const
{ {
return m_bMIDIDumpEnabled; return m_bMIDIDumpEnabled;

@ -93,6 +93,7 @@ public:
unsigned GetEncoderPinClock (void) const; unsigned GetEncoderPinClock (void) const;
unsigned GetEncoderPinData (void) const; unsigned GetEncoderPinData (void) const;
unsigned GetEncoderPinSwitch (void) const; unsigned GetEncoderPinSwitch (void) const;
bool GetEncoderClickIsConfirm (void) const;
// Debug // Debug
bool GetMIDIDumpEnabled (void) const; bool GetMIDIDumpEnabled (void) const;
@ -125,6 +126,7 @@ private:
unsigned m_nEncoderPinClock; unsigned m_nEncoderPinClock;
unsigned m_nEncoderPinData; unsigned m_nEncoderPinData;
unsigned m_nEncoderPinSwitch; unsigned m_nEncoderPinSwitch;
bool m_bEncoderClickIsConfirm;
bool m_bMIDIDumpEnabled; bool m_bMIDIDumpEnabled;
bool m_bProfileEnabled; bool m_bProfileEnabled;

@ -14,7 +14,7 @@ ChannelsSwapped=0
# MIDI # MIDI
MIDIBaudRate=31250 MIDIBaudRate=31250
#MIDIThru=umidi1,ttyS1 #MIDIThru=umidi1,ttyS1
MIDIRXProgramChange=1 MIDIRXProgramChange=0
# HD44780 LCD # HD44780 LCD
LCDEnabled=1 LCDEnabled=1
@ -31,6 +31,7 @@ EncoderEnabled=1
EncoderPinClock=5 EncoderPinClock=5
EncoderPinData=6 EncoderPinData=6
EncoderPinSwitch=26 EncoderPinSwitch=26
EncoderClickIsConfirm=0
# Debug # Debug
MIDIDumpEnabled=0 MIDIDumpEnabled=0

@ -254,9 +254,10 @@ const char CUIMenu::s_NoteName[100][4] =
}; };
static const unsigned NoteC3 = 27; static const unsigned NoteC3 = 27;
CUIMenu::CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed) CUIMenu::CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed, CConfig *pConfig)
: m_pUI (pUI), : m_pUI (pUI),
m_pMiniDexed (pMiniDexed), m_pMiniDexed (pMiniDexed),
m_pConfig (pConfig),
m_pParentMenu (s_MenuRoot), m_pParentMenu (s_MenuRoot),
m_pCurrentMenu (s_MainMenu), m_pCurrentMenu (s_MainMenu),
m_nCurrentMenuItem (0), m_nCurrentMenuItem (0),
@ -395,8 +396,11 @@ void CUIMenu::EditGlobalParameter (CUIMenu *pUIMenu, TMenuEvent Event)
break; break;
case MenuEventSelect: case MenuEventSelect:
// when a parameter is selected --> accept change and return one level up if( pUIMenu->m_pConfig->GetEncoderClickIsConfirm() )
pUIMenu->EventHandler( CUIMenu::MenuEventBack ); {
// when a parameter is selected --> accept change and return one level up
pUIMenu->EventHandler( CUIMenu::MenuEventBack );
}
return; return;
default: default:
@ -450,8 +454,11 @@ void CUIMenu::EditVoiceBankNumber (CUIMenu *pUIMenu, TMenuEvent Event)
return; return;
case MenuEventSelect: case MenuEventSelect:
// when a parameter is selected --> accept change and return one level up if( pUIMenu->m_pConfig->GetEncoderClickIsConfirm() )
pUIMenu->EventHandler( CUIMenu::MenuEventBack ); {
// when a parameter is selected --> accept change and return one level up
pUIMenu->EventHandler( CUIMenu::MenuEventBack );
}
return; return;
default: default:
@ -503,8 +510,11 @@ void CUIMenu::EditProgramNumber (CUIMenu *pUIMenu, TMenuEvent Event)
return; return;
case MenuEventSelect: case MenuEventSelect:
// when a parameter is selected --> accept change and return one level up if( pUIMenu->m_pConfig->GetEncoderClickIsConfirm() )
pUIMenu->EventHandler( CUIMenu::MenuEventBack ); {
// when a parameter is selected --> accept change and return one level up
pUIMenu->EventHandler( CUIMenu::MenuEventBack );
}
return; return;
default: default:
@ -560,8 +570,11 @@ void CUIMenu::EditTGParameter (CUIMenu *pUIMenu, TMenuEvent Event)
return; return;
case MenuEventSelect: case MenuEventSelect:
// when a parameter is selected --> accept change and return one level up if( pUIMenu->m_pConfig->GetEncoderClickIsConfirm() )
pUIMenu->EventHandler( CUIMenu::MenuEventBack ); {
// when a parameter is selected --> accept change and return one level up
pUIMenu->EventHandler( CUIMenu::MenuEventBack );
}
return; return;
default: default:
@ -616,6 +629,14 @@ void CUIMenu::EditVoiceParameter (CUIMenu *pUIMenu, TMenuEvent Event)
pUIMenu->TGShortcutHandler (Event); pUIMenu->TGShortcutHandler (Event);
return; 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: default:
return; return;
} }
@ -670,8 +691,11 @@ void CUIMenu::EditOPParameter (CUIMenu *pUIMenu, TMenuEvent Event)
return; return;
case MenuEventSelect: case MenuEventSelect:
// when a parameter is selected --> accept change and return one level up if( pUIMenu->m_pConfig->GetEncoderClickIsConfirm() )
pUIMenu->EventHandler( CUIMenu::MenuEventBack ); {
// when a parameter is selected --> accept change and return one level up
pUIMenu->EventHandler( CUIMenu::MenuEventBack );
}
return; return;
default: default:

@ -28,6 +28,7 @@
class CMiniDexed; class CMiniDexed;
class CUserInterface; class CUserInterface;
class CConfig;
class CUIMenu class CUIMenu
{ {
@ -49,7 +50,7 @@ public:
}; };
public: public:
CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed); CUIMenu (CUserInterface *pUI, CMiniDexed *pMiniDexed, CConfig *pConfig);
void EventHandler (TMenuEvent Event); void EventHandler (TMenuEvent Event);
@ -110,6 +111,7 @@ private:
private: private:
CUserInterface *m_pUI; CUserInterface *m_pUI;
CMiniDexed *m_pMiniDexed; CMiniDexed *m_pMiniDexed;
CConfig *m_pConfig;
const TMenuItem *m_pParentMenu; const TMenuItem *m_pParentMenu;
const TMenuItem *m_pCurrentMenu; const TMenuItem *m_pCurrentMenu;

@ -35,7 +35,7 @@ CUserInterface::CUserInterface (CMiniDexed *pMiniDexed, CGPIOManager *pGPIOManag
m_pLCDBuffered (0), m_pLCDBuffered (0),
m_pRotaryEncoder (0), m_pRotaryEncoder (0),
m_bSwitchPressed (false), 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); m_pRotaryEncoder->RegisterEventHandler (EncoderEventStub, this);
LOGDBG ("Rotary encoder initialized"); LOGDBG ("Rotary encoder initialized");
if( m_pConfig->GetEncoderClickIsConfirm() )
LOGDBG ("Encoder click is Confirm, dbl click is up");
} }
m_Menu.EventHandler (CUIMenu::MenuEventUpdate); m_Menu.EventHandler (CUIMenu::MenuEventUpdate);
@ -197,13 +199,19 @@ void CUserInterface::EncoderEventHandler (CKY040::TEvent Event)
break; break;
case CKY040::EventSwitchClick: case CKY040::EventSwitchClick:
// m_Menu.EventHandler (CUIMenu::MenuEventBack); // Click = Select / Confirm (option) or Back / Up (Default)
m_Menu.EventHandler (CUIMenu::MenuEventSelect); if( m_pConfig->GetEncoderClickIsConfirm() )
m_Menu.EventHandler (CUIMenu::MenuEventSelect);
else
m_Menu.EventHandler (CUIMenu::MenuEventBack);
break; break;
case CKY040::EventSwitchDoubleClick: case CKY040::EventSwitchDoubleClick:
// m_Menu.EventHandler (CUIMenu::MenuEventSelect); // Double Click = Back / Up (option) or Select (Default)
m_Menu.EventHandler (CUIMenu::MenuEventBack); if( m_pConfig->GetEncoderClickIsConfirm() )
m_Menu.EventHandler (CUIMenu::MenuEventBack);
else
m_Menu.EventHandler (CUIMenu::MenuEventSelect);
break; break;
case CKY040::EventSwitchTripleClick: case CKY040::EventSwitchTripleClick:

Loading…
Cancel
Save