X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fjukebox.cpp;h=b8224b29596acd234f67c5cb22c7104cbb6eb83d;hb=32f20df0174d2872199f6b14d65e0f0d7556adaa;hp=3cd5e080848ff0aeb517136774e2883aab9498bf;hpb=abef5eab53c6c75cd602fdabdec94259d1523858;p=libs%2Fal.git diff --git a/source/jukebox.cpp b/source/jukebox.cpp index 3cd5e08..b8224b2 100644 --- a/source/jukebox.cpp +++ b/source/jukebox.cpp @@ -7,6 +7,7 @@ Distributed under the LGPL #include #include +#include #include "jukebox.h" #include "sound.h" @@ -18,6 +19,7 @@ namespace AL { Jukebox::Jukebox(): streamer(source), sound(0), + current_track(tracks.end()), shuffle(false) { } @@ -32,7 +34,10 @@ void Jukebox::add_track(const string &trk) bool was_empty=tracks.empty(); tracks.push_back(trk); if(was_empty) + { current_track=tracks.begin(); + signal_track_changed.emit(*current_track); + } } void Jukebox::remove_track(const string &trk) @@ -43,6 +48,8 @@ void Jukebox::remove_track(const string &trk) if(i==current_track) next(); tracks.erase(i); + if(tracks.empty()) + current_track=tracks.end(); } } @@ -50,6 +57,14 @@ void Jukebox::clear_tracks() { stop(); tracks.clear(); + current_track=tracks.end(); +} + +const string &Jukebox::get_current_track() const +{ + if(tracks.empty()) + throw InvalidState("No current track"); + return *current_track; } void Jukebox::set_shuffle(bool s) @@ -91,6 +106,23 @@ void Jukebox::next() if(current_track==tracks.end()) current_track=tracks.begin(); } + signal_track_changed.emit(*current_track); + } + play(); +} + +void Jukebox::previous() +{ + if(shuffle) + return next(); + + stop(); + if(tracks.size()>1) + { + if(current_track==tracks.begin()) + current_track=tracks.end(); + --current_track; + signal_track_changed.emit(*current_track); } play(); }