From 2d400469cf7d6fa1902e1770c7d9670b77faede7 Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Sun, 8 Jul 2012 21:38:37 +0200 Subject: [PATCH] Added first mouse-handling. RB to delete PlaylistEntry. --- Vocaluxe/Lib/Playlist/CPlaylist.cs | 5 ++ Vocaluxe/Menu/CPlaylist.cs | 81 ++++++++++++++++++++++++++++-- Vocaluxe/Screens/CScreenSong.cs | 11 ++++ 3 files changed, 94 insertions(+), 3 deletions(-) diff --git a/Vocaluxe/Lib/Playlist/CPlaylist.cs b/Vocaluxe/Lib/Playlist/CPlaylist.cs index 86e5e320..dd77d8ff 100644 --- a/Vocaluxe/Lib/Playlist/CPlaylist.cs +++ b/Vocaluxe/Lib/Playlist/CPlaylist.cs @@ -228,5 +228,10 @@ namespace Vocaluxe.Lib.Playlist Songs.Add(song); } + + public void DeleteSong(int SongNr) + { + Songs.RemoveAt(SongNr); + } } } diff --git a/Vocaluxe/Menu/CPlaylist.cs b/Vocaluxe/Menu/CPlaylist.cs index 3725196b..617ad876 100644 --- a/Vocaluxe/Menu/CPlaylist.cs +++ b/Vocaluxe/Menu/CPlaylist.cs @@ -39,14 +39,14 @@ namespace Vocaluxe.Menu class CPlaylist : IMenuElement { - struct PlaylistElementContent + class PlaylistElementContent { public EGameMode[] Modes; public int SongID; public EGameMode Mode; } - struct PlaylistElement + class PlaylistElement { public CStatic Cover; public CStatic Background; @@ -54,6 +54,7 @@ namespace Vocaluxe.Menu public CText Text2; public CText Text3; public CSelectSlide SelectSlide; + public int Content; } private SThemePlaylist _Theme; @@ -70,6 +71,7 @@ namespace Vocaluxe.Menu public int ActivePlaylistID = 0; public int Offset = 0; + public int ActiveHover = -1; public CPlaylist() { @@ -266,6 +268,76 @@ namespace Vocaluxe.Menu LoadTextures(); } + public bool HandleInput(KeyEvent kevent) + { + switch (kevent.Key) + { + } + return false; + } + + public bool HandleMouse(MouseEvent mevent) + { + if (CHelper.IsInBounds(Rect, mevent)) + { + if (mevent.Wheel > 0) + { + return true; + } + else if (mevent.Wheel < 0) + { + if (PlaylistElements.Count + Offset + mevent.Wheel <= PlaylistElementContents.Count) + { + Offset = Offset + mevent.Wheel; + return true; + } + if (Offset - mevent.Wheel >= 0) + { + Offset = Offset - mevent.Wheel; + return true; + } + } + + for (int i = 0; i < PlaylistElements.Count; i++) + { + //Hover for playlist-element + if (CHelper.IsInBounds(PlaylistElements[i].Background.Rect, mevent)) + { + PlaylistElements[i].Background.Texture = CTheme.GetSkinTexture(_Theme.STextureBackgroundName); + PlaylistElements[i].Background.Color = BackgroundSColor; + ActiveHover = i; + } + else + { + PlaylistElements[i].Background.Texture = CTheme.GetSkinTexture(_Theme.TextureBackgroundName); + PlaylistElements[i].Background.Color = BackgroundColor; + } + //Delete Entry with RB + if (CHelper.IsInBounds(PlaylistElements[i].Background.Rect, mevent) && mevent.RB && PlaylistElements[i].Content != -1) + { + CPlaylists.Playlists[ActivePlaylistID].DeleteSong(PlaylistElements[i].Content); + UpdatePlaylist(); + return true; + } + //Change order with holding LB + else if (CHelper.IsInBounds(PlaylistElements[i].Background.Rect, mevent) && mevent.LBH && PlaylistElements[i].Content != -1) + { + return true; + } + } + } + else + { + if (ActiveHover != -1) + { + PlaylistElements[ActiveHover].Background.Texture = CTheme.GetSkinTexture(_Theme.TextureBackgroundName); + PlaylistElements[ActiveHover].Background.Color = BackgroundColor; + ActiveHover = -1; + } + } + return false; + } + private void PrepareList() { PlaylistElements.Clear(); @@ -292,6 +364,7 @@ namespace Vocaluxe.Menu en.SelectSlide.TextColor = _Theme.SelectSlideGameMode.TextColor; en.SelectSlide.TextH = _Theme.SelectSlideGameMode.TextH; en.SelectSlide.Visible = true; + en.Content = -1; PlaylistElements.Add(en); } } @@ -340,6 +413,7 @@ namespace Vocaluxe.Menu { if (e < PlaylistElementContents.Count) { + PlaylistElements[i].Content = e; PlaylistElements[i].Background.Visible = true; PlaylistElements[i].Cover.Visible = true; PlaylistElements[i].SelectSlide.Visible = true; @@ -359,7 +433,7 @@ namespace Vocaluxe.Menu if (PlaylistElementContents[e].Modes[g] == PlaylistElementContents[e].Mode) PlaylistElements[i].SelectSlide.SetSelectionByValueIndex(g); } - e++; + e++; } else { @@ -369,6 +443,7 @@ namespace Vocaluxe.Menu PlaylistElements[i].Text1.Visible = false; PlaylistElements[i].Text2.Visible = false; PlaylistElements[i].Text3.Visible = false; + PlaylistElements[i].Content = -1; } } } diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 9b18ab2f..55dd2abf 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -97,6 +97,12 @@ namespace Vocaluxe.Screens { base.HandleInput(KeyEvent); + + if (Playlists[htPlaylists(Playlist)].HandleInput(KeyEvent)) + { + return true; + } + if (!_SongOptionsActive) { @@ -255,6 +261,11 @@ namespace Vocaluxe.Screens { base.HandleMouse(MouseEvent); + if (Playlists[htPlaylists(Playlist)].HandleMouse(MouseEvent)) + { + return true; + } + if (!_SongOptionsActive) {