Merge keeps currently selected droplet

This commit is contained in:
Christian Colglazier 2022-01-22 15:01:36 -05:00
parent af3bf7bcf5
commit 8618675c2d
3 changed files with 41 additions and 4 deletions

View File

@ -40,10 +40,18 @@ void ProcessControls() {
droplet_right = GetDroplet(DropletState::kRight, droplet_right = GetDroplet(DropletState::kRight,
left_menu->GetBufferState()); left_menu->GetBufferState());
} }
// Disable split // Merge
else { else {
droplet_left->UpdateState(DropletState::kFull); if (selected_menu == left_menu) {
delete droplet_right; 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 // Switch side

View File

@ -109,6 +109,17 @@ MenuState Menu::GetState() {
return highlighted->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() { MenuState Menu::GetBufferState() {
return buffer->GetState(); return buffer->GetState();
} }
@ -124,8 +135,12 @@ void Menu::UpdateMenuState() {
} }
void Menu::Select() { void Menu::Select() {
Select(highlighted);
}
void Menu::Select(MenuItem* item) {
if (selected->GetState() != MenuState::kSplit) { if (selected->GetState() != MenuState::kSplit) {
buffer = selected; buffer = selected;
} }
selected = highlighted; selected = item;
} }

View File

@ -85,6 +85,13 @@ class Menu {
*/ */
MenuState GetState(); MenuState GetState();
/*
* Set the menu state.
*
* @param state menu state
*/
void SetState(MenuState state);
/* /*
* Returns the previously selected menu item. * Returns the previously selected menu item.
* *
@ -102,6 +109,13 @@ class Menu {
* Select the currently highlighted menu item. * Select the currently highlighted menu item.
*/ */
void Select(); void Select();
/*
* Select the given menu item.
*
* @param item menu item to select
*/
void Select(MenuItem* item);
}; };
#endif // DROPLETS_MENU_H_ #endif // DROPLETS_MENU_H_