From 4c4445c9e5fcb118735acac76c2bc9a3c3fdad8a Mon Sep 17 00:00:00 2001 From: in1tiate <32779090+in1tiate@users.noreply.github.com> Date: Sun, 9 Feb 2025 18:10:22 -0600 Subject: [PATCH 1/2] remember category expansion state when regenerating musiclist --- src/courtroom.cpp | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/courtroom.cpp b/src/courtroom.cpp index fd6b4c554..1d08c5516 100644 --- a/src/courtroom.cpp +++ b/src/courtroom.cpp @@ -1678,6 +1678,17 @@ void Courtroom::enter_courtroom() // Todo: multithread this due to some servers having large as hell music list void Courtroom::list_music() { + // remember collapsed categories + QStringList collapsed_categories; + for (int i = 0; i < ui_music_list->topLevelItemCount(); ++i) + { + const auto pCategory = ui_music_list->topLevelItem(i); + if (!pCategory->isExpanded()) + { + collapsed_categories.append(pCategory->text(0)); + } + } + ui_music_list->clear(); // ui_music_search->setText(""); @@ -1767,9 +1778,23 @@ void Courtroom::list_music() } } - ui_music_list->expandAll(); // Needs to somehow remember which categories were - // expanded/collapsed if the music list didn't - // change since last time + ui_music_list->expandAll(); + + // restore expanded state from before the list was reset + // disable animations while we do this + ui_music_list->setAnimated(false); + for (int i = 0; i < ui_music_list->topLevelItemCount(); ++i) + { + const auto pCategory = ui_music_list->topLevelItem(i); + if (collapsed_categories.contains(pCategory->text(0))) + { + pCategory->setExpanded(false); + } + } + // restore animated state + QString music_list_animated = ao_app->get_design_element("music_list_animated", "courtroom_design.ini"); + ui_music_list->setAnimated(music_list_animated == "1" || music_list_animated.startsWith("true")); + if (ui_music_search->text() != "") { on_music_search_edited(ui_music_search->text()); From 48016f7b4e3ff9e6dda4b3c8c5897bfdce943f2e Mon Sep 17 00:00:00 2001 From: in1tiate <32779090+in1tiate@users.noreply.github.com> Date: Sun, 9 Feb 2025 18:12:47 -0600 Subject: [PATCH 2/2] don't do file i/o here actually --- src/courtroom.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/courtroom.cpp b/src/courtroom.cpp index 1d08c5516..0f8993641 100644 --- a/src/courtroom.cpp +++ b/src/courtroom.cpp @@ -1782,6 +1782,7 @@ void Courtroom::list_music() // restore expanded state from before the list was reset // disable animations while we do this + bool was_animated = ui_music_list->isAnimated(); ui_music_list->setAnimated(false); for (int i = 0; i < ui_music_list->topLevelItemCount(); ++i) { @@ -1792,8 +1793,7 @@ void Courtroom::list_music() } } // restore animated state - QString music_list_animated = ao_app->get_design_element("music_list_animated", "courtroom_design.ini"); - ui_music_list->setAnimated(music_list_animated == "1" || music_list_animated.startsWith("true")); + ui_music_list->setAnimated(was_animated); if (ui_music_search->text() != "") {