From 39bf2f940fc32fdba5bf2a087ceb4970099130d3 Mon Sep 17 00:00:00 2001 From: Christian Colglazier Date: Sat, 23 Oct 2021 17:22:17 -0400 Subject: [PATCH] Basic menu switching --- src/main.cpp | 55 ++++++++++++++++++++++++++++++++++++++-------------- src/main.h | 5 +++-- src/menu.cpp | 2 +- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 84372e6..b144530 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,6 +6,7 @@ int main(void) { patch.Init(); sample_rate = patch.AudioSampleRate(); droplet_left = GetDroplet(DropletState::kFull); + selected_menu = left_menu; patch.StartAdc(); patch.StartAudio(AudioThrough); @@ -19,40 +20,64 @@ int main(void) { void ProcessControls() { patch.ProcessAnalogControls(); patch.encoder.Debounce(); - if (left_menu.InMenu()) { - left_menu.UpdateMenuPosition(); + // Handle menu interactions + if (selected_menu->InMenu()) { + selected_menu->UpdateMenuPosition(); + // Handle menu selection if (patch.encoder.RisingEdge()) { - left_menu.SetInMenu(false); - if(left_menu.GetState() == MenuState::kSplit) { + selected_menu->SetInMenu(false); + // Split selected + if(selected_menu->GetState() == MenuState::kSplit) { manager->ToggleSplit(); + // Enable split if (manager->GetSplitMode()) { droplet_left->UpdateState(DropletState::kLeft); droplet_right = GetDroplet(DropletState::kRight); - } else { + } + // Disable split + else { droplet_left->UpdateState(DropletState::kFull); delete droplet_right; } - } else { - delete droplet_left; - if(manager->GetSplitMode()) { - droplet_left = GetDroplet(DropletState::kLeft); + } + // Switch side + else if (selected_menu->GetState() == MenuState::kChange) { + if (selected_menu == left_menu) { + selected_menu = right_menu; } else { + selected_menu = left_menu; + } + } + // Enable new mode + else { + if(manager->GetSplitMode()) { + if (selected_menu == left_menu) { + delete droplet_left; + droplet_left = GetDroplet(DropletState::kLeft); + } else { + delete droplet_right; + droplet_right = GetDroplet(DropletState::kRight); + } + } else { + delete droplet_left; droplet_left = GetDroplet(DropletState::kFull); } } } - } else { + } + // Check if entering menu + else { if (patch.encoder.Pressed()) { if (patch.encoder.TimeHeldMs() > 500 && patch.encoder.TimeHeldMs() < 505) { - left_menu.SetInMenu(true); + selected_menu->SetInMenu(true); } } } } void ProcessOutputs() { - if(!left_menu.InMenu()) { + if(!selected_menu->InMenu()) { droplet_left->Control(); if (manager->GetSplitMode()) { droplet_right->Control(); @@ -62,8 +87,8 @@ void ProcessOutputs() { void ProcessOled() { patch.display.Fill(false); - if (left_menu.InMenu()) { - left_menu.ProcessMenuOled(); + if (selected_menu->InMenu()) { + selected_menu->ProcessMenuOled(); } else { droplet_left->Draw(); if (manager->GetSplitMode()) { @@ -83,7 +108,7 @@ static void AudioThrough(AudioHandle::InputBuffer in, } Droplet* GetDroplet(DropletState state) { - switch(left_menu.GetState()) { + switch(selected_menu->GetState()) { case MenuState::kVCO: return new VCODroplet(&patch, state, diff --git a/src/main.h b/src/main.h index daac4ad..bb8052f 100644 --- a/src/main.h +++ b/src/main.h @@ -17,8 +17,9 @@ DaisyPatch patch; DropletManager* manager = new DropletManager(); -Menu left_menu(&patch, DropletState::kLeft, manager); -Menu right_menu(&patch, DropletState::kRight, manager); +Menu* selected_menu; +Menu* left_menu = new Menu(&patch, DropletState::kLeft, manager); +Menu* right_menu = new Menu(&patch, DropletState::kRight, manager); Droplet* droplet_left; Droplet* droplet_right; float sample_rate; diff --git a/src/menu.cpp b/src/menu.cpp index 004eb22..0bb6b5c 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -7,7 +7,7 @@ Menu::Menu(DaisyPatch* m_patch, state = m_state; state = m_state; } -const std::string MENU_ITEMS[] = {"Split", +const std::string MENU_ITEMS[] = {"TEST", "Change", "VCO", "Noise"};