]> git.tdb.fi Git - xinema.git/blobdiff - source/xinestream.h
Implement basic playback controls
[xinema.git] / source / xinestream.h
index c1f27f74aa45542318d40a05e8adb28153b874ea..def7f01a5f9d2dbd6a5e0ee694670c8c597e0bf6 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <string>
 #include <xine.h>
+#include <msp/strings/lexicalcast.h>
 #include <msp/time/timedelta.h>
 
 class XineEngine;
@@ -10,6 +11,14 @@ class XineEngine;
 class XineStream
 {
 public:
+       enum State
+       {
+               STOPPED,
+               PAUSED,
+               PLAYING
+       };
+
+       sigc::signal<void, State> signal_state_changed;
        sigc::signal<void, const std::string &> signal_title_changed;
        sigc::signal<void, const Msp::Time::TimeDelta &> signal_duration_changed;
        sigc::signal<void, const Msp::Time::TimeDelta &> signal_position_changed;
@@ -18,6 +27,7 @@ private:
        XineEngine &engine;
        xine_stream_t *stream;
        xine_event_queue_t *queue;
+       State state;
        std::string title;
        Msp::Time::TimeDelta duration;
        Msp::Time::TimeDelta position;
@@ -26,17 +36,26 @@ public:
        XineStream(XineEngine &, const std::string &);
        ~XineStream();
 
+       State get_state() const { return state; }
        const Msp::Time::TimeDelta &get_duration() const { return duration; }
        const Msp::Time::TimeDelta &get_position() const { return position; }
        const std::string &get_title() const { return title; }
 
        void play();
+       void seek(const Msp::Time::TimeDelta &);
+       void pause();
        void stop();
+private:
+       void set_state(State);
 
+public:
        void tick();
 private:
        void check_info();
        void handle_event(const xine_event_t &);
 };
 
+void operator<<(Msp::LexicalConverter &, XineStream::State);
+void operator>>(const Msp::LexicalConverter &, XineStream::State &);
+
 #endif