@@ -1678,6 +1678,17 @@ void Courtroom::enter_courtroom()
16781678// Todo: multithread this due to some servers having large as hell music list
16791679void Courtroom::list_music ()
16801680{
1681+ // remember collapsed categories
1682+ QStringList collapsed_categories;
1683+ for (int i = 0 ; i < ui_music_list->topLevelItemCount (); ++i)
1684+ {
1685+ const auto pCategory = ui_music_list->topLevelItem (i);
1686+ if (!pCategory->isExpanded ())
1687+ {
1688+ collapsed_categories.append (pCategory->text (0 ));
1689+ }
1690+ }
1691+
16811692 ui_music_list->clear ();
16821693 // ui_music_search->setText("");
16831694
@@ -1767,9 +1778,23 @@ void Courtroom::list_music()
17671778 }
17681779 }
17691780
1770- ui_music_list->expandAll (); // Needs to somehow remember which categories were
1771- // expanded/collapsed if the music list didn't
1772- // change since last time
1781+ ui_music_list->expandAll ();
1782+
1783+ // restore expanded state from before the list was reset
1784+ // disable animations while we do this
1785+ bool was_animated = ui_music_list->isAnimated ();
1786+ ui_music_list->setAnimated (false );
1787+ for (int i = 0 ; i < ui_music_list->topLevelItemCount (); ++i)
1788+ {
1789+ const auto pCategory = ui_music_list->topLevelItem (i);
1790+ if (collapsed_categories.contains (pCategory->text (0 )))
1791+ {
1792+ pCategory->setExpanded (false );
1793+ }
1794+ }
1795+ // restore animated state
1796+ ui_music_list->setAnimated (was_animated);
1797+
17731798 if (ui_music_search->text () != " " )
17741799 {
17751800 on_music_search_edited (ui_music_search->text ());
@@ -5772,12 +5797,12 @@ void Courtroom::on_music_list_context_menu_requested(const QPoint &pos)
57725797 menu->addSeparator ();
57735798
57745799 QTreeWidgetItem *current_song = ui_music_list->currentItem ();
5775- if (ui_music_list->currentItem ()->text (2 ) == " 1" )
5800+ if (ui_music_list->currentItem () && ui_music_list-> currentItem () ->text (2 ) == " 1" )
57765801 {
57775802 menu->addAction (QString (tr (" Remove Favorite" )), this , [this , current_song] { Courtroom::remove_favorite_song (current_song); });
57785803 menu->addSeparator ();
57795804 }
5780- else
5805+ else if (ui_music_list-> currentItem ())
57815806 {
57825807 menu->addAction (QString (tr (" Add Favorite" )), this , [this , current_song] { Courtroom::add_favorite_song (current_song); });
57835808 menu->addSeparator ();
@@ -5895,12 +5920,16 @@ void Courtroom::music_list_expand_all()
58955920void Courtroom::music_list_collapse_all ()
58965921{
58975922 ui_music_list->collapseAll ();
5898- QTreeWidgetItem *current = ui_music_list-> selectedItems ()[ 0 ];
5899- if (current-> parent () != nullptr )
5923+ // If we had a selection, restore it, or select its parent
5924+ if (ui_music_list-> selectedItems (). size () > 0 )
59005925 {
5901- current = current->parent ();
5926+ QTreeWidgetItem *current = ui_music_list->selectedItems ()[0 ];
5927+ if (current->parent () != nullptr )
5928+ {
5929+ current = current->parent ();
5930+ }
5931+ ui_music_list->setCurrentItem (current);
59025932 }
5903- ui_music_list->setCurrentItem (current);
59045933}
59055934
59065935void Courtroom::music_stop (bool no_effects)
0 commit comments