diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index fb89cc72..8a4d5ff1 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -80,7 +80,6 @@ namespace Vocaluxe.Screens private readonly List _ButtonsJoker = new List(); private readonly List _TextsPlayer = new List(); private ESongOptionsView _CurSongOptionsView; - private bool _PlaylistActive; private readonly List _AvailableGameModes; private SScreenSongOptions _Sso; @@ -163,16 +162,26 @@ namespace Vocaluxe.Screens public override bool HandleInput(SKeyEvent keyEvent) { + if (_Playlist.Visible) + { + keyEvent.Handled = _Playlist.HandleInput(keyEvent); + if (keyEvent.Handled) + return true; + if (!keyEvent.KeyPressed && keyEvent.Key == Keys.Escape) + { + _ClosePlaylist(); + keyEvent.Handled = true; + return true; + } + } + + // Playlist selection is handled below not in base! + _Playlist.Selectable = false; base.HandleInput(keyEvent); + _Playlist.Selectable = true; if (keyEvent.Handled) return true; - if (_PlaylistActive) - { - _Playlist.HandleInput(keyEvent); - return true; - } - if (_CurSongOptionsView == ESongOptionsView.None) { if (keyEvent.KeyPressed && !Char.IsControl(keyEvent.Unicode) && keyEvent.Mod != EModifier.Ctrl) @@ -233,9 +242,8 @@ namespace Vocaluxe.Screens case Keys.Tab: if (_Playlist.Visible) { - _PlaylistActive = !_PlaylistActive; - _Playlist.Selected = _PlaylistActive; - _SongMenu.Selected = !_PlaylistActive; + _Playlist.Selected = !_Playlist.Selected; + _SongMenu.Selected = !_Playlist.Selected; } break; @@ -392,27 +400,18 @@ namespace Vocaluxe.Screens _OldMousePosX = mouseEvent.X; _OldMousePosY = mouseEvent.Y; - if (_Playlist.Visible && _Playlist.IsMouseOver(mouseEvent)) + if (_Playlist.Visible && _Playlist.Selected) { - _PlaylistActive = true; - _Playlist.Selected = _PlaylistActive; - _SongMenu.Selected = !_PlaylistActive; + _SongMenu.Selected = false; _ToggleSongOptions(ESongOptionsView.None); - } - else if (CHelper.IsInBounds(_SongMenu.Rect, mouseEvent)) - { - _PlaylistActive = false; - _Playlist.Selected = _PlaylistActive; - _SongMenu.Selected = !_PlaylistActive; - } - - - if (_Playlist.Visible && _PlaylistActive) - { if (_Playlist.HandleMouse(mouseEvent)) return true; } - + else if (CHelper.IsInBounds(_SongMenu.Rect, mouseEvent)) + { + _Playlist.Selected = false; + _SongMenu.Selected = true; + } if (mouseEvent.RB) { @@ -630,12 +629,12 @@ namespace Vocaluxe.Screens if (_Sso.Selection.PartyMode) { - _PlaylistActive = false; + _ClosePlaylist(); _ToggleSongOptions(ESongOptionsView.None); _SelectElement(_Buttons[_ButtonStart]); } - _SongMenu.Selected = !_PlaylistActive; + _SongMenu.Selected = !_Playlist.Visible; _SongMenu.SmallView = _Playlist.Visible; if (_Playlist.ActivePlaylistID != -1) @@ -660,7 +659,7 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { - if (_PlaylistActive) + if (_Playlist.Visible) { if (_Playlist.ActivePlaylistID == -1) _ClosePlaylist(); @@ -1257,12 +1256,12 @@ namespace Vocaluxe.Screens private void _ClosePlaylist() { - if (_Playlist.Visible || _PlaylistActive) + if (_Playlist.Visible) { _SongMenu.SmallView = false; - _PlaylistActive = false; - _Playlist.Selected = _PlaylistActive; - _SongMenu.Selected = !_PlaylistActive; + _Playlist.Visible = false; + _Playlist.Selected = false; + _SongMenu.Selected = false; _Playlist.ClosePlaylist(); } } diff --git a/VocaluxeLib/Menu/CPlaylist.cs b/VocaluxeLib/Menu/CPlaylist.cs index f22387d8..0b39d443 100644 --- a/VocaluxeLib/Menu/CPlaylist.cs +++ b/VocaluxeLib/Menu/CPlaylist.cs @@ -169,15 +169,16 @@ namespace VocaluxeLib.Menu private readonly CStatic _StaticPlaylistHeader; private readonly CStatic _StaticPlaylistFooter; - private bool _Selected; public SRectF Rect { get { return MaxRect; } } public SRectF MaxRect { get; set; } + private bool _Selectable = true; public bool Selectable { - get { return Visible; } + get { return Visible && _Selectable; } + set { _Selectable = value; } } public bool Visible { @@ -185,6 +186,7 @@ namespace VocaluxeLib.Menu set { _Active = value; } } public bool Highlighted { get; set; } + private bool _Selected; public bool Selected { get { return _Selected; } @@ -204,6 +206,8 @@ namespace VocaluxeLib.Menu _ChangeOrderElement = null; _EditMode = EEditMode.None; } + else if (_CurrentPlaylistElement == -1 && _PlaylistElements.Count > 0) + _SelectElement(_PlaylistElements[0].SelectSlide); } } @@ -420,7 +424,7 @@ namespace VocaluxeLib.Menu public override bool HandleInput(SKeyEvent keyEvent) { if (!Selected) - return true; + return false; //Active EditMode ignores other input! if (_EditMode == EEditMode.PlaylistName) { @@ -446,6 +450,8 @@ namespace VocaluxeLib.Menu if (!String.IsNullOrEmpty(_ButtonPlaylistName.Text.Text)) _ButtonPlaylistName.Text.Text = _ButtonPlaylistName.Text.Text.Remove(_ButtonPlaylistName.Text.Text.Length - 1); break; + default: + return false; } } return true; @@ -453,10 +459,10 @@ namespace VocaluxeLib.Menu if (_CurrentPlaylistElement == -1 || _PlaylistElementContents.Count == 0) { //no song is selected - base.HandleInput(keyEvent); + bool handled = base.HandleInput(keyEvent); _CurrentPlaylistElement = _GetSelectedElementNr(); - if (_CurrentPlaylistElement != -1) + if (_CurrentPlaylistElement != -1 || handled) return true; } else if (_CurrentPlaylistElement != -1) @@ -669,6 +675,8 @@ namespace VocaluxeLib.Menu UpdatePlaylist(); } break; + default: + return false; } return true; } @@ -720,6 +728,8 @@ namespace VocaluxeLib.Menu case Keys.PageUp: _SetSelectionToFirstEntry(); break; + default: + return false; } return true; }