Fix for inconsistent song Menu

Multiple refactoring due to ambiguous meanings
This commit is contained in:
Flamefire committed 2013-10-18 23:25:42 +02:00
1 parent 155718456c
commit 3b82d5c13c
8 files changed
+180 -144

No files matched your search

@@ -248,7 +248,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
public override void DataFromScreen(string screenName, Object data) public override void DataFromScreen(string screenName, Object data)
{ {
SDataFromScreen dataFrom = new SDataFromScreen(); var dataFrom = new SDataFromScreen();
switch (screenName) switch (screenName)
{ {
case "PartyScreenTicTacToeConfig": case "PartyScreenTicTacToeConfig":
@@ -492,7 +492,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
public override void SongSelected(int songID) public override void SongSelected(int songID)
{ {
EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; var gm = EGameMode.TR_GAMEMODE_NORMAL;
switch (_GameData.GameMode) switch (_GameData.GameMode)
{ {
@@ -525,7 +525,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_GameData.Rounds = new List<CRound>(); _GameData.Rounds = new List<CRound>();
for (int i = 0; i < _GameData.NumFields; i++) for (int i = 0; i < _GameData.NumFields; i++)
{ {
CRound r = new CRound(); var r = new CRound();
_GameData.Rounds.Add(r); _GameData.Rounds.Add(r);
} }
} }
@@ -540,11 +540,11 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_GameData.PlayerTeam2 = new List<int>(); _GameData.PlayerTeam2 = new List<int>();
//Prepare Player-IDs //Prepare Player-IDs
List<int> ids1 = new List<int>(); var ids1 = new List<int>();
List<int> ids2 = new List<int>(); var ids2 = new List<int>();
//Add IDs to team-list //Add IDs to team-list
while (_GameData.PlayerTeam1.Count < _GameData.NumFields + _GameData.NumJokerRetry[0] && while (_GameData.PlayerTeam1.Count < _GameData.NumFields + _GameData.NumJokerRetry[0] &&
_GameData.PlayerTeam2.Count < _GameData.NumFields + _GameData.NumJokerRetry[1] ) _GameData.PlayerTeam2.Count < _GameData.NumFields + _GameData.NumJokerRetry[1])
{ {
if (ids1.Count == 0) if (ids1.Count == 0)
{ {
@@ -579,7 +579,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
case 1: case 1:
{ {
//Prepare Player-IDs //Prepare Player-IDs
List<int> ids = new List<int>(); var ids = new List<int>();
//Add IDs to team-list //Add IDs to team-list
while (_GameData.PlayerTeam1.Count < _GameData.NumFields + _GameData.NumJokerRetry[0] && ids.Count == 0) while (_GameData.PlayerTeam1.Count < _GameData.NumFields + _GameData.NumJokerRetry[0] && ids.Count == 0)
{ {
@@ -602,7 +602,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
case 2: case 2:
{ {
//Prepare Player-IDs //Prepare Player-IDs
List<int> ids = new List<int>(); var ids = new List<int>();
//Add IDs to team-list //Add IDs to team-list
while (_GameData.PlayerTeam2.Count < _GameData.NumFields + _GameData.NumJokerRetry[1] && ids.Count == 0) while (_GameData.PlayerTeam2.Count < _GameData.NumFields + _GameData.NumJokerRetry[1] && ids.Count == 0)
{ {
@@ -627,7 +627,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
private void _PrepareSongList() private void _PrepareSongList()
{ {
EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; var gm = EGameMode.TR_GAMEMODE_NORMAL;
switch (_GameData.GameMode) switch (_GameData.GameMode)
{ {
@@ -646,7 +646,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
while (_GameData.Songs.Count < (_GameData.NumFields + _GameData.NumJokerRandom[0] + _GameData.NumJokerRandom[1])) while (_GameData.Songs.Count < (_GameData.NumFields + _GameData.NumJokerRandom[0] + _GameData.NumJokerRandom[1]))
{ {
List<int> songs = new List<int>(); var songs = new List<int>();
switch (_GameData.SongSource) switch (_GameData.SongSource)
{ {
case ESongSource.TR_PLAYLIST: case ESongSource.TR_PLAYLIST:
@@ -678,7 +678,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
case ESongSource.TR_CATEGORY: case ESongSource.TR_CATEGORY:
CBase.Songs.SetCategory(_GameData.CategoryID); CBase.Songs.SetCategory(_GameData.CategoryID);
for (int i = 0; i < CBase.Songs.NumSongsInCategory(_GameData.CategoryID); i++) for (int i = 0; i < CBase.Songs.GetNumSongsVisible(); i++)
{ {
// ReSharper disable LoopCanBeConvertedToQuery // ReSharper disable LoopCanBeConvertedToQuery
foreach (EGameMode mode in CBase.Songs.GetVisibleSong(i).AvailableGameModes) foreach (EGameMode mode in CBase.Songs.GetVisibleSong(i).AvailableGameModes)
@@ -22,6 +22,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Windows.Forms; using System.Windows.Forms;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
using VocaluxeLib.Songs;
namespace VocaluxeLib.PartyModes.TicTacToe namespace VocaluxeLib.PartyModes.TicTacToe
{ {
@@ -61,7 +62,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_ThemeButtons = new string[] {_ButtonNext, _ButtonBack}; _ThemeButtons = new string[] {_ButtonNext, _ButtonBack};
_Data = new SDataFromScreen(); _Data = new SDataFromScreen();
SFromScreenConfig config = new SFromScreenConfig var config = new SFromScreenConfig
{ {
PlaylistID = 0, PlaylistID = 0,
NumFields = 9, NumFields = 9,
@@ -78,7 +79,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
{ {
try try
{ {
SDataToScreenConfig config = (SDataToScreenConfig)receivedData; var config = (SDataToScreenConfig)receivedData;
_Data.ScreenConfig.NumFields = config.NumFields; _Data.ScreenConfig.NumFields = config.NumFields;
_Data.ScreenConfig.NumPlayerTeam1 = config.NumPlayerTeam1; _Data.ScreenConfig.NumPlayerTeam1 = config.NumPlayerTeam1;
_Data.ScreenConfig.NumPlayerTeam2 = config.NumPlayerTeam2; _Data.ScreenConfig.NumPlayerTeam2 = config.NumPlayerTeam2;
@@ -209,13 +210,13 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_SelectSlides[_SelectSlidePlaylist].Selection = _Data.ScreenConfig.PlaylistID; _SelectSlides[_SelectSlidePlaylist].Selection = _Data.ScreenConfig.PlaylistID;
_SelectSlides[_SelectSlidePlaylist].Visible = _Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST; _SelectSlides[_SelectSlidePlaylist].Visible = _Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST;
string[] categories = new string[CBase.Songs.GetNumCategories()]; var categories = new string[CBase.Songs.GetNumCategories()];
for (int i = 0; i < CBase.Songs.GetNumCategories(); i++) for (int i = 0; i < CBase.Songs.GetNumCategories(); i++)
categories[i] = CBase.Songs.GetCategory(i).Name; categories[i] = CBase.Songs.GetCategory(i).Name;
_SelectSlides[_SelectSlideCategory].Clear(); _SelectSlides[_SelectSlideCategory].Clear();
for (int i = 0; i < categories.Length; i++) for (int i = 0; i < categories.Length; i++)
{ {
string value = categories[i] + " (" + CBase.Songs.NumSongsInCategory(i) + " " + CBase.Language.Translate("TR_SONGS", _PartyModeID) + ")"; string value = categories[i] + " (" + CBase.Songs.GetNumSongsNotSungInCategory(i) + " " + CBase.Language.Translate("TR_SONGS", _PartyModeID) + ")";
_SelectSlides[_SelectSlideCategory].AddValue(value); _SelectSlides[_SelectSlideCategory].AddValue(value);
} }
_SelectSlides[_SelectSlideCategory].Selection = _Data.ScreenConfig.CategoryID; _SelectSlides[_SelectSlideCategory].Selection = _Data.ScreenConfig.CategoryID;
@@ -242,7 +243,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_Data.ScreenConfig.CategoryID = _SelectSlides[_SelectSlideCategory].Selection; _Data.ScreenConfig.CategoryID = _SelectSlides[_SelectSlideCategory].Selection;
_Data.ScreenConfig.GameMode = (EPartyGameMode)_SelectSlides[_SelectSlideGameMode].Selection; _Data.ScreenConfig.GameMode = (EPartyGameMode)_SelectSlides[_SelectSlideGameMode].Selection;
EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; var gm = EGameMode.TR_GAMEMODE_NORMAL;
switch (_Data.ScreenConfig.GameMode) switch (_Data.ScreenConfig.GameMode)
{ {
@@ -282,25 +283,22 @@ namespace VocaluxeLib.PartyModes.TicTacToe
} }
if (_Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY) if (_Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY)
{ {
if (CBase.Songs.GetNumCategories() > 0) if (CBase.Songs.GetNumCategories() == 0)
{
if (CBase.Songs.NumSongsInCategory(_Data.ScreenConfig.CategoryID) > 0)
{
CBase.Songs.SetCategory(_Data.ScreenConfig.CategoryID);
_ConfigOk = false;
for (int i = 0; i < CBase.Songs.NumSongsInCategory(_Data.ScreenConfig.CategoryID); i++)
{
_ConfigOk = CBase.Songs.GetVisibleSong(i).AvailableGameModes.Any(mode => mode == gm);
if (_ConfigOk)
break;
}
CBase.Songs.SetCategory(-1);
}
else
_ConfigOk = false;
}
else
_ConfigOk = false; _ConfigOk = false;
else if (CBase.Songs.GetNumSongsNotSungInCategory(_Data.ScreenConfig.CategoryID) <= 0)
_ConfigOk = false;
else
{
CBase.Songs.SetCategory(_Data.ScreenConfig.CategoryID);
_ConfigOk = false;
foreach (CSong song in CBase.Songs.GetVisibleSongs())
{
_ConfigOk = song.AvailableGameModes.Any(mode => mode == gm);
if (_ConfigOk)
break;
}
CBase.Songs.SetCategory(-1);
}
} }
if (_Data.ScreenConfig.SongSource == ESongSource.TR_ALLSONGS) if (_Data.ScreenConfig.SongSource == ESongSource.TR_ALLSONGS)
{ {
+8 -6
View File
@@ -598,9 +598,14 @@ namespace Vocaluxe.Base
return CSongs.NumCategories; return CSongs.NumCategories;
} }
public int NumSongsInCategory(int categoryIndex) public int GetNumSongsInCategory(int categoryIndex)
{ {
return CSongs.NumSongsInCategory(categoryIndex); return CSongs.GetNumSongsInCategory(categoryIndex);
}
public int GetNumSongsNotSungInCategory(int categoryIndex)
{
return CSongs.GetNumSongsNotSungInCategory(categoryIndex);
} }
public bool IsInCategory() public bool IsInCategory()
@@ -655,10 +660,7 @@ namespace Vocaluxe.Base
public CCategory GetCategory(int index) public CCategory GetCategory(int index)
{ {
if (index >= CSongs.NumCategories) return CSongs.GetCategoryByIndex(index);
return null;
return new CCategory(CSongs.Categories[index]);
} }
public void AddPartySongSung(int songID) public void AddPartySongSung(int songID)
+35 -8
View File
@@ -66,7 +66,7 @@ namespace Vocaluxe.Base
public static int NumSongsVisible public static int NumSongsVisible
{ {
get { return _CatIndex < 0 ? 0 : Categories[_CatIndex].Songs.Count(sp => !sp.IsSung); } get { return VisibleSongs.Count; }
} }
public static int NumCategories public static int NumCategories
@@ -104,9 +104,19 @@ namespace Vocaluxe.Base
/// </summary> /// </summary>
/// <param name="catIndex">Category index</param> /// <param name="catIndex">Category index</param>
/// <returns></returns> /// <returns></returns>
public static int NumSongsInCategory(int catIndex) public static int GetNumSongsInCategory(int catIndex)
{ {
return _IsCatIndexValid(catIndex) ? Categories[catIndex].Songs.Count(sp => !sp.IsSung) : 0; return _IsCatIndexValid(catIndex) ? Categories[catIndex].Songs.Count : 0;
}
/// <summary>
/// Returns the number of song that are not sung in the category specified with CatIndex
/// </summary>
/// <param name="catIndex">Category index</param>
/// <returns>Number of visible songs in that category</returns>
public static int GetNumSongsNotSungInCategory(int catIndex)
{
return _IsCatIndexValid(catIndex) ? Categories[catIndex].GetNumSongsNotSung() : 0;
} }
public static void NextCategory() public static void NextCategory()
@@ -159,9 +169,8 @@ namespace Vocaluxe.Base
foreach (CSongPointer song in category.Songs.Where(song => song.SongID == songID)) foreach (CSongPointer song in category.Songs.Where(song => song.SongID == songID))
{ {
song.IsSung = true; song.IsSung = true;
int catIndex = _GetCategoryNumber(category); if (category.GetNumSongsNotSung() == 0)
if (NumSongsInCategory(catIndex) == 0) ResetPartySongSung(_GetCategoryNumber(category));
ResetPartySongSung(catIndex);
return; return;
} }
} }
@@ -251,7 +260,7 @@ namespace Vocaluxe.Base
{ {
get get
{ {
List<CSong> songs = new List<CSong>(); var songs = new List<CSong>();
if (_IsCatIndexValid(_CatIndex)) if (_IsCatIndexValid(_CatIndex))
{ {
// ReSharper disable LoopCanBeConvertedToQuery // ReSharper disable LoopCanBeConvertedToQuery
@@ -271,6 +280,24 @@ namespace Vocaluxe.Base
get { return Categorizer.Categories.AsReadOnly(); } get { return Categorizer.Categories.AsReadOnly(); }
} }
/// <summary>
/// Gets category with given index or null for invalid index
/// </summary>
/// <param name="index"></param>
/// <returns>category with given index or null for invalid index</returns>
public static CCategory GetCategoryByIndex(int index)
{
if (!_IsCatIndexValid(index))
return null;
return Categorizer.Categories[index];
}
/// <summary>
/// Gets visible song with given index or null for invalid index or song not visible
/// </summary>
/// <param name="index"></param>
/// <returns>visible song with given index or null for invalid index or song not visible</returns>
public static CSong GetVisibleSongByIndex(int index) public static CSong GetVisibleSongByIndex(int index)
{ {
if (index < 0) if (index < 0)
@@ -298,7 +325,7 @@ namespace Vocaluxe.Base
_Songs.Clear(); _Songs.Clear();
CLog.StartBenchmark(2, "List Songs"); CLog.StartBenchmark(2, "List Songs");
List<string> files = new List<string>(); var files = new List<string>();
foreach (string p in CConfig.SongFolder) foreach (string p in CConfig.SongFolder)
{ {
string path = p; string path = p;
+2 -1
View File
@@ -206,7 +206,8 @@ namespace VocaluxeLib
int GetNumSongs(); int GetNumSongs();
int GetNumSongsVisible(); int GetNumSongsVisible();
int GetNumCategories(); int GetNumCategories();
int NumSongsInCategory(int categoryIndex); int GetNumSongsInCategory(int categoryIndex);
int GetNumSongsNotSungInCategory(int categoryIndex);
bool IsInCategory(); bool IsInCategory();
int GetCurrentCategoryIndex(); int GetCurrentCategoryIndex();
+17 -14
View File
@@ -130,7 +130,6 @@ namespace VocaluxeLib.Menu.SongMenu
{ {
if ((_SelectedInternal != _SelectedPending) && (_Timer.ElapsedMilliseconds >= _PendingTime)) if ((_SelectedInternal != _SelectedPending) && (_Timer.ElapsedMilliseconds >= _PendingTime))
{ {
_Timer.Stop();
_Timer.Reset(); _Timer.Reset();
_SelectedInternal = _SelectedPending; _SelectedInternal = _SelectedPending;
} }
@@ -140,7 +139,6 @@ namespace VocaluxeLib.Menu.SongMenu
{ {
if (value == -1) if (value == -1)
{ {
_Timer.Stop();
_Timer.Reset(); _Timer.Reset();
_SelectedInternal = -1; _SelectedInternal = -1;
@@ -148,26 +146,28 @@ namespace VocaluxeLib.Menu.SongMenu
return; return;
} }
if ((value != _SelectedInternal) && (value != _SelectedPending)) if (value == _SelectedPending)
{ {
_Timer.Reset(); if (_Timer.ElapsedMilliseconds >= _PendingTime || _SelectedInternal == -1)
_Timer.Start(); {
_Timer.Reset();
_SelectedPending = value; _SelectedInternal = _SelectedPending;
}
} }
else
if ((value == _SelectedPending) && ((_Timer.ElapsedMilliseconds >= _PendingTime) || (_SelectedInternal == -1)))
{ {
_Timer.Stop(); if (value != _SelectedInternal)
_Timer.Reset(); {
_SelectedInternal = _SelectedPending; _Timer.Reset();
_Timer.Start();
}
_SelectedPending = value;
} }
} }
} }
protected void _SetSelectedNow() protected void _SetSelectedNow()
{ {
_Timer.Stop();
_Timer.Reset(); _Timer.Reset();
_SelectedInternal = _SelectedPending; _SelectedInternal = _SelectedPending;
} }
@@ -518,7 +518,10 @@ namespace VocaluxeLib.Menu.SongMenu
_Active = active; _Active = active;
} }
public virtual bool IsMouseOverActualSelection(SMouseEvent mEvent) { return false; } public virtual bool IsMouseOverActualSelection(SMouseEvent mEvent)
{
return false;
}
public virtual int GetSelectedSong() public virtual int GetSelectedSong()
{ {
+80 -81
View File
@@ -92,9 +92,9 @@ namespace VocaluxeLib.Menu.SongMenu
{ {
for (int j = 0; j < _NumW; j++) for (int j = 0; j < _NumW; j++)
{ {
SRectF rect = new SRectF(_Theme.SongMenuTileBoard.TileRect.X + j * (_TileW + _SpaceW), var rect = new SRectF(_Theme.SongMenuTileBoard.TileRect.X + j * (_TileW + _SpaceW),
_Theme.SongMenuTileBoard.TileRect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z); _Theme.SongMenuTileBoard.TileRect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z);
CStatic tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect); var tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect);
_Tiles.Add(tile); _Tiles.Add(tile);
} }
} }
@@ -129,6 +129,73 @@ namespace VocaluxeLib.Menu.SongMenu
} }
} }
private void _UpdatePreview()
{
//First hide everything so we just have to set what we actually want
_CoverBig.Texture = _CoverBigTexture;
_Artist.Text = String.Empty;
_Title.Text = String.Empty;
_SongLength.Text = String.Empty;
_DuetIcon.Visible = false;
_VideoIcon.Visible = false;
_MedleyCalcIcon.Visible = false;
_MedleyTagIcon.Visible = false;
//Check if nothing is selected (for preview)
if (_PreviewSelected < 0)
return;
if (CBase.Songs.IsInCategory())
{
CSong song = CBase.Songs.GetVisibleSong(_PreviewSelected);
//Check if we have a valid song (song still visible, index >=0 etc is checked by framework)
if (song == null)
{
//Display at least the category
CCategory category = CBase.Songs.GetCategory(CBase.Songs.GetCurrentCategoryIndex());
//Check if we have a valid category
if (category == null)
return;
_CoverBig.Texture = category.CoverTextureBig;
_Artist.Text = category.Name;
return;
}
_CoverBig.Texture = song.CoverTextureBig;
_Artist.Text = song.Artist;
_Title.Text = song.Title;
_DuetIcon.Visible = song.IsDuet;
_VideoIcon.Visible = song.VideoFileName != "";
_MedleyCalcIcon.Visible = song.Medley.Source == EMedleySource.Calculated;
_MedleyTagIcon.Visible = song.Medley.Source == EMedleySource.Tag;
float time = CBase.Sound.GetLength(_SongStream);
if (Math.Abs(song.Finish) > 0.001)
time = song.Finish;
time -= song.Start;
var min = (int)Math.Floor(time / 60f);
var sec = (int)(time - min * 60f);
_SongLength.Text = min.ToString("00") + ":" + sec.ToString("00");
}
else
{
CCategory category = CBase.Songs.GetCategory(_PreviewSelected);
//Check if we have a valid category
if (category == null)
return;
_CoverBig.Texture = category.CoverTextureBig;
_Artist.Text = category.Name;
int num = category.GetNumSongsNotSung();
// ReSharper disable ConvertIfStatementToConditionalTernaryExpression
if (num != 1)
// ReSharper restore ConvertIfStatementToConditionalTernaryExpression
_Title.Text = CBase.Language.Translate("TR_SCREENSONG_NUMSONGS").Replace("%v", num.ToString());
else
_Title.Text = CBase.Language.Translate("TR_SCREENSONG_NUMSONG").Replace("%v", num.ToString());
}
}
public override void OnShow() public override void OnShow()
{ {
if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && CBase.Songs.GetNumCategories() > 0 && !CBase.Songs.IsInCategory()) if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && CBase.Songs.GetNumCategories() > 0 && !CBase.Songs.IsInCategory())
@@ -141,33 +208,16 @@ namespace VocaluxeLib.Menu.SongMenu
SetSelectedSong(_ActSong); SetSelectedSong(_ActSong);
_AfterCategoryChange(); _AfterCategoryChange();
int actcat = _PreviewSelected; if (_PreviewSelected < 0)
if ((CBase.Songs.GetNumCategories() > 0) && (actcat < 0))
{ {
_CoverBig.Texture = CBase.Songs.GetCategory(0).CoverTextureBig;
_Artist.Text = CBase.Songs.GetCategory(0).Name;
_Title.Text = String.Empty;
_SongLength.Text = String.Empty;
_PreviewSelected = 0; _PreviewSelected = 0;
_Locked = 0; _Locked = 0;
_DuetIcon.Visible = false;
_VideoIcon.Visible = false;
_MedleyCalcIcon.Visible = false;
_MedleyTagIcon.Visible = false;
} }
if (CBase.Songs.GetNumSongsVisible() == 0 && CBase.Songs.GetSearchFilter() != "") if (CBase.Songs.GetNumSongsVisible() == 0 && CBase.Songs.GetSearchFilter() != "")
{ {
_CoverBig.Texture = _CoverBigTexture;
_Artist.Text = String.Empty;
_Title.Text = String.Empty;
_SongLength.Text = String.Empty;
_PreviewSelected = -1; _PreviewSelected = -1;
_Locked = -1; _Locked = -1;
_DuetIcon.Visible = false;
_VideoIcon.Visible = false;
_MedleyCalcIcon.Visible = false;
_MedleyTagIcon.Visible = false;
} }
} }
@@ -394,63 +444,12 @@ namespace VocaluxeLib.Menu.SongMenu
tile.Draw(1.2f, tile.Rect.Z - 0.1f, EAspect.Crop); tile.Draw(1.2f, tile.Rect.Z - 0.1f, EAspect.Crop);
else else
{ {
// ReSharper disable ConvertIfStatementToConditionalTernaryExpression EAspect aspect = (tile.Texture != _CoverTexture) ? EAspect.Crop : EAspect.Stretch;
if (tile.Texture != _CoverTexture) tile.Draw(1f, tile.Rect.Z, aspect);
// ReSharper restore ConvertIfStatementToConditionalTernaryExpression
tile.Draw(1f, tile.Rect.Z, EAspect.Crop);
else
tile.Draw(1f, tile.Rect.Z, EAspect.Stretch);
} }
} }
if (CBase.Songs.IsInCategory()) _UpdatePreview();
{
int actsong = _PreviewSelected;
if ((CBase.Songs.GetNumSongsVisible() > actsong) && (actsong >= 0))
{
CSong song = CBase.Songs.GetVisibleSong(actsong);
_CoverBig.Texture = song.CoverTextureBig;
_Artist.Text = song.Artist;
_Title.Text = song.Title;
_DuetIcon.Visible = song.IsDuet;
_VideoIcon.Visible = song.VideoFileName != "";
_MedleyCalcIcon.Visible = song.Medley.Source == EMedleySource.Calculated;
_MedleyTagIcon.Visible = song.Medley.Source == EMedleySource.Tag;
float time = CBase.Sound.GetLength(_SongStream);
if (Math.Abs(song.Finish) > 0.001)
time = song.Finish;
time -= song.Start;
int min = (int)Math.Floor(time / 60f);
int sec = (int)(time - min * 60f);
_SongLength.Text = min.ToString("00") + ":" + sec.ToString("00");
}
}
else
{
int actcat = _PreviewSelected;
if ((CBase.Songs.GetNumCategories() > actcat) && (actcat >= 0))
{
_CoverBig.Texture = CBase.Songs.GetCategory(actcat).CoverTextureBig;
_Artist.Text = CBase.Songs.GetCategory(actcat).Name;
int num = CBase.Songs.NumSongsInCategory(actcat);
// ReSharper disable ConvertIfStatementToConditionalTernaryExpression
if (num != 1)
// ReSharper restore ConvertIfStatementToConditionalTernaryExpression
_Title.Text = CBase.Language.Translate("TR_SCREENSONG_NUMSONGS").Replace("%v", num.ToString());
else
_Title.Text = CBase.Language.Translate("TR_SCREENSONG_NUMSONG").Replace("%v", num.ToString());
_SongLength.Text = String.Empty;
_DuetIcon.Visible = false;
_VideoIcon.Visible = false;
_MedleyCalcIcon.Visible = false;
_MedleyTagIcon.Visible = false;
}
}
_TextBG.Draw(); _TextBG.Draw();
@@ -458,11 +457,11 @@ namespace VocaluxeLib.Menu.SongMenu
{ {
if (_Vidtex.Color.A < 1) if (_Vidtex.Color.A < 1)
_CoverBig.Draw(1f, EAspect.Crop); _CoverBig.Draw(1f, EAspect.Crop);
RectangleF bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H); var bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H);
RectangleF rect; RectangleF rect;
CHelper.SetRect(bounds, out rect, _Vidtex.OrigAspect, EAspect.Crop); CHelper.SetRect(bounds, out rect, _Vidtex.OrigAspect, EAspect.Crop);
SRectF vidRect = new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z); var vidRect = new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z);
SRectF vidRectBounds = new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f); var vidRectBounds = new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f);
CBase.Drawing.DrawTexture(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds); CBase.Drawing.DrawTexture(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds);
CBase.Drawing.DrawTextureReflection(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds, _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight); CBase.Drawing.DrawTextureReflection(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds, _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight);
@@ -490,7 +489,7 @@ namespace VocaluxeLib.Menu.SongMenu
CStatic selCov = GetSelectedSongCover(); CStatic selCov = GetSelectedSongCover();
if (selCov.Texture == null) if (selCov.Texture == null)
return false; return false;
SRectF 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); 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); return CHelper.IsInBounds(rect, mEvent);
} }
@@ -679,8 +678,8 @@ namespace VocaluxeLib.Menu.SongMenu
{ {
for (int j = 0; j < _NumW; j++) for (int j = 0; j < _NumW; j++)
{ {
SRectF rect = new SRectF(_Rect.X + j * (_TileW + _SpaceW), _Rect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z); var rect = new SRectF(_Rect.X + j * (_TileW + _SpaceW), _Rect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z);
CStatic tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect); var tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect);
_Tiles.Add(tile); _Tiles.Add(tile);
} }
} }
+6
View File
@@ -19,6 +19,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using VocaluxeLib.Draw; using VocaluxeLib.Draw;
using System.Linq;
namespace VocaluxeLib.Songs namespace VocaluxeLib.Songs
{ {
@@ -52,6 +53,11 @@ namespace VocaluxeLib.Songs
} }
} }
public int GetNumSongsNotSung()
{
return Songs.Count(sp => !sp.IsSung);
}
public CCategory(string name, CTexture coverSmall, CTexture coverBig) public CCategory(string name, CTexture coverSmall, CTexture coverBig)
{ {
Name = name; Name = name;