]> git.tdb.fi Git - libs/al.git/blobdiff - source/jukebox.cpp
Add signal_track_changed to Jukebox
[libs/al.git] / source / jukebox.cpp
index 3cd5e080848ff0aeb517136774e2883aab9498bf..391edd14a305a6485f9a0741cd672bde0fef3c2e 100644 (file)
@@ -7,6 +7,7 @@ Distributed under the LGPL
 
 #include <algorithm>
 #include <cstdlib>
+#include <msp/core/except.h>
 #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,7 @@ void Jukebox::next()
                        if(current_track==tracks.end())
                                current_track=tracks.begin();
                }
+               signal_track_changed.emit(*current_track);
        }
        play();
 }