diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index 8490d8d4..294807d6 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Drawing; using System.Text; +using Vocaluxe.GameModes; using Vocaluxe.Menu; using Vocaluxe.Menu.SongMenu; @@ -29,10 +30,11 @@ namespace Vocaluxe.Base public static ICover Cover = new BCover(); public static IDataBase DataBase = new BDataBase(); public static IInputs Input = new BInputs(); + public static IPlaylist Playlist = new BPlaylist(); public static Menu.Base Base = new Menu.Base( - Config, Settings, Theme, Helper, Log, BackgroundMusic, Draw, Graphics, Fonts, Language, Game, Profiles, Record, Songs, Video, Sound, Cover, DataBase, Input); + Config, Settings, Theme, Helper, Log, BackgroundMusic, Draw, Graphics, Fonts, Language, Game, Profiles, Record, Songs, Video, Sound, Cover, DataBase, Input, Playlist); } class BConfig : IConfig @@ -447,6 +449,26 @@ namespace Vocaluxe.Base { return CGame.GetTimeFromBeats(Beat, BPM); } + + public void AddSong(int SongID, EGameMode GameMode) + { + CGame.AddSong(SongID, GameMode); + } + + public void Reset() + { + CGame.Reset(); + } + + public void ClearSongs() + { + CGame.ClearSongs(); + } + + public int GetNumSongs() + { + return CGame.GetNumSongs(); + } } class BProfiles : IProfiles @@ -519,6 +541,11 @@ namespace Vocaluxe.Base return new CSong(song); } + public CSong GetSongByID(int SongID) + { + return new CSong(CSongs.GetSong(SongID)); + } + public CCategory GetCategory(int Index) { if (Index >= CSongs.NumCategories) @@ -643,4 +670,79 @@ namespace Vocaluxe.Base CInput.SetRumble(Duration); } } + + class BPlaylist : IPlaylist + { + public void SetPlaylistName(int PlaylistID, string Name) + { + CPlaylists.SetPlaylistName(PlaylistID, Name); + } + + public string GetPlaylistName(int PlaylistID) + { + return CPlaylists.GetPlaylistName(PlaylistID); + } + + public void DeletePlaylist(int PlaylistID) + { + CPlaylists.DeletePlaylist(PlaylistID); + } + + public void SavePlaylist(int PlaylistID) + { + CPlaylists.SavePlaylist(PlaylistID); + } + + public int GetNumPlaylists() + { + return CPlaylists.NumPlaylists; + } + + + + public void AddPlaylistSong(int PlaylistID, int SongID) + { + CPlaylists.AddPlaylistSong(PlaylistID, SongID); + } + + public void AddPlaylistSong(int PlaylistID, int SongID, EGameMode GameMode) + { + CPlaylists.AddPlaylistSong(PlaylistID, SongID, GameMode); + } + + public void InsertPlaylistSong(int PlaylistID, int PositionIndex, int SongID, EGameMode GameMode) + { + CPlaylists.InsertPlaylistSong(PlaylistID, PositionIndex, SongID, GameMode); + } + + public void MovePlaylistSong(int PlaylistID, int SourceIndex, int DestIndex) + { + CPlaylists.MovePlaylistSong(PlaylistID, SourceIndex, DestIndex); + } + + public void MovePlaylistSongDown(int PlaylistID, int SongIndex) + { + CPlaylists.MovePlaylistSongDown(PlaylistID, SongIndex); + } + + public void MovePlaylistSongUp(int PlaylistID, int SongIndex) + { + CPlaylists.MovePlaylistSongUp(PlaylistID, SongIndex); + } + + public void DeletePlaylistSong(int PlaylistID, int SongIndex) + { + CPlaylists.DeletePlaylistSong(PlaylistID, SongIndex); + } + + public int GetPlaylistSongCount(int PlaylistID) + { + return CPlaylists.GetPlaylistSongCount(PlaylistID); + } + + public CPlaylistSong GetPlaylistSong(int PlaylistID, int SongIndex) + { + return CPlaylists.GetPlaylistSong(PlaylistID, SongIndex); + } + } } diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs index 6ddd2edc..917314e6 100644 --- a/Vocaluxe/Base/CPlaylists.cs +++ b/Vocaluxe/Base/CPlaylists.cs @@ -6,7 +6,9 @@ using System.Xml; using System.Xml.XPath; using Vocaluxe.Lib.Playlist; +using Vocaluxe.GameModes; using Vocaluxe.Menu; +using Vocaluxe.Menu.SongMenu; namespace Vocaluxe.Base { @@ -59,16 +61,20 @@ namespace Vocaluxe.Base SortPlaylistsByName(); } - #region private methods - - private static void SortPlaylistsByName() + public static string GetPlaylistName(int PlaylistID) { - _Playlists.Sort(CompareByPlaylistName); + if (PlaylistID >= _Playlists.Count || PlaylistID < 0) + return "Error: Can't find Playlist"; + + return _Playlists[PlaylistID].PlaylistName; } - private static int CompareByPlaylistName(CPlaylistFile a, CPlaylistFile b) + public static void SetPlaylistName(int PlaylistID, string Name) { - return String.Compare(a.PlaylistName, b.PlaylistName); + if (PlaylistID >= _Playlists.Count || PlaylistID < 0) + return; + + _Playlists[PlaylistID].PlaylistName = Name; } public static void DeletePlaylist(int PlaylistID) @@ -104,6 +110,93 @@ namespace Vocaluxe.Base return (_Playlists.Count - 1); } + + + public static void AddPlaylistSong(int PlaylistID, int SongID) + { + if (PlaylistID >= _Playlists.Count || PlaylistID < 0) + return; + + _Playlists[PlaylistID].AddSong(SongID); + } + + public static void AddPlaylistSong(int PlaylistID, int SongID, EGameMode GameMode) + { + if (PlaylistID >= _Playlists.Count || PlaylistID < 0) + return; + + _Playlists[PlaylistID].AddSong(SongID, GameMode); + } + + public static void InsertPlaylistSong(int PlaylistID, int PositionIndex, int SongID, EGameMode GameMode) + { + if (PlaylistID >= _Playlists.Count || PlaylistID < 0) + return; + + _Playlists[PlaylistID].SongInsert(PositionIndex, SongID, GameMode); + } + + public static void MovePlaylistSong(int PlaylistID, int SourceIndex, int DestIndex) + { + if (PlaylistID >= _Playlists.Count || PlaylistID < 0) + return; + + _Playlists[PlaylistID].SongMove(SourceIndex, DestIndex); + } + + public static void MovePlaylistSongDown(int PlaylistID, int SongIndex) + { + if (PlaylistID >= _Playlists.Count || PlaylistID < 0) + return; + + _Playlists[PlaylistID].SongDown(SongIndex); + } + + public static void MovePlaylistSongUp(int PlaylistID, int SongIndex) + { + if (PlaylistID >= _Playlists.Count || PlaylistID < 0) + return; + + _Playlists[PlaylistID].SongUp(SongIndex); + } + + public static void DeletePlaylistSong(int PlaylistID, int SongIndex) + { + if (PlaylistID >= _Playlists.Count || PlaylistID < 0) + return; + + _Playlists[PlaylistID].DeleteSong(SongIndex); + } + + public static int GetPlaylistSongCount(int PlaylistID) + { + if (PlaylistID >= _Playlists.Count || PlaylistID < 0) + return 0; + + return _Playlists[PlaylistID].Songs.Count; + } + + public static CPlaylistSong GetPlaylistSong(int PlaylistID, int SongIndex) + { + if (PlaylistID >= _Playlists.Count || PlaylistID < 0) + return null; + + if (SongIndex >= _Playlists[PlaylistID].Songs.Count) + return null; + + return _Playlists[PlaylistID].Songs[SongIndex]; + } + + #region private methods + private static void SortPlaylistsByName() + { + _Playlists.Sort(CompareByPlaylistName); + } + + private static int CompareByPlaylistName(CPlaylistFile a, CPlaylistFile b) + { + return String.Compare(a.PlaylistName, b.PlaylistName); + } #endregion } } diff --git a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs index 662a4ba4..e319b12c 100644 --- a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs +++ b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs @@ -10,32 +10,8 @@ using Vocaluxe.GameModes; using Vocaluxe.Menu; using Vocaluxe.Menu.SongMenu; - namespace Vocaluxe.Lib.Playlist { - public class CPlaylistSong - { - public int SongID; - public EGameMode GameMode; - - public CPlaylistSong(int SongID, EGameMode gm) - { - this.SongID = SongID; - this.GameMode = gm; - } - - public CPlaylistSong() - { - GameMode = EGameMode.TR_GAMEMODE_NORMAL; - } - - public CPlaylistSong(CPlaylistSong ps) - { - SongID = ps.SongID; - GameMode = ps.GameMode; - } - } - public class CPlaylistFile { private static XmlWriterSettings _settings = new XmlWriterSettings(); diff --git a/Vocaluxe/Menu/CMenu.cs b/Vocaluxe/Menu/CMenu.cs index e52861bf..576148b7 100644 --- a/Vocaluxe/Menu/CMenu.cs +++ b/Vocaluxe/Menu/CMenu.cs @@ -2341,10 +2341,11 @@ namespace Vocaluxe.Menu public ICover Cover; public IDataBase DataBase; public IInputs Input; + public IPlaylist Playlist; public Base(IConfig Config, ISettings Settings, ITheme Theme, IHelper Helper, ILog Log, IBackgroundMusic BackgroundMusic, IDrawing Draw, IGraphics Graphics, IFonts Fonts, ILanguage Language, IGame Game, IProfiles Profiles, IRecording Record, - ISongs Songs, IVideo Video, ISound Sound, ICover Cover, IDataBase DataBase, IInputs Input) + ISongs Songs, IVideo Video, ISound Sound, ICover Cover, IDataBase DataBase, IInputs Input, IPlaylist Playlist) { this.Config = Config; this.Settings = Settings; @@ -2365,6 +2366,7 @@ namespace Vocaluxe.Menu this.Cover = Cover; this.DataBase = DataBase; this.Input = Input; + this.Playlist = Playlist; } } } diff --git a/Vocaluxe/Menu/CPlaylist.cs b/Vocaluxe/Menu/CPlaylist.cs index 8709a24d..76ca8231 100644 --- a/Vocaluxe/Menu/CPlaylist.cs +++ b/Vocaluxe/Menu/CPlaylist.cs @@ -6,7 +6,6 @@ using System.Xml; using System.Xml.XPath; using System.Windows.Forms; -using Vocaluxe.Base; using Vocaluxe.Menu.SongMenu; using Vocaluxe.GameModes; @@ -19,6 +18,29 @@ namespace Vocaluxe.Menu ChangeOrder } + public class CPlaylistSong + { + public int SongID; + public EGameMode GameMode; + + public CPlaylistSong(int SongID, EGameMode gm) + { + this.SongID = SongID; + this.GameMode = gm; + } + + public CPlaylistSong() + { + GameMode = EGameMode.TR_GAMEMODE_NORMAL; + } + + public CPlaylistSong(CPlaylistSong ps) + { + SongID = ps.SongID; + GameMode = ps.GameMode; + } + } + struct SThemePlaylist { public string Name; @@ -147,7 +169,7 @@ namespace Vocaluxe.Menu { if (_EditMode == EEditMode.ChangeOrder && ChangeOrderSource != -1 && PlaylistElements.Count > ChangeOrderSource) { - CPlaylists.Playlists[ActivePlaylistID].DeleteSong(PlaylistElements[ChangeOrderSource].Content); + _Base.Playlist.DeletePlaylistSong(ActivePlaylistID, PlaylistElements[ChangeOrderSource].Content); UpdatePlaylist(); } ChangeOrderSource = -1; @@ -229,7 +251,7 @@ namespace Vocaluxe.Menu _ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/H", navigator, ref Rect.H); if (CHelper.GetValueFromXML(item + "/ColorBackground", navigator, ref _Theme.ColorBackgroundName, String.Empty)) { - _ThemeLoaded &= CTheme.GetColor(_Theme.ColorBackgroundName, SkinIndex, ref BackgroundColor); + _ThemeLoaded &= _Base.Theme.GetColor(_Theme.ColorBackgroundName, SkinIndex, ref BackgroundColor); } else { @@ -240,7 +262,7 @@ namespace Vocaluxe.Menu } if (CHelper.GetValueFromXML(item + "/SColorBackground", navigator, ref _Theme.SColorBackgroundName, String.Empty)) { - _ThemeLoaded &= CTheme.GetColor(_Theme.SColorBackgroundName, SkinIndex, ref BackgroundSColor); + _ThemeLoaded &= _Base.Theme.GetColor(_Theme.SColorBackgroundName, SkinIndex, ref BackgroundSColor); } else { @@ -406,19 +428,19 @@ namespace Vocaluxe.Menu { LoadPlaylist(0); } - if (!Visible && CSettings.GameState != EGameState.EditTheme && !ForceDraw) + if (!Visible && _Base.Settings.GetGameState() != EGameState.EditTheme && !ForceDraw) return; for (int i = 0; i < PlaylistElements.Count; i++ ) { if (i == CurrentPlaylistElement && _Selected) { - PlaylistElements[i].Background.Texture = CTheme.GetSkinTexture(_Theme.STextureBackgroundName); + PlaylistElements[i].Background.Texture = _Base.Theme.GetSkinTexture(_Theme.STextureBackgroundName); PlaylistElements[i].Background.Color = BackgroundSColor; } else { - PlaylistElements[i].Background.Texture = CTheme.GetSkinTexture(_Theme.TextureBackgroundName); + PlaylistElements[i].Background.Texture = _Base.Theme.GetSkinTexture(_Theme.TextureBackgroundName); PlaylistElements[i].Background.Color = BackgroundColor; } } @@ -452,10 +474,10 @@ namespace Vocaluxe.Menu public void LoadTextures() { if (_Theme.ColorBackgroundName != String.Empty) - BackgroundColor = CTheme.GetColor(_Theme.ColorBackgroundName); + BackgroundColor = _Base.Theme.GetColor(_Theme.ColorBackgroundName); if (_Theme.SColorBackgroundName != String.Empty) - BackgroundSColor = CTheme.GetColor(_Theme.SColorBackgroundName); + BackgroundSColor = _Base.Theme.GetColor(_Theme.SColorBackgroundName); _Theme.Text1.LoadTextures(); _Theme.ButtonPlaylistClose.LoadTextures(); @@ -492,14 +514,14 @@ namespace Vocaluxe.Menu } else if (KeyEvent.Key == Keys.Enter) { - CPlaylists.Playlists[ActivePlaylistID].PlaylistName = _Theme.ButtonPlaylistName.Text.Text; - CPlaylists.Playlists[ActivePlaylistID].SavePlaylist(); + _Base.Playlist.SetPlaylistName(ActivePlaylistID, _Theme.ButtonPlaylistName.Text.Text); + _Base.Playlist.SavePlaylist(ActivePlaylistID); _EditMode = EEditMode.None; _Theme.ButtonPlaylistName.EditMode = false; } else if (KeyEvent.Key == Keys.Escape) { - _Theme.ButtonPlaylistName.Text.Text = CPlaylists.Playlists[ActivePlaylistID].PlaylistName; + _Theme.ButtonPlaylistName.Text.Text = _Base.Playlist.GetPlaylistName(ActivePlaylistID); _EditMode = EEditMode.None; _Theme.ButtonPlaylistName.EditMode = false; } @@ -587,7 +609,7 @@ namespace Vocaluxe.Menu break; case Keys.Delete: - CPlaylists.Playlists[ActivePlaylistID].DeleteSong(PlaylistElements[CurrentPlaylistElement].Content); + _Base.Playlist.DeletePlaylistSong(ActivePlaylistID, PlaylistElements[CurrentPlaylistElement].Content); UpdatePlaylist(); if (Offset > 0) @@ -615,7 +637,7 @@ namespace Vocaluxe.Menu case Keys.Add: //move the selected song up if (PlaylistElementContents.Count > 1 && (CurrentPlaylistElement > 0 || Offset > 0)) { - CPlaylists.Playlists[ActivePlaylistID].SongUp(CurrentPlaylistElement + Offset); + _Base.Playlist.MovePlaylistSongUp(ActivePlaylistID, CurrentPlaylistElement + Offset); UpdatePlaylist(); KeyEvent key = new KeyEvent(); @@ -645,7 +667,7 @@ namespace Vocaluxe.Menu case Keys.Subtract: //move the selected song down if (PlaylistElementContents.Count > 1 && CurrentPlaylistElement + Offset < PlaylistElementContents.Count - 1) { - CPlaylists.Playlists[ActivePlaylistID].SongDown(CurrentPlaylistElement + Offset); + _Base.Playlist.MovePlaylistSongDown(ActivePlaylistID, CurrentPlaylistElement + Offset); UpdatePlaylist(); KeyEvent key = new KeyEvent(); @@ -715,7 +737,7 @@ namespace Vocaluxe.Menu if (CurrentPlaylistElement != -1) { - CPlaylists.Playlists[ActivePlaylistID].Songs[CurrentPlaylistElement + Offset].GameMode = PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; + _Base.Playlist.GetPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; UpdatePlaylist(); } break; @@ -726,7 +748,7 @@ namespace Vocaluxe.Menu if (CurrentPlaylistElement != -1) { - CPlaylists.Playlists[ActivePlaylistID].Songs[CurrentPlaylistElement + Offset].GameMode = PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; + _Base.Playlist.GetPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; UpdatePlaylist(); } break; @@ -758,11 +780,11 @@ namespace Vocaluxe.Menu } else if (_Theme.ButtonPlaylistSave.Selected) { - CPlaylists.SavePlaylist(ActivePlaylistID); + _Base.Playlist.SavePlaylist(ActivePlaylistID); } else if (_Theme.ButtonPlaylistDelete.Selected) { - CPlaylists.DeletePlaylist(ActivePlaylistID); + _Base.Playlist.DeletePlaylist(ActivePlaylistID); ClosePlaylist(); } else if (_Theme.ButtonPlaylistName.Selected) @@ -884,7 +906,7 @@ namespace Vocaluxe.Menu //Delete Entry with RB if (CHelper.IsInBounds(PlaylistElements[i].Background.Rect, MouseEvent) && MouseEvent.RB && PlaylistElements[i].Content != -1) { - CPlaylists.Playlists[ActivePlaylistID].DeleteSong(PlaylistElements[i].Content); + _Base.Playlist.DeletePlaylistSong(ActivePlaylistID, PlaylistElements[i].Content); UpdatePlaylist(); return true; } @@ -904,7 +926,7 @@ namespace Vocaluxe.Menu { if (CurrentPlaylistElement != -1) { - CPlaylists.Playlists[ActivePlaylistID].Songs[CurrentPlaylistElement + Offset].GameMode = PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; + _Base.Playlist.GetPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; UpdatePlaylist(); } if (_Theme.ButtonPlaylistClose.Selected) @@ -919,12 +941,12 @@ namespace Vocaluxe.Menu } else if (_Theme.ButtonPlaylistSave.Selected) { - CPlaylists.SavePlaylist(ActivePlaylistID); + _Base.Playlist.SavePlaylist(ActivePlaylistID); return true; } else if (_Theme.ButtonPlaylistDelete.Selected) { - CPlaylists.DeletePlaylist(ActivePlaylistID); + _Base.Playlist.DeletePlaylist(ActivePlaylistID); ClosePlaylist(); return true; } @@ -947,14 +969,14 @@ namespace Vocaluxe.Menu return true; ChangeOrderElement = new PlaylistElement(PlaylistElements[CurrentPlaylistElement]); - ChangeOrderElement.Background.Rect.Z = CSettings.zNear; - ChangeOrderElement.Cover.Rect.Z = CSettings.zNear; - ChangeOrderElement.SelectSlide.Rect.Z = CSettings.zNear; - ChangeOrderElement.SelectSlide.RectArrowLeft.Z = CSettings.zNear; - ChangeOrderElement.SelectSlide.RectArrowRight.Z = CSettings.zNear; - ChangeOrderElement.Text1.Z = CSettings.zNear; + ChangeOrderElement.Background.Rect.Z = _Base.Settings.GetZNear(); + ChangeOrderElement.Cover.Rect.Z = _Base.Settings.GetZNear(); + ChangeOrderElement.SelectSlide.Rect.Z = _Base.Settings.GetZNear(); + ChangeOrderElement.SelectSlide.RectArrowLeft.Z = _Base.Settings.GetZNear(); + ChangeOrderElement.SelectSlide.RectArrowRight.Z = _Base.Settings.GetZNear(); + ChangeOrderElement.Text1.Z = _Base.Settings.GetZNear(); - ChangeOrderElement.Background.Texture = CTheme.GetSkinTexture(_Theme.TextureBackgroundName); + ChangeOrderElement.Background.Texture = _Base.Theme.GetSkinTexture(_Theme.TextureBackgroundName); ChangeOrderElement.Background.Color = BackgroundColor; OldMousePosX = MouseEvent.X; @@ -966,7 +988,7 @@ namespace Vocaluxe.Menu if (!MouseEvent.LBH && DragAndDropSongID != -1) { EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; - CSong song = CSongs.GetSong(DragAndDropSongID); + CSong song = _Base.Songs.GetSongByID(DragAndDropSongID); if (song != null) { @@ -975,14 +997,14 @@ namespace Vocaluxe.Menu if (CurrentPlaylistElement != -1) { - CPlaylists.Playlists[ActivePlaylistID].SongInsert(CurrentPlaylistElement + Offset, DragAndDropSongID, gm); + _Base.Playlist.InsertPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset, DragAndDropSongID, gm); UpdatePlaylist(); } else { if (MouseEvent.Y < PlaylistElements[0].Background.Rect.Y && Offset == 0) { - CPlaylists.Playlists[ActivePlaylistID].SongInsert(0, DragAndDropSongID, gm); + _Base.Playlist.InsertPlaylistSong(ActivePlaylistID, 0, DragAndDropSongID, gm); UpdatePlaylist(); } else @@ -1001,7 +1023,7 @@ namespace Vocaluxe.Menu if (MouseEvent.Y > min) { - CPlaylists.Playlists[ActivePlaylistID].AddSong(DragAndDropSongID, gm); + _Base.Playlist.AddPlaylistSong(ActivePlaylistID, DragAndDropSongID, gm); UpdatePlaylist(); ScrollToBottom(); } @@ -1022,8 +1044,8 @@ namespace Vocaluxe.Menu { if (_Theme.ButtonPlaylistName.Selected) { - CPlaylists.Playlists[ActivePlaylistID].PlaylistName = _Theme.ButtonPlaylistName.Text.Text; - CPlaylists.Playlists[ActivePlaylistID].SavePlaylist(); + _Base.Playlist.SetPlaylistName(ActivePlaylistID, _Theme.ButtonPlaylistName.Text.Text); + _Base.Playlist.SavePlaylist(ActivePlaylistID); _EditMode = EEditMode.None; return true; } @@ -1032,7 +1054,7 @@ namespace Vocaluxe.Menu { if (_Theme.ButtonPlaylistName.Selected) { - _Theme.ButtonPlaylistName.Text.Text = CPlaylists.Playlists[ActivePlaylistID].PlaylistName; + _Theme.ButtonPlaylistName.Text.Text = _Base.Playlist.GetPlaylistName(ActivePlaylistID); _EditMode = EEditMode.None; _Theme.ButtonPlaylistName.EditMode = false; return true; @@ -1052,14 +1074,14 @@ namespace Vocaluxe.Menu { if (CurrentPlaylistElement != -1 && CurrentPlaylistElement + Offset != ChangeOrderSource) { - CPlaylists.Playlists[ActivePlaylistID].SongMove(ChangeOrderSource, CurrentPlaylistElement + Offset); + _Base.Playlist.MovePlaylistSong(ActivePlaylistID, ChangeOrderSource, CurrentPlaylistElement + Offset); UpdatePlaylist(); } else if (CurrentPlaylistElement == -1) { if (MouseEvent.Y < PlaylistElements[0].Background.Rect.Y && Offset == 0) { - CPlaylists.Playlists[ActivePlaylistID].SongMove(ChangeOrderSource, 0); + _Base.Playlist.MovePlaylistSong(ActivePlaylistID, ChangeOrderSource, 0); } else { @@ -1077,7 +1099,7 @@ namespace Vocaluxe.Menu if (MouseEvent.Y > min) { - CPlaylists.Playlists[ActivePlaylistID].SongMove(ChangeOrderSource, PlaylistElementContents.Count - 1); + _Base.Playlist.MovePlaylistSong(ActivePlaylistID, ChangeOrderSource, PlaylistElementContents.Count - 1); } } } @@ -1130,17 +1152,17 @@ namespace Vocaluxe.Menu public bool LoadPlaylist(int PlaylistID) { - if (PlaylistID > -1 && PlaylistID < CPlaylists.NumPlaylists) + if (PlaylistID > -1 && PlaylistID < _Base.Playlist.GetNumPlaylists()) { - _Theme.ButtonPlaylistName.Text.Text = CPlaylists.Playlists[ActivePlaylistID].PlaylistName; + _Theme.ButtonPlaylistName.Text.Text = _Base.Playlist.GetPlaylistName(ActivePlaylistID); ActivePlaylistID = PlaylistID; PlaylistElementContents.Clear(); - for (int i = 0; i < CPlaylists.Playlists[ActivePlaylistID].Songs.Count; i++) + for (int i = 0; i < _Base.Playlist.GetPlaylistSongCount(ActivePlaylistID); i++) { PlaylistElementContent pec = new PlaylistElementContent(); - pec.SongID = CPlaylists.Playlists[ActivePlaylistID].Songs[i].SongID; - pec.Modes = CSongs.AllSongs[CPlaylists.Playlists[ActivePlaylistID].Songs[i].SongID].AvailableGameModes; - pec.Mode = CPlaylists.Playlists[ActivePlaylistID].Songs[i].GameMode; + pec.SongID = _Base.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID; + pec.Modes = _Base.Songs.GetSongByID(_Base.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID).AvailableGameModes; + pec.Mode = _Base.Playlist.GetPlaylistSong(ActivePlaylistID, i).GameMode; PlaylistElementContents.Add(pec); } Update(); @@ -1153,12 +1175,12 @@ namespace Vocaluxe.Menu public void UpdatePlaylist() { PlaylistElementContents.Clear(); - for (int i = 0; i < CPlaylists.Playlists[ActivePlaylistID].Songs.Count; i++) + for (int i = 0; i < _Base.Playlist.GetPlaylistSongCount(ActivePlaylistID); i++) { PlaylistElementContent pec = new PlaylistElementContent(); - pec.SongID = CPlaylists.Playlists[ActivePlaylistID].Songs[i].SongID; - pec.Modes = CSongs.AllSongs[pec.SongID].AvailableGameModes; - pec.Mode = CPlaylists.Playlists[ActivePlaylistID].Songs[i].GameMode; + pec.SongID = _Base.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID; + pec.Modes = _Base.Songs.GetSongByID(pec.SongID).AvailableGameModes; + pec.Mode = _Base.Playlist.GetPlaylistSong(ActivePlaylistID, i).GameMode; PlaylistElementContents.Add(pec); } @@ -1167,16 +1189,16 @@ namespace Vocaluxe.Menu private void StartPlaylistSongs() { - CGame.Reset(); - CGame.ClearSongs(); + _Base.Game.Reset(); + _Base.Game.ClearSongs(); - if (ActivePlaylistID > -1 && ActivePlaylistID < CPlaylists.NumPlaylists) + if (ActivePlaylistID > -1 && ActivePlaylistID < _Base.Playlist.GetNumPlaylists()) { - for (int i = 0; i < CPlaylists.Playlists[ActivePlaylistID].Songs.Count; i++) + for (int i = 0; i < _Base.Playlist.GetPlaylistSongCount(ActivePlaylistID); i++) { - CGame.AddSong(CPlaylists.Playlists[ActivePlaylistID].Songs[i].SongID, CPlaylists.Playlists[ActivePlaylistID].Songs[i].GameMode); + _Base.Game.AddSong(_Base.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID, _Base.Playlist.GetPlaylistSong(ActivePlaylistID, i).GameMode); } - if (CGame.GetNumSongs() > 0) + if (_Base.Game.GetNumSongs() > 0) CGraphics.FadeTo(EScreens.ScreenNames); } } @@ -1190,7 +1212,7 @@ namespace Vocaluxe.Menu public void Update() { - if (ActivePlaylistID > -1 && ActivePlaylistID < CPlaylists.NumPlaylists) + if (ActivePlaylistID > -1 && ActivePlaylistID < _Base.Playlist.GetNumPlaylists()) { for (int i = 0; i < PlaylistElements.Count; i++ ) { @@ -1202,7 +1224,7 @@ namespace Vocaluxe.Menu PlaylistElements[i].SelectSlide.Visible = true; PlaylistElements[i].Text1.Visible = true; PlaylistElementContent pec = PlaylistElementContents[Offset + i]; - CSong song = CSongs.GetSong(pec.SongID); + CSong song = _Base.Songs.GetSongByID(pec.SongID); PlaylistElements[i].Cover.Texture = song.CoverTextureSmall; string t1 = _Theme.Text1.Text.Replace("%a", song.Artist).Replace("%t", song.Title); PlaylistElements[i].Text1.Text = /*(Offset + i + 1).ToString() + ") " + */song.Artist + " - " + song.Title; //TODO: Add text field for the number diff --git a/Vocaluxe/Menu/IMenu.cs b/Vocaluxe/Menu/IMenu.cs index 16138025..4fb34d91 100644 --- a/Vocaluxe/Menu/IMenu.cs +++ b/Vocaluxe/Menu/IMenu.cs @@ -4,6 +4,7 @@ using System.Drawing; using System.Text; using System.Windows.Forms; +using Vocaluxe.GameModes; using Vocaluxe.Menu.SingNotes; using Vocaluxe.Menu.SongMenu; @@ -183,6 +184,11 @@ namespace Vocaluxe.Menu double GetRandomDouble(); float GetTimeFromBeats(float Beat, float BPM); + + void AddSong(int SongID, EGameMode GameMode); + void Reset(); + void ClearSongs(); + int GetNumSongs(); } public interface IRecording @@ -209,6 +215,7 @@ namespace Vocaluxe.Menu void UpdateRandomSongList(); CSong GetVisibleSong(int VisibleIndex); + CSong GetSongByID(int SongID); CCategory GetCategory(int Index); void NextCategory(); @@ -255,6 +262,27 @@ namespace Vocaluxe.Menu void SetRumble(float Duration); } + public interface IPlaylist + { + string GetPlaylistName(int PlaylistID); + void SetPlaylistName(int PlaylistID, string Name); + void DeletePlaylist(int PlaylistID); + void SavePlaylist(int PlaylistID); + int GetNumPlaylists(); + + void AddPlaylistSong(int PlaylistID, int SongID); + void AddPlaylistSong(int PlaylistID, int SongID, EGameMode GameMode); + void InsertPlaylistSong(int PlaylistID, int PositionIndex, int SongID, EGameMode GameMode); + + void MovePlaylistSong(int PlaylistID, int SourceIndex, int DestIndex); + void MovePlaylistSongDown(int PlaylistID, int SongIndex); + void MovePlaylistSongUp(int PlaylistID, int SongIndex); + void DeletePlaylistSong(int PlaylistID, int SongIndex); + + int GetPlaylistSongCount(int PlaylistID); + CPlaylistSong GetPlaylistSong(int PlaylistID, int SongIndex); + } + [Flags] public enum EModifier {