diff --git a/src/main.cpp b/src/main.cpp index cad7b0f..a7d7c89 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -40,10 +40,18 @@ void ProcessControls() { droplet_right = GetDroplet(DropletState::kRight, left_menu->GetBufferState()); } - // Disable split + // Merge else { - droplet_left->UpdateState(DropletState::kFull); - delete droplet_right; + if (selected_menu == left_menu) { + droplet_left->UpdateState(DropletState::kFull); + delete droplet_right; + } else { + droplet_right->UpdateState(DropletState::kFull); + delete droplet_left; + droplet_left = droplet_right; + left_menu->SetState(right_menu->GetBufferState()); + selected_menu = left_menu; + } } } // Switch side diff --git a/src/menu.cpp b/src/menu.cpp index 3610814..bf0457d 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -109,6 +109,17 @@ MenuState Menu::GetState() { return highlighted->GetState(); } +void Menu::SetState(MenuState state) { + MenuItem* ptr = head; + while(ptr != NULL) { + if (ptr->GetState() == state) { + Select(ptr); + return; + } + ptr = ptr->GetNext(); + } +} + MenuState Menu::GetBufferState() { return buffer->GetState(); } @@ -124,8 +135,12 @@ void Menu::UpdateMenuState() { } void Menu::Select() { + Select(highlighted); +} + +void Menu::Select(MenuItem* item) { if (selected->GetState() != MenuState::kSplit) { buffer = selected; } - selected = highlighted; + selected = item; } diff --git a/src/menu.h b/src/menu.h index e857b9d..4a74fdd 100644 --- a/src/menu.h +++ b/src/menu.h @@ -84,6 +84,13 @@ class Menu { * @return menu state */ MenuState GetState(); + + /* + * Set the menu state. + * + * @param state menu state + */ + void SetState(MenuState state); /* * Returns the previously selected menu item. @@ -102,6 +109,13 @@ class Menu { * Select the currently highlighted menu item. */ void Select(); + + /* + * Select the given menu item. + * + * @param item menu item to select + */ + void Select(MenuItem* item); }; #endif // DROPLETS_MENU_H_