?? playlistbrowseritem.h
字號:
/*************************************************************************** * copyright : (c) 2004 Pierpaolo Di Panfilo * * (c) 2005-2006 Seb Ruiz <me@sebruiz.net> * * (c) 2006 Bart Cerneels <bart.cerneels@gmail.com> * * (c) 2006 Adam Pigg <adam@piggz.co.uk> * * (c) 2006 Bonne Eggleston <b.eggleston@gmail.com> * * See COPYING file for licensing information * ***************************************************************************/#ifndef PLAYLISTBROWSERITEM_H#define PLAYLISTBROWSERITEM_H#include "dynamicmode.h"#include "podcastbundle.h"#include "podcastsettings.h"#include <kdialogbase.h> // StreamEditor baseclass#include <kio/job.h>#include <klineedit.h>#include <klistview.h>#include <kurl.h>#include <qdom.h>#include <qfile.h>#include <qhttp.h>#include <qptrlist.h>#include <qtimer.h> // Podcast loading animation#include <qurl.h>class MetaBundle;class PlaylistTrackItem;class TrackItemInfo;namespace KIO { class Job; class TransferJob; class CopyJob; } //podcast downloads/** * RTTI VALUES * 1000 - PlaylistCategory * 1001 - PlaylistEntry * 1002 - PlaylistTrackItem * 1003 - StreamEntry * 1004 - SmartPlaylist * 1005 - DynamicEntry (Dynamic) * 1006 - PodcastChannel * 1007 - PodcastEpisode *//* A base class to be able to use polymorphism and avoid tons of casts */class PlaylistBrowserEntry : public QObject, public KListViewItem{ Q_OBJECT public: PlaylistBrowserEntry( QListViewItem *parent, QListViewItem *after ) : KListViewItem( parent, after) { m_kept = true; } PlaylistBrowserEntry( QListView *parent, QListViewItem *after ) : KListViewItem( parent, after) { m_kept = true; } PlaylistBrowserEntry( QListViewItem *parent, QListViewItem *after, const QString &name ) : KListViewItem( parent, after, name) { m_kept = true; } virtual QDomElement xml() const { return QDomElement(); } QListViewItem* parent() const { return KListViewItem::parent(); } bool isKept() const { return m_kept; } // if kept == true, then it will be saved void setKept( bool k ); // to the cache files. If false, non-renameable virtual void updateInfo(); virtual void setDynamic( bool ) {}; public slots: virtual void slotDoubleClicked(); virtual void slotRenameItem(); virtual void slotPostRenameItem( const QString newName ); virtual void showContextMenu( const QPoint & ) {}; protected: virtual int compare( QListViewItem*, int, bool ) const; //reimplemented /** Interval of the download pixmap animation, in milliseconds */ static const int ANIMATION_INTERVAL = 250; private: bool m_kept;};class DynamicEntry : public PlaylistBrowserEntry, public DynamicMode{ Q_OBJECT public: DynamicEntry( QListViewItem *parent, QListViewItem *after, const QString &title ); DynamicEntry( QListViewItem *parent, QListViewItem *after, const QDomElement &xmlDefinition ); ~DynamicEntry() { }; virtual QString text( int column ) const; virtual QDomElement xml() const; static const int RTTI = 1005; int rtti() const { return RTTI; } public slots: virtual void slotDoubleClicked(); virtual void showContextMenu( const QPoint & );};class PlaylistCategory : public PlaylistBrowserEntry{ Q_OBJECT public: PlaylistCategory( QListView *parent, QListViewItem *after, const QString &, bool isFolder=false ); PlaylistCategory( PlaylistCategory *parent, QListViewItem *after, const QString &, bool isFolder=true ); PlaylistCategory( QListView *parent, QListViewItem *after, const QDomElement &xmlDefinition, bool isFolder=false); PlaylistCategory( PlaylistCategory *parent, QListViewItem *after, const QDomElement &xmlDefinition ); PlaylistCategory( PlaylistCategory *parent, QListViewItem *after, const QString &t, const int id ); ~PlaylistCategory() { }; const QString &title() const { return m_title; } bool isFolder() { return m_folder; } void paintCell( QPainter*, const QColorGroup&, int, int, int ); void setId( const int id ) { m_id = id; } const int id() const { return m_id; } virtual QDomElement xml() const; int rtti() const { return RTTI; } static const int RTTI = 1000; //category item public slots: virtual void slotDoubleClicked(); virtual void slotRenameItem(); virtual void showContextMenu( const QPoint & ); protected: void okRename( int col ); private: void setXml( const QDomElement &xml ); QString m_title; int m_id; bool m_folder;};class PlaylistEntry : public PlaylistBrowserEntry{ Q_OBJECT friend class PlaylistTrackItem; friend class TrackItemInfo; friend class PlaylistCategory; public: PlaylistEntry( QListViewItem *parent, QListViewItem *after, const KURL &, int tracks=0, int length=0 ); PlaylistEntry( QListViewItem *parent, QListViewItem *after, const QDomElement &xmlDefinition ); ~PlaylistEntry(); void sortChildItems ( int /*column*/, bool /*ascending*/ ) { /* Don't sort its children */ }; //reimplemented void load(); const KURL &url() const { return m_url; } void setUrl( const QString &u ) { m_url.setPath( u ); } int trackCount() const { return m_trackCount; } int length() const { return m_length; } bool isDynamic() const { return m_dynamic; } bool isLoaded() const { return m_loaded; } void setDynamic( bool ); int compare( QListViewItem* i, int col ) const; //reimpl. KURL::List tracksURL(); //returns the list of tracks url void insertTracks( QListViewItem *after, KURL::List list ); void insertTracks( QListViewItem *after, QValueList<MetaBundle> bundles ); // isLast is used to avoid saving the playlist to disk every time a track is removed // when removing a list of tracks from the playlist void removeTrack( QListViewItem *item, bool isLast = true ); //returns a list of track information QPtrList<TrackItemInfo> trackList() const { return m_trackList; } QPtrList<TrackItemInfo> droppedTracks() const { return tmp_droppedTracks; } void setOpen( bool ); void setup(); void paintCell( QPainter*, const QColorGroup&, int, int, int ); virtual QDomElement xml() const; virtual void updateInfo(); //rtti is used to distinguish different kinds of list view items int rtti() const { return RTTI; } static const int RTTI = 1001; //playlist item public slots: virtual void slotDoubleClicked(); virtual void slotPostRenameItem( const QString newName ); virtual void showContextMenu( const QPoint & ); signals: void startingLoading(); void loaded(); private slots: void slotAnimation(); private: void customEvent( QCustomEvent* e ); void startAnimation(); void stopAnimation(); KURL m_url; //playlist url int m_length; //total length in seconds int m_trackCount; //track counter QPtrList<TrackItemInfo> m_trackList; //tracks in playlist QPtrList<TrackItemInfo> tmp_droppedTracks; //tracks dropped to the playlist while it wasn't been loaded bool m_loading; bool m_loaded; //playlist loaded bool m_dynamic; //the playlist is scheduled for dynamic mode rotation QPixmap *m_loading1, *m_loading2; //icons for loading animation QTimer m_animationTimer; uint m_iconCounter; PlaylistTrackItem *m_lastTrack;};class PlaylistTrackItem : public PlaylistBrowserEntry{ Q_OBJECT friend class TrackItemInfo; public: PlaylistTrackItem( QListViewItem *parent, QListViewItem *after, TrackItemInfo *info ); const KURL &url(); TrackItemInfo *trackInfo() const { return m_trackInfo; } int rtti() const { return RTTI; } static const int RTTI = 1002; //track item public slots: virtual void slotDoubleClicked(); virtual void slotRenameItem() { /* Do nothing */ }; virtual void showContextMenu( const QPoint & ); private: TrackItemInfo *m_trackInfo;};/// Stored in the databaseclass PodcastEpisode : public PlaylistBrowserEntry{ Q_OBJECT public: PodcastEpisode( QListViewItem *parent, QListViewItem *after, const QDomElement &xml, const int feedType, const bool &isNew=false ); PodcastEpisode( QListViewItem *parent, QListViewItem *after, PodcastEpisodeBundle &bundle ); void downloadMedia(); void setOnDisk( bool d = true ); QListViewItem *itemChannel() { return m_parent; } const bool isNew() const { return m_bundle.isNew(); } void setNew( const bool &n = true ); void setListened( const bool &n = true ) { setNew( !n ); } // for convenience const int dBId() const { return m_bundle.dBId(); } const KURL url() const { return m_bundle.url(); } const QString title() const { return m_bundle.title(); } const QString author() const { return m_bundle.author(); } const QString date() const { return m_bundle.date(); } const QString type() const { return m_bundle.type(); } const QString description() const { return m_bundle.description(); } const QString guid() const { return m_bundle.guid(); } const int duration() const { return m_bundle.duration(); } const KURL &localUrl() const { return m_bundle.localUrl(); } void setLocalUrlBase( const QString &s ); void setLocalUrl( const KURL &localUrl ); void setup(); void paintCell( QPainter*, const QColorGroup&, int, int, int ); virtual void updateInfo(); void addToMediaDevice(); int rtti() const { return RTTI; } static const int RTTI = 1007; //PodcastEpisode static void createLocalDir( const KURL &localDir ); signals: void downloadFinished(); void downloadAborted(); public slots: const bool isOnDisk(); virtual void slotDoubleClicked(); virtual void slotRenameItem() { /* Do nothing */ }; virtual void showContextMenu( const QPoint & ); private slots: void abortDownload(); void downloadResult( KIO::Job * transferJob ); void slotAnimation(); void redirected( KIO::Job * job,const KURL & redirectedUrl ); private: enum FeedType{ RSS=0, ATOM=1 }; virtual int compare( QListViewItem*, int, bool ) const; //reimplemented void associateWithLocalFile();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -