Remember selected position for each folder/tab (#859)

* Remember Last Tab Position

* Remember Last Tab Position

* Remember Last Tab Position

* Remember Last Tab Position

* Remember Last Tab Position
This commit is contained in:
Edi316 authored and GitHub committed 2026-04-02 10:26:23 +02:00
1 parent 80274d1a04
commit 6deb5acbc8
4 files changed
+64 -16

No files matched your search

+48 -3
View File
@@ -125,6 +125,18 @@ namespace Vocaluxe.Screens
return _PlayerSelect; return _PlayerSelect;
} }
private static int _StaticSelectedCategoryIndex = -1;
private static void SetStaticSelectedCategoryIndex(int categoryIndex)
{
_StaticSelectedCategoryIndex = categoryIndex;
}
private static int GetStaticSelectedCategoryIndex()
{
return _StaticSelectedCategoryIndex;
}
private static int _StaticSelectedSongID; private static int _StaticSelectedSongID;
private static void setStaticSelectedSongID(int songID) private static void setStaticSelectedSongID(int songID)
@@ -769,6 +781,7 @@ namespace Vocaluxe.Screens
else if (_Sso.Selection.CategoryChangeAllowed) else if (_Sso.Selection.CategoryChangeAllowed)
{ {
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
_SelectedCategoryIndex = _SongMenu.GetSelectedCategory();
_SongMenu.EnterSelectedCategory(); _SongMenu.EnterSelectedCategory();
} }
} }
@@ -790,9 +803,9 @@ namespace Vocaluxe.Screens
_SongMenu.SetSelectedCategory(_SelectedCategoryIndex); _SongMenu.SetSelectedCategory(_SelectedCategoryIndex);
_SongMenu.EnterSelectedCategory(); _SongMenu.EnterSelectedCategory();
} }
else else if (CBase.Songs.IsInCategory())
{ {
_SongMenu.LeaveSelectedCategory(); CBase.Songs.SetCategory(-1);
} }
} }
_SearchActive = _Sso.Sorting.SearchActive; _SearchActive = _Sso.Sorting.SearchActive;
@@ -801,6 +814,32 @@ namespace Vocaluxe.Screens
CGame.Reset(); CGame.Reset();
_SongMenu.OnShow(); _SongMenu.OnShow();
if (_Sso.Sorting.Tabs == EOffOn.TR_CONFIG_ON)
{
int lastCategoryIndex = GetStaticSelectedCategoryIndex();
if (CBase.Songs.IsInCategory())
CBase.Songs.SetCategory(-1);
_SongMenu.OnShow();
if (lastCategoryIndex >= 0 && lastCategoryIndex < CSongs.Categories.Count)
_SongMenu.SetSelectedCategory(lastCategoryIndex);
}
int lastSongId = getSelectedSongID();
if (CSongs.IsInCategory && lastSongId >= 0)
{
for (int i = 0; i < CSongs.VisibleSongs.Count; i++)
{
if (CSongs.VisibleSongs[i].ID == lastSongId)
{
_SongMenu.SetSelectedSong(i);
break;
}
}
}
if (_Sso.Selection.PartyMode) if (_Sso.Selection.PartyMode)
{ {
_ClosePlaylist(); _ClosePlaylist();
@@ -1049,6 +1088,9 @@ namespace Vocaluxe.Screens
{ {
if (CSongs.IsInCategory && (songNr >= 0)) if (CSongs.IsInCategory && (songNr >= 0))
{ {
SetStaticSelectedCategoryIndex(CBase.Songs.GetCurrentCategoryIndex());
setStaticSelectedSongID(CSongs.VisibleSongs[songNr].ID);
EGameMode gm; EGameMode gm;
if (_AvailableGameModes.Count >= _SelectSlides[_SelectSlideOptionsMode].Selection) if (_AvailableGameModes.Count >= _SelectSlides[_SelectSlideOptionsMode].Selection)
gm = _AvailableGameModes[_SelectSlides[_SelectSlideOptionsMode].Selection]; gm = _AvailableGameModes[_SelectSlides[_SelectSlideOptionsMode].Selection];
@@ -1077,7 +1119,10 @@ namespace Vocaluxe.Screens
{ {
if (CSongs.IsInCategory && songNr >= 0 && CSongs.NumSongsVisible > songNr) if (CSongs.IsInCategory && songNr >= 0 && CSongs.NumSongsVisible > songNr)
{ {
EGameMode gm = CSongs.VisibleSongs[songNr].IsDuet ? EGameMode.TR_GAMEMODE_DUET : EGameMode.TR_GAMEMODE_NORMAL; SetStaticSelectedCategoryIndex(CBase.Songs.GetCurrentCategoryIndex());
setStaticSelectedSongID(CSongs.VisibleSongs[songNr].ID);
EGameMode gm = CSongs.VisibleSongs[songNr].IsDuet ? EGameMode.TR_GAMEMODE_DUET : EGameMode.TR_GAMEMODE_NORMAL;
CGame.Reset(); CGame.Reset();
CGame.ClearSongs(); CGame.ClearSongs();
@@ -299,9 +299,16 @@ namespace VocaluxeLib.Menu.SongMenu
public void LeaveSelectedCategory() public void LeaveSelectedCategory()
{ {
// Stefan1200: This was implemented with the pull request #359 and is the reason for the bug described in issue #390. if (!CBase.Songs.IsInCategory())
// Currently disabled until we know if this is still needed or we find a better solution! return;
// _LeaveCategory();
int oldCategory = CBase.Songs.GetCurrentCategoryIndex();
_LeaveCategory();
if (oldCategory >= 0 && oldCategory < CBase.Songs.GetNumCategories())
SetSelectedCategory(oldCategory);
else if (CBase.Songs.GetNumCategories() > 0)
SetSelectedCategory(0);
} }
public virtual void UnloadSkin() {} public virtual void UnloadSkin() {}
+3 -5
View File
@@ -1,4 +1,4 @@
#region license #region license
// This file is part of Vocaluxe. // This file is part of Vocaluxe.
// //
// Vocaluxe is free software: you can redistribute it and/or modify // Vocaluxe is free software: you can redistribute it and/or modify
@@ -358,7 +358,7 @@ namespace VocaluxeLib.Menu.SongMenu
case Keys.Back: case Keys.Back:
if (CBase.Songs.IsInCategory() && catChangePossible) if (CBase.Songs.IsInCategory() && catChangePossible)
{ {
_LeaveCategory(); LeaveSelectedCategory();
keyEvent.Handled = true; keyEvent.Handled = true;
} }
break; break;
@@ -510,7 +510,7 @@ namespace VocaluxeLib.Menu.SongMenu
if (CBase.Songs.IsInCategory() && CBase.Songs.GetNumCategories() > 0 && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && if (CBase.Songs.IsInCategory() && CBase.Songs.GetNumCategories() > 0 && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON &&
songOptions.Selection.CategoryChangeAllowed) songOptions.Selection.CategoryChangeAllowed)
{ {
_LeaveCategory(); LeaveSelectedCategory();
return true; return true;
} }
if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && !songOptions.Selection.PartyMode) if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && !songOptions.Selection.PartyMode)
@@ -611,8 +611,6 @@ namespace VocaluxeLib.Menu.SongMenu
protected override void _LeaveCategory() protected override void _LeaveCategory()
{ {
base._LeaveCategory(); base._LeaveCategory();
SetSelectedCategory(0);
_UpdateListIfRequired(); _UpdateListIfRequired();
} }
@@ -1,4 +1,4 @@
#region license #region license
// This file is part of Vocaluxe. // This file is part of Vocaluxe.
// //
// Vocaluxe is free software: you can redistribute it and/or modify // Vocaluxe is free software: you can redistribute it and/or modify
@@ -349,7 +349,7 @@ namespace VocaluxeLib.Menu.SongMenu
case Keys.Back: case Keys.Back:
if (CBase.Songs.IsInCategory() && catChangePossible) if (CBase.Songs.IsInCategory() && catChangePossible)
{ {
_LeaveCategory(); LeaveSelectedCategory();
keyEvent.Handled = true; keyEvent.Handled = true;
} }
break; break;
@@ -499,7 +499,7 @@ namespace VocaluxeLib.Menu.SongMenu
if (CBase.Songs.IsInCategory() && CBase.Songs.GetNumCategories() > 0 && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && if (CBase.Songs.IsInCategory() && CBase.Songs.GetNumCategories() > 0 && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON &&
songOptions.Selection.CategoryChangeAllowed) songOptions.Selection.CategoryChangeAllowed)
{ {
_LeaveCategory(); LeaveSelectedCategory();
return true; return true;
} }
if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && !songOptions.Selection.PartyMode) if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && !songOptions.Selection.PartyMode)
@@ -576,8 +576,6 @@ namespace VocaluxeLib.Menu.SongMenu
protected override void _LeaveCategory() protected override void _LeaveCategory()
{ {
base._LeaveCategory(); base._LeaveCategory();
SetSelectedCategory(0);
_UpdateListIfRequired(); _UpdateListIfRequired();
} }