#ifndef PLAYER_H #define PLAYER_H #include #include #include #include #include #include #include #include #include #include "proxysong.h" /** * @todo write docs */ namespace M { class Player : public M::Model { Q_OBJECT public: Player(const W::Address& address, QObject* parent = 0); ~Player(); void set(const W::Object & value) override; void set(W::Object * value) override; M::Model::ModelType getType() const override; enum ItemType { playPause, currentPlayback, queue, picture, prev, next }; enum Mode { playBack }; void play(); void pause(); protected: void h_subscribe(const W::Event & ev) override; handler(get); handler(queue); handler(play); private: typedef std::map ItemMap; typedef std::deque Queue; ItemMap controls; ItemMap views; M::Button* playPauseBtn; M::Button* nextBtn; M::Button* prevBtn; M::List* _queueView; Queue _queue; ProxySong* current; uint64_t counter; uint64_t currentIndex; Mode mode; bool playing; bool scheduledToplay; void setActive(ProxySong* song); void setActive(uint64_t index); private slots: void onPlayPauseBtn(); void onNextBtn(); void onPrevBtn(); void onSongReady(); void onSongNotReady(); }; } #endif // PLAYER_H