improve time displaying / allow markers for empty tags without color

This commit is contained in:
unK
2008-09-13 17:09:20 +02:00
parent 0060450b10
commit 3419ff13a8
6 changed files with 53 additions and 57 deletions

View File

@@ -46,23 +46,3 @@ string IntoStr(double liczba, int precision)
return ss.str(); return ss.str();
} }
string ShowTime(int length)
{
stringstream ss;
int minutes = length/60;
length -= minutes*60;
int seconds = length;
ss << minutes << ":";
if (seconds == 0)
{ ss << "00";
return ss.str();
}
if (seconds < 10)
ss << "0" << seconds;
else
ss << seconds;
return ss.str();
}

View File

@@ -35,7 +35,5 @@ int StrToInt(string);
string IntoStr(int); string IntoStr(int);
string IntoStr(double, int); string IntoStr(double, int);
string ShowTime(int);
#endif #endif

View File

@@ -2060,7 +2060,7 @@ int main(int argc, char *argv[])
songpos = 0; songpos = 0;
wFooter->Bold(1); wFooter->Bold(1);
string tracklength = "[" + ShowTime(songpos) + "/" + s.GetLength() + "]"; string tracklength = "[" + Song::ShowTime(songpos) + "/" + s.GetLength() + "]";
wFooter->WriteXY(wFooter->GetWidth()-tracklength.length(), 1, tracklength); wFooter->WriteXY(wFooter->GetWidth()-tracklength.length(), 1, tracklength);
double progressbar_size = (double)songpos/(s.GetTotalLength()); double progressbar_size = (double)songpos/(s.GetTotalLength());
int howlong = wFooter->GetWidth()*progressbar_size; int howlong = wFooter->GetWidth()*progressbar_size;

View File

@@ -30,16 +30,25 @@ string UNKNOWN_ALBUM;
void DefineEmptyTags() void DefineEmptyTags()
{ {
const string et_col = IntoStr(Config.empty_tags_color); if (Config.empty_tags_color != clDefault)
EMPTY_TAG = "[." + et_col + "]<empty>[/" + et_col + "]"; {
UNKNOWN_ARTIST = "[." + et_col + "]<no artist>[/" + et_col + "]"; const string et_col = IntoStr(Config.empty_tags_color);
UNKNOWN_TITLE = "[." + et_col + "]<no title>[/" + et_col + "]"; EMPTY_TAG = "[." + et_col + "]<empty>[/" + et_col + "]";
UNKNOWN_ALBUM = "[." + et_col + "]<no album>[/" + et_col + "]"; UNKNOWN_ARTIST = "[." + et_col + "]<no artist>[/" + et_col + "]";
UNKNOWN_TITLE = "[." + et_col + "]<no title>[/" + et_col + "]";
UNKNOWN_ALBUM = "[." + et_col + "]<no album>[/" + et_col + "]";
}
else
{
EMPTY_TAG = "<empty>";
UNKNOWN_ARTIST = "<no artist>";
UNKNOWN_TITLE = "<no title>";
UNKNOWN_ALBUM = "<no album";
}
} }
Song::Song(mpd_Song *s) : itsHash(0), Song::Song(mpd_Song *s) : itsHash(0),
itsMinutesLength(s->time/60), itsLength(s->time),
itsSecondsLength((s->time-itsMinutesLength*60)),
itsPosition(s->pos), itsPosition(s->pos),
itsID(s->id), itsID(s->id),
itsGetEmptyFields(0) itsGetEmptyFields(0)
@@ -85,22 +94,9 @@ Song::Song(mpd_Song *s) : itsHash(0),
string Song::GetLength() const string Song::GetLength() const
{ {
std::stringstream ss; if (!itsLength)
if (!GetTotalLength())
return "-:--"; return "-:--";
return ShowTime(itsLength);
ss << itsMinutesLength << ":";
if (!itsSecondsLength)
{
ss << "00";
return ss.str();
}
if (itsSecondsLength < 10)
ss << "0" << itsSecondsLength;
else
ss << itsSecondsLength;
return ss.str();
} }
void Song::Clear() void Song::Clear()
@@ -119,15 +115,14 @@ void Song::Clear()
itsPerformer.clear(); itsPerformer.clear();
itsDisc.clear(); itsDisc.clear();
itsComment.clear(); itsComment.clear();
itsMinutesLength = 0; itsLength = 0;
itsSecondsLength = 0;
itsPosition = 0; itsPosition = 0;
itsID = 0; itsID = 0;
} }
bool Song::Empty() const bool Song::Empty() const
{ {
return itsFile.empty() && itsShortName.empty() && itsArtist.empty() && itsTitle.empty() && itsAlbum.empty() && itsTrack.empty() && itsYear.empty() && itsGenre.empty(); return itsFile.empty() && itsShortName.empty() && itsArtist.empty() && itsTitle.empty() && itsAlbum.empty() && itsTrack.empty() && itsYear.empty() && itsGenre.empty() && itsComposer.empty() && itsPerformer.empty() && itsDisc.empty() && itsComment.empty();
} }
string Song::GetFile() const string Song::GetFile() const
@@ -197,7 +192,7 @@ string Song::GetComment() const
bool Song::operator==(const Song &s) const bool Song::operator==(const Song &s) const
{ {
return itsFile == s.itsFile && itsArtist == s.itsArtist && itsTitle == s.itsTitle && itsAlbum == s.itsAlbum && itsTrack == s.itsTrack && itsYear == s.itsYear && itsGenre == s.itsGenre && itsComposer == s.itsComposer && itsPerformer == s.itsPerformer && itsDisc == s.itsDisc && itsComment == s.itsComment && itsHash == s.itsHash && itsMinutesLength && s.itsMinutesLength && itsSecondsLength == s.itsSecondsLength && itsPosition == s.itsPosition && itsID == s.itsID; return itsFile == s.itsFile && itsArtist == s.itsArtist && itsTitle == s.itsTitle && itsAlbum == s.itsAlbum && itsTrack == s.itsTrack && itsYear == s.itsYear && itsGenre == s.itsGenre && itsComposer == s.itsComposer && itsPerformer == s.itsPerformer && itsDisc == s.itsDisc && itsComment == s.itsComment && itsHash == s.itsHash && itsLength && s.itsLength && itsPosition == s.itsPosition && itsID == s.itsID;
} }
bool Song::operator!=(const Song &s) const bool Song::operator!=(const Song &s) const
@@ -210,3 +205,27 @@ bool Song::operator<(const Song &s) const
return itsPosition < s.itsPosition; return itsPosition < s.itsPosition;
} }
string Song::ShowTime(int length)
{
std::stringstream ss;
int hours = length/3600;
length -= hours*3600;
int minutes = length/60;
length -= minutes*60;
int seconds = length;
if (hours > 0)
{
ss << hours << ":"
<< std::setw(2) << std::setfill('0') << minutes << ":"
<< std::setw(2) << std::setfill('0') << seconds;
}
else
{
ss << minutes << ":"
<< std::setw(2) << std::setfill('0') << seconds;
}
return ss.str();
}

View File

@@ -36,7 +36,7 @@ void DefineEmptyTags();
class Song class Song
{ {
public: public:
Song() : itsHash(0), itsMinutesLength(0), itsSecondsLength(0), itsPosition(0), itsID(0), itsGetEmptyFields(0) { } Song() : itsHash(0), itsLength(0), itsPosition(0), itsID(0), itsGetEmptyFields(0) { }
Song(mpd_Song *); Song(mpd_Song *);
~Song() {}; ~Song() {};
@@ -56,9 +56,7 @@ class Song
string GetComment() const; string GetComment() const;
string GetLength() const; string GetLength() const;
long long GetHash() const { return itsHash; } long long GetHash() const { return itsHash; }
int GetTotalLength() const { return itsSecondsLength < 0 ? 0 : itsMinutesLength*60+itsSecondsLength; } int GetTotalLength() const { return itsLength < 0 ? 0 : itsLength; }
int GetMinutesLength() const { return itsMinutesLength; }
int GetSecondsLength() const { return itsSecondsLength; }
int GetPosition() const { return itsPosition; } int GetPosition() const { return itsPosition; }
int GetID() const { return itsID; } int GetID() const { return itsID; }
@@ -85,6 +83,8 @@ class Song
bool operator==(const Song &) const; bool operator==(const Song &) const;
bool operator!=(const Song &) const; bool operator!=(const Song &) const;
bool operator<(const Song &rhs) const; bool operator<(const Song &rhs) const;
static string ShowTime(int);
private: private:
string itsFile; string itsFile;
string itsShortName; string itsShortName;
@@ -102,8 +102,7 @@ class Song
string itsDisc; string itsDisc;
string itsComment; string itsComment;
long long itsHash; long long itsHash;
int itsMinutesLength; int itsLength;
int itsSecondsLength;
int itsPosition; int itsPosition;
int itsID; int itsID;
bool itsGetEmptyFields; bool itsGetEmptyFields;

View File

@@ -321,9 +321,9 @@ void NcmpcppStatusChanged(MPDConnection *Mpd, MPDStatusChanges changed, void *da
{ {
string tracklength; string tracklength;
if (s.GetTotalLength()) if (s.GetTotalLength())
tracklength = " [" + ShowTime(elapsed) + "/" + s.GetLength() + "]"; tracklength = " [" + Song::ShowTime(elapsed) + "/" + s.GetLength() + "]";
else else
tracklength = " [" + ShowTime(elapsed) + "]"; tracklength = " [" + Song::ShowTime(elapsed) + "]";
my_string_t playing_song = TO_WSTRING(DisplaySong(s, &Config.song_status_format)); my_string_t playing_song = TO_WSTRING(DisplaySong(s, &Config.song_status_format));
int max_length_without_scroll = wFooter->GetWidth()-player_state.length()-tracklength.length(); int max_length_without_scroll = wFooter->GetWidth()-player_state.length()-tracklength.length();