radio/corax/models/player.h

86 lines
1.8 KiB
C++

#ifndef PLAYER_H
#define PLAYER_H
#include <map>
#include <deque>
#include <wModel/model.h>
#include <wModel/button.h>
#include <wModel/modelstring.h>
#include <wModel/list.h>
#include <wType/vocabulary.h>
#include <wType/vector.h>
#include <wType/address.h>
#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<ItemType, W::Address> ItemMap;
typedef std::deque<ProxySong*> 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