defuze.me  Client
queueable.hpp
00001 /**************************************************************************
00002 ** defuze.me Epitech Innovative Project
00003 **
00004 ** Copyright 2010-2011
00005 **   Athena Calmettes - Jocelyn De La Rosa - Francois Gaillard
00006 **   Adrien Jarthon - Alexandre Moore - Luc Peres - Arnaud Sellier
00007 **
00008 ** All rights reserved.
00009 **************************************************************************/
00010 
00011 #include <deque>
00012 
00013 namespace Queue {
00014     class Queueable;
00015 
00016     typedef std::deque<Queueable*>  QueueableDeque;
00017 }
00018 
00019 #ifndef QUEUEABLE_HPP
00020 #define QUEUEABLE_HPP
00021 
00022 #include <QObject>
00023 #include <QLabel>
00024 #include <QVariantMap>
00025 #include <QDateTime>
00026 #include "container.hpp"
00027 #include "controlswidget.hpp"
00028 #include "eventmodel.hpp"
00029 
00030 namespace Queue
00031 {
00032     class QueueBreak;
00033     class QueueTrack;
00034 
00042     class Queueable : public QObject
00043     {
00044         friend class PlayQueue;
00045         Q_OBJECT
00046     public:
00047         Queueable(QObject *parent = 0);
00048         virtual ~Queueable();
00049         void                setContainer(Container* c);
00050         bool                hasContainer() const;
00051         Container*          getContainer() const;
00052         int                 getPosition() const;
00053         const QVariantMap&  getQueueAttributes() const;
00054         virtual QVariantMap getContent(bool forWeb = false) const;
00055         QVariantMap         getNetData() const;                 
00056         void                saveQueueAttributes() const;        
00057         virtual bool        queueIsFinite() const;              
00058         virtual int         queueDuration(QDateTime from = QDateTime()) const;
00059         virtual QString     queueType() const = 0;              
00060         virtual int         queueId() const;                    
00061         virtual QString     name() const;                       
00062         virtual void        setPlayTime(const QDateTime& time); 
00063         virtual Queueable*  clone() const = 0;                  
00064         const QDateTime&    getPlayTime() const;
00065         QString             textDuration() const;
00066         void                showControls();
00067         void                hideControls();
00068         void                setEvent(int id);
00069         int                 getEvent() const;
00070 
00071         // Shortcut downcasting methods
00072         bool                isTrack() const;
00073         bool                isBreak() const;
00074         QueueTrack*         toQueueTrack();
00075         QueueBreak*         toQueueBreak();
00076 
00077     signals:
00078         void                remove(Queueable* elem);
00079 
00080     public slots:
00081         void                remove();
00082 
00083     protected:
00084         Container*          container;
00085         QVariantMap         attributes;
00086         int                 position;
00087         QDateTime           play_at;
00088 
00089     private:
00090         static void         remove(int DBposition);             
00091         void                queueAt(int position);              
00092         void                correctPosition(int position);      
00093         bool                controls_active;
00094         ControlsWidget*     controls;
00095     };
00096 }
00097 
00098 #endif // QUEUEABLE_HPP