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