#include "global.h" #include "MusicList.h" #include "ThemeManager.h" #include "ThemeMetric.h" #include "RageUtil.h" #include "song.h" #include "ActorUtil.h" /* If this actor is used anywhere other than SelectGroup, we * can add a setting that changes which metric group we pull * settings out of, so it can be configured separately. */ static const ThemeMetric NUM_COLUMNS ("MusicList","NumColumns"); static const ThemeMetric NUM_ROWS ("MusicList","NumRows"); static const ThemeMetric START_X ("MusicList","StartX"); static const ThemeMetric START_Y ("MusicList","StartY"); static const ThemeMetric SPACING_X ("MusicList","SpacingX"); static const ThemeMetric CROP_WIDTH ("MusicList","CropWidth"); MusicList::MusicList() { CurGroup = 0; } void MusicList::Load() { for( int i=0; iGetPathF("MusicList","titles") ); m_textTitles[i].SetXY( START_X + i*SPACING_X, START_Y ); m_textTitles[i].PlayCommand( "Init" ); this->AddChild( &m_textTitles[i] ); } } void MusicList::AddGroup() { m_ContentsText.push_back(group()); } void MusicList::AddSongsToGroup(const vector &Songs) { // Generate what text will show in the contents for each group unsigned group = m_ContentsText.size()-1; m_ContentsText[group].m_iNumSongsInGroup = Songs.size(); for( int c=0; c= Songs.size() ) continue; if( c == NUM_COLUMNS-1 && r == NUM_ROWS-1 && Songs.size() != unsigned(NUM_COLUMNS*NUM_ROWS) ) { sText += ssprintf( "%i more.....", int(Songs.size() - NUM_COLUMNS * NUM_ROWS + 1) ); continue; } RString sTitle = Songs[iIndex]->GetDisplayFullTitle(); // TODO: Move this crop threshold into a theme metric or make automatic based on column width if( sTitle.size() > 40 ) sTitle = sTitle.Left( 37 ) + "..."; RString sTrTitle = Songs[iIndex]->GetTranslitFullTitle(); if( sTrTitle.size() > 40 ) sTrTitle = sTrTitle.Left( 37 ) + "..."; /* If the main title isn't complete for this font, and we have a translit, * use it. */ if(m_textTitles[c].StringWillUseAlternate(sTitle, sTrTitle)) sText += sTrTitle; else sText += sTitle; sText += "\n"; } m_ContentsText[group].ContentsText[c] = sText; } } /* TODO: tween? */ void MusicList::SetGroupNo(int group) { CurGroup = group; for( int c=0; c