Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

playlist.h

Go to the documentation of this file.
00001 #ifndef NOATUNPLAYLIST_H
00002 #define NOATUNPLAYLIST_H
00003 
00004 #include <qobject.h>
00005 #include <kurl.h>
00006 #include <qdict.h>
00007 #include <qstringlist.h>
00008 #include <cassert>
00009 
00010 class PlaylistItem;
00011 
00025 class PlaylistItemData
00026 {
00027 public:
00028         PlaylistItemData();
00029         virtual ~PlaylistItemData();
00030 
00041         virtual QString property(const QString &key, const QString &def=0) const=0;
00042 
00049         virtual void setProperty(const QString &key, const QString &property)=0;
00050 
00054         virtual void clearProperty(const QString &key)=0;
00055 
00059         virtual QStringList properties() const=0;
00060 
00064         virtual bool isProperty(const QString &key) const=0;
00065 
00076         virtual QString title() const;
00077 
00081         virtual KURL url() const { return KURL(property("url")); }
00085         virtual void setUrl(const KURL &url) { setProperty("url", url.url()); }
00086 
00091         virtual QCString mimetype() const;
00092 
00097         virtual QCString playObject() const;
00098         
00102         virtual QString file() const { return url().path(); }
00103 
00107         virtual int length() const;
00108 
00112         virtual void setLength(int ms);
00113 
00118         QString lengthString() const;
00119         
00127         virtual bool operator == (const PlaylistItemData &d) const;
00128 
00133         virtual bool operator != (const PlaylistItemData &d) const;
00134         
00138         virtual void remove() = 0;
00139         
00140 
00144         bool streamable() const  { return isProperty("stream_"); }
00145         
00146 public:
00151         void added();
00152 
00157         void removed();
00158 
00163         void modified();
00164 
00165 
00166 public: // reference counting
00173         void addRef() { mRefs++; }
00174         void removeRef() { mRefs--; if (!mRefs) delete this; }
00175 
00176 private:
00177         mutable int mRefs;
00178 };
00179 
00180 
00194 class PlaylistItem
00195 {
00196 public:
00197         PlaylistItem(const PlaylistItem &source);
00198         PlaylistItem(PlaylistItemData *source);
00199         PlaylistItem() : mData(0) {}
00200         ~PlaylistItem();
00201 
00202         PlaylistItem &operator =(const PlaylistItem &source);
00203         PlaylistItem &operator =(PlaylistItemData *source);
00204 
00205         PlaylistItemData *data() { return mData; }
00206         const PlaylistItemData *data() const { return mData; }
00207         
00208         const PlaylistItem &operator =(const PlaylistItem &source) const;
00209         const PlaylistItem &operator =(const PlaylistItemData *source) const;
00210 
00211         operator bool() const { return (bool)mData; }
00212         bool isNull() const { return !(bool)mData; }
00213 
00214         bool operator ==(const PlaylistItem &i) const
00215         {
00216                 if (data()==i.data()) return true;
00217                 if (!data() || !i.data()) return false;
00218                 return *i.data()==*data();
00219         }
00220         bool operator ==(const PlaylistItemData *i) const
00221         {
00222                 if (data()==i) return true;
00223                 if (!data() || !i) return false;
00224                 return *i==*data();
00225         }
00226 
00227         bool operator !=(const PlaylistItem &i) const
00228                 { return ! (*this==i); }
00229         bool operator !=(const PlaylistItemData *i) const
00230                 { return ! (*this->data()==*i); }
00231         
00232         QString property(const QString &key, const QString &def=0) const
00233         {
00234                 assert(mData);
00235                 return mData->property(key, def);
00236         }
00237         
00238         void setProperty(const QString &key, const QString &property)
00239         {
00240                 assert(mData);
00241                 const_cast<PlaylistItemData*>(mData)->setProperty(key, property);
00242         }
00243         
00244         void clearProperty(const QString &key)
00245         {
00246                 assert(mData);
00247                 const_cast<PlaylistItemData*>(mData)->clearProperty(key);
00248         }
00249         
00250         QStringList properties() const
00251         {
00252                 assert(mData);
00253                 return mData->properties();
00254         }
00255 
00256         bool isProperty(const QString &key) const
00257         {
00258                 assert(mData);
00259                 return mData->isProperty(key);
00260         }
00261 
00262         KURL url() const { assert(mData); return mData->url(); }
00263         void setUrl(const KURL &url)
00264         {
00265                 assert(mData);
00266                 const_cast<PlaylistItemData*>(mData)->setUrl(url);
00267         }
00268 
00269         QCString mimetype() const { assert(mData); return mData->mimetype(); }
00270         QCString playObject() const { assert(mData); return mData->playObject(); }
00271         QString file() const { assert(mData); return mData->file(); }
00272 
00273         QString title() const
00274         {
00275                 assert(mData);
00276                 return mData->title();
00277         }
00278 
00279         int length() const
00280         {
00281                 assert(mData);
00282                 return mData->length();
00283         }
00284 
00285         void setLength(int ms) const
00286         {
00287                 assert(mData);
00288                 mData->setLength(ms);
00289         }
00290 
00291         QString lengthString() const { assert(mData); return mData->lengthString(); }
00292         
00293         void remove() { assert(mData); mData->remove(); }
00294 
00295         bool streamable() const  { assert(mData); return mData->streamable(); }
00296 
00297 private:
00298         // reference counting
00299         void removeRef() const;
00300         void addRef() const; // requires mData already has item
00301 
00302 private:
00303         mutable PlaylistItemData *mData;
00304         void *_bc1, *_bc2;
00305 };
00306 
00315 class Playlist : public QObject
00316 {
00317 Q_OBJECT
00318         friend class PlaylistItemData;
00319 public:
00320         Playlist(QObject *parent, const char *name);
00325         virtual ~Playlist();
00326         
00330         virtual void reset()=0;
00331         
00335         virtual void clear()=0;
00336 
00340         virtual void addFile(const KURL&, bool play=false)=0;
00341 
00345         virtual PlaylistItem next()=0;
00346 
00351         virtual PlaylistItem nextSection();
00352 
00356         virtual PlaylistItem previous()=0;
00357 
00362         virtual PlaylistItem previousSection();
00363 
00367         virtual PlaylistItem current()=0;
00371         virtual void setCurrent(const PlaylistItem &)=0;
00372 
00376         virtual PlaylistItem getFirst() const =0;
00377 
00381         virtual PlaylistItem getAfter(const PlaylistItem &item) const =0;
00382          
00387         virtual bool listVisible() const =0;
00388         
00392         int handleArguments();
00393 
00418         virtual QValueList<PlaylistItem> select(
00419                         const QStringList &keys, const QStringList &values,
00420                         int limit=-1, bool exact=false, bool caseSensitive=false
00421                 );
00422         
00429         virtual QValueList<PlaylistItem> select(
00430                         const QString &key, const QString &value,
00431                         int limit=-1, bool exact=false, bool caseSensitive=false
00432                 );
00437         inline QValueList<PlaylistItem> select(
00438                         const char *key, const char *value,
00439                         int limit=-1, bool exact=false, bool caseSensitive=false
00440                 )
00441         {
00442                 return select(
00443                                 QString(key), QString(value),
00444                                 limit, exact, caseSensitive
00445                         );
00446         }
00447 
00448 public slots:
00452         virtual void showList()=0;
00456         virtual void hideList()=0;
00460         virtual void toggleList();
00461 
00462 signals:
00468         void playCurrent();
00469 
00473         void listHidden();
00474         
00478         void listShown();
00479 };
00480 
00489 class PlaylistNotifier
00490 {
00491 public:
00492         PlaylistNotifier();
00493         virtual ~PlaylistNotifier();
00494 
00498         virtual void added(PlaylistItem &) {}
00499 
00503         virtual void removed(PlaylistItem &) {}
00504 
00509         virtual void modified(PlaylistItem &) {}
00510 };
00511 
00512 
00513 #endif
00514 

Generated on Sat May 24 15:10:27 2003 for Noatun by doxygen1.3-rc3