diff --git a/Output/Themes/Ambient/Close.png b/Output/Themes/Ambient/Close.png
new file mode 100644
index 00000000..b8b8a994
Binary files /dev/null and b/Output/Themes/Ambient/Close.png differ
diff --git a/Output/Themes/Ambient/Delete.png b/Output/Themes/Ambient/Delete.png
new file mode 100644
index 00000000..46a686ad
Binary files /dev/null and b/Output/Themes/Ambient/Delete.png differ
diff --git a/Output/Themes/Ambient/Save.png b/Output/Themes/Ambient/Save.png
new file mode 100644
index 00000000..1afc3113
Binary files /dev/null and b/Output/Themes/Ambient/Save.png differ
diff --git a/Output/Themes/Ambient/Screens/ScreenSong.xml b/Output/Themes/Ambient/Screens/ScreenSong.xml
index 4abd92ab..24f56698 100644
--- a/Output/Themes/Ambient/Screens/ScreenSong.xml
+++ b/Output/Themes/Ambient/Screens/ScreenSong.xml
@@ -72,6 +72,38 @@
26
+
+
+ Menu
+
+ 970
+ 40
+ -1,00
+ 295
+ 40
+
+
+ StaticColor
+
+
+
+
+
+
+ Menu
+
+ 970
+ 550
+ -1,00
+ 295
+ 40
+
+
+ StaticColor
+
+
+
+
Button
@@ -126,7 +158,7 @@
Button
40
- 180
+ 235
-2,11
360
40
@@ -173,7 +205,7 @@
Button
40
- 225
+ 290
-2,11
360
40
@@ -213,6 +245,194 @@
+
+
+ CloseIcon
+
+ CloseIcon
+
+ 1215
+ 42
+ -1,01
+ 35
+ 35
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 180
+ 5
+
+ 30
+
+ 350
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+
+
+
+
+ SingIcon
+
+ SingIcon
+
+ 975
+ 553
+ -1,01
+ 35
+ 35
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 180
+ 5
+
+ 30
+
+ 350
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+
+
+
+
+ SaveIcon
+
+ SaveIcon
+
+ 1175
+ 553
+ -1,01
+ 35
+ 35
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 180
+ 5
+
+ 30
+
+ 350
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+
+
+
+
+ DeleteIcon
+
+ DeleteIcon
+
+ 1215
+ 553
+ -1,01
+ 35
+ 35
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 180
+ 5
+
+ 30
+
+ 350
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+
+
200
@@ -367,6 +587,36 @@
+
+
+ 975
+ 45
+
+ -1,01
+
+ 30
+
+ 220
+
+
+ StaticColor
+
+
+ TextSColor
+
+ Left
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
Button
@@ -432,6 +682,71 @@
1
+
+
+ Button
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ 40
+ 190
+ -2,11
+ 360
+ 40
+
+ 45
+ 195
+ -2,12
+ 30
+ 30
+
+ 365
+ 195
+ -2,12
+ 30
+ 30
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ SelectSlideHColor
+
+
+ ArrowColor
+
+
+ ArrowSColor
+
+
+ TextColor
+
+
+ TextSColor
+
+ 30
+
+ 280
+
+ Outline
+
+ Bold
+
+ 1
+
CoverTile
@@ -671,5 +986,188 @@
+
+ 970
+ 80
+ 295
+ 460
+ -1,00
+ 50,00
+ CoverTile
+ CoverTile
+ StaticColorAlpha
+ StaticColor
+
+
+ 54
+ 4
+
+ -1,01
+
+ 24
+
+ 235
+
+
+ StaticColor
+
+
+ TextSColor
+
+ Left
+
+ Top
+
+
+
+ Outline
+
+ %a - %t
+
+
+
+
+
+
+ 222
+ 456
+
+ -1,01
+
+ 38
+
+ 340
+
+
+ StaticColor
+
+
+ TextSColor
+
+ Center
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+ 222
+ 456
+
+ -1,01
+
+ 38
+
+ 340
+
+
+ StaticColor
+
+
+ TextSColor
+
+ Center
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+
+
+ 4
+ 2
+ -1,00
+ 46
+ 46
+
+
+ Visible
+
+
+
+
+
+
+ Button
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ 54
+ 28
+ -1,01
+ 235
+ 24
+
+ 54
+ 30
+ 0,00
+ 20
+ 20
+
+ 110
+ 30
+ 0,00
+ 20
+ 20
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ SelectSlideHColor
+
+
+ ArrowColor
+
+
+ ArrowSColor
+
+
+ TextColor
+
+
+ TextSColor
+
+ 24,00
+
+ 230,00
+
+ Outline
+
+ Bold
+
+ 1
+
+
diff --git a/Output/Themes/Ambient/Sing.png b/Output/Themes/Ambient/Sing.png
new file mode 100644
index 00000000..c7daf961
Binary files /dev/null and b/Output/Themes/Ambient/Sing.png differ
diff --git a/Output/Themes/Ambient/Skin Blue.xml b/Output/Themes/Ambient/Skin Blue.xml
index 50a16aa8..3cb2b0db 100644
--- a/Output/Themes/Ambient/Skin Blue.xml
+++ b/Output/Themes/Ambient/Skin Blue.xml
@@ -166,6 +166,12 @@
0,969
1,000
+
+ 0,675
+ 0,890
+ 0,969
+ 0,500
+
0,675
0,890
@@ -315,6 +321,10 @@
PauseIcon.png
RepeatIcon.png
SongMenuBG.png
+ Close.png
+ Delete.png
+ Save.png
+ Sing.png
[Blue]BG_Video.mp4
diff --git a/Output/Themes/Ambient/Skin Green.xml b/Output/Themes/Ambient/Skin Green.xml
index 7aefeb34..663faf5c 100644
--- a/Output/Themes/Ambient/Skin Green.xml
+++ b/Output/Themes/Ambient/Skin Green.xml
@@ -130,6 +130,12 @@
0,674
1,000
+
+ 0,709
+ 0,968
+ 0,674
+ 0,500
+
0,709
0,968
@@ -315,6 +321,10 @@
PauseIcon.png
RepeatIcon.png
SongMenuBG.png
+ Close.png
+ Delete.png
+ Save.png
+ Sing.png
[Green]BG_Video.mp4
diff --git a/Output/Themes/Ambient/Skin Red.xml b/Output/Themes/Ambient/Skin Red.xml
index d7f5ecf2..9d3f1f8d 100644
--- a/Output/Themes/Ambient/Skin Red.xml
+++ b/Output/Themes/Ambient/Skin Red.xml
@@ -130,6 +130,12 @@
0,674
1,000
+
+ 0,968
+ 0,674
+ 0,674
+ 0,500
+
0,968
0,674
@@ -315,6 +321,10 @@
PauseIcon.png
RepeatIcon.png
SongMenuBG.png
+ Close.png
+ Delete.png
+ Save.png
+ Sing.png
[Red]BG_Video.mp4
diff --git a/Output/Themes/Ambient/Skin Yellow.xml b/Output/Themes/Ambient/Skin Yellow.xml
index d7366abc..fcb4664a 100644
--- a/Output/Themes/Ambient/Skin Yellow.xml
+++ b/Output/Themes/Ambient/Skin Yellow.xml
@@ -130,6 +130,12 @@
0,674
1,000
+
+ 0,968
+ 0,956
+ 0,674
+ 0,500
+
0,968
0,956
@@ -315,6 +321,10 @@
PauseIcon.png
RepeatIcon.png
SongMenuBG.png
+ Close.png
+ Delete.png
+ Save.png
+ Sing.png
[Yellow]BG_Video.mp4
diff --git a/Output/Themes/Changelog/Changelog_ScreenSong.txt b/Output/Themes/Changelog/Changelog_ScreenSong.txt
index 1303abb5..e78df639 100644
--- a/Output/Themes/Changelog/Changelog_ScreenSong.txt
+++ b/Output/Themes/Changelog/Changelog_ScreenSong.txt
@@ -1,5 +1,16 @@
ScreenSong
+++++++++++
+Version 3:
+
+Add:
+, ,
+,
+, , , , , ,
+,
+and
+ as a new Screen-Element. For details, look at ScreenSong.xml
+
++++++++++
Version 2:
diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs
index a720107a..8ab1dfe5 100644
--- a/Vocaluxe/Base/CPlaylists.cs
+++ b/Vocaluxe/Base/CPlaylists.cs
@@ -21,6 +21,19 @@ namespace Vocaluxe.Base
get { return _Playlists.ToArray(); }
}
+ public static string[] PlaylistNames
+ {
+ get
+ {
+ List names = new List();
+ for (int i = 0; i < _Playlists.Count; i++)
+ {
+ names.Add(_Playlists[i].PlaylistName);
+ }
+ return names.ToArray();
+ }
+ }
+
public static int NumPlaylists
{
get { return _Playlists.Count; }
@@ -40,6 +53,7 @@ namespace Vocaluxe.Base
foreach (string file in files)
{
CPlaylist playlist = new CPlaylist(file);
+ _Playlists.Add(playlist);
}
SortPlaylistsByName();
@@ -75,6 +89,21 @@ namespace Vocaluxe.Base
}
}
+ public static void SavePlaylist(int PlaylistID)
+ {
+ if (PlaylistID < 0 || PlaylistID >= _Playlists.Count)
+ return;
+ _Playlists[PlaylistID].SavePlaylist();
+ }
+
+ public static int NewPlaylist()
+ {
+ CPlaylist pl = new CPlaylist();
+ pl.PlaylistName = "New Playlist";
+ _Playlists.Add(pl);
+ return (_Playlists.Count - 1);
+ }
+
#endregion
}
}
diff --git a/Vocaluxe/Lib/Playlist/CPlaylist.cs b/Vocaluxe/Lib/Playlist/CPlaylist.cs
index a87ee61a..86e5e320 100644
--- a/Vocaluxe/Lib/Playlist/CPlaylist.cs
+++ b/Vocaluxe/Lib/Playlist/CPlaylist.cs
@@ -36,17 +36,19 @@ namespace Vocaluxe.Lib.Playlist
public string PlaylistName;
public string PlaylistFile;
- public List Songs;
+ public List Songs = new List();
public CPlaylist()
{
Init();
+ PlaylistName = string.Empty;
+ PlaylistFile = string.Empty;
}
public CPlaylist(string file)
{
Init();
- PlaylistName = file;
+ PlaylistFile = file;
LoadPlaylist();
}
@@ -58,29 +60,32 @@ namespace Vocaluxe.Lib.Playlist
}
- private void SavePlaylist()
+ public void SavePlaylist()
{
- string filename = string.Empty;
- foreach (char chr in PlaylistName)
+ if (PlaylistFile == string.Empty)
{
- if (char.IsLetter(chr))
- filename += chr.ToString();
- }
-
- if (filename == String.Empty)
- filename = "1";
-
- int i = 0;
- while (File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + ".xml")))
- {
- i++;
- if (!File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + i + ".xml")))
+ string filename = string.Empty;
+ foreach (char chr in PlaylistName)
{
- filename += i;
+ if (char.IsLetter(chr))
+ filename += chr.ToString();
}
- }
- PlaylistFile = Path.Combine(CSettings.sFolderPlaylists, filename + ".xml");
+ if (filename == String.Empty)
+ filename = "1";
+
+ int i = 0;
+ while (File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + ".xml")))
+ {
+ i++;
+ if (!File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + i + ".xml")))
+ {
+ filename += i;
+ }
+ }
+
+ PlaylistFile = Path.Combine(CSettings.sFolderPlaylists, filename + ".xml");
+ }
XmlWriter writer;
try
@@ -107,7 +112,7 @@ namespace Vocaluxe.Lib.Playlist
writer.WriteEndElement();
writer.WriteStartElement("Songs");
- for (i = 0; i < Songs.Count; i++)
+ for (int i = 0; i < Songs.Count; i++)
{
CSong song = CSongs.GetSong(Songs[i].SongID);
if (song != null)
@@ -202,5 +207,26 @@ namespace Vocaluxe.Lib.Playlist
}
}
}
+
+ public void AddSong(int SongID)
+ {
+ CPlaylistSong song = new CPlaylistSong();
+ song.SongID = SongID;
+ if (CSongs.GetSong(SongID).IsDuet)
+ song.GameMode = EGameMode.TR_GAMEMODE_DUET;
+ else
+ song.GameMode = EGameMode.TR_GAMEMODE_NORMAL;
+
+ Songs.Add(song);
+ }
+
+ public void AddSong(int SongID, EGameMode gm)
+ {
+ CPlaylistSong song = new CPlaylistSong();
+ song.SongID = SongID;
+ song.GameMode = gm;
+
+ Songs.Add(song);
+ }
}
}
diff --git a/Vocaluxe/Lib/Song/CSong.cs b/Vocaluxe/Lib/Song/CSong.cs
index 120efbf6..2cb63c36 100644
--- a/Vocaluxe/Lib/Song/CSong.cs
+++ b/Vocaluxe/Lib/Song/CSong.cs
@@ -7,6 +7,7 @@ using System.Text.RegularExpressions;
using Vocaluxe.Base;
using Vocaluxe.Lib.Draw;
using Vocaluxe.Menu;
+using Vocaluxe.GameModes;
namespace Vocaluxe.Lib.Song
{
@@ -148,6 +149,23 @@ namespace Vocaluxe.Lib.Song
// Notes
public CNotes Notes = new CNotes();
+ public EGameMode[] AvailableGameModes
+ {
+ get
+ {
+ List gms = new List();
+ if (IsDuet)
+ gms.Add(EGameMode.TR_GAMEMODE_DUET);
+ else
+ gms.Add(EGameMode.TR_GAMEMODE_NORMAL);
+ if (Medley.Source != EMedleySource.None)
+ gms.Add(EGameMode.TR_GAMEMODE_MEDLEY);
+ gms.Add(EGameMode.TR_GAMEMODE_SHORTSONG);
+
+ return gms.ToArray();
+ }
+ }
+
public CSong()
{
}
diff --git a/Vocaluxe/Menu/CInteraction.cs b/Vocaluxe/Menu/CInteraction.cs
index 618bc051..8f7afe8d 100644
--- a/Vocaluxe/Menu/CInteraction.cs
+++ b/Vocaluxe/Menu/CInteraction.cs
@@ -14,7 +14,8 @@ namespace Vocaluxe.Menu
TSongMenu,
TLyric,
TSingNote,
- TNameSelection
+ TNameSelection,
+ TPlaylist
}
class CInteraction
diff --git a/Vocaluxe/Menu/CMenu.cs b/Vocaluxe/Menu/CMenu.cs
index 01432976..e27a7c51 100644
--- a/Vocaluxe/Menu/CMenu.cs
+++ b/Vocaluxe/Menu/CMenu.cs
@@ -36,6 +36,7 @@ namespace Vocaluxe.Menu
private List _Lyrics;
private List _SingNotes;
private List _NameSelections;
+ private List _Playlists;
private Hashtable _htBackgrounds;
private Hashtable _htStatics;
@@ -46,6 +47,7 @@ namespace Vocaluxe.Menu
private Hashtable _htSelectSlides;
private Hashtable _htSingNotes;
private Hashtable _htNameSelections;
+ private Hashtable _htPlaylists;
private int _PrevMouseX;
@@ -67,6 +69,7 @@ namespace Vocaluxe.Menu
protected string[] _ThemeSelectSlides;
protected string[] _ThemeSingNotes;
protected string[] _ThemeNameSelections;
+ protected string[] _ThemePlaylists;
protected SRectF _ScreenArea;
@@ -99,6 +102,7 @@ namespace Vocaluxe.Menu
_Lyrics = new List();
_SingNotes = new List();
_NameSelections = new List();
+ _Playlists = new List();
_htBackgrounds = new Hashtable();
_htStatics = new Hashtable();
@@ -109,6 +113,7 @@ namespace Vocaluxe.Menu
_htSelectSlides = new Hashtable();
_htSingNotes = new Hashtable();
_htNameSelections = new Hashtable();
+ _htPlaylists = new Hashtable();
_PrevMouseX = 0;
_PrevMouseY = 0;
@@ -129,6 +134,7 @@ namespace Vocaluxe.Menu
_ThemeSelectSlides = null;
_ThemeSingNotes = null;
_ThemeNameSelections = null;
+ _ThemePlaylists = null;
}
#region ThemeHandler
@@ -311,6 +317,22 @@ namespace Vocaluxe.Menu
}
}
}
+
+ if (_ThemePlaylists != null)
+ {
+ for (int i = 0; i < _ThemePlaylists.Length; i++)
+ {
+ CPlaylist pls = new CPlaylist();
+ if (pls.LoadTheme("//root/" + _ThemeName, _ThemePlaylists[i], navigator, SkinIndex))
+ {
+ _htPlaylists.Add(_ThemePlaylists[i], AddPlaylist(pls));
+ }
+ else
+ {
+ CLog.LogError("Can't load Playlist \"" + _ThemePlaylists[i] + "\" in screen " + _ThemeName);
+ }
+ }
+ }
}
else
{
@@ -386,6 +408,12 @@ namespace Vocaluxe.Menu
_NameSelections[i].SaveTheme(writer);
}
+ //Playlists
+ for (int i = 0; i < _Playlists.Count; i++)
+ {
+ _Playlists[i].SaveTheme(writer);
+ }
+
writer.WriteEndElement();
// End of File
@@ -442,6 +470,11 @@ namespace Vocaluxe.Menu
{
ns.ReloadTextures();
}
+
+ foreach (CPlaylist pls in _Playlists)
+ {
+ pls.ReloadTextures();
+ }
}
public virtual void UnloadTextures()
@@ -490,7 +523,10 @@ namespace Vocaluxe.Menu
{
ns.UnloadTextures();
}
-
+ foreach (CPlaylist pls in _Playlists)
+ {
+ pls.UnloadTextures();
+ }
}
@@ -547,6 +583,11 @@ namespace Vocaluxe.Menu
{
return _NameSelections;
}
+
+ public List GetPlaylists()
+ {
+ return _Playlists;
+ }
#endregion GetLists
#region ElementHandler
@@ -622,6 +663,14 @@ namespace Vocaluxe.Menu
return _NameSelections.ToArray();
}
}
+
+ public CPlaylist[] Playlists
+ {
+ get
+ {
+ return _Playlists.ToArray();
+ }
+ }
#endregion Get Arrays
#region Hashtables
@@ -741,6 +790,19 @@ namespace Vocaluxe.Menu
throw;
}
}
+
+ public int htPlaylists(string key)
+ {
+ try
+ {
+ return (int)_htPlaylists[key];
+ }
+ catch (Exception)
+ {
+ CLog.LogError("Can't find Playlist Element \"" + key + "\" in Screen " + _ThemeName);
+ throw;
+ }
+ }
#endregion Hashtables
#endregion ElementHandler
@@ -999,7 +1061,8 @@ namespace Vocaluxe.Menu
_Interactions[i].Type == EType.TStatic ||
_Interactions[i].Type == EType.TNameSelection ||
_Interactions[i].Type == EType.TText ||
- _Interactions[i].Type == EType.TSongMenu))
+ _Interactions[i].Type == EType.TSongMenu ||
+ _Interactions[i].Type == EType.TPlaylist))
{
ZSort zs = new ZSort();
zs.ID = i;
@@ -1085,6 +1148,13 @@ namespace Vocaluxe.Menu
_AddInteraction(_NameSelections.Count - 1, EType.TNameSelection);
return _NameSelections.Count - 1;
}
+
+ public int AddPlaylist(CPlaylist pls)
+ {
+ _Playlists.Add(pls);
+ _AddInteraction(_Playlists.Count - 1, EType.TPlaylist);
+ return _Playlists.Count - 1;
+ }
#endregion Elements
#region InteractionHandling
@@ -1233,6 +1303,10 @@ namespace Vocaluxe.Menu
if (CHelper.IsInBounds(_NameSelections[interact.Num].Rect, x, y))
return true;
break;
+ case EType.TPlaylist:
+ if (CHelper.IsInBounds(_Playlists[interact.Num].Rect, x, y))
+ return true;
+ break;
}
return false;
}
@@ -1255,6 +1329,8 @@ namespace Vocaluxe.Menu
return _Lyrics[interact.Num].Rect.Z;
case EType.TNameSelection:
return _NameSelections[interact.Num].Rect.Z;
+ case EType.TPlaylist:
+ return _Playlists[interact.Num].Rect.Z;
}
return CSettings.zFar;
}
@@ -1283,6 +1359,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
return _NameSelections[_Interactions[interaction].Num].Rect.Z;
+
+ case EType.TPlaylist:
+ return _Playlists[_Interactions[interaction].Num].Rect.Z;
}
return CSettings.zFar;
@@ -1605,6 +1684,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
_NameSelections[_Interactions[_Selection].Num].Selected = true;
break;
+ case EType.TPlaylist:
+ //_Playlists[_Interactions[_Selection].Num].Selected = true;
+ break;
}
}
@@ -1633,6 +1715,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
_NameSelections[_Interactions[_Selection].Num].Selected = false;
break;
+ case EType.TPlaylist:
+ //_Playlists[_Interactions[_Selection].Num].Selected = true;
+ break;
}
}
@@ -1664,6 +1749,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
//_NameSelections[_Interactions[selection].Num].Selected = true;
break;
+ case EType.TPlaylist:
+ //_Playlists[_Interactions[_Selection].Num].Selected = true;
+ break;
}
}
@@ -1695,6 +1783,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
//_NameSelections[_Interactions[selection].Num].Selected = false;
break;
+ case EType.TPlaylist:
+ //_Playlists[_Interactions[_Selection].Num].Selected = true;
+ break;
}
}
@@ -1744,6 +1835,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
return _NameSelections[_Interactions[interaction].Num].Visible;
+
+ case EType.TPlaylist:
+ return _Playlists[_Interactions[interaction].Num].Visible;
}
return false;
@@ -1774,6 +1868,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
return _NameSelections[_Interactions[interaction].Num].Rect;
+
+ case EType.TPlaylist:
+ return _Playlists[_Interactions[interaction].Num].Rect;
}
return Result;
@@ -1815,6 +1912,10 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
_NameSelections[_Interactions[interaction].Num].Draw();
break;
+
+ case EType.TPlaylist:
+ _Playlists[_Interactions[interaction].Num].Draw();
+ break;
//TODO:
//case EType.TLyric:
@@ -1859,6 +1960,10 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
_NameSelections[_Interactions[_Selection].Num].MoveElement(stepX, stepY);
break;
+
+ case EType.TPlaylist:
+ _Playlists[_Interactions[_Selection].Num].MoveElement(stepX, stepY);
+ break;
}
}
}
@@ -1896,6 +2001,10 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
_NameSelections[_Interactions[_Selection].Num].ResizeElement(stepW, stepH);
break;
+
+ case EType.TPlaylist:
+ _Playlists[_Interactions[_Selection].Num].ResizeElement(stepW, stepH);
+ break;
}
}
}
diff --git a/Vocaluxe/Menu/CSelectSlide.cs b/Vocaluxe/Menu/CSelectSlide.cs
index 099ef2ea..126ec839 100644
--- a/Vocaluxe/Menu/CSelectSlide.cs
+++ b/Vocaluxe/Menu/CSelectSlide.cs
@@ -112,6 +112,14 @@ namespace Vocaluxe.Menu
}
}
+ public int NumValues
+ {
+ get
+ {
+ return _ValueNames.Count;
+ }
+ }
+
private int _NumVisible = -1;
public int NumVisible
{
diff --git a/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs b/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs
index e4730e8e..dc917994 100644
--- a/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs
+++ b/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs
@@ -383,10 +383,10 @@ namespace Vocaluxe.Menu.SongMenu
writer.WriteElementString("SpaceH", _Theme.songMenuTileBoard.spaceH.ToString("#0.00"));
writer.WriteComment(": Number of tiles horizontal in small-mode");
- writer.WriteElementString("NumW", _Theme.songMenuTileBoard.numW.ToString());
+ writer.WriteElementString("NumWsmall", _Theme.songMenuTileBoard.numW.ToString());
writer.WriteComment(": Number of tiles vertical in small-mode");
- writer.WriteElementString("NumH", _Theme.songMenuTileBoard.numH.ToString());
+ writer.WriteElementString("NumHsmall", _Theme.songMenuTileBoard.numH.ToString());
writer.WriteComment(", , , , : SongMenu position, width and height");
writer.WriteElementString("TileRectX", _Theme.songMenuTileBoard.TileRect.X.ToString("#0"));
diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs
index e520d0ee..9b18ab2f 100644
--- a/Vocaluxe/Screens/CScreenSong.cs
+++ b/Vocaluxe/Screens/CScreenSong.cs
@@ -25,21 +25,31 @@ namespace Vocaluxe.Screens
private const string TextSearchBarTitle = "TextSearchBarTitle";
private const string TextSearchBar = "TextSearchBar";
private const string TextOptionsTitle = "TextOptionsTitle";
+ private const string TextPlaylistHeader = "TextPlaylistHeader";
private const string ButtonOptionsSing = "ButtonOptionsSing";
private const string ButtonOptionsPlaylist = "ButtonOptionsPlaylist";
private const string ButtonOptionsClose = "ButtonOptionsClose";
+ private const string ButtonPlaylistClose = "ButtonPlaylistClose";
+ private const string ButtonPlaylistSing = "ButtonPlaylistSing";
+ private const string ButtonPlaylistSave = "ButtonPlaylistSave";
+ private const string ButtonPlaylistDelete = "ButtonPlaylistDelete";
private const string SelectSlideOptionsMode = "SelectSlideOptionsMode";
+ private const string SelectSlideOptionsPlaylist = "SelectSlideOptionsPlaylist";
private const string StaticSearchBar = "StaticSearchBar";
private const string StaticOptionsBG = "StaticOptionsBG";
+ private const string StaticPlaylistHeader = "StaticPlaylistHeader";
+ private const string StaticPlaylistFooter = "StaticPlaylistFooter";
private const string SongMenu = "SongMenu";
+ private const string Playlist = "Playlist";
private string _SearchText = String.Empty;
private bool _SearchActive = false;
private bool _SongOptionsActive = false;
+ private int _OpenedPlaylist = -1;
private List _AvailableGameModes;
public CScreenSong()
@@ -55,22 +65,32 @@ namespace Vocaluxe.Screens
_ThemeName = "ScreenSong";
_ScreenVersion = ScreenVersion;
- _ThemeStatics = new string[] { StaticSearchBar, StaticOptionsBG };
- _ThemeTexts = new string[] { TextCategory, TextSelection, TextSearchBarTitle, TextSearchBar, TextOptionsTitle };
- _ThemeButtons = new string[] { ButtonOptionsClose, ButtonOptionsPlaylist, ButtonOptionsSing };
- _ThemeSelectSlides = new string[] { SelectSlideOptionsMode };
+ _ThemeStatics = new string[] { StaticSearchBar, StaticOptionsBG, StaticPlaylistHeader, StaticPlaylistFooter };
+ _ThemeTexts = new string[] { TextCategory, TextSelection, TextSearchBarTitle, TextSearchBar, TextOptionsTitle, TextPlaylistHeader };
+ _ThemeButtons = new string[] { ButtonOptionsClose, ButtonOptionsPlaylist, ButtonOptionsSing, ButtonPlaylistClose, ButtonPlaylistSing, ButtonPlaylistSave, ButtonPlaylistDelete };
+ _ThemeSelectSlides = new string[] { SelectSlideOptionsMode, SelectSlideOptionsPlaylist };
_ThemeSongMenus = new string[] { SongMenu };
+ _ThemePlaylists = new string[] { Playlist };
}
public override void LoadTheme()
{
base.LoadTheme();
SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Visible = false;
+ SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].Visible = false;
Buttons[htButtons(ButtonOptionsClose)].Visible = false;
Buttons[htButtons(ButtonOptionsSing)].Visible = false;
Buttons[htButtons(ButtonOptionsPlaylist)].Visible = false;
+ Buttons[htButtons(ButtonPlaylistClose)].Visible = false;
+ Buttons[htButtons(ButtonPlaylistSing)].Visible = false;
+ Buttons[htButtons(ButtonPlaylistSave)].Visible = false;
+ Buttons[htButtons(ButtonPlaylistDelete)].Visible = false;
Texts[htTexts(TextOptionsTitle)].Visible = false;
+ Texts[htTexts(TextPlaylistHeader)].Visible = false;
Statics[htStatics(StaticOptionsBG)].Visible = false;
+ Statics[htStatics(StaticPlaylistHeader)].Visible = false;
+ Statics[htStatics(StaticPlaylistFooter)].Visible = false;
+ Playlists[htPlaylists(Playlist)].Visible = false;
}
public override bool HandleInput(KeyEvent KeyEvent)
@@ -185,14 +205,40 @@ namespace Vocaluxe.Screens
{
case Keys.Enter:
if (Buttons[htButtons(ButtonOptionsClose)].Selected)
+ {
ToggleSongOptions();
+ }
else if (Buttons[htButtons(ButtonOptionsSing)].Selected)
{
ToggleSongOptions();
StartSong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong());
}
else if (Buttons[htButtons(ButtonOptionsPlaylist)].Selected)
+ {
+ //Open a playlist and add song
+ if (_OpenedPlaylist != (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].Selection - 1))
+ {
+ _OpenedPlaylist = SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].Selection - 1;
+ if (_OpenedPlaylist < 0)
+ _OpenedPlaylist = CPlaylists.NewPlaylist();
+ CPlaylists.Playlists[_OpenedPlaylist].AddSong(CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].ID);
+ OpenPlaylist(_OpenedPlaylist);
+ }
+ //Create a new playlist and add song
+ else if ((SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].Selection - 1) == -1)
+ {
+ _OpenedPlaylist = CPlaylists.NewPlaylist();
+ CPlaylists.Playlists[_OpenedPlaylist].AddSong(CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].ID);
+ OpenPlaylist(_OpenedPlaylist);
+ }
+ //Add song to loaded playlist
+ else
+ {
+ CPlaylists.Playlists[_OpenedPlaylist].AddSong(CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].ID);
+ Playlists[htPlaylists(Playlist)].UpdatePlaylist();
+ }
ToggleSongOptions();
+ }
break;
case Keys.Escape:
@@ -251,7 +297,31 @@ namespace Vocaluxe.Screens
}
else if (Buttons[htButtons(ButtonOptionsPlaylist)].Selected)
{
- SongMenus[htSongMenus(SongMenu)].SetSmallView(true);
+ //Open a playlist and add song
+ if (_OpenedPlaylist != (SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].Selection - 1))
+ {
+ _OpenedPlaylist = SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].Selection - 1;
+ if (_OpenedPlaylist < 0)
+ _OpenedPlaylist = CPlaylists.NewPlaylist();
+ CPlaylists.Playlists[_OpenedPlaylist].AddSong(CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].ID);
+ OpenPlaylist(_OpenedPlaylist);
+ }
+ //Create a new playlist and add song
+ else if ((SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].Selection - 1) == -1)
+ {
+ _OpenedPlaylist = CPlaylists.NewPlaylist();
+ CPlaylists.Playlists[_OpenedPlaylist].AddSong(CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].ID);
+ OpenPlaylist(_OpenedPlaylist);
+ UpdatePlaylistNames();
+ SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].Selection = SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].NumValues - 1;
+ }
+ //Add song to loaded playlist
+ else
+ {
+ CPlaylists.Playlists[_OpenedPlaylist].AddSong(CSongs.VisibleSongs[SongMenus[htSongMenus(SongMenu)].GetSelectedSong()].ID);
+ Playlists[htPlaylists(Playlist)].UpdatePlaylist();
+ }
+ ToggleSongOptions();
}
}
if (MouseEvent.RB)
@@ -260,6 +330,31 @@ namespace Vocaluxe.Screens
}
}
+ if (_OpenedPlaylist > -1)
+ {
+ if (MouseEvent.LB && IsMouseOver(MouseEvent))
+ {
+ if (Buttons[htButtons(ButtonPlaylistClose)].Selected)
+ {
+ ClosePlaylist();
+ }
+ else if (Buttons[htButtons(ButtonPlaylistSing)].Selected)
+ {
+ StartPlaylistSongs();
+ }
+ else if (Buttons[htButtons(ButtonPlaylistSave)].Selected)
+ {
+ CPlaylists.SavePlaylist(_OpenedPlaylist);
+ }
+ else if (Buttons[htButtons(ButtonPlaylistDelete)].Selected)
+ {
+ CPlaylists.DeletePlaylist(_OpenedPlaylist);
+ ClosePlaylist();
+ UpdatePlaylistNames();
+ }
+ }
+ }
+
return true;
}
@@ -268,11 +363,16 @@ namespace Vocaluxe.Screens
base.OnShow();
CGame.EnterNormalGame();
SongMenus[htSongMenus(SongMenu)].OnShow();
+ Playlists[htPlaylists(Playlist)].Init();
+ if(_OpenedPlaylist != -1)
+ Playlists[htPlaylists(Playlist)].LoadPlaylist(_OpenedPlaylist);
+ UpdatePlaylistNames();
}
public override bool UpdateGame()
{
SongMenus[htSongMenus(SongMenu)].Update();
+ Playlists[htPlaylists(Playlist)].Visible = SongMenus[htSongMenus(SongMenu)].IsSmallView();
Texts[htTexts(TextCategory)].Text = CSongs.GetActualCategoryName();
if (CSongs.Category > -1 || CConfig.Tabs == EOffOn.TR_CONFIG_OFF)
@@ -368,6 +468,22 @@ namespace Vocaluxe.Screens
}
}
+ private void StartPlaylistSongs()
+ {
+ CGame.Reset();
+ CGame.ClearSongs();
+
+ if (_OpenedPlaylist > -1 && _OpenedPlaylist < CPlaylists.NumPlaylists)
+ {
+ for (int i = 0; i < CPlaylists.Playlists[_OpenedPlaylist].Songs.Count; i++)
+ {
+ CGame.AddSong(CPlaylists.Playlists[_OpenedPlaylist].Songs[i].SongID, CPlaylists.Playlists[_OpenedPlaylist].Songs[i].GameMode);
+ }
+ if (CGame.GetNumSongs() > 0)
+ CGraphics.FadeTo(EScreens.ScreenNames);
+ }
+ }
+
private void StartRandomAllSongs()
{
CGame.Reset();
@@ -498,6 +614,7 @@ namespace Vocaluxe.Screens
_AvailableGameModes.Add(GameModes.EGameMode.TR_GAMEMODE_MEDLEY);
}
SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Visible = true;
+ SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].Visible = true;
Buttons[htButtons(ButtonOptionsClose)].Visible = true;
Buttons[htButtons(ButtonOptionsSing)].Visible = true;
Buttons[htButtons(ButtonOptionsPlaylist)].Visible = true;
@@ -507,6 +624,7 @@ namespace Vocaluxe.Screens
else
{
SelectSlides[htSelectSlides(SelectSlideOptionsMode)].Visible = false;
+ SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].Visible = false;
Buttons[htButtons(ButtonOptionsClose)].Visible = false;
Buttons[htButtons(ButtonOptionsSing)].Visible = false;
Buttons[htButtons(ButtonOptionsPlaylist)].Visible = false;
@@ -514,5 +632,46 @@ namespace Vocaluxe.Screens
Statics[htStatics(StaticOptionsBG)].Visible = false;
}
}
+
+ private void OpenPlaylist(int PlaylistID)
+ {
+ if (CPlaylists.Playlists.Length > PlaylistID && PlaylistID > -1)
+ {
+ _OpenedPlaylist = PlaylistID;
+ Playlists[htPlaylists(Playlist)].LoadPlaylist(_OpenedPlaylist);
+ SongMenus[htSongMenus(SongMenu)].SetSmallView(true);
+ Playlists[htPlaylists(Playlist)].Visible = true;
+ Statics[htStatics(StaticPlaylistHeader)].Visible = true;
+ Statics[htStatics(StaticPlaylistFooter)].Visible = true;
+ Texts[htTexts(TextPlaylistHeader)].Visible = true;
+ Texts[htTexts(TextPlaylistHeader)].Text = CPlaylists.Playlists[PlaylistID].PlaylistName;
+ Buttons[htButtons(ButtonPlaylistClose)].Visible = true;
+ Buttons[htButtons(ButtonPlaylistSing)].Visible = true;
+ Buttons[htButtons(ButtonPlaylistSave)].Visible = true;
+ Buttons[htButtons(ButtonPlaylistDelete)].Visible = true;
+ }
+ }
+
+ private void ClosePlaylist()
+ {
+ _OpenedPlaylist = -1;
+ SongMenus[htSongMenus(SongMenu)].SetSmallView(false);
+ Playlists[htPlaylists(Playlist)].Visible = false;
+ Statics[htStatics(StaticPlaylistHeader)].Visible = false;
+ Statics[htStatics(StaticPlaylistFooter)].Visible = false;
+ Texts[htTexts(TextPlaylistHeader)].Visible = false;
+ Texts[htTexts(TextPlaylistHeader)].Text = String.Empty;
+ Buttons[htButtons(ButtonPlaylistClose)].Visible = false;
+ Buttons[htButtons(ButtonPlaylistSing)].Visible = false;
+ Buttons[htButtons(ButtonPlaylistSave)].Visible = false;
+ Buttons[htButtons(ButtonPlaylistDelete)].Visible = false;
+ }
+
+ private void UpdatePlaylistNames()
+ {
+ SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].Clear();
+ SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].AddValue("TR_SCREENSONG_NEWPLAYLIST");
+ SelectSlides[htSelectSlides(SelectSlideOptionsPlaylist)].AddValues(CPlaylists.PlaylistNames);
+ }
}
}
diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj
index 3b9ff835..8c439bef 100644
--- a/Vocaluxe/Vocaluxe.csproj
+++ b/Vocaluxe/Vocaluxe.csproj
@@ -214,6 +214,7 @@
+