Noatun API Documentation

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 
00029 class PlaylistItemData
00030 {
00031 public:
00032         PlaylistItemData();
00033         virtual ~PlaylistItemData();
00034 
00045         virtual QString property(const QString &key, const QString &def=0) const=0;
00046 
00053         virtual void setProperty(const QString &key, const QString &property)=0;
00054 
00058         virtual void clearProperty(const QString &key)=0;
00059 
00063         virtual QStringList properties() const=0;
00064 
00068         virtual bool isProperty(const QString &key) const=0;
00069 
00080         virtual QString title() const;
00081 
00085         virtual KURL url() const { return KURL(property("url")); }
00089         virtual void setUrl(const KURL &url) { setProperty("url", url.url()); }
00090 
00095         virtual QCString mimetype() const;
00096 
00101         virtual QCString playObject() const;
00102 
00106         virtual QString file() const { return url().path(); }
00107 
00111         virtual int length() const;
00112 
00116         virtual void setLength(int ms);
00117 
00122         QString lengthString() const;
00123 
00131         virtual bool operator == (const PlaylistItemData &d) const;
00132 
00137         virtual bool operator != (const PlaylistItemData &d) const;
00138 
00142         virtual void remove() = 0;
00143 
00144 
00148         bool streamable() const  { return isProperty("stream_"); }
00149 
00150 public:
00155         void added();
00156 
00161         void removed();
00162 
00167         void modified();
00168 
00169 
00170 public: // reference counting
00177         void addRef() { mRefs++; }
00178         void removeRef()
00179         {
00180                 mRefs--;
00181                 if (!mRefs)
00182                         delete this;
00183         }
00184 
00185 private:
00186         mutable int mRefs;
00187 };
00188 
00189 
00207 class PlaylistItem
00208 {
00209 public:
00210         PlaylistItem(const PlaylistItem &source);
00211         PlaylistItem(PlaylistItemData *source);
00212         PlaylistItem() : mData(0) {}
00213         ~PlaylistItem();
00214 
00215         PlaylistItem &operator =(const PlaylistItem &source);
00216         PlaylistItem &operator =(PlaylistItemData *source);
00217 
00218         PlaylistItemData *data() { return mData; }
00219         const PlaylistItemData *data() const { return mData; }
00220 
00221         const PlaylistItem &operator =(const PlaylistItem &source) const;
00222         const PlaylistItem &operator =(const PlaylistItemData *source) const;
00223 
00224         operator bool() const { return (bool)mData; }
00225         bool isNull() const { return !(bool)mData; }
00226 
00227         bool operator ==(const PlaylistItem &i) const
00228         {
00229                 if (data()==i.data()) return true;
00230                 if (!data() || !i.data()) return false;
00231                 return *i.data()==*data();
00232         }
00233         bool operator ==(const PlaylistItemData *i) const
00234         {
00235                 if (data()==i) return true;
00236                 if (!data() || !i) return false;
00237                 return *i==*data();
00238         }
00239 
00240         bool operator !=(const PlaylistItem &i) const
00241                 { return ! (*this==i); }
00242         bool operator !=(const PlaylistItemData *i) const
00243                 { return ! (*this->data()==*i); }
00244 
00245         QString property(const QString &key, const QString &def=0) const
00246         {
00247                 assert(mData);
00248                 return mData->property(key, def);
00249         }
00250 
00251         void setProperty(const QString &key, const QString &property)
00252         {
00253                 assert(mData);
00254                 const_cast<PlaylistItemData*>(mData)->setProperty(key, property);
00255         }
00256 
00257         void clearProperty(const QString &key)
00258         {
00259                 assert(mData);
00260                 const_cast<PlaylistItemData*>(mData)->clearProperty(key);
00261         }
00262 
00263         QStringList properties() const
00264         {
00265                 assert(mData);
00266                 return mData->properties();
00267         }
00268 
00269         bool isProperty(const QString &key) const
00270         {
00271                 assert(mData);
00272                 return mData->isProperty(key);
00273         }
00274 
00275         KURL url() const { assert(mData); return mData->url(); }
00276         void setUrl(const KURL &url)
00277         {
00278                 assert(mData);
00279                 const_cast<PlaylistItemData*>(mData)->setUrl(url);
00280         }
00281 
00282         QCString mimetype() const { assert(mData); return mData->mimetype(); }
00283         QCString playObject() const { assert(mData); return mData->playObject(); }
00284         QString file() const { assert(mData); return mData->file(); }
00285 
00286         QString title() const
00287         {
00288                 assert(mData);
00289                 return mData->title();
00290         }
00291 
00292         int length() const
00293         {
00294                 assert(mData);
00295                 return mData->length();
00296         }
00297 
00298         void setLength(int ms) const
00299         {
00300                 assert(mData);
00301                 mData->setLength(ms);
00302         }
00303 
00304         QString lengthString() const { assert(mData); return mData->lengthString(); }
00305 
00306         void remove() { assert(mData); mData->remove(); }
00307 
00308         bool streamable() const  { assert(mData); return mData->streamable(); }
00309 
00310 private:
00311         // reference counting
00312         void removeRef() const;
00313         void addRef() const; // requires mData already has item
00314 
00315 private:
00316         mutable PlaylistItemData *mData;
00317         void *_bc1, *_bc2;
00318 };
00319 
00328 class Playlist : public QObject
00329 {
00330 Q_OBJECT
00331         friend class PlaylistItemData;
00332 public:
00333         Playlist(QObject *parent, const char *name);
00338         virtual ~Playlist();
00339 
00343         virtual void reset()=0;
00344 
00348         virtual void clear()=0;
00349 
00353         virtual void addFile(const KURL&, bool play=false)=0;
00354 
00358         virtual PlaylistItem next()=0;
00359 
00364         virtual PlaylistItem nextSection();
00365 
00369         virtual PlaylistItem previous()=0;
00370 
00375         virtual PlaylistItem previousSection();
00376 
00380         virtual PlaylistItem current()=0;
00384         virtual void setCurrent(const PlaylistItem &)=0;
00385 
00389         virtual PlaylistItem getFirst() const =0;
00390 
00397         virtual PlaylistItem getAfter(const PlaylistItem &item) const =0;
00398 
00403         virtual bool listVisible() const =0;
00404 
00408         int handleArguments();
00409 
00434         virtual QValueList<PlaylistItem> select(
00435                         const QStringList &keys, const QStringList &values,
00436                         int limit=-1, bool exact=false, bool caseSensitive=false
00437                 );
00438 
00445         virtual QValueList<PlaylistItem> select(
00446                         const QString &key, const QString &value,
00447                         int limit=-1, bool exact=false, bool caseSensitive=false
00448                 );
00453         inline QValueList<PlaylistItem> select(
00454                         const char *key, const char *value,
00455                         int limit=-1, bool exact=false, bool caseSensitive=false
00456                 )
00457         {
00458                 return select(
00459                                 QString(key), QString(value),
00460                                 limit, exact, caseSensitive
00461                         );
00462         }
00463 
00464 public slots:
00468         virtual void showList()=0;
00472         virtual void hideList()=0;
00476         virtual void toggleList();
00477 
00478 signals:
00484         void playCurrent();
00485 
00489         void listHidden();
00490 
00494         void listShown();
00495 };
00496 
00505 class PlaylistNotifier
00506 {
00507 public:
00508         PlaylistNotifier();
00509         virtual ~PlaylistNotifier();
00510 
00514         virtual void added(PlaylistItem &) {}
00515 
00519         virtual void removed(PlaylistItem &) {}
00520 
00525         virtual void modified(PlaylistItem &) {}
00526 };
00527 
00528 
00529 #endif
00530 
KDE Logo
This file is part of the documentation for Noatun 2.6.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Oct 22 00:20:36 2004 by doxygen 1.3.8-20040913 written by Dimitri van Heesch, © 1997-2003