Merge branch 'develop' of github.com:Flamefire/Vocaluxe into sound-player

Conflicts:
	PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs
	VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs
This commit is contained in:
Florian Küpper committed 2014-08-09 14:13:38 +02:00
commit bd41de6dbe
53 files changed
+1150 -1273

No files matched your search

@@ -1,6 +1,6 @@
https://github.com/codebude/QRCoder/ https://github.com/codebude/QRCoder/
Version: master 19.01.2014 Version: master 05.08.2014
Files: Files:
QRCoder.dll QRCoder.dll
Binary file not shown.
@@ -270,7 +270,7 @@ namespace VocaluxeLib.PartyModes.Challenge
public override void UpdateGame() public override void UpdateGame()
{ {
/* /*
if (CBase.Songs.GetCurrentCategoryIndex() != -1 || _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_OFF) if (CBase.Songs.IsInCategory() || _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_OFF)
_ScreenSongOptions.Selection.RandomOnly = true; _ScreenSongOptions.Selection.RandomOnly = true;
else else
_ScreenSongOptions.Selection.RandomOnly = false;*/ _ScreenSongOptions.Selection.RandomOnly = false;*/
@@ -475,12 +475,12 @@ namespace VocaluxeLib.PartyModes.Challenge
players[i].ProfileID = -1; players[i].ProfileID = -1;
} }
CBase.Songs.AddPartySongSung(songID);
CBase.Graphics.FadeTo(EScreens.ScreenSing); CBase.Graphics.FadeTo(EScreens.ScreenSing);
} }
public override void LeavingHighscore() public override void LeavingHighscore()
{ {
CBase.Songs.AddPartySongSung(CBase.Game.GetSong(0).ID);
_GameData.CurrentRoundNr++; _GameData.CurrentRoundNr++;
CBase.Graphics.FadeTo(EScreens.ScreenPartyDummy); CBase.Graphics.FadeTo(EScreens.ScreenPartyDummy);
} }
@@ -275,7 +275,7 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley
public override void UpdateGame() public override void UpdateGame()
{ {
/* /*
if (CBase.Songs.GetCurrentCategoryIndex() != -1 || _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_OFF) if (CBase.Songs.IsInCategory() || _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_OFF)
_ScreenSongOptions.Selection.RandomOnly = true; _ScreenSongOptions.Selection.RandomOnly = true;
else else
_ScreenSongOptions.Selection.RandomOnly = false;*/ _ScreenSongOptions.Selection.RandomOnly = false;*/
@@ -457,6 +457,8 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley
public override void LeavingHighscore() public override void LeavingHighscore()
{ {
for (int i = 0; i < CBase.Game.GetNumSongs();i++ )
CBase.Songs.AddPartySongSung(CBase.Game.GetSong(i).ID);
_GameData.CurrentRoundNr++; _GameData.CurrentRoundNr++;
CBase.Graphics.FadeTo(EScreens.ScreenPartyDummy); CBase.Graphics.FadeTo(EScreens.ScreenPartyDummy);
} }
@@ -542,7 +544,6 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley
{ {
int songID = ids[CBase.Game.GetRandom(ids.Count)]; int songID = ids[CBase.Game.GetRandom(ids.Count)];
CBase.Game.AddSong(songID, EGameMode.TR_GAMEMODE_MEDLEY); CBase.Game.AddSong(songID, EGameMode.TR_GAMEMODE_MEDLEY);
CBase.Songs.AddPartySongSung(songID);
ids.Remove(songID); ids.Remove(songID);
s++; s++;
} }
@@ -329,7 +329,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
public override void UpdateGame() public override void UpdateGame()
{ {
/* /*
if (CBase.Songs.GetCurrentCategoryIndex() != -1 || _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_OFF) if (CBase.Songs.IsInCategory() || _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_OFF)
_ScreenSongOptions.Selection.RandomOnly = true; _ScreenSongOptions.Selection.RandomOnly = true;
else else
_ScreenSongOptions.Selection.RandomOnly = false;*/ _ScreenSongOptions.Selection.RandomOnly = false;*/
@@ -515,12 +515,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe
} }
CBase.Game.AddSong(songID, gm); CBase.Game.AddSong(songID, gm);
CBase.Songs.AddPartySongSung(songID);
CBase.Graphics.FadeTo(EScreens.ScreenSing); CBase.Graphics.FadeTo(EScreens.ScreenSing);
} }
public override void LeavingHighscore() public override void LeavingHighscore()
{ {
CBase.Songs.AddPartySongSung(CBase.Game.GetSong(0).ID);
_UpdateScores(); _UpdateScores();
CBase.Graphics.FadeTo(EScreens.ScreenPartyDummy); CBase.Graphics.FadeTo(EScreens.ScreenPartyDummy);
} }
@@ -655,9 +655,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe
switch (_GameData.SongSource) switch (_GameData.SongSource)
{ {
case ESongSource.TR_PLAYLIST: case ESongSource.TR_PLAYLIST:
for (int i = 0; i < CBase.Playlist.GetPlaylistSongCount(_GameData.PlaylistID); i++) for (int i = 0; i < CBase.Playlist.GetSongCount(_GameData.PlaylistID); i++)
{ {
int id = CBase.Playlist.GetPlaylistSong(_GameData.PlaylistID, i).SongID; int id = CBase.Playlist.GetSong(_GameData.PlaylistID, i).SongID;
// ReSharper disable LoopCanBeConvertedToQuery // ReSharper disable LoopCanBeConvertedToQuery
foreach (EGameMode mode in CBase.Songs.GetSongByID(id).AvailableGameModes) foreach (EGameMode mode in CBase.Songs.GetSongByID(id).AvailableGameModes)
// ReSharper restore LoopCanBeConvertedToQuery // ReSharper restore LoopCanBeConvertedToQuery
@@ -180,11 +180,11 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_SelectSlides[_SelectSlideSongSource].Clear(); _SelectSlides[_SelectSlideSongSource].Clear();
_SelectSlides[_SelectSlideSongSource].SetValues<ESongSource>((int)_Data.ScreenConfig.SongSource); _SelectSlides[_SelectSlideSongSource].SetValues<ESongSource>((int)_Data.ScreenConfig.SongSource);
List<string> playlists = CBase.Playlist.GetPlaylistNames(); List<string> playlists = CBase.Playlist.GetNames();
_SelectSlides[_SelectSlidePlaylist].Clear(); _SelectSlides[_SelectSlidePlaylist].Clear();
for (int i = 0; i < playlists.Count; i++) for (int i = 0; i < playlists.Count; i++)
{ {
string value = playlists[i] + " (" + CBase.Playlist.GetPlaylistSongCount(i) + " " + CBase.Language.Translate("TR_SONGS", _PartyModeID) + ")"; string value = playlists[i] + " (" + CBase.Playlist.GetSongCount(i) + " " + CBase.Language.Translate("TR_SONGS", _PartyModeID) + ")";
_SelectSlides[_SelectSlidePlaylist].AddValue(value); _SelectSlides[_SelectSlidePlaylist].AddValue(value);
} }
_SelectSlides[_SelectSlidePlaylist].Selection = _Data.ScreenConfig.PlaylistID; _SelectSlides[_SelectSlidePlaylist].Selection = _Data.ScreenConfig.PlaylistID;
@@ -241,12 +241,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe
{ {
if (CBase.Playlist.GetNumPlaylists() > 0) if (CBase.Playlist.GetNumPlaylists() > 0)
{ {
if (CBase.Playlist.GetPlaylistSongCount(_Data.ScreenConfig.PlaylistID) > 0) if (CBase.Playlist.GetSongCount(_Data.ScreenConfig.PlaylistID) > 0)
{ {
_ConfigOk = false; _ConfigOk = false;
for (int i = 0; i < CBase.Playlist.GetPlaylistSongCount(_Data.ScreenConfig.PlaylistID); i++) for (int i = 0; i < CBase.Playlist.GetSongCount(_Data.ScreenConfig.PlaylistID); i++)
{ {
int id = CBase.Playlist.GetPlaylistSong(_Data.ScreenConfig.PlaylistID, i).SongID; int id = CBase.Playlist.GetSong(_Data.ScreenConfig.PlaylistID, i).SongID;
_ConfigOk = CBase.Songs.GetSongByID(id).AvailableGameModes.Any(mode => mode == gm); _ConfigOk = CBase.Songs.GetSongByID(id).AvailableGameModes.Any(mode => mode == gm);
if (_ConfigOk) if (_ConfigOk)
break; break;
@@ -378,7 +378,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
public override void OnClose() public override void OnClose()
{ {
base.OnClose(); base.OnClose();
CBase.BackgroundMusic.SetStatus(false); CBase.BackgroundMusic.SetDisabled(false);
CBase.Sound.Fade(_PreviewStream, 0f, 0.5f, EStreamAction.Close); CBase.Sound.Fade(_PreviewStream, 0f, 0.5f, EStreamAction.Close);
} }
@@ -501,7 +501,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
} }
CSong song = CBase.Songs.GetSongByID(songID); CSong song = CBase.Songs.GetSongByID(songID);
CBase.BackgroundMusic.SetStatus(true); CBase.BackgroundMusic.SetDisabled(true);
_PreviewStream = CBase.Sound.Load(song.GetMP3()); _PreviewStream = CBase.Sound.Load(song.GetMP3());
CBase.Sound.SetPosition(_PreviewStream, song.Preview.StartTime); CBase.Sound.SetPosition(_PreviewStream, song.Preview.StartTime);
@@ -525,7 +525,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
{ {
int songID = _Fields[_SelectedField].Content.SongID; int songID = _Fields[_SelectedField].Content.SongID;
CSong song = CBase.Songs.GetSongByID(songID); CSong song = CBase.Songs.GetSongByID(songID);
CBase.BackgroundMusic.SetStatus(true); CBase.BackgroundMusic.SetDisabled(true);
_PreviewStream = CBase.Sound.Load(song.GetMP3()); _PreviewStream = CBase.Sound.Load(song.GetMP3());
CBase.Sound.SetPosition(_PreviewStream, song.Preview.StartTime); CBase.Sound.SetPosition(_PreviewStream, song.Preview.StartTime);
+1 -1
View File
@@ -187,7 +187,7 @@ namespace ServerLib
ProcessStartInfo info = new ProcessStartInfo ProcessStartInfo info = new ProcessStartInfo
{ {
FileName = "VocaluxeServerConfig.exe", FileName = "VocaluxeServerConfig.exe",
WorkingDirectory = Environment.CurrentDirectory, WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory,
Arguments = port + " " + (_Encrypted ? "true" : "false") + (reserve ? " reserve" : ""), Arguments = port + " " + (_Encrypted ? "true" : "false") + (reserve ? " reserve" : ""),
UseShellExecute = true, UseShellExecute = true,
CreateNoWindow = true, CreateNoWindow = true,
+1 -1
View File
@@ -118,7 +118,7 @@ namespace Vocaluxe.Base
if (_Initialized) if (_Initialized)
return; return;
List<string> soundFiles = CHelper.ListSoundFiles(CSettings.FolderBackgroundMusic, true, true); List<string> soundFiles = CHelper.ListSoundFiles(CSettings.FolderNameBackgroundMusic, true, true);
foreach (string path in soundFiles) foreach (string path in soundFiles)
_BGMusicFiles.Add(new CPlaylistElement(path)); _BGMusicFiles.Add(new CPlaylistElement(path));
+13 -17
View File
@@ -46,11 +46,9 @@ namespace Vocaluxe.Base
private static bool _Initialized; private static bool _Initialized;
// Base file and folder names (formerly from CSettings but they can be changed) // Base file and folder names (formerly from CSettings but they can be changed)
private const string _FolderProfiles = "Profiles"; //Use ProfileFolders for access public static string FolderPlaylists = Path.Combine(CSettings.DataFolder, "Playlists");
private const string _FolderSongs = "Songs"; //Use SongFolders for access public static string FileHighscoreDB = Path.Combine(CSettings.DataFolder, "HighscoreDB.sqlite");
public static string FolderPlaylists = "Playlists"; private static string _FileConfig = Path.Combine(CSettings.DataFolder, "Config.xml");
public static string FileHighscoreDB = "HighscoreDB.sqlite";
private static string _FileConfig = "Config.xml";
// Debug // Debug
public static EDebugLevel DebugLevel = EDebugLevel.TR_CONFIG_OFF; public static EDebugLevel DebugLevel = EDebugLevel.TR_CONFIG_OFF;
@@ -108,10 +106,10 @@ namespace Vocaluxe.Base
//Folders //Folders
public static readonly List<string> SongFolders = new List<string> public static readonly List<string> SongFolders = new List<string>
{ {
Path.Combine(Directory.GetCurrentDirectory(), _FolderSongs) Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameSongs)
#if INSTALLER #if INSTALLER
,Path.Combine(CSettings.DataPath, CSettings.FolderSongs); ,Path.Combine(CSettings.DataFolder, CSettings.FolderNameSongs);
#endif #endif
}; };
/// <summary> /// <summary>
@@ -121,9 +119,9 @@ namespace Vocaluxe.Base
public static readonly List<string> ProfileFolders = new List<string> public static readonly List<string> ProfileFolders = new List<string>
{ {
#if INSTALLER #if INSTALLER
Path.Combine(Environment.CurrentDirectory, CSettings.FolderProfiles), Path.Combine(Environment.CurrentDirectory, CSettings.FolderNameProfiles),
#endif #endif
Path.Combine(CSettings.DataPath, _FolderProfiles) Path.Combine(CSettings.DataFolder, CSettings.FolderNameProfiles)
}; };
// Game // Game
@@ -202,7 +200,7 @@ namespace Vocaluxe.Base
return; return;
// Init config file // Init config file
if (!File.Exists(Path.Combine(CSettings.DataPath, _FileConfig))) if (!File.Exists(_FileConfig))
SaveConfig(); SaveConfig();
else else
_LoadConfig(); _LoadConfig();
@@ -212,7 +210,7 @@ namespace Vocaluxe.Base
private static void _LoadConfig() private static void _LoadConfig()
{ {
CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.DataPath, _FileConfig)); CXMLReader xmlReader = CXMLReader.OpenFile(_FileConfig);
if (xmlReader == null) if (xmlReader == null)
return; return;
@@ -357,7 +355,7 @@ namespace Vocaluxe.Base
XmlWriter writer = null; XmlWriter writer = null;
try try
{ {
writer = XmlWriter.Create(Path.Combine(CSettings.DataPath, _FileConfig), XMLSettings); writer = XmlWriter.Create(_FileConfig, XMLSettings);
writer.WriteStartDocument(); writer.WriteStartDocument();
writer.WriteStartElement("root"); writer.WriteStartElement("root");
@@ -373,7 +371,7 @@ namespace Vocaluxe.Base
writer.WriteElementString("Screens", Screen.AllScreens.Length.ToString()); writer.WriteElementString("Screens", Screen.AllScreens.Length.ToString());
writer.WriteElementString("PrimaryScreenResolution", Screen.PrimaryScreen.Bounds.Size.ToString()); writer.WriteElementString("PrimaryScreenResolution", Screen.PrimaryScreen.Bounds.Size.ToString());
writer.WriteElementString("Directory", Environment.CurrentDirectory); writer.WriteElementString("Directory", CSettings.ProgramFolder);
writer.WriteEndElement(); writer.WriteEndElement();
@@ -806,10 +804,8 @@ namespace Vocaluxe.Base
//Check each parameter //Check each parameter
for (int i = 0; i < _Params.Count; i++) for (int i = 0; i < _Params.Count; i++)
{ {
//Switch parameter as lower case //Switch parameter to lower case
string param = _Params[i]; string param = _Params[i].ToLower();
param = param.ToLower();
string value = _Values[i]; string value = _Values[i];
+4 -4
View File
@@ -143,7 +143,7 @@ namespace Vocaluxe.Base
{ {
_CoverThemes.Clear(); _CoverThemes.Clear();
const string path = CSettings.FolderCover; string path = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover);
List<string> files = CHelper.ListFiles(path, "*.xml"); List<string> files = CHelper.ListFiles(path, "*.xml");
foreach (string file in files) foreach (string file in files)
@@ -179,10 +179,10 @@ namespace Vocaluxe.Base
var ignoreList = new List<string>(); var ignoreList = new List<string>();
string coverPath = Path.Combine(CSettings.FolderCover, coverTheme.Folder); string coverPath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover, coverTheme.Folder);
List<string> files = CHelper.ListImageFiles(coverPath, true, true); List<string> files = CHelper.ListImageFiles(coverPath, true, true);
CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.FolderCover, coverTheme.File)); CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover, coverTheme.File));
lock (_Covers) lock (_Covers)
{ {
if (xmlReader != null) if (xmlReader != null)
@@ -195,7 +195,7 @@ namespace Vocaluxe.Base
string filePath; string filePath;
xmlReader.GetValue("//root/Cover/" + coverName + "/Name", out name, String.Empty); xmlReader.GetValue("//root/Cover/" + coverName + "/Name", out name, String.Empty);
xmlReader.GetValue("//root/Cover/" + coverName + "/Path", out filePath, String.Empty); xmlReader.GetValue("//root/Cover/" + coverName + "/Path", out filePath, String.Empty);
string coverFilePath = Path.Combine(CSettings.FolderCover, Path.Combine(coverTheme.Folder, filePath)); string coverFilePath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover, coverTheme.Folder, filePath);
if (!File.Exists(coverFilePath)) if (!File.Exists(coverFilePath))
continue; continue;
+3 -3
View File
@@ -32,9 +32,9 @@ namespace Vocaluxe.Base
public static bool Init() public static bool Init()
{ {
_HighscoreDB = new CHighscoreDB(Path.Combine(Environment.CurrentDirectory, CConfig.FileHighscoreDB)); _HighscoreDB = new CHighscoreDB(CConfig.FileHighscoreDB);
_CoverDB = new CCoverDB(Path.Combine(Environment.CurrentDirectory, CSettings.FileCoverDB)); _CoverDB = new CCoverDB(Path.Combine(CSettings.DataFolder, CSettings.FileNameCoverDB));
_ResourceDB = new CResourceDB(Path.Combine(Environment.CurrentDirectory, CSettings.FileCreditsRessourcesDB)); _ResourceDB = new CResourceDB(Path.Combine(CSettings.ProgramFolder, CSettings.FileNameCreditsRessourcesDB));
if (!_HighscoreDB.Init()) if (!_HighscoreDB.Init())
{ {
+2 -2
View File
@@ -74,7 +74,7 @@ namespace Vocaluxe.Base
_Languages = new List<SLanguage>(); _Languages = new List<SLanguage>();
var files = new List<string>(); var files = new List<string>();
files.AddRange(CHelper.ListFiles(CSettings.FolderLanguages, "*.xml", true, true)); files.AddRange(CHelper.ListFiles(CSettings.FolderNameLanguages, "*.xml", true, true));
foreach (string file in files) foreach (string file in files)
_LoadLanguageFile(file); _LoadLanguageFile(file);
@@ -214,7 +214,7 @@ namespace Vocaluxe.Base
private static void _LoadLanguageFile(string fileName) private static void _LoadLanguageFile(string fileName)
{ {
var lang = new SLanguage {LanguageFilePath = Path.Combine(CSettings.FolderLanguages, fileName)}; var lang = new SLanguage {LanguageFilePath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameLanguages, fileName)};
CXMLReader xmlReader = CXMLReader.OpenFile(lang.LanguageFilePath); CXMLReader xmlReader = CXMLReader.OpenFile(lang.LanguageFilePath);
if (xmlReader == null) if (xmlReader == null)
+6 -6
View File
@@ -42,7 +42,7 @@ namespace Vocaluxe.Base
{ {
if (_LogFile != null) if (_LogFile != null)
return; return;
_LogFile = new StreamWriter(Path.Combine(CSettings.DataPath, _LogFileName), false, Encoding.UTF8); _LogFile = new StreamWriter(Path.Combine(CSettings.DataFolder, _LogFileName), false, Encoding.UTF8);
_LogFile.WriteLine(_LogName + " " + CSettings.GetFullVersionText() + " " + DateTime.Now); _LogFile.WriteLine(_LogName + " " + CSettings.GetFullVersionText() + " " + DateTime.Now);
_LogFile.WriteLine("----------------------------------------"); _LogFile.WriteLine("----------------------------------------");
@@ -117,11 +117,11 @@ namespace Vocaluxe.Base
public static void Init() public static void Init()
{ {
_ErrorLog = new CErrorLogFile(CSettings.FileErrorLog, "Error-Log"); _ErrorLog = new CErrorLogFile(CSettings.FileNameErrorLog, "Error-Log");
_PerformanceLog = new CLogFile(CSettings.FilePerformanceLog, "Performance-Log"); _PerformanceLog = new CLogFile(CSettings.FileNamePerformanceLog, "Performance-Log");
_BenchmarkLog = new CLogFile(CSettings.FileBenchmarkLog, "Benchmark-Log"); _BenchmarkLog = new CLogFile(CSettings.FileNameBenchmarkLog, "Benchmark-Log");
_DebugLog = new CLogFile(CSettings.FileDebugLog, "Debug-Log"); _DebugLog = new CLogFile(CSettings.FileNameDebugLog, "Debug-Log");
_SongInfoLog = new CLogFile(CSettings.FileSongInfoLog, "Song-Information-Log"); _SongInfoLog = new CLogFile(CSettings.FileNameSongInfoLog, "Song-Information-Log");
_BenchmarkTimer = new Stopwatch[_MaxBenchmarks]; _BenchmarkTimer = new Stopwatch[_MaxBenchmarks];
for (int i = 0; i < _BenchmarkTimer.Length; i++) for (int i = 0; i < _BenchmarkTimer.Length; i++)
+45 -30
View File
@@ -231,7 +231,7 @@ namespace Vocaluxe.Base
public string GetDataPath() public string GetDataPath()
{ {
return CSettings.DataPath; return CSettings.DataFolder;
} }
public float GetSlideShowImageTime() public float GetSlideShowImageTime()
@@ -340,7 +340,7 @@ namespace Vocaluxe.Base
return CBackgroundMusic.VideoEnabled; return CBackgroundMusic.VideoEnabled;
} }
public void SetStatus(bool disabled) public void SetDisabled(bool disabled)
{ {
CBackgroundMusic.Disabled = disabled; CBackgroundMusic.Disabled = disabled;
} }
@@ -582,6 +582,16 @@ namespace Vocaluxe.Base
{ {
return CGame.GetNumSongs(); return CGame.GetNumSongs();
} }
public CSong GetSong()
{
return CGame.GetSong();
}
public CSong GetSong(int round)
{
return CGame.GetSong(round);
}
} }
class CBprofiles : IProfiles class CBprofiles : IProfiles
@@ -870,29 +880,34 @@ namespace Vocaluxe.Base
class CBplaylist : IPlaylist class CBplaylist : IPlaylist
{ {
public void SetPlaylistName(int playlistID, string name) public void SetName(int playlistID, string name)
{ {
CPlaylists.SetPlaylistName(playlistID, name); CPlaylists.SetName(playlistID, name);
} }
public List<string> GetPlaylistNames() public List<string> GetNames()
{ {
return CPlaylists.PlaylistNames; return CPlaylists.Names;
} }
public string GetPlaylistName(int playlistID) public bool Exists(int playlistID)
{ {
return CPlaylists.GetPlaylistName(playlistID); return CPlaylists.Get(playlistID) != null;
} }
public void DeletePlaylist(int playlistID) public string GetName(int playlistID)
{ {
CPlaylists.DeletePlaylist(playlistID); return CPlaylists.GetName(playlistID);
} }
public void SavePlaylist(int playlistID) public void Delete(int playlistID)
{ {
CPlaylists.SavePlaylist(playlistID); CPlaylists.Delete(playlistID);
}
public void Save(int playlistID)
{
CPlaylists.Save(playlistID);
} }
public int GetNumPlaylists() public int GetNumPlaylists()
@@ -900,49 +915,49 @@ namespace Vocaluxe.Base
return CPlaylists.NumPlaylists; return CPlaylists.NumPlaylists;
} }
public void AddPlaylistSong(int playlistID, int songID) public void AddSong(int playlistID, int songID)
{ {
CPlaylists.AddPlaylistSong(playlistID, songID); CPlaylists.AddSong(playlistID, songID);
} }
public void AddPlaylistSong(int playlistID, int songID, EGameMode gameMode) public void AddSong(int playlistID, int songID, EGameMode gameMode)
{ {
CPlaylists.AddPlaylistSong(playlistID, songID, gameMode); CPlaylists.AddSong(playlistID, songID, gameMode);
} }
public void InsertPlaylistSong(int playlistID, int positionIndex, int songID, EGameMode gameMode) public void InsertSong(int playlistID, int positionIndex, int songID, EGameMode gameMode)
{ {
CPlaylists.InsertPlaylistSong(playlistID, positionIndex, songID, gameMode); CPlaylists.InsertSong(playlistID, positionIndex, songID, gameMode);
} }
public void MovePlaylistSong(int playlistID, int sourceIndex, int destIndex) public void MoveSong(int playlistID, int sourceIndex, int destIndex)
{ {
CPlaylists.MovePlaylistSong(playlistID, sourceIndex, destIndex); CPlaylists.MoveSong(playlistID, sourceIndex, destIndex);
} }
public void MovePlaylistSongDown(int playlistID, int songIndex) public void MoveSongDown(int playlistID, int songIndex)
{ {
CPlaylists.MovePlaylistSongDown(playlistID, songIndex); CPlaylists.MovePSongDown(playlistID, songIndex);
} }
public void MovePlaylistSongUp(int playlistID, int songIndex) public void MoveSongUp(int playlistID, int songIndex)
{ {
CPlaylists.MovePlaylistSongUp(playlistID, songIndex); CPlaylists.MoveSongUp(playlistID, songIndex);
} }
public void DeletePlaylistSong(int playlistID, int songIndex) public void DeleteSong(int playlistID, int songIndex)
{ {
CPlaylists.DeletePlaylistSong(playlistID, songIndex); CPlaylists.DeleteSong(playlistID, songIndex);
} }
public int GetPlaylistSongCount(int playlistID) public int GetSongCount(int playlistID)
{ {
return CPlaylists.GetPlaylistSongCount(playlistID); return CPlaylists.GetSongCount(playlistID);
} }
public CPlaylistSong GetPlaylistSong(int playlistID, int songIndex) public CPlaylistSong GetSong(int playlistID, int songIndex)
{ {
return CPlaylists.GetPlaylistSong(playlistID, songIndex); return CPlaylists.GetSong(playlistID, songIndex);
} }
} }
} }
+7 -6
View File
@@ -218,7 +218,7 @@ namespace Vocaluxe.Base
private static void _LoadPartyModes() private static void _LoadPartyModes()
{ {
var files = new List<string>(); var files = new List<string>();
files.AddRange(CHelper.ListFiles(CSettings.FolderPartyModes, "*.xml", false, true)); files.AddRange(CHelper.ListFiles(CSettings.FolderNamePartyModes, "*.xml", false, true));
foreach (string file in files) foreach (string file in files)
{ {
@@ -269,7 +269,8 @@ namespace Vocaluxe.Base
return pm; return pm;
} }
string pathToCode = Path.Combine(Path.Combine(CSettings.FolderPartyModes, pm.Folder), CSettings.FolderPartyModeCode); string pathToPm = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNamePartyModes, pm.Folder);
string pathToCode = Path.Combine(pathToPm, CSettings.FolderNamePartyModeCode);
var filesToCompile = new List<string>(); var filesToCompile = new List<string>();
filesToCompile.AddRange(CHelper.ListFiles(pathToCode, "*.cs", false, true)); filesToCompile.AddRange(CHelper.ListFiles(pathToCode, "*.cs", false, true));
@@ -278,7 +279,7 @@ namespace Vocaluxe.Base
if (output == null) if (output == null)
return pm; return pm;
if (!CLanguage.LoadPartyLanguageFiles(pm.PartyModeID, Path.Combine(Path.Combine(CSettings.FolderPartyModes, pm.Folder), CSettings.FolderPartyModeLanguages))) if (!CLanguage.LoadPartyLanguageFiles(pm.PartyModeID, Path.Combine(pathToPm, CSettings.FolderNamePartyModeLanguages)))
{ {
CLog.LogError("Error loading language files for PartyMode: " + file); CLog.LogError("Error loading language files for PartyMode: " + file);
return pm; return pm;
@@ -301,9 +302,9 @@ namespace Vocaluxe.Base
return pm; return pm;
} }
pm.PartyMode.Initialize(); pm.PartyMode.Initialize();
pm.PartyMode.SetFolder(Path.Combine(Directory.GetCurrentDirectory(), Path.Combine(CSettings.FolderPartyModes, pm.Folder))); pm.PartyMode.SetFolder(pathToPm);
if (!CTheme.AddTheme(Path.Combine(pm.PartyMode.GetFolder(), "Theme.xml"), pm.PartyModeID)) if (!CTheme.AddTheme(Path.Combine(pathToPm, "Theme.xml"), pm.PartyModeID))
return pm; return pm;
int themeIndex = CTheme.GetThemeIndex(pm.PartyModeID); int themeIndex = CTheme.GetThemeIndex(pm.PartyModeID);
@@ -318,7 +319,7 @@ namespace Vocaluxe.Base
foreach (string screenfile in pm.ScreenFiles) foreach (string screenfile in pm.ScreenFiles)
{ {
string xmlPath = Path.Combine(Path.Combine(CSettings.FolderPartyModes, pm.Folder), CSettings.FolderPartyModeScreens); string xmlPath = Path.Combine(pathToPm, CSettings.FolderNamePartyModeScreens);
CMenuParty screen = _GetPartyScreenInstance(output, screenfile, pm.Folder); CMenuParty screen = _GetPartyScreenInstance(output, screenfile, pm.Folder);
if (screen != null) if (screen != null)
+86 -99
View File
@@ -31,15 +31,16 @@ namespace Vocaluxe.Base
static class CPlaylists static class CPlaylists
{ {
private static List<CPlaylistFile> _Playlists; private static List<CPlaylistFile> _Playlists;
private static int _NextID;
public static CPlaylistFile[] Playlists public static IEnumerable<CPlaylistFile> Playlists
{ {
get { return _Playlists.ToArray(); } get { return _Playlists.AsReadOnly(); }
} }
public static List<string> PlaylistNames public static List<string> Names
{ {
get { return _Playlists.Select(t => t.PlaylistName).ToList(); } get { return _Playlists.Select(t => t.Name).ToList(); }
} }
public static int NumPlaylists public static int NumPlaylists
@@ -49,176 +50,169 @@ namespace Vocaluxe.Base
public static void Init() public static void Init()
{ {
LoadPlaylists(); Load();
_ConvertUSDXPlaylists(); _ConvertUSDXPlaylists();
_SortPlaylistsByName(); _SortByName();
} }
private static void _ConvertUSDXPlaylists() private static void _ConvertUSDXPlaylists()
{ {
var files = new List<string>(); var files = new List<string>();
files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists), "*.upl", true, true)); files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataFolder, CConfig.FolderPlaylists), "*.upl", true, true));
foreach (string file in files) foreach (string file in files)
{ {
CPlaylistFile playlist = _ConvertUSDXPlaylist(file); CPlaylistFile playlist = _ConvertUSDXPlaylist(file);
playlist.SavePlaylist(); playlist.Save();
_Playlists.Add(playlist); _Playlists.Add(playlist);
} }
} }
public static void LoadPlaylists() public static void Load()
{ {
_Playlists = new List<CPlaylistFile>(); _Playlists = new List<CPlaylistFile>();
var files = new List<string>(); var files = new List<string>();
files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists), "*.xml", true, true)); files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataFolder, CConfig.FolderPlaylists), "*.xml", true, true));
foreach (string file in files) foreach (string file in files)
{ {
CPlaylistFile playlist = new CPlaylistFile(file, files.IndexOf(file)); CPlaylistFile playlist = new CPlaylistFile(files.IndexOf(file), file);
_Playlists.Add(playlist); _Playlists.Add(playlist);
} }
} }
public static string GetPlaylistName(int playlistID) public static CPlaylistFile Get(int playlistID)
{ {
if (playlistID >= _Playlists.Count || playlistID < 0) return _Playlists.FirstOrDefault(pl => pl.Id == playlistID);
return "Error: Can't find Playlist";
return _Playlists[playlistID].PlaylistName;
} }
public static void SetPlaylistName(int playlistID, string name) public static string GetName(int playlistID)
{ {
if (playlistID >= _Playlists.Count || playlistID < 0) CPlaylistFile pl = Get(playlistID);
return; return pl == null ? "Error: Can't find Playlist" : pl.Name;
_Playlists[playlistID].PlaylistName = name;
} }
public static void DeletePlaylist(int playlistID) public static void SetName(int playlistID, string name)
{ {
if (playlistID < 0 || playlistID >= _Playlists.Count) CPlaylistFile pl = Get(playlistID);
if (pl != null)
pl.Name = name;
}
public static void Delete(int playlistID)
{
CPlaylistFile pl = Get(playlistID);
if (pl == null)
return; return;
if (_Playlists[playlistID].PlaylistFile != "") if (pl.File != "" && File.Exists(pl.File))
{ {
try try
{ {
File.Delete(_Playlists[playlistID].PlaylistFile); File.Delete(pl.File);
} }
catch (Exception) catch (Exception)
{ {
CLog.LogError("Can't delete Playlist File " + _Playlists[playlistID].PlaylistFile + ".xml"); CLog.LogError("Can't delete Playlist File " + _Playlists[playlistID].File + ".xml");
} }
} }
_Playlists.RemoveAt(playlistID); _Playlists.Remove(pl);
} }
public static void SavePlaylist(int playlistID) public static void Save(int playlistID)
{ {
if (playlistID < 0 || playlistID >= _Playlists.Count) CPlaylistFile pl = Get(playlistID);
return; if (pl != null)
_Playlists[playlistID].SavePlaylist(); pl.Save();
} }
public static int NewPlaylist() public static int NewPlaylist(string name = "New Playlist")
{ {
CPlaylistFile pl = new CPlaylistFile {PlaylistName = "New Playlist", Id = _Playlists.Count}; CPlaylistFile pl = new CPlaylistFile(_NextID++) {Name = name};
_Playlists.Add(pl); _Playlists.Add(pl);
return _Playlists.Count - 1; return pl.Id;
} }
public static void AddPlaylistSong(int playlistID, int songID) public static void AddSong(int playlistID, int songID)
{ {
if (playlistID >= _Playlists.Count || playlistID < 0) CPlaylistFile pl = Get(playlistID);
return; if (pl != null)
pl.AddSong(songID);
_Playlists[playlistID].AddSong(songID);
} }
public static void AddPlaylistSong(int playlistID, int songID, EGameMode gameMode) public static void AddSong(int playlistID, int songID, EGameMode gameMode)
{ {
if (playlistID >= _Playlists.Count || playlistID < 0) CPlaylistFile pl = Get(playlistID);
return; if (pl != null)
pl.AddSong(songID, gameMode);
_Playlists[playlistID].AddSong(songID, gameMode);
} }
public static void InsertPlaylistSong(int playlistID, int positionIndex, int songID, EGameMode gameMode) public static void InsertSong(int playlistID, int positionIndex, int songID, EGameMode gameMode)
{ {
if (playlistID >= _Playlists.Count || playlistID < 0) CPlaylistFile pl = Get(playlistID);
return; if (pl != null)
pl.InsertSong(positionIndex, songID, gameMode);
_Playlists[playlistID].SongInsert(positionIndex, songID, gameMode);
} }
public static void MovePlaylistSong(int playlistID, int sourceIndex, int destIndex) public static void MoveSong(int playlistID, int sourceIndex, int destIndex)
{ {
if (playlistID >= _Playlists.Count || playlistID < 0) CPlaylistFile pl = Get(playlistID);
return; if (pl != null)
pl.MoveSong(sourceIndex, destIndex);
_Playlists[playlistID].SongMove(sourceIndex, destIndex);
} }
public static void MovePlaylistSongDown(int playlistID, int songIndex) public static void MovePSongDown(int playlistID, int songIndex)
{ {
if (playlistID >= _Playlists.Count || playlistID < 0) CPlaylistFile pl = Get(playlistID);
return; if (pl != null)
pl.MoveSongDown(songIndex);
_Playlists[playlistID].SongDown(songIndex);
} }
public static void MovePlaylistSongUp(int playlistID, int songIndex) public static void MoveSongUp(int playlistID, int songIndex)
{ {
if (playlistID >= _Playlists.Count || playlistID < 0) CPlaylistFile pl = Get(playlistID);
return; if (pl != null)
pl.MoveSongUp(songIndex);
_Playlists[playlistID].SongUp(songIndex);
} }
public static void DeletePlaylistSong(int playlistID, int songIndex) public static void DeleteSong(int playlistID, int songIndex)
{ {
if (playlistID >= _Playlists.Count || playlistID < 0) CPlaylistFile pl = Get(playlistID);
return; if (pl != null)
pl.DeleteSong(songIndex);
_Playlists[playlistID].DeleteSong(songIndex);
} }
public static int GetPlaylistSongCount(int playlistID) public static int GetSongCount(int playlistID)
{ {
if (playlistID >= _Playlists.Count || playlistID < 0) CPlaylistFile pl = Get(playlistID);
return 0; return pl != null ? pl.Songs.Count : -1;
return _Playlists[playlistID].Songs.Count;
} }
public static CPlaylistSong GetPlaylistSong(int playlistID, int songIndex) public static CPlaylistSong GetSong(int playlistID, int songIndex)
{ {
if (playlistID >= _Playlists.Count || playlistID < 0) CPlaylistFile pl = Get(playlistID);
if (pl == null || songIndex >= pl.Songs.Count)
return null; return null;
if (songIndex >= _Playlists[playlistID].Songs.Count) return pl.Songs[songIndex];
return null;
return _Playlists[playlistID].Songs[songIndex];
} }
#region private methods #region private methods
private static void _SortPlaylistsByName() private static void _SortByName()
{ {
_Playlists.Sort(_CompareByPlaylistName); _Playlists.Sort(_CompareByName);
} }
private static int _CompareByPlaylistName(CPlaylistFile a, CPlaylistFile b) private static int _CompareByName(CPlaylistFile a, CPlaylistFile b)
{ {
return String.CompareOrdinal(a.PlaylistName, b.PlaylistName); return String.CompareOrdinal(a.Name, b.Name);
} }
private static CPlaylistFile _ConvertUSDXPlaylist(string file) private static CPlaylistFile _ConvertUSDXPlaylist(string file)
{ {
var pl = new CPlaylistFile(); var pl = new CPlaylistFile(_NextID++);
ReadOnlyCollection<CSong> allSongs = CSongs.AllSongs; ReadOnlyCollection<CSong> allSongs = CSongs.AllSongs;
if (!File.Exists(file)) if (!File.Exists(file))
@@ -234,30 +228,23 @@ namespace Vocaluxe.Base
int pos = line.IndexOf(":", StringComparison.Ordinal); int pos = line.IndexOf(":", StringComparison.Ordinal);
if (pos <= 0) if (pos <= 0)
continue; continue;
//Name or comment
if (line[0] == '#') if (line[0] == '#')
{ {
//Name or comment
string identifier = line.Substring(1, pos - 1).Trim(); string identifier = line.Substring(1, pos - 1).Trim();
string value = line.Substring(pos + 1, line.Length - pos - 1).Trim(); string value = line.Substring(pos + 1, line.Length - pos - 1).Trim();
if (identifier.ToUpper() == "NAME") if (identifier.ToUpper() == "NAME")
pl.PlaylistName = value; pl.Name = value;
} }
//Song
else else
{ {
//Song
string artist = line.Substring(0, pos - 1).Trim(); string artist = line.Substring(0, pos - 1).Trim();
string title = line.Substring(pos + 1, line.Length - pos - 1).Trim(); string title = line.Substring(pos + 1, line.Length - pos - 1).Trim();
bool found = false; CSong plSong = allSongs.FirstOrDefault(song => song.Artist == artist && song.Title == title);
foreach (CSong song in allSongs) if (plSong != null)
{ pl.AddSong(plSong.ID);
if (song.Artist == artist && song.Title == title) else
{
pl.AddSong(song.ID);
found = true;
break;
}
}
if (!found)
CLog.LogError("Can't find song '" + title + "' from '" + artist + "' in playlist file: " + file); CLog.LogError("Can't find song '" + title + "' from '" + artist + "' in playlist file: " + file);
} }
} }
+42 -36
View File
@@ -71,45 +71,51 @@ namespace Vocaluxe.Base
public const int VertexBufferElements = 10000; public const int VertexBufferElements = 10000;
public static readonly string ProgramFolder = AppDomain.CurrentDomain.BaseDirectory;
#if INSTALLER #if INSTALLER
public static readonly string DataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Vocaluxe"); public static readonly string DataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Vocaluxe");
#else #else
public static readonly string DataPath = Environment.CurrentDirectory; public static readonly string DataFolder = ProgramFolder;
#endif #endif
public const string Icon = "Vocaluxe.ico";
public const string Logo = "Logo.png";
public const string FallbackLanguage = "English"; public const string FallbackLanguage = "English";
public const string FileFonts = "Fonts.xml";
public const string FileOldHighscoreDB = "Ultrastar.db"; public const string FileNameIcon = "Vocaluxe.ico";
public const string FileCoverDB = "CoverDB.sqlite"; public const string FileNameLogo = "Logo.png";
public const string FileCreditsRessourcesDB = "CreditsRessourcesDB.sqlite"; public const string FileNameFonts = "Fonts.xml";
public const string FilePerformanceLog = "Performance.log";
public const string FileErrorLog = "Error.log";
public const string FileBenchmarkLog = "Benchmark.log";
public const string FileDebugLog = "Debug.log";
public const string FileSongInfoLog = "SongInformation.log";
public const string SoundT440 = "440Hz.mp3"; public const string FileNameOldHighscoreDB = "Ultrastar.db";
public const string FileNameCoverDB = "CoverDB.sqlite";
public const string FileNameCreditsRessourcesDB = "CreditsRessourcesDB.sqlite";
public const string FolderCover = "Cover"; public const string FileNamePerformanceLog = "Performance.log";
public const string FolderGraphics = "Graphics"; public const string FileNameErrorLog = "Error.log";
public const string FolderFonts = "Fonts"; public const string FileNameBenchmarkLog = "Benchmark.log";
public const string FolderThemes = "Themes"; public const string FileNameDebugLog = "Debug.log";
public const string FolderThemeFonts = "Fonts"; public const string FileNameSongInfoLog = "SongInformation.log";
public const string FolderScreens = "Screens";
public const string FolderPhotos = "Photos";
public const string FolderSounds = "Sounds";
public const string FolderLanguages = "Languages";
public const string FolderScreenshots = "Screenshots";
public const string FolderBackgroundMusic = "BackgroundMusic";
public const string FolderPartyModes = "PartyModes"; public const string FileNameSoundT440 = "440Hz.mp3";
public const string FolderPartyModeCode = "Code";
public const string FolderPartyModeScreens = "Screens"; public const string FolderNameSongs = "Songs";
public const string FolderPartyModeLanguages = "Languages"; public const string FolderNameProfiles = "Profiles";
public const string FolderPartyModeFonts = "Fonts"; public const string FolderNameCover = "Cover";
public const string FolderNameGraphics = "Graphics";
public const string FolderNameFonts = "Fonts";
public const string FolderNameThemes = "Themes";
public const string FolderNameThemeFonts = "Fonts";
public const string FolderNameScreens = "Screens";
public const string FolderNamePhotos = "Photos";
public const string FolderNameSounds = "Sounds";
public const string FolderNameLanguages = "Languages";
public const string FolderNameScreenshots = "Screenshots";
public const string FolderNameBackgroundMusic = "BackgroundMusic";
public const string FolderNamePartyModes = "PartyModes";
public const string FolderNamePartyModeCode = "Code";
public const string FolderNamePartyModeScreens = "Screens";
public const string FolderNamePartyModeLanguages = "Languages";
public const string FolderNamePartyModeFonts = "Fonts";
public const string LinkAndroidApp = "https://build.phonegap.com/apps/639714/download/android/?qr_key=uY98ymvTr6K144RyTdhs"; public const string LinkAndroidApp = "https://build.phonegap.com/apps/639714/download/android/?qr_key=uY98ymvTr6K144RyTdhs";
public const string LinkSymbianApp = "https://build.phonegap.com/apps/639714/download/symbian/?qr_key=uY98ymvTr6K144RyTdhs"; public const string LinkSymbianApp = "https://build.phonegap.com/apps/639714/download/symbian/?qr_key=uY98ymvTr6K144RyTdhs";
@@ -213,12 +219,12 @@ namespace Vocaluxe.Base
{ {
var folders = new List<string> var folders = new List<string>
{ {
Path.Combine(Environment.CurrentDirectory, FolderCover), Path.Combine(ProgramFolder, FolderNameCover),
Path.Combine(Environment.CurrentDirectory, FolderFonts), Path.Combine(ProgramFolder, FolderNameFonts),
Path.Combine(DataPath, FolderScreenshots), Path.Combine(DataFolder, FolderNameScreenshots),
Path.Combine(Environment.CurrentDirectory, FolderBackgroundMusic), Path.Combine(ProgramFolder, FolderNameBackgroundMusic),
Path.Combine(Environment.CurrentDirectory, FolderSounds), Path.Combine(ProgramFolder, FolderNameSounds),
Path.Combine(DataPath, CConfig.FolderPlaylists) Path.Combine(DataFolder, CConfig.FolderPlaylists)
}; };
folders.AddRange(CConfig.ProfileFolders); folders.AddRange(CConfig.ProfileFolders);
folders.AddRange(CConfig.SongFolders); folders.AddRange(CConfig.SongFolders);
+3 -3
View File
@@ -85,7 +85,7 @@ namespace Vocaluxe.Base
} }
#region Stream Handling #region Stream Handling
public static int Load(string media, bool loop=false, bool prescan=false) public static int Load(string media, bool loop = false, bool prescan = false)
{ {
return _Playback.Load(media, loop, prescan); return _Playback.Load(media, loop, prescan);
} }
@@ -176,11 +176,11 @@ namespace Vocaluxe.Base
#region Sounds #region Sounds
public static int PlaySound(ESounds sound, bool fade = true) public static int PlaySound(ESounds sound, bool fade = true)
{ {
string file = Path.Combine(Environment.CurrentDirectory, CSettings.FolderSounds); string file = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameSounds);
switch (sound) switch (sound)
{ {
case ESounds.T440: case ESounds.T440:
file = Path.Combine(file, CSettings.SoundT440); file = Path.Combine(file, CSettings.FileNameSoundT440);
break; break;
default: default:
return -1; return -1;
+6 -6
View File
@@ -266,13 +266,13 @@ namespace Vocaluxe.Base
{ {
CFonts.LoadThemeFonts( CFonts.LoadThemeFonts(
_Themes[themeIndex].Name, _Themes[themeIndex].Name,
Path.Combine(Path.Combine(_Themes[themeIndex].Path, _Themes[themeIndex].SkinFolder), CSettings.FolderThemeFonts), Path.Combine(Path.Combine(_Themes[themeIndex].Path, _Themes[themeIndex].SkinFolder), CSettings.FolderNameThemeFonts),
xmlReader); xmlReader);
} }
else else
{ {
CFonts.LoadPartyModeFonts(_Themes[themeIndex].PartyModeID, CFonts.LoadPartyModeFonts(_Themes[themeIndex].PartyModeID,
Path.Combine(_Themes[themeIndex].Path, CSettings.FolderPartyModeFonts), Path.Combine(_Themes[themeIndex].Path, CSettings.FolderNamePartyModeFonts),
xmlReader); xmlReader);
} }
return true; return true;
@@ -385,11 +385,11 @@ namespace Vocaluxe.Base
{ {
_Themes.Clear(); _Themes.Clear();
string path = Path.Combine(Directory.GetCurrentDirectory(), CSettings.FolderThemes); string path = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameThemes);
List<string> files = CHelper.ListFiles(path, "*.xml"); List<string> files = CHelper.ListFiles(path, "*.xml", false, true);
foreach (string file in files) foreach (string file in files)
AddTheme(Path.Combine(path, file), -1); AddTheme(file, -1);
} }
public static bool AddTheme(string filePath, int partyModeID) public static bool AddTheme(string filePath, int partyModeID)
@@ -546,7 +546,7 @@ namespace Vocaluxe.Base
if (themeIndex != -1) if (themeIndex != -1)
{ {
path = Path.Combine(_Themes[themeIndex].Path, _Themes[themeIndex].SkinFolder); path = Path.Combine(_Themes[themeIndex].Path, _Themes[themeIndex].SkinFolder);
path = Path.Combine(path, CSettings.FolderScreens); path = Path.Combine(path, CSettings.FolderNameScreens);
} }
else else
CLog.LogError("Can't find current Theme"); CLog.LogError("Can't find current Theme");
+2 -2
View File
@@ -341,11 +341,11 @@ namespace Vocaluxe.Base.Fonts
/// <returns></returns> /// <returns></returns>
private static void _LoadFontList() private static void _LoadFontList()
{ {
CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.FolderFonts, CSettings.FileFonts)); CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameFonts, CSettings.FileNameFonts));
if (xmlReader == null) if (xmlReader == null)
return; return;
_LoadFontFiles(xmlReader, Path.Combine(Directory.GetCurrentDirectory(), CSettings.FolderFonts)); _LoadFontFiles(xmlReader, Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameFonts));
} }
/// <summary> /// <summary>
+32 -38
View File
@@ -342,7 +342,7 @@ namespace Vocaluxe.Base.Server
return false; return false;
string name = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"); string name = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
string filePath = _SaveImage(photoData.Photo, name, CSettings.FolderPhotos); string filePath = _SaveImage(photoData.Photo, name, CSettings.FolderNamePhotos);
if (!string.IsNullOrEmpty(filePath)) if (!string.IsNullOrEmpty(filePath))
{ {
_PhotosOfThisRound.Add(filePath); _PhotosOfThisRound.Add(filePath);
@@ -461,20 +461,20 @@ namespace Vocaluxe.Base.Server
private static SPlaylistInfo _GetPlaylist(int playlistId) private static SPlaylistInfo _GetPlaylist(int playlistId)
{ {
if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) if (CPlaylists.Get(playlistId) == null)
throw new ArgumentException("invalid playlistId"); throw new ArgumentException("invalid playlistId");
return _GetPlaylistInfo(CPlaylists.Playlists[playlistId]); return _GetPlaylistInfo(CPlaylists.Get(playlistId));
} }
private static void _AddSongToPlaylist(int songId, int playlistId, bool allowDuplicates) private static void _AddSongToPlaylist(int songId, int playlistId, bool allowDuplicates)
{ {
if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) if (CPlaylists.Get(playlistId) == null)
throw new ArgumentException("invalid playlistId"); throw new ArgumentException("invalid playlistId");
if (allowDuplicates || !_PlaylistContainsSong(songId, playlistId)) if (allowDuplicates || !_PlaylistContainsSong(songId, playlistId))
{ {
CPlaylists.AddPlaylistSong(playlistId, songId); CPlaylists.AddSong(playlistId, songId);
CPlaylists.SavePlaylist(playlistId); CPlaylists.Save(playlistId);
} }
else else
throw new ArgumentException("song exists in this playlist"); throw new ArgumentException("song exists in this playlist");
@@ -482,45 +482,49 @@ namespace Vocaluxe.Base.Server
private static void _RemoveSongFromPlaylist(int position, int playlistId, int songId) private static void _RemoveSongFromPlaylist(int position, int playlistId, int songId)
{ {
if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) CPlaylistFile pl = CPlaylists.Get(playlistId);
if (pl == null)
throw new ArgumentException("invalid playlistId"); throw new ArgumentException("invalid playlistId");
if (!_PlaylistContainsSong(songId, playlistId)) if (!_PlaylistContainsSong(songId, playlistId))
throw new ArgumentException("invalid songId"); throw new ArgumentException("invalid songId");
if (position < 0 || CPlaylists.Playlists[playlistId].Songs.Count <= position if (position < 0 || pl.Songs.Count <= position
|| CPlaylists.Playlists[playlistId].Songs[position].SongID != songId) || pl.Songs[position].SongID != songId)
throw new ArgumentException("invalid position"); throw new ArgumentException("invalid position");
CPlaylists.Playlists[playlistId].DeleteSong(position); pl.DeleteSong(position);
CPlaylists.SavePlaylist(playlistId); pl.Save();
} }
private static void _MoveSongInPlaylist(int newPosition, int playlistId, int songId) private static void _MoveSongInPlaylist(int newPosition, int playlistId, int songId)
{ {
if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) CPlaylistFile pl = CPlaylists.Get(playlistId);
if (pl == null)
throw new ArgumentException("invalid playlistId"); throw new ArgumentException("invalid playlistId");
if (!_PlaylistContainsSong(songId, playlistId)) if (!_PlaylistContainsSong(songId, playlistId))
throw new ArgumentException("invalid songId"); throw new ArgumentException("invalid songId");
if (CPlaylists.Playlists[playlistId].Songs.Count < newPosition) if (pl.Songs.Count < newPosition)
throw new ArgumentException("invalid newPosition"); throw new ArgumentException("invalid newPosition");
int oldPosition = CPlaylists.Playlists[playlistId].Songs.FindIndex(s => s.SongID == songId); int oldPosition = pl.Songs.FindIndex(s => s.SongID == songId);
CPlaylists.MovePlaylistSong(playlistId, oldPosition, newPosition); pl.MoveSong(oldPosition, newPosition);
CPlaylists.SavePlaylist(playlistId); pl.Save();
} }
private static bool _PlaylistContainsSong(int songId, int playlistId) private static bool _PlaylistContainsSong(int songId, int playlistId)
{ {
if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) CPlaylistFile pl = CPlaylists.Get(playlistId);
if (pl == null)
throw new ArgumentException("invalid playlistId"); throw new ArgumentException("invalid playlistId");
return CPlaylists.Playlists[playlistId].Songs.Any(s => s.SongID == songId); return pl.Songs.Any(s => s.SongID == songId);
} }
private static SPlaylistSongInfo[] _GetPlaylistSongs(int playlistId) private static SPlaylistSongInfo[] _GetPlaylistSongs(int playlistId)
{ {
if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) CPlaylistFile pl = CPlaylists.Get(playlistId);
if (pl == null)
throw new ArgumentException("invalid playlistId"); throw new ArgumentException("invalid playlistId");
return _GetPlaylistSongInfos(CPlaylists.Playlists[playlistId]); return _GetPlaylistSongInfos(pl);
} }
private static SPlaylistSongInfo _GetPlaylistSongInfo(CPlaylistSong playlistSong, int playlistId, int playlistPos) private static SPlaylistSongInfo _GetPlaylistSongInfo(CPlaylistSong playlistSong, int playlistId, int playlistPos)
@@ -549,7 +553,7 @@ namespace Vocaluxe.Base.Server
return new SPlaylistInfo return new SPlaylistInfo
{ {
PlaylistId = playlist.Id, PlaylistId = playlist.Id,
PlaylistName = playlist.PlaylistName, PlaylistName = playlist.Name,
SongCount = playlist.Songs.Count, SongCount = playlist.Songs.Count,
LastChanged = DateTime.Now.ToLongDateString() LastChanged = DateTime.Now.ToLongDateString()
}; };
@@ -557,16 +561,15 @@ namespace Vocaluxe.Base.Server
private static void _RemovePlaylist(int playlistId) private static void _RemovePlaylist(int playlistId)
{ {
if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) if (CPlaylists.Get(playlistId) == null)
throw new ArgumentException("invalid playlistId"); throw new ArgumentException("invalid playlistId");
CPlaylists.DeletePlaylist(playlistId); CPlaylists.Delete(playlistId);
} }
private static int _AddPlaylist(string playlistName) private static int _AddPlaylist(string playlistName)
{ {
int newPlaylistId = CPlaylists.NewPlaylist(); int newPlaylistId = CPlaylists.NewPlaylist(playlistName);
CPlaylists.Playlists[newPlaylistId].PlaylistName = playlistName; CPlaylists.Save(newPlaylistId);
CPlaylists.SavePlaylist(newPlaylistId);
return newPlaylistId; return newPlaylistId;
} }
@@ -682,19 +685,10 @@ namespace Vocaluxe.Base.Server
if (!Directory.Exists(folder)) if (!Directory.Exists(folder))
Directory.CreateDirectory(folder); Directory.CreateDirectory(folder);
string filename = Path.Combine(folder, name); string file = CHelper.GetUniqueFileName(folder, name + "." + extension);
if (File.Exists(filename + "." + extension))
{
int i = 0;
while (File.Exists(filename + "_" + i + "." + extension))
i++;
filename = filename + "_" + i + "." + extension;
}
else
filename = filename + "." + extension;
avatarImage.Save(filename); avatarImage.Save(file);
return filename; return file;
} }
} }
} }
+2 -2
View File
@@ -29,7 +29,7 @@ namespace Vocaluxe
public CSplashScreen() public CSplashScreen()
{ {
string path = Path.Combine(Environment.CurrentDirectory, Path.Combine(CSettings.FolderGraphics, CSettings.Logo)); string path = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameGraphics, CSettings.FileNameLogo);
if (File.Exists(path)) if (File.Exists(path))
{ {
try try
@@ -45,7 +45,7 @@ namespace Vocaluxe
else else
CLog.LogError("Can't find " + path); CLog.LogError("Can't find " + path);
path = Path.Combine(Environment.CurrentDirectory, CSettings.Icon); path = Path.Combine(CSettings.ProgramFolder, CSettings.FileNameIcon);
if (File.Exists(path)) if (File.Exists(path))
{ {
try try
+1 -1
View File
@@ -47,7 +47,7 @@ namespace Vocaluxe.Lib.Database
public override bool Init() public override bool Init()
{ {
string oldDBFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileOldHighscoreDB); string oldDBFilePath = Path.Combine(CSettings.DataFolder, CSettings.FileNameOldHighscoreDB);
if (File.Exists(oldDBFilePath)) if (File.Exists(oldDBFilePath))
{ {
if (File.Exists(_FilePath)) if (File.Exists(_FilePath))
+1 -1
View File
@@ -119,7 +119,7 @@ namespace Vocaluxe.Lib.Database
{ {
foreach (string file in _FilesV1) foreach (string file in _FilesV1)
{ {
string filePath = Path.Combine(Environment.CurrentDirectory, file); string filePath = Path.Combine(CSettings.ProgramFolder, file);
if (!_AddImageToCreditsDB(filePath, transaction)) if (!_AddImageToCreditsDB(filePath, transaction))
{ {
transaction.Rollback(); transaction.Rollback();
+3 -9
View File
@@ -84,7 +84,7 @@ namespace Vocaluxe.Lib.Draw
/// </summary> /// </summary>
public CDirect3D() public CDirect3D()
{ {
Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); Icon = new Icon(Path.Combine(CSettings.ProgramFolder, CSettings.FileNameIcon));
//Fill Queue with 100000 IDs //Fill Queue with 100000 IDs
for (int i = 0; i < _MaxID; i++) for (int i = 0; i < _MaxID; i++)
@@ -320,7 +320,6 @@ namespace Vocaluxe.Lib.Draw
} }
else else
_DoResize(); _DoResize();
;
} }
/// <summary> /// <summary>
@@ -731,18 +730,13 @@ namespace Vocaluxe.Lib.Draw
/// </summary> /// </summary>
public void MakeScreenShot() public void MakeScreenShot()
{ {
const string file = "Screenshot_"; string file = CHelper.GetUniqueFileName(Path.Combine(CSettings.DataFolder, CSettings.FolderNameScreenshots), "Screenshot.bmp");
string path = Path.Combine(CSettings.DataPath, CSettings.FolderScreenshots);
int i = 0;
while (File.Exists(Path.Combine(path, file + i.ToString("00000") + ".bmp")))
i++;
//create a surface of the frame //create a surface of the frame
using (Surface surface = _Device.GetBackBuffer(0, 0)) using (Surface surface = _Device.GetBackBuffer(0, 0))
{ {
var screen = new Bitmap(Surface.ToStream(surface, ImageFileFormat.Bmp)); var screen = new Bitmap(Surface.ToStream(surface, ImageFileFormat.Bmp));
screen.Save(Path.Combine(path, file + i.ToString("00000") + ".bmp"), ImageFormat.Bmp); screen.Save(file, ImageFormat.Bmp);
screen.Dispose(); screen.Dispose();
} }
} }
+3 -8
View File
@@ -51,7 +51,7 @@ namespace Vocaluxe.Lib.Draw
public CDrawWinForm() public CDrawWinForm()
{ {
Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); Icon = new Icon(Path.Combine(CSettings.ProgramFolder, CSettings.FileNameIcon));
_Keys = new CKeys(); _Keys = new CKeys();
_Mouse = new CMouse(); _Mouse = new CMouse();
@@ -304,14 +304,9 @@ namespace Vocaluxe.Lib.Draw
public void MakeScreenShot() public void MakeScreenShot()
{ {
const string file = "Screenshot_"; string file = CHelper.GetUniqueFileName(Path.Combine(CSettings.DataFolder, CSettings.FolderNameScreenshots), "Screenshot.bmp");
string path = Path.Combine(CSettings.DataPath, CSettings.FolderScreenshots);
int i = 0; _Backbuffer.Save(file, ImageFormat.Png);
while (File.Exists(Path.Combine(path, file + i.ToString("00000") + ".png")))
i++;
_Backbuffer.Save(Path.Combine(path, file + i.ToString("00000") + ".png"), ImageFormat.Png);
} }
public void DrawLine(int a, int r, int g, int b, int w, int x1, int y1, int x2, int y2) public void DrawLine(int a, int r, int g, int b, int w, int x1, int y1, int x2, int y2)
+3 -8
View File
@@ -111,7 +111,7 @@ namespace Vocaluxe.Lib.Draw
public COpenGL() public COpenGL()
{ {
Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); Icon = new Icon(Path.Combine(CSettings.ProgramFolder, CSettings.FileNameIcon));
for (int i = 1; i < _MaxID; i++) for (int i = 1; i < _MaxID; i++)
_IDs.Enqueue(i); _IDs.Enqueue(i);
@@ -534,12 +534,7 @@ namespace Vocaluxe.Lib.Draw
public void MakeScreenShot() public void MakeScreenShot()
{ {
const string file = "Screenshot_"; string file = CHelper.GetUniqueFileName(Path.Combine(CSettings.DataFolder, CSettings.FolderNameScreenshots), "Screenshot.bmp");
string path = Path.Combine(CSettings.DataPath, CSettings.FolderScreenshots);
int i = 0;
while (File.Exists(Path.Combine(path, file + i.ToString("00000") + ".bmp")))
i++;
int width = GetScreenWidth(); int width = GetScreenWidth();
int height = GetScreenHeight(); int height = GetScreenHeight();
@@ -552,7 +547,7 @@ namespace Vocaluxe.Lib.Draw
screen.UnlockBits(bmpData); screen.UnlockBits(bmpData);
screen.RotateFlip(RotateFlipType.RotateNoneFlipY); screen.RotateFlip(RotateFlipType.RotateNoneFlipY);
screen.Save(Path.Combine(path, file + i.ToString("00000") + ".bmp"), ImageFormat.Bmp); screen.Save(file, ImageFormat.Bmp);
} }
} }
+40 -61
View File
@@ -18,6 +18,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Xml; using System.Xml;
using Vocaluxe.Base; using Vocaluxe.Base;
using VocaluxeLib; using VocaluxeLib;
@@ -28,31 +29,26 @@ namespace Vocaluxe.Lib.Playlist
{ {
public class CPlaylistFile public class CPlaylistFile
{ {
public string PlaylistName; public string Name = "";
public string PlaylistFile; public string File;
public int Id = -1; public readonly int Id = -1;
public List<CPlaylistSong> Songs = new List<CPlaylistSong>(); public List<CPlaylistSong> Songs = new List<CPlaylistSong>();
public CPlaylistFile() public CPlaylistFile(int id, string file = "")
{
PlaylistName = string.Empty;
PlaylistFile = string.Empty;
}
public CPlaylistFile(string file, int id)
{ {
Id = id; Id = id;
PlaylistFile = file; File = file;
_LoadPlaylist(); if (File != "")
_Load();
} }
public void SavePlaylist() public void Save()
{ {
if (PlaylistFile == "") if (File == "")
{ {
string filename = string.Empty; string filename = string.Empty;
// ReSharper disable LoopCanBeConvertedToQuery // ReSharper disable LoopCanBeConvertedToQuery
foreach (char chr in PlaylistName) foreach (char chr in Name)
// ReSharper restore LoopCanBeConvertedToQuery // ReSharper restore LoopCanBeConvertedToQuery
{ {
if (char.IsLetter(chr)) if (char.IsLetter(chr))
@@ -62,25 +58,17 @@ namespace Vocaluxe.Lib.Playlist
if (filename == "") if (filename == "")
filename = "1"; filename = "1";
int i = 0; File = CHelper.GetUniqueFileName(Path.Combine(CSettings.DataFolder, CConfig.FolderPlaylists), filename + ".xml");
while (File.Exists(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists, filename + ".xml")))
{
i++;
if (!File.Exists(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists, filename + i + ".xml")))
filename += i;
}
PlaylistFile = Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists, filename + ".xml");
} }
XmlWriter writer; XmlWriter writer;
try try
{ {
writer = XmlWriter.Create(PlaylistFile, CConfig.XMLSettings); writer = XmlWriter.Create(File, CConfig.XMLSettings);
} }
catch (Exception e) catch (Exception e)
{ {
CLog.LogError("Error creating/opening Playlist File " + PlaylistFile + ": " + e.Message); CLog.LogError("Error creating/opening Playlist File " + File + ": " + e.Message);
return; return;
} }
@@ -90,7 +78,7 @@ namespace Vocaluxe.Lib.Playlist
writer.WriteStartElement("root"); writer.WriteStartElement("root");
writer.WriteStartElement("Info"); writer.WriteStartElement("Info");
writer.WriteElementString("PlaylistName", PlaylistName); writer.WriteElementString("PlaylistName", Name);
writer.WriteEndElement(); writer.WriteEndElement();
writer.WriteStartElement("Songs"); writer.WriteStartElement("Songs");
@@ -121,51 +109,42 @@ namespace Vocaluxe.Lib.Playlist
} }
} }
private void _LoadPlaylist() private void _Load()
{ {
CXMLReader xmlReader = CXMLReader.OpenFile(PlaylistFile); CXMLReader xmlReader = CXMLReader.OpenFile(File);
if (xmlReader == null) if (xmlReader == null)
return; return;
string value = String.Empty; string value;
if (xmlReader.GetValue("//root/Info/PlaylistName", out value, value)) if (xmlReader.GetValue("//root/Info/PlaylistName", out value, ""))
{ {
PlaylistName = value; Name = value;
Songs = new List<CPlaylistSong>(); Songs = new List<CPlaylistSong>();
List<string> songs = xmlReader.GetValues("Songs"); List<string> songs = xmlReader.GetValues("Songs");
var gm = EGameMode.TR_GAMEMODE_NORMAL;
foreach (string song in songs) foreach (string songEntry in songs)
{ {
string artist; string artist;
string title; string title;
xmlReader.GetValue("//root/Songs/" + song + "/Artist", out artist, String.Empty); xmlReader.GetValue("//root/Songs/" + songEntry + "/Artist", out artist, String.Empty);
xmlReader.GetValue("//root/Songs/" + song + "/Title", out title, String.Empty); xmlReader.GetValue("//root/Songs/" + songEntry + "/Title", out title, String.Empty);
xmlReader.TryGetEnumValue("//root/Songs/" + song + "/GameMode", ref gm); EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL;
xmlReader.TryGetEnumValue("//root/Songs/" + songEntry + "/GameMode", ref gm);
var playlistSong = new CPlaylistSong {SongID = -1}; CSong plSong = CSongs.AllSongs.FirstOrDefault(song => song.Artist == artist && song.Title == title);
if (plSong != null)
foreach (CSong curSong in CSongs.AllSongs)
{ {
if (curSong.Artist != artist || curSong.Title != title) var playlistSong = new CPlaylistSong(plSong.ID, gm);
continue;
playlistSong.SongID = curSong.ID;
break;
}
if (playlistSong.SongID != -1)
{
playlistSong.GameMode = gm;
Songs.Add(playlistSong); Songs.Add(playlistSong);
} }
else else
CLog.LogError("Can't find song '" + title + "' from '" + artist + "' in playlist file: " + PlaylistFile); CLog.LogError("Can't find song '" + title + "' from '" + artist + "' in playlist file: " + File);
} }
} }
else else
CLog.LogError("Can't find PlaylistName in Playlist File: " + PlaylistFile); CLog.LogError("Can't find PlaylistName in Playlist File: " + File);
} }
public void AddSong(int songID) public void AddSong(int songID)
@@ -181,7 +160,7 @@ namespace Vocaluxe.Lib.Playlist
public void AddSong(int songID, EGameMode gm) public void AddSong(int songID, EGameMode gm)
{ {
var song = new CPlaylistSong {SongID = songID, GameMode = gm}; var song = new CPlaylistSong(songID, gm);
Songs.Add(song); Songs.Add(song);
} }
@@ -191,31 +170,31 @@ namespace Vocaluxe.Lib.Playlist
Songs.RemoveAt(songNr); Songs.RemoveAt(songNr);
} }
public void SongUp(int songNr) public void MoveSongUp(int songNr)
{ {
if (songNr < Songs.Count - 1 && songNr > 0) if (songNr < Songs.Count && songNr > 0)
Songs.Reverse(songNr - 1, 2); Songs.Reverse(songNr - 1, 2);
} }
public void SongDown(int songNr) public void MoveSongDown(int songNr)
{ {
if (songNr < Songs.Count - 1 && songNr >= 0) if (songNr < Songs.Count - 1 && songNr >= 0)
Songs.Reverse(songNr, 2); Songs.Reverse(songNr, 2);
} }
public void SongMove(int sourceNr, int destNr) public void MoveSong(int sourceNr, int destNr)
{ {
if (sourceNr < 0 || destNr < 0 || sourceNr == destNr || sourceNr > Songs.Count - 1 || destNr > Songs.Count - 1) if (sourceNr < 0 || destNr < 0 || sourceNr == destNr || sourceNr >= Songs.Count || destNr >= Songs.Count)
return; return;
var ps = new CPlaylistSong(Songs[sourceNr]); CPlaylistSong song = Songs[sourceNr];
Songs.RemoveAt(sourceNr); Songs.RemoveAt(sourceNr);
Songs.Insert(destNr, ps); Songs.Insert(destNr, song);
} }
public void SongInsert(int destNr, int songID, EGameMode gm) public void InsertSong(int destNr, int songID, EGameMode gm)
{ {
if (destNr < 0 || destNr > Songs.Count - 1) if (destNr < 0 || destNr >= Songs.Count)
return; return;
CPlaylistSong ps = new CPlaylistSong(songID, gm); CPlaylistSong ps = new CPlaylistSong(songID, gm);
@@ -142,10 +142,7 @@ namespace Vocaluxe.Lib.Sound.Playback
{ {
int index = _GetStreamIndex(streamID); int index = _GetStreamIndex(streamID);
if (index >= 0) if (index >= 0)
{
_Streams[index].Close(); _Streams[index].Close();
_Streams.RemoveAt(index);
}
} }
} }
+12 -13
View File
@@ -301,6 +301,7 @@ namespace Vocaluxe
if (args.Name.IndexOf(".resources", StringComparison.Ordinal) >= 0) if (args.Name.IndexOf(".resources", StringComparison.Ordinal) >= 0)
return null; return null;
Assembly assembly = null;
string[] arr = args.Name.Split(new char[] {','}); string[] arr = args.Name.Split(new char[] {','});
if (arr.Length > 0) if (arr.Length > 0)
{ {
@@ -311,27 +312,25 @@ namespace Vocaluxe
#if ARCH_X64 #if ARCH_X64
string path = "x64"; string path = "x64";
#endif #endif
path = Path.Combine(path, arr[0] + ".dll"); path = Path.Combine(CSettings.ProgramFolder, path, arr[0] + ".dll");
try try
{ {
Assembly assembly; assembly = Assembly.LoadFrom(path);
}
catch (FileLoadException e1)
{
//possibly loading from network, this would work always but better use the normal LoadFrom for more specific errors
try try
{ {
assembly = Assembly.LoadFrom(path);
}
catch (FileLoadException)
{
//possibly loading from network, this would work always but better use the normal LoadFrom for more specific errors
assembly = Assembly.Load(File.ReadAllBytes(path)); assembly = Assembly.Load(File.ReadAllBytes(path));
} }
return assembly; catch (Exception e)
} {
catch (Exception e) CLog.LogError("Cannot load assembly " + args.Name + " from " + path + ": " + e + "\r\nOuter Error: " + e1);
{ }
CLog.LogError("Cannot load assembly " + args.Name + " from " + path + ": " + e);
} }
} }
return null; return assembly;
} }
private static readonly Mutex _Mutex = new Mutex(false, Application.ProductName + "-SingleInstanceMutex"); private static readonly Mutex _Mutex = new Mutex(false, Application.ProductName + "-SingleInstanceMutex");
+3 -8
View File
@@ -345,13 +345,8 @@ namespace Vocaluxe.Screens
private void _OnSaveSnapshot() private void _OnSaveSnapshot()
{ {
string filename = Path.Combine(CSettings.DataPath, CConfig.ProfileFolders[0], "snapshot"); string file = CHelper.GetUniqueFileName(Path.Combine(CSettings.DataFolder, CConfig.ProfileFolders[0]), "snapshot.png");
int i = 0; _Snapshot.Save(file, ImageFormat.Png);
while (File.Exists(filename + i + ".png"))
i++;
filename = filename + i + ".png";
_Snapshot.Save(filename, ImageFormat.Png);
_Snapshot = null; _Snapshot = null;
CDraw.RemoveTexture(ref _WebcamTexture); CDraw.RemoveTexture(ref _WebcamTexture);
@@ -361,7 +356,7 @@ namespace Vocaluxe.Screens
_Buttons[_ButtonTakeSnapshot].Visible = false; _Buttons[_ButtonTakeSnapshot].Visible = false;
_Buttons[_ButtonWebcam].Visible = CWebcam.IsDeviceAvailable(); _Buttons[_ButtonWebcam].Visible = CWebcam.IsDeviceAvailable();
int id = CProfiles.NewAvatar(filename); int id = CProfiles.NewAvatar(file);
CProfiles.SetAvatar(_SelectSlides[_SelectSlideProfiles].ValueIndex, id); CProfiles.SetAvatar(_SelectSlides[_SelectSlideProfiles].ValueIndex, id);
_LoadAvatars(false); _LoadAvatars(false);
} }
+1 -1
View File
@@ -433,7 +433,6 @@ namespace Vocaluxe.Screens
_UpdateAvatars(); _UpdateAvatars();
_UpdateNames(); _UpdateNames();
CBackgroundMusic.Disabled = true;
_CloseSong(); _CloseSong();
CSound.SetGlobalVolume(CConfig.GameMusicVolume); CSound.SetGlobalVolume(CConfig.GameMusicVolume);
} }
@@ -441,6 +440,7 @@ namespace Vocaluxe.Screens
public override void OnShowFinish() public override void OnShowFinish()
{ {
base.OnShowFinish(); base.OnShowFinish();
CBackgroundMusic.Disabled = true;
CGame.Start(); CGame.Start();
_LoadNextSong(); _LoadNextSong();
+149 -136
View File
@@ -23,6 +23,7 @@ using System.Windows.Forms;
using Vocaluxe.Base; using Vocaluxe.Base;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
using VocaluxeLib.Menu.SongMenu;
using VocaluxeLib.PartyModes; using VocaluxeLib.PartyModes;
using VocaluxeLib.Songs; using VocaluxeLib.Songs;
@@ -70,15 +71,15 @@ namespace Vocaluxe.Screens
private const string _StaticSearchBar = "StaticSearchBar"; private const string _StaticSearchBar = "StaticSearchBar";
private const string _StaticOptionsBG = "StaticOptionsBG"; private const string _StaticOptionsBG = "StaticOptionsBG";
private const string _SongMenu = "SongMenu"; private const string _SongMenuName = "SongMenu";
private const string _Playlist = "Playlist"; private const string _PlaylistName = "Playlist";
private string _SearchText = String.Empty; private string _SearchText = String.Empty;
private bool _SearchActive; private bool _SearchActive;
private readonly List<string> _ButtonsJoker = new List<string>(); private readonly List<string> _ButtonsJoker = new List<string>();
private readonly List<string> _TextsPlayer = new List<string>(); private readonly List<string> _TextsPlayer = new List<string>();
private bool _SongOptionsActive; private ESongOptionsView _CurSongOptionsView;
private bool _PlaylistActive; private bool _PlaylistActive;
private readonly List<EGameMode> _AvailableGameModes; private readonly List<EGameMode> _AvailableGameModes;
private SScreenSongOptions _Sso; private SScreenSongOptions _Sso;
@@ -91,6 +92,9 @@ namespace Vocaluxe.Screens
private int _SelectedSongID; private int _SelectedSongID;
private int _SelectedCategoryIndex; private int _SelectedCategoryIndex;
private CSongMenu _SongMenu;
private CPlaylist _Playlist;
public CScreenSong() public CScreenSong()
{ {
_AvailableGameModes = new List<EGameMode>(); _AvailableGameModes = new List<EGameMode>();
@@ -133,19 +137,20 @@ namespace Vocaluxe.Screens
_ThemeTexts = tlist.ToArray(); _ThemeTexts = tlist.ToArray();
_ThemeButtons = blist.ToArray(); _ThemeButtons = blist.ToArray();
_ThemeSelectSlides = new string[] {_SelectSlideOptionsMode, _SelectSlideOptionsPlaylistAdd, _SelectSlideOptionsPlaylistOpen, _SelectSlideOptionsNumMedleySongs}; _ThemeSelectSlides = new string[] {_SelectSlideOptionsMode, _SelectSlideOptionsPlaylistAdd, _SelectSlideOptionsPlaylistOpen, _SelectSlideOptionsNumMedleySongs};
_ThemeSongMenus = new string[] {_SongMenu}; _ThemeSongMenus = new string[] {_SongMenuName};
_ThemePlaylists = new string[] {_Playlist}; _ThemePlaylists = new string[] {_PlaylistName};
} }
public override void LoadTheme(string xmlPath) public override void LoadTheme(string xmlPath)
{ {
base.LoadTheme(xmlPath); base.LoadTheme(xmlPath);
_SongMenu = _SongMenus[_SongMenuName];
_Playlist = _Playlists[_PlaylistName];
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
_Playlists[_Playlist].Visible = false;
_DragAndDropCover = GetNewStatic(); _DragAndDropCover = GetNewStatic();
_Playlists[_Playlist].Init(); _Playlist.Init();
_Playlist.Visible = false;
_AvailableGameModes.Clear(); _AvailableGameModes.Clear();
} }
@@ -158,11 +163,11 @@ namespace Vocaluxe.Screens
if (_PlaylistActive) if (_PlaylistActive)
{ {
_Playlists[_Playlist].HandleInput(keyEvent); _Playlist.HandleInput(keyEvent);
return true; return true;
} }
if (!_SongOptionsActive) if (_CurSongOptionsView == ESongOptionsView.None)
{ {
if (keyEvent.KeyPressed && !Char.IsControl(keyEvent.Unicode) && keyEvent.Mod != EModifier.Ctrl) if (keyEvent.KeyPressed && !Char.IsControl(keyEvent.Unicode) && keyEvent.Mod != EModifier.Ctrl)
{ {
@@ -176,8 +181,8 @@ namespace Vocaluxe.Screens
} }
else else
{ {
_SongMenus[_SongMenu].HandleInput(ref keyEvent, _Sso); if (_SongMenu.HandleInput(ref keyEvent, _Sso))
_UpdatePartyModeOptions(); keyEvent.Handled = true;
if (keyEvent.Handled) if (keyEvent.Handled)
return true; return true;
@@ -210,32 +215,31 @@ namespace Vocaluxe.Screens
} }
} }
if (_Buttons[_ButtonStart].Selected) if (_Buttons[_ButtonStart].Selected)
_HandlePartySongSelection(_SongMenus[_SongMenu].GetSelectedSong()); _HandlePartySongSelection(_SongMenu.GetPreviewSongNr());
} }
if (CSongs.NumSongsVisible > 0 && !_Sso.Selection.PartyMode) if (CSongs.NumSongsVisible > 0 && !_Sso.Selection.PartyMode)
{ {
if (_SongMenus[_SongMenu].GetSelectedSong() != -1 && !_SongOptionsActive) if (_SongMenu.GetPreviewSongNr() != -1)
{ _ToggleSongOptions(ESongOptionsView.Song);
if (!_Sso.Selection.PartyMode)
_ToggleSongOptions(ESongOptionsView.Song);
}
} }
break; break;
case Keys.Tab: case Keys.Tab:
if (_Playlists[_Playlist].Visible) if (_Playlist.Visible)
{ {
_PlaylistActive = !_PlaylistActive; _PlaylistActive = !_PlaylistActive;
_Playlists[_Playlist].Selected = _PlaylistActive; _Playlist.Selected = _PlaylistActive;
_SongMenus[_SongMenu].SetActive(!_PlaylistActive); _SongMenu.Active = !_PlaylistActive;
} }
break; break;
case Keys.Back: case Keys.Back:
if (_SearchActive && _SearchText != "") if (_SearchActive)
_ApplyNewSearchFilter(_SearchText.Remove(_SearchText.Length - 1)); {
if (_SearchText != "")
if ((CSongs.Category < 0 || _Sso.Sorting.Tabs == EOffOn.TR_CONFIG_OFF) && !_Sso.Selection.PartyMode && !_SearchActive) _ApplyNewSearchFilter(_SearchText.Remove(_SearchText.Length - 1));
}
else if ((!CSongs.IsInCategory || _Sso.Sorting.Tabs == EOffOn.TR_CONFIG_OFF) && !_Sso.Selection.PartyMode)
CGraphics.FadeTo(EScreens.ScreenMain); CGraphics.FadeTo(EScreens.ScreenMain);
break; break;
@@ -276,7 +280,12 @@ namespace Vocaluxe.Screens
case Keys.S: case Keys.S:
if (keyEvent.Mod == EModifier.Ctrl && CSongs.NumSongsVisible > 0 && !_Sso.Selection.PartyMode) if (keyEvent.Mod == EModifier.Ctrl && CSongs.NumSongsVisible > 0 && !_Sso.Selection.PartyMode)
_StartMedleySong(_SongMenus[_SongMenu].GetSelectedSong()); _StartMedleySong(_SongMenu.GetPreviewSongNr());
break;
case Keys.F:
if (keyEvent.Mod == EModifier.Ctrl)
_SearchActive = true;
break; break;
case Keys.D1: case Keys.D1:
@@ -322,7 +331,7 @@ namespace Vocaluxe.Screens
else if (_Buttons[_ButtonOptionsSing].Selected) else if (_Buttons[_ButtonOptionsSing].Selected)
{ {
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
_StartSong(_SongMenus[_SongMenu].GetSelectedSong()); _StartSong(_SongMenu.GetPreviewSongNr());
} }
else if (_Buttons[_ButtonOptionsPlaylist].Selected) else if (_Buttons[_ButtonOptionsPlaylist].Selected)
{ {
@@ -332,9 +341,9 @@ namespace Vocaluxe.Screens
else if (_Buttons[_ButtonOptionsRandom].Selected) else if (_Buttons[_ButtonOptionsRandom].Selected)
{ {
if (CSongs.IsInCategory) if (CSongs.IsInCategory)
_SongMenus[_SongMenu].SetSelectedSong(CSongs.GetRandomSong()); _SongMenu.SetSelectedSong(CSongs.GetRandomSong());
else else
_SongMenus[_SongMenu].SetSelectedCategory(CSongs.GetRandomCategory()); _SongMenu.SetSelectedCategory(CSongs.GetRandomCategory());
} }
else if (_Buttons[_ButtonOptionsSingAll].Selected) else if (_Buttons[_ButtonOptionsSingAll].Selected)
_StartRandomAllSongs(); _StartRandomAllSongs();
@@ -397,31 +406,31 @@ namespace Vocaluxe.Screens
_OldMousePosX = mouseEvent.X; _OldMousePosX = mouseEvent.X;
_OldMousePosY = mouseEvent.Y; _OldMousePosY = mouseEvent.Y;
if (_Playlists[_Playlist].Visible && _Playlists[_Playlist].IsMouseOver(mouseEvent)) if (_Playlist.Visible && _Playlist.IsMouseOver(mouseEvent))
{ {
_PlaylistActive = true; _PlaylistActive = true;
_Playlists[_Playlist].Selected = _PlaylistActive; _Playlist.Selected = _PlaylistActive;
_SongMenus[_SongMenu].SetActive(!_PlaylistActive); _SongMenu.Active = !_PlaylistActive;
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
} }
else if (CHelper.IsInBounds(_SongMenus[_SongMenu].Rect, mouseEvent.X, mouseEvent.Y)) else if (CHelper.IsInBounds(_SongMenu.Rect, mouseEvent.X, mouseEvent.Y))
{ {
_PlaylistActive = false; _PlaylistActive = false;
_Playlists[_Playlist].Selected = _PlaylistActive; _Playlist.Selected = _PlaylistActive;
_SongMenus[_SongMenu].SetActive(!_PlaylistActive); _SongMenu.Active = !_PlaylistActive;
} }
if (_Playlists[_Playlist].Visible && _PlaylistActive) if (_Playlist.Visible && _PlaylistActive)
{ {
if (_Playlists[_Playlist].HandleMouse(mouseEvent)) if (_Playlist.HandleMouse(mouseEvent))
return true; return true;
} }
if (mouseEvent.RB) if (mouseEvent.RB)
{ {
if (_SongOptionsActive) if (_CurSongOptionsView != ESongOptionsView.None)
{ {
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
return true; return true;
@@ -447,19 +456,23 @@ namespace Vocaluxe.Screens
if (mouseEvent.LD && !_Sso.Selection.PartyMode) if (mouseEvent.LD && !_Sso.Selection.PartyMode)
{ {
if (CSongs.NumSongsVisible > 0 && _SongMenus[_SongMenu].GetActualSelection() != -1 && _SongMenus[_SongMenu].IsMouseOverActualSelection(mouseEvent)) if (CSongs.NumSongsVisible > 0 && _SongMenu.GetPreviewSongNr() != -1 && _SongMenu.IsMouseOverSelectedSong(mouseEvent))
{ {
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
_StartVisibleSong(_SongMenus[_SongMenu].GetActualSelection()); _StartVisibleSong(_SongMenu.GetPreviewSongNr());
return true; return true;
} }
} }
_SongMenus[_SongMenu].HandleMouse(ref mouseEvent, _Sso); if (_SongMenu.HandleMouse(ref mouseEvent, _Sso))
_UpdatePartyModeOptions(); mouseEvent.Handled = true;
if (mouseEvent.Handled) if (mouseEvent.Handled)
{
if (_CurSongOptionsView != ESongOptionsView.None)
_ToggleSongOptions(ESongOptionsView.None);
return true; return true;
}
if (mouseEvent.LB) if (mouseEvent.LB)
{ {
@@ -478,7 +491,7 @@ namespace Vocaluxe.Screens
if (_Buttons[_ButtonOptionsSing].Selected) if (_Buttons[_ButtonOptionsSing].Selected)
{ {
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
_StartSong(_SongMenus[_SongMenu].GetSelectedSong()); _StartSong(_SongMenu.GetPreviewSongNr());
return true; return true;
} }
if (_Buttons[_ButtonOptionsPlaylist].Selected) if (_Buttons[_ButtonOptionsPlaylist].Selected)
@@ -491,7 +504,7 @@ namespace Vocaluxe.Screens
{ {
if (CSongs.IsInCategory) if (CSongs.IsInCategory)
{ {
_SongMenus[_SongMenu].SetSelectedSong(CSongs.GetRandomSong()); _SongMenu.SetSelectedSong(CSongs.GetRandomSong());
return true; return true;
} }
} }
@@ -499,7 +512,7 @@ namespace Vocaluxe.Screens
{ {
if (!CSongs.IsInCategory) if (!CSongs.IsInCategory)
{ {
_SongMenus[_SongMenu].SetSelectedCategory(CSongs.GetRandomCategory()); _SongMenu.SetSelectedCategory(CSongs.GetRandomCategory());
return true; return true;
} }
} }
@@ -545,7 +558,7 @@ namespace Vocaluxe.Screens
{ {
if (_Buttons[_ButtonStart].Selected) if (_Buttons[_ButtonStart].Selected)
{ {
_HandlePartySongSelection(_SongMenus[_SongMenu].GetSelectedSong()); _HandlePartySongSelection(_SongMenu.GetPreviewSongNr());
return true; return true;
} }
@@ -563,25 +576,20 @@ namespace Vocaluxe.Screens
} }
} }
if (CSongs.NumSongsVisible > 0 && _SongMenus[_SongMenu].GetActualSelection() != -1 && !_Sso.Selection.PartyMode) if (_SongMenu.GetPreviewSongNr() != -1 && !_Sso.Selection.PartyMode && _SongMenu.IsMouseOverSelectedSong(mouseEvent))
{ {
if (_SongMenus[_SongMenu].GetSelectedSong() != -1 && !_SongOptionsActive) _ToggleSongOptions(ESongOptionsView.Song);
{
_ToggleSongOptions(ESongOptionsView.Song);
return true;
}
_ToggleSongOptions(ESongOptionsView.None);
return true; return true;
} }
} }
if (mouseEvent.LBH) if (mouseEvent.LBH)
{ {
if (!_DragAndDropActive && _Playlists[_Playlist].Visible && CSongs.NumSongsVisible > 0 && _SongMenus[_SongMenu].GetActualSelection() != -1) if (!_DragAndDropActive && _Playlist.Visible && CSongs.NumSongsVisible > 0 && _SongMenu.GetSelectedSongNr() != -1)
{ {
_DragAndDropCover = _SongMenus[_SongMenu].GetSelectedSongCover(); _DragAndDropCover = _SongMenu.GetSelectedSongCover();
_DragAndDropCover.Rect.Z = CSettings.ZNear; _DragAndDropCover.Rect.Z = CSettings.ZNear;
_Playlists[_Playlist].DragAndDropSongID = CSongs.VisibleSongs[_SongMenus[_SongMenu].GetActualSelection()].ID; _Playlist.DragAndDropSongID = CSongs.VisibleSongs[_SongMenu.GetSelectedSongNr()].ID;
_DragAndDropActive = true; _DragAndDropActive = true;
return true; return true;
} }
@@ -591,7 +599,7 @@ namespace Vocaluxe.Screens
if (!mouseEvent.LBH && _DragAndDropActive) if (!mouseEvent.LBH && _DragAndDropActive)
{ {
_DragAndDropActive = false; _DragAndDropActive = false;
_Playlists[_Playlist].DragAndDropSongID = -1; _Playlist.DragAndDropSongID = -1;
return true; return true;
} }
@@ -608,7 +616,7 @@ namespace Vocaluxe.Screens
else if (_Sso.Selection.CategoryChangeAllowed) else if (_Sso.Selection.CategoryChangeAllowed)
{ {
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
_SongMenus[_SongMenu].EnterCurrentCategory(); _SongMenu.EnterSelectedCategory();
} }
} }
@@ -625,7 +633,7 @@ namespace Vocaluxe.Screens
_SearchText = _Sso.Sorting.SearchString; _SearchText = _Sso.Sorting.SearchString;
CGame.Reset(); CGame.Reset();
_SongMenus[_SongMenu].OnShow(); _SongMenu.OnShow();
if (_Sso.Selection.PartyMode) if (_Sso.Selection.PartyMode)
_PlaylistActive = false; _PlaylistActive = false;
@@ -633,14 +641,14 @@ namespace Vocaluxe.Screens
if (_Sso.Selection.PartyMode) if (_Sso.Selection.PartyMode)
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
_SongMenus[_SongMenu].SetActive(!_PlaylistActive); _SongMenu.Active = !_PlaylistActive;
_SongMenus[_SongMenu].SetSmallView(_Playlists[_Playlist].Visible); _SongMenu.SmallView = _Playlist.Visible;
if (_Playlists[_Playlist].ActivePlaylistID != -1) if (_Playlist.ActivePlaylistID != -1)
_Playlists[_Playlist].LoadPlaylist(_Playlists[_Playlist].ActivePlaylistID); _Playlist.LoadPlaylist(_Playlist.ActivePlaylistID);
_DragAndDropActive = false; _DragAndDropActive = false;
_Playlists[_Playlist].DragAndDropSongID = -1; _Playlist.DragAndDropSongID = -1;
UpdateGame(); UpdateGame();
if (CSongs.IsInCategory) if (CSongs.IsInCategory)
@@ -649,23 +657,30 @@ namespace Vocaluxe.Screens
public override bool UpdateGame() public override bool UpdateGame()
{ {
if (_SongMenus[_SongMenu].IsSmallView()) if (_PlaylistActive)
CheckPlaylist(); _CheckPlaylist();
_Texts[_TextCategory].Text = CSongs.GetCurrentCategoryName(); _Texts[_TextCategory].Text = CSongs.GetCurrentCategoryName();
if (CSongs.Category > -1 || CConfig.Tabs == EOffOn.TR_CONFIG_OFF) if (CSongs.IsInCategory || CConfig.Tabs == EOffOn.TR_CONFIG_OFF)
CBackgroundMusic.Disabled = true; CBackgroundMusic.Disabled = true;
else else
CBackgroundMusic.Disabled = false; CBackgroundMusic.Disabled = false;
int song = _SongMenus[_SongMenu].GetActualSelection(); string selectionText = "";
if ((CSongs.IsInCategory || CConfig.Tabs == EOffOn.TR_CONFIG_OFF) && song >= 0 && song < CSongs.VisibleSongs.Count) if (CSongs.IsInCategory)
_Texts[_TextSelection].Text = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title; {
else if (!CSongs.IsInCategory && song >= 0 && song < CSongs.Categories.Count) int song = _SongMenu.GetSelectedSongNr();
_Texts[_TextSelection].Text = CSongs.Categories[song].Name; if (song >= 0 && song < CSongs.VisibleSongs.Count)
selectionText = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title;
}
else else
_Texts[_TextSelection].Text = String.Empty; {
int cat = _SongMenu.GetSelectedCategory();
if (!CSongs.IsInCategory && cat >= 0 && cat < CSongs.Categories.Count)
_Texts[_TextSelection].Text = CSongs.Categories[cat].Name;
}
_Texts[_TextSelection].Text = selectionText;
_Texts[_TextSearchBar].Text = _SearchText; _Texts[_TextSearchBar].Text = _SearchText;
if (_SearchActive) if (_SearchActive)
@@ -703,12 +718,12 @@ namespace Vocaluxe.Screens
base.OnClose(); base.OnClose();
CBackgroundMusic.Disabled = false; CBackgroundMusic.Disabled = false;
CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume); CSound.SetGlobalVolume(CConfig.BackgroundMusicVolume);
_SongMenus[_SongMenu].OnHide(); _SongMenu.OnHide();
} }
private void _HandlePartySongSelection(int songNr) private void _HandlePartySongSelection(int songNr)
{ {
if ((CSongs.Category >= 0) && (songNr >= 0)) if (CSongs.IsInCategory && (songNr >= 0))
{ {
CSong song = CSongs.VisibleSongs[songNr]; CSong song = CSongs.VisibleSongs[songNr];
if (song != null) if (song != null)
@@ -730,12 +745,12 @@ namespace Vocaluxe.Screens
_SelectNextRandomSong(); _SelectNextRandomSong();
if (_Sso.Selection.SongIndex != -1) if (_Sso.Selection.SongIndex != -1)
_SongMenus[_SongMenu].SetSelectedSong(_Sso.Selection.SongIndex); _SongMenu.SetSelectedSong(_Sso.Selection.SongIndex);
} }
if (_SelectedSongID != _SongMenus[_SongMenu].GetSelectedSong() && CSongs.Category > -1) if (_SelectedSongID != _SongMenu.GetPreviewSongNr() && CSongs.IsInCategory)
{ {
_SelectedSongID = _SongMenus[_SongMenu].GetSelectedSong(); _SelectedSongID = _SongMenu.GetPreviewSongNr();
CParty.OnSongChange(_SelectedSongID, ref _Sso); CParty.OnSongChange(_SelectedSongID, ref _Sso);
} }
@@ -752,14 +767,13 @@ namespace Vocaluxe.Screens
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
} }
_SongMenus[_SongMenu].Update(_Sso); _SongMenu.Update(_Sso);
if (_Sso.Selection.RandomOnly && _Sso.Selection.NumJokers != null) if (_Sso.Selection.RandomOnly && _Sso.Selection.NumJokers != null)
{ {
_Buttons[_ButtonStart].Visible = true; _Buttons[_ButtonStart].Visible = true;
if (!_SongMenus[_SongMenu].IsSmallView()) _SongMenu.SmallView = true;
_SongMenus[_SongMenu].SetSmallView(true);
for (int i = 0; i < CSettings.MaxNumPlayer; i++) for (int i = 0; i < CSettings.MaxNumPlayer; i++)
{ {
@@ -791,8 +805,8 @@ namespace Vocaluxe.Screens
} }
else else
{ {
if (_Sso.Selection.PartyMode && _SongMenus[_SongMenu].IsSmallView()) if (_Sso.Selection.PartyMode)
_SongMenus[_SongMenu].SetSmallView(false); _SongMenu.SmallView = false;
for (int i = 0; i < CSettings.MaxNumPlayer; i++) for (int i = 0; i < CSettings.MaxNumPlayer; i++)
{ {
@@ -806,7 +820,7 @@ namespace Vocaluxe.Screens
private void _StartSong(int songNr) private void _StartSong(int songNr)
{ {
if ((CSongs.Category >= 0) && (songNr >= 0)) if (CSongs.IsInCategory && (songNr >= 0))
{ {
EGameMode gm; EGameMode gm;
if (_AvailableGameModes.Count >= _SelectSlides[_SelectSlideOptionsMode].Selection) if (_AvailableGameModes.Count >= _SelectSlides[_SelectSlideOptionsMode].Selection)
@@ -824,7 +838,7 @@ namespace Vocaluxe.Screens
private void _StartVisibleSong(int songNr) private void _StartVisibleSong(int songNr)
{ {
if (CSongs.Category >= 0 && 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; EGameMode gm = CSongs.VisibleSongs[songNr].IsDuet ? EGameMode.TR_GAMEMODE_DUET : EGameMode.TR_GAMEMODE_NORMAL;
@@ -838,7 +852,7 @@ namespace Vocaluxe.Screens
private void _StartMedleySong(int songNr) private void _StartMedleySong(int songNr)
{ {
if ((CSongs.Category >= 0) && (songNr >= 0)) if (CSongs.IsInCategory && (songNr >= 0))
{ {
if (!CSongs.VisibleSongs[songNr].IsGameModeAvailable(EGameMode.TR_GAMEMODE_MEDLEY)) if (!CSongs.VisibleSongs[songNr].IsGameModeAvailable(EGameMode.TR_GAMEMODE_MEDLEY))
return; return;
@@ -964,7 +978,7 @@ namespace Vocaluxe.Screens
if (CSongs.IsInCategory) if (CSongs.IsInCategory)
{ {
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
_SongMenus[_SongMenu].SetSelectedSong(CSongs.GetRandomSong()); _SongMenu.SetSelectedSong(CSongs.GetRandomSong());
return true; return true;
} }
return false; return false;
@@ -975,7 +989,7 @@ namespace Vocaluxe.Screens
if (!CSongs.IsInCategory) if (!CSongs.IsInCategory)
{ {
_ToggleSongOptions(ESongOptionsView.None); _ToggleSongOptions(ESongOptionsView.None);
_SongMenus[_SongMenu].SetSelectedCategory(CSongs.GetRandomCategory()); _SongMenu.SetSelectedCategory(CSongs.GetRandomCategory());
return true; return true;
} }
return false; return false;
@@ -999,7 +1013,7 @@ namespace Vocaluxe.Screens
private void _JumpTo(char letter) private void _JumpTo(char letter)
{ {
int start = 0; int start = 0;
int curSelected = _SongMenus[_SongMenu].GetActualSelection(); int curSelected = CSongs.IsInCategory ? _SongMenu.GetSelectedSongNr() : _SongMenu.GetSelectedCategory();
bool firstLevel = CConfig.Tabs == EOffOn.TR_CONFIG_OFF && CSongs.IsInCategory; bool firstLevel = CConfig.Tabs == EOffOn.TR_CONFIG_OFF && CSongs.IsInCategory;
bool secondSort = CConfig.Tabs == EOffOn.TR_CONFIG_ON && bool secondSort = CConfig.Tabs == EOffOn.TR_CONFIG_ON &&
(CConfig.SongSorting == ESongSorting.TR_CONFIG_ARTIST || (CConfig.SongSorting == ESongSorting.TR_CONFIG_ARTIST ||
@@ -1042,7 +1056,7 @@ namespace Vocaluxe.Screens
break; break;
} }
if (visibleID > -1) if (visibleID > -1)
_SongMenus[_SongMenu].SetSelectedSong(visibleID); _SongMenu.SetSelectedSong(visibleID);
} }
else if (secondSort && CSongs.IsInCategory) else if (secondSort && CSongs.IsInCategory)
{ {
@@ -1066,7 +1080,7 @@ namespace Vocaluxe.Screens
break; break;
} }
if (visibleID > -1) if (visibleID > -1)
_SongMenus[_SongMenu].SetSelectedSong(visibleID); _SongMenu.SetSelectedSong(visibleID);
} }
else if (!CSongs.IsInCategory) else if (!CSongs.IsInCategory)
{ {
@@ -1076,7 +1090,7 @@ namespace Vocaluxe.Screens
start = curSelected + 1; start = curSelected + 1;
int visibleID = _FindIndex(categories, start, element => element.Name.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase)); int visibleID = _FindIndex(categories, start, element => element.Name.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
if (visibleID > -1) if (visibleID > -1)
_SongMenus[_SongMenu].SetSelectedCategory(visibleID); _SongMenu.SetSelectedCategory(visibleID);
} }
} }
@@ -1088,9 +1102,9 @@ namespace Vocaluxe.Screens
bool refresh = false; bool refresh = false;
_SearchText = newFilterString; _SearchText = newFilterString;
int songIndex = _SongMenus[_SongMenu].GetSelectedSong(); int songIndex = _SongMenu.GetSelectedSongNr();
int songID = -1; int songID = -1;
if (songIndex != -1 && CSongs.NumSongsVisible > 0 && CSongs.NumSongsVisible > songIndex) if (songIndex != -1)
songID = CSongs.VisibleSongs[songIndex].ID; songID = CSongs.VisibleSongs[songIndex].ID;
if (newFilterString == "" && _Sso.Sorting.Tabs == EOffOn.TR_CONFIG_ON) if (newFilterString == "" && _Sso.Sorting.Tabs == EOffOn.TR_CONFIG_ON)
@@ -1107,13 +1121,13 @@ namespace Vocaluxe.Screens
CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, newFilterString, _Sso.Sorting.DuetOptions); CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, newFilterString, _Sso.Sorting.DuetOptions);
if (songID == -1 || CSongs.NumSongsVisible == 0 || CSongs.NumSongsVisible <= songIndex || CSongs.GetVisibleSongByIndex(songIndex).ID != songID) if (songID == -1 || CSongs.NumSongsVisible <= songIndex || CSongs.GetVisibleSongByIndex(songIndex).ID != songID)
refresh = true; refresh = true;
if (refresh) if (refresh)
_SongMenus[_SongMenu].OnHide(); _SongMenu.OnHide();
_SongMenus[_SongMenu].OnShow(); _SongMenu.OnShow();
} }
private void _ToggleSongOptions(ESongOptionsView view) private void _ToggleSongOptions(ESongOptionsView view)
@@ -1137,13 +1151,13 @@ namespace Vocaluxe.Screens
_Buttons[_ButtonOpenOptions].Visible = true; _Buttons[_ButtonOpenOptions].Visible = true;
if (view == ESongOptionsView.None) if (view == ESongOptionsView.None)
_SongOptionsActive = false; _CurSongOptionsView = view;
else if (CSongs.IsInCategory) else if (CSongs.IsInCategory)
_SongOptionsActive = CSongs.VisibleSongs.Count > 0; _CurSongOptionsView = CSongs.VisibleSongs.Count > 0 ? view : ESongOptionsView.None;
else else
_SongOptionsActive = CSongs.Categories.Count > 0; _CurSongOptionsView = CSongs.Categories.Count > 0 ? view : ESongOptionsView.None;
if (!_SongOptionsActive) if (_CurSongOptionsView == ESongOptionsView.None)
return; return;
//Has to be done here otherwhise changed playlist names will not appear until OnShow is called! //Has to be done here otherwhise changed playlist names will not appear until OnShow is called!
@@ -1163,7 +1177,7 @@ namespace Vocaluxe.Screens
private void _CheckAndAddGameMode(EGameMode gameMode) private void _CheckAndAddGameMode(EGameMode gameMode)
{ {
if (CSongs.VisibleSongs[_SongMenus[_SongMenu].GetSelectedSong()].IsGameModeAvailable(gameMode)) if (CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].IsGameModeAvailable(gameMode))
{ {
_SelectSlides[_SelectSlideOptionsMode].AddValue(Enum.GetName(typeof(EGameMode), gameMode)); _SelectSlides[_SelectSlideOptionsMode].AddValue(Enum.GetName(typeof(EGameMode), gameMode));
_AvailableGameModes.Add(gameMode); _AvailableGameModes.Add(gameMode);
@@ -1243,31 +1257,30 @@ namespace Vocaluxe.Screens
} }
#region Playlist Actions #region Playlist Actions
public void CheckPlaylist() private void _CheckPlaylist()
{ {
if (_Playlists[_Playlist].ActivePlaylistID == -1 && _PlaylistActive) if (_Playlist.ActivePlaylistID == -1 && _PlaylistActive)
_ClosePlaylist(); _ClosePlaylist();
} }
private void _OpenPlaylist(int playlistID) private void _OpenPlaylist(int playlistID)
{ {
if (CPlaylists.Playlists.Length > playlistID && playlistID >= 0) if (_Playlist.LoadPlaylist(playlistID))
{ {
_Playlists[_Playlist].LoadPlaylist(playlistID); _SongMenu.SmallView = true;
_SongMenus[_SongMenu].SetSmallView(true); _Playlist.Visible = true;
_Playlists[_Playlist].Visible = true;
} }
} }
private void _ClosePlaylist() private void _ClosePlaylist()
{ {
if (_Playlists[_Playlist].Visible || _PlaylistActive) if (_Playlist.Visible || _PlaylistActive)
{ {
_SongMenus[_SongMenu].SetSmallView(false); _SongMenu.SmallView = false;
_PlaylistActive = false; _PlaylistActive = false;
_Playlists[_Playlist].Selected = _PlaylistActive; _Playlist.Selected = _PlaylistActive;
_SongMenus[_SongMenu].SetActive(!_PlaylistActive); _SongMenu.Active = !_PlaylistActive;
_Playlists[_Playlist].ClosePlaylist(); _Playlist.ClosePlaylist();
} }
} }
@@ -1275,22 +1288,22 @@ namespace Vocaluxe.Screens
{ {
_SelectSlides[_SelectSlideOptionsPlaylistAdd].Clear(); _SelectSlides[_SelectSlideOptionsPlaylistAdd].Clear();
_SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue("TR_SCREENSONG_NEWPLAYLIST"); _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue("TR_SCREENSONG_NEWPLAYLIST");
_SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValues(CPlaylists.PlaylistNames); _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValues(CPlaylists.Names);
_SelectSlides[_SelectSlideOptionsPlaylistOpen].Clear(); _SelectSlides[_SelectSlideOptionsPlaylistOpen].Clear();
_SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValues(CPlaylists.PlaylistNames); _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValues(CPlaylists.Names);
} }
private void _OpenAndAddPlaylistAction() private void _OpenAndAddPlaylistAction()
{ {
//Open an existing playlist and add song if (_Playlist.ActivePlaylistID != (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) &&
if (_Playlists[_Playlist].ActivePlaylistID != (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) &&
(_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) != -1) (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) != -1)
{ {
//Open an existing playlist and add song
//Check selected game-mode //Check selected game-mode
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];
else if (CSongs.VisibleSongs[_SongMenus[_SongMenu].GetSelectedSong()].IsDuet) else if (CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].IsDuet)
gm = EGameMode.TR_GAMEMODE_DUET; gm = EGameMode.TR_GAMEMODE_DUET;
else else
gm = EGameMode.TR_GAMEMODE_NORMAL; gm = EGameMode.TR_GAMEMODE_NORMAL;
@@ -1298,63 +1311,63 @@ namespace Vocaluxe.Screens
//Check if Playlist really exists //Check if Playlist really exists
if (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1 >= 0) if (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1 >= 0)
{ {
_Playlists[_Playlist].ActivePlaylistID = _SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1; _Playlist.ActivePlaylistID = _SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1;
//Add song to playlist //Add song to playlist
CPlaylists.Playlists[_Playlists[_Playlist].ActivePlaylistID].AddSong(CSongs.VisibleSongs[_SongMenus[_SongMenu].GetSelectedSong()].ID, gm); CPlaylists.AddSong(_Playlist.ActivePlaylistID, CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID, gm);
//Open playlist //Open playlist
_OpenPlaylist(_Playlists[_Playlist].ActivePlaylistID); _OpenPlaylist(_Playlist.ActivePlaylistID);
_Playlists[_Playlist].ScrollToBottom(); _Playlist.ScrollToBottom();
} }
} }
//Create a new playlist and add song
else if ((_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) == -1) else if ((_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) == -1)
{ {
//Create a new playlist and add song
//Check selected game-mode //Check selected game-mode
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];
else if (CSongs.VisibleSongs[_SongMenus[_SongMenu].GetSelectedSong()].IsDuet) else if (CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].IsDuet)
gm = EGameMode.TR_GAMEMODE_DUET; gm = EGameMode.TR_GAMEMODE_DUET;
else else
gm = EGameMode.TR_GAMEMODE_NORMAL; gm = EGameMode.TR_GAMEMODE_NORMAL;
//Create new playlist //Create new playlist
_Playlists[_Playlist].ActivePlaylistID = CPlaylists.NewPlaylist(); _Playlist.ActivePlaylistID = CPlaylists.NewPlaylist();
//Add song to playlist //Add song to playlist
CPlaylists.Playlists[_Playlists[_Playlist].ActivePlaylistID].AddSong(CSongs.VisibleSongs[_SongMenus[_SongMenu].GetSelectedSong()].ID, gm); CPlaylists.AddSong(_Playlist.ActivePlaylistID, CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID, gm);
//Open playlist //Open playlist
_OpenPlaylist(_Playlists[_Playlist].ActivePlaylistID); _OpenPlaylist(_Playlist.ActivePlaylistID);
//Add new playlist to select-slide //Add new playlist to select-slide
_SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue(CPlaylists.Playlists[_Playlists[_Playlist].ActivePlaylistID].PlaylistName); _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID));
_SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValue(CPlaylists.Playlists[_Playlists[_Playlist].ActivePlaylistID].PlaylistName); _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID));
} }
//Add song to loaded playlist
else else
{ {
//Add song to loaded playlist
//Check selected game-mode //Check selected game-mode
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];
else if (CSongs.VisibleSongs[_SongMenus[_SongMenu].GetSelectedSong()].IsDuet) else if (CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].IsDuet)
gm = EGameMode.TR_GAMEMODE_DUET; gm = EGameMode.TR_GAMEMODE_DUET;
else else
gm = EGameMode.TR_GAMEMODE_NORMAL; gm = EGameMode.TR_GAMEMODE_NORMAL;
CPlaylists.Playlists[_Playlists[_Playlist].ActivePlaylistID].AddSong(CSongs.VisibleSongs[_SongMenus[_SongMenu].GetSelectedSong()].ID, gm); CPlaylists.AddSong(_Playlist.ActivePlaylistID, CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID, gm);
_Playlists[_Playlist].UpdatePlaylist(); _Playlist.UpdatePlaylist();
_Playlists[_Playlist].ScrollToBottom(); _Playlist.ScrollToBottom();
} }
} }
private void _SetSelectSlidePlaylistToCurrentPlaylist() private void _SetSelectSlidePlaylistToCurrentPlaylist()
{ {
if (_Playlists[_Playlist].ActivePlaylistID > -1) if (_Playlist.ActivePlaylistID > -1)
_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection = _Playlists[_Playlist].ActivePlaylistID + 1; _SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection = _Playlist.ActivePlaylistID + 1;
else else
_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection = 0; _SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection = 0;
} }
+5 -1
View File
@@ -41,6 +41,7 @@ namespace Vocaluxe.SongQueue
private List<SSongQueueEntry> _SongQueue; private List<SSongQueueEntry> _SongQueue;
private int _CurrentRound; private int _CurrentRound;
private CPoints _Points; private CPoints _Points;
private CSong _CurrentSong;
#region Implementation #region Implementation
public void Init() public void Init()
@@ -124,6 +125,7 @@ namespace Vocaluxe.SongQueue
_SongQueue[_CurrentRound].GameMode); _SongQueue[_CurrentRound].GameMode);
} }
_CurrentRound++; _CurrentRound++;
_CurrentSong = IsFinished() ? null : CGameModes.Get(GetCurrentGameMode()).GetSong(_SongQueue[_CurrentRound].SongID);
} }
public bool IsFinished() public bool IsFinished()
@@ -155,7 +157,7 @@ namespace Vocaluxe.SongQueue
/// <returns>Song of current round or null if there is none/game finished</returns> /// <returns>Song of current round or null if there is none/game finished</returns>
public CSong GetSong() public CSong GetSong()
{ {
return GetSong(_CurrentRound); return _CurrentSong;
} }
public int GetNumSongs() public int GetNumSongs()
@@ -170,6 +172,8 @@ namespace Vocaluxe.SongQueue
/// <returns>Current song or null if out of bounds</returns> /// <returns>Current song or null if out of bounds</returns>
public CSong GetSong(int round) public CSong GetSong(int round)
{ {
if (round == _CurrentRound)
return _CurrentSong;
if (round < _SongQueue.Count && round >= 0) if (round < _SongQueue.Count && round >= 0)
return CSongs.GetSong(_SongQueue[round].SongID); return CSongs.GetSong(_SongQueue[round].SongID);
+33
View File
@@ -114,6 +114,15 @@ namespace VocaluxeLib
return Int32.TryParse(value, out result) ? result : 0; return Int32.TryParse(value, out result) ? result : 0;
} }
public static void SetRect(SRectF bounds, out SRectF rect, float rectAspect, EAspect aspect)
{
var bounds2 = new RectangleF(bounds.X, bounds.Y, bounds.W, bounds.H);
RectangleF rect2;
SetRect(bounds2, out rect2, rectAspect, aspect);
rect = new SRectF(rect2.X, rect2.Y, rect2.Width, rect2.Height, bounds.Z);
}
public static void SetRect(RectangleF bounds, out RectangleF rect, float rectAspect, EAspect aspect) public static void SetRect(RectangleF bounds, out RectangleF rect, float rectAspect, EAspect aspect)
{ {
float boundsW = bounds.Width; float boundsW = bounds.Width;
@@ -264,6 +273,30 @@ namespace VocaluxeLib
{ {
return (bounds.X <= x) && (bounds.X + bounds.W >= x) && (bounds.Y <= y) && (bounds.Y + bounds.H >= y); return (bounds.X <= x) && (bounds.X + bounds.W >= x) && (bounds.Y <= y) && (bounds.Y + bounds.H >= y);
} }
/// <summary>
/// Returns a filename that is unique in that path
/// </summary>
/// <param name="path">Path in which the file should be stored</param>
/// <param name="filename">filename (including extension)</param>
/// <returns></returns>
public static string GetUniqueFileName(string path, string filename, bool withPath = true)
{
string ext = Path.GetExtension(filename);
filename = Path.GetFileNameWithoutExtension(filename);
if (filename == null)
filename = "1";
if (File.Exists(Path.Combine(path, filename + ext)))
{
int i = 1;
while (File.Exists(Path.Combine(path, filename + "_" + i + ext)))
i++;
filename += "_" + i;
}
if (withPath)
filename = Path.Combine(path, filename);
return filename + ext;
}
} }
static class CEncoding static class CEncoding
+1 -4
View File
@@ -62,10 +62,7 @@ namespace VocaluxeLib
{ {
string val; string val;
if (GetValue(cast, out val, Enum.GetName(typeof(T), value))) if (GetValue(cast, out val, Enum.GetName(typeof(T), value)))
{ return CHelper.TryParse(val, out value, true);
CHelper.TryParse(val, out value, true);
return true;
}
return false; return false;
} }
+10
View File
@@ -124,5 +124,15 @@ namespace VocaluxeLib
{ {
return value.ToString("F", NumberFormatInfo.InvariantInfo); return value.ToString("F", NumberFormatInfo.InvariantInfo);
} }
public static SRectF Scale(this SRectF rect, float scale)
{
return new SRectF(
rect.X - rect.W * (scale - 1f),
rect.Y - rect.H * (scale - 1f),
rect.W + 2 * rect.W * (scale - 1f),
rect.H + 2 * rect.H * (scale - 1f),
rect.Z);
}
} }
} }
+18 -15
View File
@@ -120,7 +120,7 @@ namespace VocaluxeLib
bool SongHasVideo(); bool SongHasVideo();
bool VideoEnabled(); bool VideoEnabled();
void SetStatus(bool disabled); void SetDisabled(bool disabled);
void Next(); void Next();
void Previous(); void Previous();
void Pause(); void Pause();
@@ -198,6 +198,8 @@ namespace VocaluxeLib
void Reset(); void Reset();
void ClearSongs(); void ClearSongs();
int GetNumSongs(); int GetNumSongs();
CSong GetSong();
CSong GetSong(int round);
} }
public interface IRecording public interface IRecording
@@ -292,24 +294,25 @@ namespace VocaluxeLib
public interface IPlaylist public interface IPlaylist
{ {
string GetPlaylistName(int playlistID); bool Exists(int playlistID);
List<string> GetPlaylistNames(); string GetName(int playlistID);
List<string> GetNames();
void SetPlaylistName(int playlistID, string name); void SetName(int playlistID, string name);
void DeletePlaylist(int playlistID); void Delete(int playlistID);
void SavePlaylist(int playlistID); void Save(int playlistID);
int GetNumPlaylists(); int GetNumPlaylists();
void AddPlaylistSong(int playlistID, int songID); void AddSong(int playlistID, int songID);
void AddPlaylistSong(int playlistID, int songID, EGameMode gameMode); void AddSong(int playlistID, int songID, EGameMode gameMode);
void InsertPlaylistSong(int playlistID, int positionIndex, int songID, EGameMode gameMode); void InsertSong(int playlistID, int positionIndex, int songID, EGameMode gameMode);
void MovePlaylistSong(int playlistID, int sourceIndex, int destIndex); void MoveSong(int playlistID, int sourceIndex, int destIndex);
void MovePlaylistSongDown(int playlistID, int songIndex); void MoveSongDown(int playlistID, int songIndex);
void MovePlaylistSongUp(int playlistID, int songIndex); void MoveSongUp(int playlistID, int songIndex);
void DeletePlaylistSong(int playlistID, int songIndex); void DeleteSong(int playlistID, int songIndex);
int GetPlaylistSongCount(int playlistID); int GetSongCount(int playlistID);
CPlaylistSong GetPlaylistSong(int playlistID, int songIndex); CPlaylistSong GetSong(int playlistID, int songIndex);
} }
} }
+1
View File
@@ -339,6 +339,7 @@ namespace VocaluxeLib.Menu
foreach (CNameSelection ns in _NameSelections) foreach (CNameSelection ns in _NameSelections)
ns.UnloadTextures(); ns.UnloadTextures();
foreach (CPlaylist pls in _Playlists) foreach (CPlaylist pls in _Playlists)
pls.UnloadTextures(); pls.UnloadTextures();
+47 -49
View File
@@ -176,7 +176,7 @@ namespace VocaluxeLib.Menu
{ {
if (EditMode == EEditMode.ChangeOrder && _ChangeOrderSource != -1 && _PlaylistElements.Count > _ChangeOrderSource) if (EditMode == EEditMode.ChangeOrder && _ChangeOrderSource != -1 && _PlaylistElements.Count > _ChangeOrderSource)
{ {
CBase.Playlist.DeletePlaylistSong(ActivePlaylistID, _PlaylistElements[_ChangeOrderSource].Content); CBase.Playlist.DeleteSong(ActivePlaylistID, _PlaylistElements[_ChangeOrderSource].Content);
UpdatePlaylist(); UpdatePlaylist();
} }
_ChangeOrderSource = -1; _ChangeOrderSource = -1;
@@ -503,13 +503,13 @@ namespace VocaluxeLib.Menu
switch (keyEvent.Key) switch (keyEvent.Key)
{ {
case Keys.Enter: case Keys.Enter:
CBase.Playlist.SetPlaylistName(ActivePlaylistID, _Theme.ButtonPlaylistName.Text.Text); CBase.Playlist.SetName(ActivePlaylistID, _Theme.ButtonPlaylistName.Text.Text);
CBase.Playlist.SavePlaylist(ActivePlaylistID); CBase.Playlist.Save(ActivePlaylistID);
EditMode = EEditMode.None; EditMode = EEditMode.None;
_Theme.ButtonPlaylistName.EditMode = false; _Theme.ButtonPlaylistName.EditMode = false;
break; break;
case Keys.Escape: case Keys.Escape:
_Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetPlaylistName(ActivePlaylistID); _Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetName(ActivePlaylistID);
EditMode = EEditMode.None; EditMode = EEditMode.None;
_Theme.ButtonPlaylistName.EditMode = false; _Theme.ButtonPlaylistName.EditMode = false;
break; break;
@@ -600,7 +600,7 @@ namespace VocaluxeLib.Menu
break; break;
case Keys.Delete: case Keys.Delete:
CBase.Playlist.DeletePlaylistSong(ActivePlaylistID, _PlaylistElements[CurrentPlaylistElement].Content); CBase.Playlist.DeleteSong(ActivePlaylistID, _PlaylistElements[CurrentPlaylistElement].Content);
UpdatePlaylist(); UpdatePlaylist();
if (Offset > 0) if (Offset > 0)
@@ -626,7 +626,7 @@ namespace VocaluxeLib.Menu
case Keys.Add: //move the selected song up case Keys.Add: //move the selected song up
if (_PlaylistElementContents.Count > 1 && (CurrentPlaylistElement > 0 || Offset > 0)) if (_PlaylistElementContents.Count > 1 && (CurrentPlaylistElement > 0 || Offset > 0))
{ {
CBase.Playlist.MovePlaylistSongUp(ActivePlaylistID, CurrentPlaylistElement + Offset); CBase.Playlist.MoveSongUp(ActivePlaylistID, CurrentPlaylistElement + Offset);
UpdatePlaylist(); UpdatePlaylist();
var key = new SKeyEvent {Key = Keys.Up}; var key = new SKeyEvent {Key = Keys.Up};
@@ -655,7 +655,7 @@ namespace VocaluxeLib.Menu
case Keys.Subtract: //move the selected song down case Keys.Subtract: //move the selected song down
if (_PlaylistElementContents.Count > 1 && CurrentPlaylistElement + Offset < _PlaylistElementContents.Count - 1) if (_PlaylistElementContents.Count > 1 && CurrentPlaylistElement + Offset < _PlaylistElementContents.Count - 1)
{ {
CBase.Playlist.MovePlaylistSongDown(ActivePlaylistID, CurrentPlaylistElement + Offset); CBase.Playlist.MoveSongDown(ActivePlaylistID, CurrentPlaylistElement + Offset);
UpdatePlaylist(); UpdatePlaylist();
var key = new SKeyEvent {Key = Keys.Down}; var key = new SKeyEvent {Key = Keys.Down};
@@ -724,7 +724,7 @@ namespace VocaluxeLib.Menu
if (CurrentPlaylistElement != -1) if (CurrentPlaylistElement != -1)
{ {
CBase.Playlist.GetPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = CBase.Playlist.GetSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode =
_PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[_PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; _PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[_PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection];
UpdatePlaylist(); UpdatePlaylist();
} }
@@ -736,7 +736,7 @@ namespace VocaluxeLib.Menu
if (CurrentPlaylistElement != -1) if (CurrentPlaylistElement != -1)
{ {
CBase.Playlist.GetPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = CBase.Playlist.GetSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode =
_PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[_PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; _PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[_PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection];
UpdatePlaylist(); UpdatePlaylist();
} }
@@ -764,10 +764,10 @@ namespace VocaluxeLib.Menu
else if (_Theme.ButtonPlaylistSing.Selected) else if (_Theme.ButtonPlaylistSing.Selected)
_StartPlaylistSongs(); _StartPlaylistSongs();
else if (_Theme.ButtonPlaylistSave.Selected) else if (_Theme.ButtonPlaylistSave.Selected)
CBase.Playlist.SavePlaylist(ActivePlaylistID); CBase.Playlist.Save(ActivePlaylistID);
else if (_Theme.ButtonPlaylistDelete.Selected) else if (_Theme.ButtonPlaylistDelete.Selected)
{ {
CBase.Playlist.DeletePlaylist(ActivePlaylistID); CBase.Playlist.Delete(ActivePlaylistID);
ClosePlaylist(); ClosePlaylist();
} }
else if (_Theme.ButtonPlaylistName.Selected) else if (_Theme.ButtonPlaylistName.Selected)
@@ -888,7 +888,7 @@ namespace VocaluxeLib.Menu
//Delete Entry with RB //Delete Entry with RB
if (CHelper.IsInBounds(_PlaylistElements[i].Background.Rect, mouseEvent) && mouseEvent.RB && _PlaylistElements[i].Content != -1) if (CHelper.IsInBounds(_PlaylistElements[i].Background.Rect, mouseEvent) && mouseEvent.RB && _PlaylistElements[i].Content != -1)
{ {
CBase.Playlist.DeletePlaylistSong(ActivePlaylistID, _PlaylistElements[i].Content); CBase.Playlist.DeleteSong(ActivePlaylistID, _PlaylistElements[i].Content);
UpdatePlaylist(); UpdatePlaylist();
return true; return true;
} }
@@ -906,7 +906,7 @@ namespace VocaluxeLib.Menu
{ {
if (CurrentPlaylistElement != -1) if (CurrentPlaylistElement != -1)
{ {
CBase.Playlist.GetPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = CBase.Playlist.GetSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode =
_PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[_PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; _PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[_PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection];
UpdatePlaylist(); UpdatePlaylist();
} }
@@ -922,12 +922,12 @@ namespace VocaluxeLib.Menu
} }
if (_Theme.ButtonPlaylistSave.Selected) if (_Theme.ButtonPlaylistSave.Selected)
{ {
CBase.Playlist.SavePlaylist(ActivePlaylistID); CBase.Playlist.Save(ActivePlaylistID);
return true; return true;
} }
if (_Theme.ButtonPlaylistDelete.Selected) if (_Theme.ButtonPlaylistDelete.Selected)
{ {
CBase.Playlist.DeletePlaylist(ActivePlaylistID); CBase.Playlist.Delete(ActivePlaylistID);
ClosePlaylist(); ClosePlaylist();
return true; return true;
} }
@@ -981,14 +981,14 @@ namespace VocaluxeLib.Menu
if (CurrentPlaylistElement != -1) if (CurrentPlaylistElement != -1)
{ {
CBase.Playlist.InsertPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset, DragAndDropSongID, gm); CBase.Playlist.InsertSong(ActivePlaylistID, CurrentPlaylistElement + Offset, DragAndDropSongID, gm);
UpdatePlaylist(); UpdatePlaylist();
} }
else else
{ {
if (mouseEvent.Y < _PlaylistElements[0].Background.Rect.Y && Offset == 0) if (mouseEvent.Y < _PlaylistElements[0].Background.Rect.Y && Offset == 0)
{ {
CBase.Playlist.InsertPlaylistSong(ActivePlaylistID, 0, DragAndDropSongID, gm); CBase.Playlist.InsertSong(ActivePlaylistID, 0, DragAndDropSongID, gm);
UpdatePlaylist(); UpdatePlaylist();
} }
else else
@@ -1007,7 +1007,7 @@ namespace VocaluxeLib.Menu
if (mouseEvent.Y > min) if (mouseEvent.Y > min)
{ {
CBase.Playlist.AddPlaylistSong(ActivePlaylistID, DragAndDropSongID, gm); CBase.Playlist.AddSong(ActivePlaylistID, DragAndDropSongID, gm);
UpdatePlaylist(); UpdatePlaylist();
ScrollToBottom(); ScrollToBottom();
} }
@@ -1028,8 +1028,8 @@ namespace VocaluxeLib.Menu
{ {
if (_Theme.ButtonPlaylistName.Selected) if (_Theme.ButtonPlaylistName.Selected)
{ {
CBase.Playlist.SetPlaylistName(ActivePlaylistID, _Theme.ButtonPlaylistName.Text.Text); CBase.Playlist.SetName(ActivePlaylistID, _Theme.ButtonPlaylistName.Text.Text);
CBase.Playlist.SavePlaylist(ActivePlaylistID); CBase.Playlist.Save(ActivePlaylistID);
EditMode = EEditMode.None; EditMode = EEditMode.None;
return true; return true;
} }
@@ -1038,7 +1038,7 @@ namespace VocaluxeLib.Menu
{ {
if (_Theme.ButtonPlaylistName.Selected) if (_Theme.ButtonPlaylistName.Selected)
{ {
_Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetPlaylistName(ActivePlaylistID); _Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetName(ActivePlaylistID);
EditMode = EEditMode.None; EditMode = EEditMode.None;
_Theme.ButtonPlaylistName.EditMode = false; _Theme.ButtonPlaylistName.EditMode = false;
return true; return true;
@@ -1058,13 +1058,13 @@ namespace VocaluxeLib.Menu
{ {
if (CurrentPlaylistElement != -1 && CurrentPlaylistElement + Offset != _ChangeOrderSource) if (CurrentPlaylistElement != -1 && CurrentPlaylistElement + Offset != _ChangeOrderSource)
{ {
CBase.Playlist.MovePlaylistSong(ActivePlaylistID, _ChangeOrderSource, CurrentPlaylistElement + Offset); CBase.Playlist.MoveSong(ActivePlaylistID, _ChangeOrderSource, CurrentPlaylistElement + Offset);
UpdatePlaylist(); UpdatePlaylist();
} }
else if (CurrentPlaylistElement == -1) else if (CurrentPlaylistElement == -1)
{ {
if (mouseEvent.Y < _PlaylistElements[0].Background.Rect.Y && Offset == 0) if (mouseEvent.Y < _PlaylistElements[0].Background.Rect.Y && Offset == 0)
CBase.Playlist.MovePlaylistSong(ActivePlaylistID, _ChangeOrderSource, 0); CBase.Playlist.MoveSong(ActivePlaylistID, _ChangeOrderSource, 0);
else else
{ {
if (_PlaylistElements.Count + Offset >= _PlaylistElementContents.Count) if (_PlaylistElements.Count + Offset >= _PlaylistElementContents.Count)
@@ -1080,7 +1080,7 @@ namespace VocaluxeLib.Menu
} }
if (mouseEvent.Y > min) if (mouseEvent.Y > min)
CBase.Playlist.MovePlaylistSong(ActivePlaylistID, _ChangeOrderSource, _PlaylistElementContents.Count - 1); CBase.Playlist.MoveSong(ActivePlaylistID, _ChangeOrderSource, _PlaylistElementContents.Count - 1);
} }
} }
@@ -1134,35 +1134,33 @@ namespace VocaluxeLib.Menu
public bool LoadPlaylist(int playlistID) public bool LoadPlaylist(int playlistID)
{ {
if (playlistID > -1 && playlistID < CBase.Playlist.GetNumPlaylists()) if (!CBase.Playlist.Exists(playlistID))
return false;
ActivePlaylistID = playlistID;
_Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetName(ActivePlaylistID);
_PlaylistElementContents.Clear();
for (int i = 0; i < CBase.Playlist.GetSongCount(ActivePlaylistID); i++)
{ {
ActivePlaylistID = playlistID; var pec = new CPlaylistElementContent
_Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetPlaylistName(ActivePlaylistID); {
_PlaylistElementContents.Clear(); SongID = CBase.Playlist.GetSong(ActivePlaylistID, i).SongID,
for (int i = 0; i < CBase.Playlist.GetPlaylistSongCount(ActivePlaylistID); i++) Modes = CBase.Songs.GetSongByID(CBase.Playlist.GetSong(ActivePlaylistID, i).SongID).AvailableGameModes,
{ Mode = CBase.Playlist.GetSong(ActivePlaylistID, i).GameMode
var pec = new CPlaylistElementContent };
{ _PlaylistElementContents.Add(pec);
SongID = CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID,
Modes = CBase.Songs.GetSongByID(CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID).AvailableGameModes,
Mode = CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).GameMode
};
_PlaylistElementContents.Add(pec);
}
Update();
return true;
} }
return false; Update();
return true;
} }
public void UpdatePlaylist() public void UpdatePlaylist()
{ {
_PlaylistElementContents.Clear(); _PlaylistElementContents.Clear();
for (int i = 0; i < CBase.Playlist.GetPlaylistSongCount(ActivePlaylistID); i++) for (int i = 0; i < CBase.Playlist.GetSongCount(ActivePlaylistID); i++)
{ {
var pec = new CPlaylistElementContent {SongID = CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID}; var pec = new CPlaylistElementContent {SongID = CBase.Playlist.GetSong(ActivePlaylistID, i).SongID};
pec.Modes = CBase.Songs.GetSongByID(pec.SongID).AvailableGameModes; pec.Modes = CBase.Songs.GetSongByID(pec.SongID).AvailableGameModes;
pec.Mode = CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).GameMode; pec.Mode = CBase.Playlist.GetSong(ActivePlaylistID, i).GameMode;
_PlaylistElementContents.Add(pec); _PlaylistElementContents.Add(pec);
} }
@@ -1181,10 +1179,10 @@ namespace VocaluxeLib.Menu
CBase.Game.Reset(); CBase.Game.Reset();
CBase.Game.ClearSongs(); CBase.Game.ClearSongs();
if (ActivePlaylistID > -1 && ActivePlaylistID < CBase.Playlist.GetNumPlaylists()) if (CBase.Playlist.Exists(ActivePlaylistID))
{ {
for (int i = 0; i < CBase.Playlist.GetPlaylistSongCount(ActivePlaylistID); i++) for (int i = 0; i < CBase.Playlist.GetSongCount(ActivePlaylistID); i++)
CBase.Game.AddSong(CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID, CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).GameMode); CBase.Game.AddSong(CBase.Playlist.GetSong(ActivePlaylistID, i).SongID, CBase.Playlist.GetSong(ActivePlaylistID, i).GameMode);
if (CBase.Game.GetNumSongs() > 0) if (CBase.Game.GetNumSongs() > 0)
CBase.Graphics.FadeTo(EScreens.ScreenNames); //TODO: What is if someone uses that in PartyMode? CBase.Graphics.FadeTo(EScreens.ScreenNames); //TODO: What is if someone uses that in PartyMode?
} }
@@ -1195,7 +1193,7 @@ namespace VocaluxeLib.Menu
CBase.Game.Reset(); CBase.Game.Reset();
CBase.Game.ClearSongs(); CBase.Game.ClearSongs();
CBase.Game.AddSong(CBase.Playlist.GetPlaylistSong(ActivePlaylistID, selected).SongID, CBase.Playlist.GetPlaylistSong(ActivePlaylistID, selected).GameMode); CBase.Game.AddSong(CBase.Playlist.GetSong(ActivePlaylistID, selected).SongID, CBase.Playlist.GetSong(ActivePlaylistID, selected).GameMode);
if (CBase.Game.GetNumSongs() > 0) if (CBase.Game.GetNumSongs() > 0)
CBase.Graphics.FadeTo(EScreens.ScreenNames); CBase.Graphics.FadeTo(EScreens.ScreenNames);
@@ -1203,7 +1201,7 @@ namespace VocaluxeLib.Menu
public void Update() public void Update()
{ {
if (ActivePlaylistID > -1 && ActivePlaylistID < CBase.Playlist.GetNumPlaylists()) if (CBase.Playlist.Exists(ActivePlaylistID))
{ {
for (int i = 0; i < _PlaylistElements.Count; i++) for (int i = 0; i < _PlaylistElements.Count; i++)
{ {
+8 -31
View File
@@ -188,43 +188,20 @@ namespace VocaluxeLib.Menu
public void Draw(bool forceDraw = false) public void Draw(bool forceDraw = false)
{ {
Draw(1f, Rect.Z, Aspect, forceDraw); Draw(Aspect, 1f, 0f, forceDraw);
} }
public void Draw(EAspect aspect) public void Draw(EAspect aspect, float scale = 1f, float zModify = 0f, bool forceDraw = false)
{
Draw(1f, Rect.Z, aspect);
}
public void Draw(float scale, EAspect aspect)
{
Draw(scale, Rect.Z, aspect);
}
public void Draw(float scale, float z, EAspect aspect, bool forceDraw = false)
{ {
CTexture texture = Texture ?? new CTexture((int)Rect.W, (int)Rect.H); CTexture texture = Texture ?? new CTexture((int)Rect.W, (int)Rect.H);
var bounds = new SRectF( SRectF bounds = Rect.Scale(scale);
Rect.X - Rect.W * (scale - 1f), SRectF rect;
Rect.Y - Rect.H * (scale - 1f),
Rect.W + 2 * Rect.W * (scale - 1f),
Rect.H + 2 * Rect.H * (scale - 1f),
z);
SRectF rect = bounds;
if (aspect != EAspect.Stretch) if (aspect != EAspect.Stretch)
{ CHelper.SetRect(bounds, out rect, texture.OrigAspect, aspect);
var bounds2 = new RectangleF(bounds.X, bounds.Y, bounds.W, bounds.H); else
RectangleF rect2; rect = bounds;
CHelper.SetRect(bounds2, out rect2, texture.OrigAspect, aspect); rect.Z = Rect.Z + zModify;
rect.X = rect2.X;
rect.Y = rect2.Y;
rect.W = rect2.Width;
rect.H = rect2.Height;
}
var color = new SColorF(Color.R, Color.G, Color.B, Color.A * Alpha); var color = new SColorF(Color.R, Color.G, Color.B, Color.A * Alpha);
if (Visible || forceDraw || (CBase.Settings.GetProgramState() == EProgramState.EditTheme)) if (Visible || forceDraw || (CBase.Settings.GetProgramState() == EProgramState.EditTheme))
+31 -54
View File
@@ -33,16 +33,29 @@ namespace VocaluxeLib.Menu.SongMenu
_CreateSongMenu(); _CreateSongMenu();
} }
#region ISongMenu
public bool Selected public bool Selected
{ {
get { return _SongMenu.IsSelected(); } get { return _SongMenu.Selected; }
set { _SongMenu.SetSelected(value); } set { _SongMenu.Selected = value; }
} }
public bool Visible public bool Visible
{ {
get { return _SongMenu.IsVisible(); } get { return _SongMenu.Visible; }
set { _SongMenu.SetVisible(value); } set { _SongMenu.Visible = value; }
}
public bool Active
{
get { return _SongMenu.Active; }
set { _SongMenu.Active = value; }
}
public bool SmallView
{
get { return _SongMenu.SmallView; }
set { _SongMenu.SmallView = value; }
} }
public SRectF Rect public SRectF Rect
@@ -50,7 +63,6 @@ namespace VocaluxeLib.Menu.SongMenu
get { return _SongMenu.Rect; } get { return _SongMenu.Rect; }
} }
#region ISongMenu
public void Update(SScreenSongOptions songOptions) public void Update(SScreenSongOptions songOptions)
{ {
_SongMenu.Update(songOptions); _SongMenu.Update(songOptions);
@@ -66,14 +78,14 @@ namespace VocaluxeLib.Menu.SongMenu
_SongMenu.OnHide(); _SongMenu.OnHide();
} }
public void HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions songOptions) public bool HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions options)
{ {
_SongMenu.HandleInput(ref keyEvent, songOptions); return _SongMenu.HandleInput(ref keyEvent, options);
} }
public void HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions) public bool HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions)
{ {
_SongMenu.HandleMouse(ref mouseEvent, songOptions); return _SongMenu.HandleMouse(ref mouseEvent, songOptions);
} }
public void Draw() public void Draw()
@@ -81,24 +93,19 @@ namespace VocaluxeLib.Menu.SongMenu
_SongMenu.Draw(); _SongMenu.Draw();
} }
public bool IsActive() public bool IsMouseOverSelectedSong(SMouseEvent mEvent)
{ {
return _SongMenu.IsActive(); return _SongMenu.IsMouseOverSelectedSong(mEvent);
} }
public void SetActive(bool active) public int GetPreviewSongNr()
{ {
_SongMenu.SetActive(active); return _SongMenu.GetPreviewSongNr();
} }
public bool IsMouseOverActualSelection(SMouseEvent mEvent) public int GetSelectedSongNr()
{ {
return _SongMenu.IsMouseOverActualSelection(mEvent); return _SongMenu.GetSelectedSongNr();
}
public int GetSelectedSong()
{
return _SongMenu.GetSelectedSong();
} }
public CStatic GetSelectedSongCover() public CStatic GetSelectedSongCover()
@@ -121,44 +128,14 @@ namespace VocaluxeLib.Menu.SongMenu
_SongMenu.SetSelectedCategory(categoryNr); _SongMenu.SetSelectedCategory(categoryNr);
} }
public bool EnterCurrentCategory() public bool EnterSelectedCategory()
{ {
return _SongMenu.EnterCurrentCategory(); return _SongMenu.EnterSelectedCategory();
} }
public int GetActualSelection() public int GetPreviewSong()
{ {
return _SongMenu.GetActualSelection(); return _SongMenu.GetPreviewSong();
}
public bool IsSelected()
{
return _SongMenu.IsSelected();
}
public void SetSelected(bool selected)
{
_SongMenu.SetSelected(selected);
}
public bool IsVisible()
{
return _SongMenu.IsVisible();
}
public void SetVisible(bool visible)
{
_SongMenu.SetVisible(visible);
}
public bool IsSmallView()
{
return _SongMenu.IsSmallView();
}
public void SetSmallView(bool smallView)
{
_SongMenu.SetSmallView(smallView);
} }
#endregion ISongMenu #endregion ISongMenu
@@ -15,11 +15,33 @@
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>. // along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
#endregion #endregion
using VocaluxeLib.PartyModes;
namespace VocaluxeLib.Menu.SongMenu namespace VocaluxeLib.Menu.SongMenu
{ {
class CSongMenuBook : CSongMenuFramework class CSongMenuBook : CSongMenuFramework
{ {
public CSongMenuBook(int partyModeID) public CSongMenuBook(int partyModeID)
: base(partyModeID) {} : base(partyModeID) {}
public override float SelectedTileZoomFactor
{
get { return 1.2f; }
}
public override bool HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions options)
{
return false;
}
public override bool HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions)
{
return false;
}
public override CStatic GetSelectedSongCover()
{
return null;
}
} }
} }
+22 -7
View File
@@ -15,6 +15,8 @@
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>. // along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
#endregion #endregion
using VocaluxeLib.PartyModes;
namespace VocaluxeLib.Menu.SongMenu namespace VocaluxeLib.Menu.SongMenu
{ {
class CSongMenuDreidel : CSongMenuFramework class CSongMenuDreidel : CSongMenuFramework
@@ -30,13 +32,6 @@ namespace VocaluxeLib.Menu.SongMenu
private CText _Artist; private CText _Artist;
private CText _Title; private CText _Title;
private CText _SongLength; private CText _SongLength;
private int _actualSelection = -1;
public override int GetActualSelection()
{
return _actualSelection;
}
*/ */
public CSongMenuDreidel(int partyModeID) public CSongMenuDreidel(int partyModeID)
@@ -59,5 +54,25 @@ namespace VocaluxeLib.Menu.SongMenu
} }
// ReSharper restore RedundantOverridenMember // ReSharper restore RedundantOverridenMember
public override float SelectedTileZoomFactor
{
get { return 1.2f; }
}
public override bool HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions options)
{
return false;
}
public override bool HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions)
{
return false;
}
public override CStatic GetSelectedSongCover()
{
return null;
}
} }
} }
+142 -157
View File
@@ -16,7 +16,7 @@
#endregion #endregion
using System; using System;
using System.Collections.Generic; using System.Diagnostics;
using System.IO; using System.IO;
using System.Xml; using System.Xml;
using VocaluxeLib.Draw; using VocaluxeLib.Draw;
@@ -98,81 +98,70 @@ namespace VocaluxeLib.Menu.SongMenu
protected SThemeSongMenu _Theme; protected SThemeSongMenu _Theme;
private bool _ThemeLoaded; private bool _ThemeLoaded;
private CFading _VideoFading;
private readonly List<int> _Streams = new List<int>();
protected CTexture _Vidtex;
protected bool _Initialized; protected bool _Initialized;
protected int _LastKnownNumSongs;
protected int _LastKnownCategory = -1;
protected SColorF _Color; private int _PreviewNrInternal = -1;
protected virtual int _PreviewNr
protected bool _Active;
protected float _MaxVolume = 100f;
//the real selected song for singing
protected int _Locked { get; set; }
protected int _PreviewIdInternal = -1;
protected virtual int _PreviewId
{ {
get { return _PreviewIdInternal; } get { return _PreviewNrInternal; }
set set
{ {
//Do this first, otherwhise song will restart if (_PreviewNrInternal == value)
_PlaySong(value); return;
_PreviewIdInternal = value; if (CBase.Songs.IsInCategory())
{
if (value >= CBase.Songs.GetNumSongsVisible())
value = -1;
_PlaySong(value);
}
else if (value >= CBase.Songs.GetNumCategories())
value = -1;
_PreviewNrInternal = value;
} }
} }
protected int _PreviewSongStream { get; private set; } protected int _PreviewSongStream { get; private set; }
protected int _PreviewVideoStream { get; private set; } protected int _PreviewVideoStream { get; private set; }
private CFading _VideoFading;
protected CTexture _Vidtex;
private SColorF _ColorInternal;
protected SColorF _Color
{
get { return _ColorInternal; }
}
public int GetPreviewSong()
{
return _PreviewNr;
}
public SRectF Rect { get; protected set; } public SRectF Rect { get; protected set; }
public bool Active { get; set; }
public SColorF Color
{
get { return _Color; }
}
public virtual int GetActualSelection()
{
return -1;
}
private bool _Selected; private bool _Selected;
private bool _Visible = true; public bool Selected
public bool IsSelected()
{ {
return _Selected; get { return _Selected; }
} set
{
public void SetSelected(bool selected) _Selected = value;
{ Active = value;
_Selected = selected; }
SetActive(selected);
}
public bool IsVisible()
{
return _Visible;
}
public void SetVisible(bool visible)
{
_Visible = visible;
} }
public bool Visible { get; set; }
public virtual bool SmallView { get; set; }
public abstract float SelectedTileZoomFactor { get; }
// This is the nr of the current selection (song or category)
protected virtual int _SelectionNr { get; set; }
protected CSongMenuFramework(int partyModeID) protected CSongMenuFramework(int partyModeID)
{ {
Visible = true;
_PartyModeID = partyModeID; _PartyModeID = partyModeID;
_PreviewVideoStream = -1; _PreviewVideoStream = -1;
_PreviewSongStream = -1; _PreviewSongStream = -1;
_Locked = -1;
_Theme = new SThemeSongMenu _Theme = new SThemeSongMenu
{ {
SongMenuTileBoard = SongMenuTileBoard =
@@ -190,6 +179,7 @@ namespace VocaluxeLib.Menu.SongMenu
}; };
} }
#region Theme
public string GetThemeName() public string GetThemeName()
{ {
return _Theme.Name; return _Theme.Name;
@@ -208,13 +198,13 @@ namespace VocaluxeLib.Menu.SongMenu
_ThemeLoaded &= xmlReader.GetValue(item + "/MedleyTagIcon", out _Theme.MedleyTagIcon, String.Empty); _ThemeLoaded &= xmlReader.GetValue(item + "/MedleyTagIcon", out _Theme.MedleyTagIcon, String.Empty);
if (xmlReader.GetValue(item + "/Color", out _Theme.ColorName, String.Empty)) if (xmlReader.GetValue(item + "/Color", out _Theme.ColorName, String.Empty))
_ThemeLoaded &= CBase.Theme.GetColor(_Theme.ColorName, skinIndex, out _Color); _ThemeLoaded &= CBase.Theme.GetColor(_Theme.ColorName, skinIndex, out _ColorInternal);
else else
{ {
_ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref _Color.R); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref _ColorInternal.R);
_ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref _Color.G); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref _ColorInternal.G);
_ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref _Color.B); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref _ColorInternal.B);
_ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref _Color.A); _ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref _ColorInternal.A);
} }
#region SongMenuTileBoard #region SongMenuTileBoard
@@ -352,25 +342,20 @@ namespace VocaluxeLib.Menu.SongMenu
} }
return false; return false;
} }
#endregion Theme
public virtual void Init() public virtual void Init()
{ {
_Reset(); _ResetPreview();
_Initialized = true; _Initialized = true;
} }
public void UpdateRect(SRectF rect)
{
Rect = rect;
Init();
}
public virtual void Update(SScreenSongOptions songOptions) public virtual void Update(SScreenSongOptions songOptions)
{ {
if (!_Initialized) if (!_Initialized)
return; return;
if (_Streams.Count <= 0 || _PreviewVideoStream == -1) if (_PreviewSongStream == -1 || _PreviewVideoStream == -1)
return; return;
if (CBase.Video.IsFinished(_PreviewVideoStream) || CBase.Sound.IsFinished(_PreviewSongStream)) if (CBase.Video.IsFinished(_PreviewVideoStream) || CBase.Sound.IsFinished(_PreviewSongStream))
@@ -398,69 +383,72 @@ namespace VocaluxeLib.Menu.SongMenu
} }
} }
public virtual void OnShow() public virtual void OnShow() {}
{
_PreviewSongStream = -1;
_Vidtex = null;
}
public virtual void OnHide() public virtual void OnHide()
{ {
_Reset(); _ResetPreview();
} }
public virtual void HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions songOptions) {} public abstract bool HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions options);
public virtual void HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions) {} public abstract bool HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions);
public virtual void Draw() public virtual void Draw()
{ {
if (!_Initialized || !_Visible) if (!_Initialized || !Visible)
return; return;
if (_PreviewVideoStream != -1) if (_PreviewVideoStream != -1)
CBase.Drawing.DrawTexture(_Vidtex, new SRectF(0, 0, 1280, 720, 0)); CBase.Drawing.DrawTexture(_Vidtex, new SRectF(0, 0, 1280, 720, 0));
} }
public virtual bool IsActive() public bool IsMouseOverSelectedSong(SMouseEvent mEvent)
{ {
return _Active; CStatic selCov = GetSelectedSongCover();
return selCov != null && CHelper.IsInBounds(selCov.Rect.Scale(SelectedTileZoomFactor), mEvent);
} }
public virtual void SetActive(bool active) public int GetPreviewSongNr()
{
_Active = active;
}
public virtual bool IsMouseOverActualSelection(SMouseEvent mEvent)
{
return false;
}
public virtual int GetSelectedSong()
{ {
if (CBase.Songs.IsInCategory())
return _PreviewNr;
return -1; return -1;
} }
public virtual CStatic GetSelectedSongCover() public int GetSelectedSongNr()
{
return new CStatic(_PartyModeID);
}
public virtual int GetSelectedCategory()
{ {
if (CBase.Songs.IsInCategory())
return _SelectionNr;
return -1; return -1;
} }
public virtual void SetSelectedSong(int visibleSongNr) {} public abstract CStatic GetSelectedSongCover();
public virtual void SetSelectedCategory(int categoryNr) {} public int GetSelectedCategory()
public virtual void SetSmallView(bool smallView) {}
public virtual bool IsSmallView()
{ {
return false; if (!CBase.Songs.IsInCategory())
return _SelectionNr;
return -1;
}
public void SetSelectedSong(int visibleSongNr)
{
Debug.Assert(CBase.Songs.IsInCategory());
if (visibleSongNr >= 0 && visibleSongNr < CBase.Songs.GetNumSongsVisible())
_SelectionNr = visibleSongNr;
else
_SelectionNr = -1;
_PreviewNr = _SelectionNr;
}
public void SetSelectedCategory(int categoryNr)
{
Debug.Assert(!CBase.Songs.IsInCategory());
if (categoryNr >= 0 && categoryNr < CBase.Songs.GetNumCategories())
_SelectionNr = categoryNr;
else
_SelectionNr = -1;
} }
public virtual void UnloadTextures() {} public virtual void UnloadTextures() {}
@@ -470,7 +458,7 @@ namespace VocaluxeLib.Menu.SongMenu
Init(); Init();
if (!String.IsNullOrEmpty(_Theme.ColorName)) if (!String.IsNullOrEmpty(_Theme.ColorName))
_Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); _ColorInternal = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID);
} }
public void ReloadTextures() public void ReloadTextures()
@@ -479,29 +467,29 @@ namespace VocaluxeLib.Menu.SongMenu
LoadTextures(); LoadTextures();
} }
public bool EnterCurrentCategory() public bool EnterSelectedCategory()
{ {
if (!_Initialized) if (!_Initialized)
return false; return false;
if (CBase.Songs.IsInCategory() || _PreviewId < 0 || _PreviewId >= CBase.Songs.GetNumCategories()) if (CBase.Songs.IsInCategory() || GetSelectedCategory() < 0 || GetSelectedCategory() >= CBase.Songs.GetNumCategories())
return false; return false;
_EnterCategory(_PreviewId); _EnterCategory(GetSelectedCategory());
return true; return true;
} }
protected virtual void _EnterCategory(int category) protected virtual void _EnterCategory(int categoryNr)
{ {
if (!_Initialized) if (!_Initialized)
return; return;
if (category >= CBase.Songs.GetNumCategories()) if (categoryNr >= CBase.Songs.GetNumCategories())
return; return;
_Reset(); _ResetPreview();
CBase.Songs.SetCategory(category); CBase.Songs.SetCategory(categoryNr);
} }
protected virtual void _ShowCategories() protected virtual void _LeaveCategory()
{ {
if (!_Initialized) if (!_Initialized)
return; return;
@@ -509,60 +497,51 @@ namespace VocaluxeLib.Menu.SongMenu
if (!CBase.Songs.IsInCategory()) if (!CBase.Songs.IsInCategory())
return; return;
_Reset(); _ResetPreview();
CBase.Songs.SetCategory(-1); CBase.Songs.SetCategory(-1);
} }
protected void _PlaySong(int nr) private void _PlaySong(int nr)
{ {
if (CBase.Songs.IsInCategory() && (_PreviewId != nr || _Streams.Count == 0)) _ResetPreview();
CSong song = CBase.Songs.GetVisibleSong(nr);
if (song == null)
return;
//TODO: Using prescan here causes Vocaluxe to hang a bit on loading the song but we need the length below
_PreviewSongStream = CBase.Sound.Load(Path.Combine(song.Folder, song.MP3FileName), true, true);
float startposition = song.Preview.StartTime;
float length = CBase.Sound.GetLength(_PreviewSongStream);
if (song.Preview.Source == EDataSource.None)
startposition = length / 4f;
else if (startposition > length - 5f)
startposition = Math.Max(0f, Math.Min(length / 4f, length - 5f));
CBase.Sound.SetPosition(_PreviewSongStream, startposition);
CBase.Sound.Play(_PreviewSongStream);
CBase.Sound.SetStreamVolume(_PreviewSongStream, 0f);
CBase.Sound.Fade(_PreviewSongStream, 100f, 3f);
if (song.VideoFileName != "" && CBase.Config.GetVideoPreview() == EOffOn.TR_CONFIG_ON)
{ {
_Reset(); _PreviewVideoStream = CBase.Video.Load(Path.Combine(song.Folder, song.VideoFileName));
if (_PreviewVideoStream == -1)
CSong song = CBase.Songs.GetVisibleSong(nr);
if (song == null)
return; return;
CBase.Video.SetLoop(_PreviewVideoStream);
//TODO: Using prescan here causes Vocaluxe to hang a bit on loading the song but we need the length below CBase.Video.Skip(_PreviewVideoStream, startposition, song.VideoGap);
int stream = CBase.Sound.Load(Path.Combine(song.Folder, song.MP3FileName), true, true); _VideoFading = new CFading(0f, 1f, 3f);
float startposition = song.Preview.StartTime;
float length = CBase.Sound.GetLength(stream);
if (song.Preview.Source == EDataSource.None)
startposition = length / 4f;
else if (startposition > length - 5f)
startposition = Math.Max(0f, Math.Min(length / 4f, length - 5f));
if (startposition >= 0.5f)
startposition -= 0.5f;
CBase.Sound.SetPosition(stream, startposition);
CBase.Sound.Play(stream);
CBase.Sound.SetStreamVolume(stream, 0f);
CBase.Sound.Fade(stream, 100f, 3f);
_Streams.Add(stream);
_PreviewSongStream = stream;
_PreviewIdInternal = nr;
if (song.VideoFileName != "" && CBase.Config.GetVideoPreview() == EOffOn.TR_CONFIG_ON)
{
_PreviewVideoStream = CBase.Video.Load(Path.Combine(song.Folder, song.VideoFileName));
if (_PreviewVideoStream == -1)
return;
CBase.Video.SetLoop(_PreviewVideoStream);
CBase.Video.Skip(_PreviewVideoStream, startposition, song.VideoGap);
_VideoFading = new CFading(0f, 1f, 3f);
}
} }
} }
protected void _Reset() protected void _ResetPreview()
{ {
foreach (int stream in _Streams) if (_PreviewSongStream >= 0)
CBase.Sound.Fade(stream, 0f, 0.75f, EStreamAction.Close); CBase.Sound.Fade(_PreviewSongStream, 0f, 0.75f, EStreamAction.Close);
_Streams.Clear();
_PreviewSongStream = -1;
CBase.Video.Close(_PreviewVideoStream); CBase.Video.Close(_PreviewVideoStream);
_PreviewVideoStream = -1; _PreviewVideoStream = -1;
@@ -571,12 +550,18 @@ namespace VocaluxeLib.Menu.SongMenu
} }
#region ThemeEdit #region ThemeEdit
private void _UpdateRect(SRectF rect)
{
Rect = rect;
Init();
}
public void MoveElement(int stepX, int stepY) public void MoveElement(int stepX, int stepY)
{ {
SRectF rect = Rect; SRectF rect = Rect;
rect.X += stepX; rect.X += stepX;
rect.Y += stepY; rect.Y += stepY;
UpdateRect(rect); _UpdateRect(rect);
} }
public void ResizeElement(int stepW, int stepH) public void ResizeElement(int stepW, int stepH)
@@ -591,7 +576,7 @@ namespace VocaluxeLib.Menu.SongMenu
if (rect.H < 100) if (rect.H < 100)
rect.H = 100; rect.H = 100;
UpdateRect(rect); _UpdateRect(rect);
} }
#endregion ThemeEdit #endregion ThemeEdit
} }
@@ -15,11 +15,30 @@
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>. // along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
#endregion #endregion
using VocaluxeLib.PartyModes;
namespace VocaluxeLib.Menu.SongMenu namespace VocaluxeLib.Menu.SongMenu
{ {
class CSongMenuList : CSongMenuFramework class CSongMenuList : CSongMenuFramework
{ {
public CSongMenuList(int partyModeID) public CSongMenuList(int partyModeID)
: base(partyModeID) {} : base(partyModeID) {}
public override float SelectedTileZoomFactor
{
get { return 1.2f; }
}
public override bool HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions options)
{
return false;
}
public override bool HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions) { return false; }
public override CStatic GetSelectedSongCover()
{
return null;
}
} }
} }
+275 -400
View File
@@ -37,8 +37,8 @@ namespace VocaluxeLib.Menu.SongMenu
private CStatic _MedleyCalcIcon; private CStatic _MedleyCalcIcon;
private CStatic _MedleyTagIcon; private CStatic _MedleyTagIcon;
private CTexture _CoverBigTexture; private CTexture _CoverBigBGTexture;
private CTexture _CoverTexture; private CTexture _CoverBGTexture;
private CText _Artist; private CText _Artist;
private CText _Title; private CText _Title;
@@ -53,63 +53,76 @@ namespace VocaluxeLib.Menu.SongMenu
private int _TileW; private int _TileW;
private int _TileH; private int _TileH;
private int _Offset = -1; // Offset is the song or categoryNr of the tile in the left upper corner
private int _ActualSelection = -1; private int _Offset;
private bool _SmallView;
private float _Length = -1f; private float _Length = -1f;
private int _LastKnownNumSongs;
private int _LastKnownCategory = -1;
private bool _MouseWasInRect;
public override float SelectedTileZoomFactor
{
get { return 1.2f; }
}
protected override int _SelectionNr
{
set
{
int max = CBase.Songs.IsInCategory() ? CBase.Songs.GetNumSongsVisible() : CBase.Songs.GetNumCategories();
base._SelectionNr = value.Clamp(-1, max - 1);
//Update list in case we scrolled
_UpdateList();
_UpdateTileSelection();
}
}
private void _UpdateTileSelection()
{
foreach (CStatic tile in _Tiles)
tile.Selected = false;
int tileNr = _SelectionNr - _Offset;
if (tileNr >= 0 && tileNr < _Tiles.Count)
_Tiles[tileNr].Selected = true;
}
public override bool SmallView
{
set
{
if (SmallView == value)
return;
base.SmallView = value;
_InitTiles();
_UpdateList(true);
_UpdateTileSelection();
}
}
public CSongMenuTileBoard(int partyModeID) public CSongMenuTileBoard(int partyModeID)
: base(partyModeID) {} : base(partyModeID) {}
protected override int _PreviewId protected override int _PreviewNr
{ {
set set
{ {
if (value == base._PreviewId) if (value == base._PreviewNr)
return; return;
base._PreviewId = value; base._PreviewNr = value;
_UpdatePreview(); _UpdatePreview();
} }
} }
public override int GetActualSelection()
{
return _ActualSelection;
}
public override void Init() public override void Init()
{ {
base.Init(); base.Init();
Rect = _Theme.SongMenuTileBoard.TileRect;
_NumW = _Theme.SongMenuTileBoard.NumW;
_NumH = _Theme.SongMenuTileBoard.NumH;
_SpaceW = _Theme.SongMenuTileBoard.SpaceW; _SpaceW = _Theme.SongMenuTileBoard.SpaceW;
_SpaceH = _Theme.SongMenuTileBoard.SpaceH; _SpaceH = _Theme.SongMenuTileBoard.SpaceH;
_TileW = (int)((_Theme.SongMenuTileBoard.TileRect.W - _SpaceW * (_NumW - 1)) / _NumW);
_TileH = (int)((_Theme.SongMenuTileBoard.TileRect.H - _SpaceH * (_NumH - 1)) / _NumH);
_CoverTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBackgroundName, _PartyModeID);
_CoverBigTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBigBackgroundName, _PartyModeID);
_Tiles = new List<CStatic>();
for (int i = 0; i < _NumH; i++)
{
for (int j = 0; j < _NumW; j++)
{
var rect = new SRectF(_Theme.SongMenuTileBoard.TileRect.X + j * (_TileW + _SpaceW),
_Theme.SongMenuTileBoard.TileRect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, Rect.Z);
var tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect);
_Tiles.Add(tile);
}
}
_ScrollRect = new SRectF(0, 0, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH(), _Theme.SongMenuTileBoard.TileRect.Z);
_CoverBig = _Theme.SongMenuTileBoard.StaticCoverBig; _CoverBig = _Theme.SongMenuTileBoard.StaticCoverBig;
_TextBG = _Theme.SongMenuTileBoard.StaticTextBG; _TextBG = _Theme.SongMenuTileBoard.StaticTextBG;
_DuetIcon = _Theme.SongMenuTileBoard.StaticDuetIcon; _DuetIcon = _Theme.SongMenuTileBoard.StaticDuetIcon;
@@ -121,8 +134,42 @@ namespace VocaluxeLib.Menu.SongMenu
_Title = _Theme.SongMenuTileBoard.TextTitle; _Title = _Theme.SongMenuTileBoard.TextTitle;
_SongLength = _Theme.SongMenuTileBoard.TextSongLength; _SongLength = _Theme.SongMenuTileBoard.TextSongLength;
_PreviewId = -1; _PreviewNr = -1;
_Offset = 0; _InitTiles();
}
private void _InitTiles()
{
if (SmallView)
{
_NumH = _Theme.SongMenuTileBoard.NumHsmall;
_NumW = _Theme.SongMenuTileBoard.NumWsmall;
Rect = _Theme.SongMenuTileBoard.TileRectSmall;
}
else
{
_NumH = _Theme.SongMenuTileBoard.NumH;
_NumW = _Theme.SongMenuTileBoard.NumW;
Rect = _Theme.SongMenuTileBoard.TileRect;
}
_TileW = (int)((Rect.W - _SpaceW * (_NumW - 1)) / _NumW);
_TileH = (int)((Rect.H - _SpaceH * (_NumH - 1)) / _NumH);
_CoverBGTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBackgroundName, _PartyModeID);
_CoverBigBGTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBigBackgroundName, _PartyModeID);
_Tiles = new List<CStatic>();
for (int i = 0; i < _NumH; i++)
{
for (int j = 0; j < _NumW; j++)
{
var rect = new SRectF(Rect.X + j * (_TileW + _SpaceW), Rect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, Rect.Z);
var tile = new CStatic(_PartyModeID, _CoverBGTexture, _Color, rect);
_Tiles.Add(tile);
}
}
_ScrollRect = new SRectF(0, 0, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH(), Rect.Z);
} }
public override void Update(SScreenSongOptions songOptions) public override void Update(SScreenSongOptions songOptions)
@@ -130,21 +177,16 @@ namespace VocaluxeLib.Menu.SongMenu
base.Update(songOptions); base.Update(songOptions);
if (songOptions.Selection.RandomOnly) if (songOptions.Selection.RandomOnly)
{ _PreviewNr = _SelectionNr;
_Locked = _PreviewId;
_ActualSelection = _PreviewId;
for (int i = 0; i < _Tiles.Count; i++)
_Tiles[i].Selected = _Locked == i + _Offset;
}
if (_Length < 0 && CBase.Songs.IsInCategory() && CBase.Sound.GetLength(_PreviewSongStream) > 0) if (_Length < 0 && CBase.Songs.IsInCategory() && CBase.Sound.GetLength(_PreviewSongStream) > 0)
_UpdateLength(CBase.Songs.GetVisibleSong(_PreviewId)); _UpdateLength(CBase.Songs.GetVisibleSong(_PreviewNr));
} }
private void _UpdatePreview() private void _UpdatePreview()
{ {
//First hide everything so we just have to set what we actually want //First hide everything so we just have to set what we actually want
_CoverBig.Texture = _CoverBigTexture; _CoverBig.Texture = _CoverBigBGTexture;
_Artist.Text = String.Empty; _Artist.Text = String.Empty;
_Title.Text = String.Empty; _Title.Text = String.Empty;
_SongLength.Text = String.Empty; _SongLength.Text = String.Empty;
@@ -155,12 +197,12 @@ namespace VocaluxeLib.Menu.SongMenu
_Length = -1f; _Length = -1f;
//Check if nothing is selected (for preview) //Check if nothing is selected (for preview)
if (_PreviewId < 0) if (_PreviewNr < 0)
return; return;
if (CBase.Songs.IsInCategory()) if (CBase.Songs.IsInCategory())
{ {
CSong song = CBase.Songs.GetVisibleSong(_PreviewId); CSong song = CBase.Songs.GetVisibleSong(_PreviewNr);
//Check if we have a valid song (song still visible, index >=0 etc is checked by framework) //Check if we have a valid song (song still visible, index >=0 etc is checked by framework)
if (song == null) if (song == null)
{ {
@@ -185,7 +227,7 @@ namespace VocaluxeLib.Menu.SongMenu
} }
else else
{ {
CCategory category = CBase.Songs.GetCategory(_PreviewId); CCategory category = CBase.Songs.GetCategory(_PreviewNr);
//Check if we have a valid category //Check if we have a valid category
if (category == null) if (category == null)
return; return;
@@ -223,250 +265,198 @@ namespace VocaluxeLib.Menu.SongMenu
{ {
if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && CBase.Songs.GetNumCategories() > 0 && !CBase.Songs.IsInCategory()) if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && CBase.Songs.GetNumCategories() > 0 && !CBase.Songs.IsInCategory())
_EnterCategory(0); _EnterCategory(0);
_ActualSelection = -1; else
_Locked = -1; {
_UpdateList(0, true); if (CBase.Songs.IsInCategory())
//AfterCategoryChange(); SetSelectedSong(_SelectionNr < 0 ? 0 : _SelectionNr);
SetSelectedSong(_PreviewId); else
SetSelectedCategory(_SelectionNr < 0 ? 0 : _SelectionNr);
}
_PreviewNr = _SelectionNr;
_AfterCategoryChange(); _AfterCategoryChange();
if (_PreviewId < 0)
{
_PreviewId = 0;
_Locked = 0;
}
if (CBase.Songs.GetNumSongsVisible() == 0 && CBase.Songs.GetSearchFilter() != "")
{
_PreviewId = -1;
_Locked = -1;
}
} }
public override void HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions songOptions) public override bool HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions options)
{ {
base.HandleInput(ref keyEvent, songOptions); if (keyEvent.KeyPressed)
return false;
if (!keyEvent.KeyPressed) bool moveAllowed = !options.Selection.RandomOnly || (options.Selection.CategoryChangeAllowed && !CBase.Songs.IsInCategory());
bool catChangePossible = CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && options.Selection.CategoryChangeAllowed;
//If nothing selected set a reasonable default value
if (keyEvent.IsArrowKey() && moveAllowed && _SelectionNr < 0)
_SelectionNr = (_PreviewNr < 0) ? _Offset : _PreviewNr;
switch (keyEvent.Key)
{ {
if (!(keyEvent.Key == Keys.Left || keyEvent.Key == Keys.Right || keyEvent.Key == Keys.Up || keyEvent.Key == Keys.Down || case Keys.Enter:
keyEvent.Key == Keys.Escape || keyEvent.Key == Keys.Back || keyEvent.Key == Keys.Enter || if (CBase.Songs.IsInCategory())
keyEvent.Key == Keys.PageDown || keyEvent.Key == Keys.PageUp)) {
return; if (_SelectionNr >= 0 && _PreviewNr != _SelectionNr)
{
bool sel = _Tiles.Any(tile => tile.Selected); _PreviewNr = _SelectionNr;
keyEvent.Handled = true;
if ((_Locked == -1 || !sel) && }
(keyEvent.Key != Keys.Escape && keyEvent.Key != Keys.Back && keyEvent.Key != Keys.PageUp && keyEvent.Key != Keys.PageDown)) }
{
if (_PreviewId > -1)
_Locked = _PreviewId;
else else
{ {
_Locked = 0; _EnterCategory(_PreviewNr);
_ActualSelection = 0; keyEvent.Handled = true;
_PreviewId = 0;
_UpdateList(0, true);
} }
} break;
else
{ case Keys.Escape:
switch (keyEvent.Key) case Keys.Back:
if (CBase.Songs.IsInCategory() && catChangePossible)
{ {
case Keys.Enter: _LeaveCategory();
if (!CBase.Songs.IsInCategory()) keyEvent.Handled = true;
{
_EnterCategory(_PreviewId);
keyEvent.Handled = true;
}
else if (_ActualSelection > -1 && _PreviewId >= 0)
_Locked = _ActualSelection;
break;
case Keys.Escape:
case Keys.Back:
if (CBase.Songs.IsInCategory() && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && songOptions.Selection.CategoryChangeAllowed)
{
_ShowCategories();
keyEvent.Handled = true;
}
//else if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF)
//{
// CGraphics.FadeTo(EScreens.ScreenMain);
//}
break;
case Keys.PageUp:
if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && songOptions.Selection.CategoryChangeAllowed)
_PrevCategory();
break;
case Keys.PageDown:
if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && songOptions.Selection.CategoryChangeAllowed)
_NextCategory();
break;
case Keys.Left:
if (_Locked > 0 && (!songOptions.Selection.RandomOnly || songOptions.Selection.CategoryChangeAllowed && !CBase.Songs.IsInCategory()))
{
_Locked--;
_UpdateList();
}
break;
case Keys.Right:
if (!CBase.Songs.IsInCategory() && songOptions.Selection.CategoryChangeAllowed)
{
if (_Locked < CBase.Songs.GetNumCategories() - 1)
{
_Locked++;
_UpdateList();
}
}
else
{
if (CBase.Songs.IsInCategory() && _Locked < CBase.Songs.GetNumSongsVisible() - 1 && !songOptions.Selection.RandomOnly)
{
_Locked++;
_UpdateList();
}
}
break;
case Keys.Up:
if (keyEvent.ModShift && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && songOptions.Selection.CategoryChangeAllowed)
{
_PrevCategory();
break;
}
if (_Locked > _NumW - 1 &&
(!songOptions.Selection.RandomOnly || songOptions.Selection.CategoryChangeAllowed && !CBase.Songs.IsInCategory()))
{
_Locked -= _NumW;
_UpdateList();
}
break;
case Keys.Down:
if (keyEvent.ModShift && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && songOptions.Selection.CategoryChangeAllowed)
{
_NextCategory();
break;
}
if (!CBase.Songs.IsInCategory() && songOptions.Selection.CategoryChangeAllowed)
{
if (_Locked < CBase.Songs.GetNumCategories() - _NumW)
{
_Locked += _NumW;
_UpdateList();
}
}
else if (_Locked < CBase.Songs.GetNumSongsVisible() - _NumW && !songOptions.Selection.RandomOnly)
{
_Locked += _NumW;
_UpdateList();
}
break;
} }
} break;
if (!keyEvent.Handled) case Keys.PageUp:
{ if (catChangePossible)
_ActualSelection = _Locked; {
_PreviewId = _Locked; _PrevCategory();
keyEvent.Handled = true;
}
break;
for (int i = 0; i < _Tiles.Count; i++) case Keys.PageDown:
_Tiles[i].Selected = _Locked == i + _Offset; if (catChangePossible)
} {
_NextCategory();
keyEvent.Handled = true;
}
break;
case Keys.Left:
//Check for >0 so we do not allow selection of nothing (-1)
if (_SelectionNr > 0 && moveAllowed)
{
_SelectionNr--;
keyEvent.Handled = true;
}
break;
case Keys.Right:
if (moveAllowed)
{
_SelectionNr++;
keyEvent.Handled = true;
}
break;
case Keys.Up:
if (keyEvent.ModShift)
{
if (catChangePossible)
{
_PrevCategory();
keyEvent.Handled = true;
}
}
else if (_SelectionNr >= _NumW && moveAllowed)
{
_SelectionNr -= _NumW;
keyEvent.Handled = true;
}
break;
case Keys.Down:
if (keyEvent.ModShift)
{
if (catChangePossible)
{
_NextCategory();
keyEvent.Handled = true;
}
}
else if (moveAllowed)
{
_SelectionNr += _NumW;
keyEvent.Handled = true;
}
break;
} }
if (!CBase.Songs.IsInCategory())
_PreviewNr = _SelectionNr;
return keyEvent.Handled;
} }
public override void HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions) public override bool HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions)
{ {
base.HandleMouse(ref mouseEvent, songOptions);
int i = 0;
bool sel = false;
int lastselection = _ActualSelection;
if (!songOptions.Selection.RandomOnly || (!CBase.Songs.IsInCategory() && songOptions.Selection.CategoryChangeAllowed)) if (!songOptions.Selection.RandomOnly || (!CBase.Songs.IsInCategory() && songOptions.Selection.CategoryChangeAllowed))
{ {
if (mouseEvent.Wheel != 0 && CHelper.IsInBounds(_ScrollRect, mouseEvent))
_UpdateList(_Offset + _NumW * mouseEvent.Wheel);
int lastSelection = _SelectionNr;
int i = 0;
bool somethingSelected = false;
foreach (CStatic tile in _Tiles) foreach (CStatic tile in _Tiles)
{ {
if (tile.Texture != _CoverTexture && CHelper.IsInBounds(tile.Rect, mouseEvent) && !sel) if (tile.Texture != _CoverBGTexture && CHelper.IsInBounds(tile.Rect, mouseEvent))
{ {
if (mouseEvent.LB || !CBase.Songs.IsInCategory()) somethingSelected = true;
{ _SelectionNr = i + _Offset;
if (_PreviewId == i + _Offset) if (!CBase.Songs.IsInCategory())
_Locked = _PreviewId; _PreviewNr = i + _Offset;
else break;
{
_PreviewId = i + _Offset;
_Locked = -1;
}
}
tile.Selected = true;
_ActualSelection = i + _Offset;
sel = true;
} }
else
tile.Selected = false;
i++; i++;
} }
//Reset selection only if we moved out of the rect to avoid loosing it when selecting random songs
if (_MouseWasInRect && !somethingSelected)
_SelectionNr = -1;
if (mouseEvent.Sender == ESender.WiiMote && _SelectionNr != lastSelection && _SelectionNr != -1)
CBase.Controller.SetRumble(0.050f);
} }
else _MouseWasInRect = CHelper.IsInBounds(Rect, mouseEvent);
sel = true;
if (mouseEvent.Sender == ESender.WiiMote && _ActualSelection != lastselection && _ActualSelection != -1) if (mouseEvent.RB)
CBase.Controller.SetRumble(0.050f);
if (!sel)
_ActualSelection = -1;
if (mouseEvent.RB && (CBase.Songs.GetNumCategories() > 0) && CBase.Songs.IsInCategory() && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON &&
songOptions.Selection.CategoryChangeAllowed)
{ {
_ShowCategories(); if (CBase.Songs.IsInCategory() && CBase.Songs.GetNumCategories() > 0 && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON &&
mouseEvent.Handled = true; songOptions.Selection.CategoryChangeAllowed)
return;
}
if (mouseEvent.RB && CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && !songOptions.Selection.PartyMode)
CBase.Graphics.FadeTo(EScreens.ScreenMain);
else if (_PreviewId != -1 && mouseEvent.LB && CBase.Songs.GetCurrentCategoryIndex() != -1 && !songOptions.Selection.PartyMode)
{
if (CHelper.IsInBounds(_CoverBig.Rect, mouseEvent) || CHelper.IsInBounds(_TextBG.Rect, mouseEvent))
_Locked = _PreviewId;
}
else if (mouseEvent.LB && (!CBase.Songs.IsInCategory()))
{
foreach (CStatic tile in _Tiles)
{ {
if (tile.Texture != _CoverTexture && CHelper.IsInBounds(tile.Rect, mouseEvent)) _LeaveCategory();
{ return true;
_EnterCategory(_PreviewId); }
mouseEvent.Handled = true; if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && !songOptions.Selection.PartyMode)
return; {
} CBase.Graphics.FadeTo(EScreens.ScreenMain);
return true;
} }
} }
else if (mouseEvent.LB)
if (mouseEvent.Wheel != 0 && CHelper.IsInBounds(_ScrollRect, mouseEvent) && {
(!songOptions.Selection.RandomOnly || !CBase.Songs.IsInCategory() && songOptions.Selection.CategoryChangeAllowed)) if (_SelectionNr >= 0 && _MouseWasInRect)
_UpdateList(_Offset + _NumW * mouseEvent.Wheel); {
if (CBase.Songs.IsInCategory())
{
if (_PreviewNr == _SelectionNr)
return false;
_PreviewNr = _SelectionNr;
}
else
EnterSelectedCategory();
return true;
}
}
return false;
} }
public override void Draw() public override void Draw()
{ {
foreach (CStatic tile in _Tiles) foreach (CStatic tile in _Tiles)
{ {
if (tile.Selected && _Active) if (tile.Selected && Active)
tile.Draw(1.2f, tile.Rect.Z - 0.1f, EAspect.Crop); tile.Draw(EAspect.Crop, SelectedTileZoomFactor, -0.1f);
else else
{ {
EAspect aspect = (tile.Texture != _CoverTexture) ? EAspect.Crop : EAspect.Stretch; EAspect aspect = (tile.Texture != _CoverBGTexture) ? EAspect.Crop : EAspect.Stretch;
tile.Draw(1f, tile.Rect.Z, aspect); tile.Draw(aspect);
} }
} }
@@ -475,7 +465,7 @@ namespace VocaluxeLib.Menu.SongMenu
if (_Vidtex != null && _PreviewVideoStream != -1) if (_Vidtex != null && _PreviewVideoStream != -1)
{ {
if (_Vidtex.Color.A < 1) if (_Vidtex.Color.A < 1)
_CoverBig.Draw(1f, EAspect.Crop); _CoverBig.Draw(EAspect.Crop);
var bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H); var bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H);
RectangleF rect; RectangleF rect;
CHelper.SetRect(bounds, out rect, _Vidtex.OrigAspect, EAspect.Crop); CHelper.SetRect(bounds, out rect, _Vidtex.OrigAspect, EAspect.Crop);
@@ -486,7 +476,7 @@ namespace VocaluxeLib.Menu.SongMenu
CBase.Drawing.DrawTextureReflection(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds, _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight); CBase.Drawing.DrawTextureReflection(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds, _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight);
} }
else else
_CoverBig.Draw(1f, EAspect.Crop); _CoverBig.Draw(EAspect.Crop);
_Artist.Draw(); _Artist.Draw();
@@ -498,104 +488,32 @@ namespace VocaluxeLib.Menu.SongMenu
_MedleyTagIcon.Draw(); _MedleyTagIcon.Draw();
} }
public override int GetSelectedSong()
{
return _Locked;
}
public override bool IsMouseOverActualSelection(SMouseEvent mEvent)
{
CStatic selCov = GetSelectedSongCover();
if (selCov.Texture == null)
return false;
var rect = new SRectF(selCov.Rect.X - selCov.Rect.W * 0.2f, selCov.Rect.Y - selCov.Rect.H * 0.2f, selCov.Rect.W * 1.2f, selCov.Rect.H * 1.2f, selCov.Rect.Z);
return CHelper.IsInBounds(rect, mEvent);
}
public override CStatic GetSelectedSongCover() public override CStatic GetSelectedSongCover()
{ {
foreach (CStatic tile in _Tiles) return _Tiles.FirstOrDefault(tile => tile.Selected);
{
if (tile.Selected)
return new CStatic(tile);
}
return new CStatic(_PartyModeID);
} }
private void _SetSelectedTile(int itemNr) protected override void _EnterCategory(int categoryNr)
{ {
bool sel = _Tiles.Any(tile => tile.Selected); base._EnterCategory(categoryNr);
if (_Locked == -1 || !sel) _PreviewNr = 0;
{ SetSelectedSong(0);
if (_PreviewId > -1)
_Locked = _PreviewId;
else
{
_Locked = 0;
_ActualSelection = 0;
_PreviewId = 0;
_UpdateList(0, true);
}
}
foreach (CStatic tile in _Tiles)
tile.Selected = false;
_PreviewId = itemNr;
_Locked = itemNr;
_UpdateList(true);
_PreviewId = _Locked;
_ActualSelection = _Locked;
if (_Locked - _Offset >= 0)
_Tiles[_Locked - _Offset].Selected = true;
}
public override void SetSelectedSong(int visibleSongNr)
{
_PlaySong(visibleSongNr);
base.SetSelectedSong(visibleSongNr);
if (visibleSongNr >= 0 && visibleSongNr < CBase.Songs.GetNumSongsVisible())
_SetSelectedTile(visibleSongNr);
}
public override void SetSelectedCategory(int categoryNr)
{
base.SetSelectedCategory(categoryNr);
if (categoryNr >= 0 && categoryNr < CBase.Songs.GetNumCategories())
_SetSelectedTile(categoryNr);
}
protected override void _EnterCategory(int cat)
{
base._EnterCategory(cat);
_PreviewId = 0;
_Locked = -1;
_ActualSelection = 0;
_AfterCategoryChange(); _AfterCategoryChange();
_Locked = 0;
} }
protected override void _ShowCategories() protected override void _LeaveCategory()
{ {
base._ShowCategories(); base._LeaveCategory();
_PreviewId = 0; _PreviewNr = 0;
_Locked = -1; SetSelectedCategory(0);
_ActualSelection = 0;
_AfterCategoryChange(); _AfterCategoryChange();
_Locked = 0;
} }
private void _NextCategory() private void _NextCategory()
{ {
if (CBase.Songs.GetCurrentCategoryIndex() > -1) if (CBase.Songs.IsInCategory())
{ {
CBase.Songs.NextCategory(); CBase.Songs.NextCategory();
_EnterCategory(CBase.Songs.GetCurrentCategoryIndex()); _EnterCategory(CBase.Songs.GetCurrentCategoryIndex());
@@ -604,7 +522,7 @@ namespace VocaluxeLib.Menu.SongMenu
private void _PrevCategory() private void _PrevCategory()
{ {
if (CBase.Songs.GetCurrentCategoryIndex() > -1) if (CBase.Songs.IsInCategory())
{ {
CBase.Songs.PrevCategory(); CBase.Songs.PrevCategory();
_EnterCategory(CBase.Songs.GetCurrentCategoryIndex()); _EnterCategory(CBase.Songs.GetCurrentCategoryIndex());
@@ -613,24 +531,30 @@ namespace VocaluxeLib.Menu.SongMenu
private void _AfterCategoryChange() private void _AfterCategoryChange()
{ {
foreach (CStatic tile in _Tiles)
tile.Selected = false;
if (_ActualSelection >= 0 && _ActualSelection < _Tiles.Count)
_Tiles[_ActualSelection].Selected = true;
if ((_LastKnownNumSongs == CBase.Songs.GetNumSongsVisible()) && (_LastKnownCategory == CBase.Songs.GetCurrentCategoryIndex())) if ((_LastKnownNumSongs == CBase.Songs.GetNumSongsVisible()) && (_LastKnownCategory == CBase.Songs.GetCurrentCategoryIndex()))
return; return;
_LastKnownCategory = CBase.Songs.GetCurrentCategoryIndex(); _LastKnownCategory = CBase.Songs.GetCurrentCategoryIndex();
_LastKnownNumSongs = CBase.Songs.GetNumSongsVisible(); _LastKnownNumSongs = CBase.Songs.GetNumSongsVisible();
_UpdateList(0, true);
CBase.Songs.UpdateRandomSongList(); CBase.Songs.UpdateRandomSongList();
_UpdateList(true);
}
private int _GetOffsetForPosition(int index, int rowNum = 0)
{
return (index / _NumW) * _NumW - (_NumW * rowNum.Clamp(0, _NumH - 1));
} }
private void _UpdateList(bool force = false) private void _UpdateList(bool force = false)
{ {
_UpdateList((_Locked / _NumW) * _NumW - (_NumW * (_NumH - 2)), force); int offset;
if (_SelectionNr < _Offset && _SelectionNr >= 0)
offset = _GetOffsetForPosition(_SelectionNr);
else if (_SelectionNr >= _Offset + _NumW * _NumH)
offset = _GetOffsetForPosition(_SelectionNr, _NumH);
else
offset = _Offset;
_UpdateList(offset, force);
} }
private void _UpdateList(int offset, bool force = false) private void _UpdateList(int offset, bool force = false)
@@ -638,11 +562,7 @@ namespace VocaluxeLib.Menu.SongMenu
bool isInCategory = CBase.Songs.IsInCategory(); bool isInCategory = CBase.Songs.IsInCategory();
int itemCount = isInCategory ? CBase.Songs.GetNumSongsVisible() : CBase.Songs.GetNumCategories(); int itemCount = isInCategory ? CBase.Songs.GetNumSongsVisible() : CBase.Songs.GetNumCategories();
if (offset >= (itemCount / _NumW) * _NumW - (_NumW * (_NumH - 1))) offset = offset.Clamp(0, _GetOffsetForPosition(itemCount, _NumH - 1));
offset = (itemCount / _NumW) * _NumW - (_NumW * (_NumH - 1));
if (offset < 0)
offset = 0;
if (offset == _Offset && !force) if (offset == _Offset && !force)
return; return;
@@ -656,58 +576,13 @@ namespace VocaluxeLib.Menu.SongMenu
} }
else else
{ {
_Tiles[i].Texture = _CoverTexture; _Tiles[i].Texture = _CoverBGTexture;
_Tiles[i].Color = _Color; _Tiles[i].Color = _Color;
} }
} }
_Offset = offset; _Offset = offset;
} }
public override void SetSmallView(bool smallView)
{
base.SetSmallView(smallView);
_SmallView = smallView;
if (_SmallView)
{
_NumH = _Theme.SongMenuTileBoard.NumHsmall;
_NumW = _Theme.SongMenuTileBoard.NumWsmall;
Rect = _Theme.SongMenuTileBoard.TileRectSmall;
}
else
{
_NumH = _Theme.SongMenuTileBoard.NumH;
_NumW = _Theme.SongMenuTileBoard.NumW;
Rect = _Theme.SongMenuTileBoard.TileRect;
}
_TileW = (int)((Rect.W - _SpaceW * (_NumW - 1)) / _NumW);
_TileH = (int)((Rect.H - _SpaceH * (_NumH - 1)) / _NumH);
_CoverTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBackgroundName, _PartyModeID);
_CoverBigTexture = CBase.Theme.GetSkinTexture(_Theme.CoverBigBackgroundName, _PartyModeID);
_Tiles = new List<CStatic>();
for (int i = 0; i < _NumH; i++)
{
for (int j = 0; j < _NumW; j++)
{
var rect = new SRectF(Rect.X + j * (_TileW + _SpaceW), Rect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, Rect.Z);
var tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect);
_Tiles.Add(tile);
}
}
_ScrollRect = new SRectF(0, 0, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH(), Rect.Z);
_UpdateList(true);
}
public override bool IsSmallView()
{
return _SmallView;
}
public override void LoadTextures() public override void LoadTextures()
{ {
base.LoadTextures(); base.LoadTextures();
+15 -19
View File
@@ -25,34 +25,30 @@ namespace VocaluxeLib.Menu.SongMenu
void OnShow(); void OnShow();
void OnHide(); void OnHide();
void HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions songOptions); bool HandleInput(ref SKeyEvent keyEvent, SScreenSongOptions options);
void HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions); bool HandleMouse(ref SMouseEvent mouseEvent, SScreenSongOptions songOptions);
void Draw(); void Draw();
int GetSelectedSong(); // The selected song is the song, where the mouse is hovering over
// The number is refering to the index in the visible songs array
int GetPreviewSongNr();
int GetSelectedSongNr();
CStatic GetSelectedSongCover(); CStatic GetSelectedSongCover();
void SetSelectedSong(int visibleSongNr); void SetSelectedSong(int visibleSongNr);
bool IsMouseOverSelectedSong(SMouseEvent mEvent);
bool IsActive(); // Same for categories
void SetActive(bool active);
bool IsMouseOverActualSelection(SMouseEvent mEvent);
int GetSelectedCategory(); int GetSelectedCategory();
void SetSelectedCategory(int categoryNr); void SetSelectedCategory(int categoryNr);
int GetActualSelection(); bool EnterSelectedCategory();
bool EnterCurrentCategory(); // The song that is currently playing (set e.g. by clicking on a song)
int GetPreviewSong();
bool IsSelected();
void SetSelected(bool selected);
bool IsVisible();
void SetVisible(bool visible);
bool IsSmallView();
void SetSmallView(bool smallView);
SRectF Rect { get; } SRectF Rect { get; }
bool Active { get; set; }
bool Selected { get; set; }
bool Visible { get; set; }
bool SmallView { get; set; }
} }
} }
+1 -1
View File
@@ -44,7 +44,7 @@ namespace VocaluxeLib.PartyModes
public struct SSelectionOptions public struct SSelectionOptions
{ {
/// <summary> /// <summary>
/// If != -1, the SongMenu should set the song selection on the provided song index (visible index) if possible /// If != -1, the SongMenu should set the song selection to the provided song index (visible index) if possible
/// </summary> /// </summary>
public int SongIndex; public int SongIndex;
+1 -12
View File
@@ -120,20 +120,9 @@ namespace VocaluxeLib.Profile
if (filename == "") if (filename == "")
filename = "1"; filename = "1";
int i = 0; FileName = CHelper.GetUniqueFileName(FilePath, filename + ".xml", false);
while (File.Exists(Path.Combine(FilePath, filename + ".xml")))
{
i++;
if (!File.Exists(Path.Combine(FilePath, filename + i + ".xml")))
filename += i;
}
FileName = filename + ".xml";
} }
if (FileName == String.Empty)
return;
XmlWriter writer; XmlWriter writer;
try try
{ {
+9
View File
@@ -132,6 +132,15 @@ namespace VocaluxeLib
if (ctrl) if (ctrl)
Mod |= EModifier.Ctrl; Mod |= EModifier.Ctrl;
} }
/// <summary>
/// Returns true if this is about an arrow key (left, right, up down)
/// </summary>
/// <returns>True if Key is an arrow key</returns>
public bool IsArrowKey()
{
return Key == Keys.Left || Key == Keys.Right || Key == Keys.Up || Key == Keys.Down;
}
} }
public struct SMouseEvent public struct SMouseEvent
+1 -1
View File
@@ -55,7 +55,7 @@ namespace WebserverInitalConfig
ProcessStartInfo proc = new ProcessStartInfo ProcessStartInfo proc = new ProcessStartInfo
{ {
UseShellExecute = true, UseShellExecute = true,
WorkingDirectory = Environment.CurrentDirectory, WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory,
FileName = Process.GetCurrentProcess().MainModule.FileName, FileName = Process.GetCurrentProcess().MainModule.FileName,
Arguments = args[0] + " " + args[1], Arguments = args[0] + " " + args[1],
Verb = "runas", Verb = "runas",