void SongUtil::SortByMostRecentlyPlayedForMachine( vector<Song*> &vpSongsInOut ) { Profile *pProfile = PROFILEMAN->GetMachineProfile(); FOREACH_CONST( Song*, vpSongsInOut, s ) { int iNumTimesPlayed = pProfile->GetSongNumTimesPlayed( *s ); CString val = iNumTimesPlayed ? pProfile->GetSongLastPlayedDateTime(*s).GetString() : "0"; song_sort_val[*s] = val; }
void ScreenBookkeeping::UpdateView() { BookkeepingView view = m_vBookkeepingViews[m_iViewIndex]; { RString s; s += ALL_TIME.GetValue(); s += ssprintf( " %i\n", BOOKKEEPER->GetCoinsTotal() ); m_textAllTime.SetText( s ); } switch( view ) { case BookkeepingView_SongPlays: { Profile *pProfile = PROFILEMAN->GetMachineProfile(); vector<Song*> vpSongs; int iCount = 0; FOREACH_CONST( Song *, SONGMAN->GetAllSongs(), s ) { Song *pSong = *s; if( UNLOCKMAN->SongIsLocked(pSong) & ~LOCKED_DISABLED ) continue; iCount += pProfile->GetSongNumTimesPlayed( pSong ); vpSongs.push_back( pSong ); } m_textTitle.SetText( ssprintf(SONG_PLAYS.GetValue(), iCount) ); SongUtil::SortSongPointerArrayByNumPlays( vpSongs, pProfile, true ); const int iSongPerCol = 15; int iSongIndex = 0; for( int i=0; i<NUM_BOOKKEEPING_COLS; i++ ) { RString s; for( int j=0; j<iSongPerCol; j++ ) { if( iSongIndex < (int)vpSongs.size() ) { Song *pSong = vpSongs[iSongIndex]; int iCount = pProfile->GetSongNumTimesPlayed( pSong ); RString sTitle = ssprintf("%4d",iCount) + " " + pSong->GetDisplayFullTitle(); if( sTitle.length() > 22 ) sTitle = sTitle.Left(20) + "..."; s += sTitle + "\n"; iSongIndex++; } } m_textData[i].SetText( s ); m_textData[i].SetHorizAlign( align_left ); } } break; case BookkeepingView_LastDays: { m_textTitle.SetText( ssprintf(LAST_DAYS.GetValue(), NUM_LAST_DAYS) ); int coins[NUM_LAST_DAYS]; BOOKKEEPER->GetCoinsLastDays( coins ); int iTotalLast = 0; RString sTitle, sData; for( int i=0; i<NUM_LAST_DAYS; i++ ) { sTitle += LastDayToLocalizedString(i) + "\n"; sData += ssprintf("%d",coins[i]) + "\n"; iTotalLast += coins[i]; } sTitle += ALL_TIME.GetValue()+"\n"; sData += ssprintf("%i\n", iTotalLast); m_textData[0].SetText( "" ); m_textData[1].SetHorizAlign( align_left ); m_textData[1].SetText( sTitle ); m_textData[2].SetText( "" ); m_textData[3].SetHorizAlign( align_right ); m_textData[3].SetText( sData ); } break; case BookkeepingView_LastWeeks: { m_textTitle.SetText( ssprintf(LAST_WEEKS.GetValue(), NUM_LAST_WEEKS) ); int coins[NUM_LAST_WEEKS]; BOOKKEEPER->GetCoinsLastWeeks( coins ); RString sTitle, sData; for( int col=0; col<4; col++ ) { RString sTemp; for( int row=0; row<52/4; row++ ) { int week = row*4+col; sTemp += LastWeekToLocalizedString(week) + ssprintf(": %d",coins[week]) + "\n"; } m_textData[col].SetHorizAlign( align_left ); m_textData[col].SetText( sTemp ); } } break; case BookkeepingView_DayOfWeek: { m_textTitle.SetText( DAY_OF_WEEK ); int coins[DAYS_IN_WEEK]; BOOKKEEPER->GetCoinsByDayOfWeek( coins ); RString sTitle, sData; for( int i=0; i<DAYS_IN_WEEK; i++ ) { sTitle += DayOfWeekToString(i) + "\n"; sData += ssprintf("%d",coins[i]) + "\n"; } m_textData[0].SetText( "" ); m_textData[1].SetHorizAlign( align_left ); m_textData[1].SetText( sTitle ); m_textData[2].SetText( "" ); m_textData[3].SetHorizAlign( align_right ); m_textData[3].SetText( sData ); } break; case BookkeepingView_HourOfDay: { m_textTitle.SetText( HOUR_OF_DAY ); int coins[HOURS_IN_DAY]; BOOKKEEPER->GetCoinsByHour( coins ); RString sTitle1, sData1; for( int i=0; i<HOURS_IN_DAY/2; i++ ) { sTitle1 += HourInDayToLocalizedString(i) + "\n"; sData1 += ssprintf("%d",coins[i]) + "\n"; } RString sTitle2, sData2; for( int i=(HOURS_IN_DAY/2); i<HOURS_IN_DAY; i++ ) { sTitle2 += HourInDayToLocalizedString(i) + "\n"; sData2 += ssprintf("%d",coins[i]) + "\n"; } m_textData[0].SetHorizAlign( align_left ); m_textData[0].SetText( sTitle1 ); m_textData[1].SetHorizAlign( align_right ); m_textData[1].SetText( sData1 ); m_textData[2].SetHorizAlign( align_left ); m_textData[2].SetText( sTitle2 ); m_textData[3].SetHorizAlign( align_right ); m_textData[3].SetText( sData2 ); } break; default: ASSERT(0); } }