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:
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
00312 void removeRef() const;
00313 void addRef() const;
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
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