1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 00:17:46 +00:00

SoundPlayer: Use GUI::ActionGroup for Visualization menu

Removed the old custom checkbox selection code in the Visualization
menu and replaced them with GUI::ActionGroup with set_exclusive
enabled instead :^)
This commit is contained in:
Thitat Auareesuksakul 2021-09-01 21:08:43 +07:00 committed by Andreas Kling
parent 4de0f68486
commit 1600d5a446

View file

@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, the SerenityOS developers.
* *
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
@ -10,6 +11,7 @@
#include "SoundPlayerWidgetAdvancedView.h" #include "SoundPlayerWidgetAdvancedView.h"
#include <LibAudio/ClientConnection.h> #include <LibAudio/ClientConnection.h>
#include <LibGUI/Action.h> #include <LibGUI/Action.h>
#include <LibGUI/ActionGroup.h>
#include <LibGUI/Application.h> #include <LibGUI/Application.h>
#include <LibGUI/FilePicker.h> #include <LibGUI/FilePicker.h>
#include <LibGUI/Menu.h> #include <LibGUI/Menu.h>
@ -101,49 +103,27 @@ int main(int argc, char** argv)
playback_menu.add_action(move(loop)); playback_menu.add_action(move(loop));
auto& visualization_menu = window->add_menu("&Visualization"); auto& visualization_menu = window->add_menu("&Visualization");
Vector<NonnullRefPtr<GUI::Action>> visualization_checkmarks; GUI::ActionGroup visualization_actions;
GUI::Action* checked_vis = nullptr; visualization_actions.set_exclusive(true);
auto uncheck_all_but = [&](GUI::Action& one) {for (auto& a : visualization_checkmarks) if (a != &one) a->set_checked(false); };
auto bars = GUI::Action::create_checkable("&Bars", [&](auto& action) { auto bars = GUI::Action::create_checkable("&Bars", [&](auto&) {
uncheck_all_but(action);
if (checked_vis == &action) {
action.set_checked(true);
return;
}
checked_vis = &action;
static_cast<SoundPlayerWidgetAdvancedView*>(player)->set_visualization<BarsVisualizationWidget>(); static_cast<SoundPlayerWidgetAdvancedView*>(player)->set_visualization<BarsVisualizationWidget>();
}); });
bars->set_checked(true); bars->set_checked(true);
visualization_menu.add_action(bars); visualization_menu.add_action(bars);
visualization_checkmarks.append(bars); visualization_actions.add_action(bars);
auto samples = GUI::Action::create_checkable("&Samples", [&](auto& action) { auto samples = GUI::Action::create_checkable("&Samples", [&](auto&) {
uncheck_all_but(action);
if (checked_vis == &action) {
action.set_checked(true);
return;
}
checked_vis = &action;
static_cast<SoundPlayerWidgetAdvancedView*>(player)->set_visualization<SampleWidget>(); static_cast<SoundPlayerWidgetAdvancedView*>(player)->set_visualization<SampleWidget>();
}); });
visualization_menu.add_action(samples); visualization_menu.add_action(samples);
visualization_checkmarks.append(samples); visualization_actions.add_action(samples);
auto none = GUI::Action::create_checkable("&None", [&](auto& action) { auto none = GUI::Action::create_checkable("&None", [&](auto&) {
uncheck_all_but(action);
if (checked_vis == &action) {
action.set_checked(true);
return;
}
checked_vis = &action;
static_cast<SoundPlayerWidgetAdvancedView*>(player)->set_visualization<NoVisualizationWidget>(); static_cast<SoundPlayerWidgetAdvancedView*>(player)->set_visualization<NoVisualizationWidget>();
}); });
visualization_menu.add_action(none); visualization_menu.add_action(none);
visualization_checkmarks.append(none); visualization_actions.add_action(none);
auto& help_menu = window->add_menu("&Help"); auto& help_menu = window->add_menu("&Help");
help_menu.add_action(GUI::CommonActions::make_about_action("Sound Player", app_icon, window)); help_menu.add_action(GUI::CommonActions::make_about_action("Sound Player", app_icon, window));