playlistbrowser.h
来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C头文件 代码 · 共 415 行
H
415 行
/*************************************************************************** * copyright : (c) 2004 Pierpaolo Di Panfilo * * (c) 2004 Mark Kretschmann <markey@web.de> * * (c) 2005-2006 Seb Ruiz <me@sebruiz.net> * * (c) 2005 Gábor Lehel <illissius@gmail.com> * * (c) 2006 Adam Pigg <adam@piggz.co.uk> * * See COPYING file for licensing information * ***************************************************************************/#ifndef PLAYLISTBROWSER_H#define PLAYLISTBROWSER_H#include "amarokconfig.h"#include "playlistbrowseritem.h"#include "podcastsettings.h"#include <kaction.h>#include <klistview.h>#include <kpushbutton.h>#include <kurl.h>#include <qdom.h>#include <qptrlist.h>#include <qvbox.h>class KTextBrowser;class KToolBar;class QCustomEvent;class QColorGroup;class QDragObject;class QPainter;class QPixmap;class QPoint;class QSplitter;class QTimer;class HTMLView;class InfoPane;class PlaylistBrowserView;class PlaylistTrackItem;class PlaylistBrowser : public QVBox{ Q_OBJECT friend class DynamicMode; friend class PlaylistBrowserView; friend class PlaylistBrowserEntry; friend class PlaylistCategory; friend class PlaylistEntry; friend class PlaylistTrackItem; friend class PodcastChannel; //for changing podcast timer list friend class PodcastEpisode; friend class DynamicEntry; friend class StreamEntry; friend class SmartPlaylist; public: enum AddMode { PLAYLIST, PLAYLIST_IMPORT, STREAM, SMARTPLAYLIST, PODCAST, ADDDYNAMIC }; ~PlaylistBrowser(); void setInfo( const QString &title, const QString &info ); void addStream( QListViewItem *parent = 0 ); void addSmartPlaylist( QListViewItem *parent = 0 ); void addDynamic( QListViewItem *parent = 0 ); void addPlaylist( const QString &path, QListViewItem *parent = 0, bool force=false, bool imported=false ); PlaylistEntry *findPlaylistEntry( const QString &url, QListViewItem *parent=0 ) const; int loadPlaylist( const QString &playlist, bool force=false ); void addPodcast( QListViewItem *parent = 0 ); void addPodcast( const KURL &url, QListViewItem *parent = 0 ); void loadPodcastsFromDatabase( PlaylistCategory *p = 0 ); void registerPodcastSettings( const QString &title, const PodcastSettings *settings ); static bool savePlaylist( const QString &path, const QValueList<KURL> &urls, const QValueList<QString> &titles = QValueList<QString>(), const QValueList<int> &lengths = QValueList<int>(), bool relative = AmarokConfig::relativePlaylist() ); QString dynamicBrowserCache() const; QString playlistBrowserCache() const; QString podcastBrowserCache() const; QString streamBrowserCache() const; QString smartplaylistBrowserCache() const; PlaylistBrowserEntry *findItem( QString &t, int c ) const; QListViewItem *findItemInTree( const QString &searchstring, int c ) const; PodcastEpisode *findPodcastEpisode( const KURL &episode, const KURL &feed ) const; QPtrList<PlaylistBrowserEntry> dynamicEntries() const { return m_dynamicEntries; } DynamicMode *findDynamicModeByTitle( const QString &title ); QListViewItem *podcastCategory() const { return m_podcastCategory; } static PlaylistBrowser *instance() { if(!s_instance) s_instance = new PlaylistBrowser("PlaylistBrowser"); return s_instance; } //following used by PlaylistSelection.cpp PlaylistBrowserView* getListView() const { return m_listview; } PlaylistCategory* getDynamicCategory() const { return m_dynamicCategory; } void saveDynamics(); protected: virtual void resizeEvent( QResizeEvent * ); signals: void selectionChanged(); public slots: void openPlaylist( QListViewItem *parent = 0 ); void scanPodcasts(); private slots: void abortPodcastQueue(); void addSelectedToPlaylist( int options = -1 ); void collectionScanDone(); void currentItemChanged( QListViewItem * ); void downloadPodcastQueue(); void editStreamURL( StreamEntry *item, const bool readOnly=false ); void removeSelectedItems(); void renamePlaylist( QListViewItem*, const QString&, int ); void renameSelectedItem(); void invokeItem( QListViewItem*, const QPoint &, int column ); void slotDoubleClicked( QListViewItem *item ); void slotAddMenu( int id ); void slotAddPlaylistMenu( int id ); void showContextMenu( QListViewItem*, const QPoint&, int ); void loadDynamicItems(); private: PlaylistBrowser( const char* name=0 ); void polish(); bool m_polished; PlaylistCategory* loadStreams(); void loadCoolStreams(); void saveStreams(); void loadLastfmStreams( const bool subscriber = false ); void addLastFmRadio( QListViewItem *parent ); void addLastFmCustomRadio( QListViewItem *parent ); void saveLastFm(); PlaylistCategory* loadSmartPlaylists(); void loadDefaultSmartPlaylists(); void editSmartPlaylist( SmartPlaylist* ); void saveSmartPlaylists( PlaylistCategory *smartCategory = NULL ); void updateSmartPlaylists( QListViewItem *root ); void updateSmartPlaylistElement( QDomElement& query ); PlaylistCategory* loadDynamics(); void fixDynamicPlaylistPath( QListViewItem *item ); QString guessPathFromPlaylistName( QString name ); PlaylistCategory* loadPodcasts(); QMap<int,PlaylistCategory*> loadPodcastFolders( PlaylistCategory *p ); void changePodcastInterval(); void configurePodcasts( QListViewItem *parent ); void configurePodcasts( QPtrList<PodcastChannel> &podcastChannelList, const QString &caption ); void configureSelectedPodcasts(); bool deleteSelectedPodcastItems( const bool removeItem=false, const bool silent=false ); bool deletePodcasts( QPtrList<PodcastChannel> items ); void downloadSelectedPodcasts(); void refreshPodcasts( QListViewItem *category ); void removePodcastFolder( PlaylistCategory *item ); void savePodcastFolderStates( PlaylistCategory *folder ); PodcastChannel *findPodcastChannel( const KURL &feed, QListViewItem *parent=0 ) const; void markDynamicEntries(); PlaylistBrowserEntry* findByName( QString name ); PlaylistCategory* loadPlaylists(); void savePlaylists(); void savePlaylist( PlaylistEntry * ); bool createPlaylist( QListViewItem *parent = 0, bool current = true, QString title = 0 ); bool deletePlaylists( QPtrList<PlaylistEntry> items ); bool deletePlaylists( KURL::List items ); void customEvent( QCustomEvent* e ); void saveM3U( PlaylistEntry *, bool append ); void savePLS( PlaylistEntry *, bool append ); void saveXSPF( PlaylistEntry *, bool append ); static KURL::List recurse( const KURL &url ); static PlaylistBrowser *s_instance; PlaylistCategory *m_playlistCategory; PlaylistCategory *m_streamsCategory; PlaylistCategory *m_smartCategory; PlaylistCategory *m_dynamicCategory; PlaylistCategory *m_podcastCategory; PlaylistCategory *m_coolStreams; PlaylistCategory *m_smartDefaults; PlaylistCategory *m_lastfmCategory; ShoutcastBrowser *m_shoutcastCategory; PlaylistEntry *m_lastPlaylist; DynamicEntry *m_randomDynamic; DynamicEntry *m_suggestedDynamic; bool m_coolStreamsOpen; bool m_smartDefaultsOpen; bool m_lastfmOpen; PlaylistBrowserView *m_listview; KActionCollection *m_ac; KAction *removeButton; KAction *renameButton; KActionMenu *viewMenuButton; KActionMenu *addMenuButton; KToolBar *m_toolbar; QValueList<int> m_dynamicSizeSave; QDict<PodcastSettings> m_podcastSettings; QPtrList<PlaylistBrowserEntry> m_dynamicEntries; QTimer *m_podcastTimer; int m_podcastTimerInterval; //in ms QPtrList<PodcastChannel> m_podcastItemsToScan; QPtrList<PodcastEpisode> m_podcastDownloadQueue; InfoPane *m_infoPane; bool m_removeDirt; QSplitter *m_splitter;};class PlaylistBrowserView : public KListView{ Q_OBJECT friend class PlaylistEntry; public: PlaylistBrowserView( QWidget *parent, const char *name=0 ); ~PlaylistBrowserView(); void rename( QListViewItem *item, int c ); protected: virtual void keyPressEvent( QKeyEvent * ); private slots: void mousePressed( int, QListViewItem *, const QPoint &, int ); void moveSelectedItems( QListViewItem* newParent ); private: void startDrag(); void contentsDropEvent( QDropEvent* ); void contentsDragEnterEvent( QDragEnterEvent* ); void contentsDragMoveEvent( QDragMoveEvent* ); void contentsDragLeaveEvent( QDragLeaveEvent* ); void viewportPaintEvent( QPaintEvent* ); void eraseMarker(); QListViewItem *m_marker; //track that has the drag/drop marker under it};class PlaylistDialog: public KDialogBase{ Q_OBJECT public: static QString getSaveFileName( const QString &suggestion = QString::null, bool proposeOverwriting = false ); private: KLineEdit *edit; bool customChosen; QString result; PlaylistDialog(); private slots: void slotOk(); void slotTextChanged( const QString &s ); void slotCustomPath();};// Returns true if item is Playlist, Stream, Smart Playlist or DynamicMode.inline boolisElement( QListViewItem *item ){ if( !item ) return false; return item->rtti() == ( PlaylistEntry::RTTI || StreamEntry::RTTI || SmartPlaylist::RTTI /*|| DynamicEntry::RTTI */) ? true : false;}inline boolisCategory( QListViewItem *item ){ if( !item ) return false; return item->rtti() == PlaylistCategory::RTTI ? true : false;}inline boolisDynamic( QListViewItem *item ){ if( !item ) return false; return item->rtti() == DynamicEntry::RTTI ? true : false;}inline boolisPlaylist( QListViewItem *item ){ if( !item ) return false; return item->rtti() == PlaylistEntry::RTTI ? true : false;}inline boolisSmartPlaylist( QListViewItem *item ){ if( !item ) return false; return item->rtti() == SmartPlaylist::RTTI ? true : false;}inline boolisPlaylistTrackItem( QListViewItem *item ){ if( !item ) return false; return item->rtti() == PlaylistTrackItem::RTTI ? true : false;}inline boolisPodcastChannel( QListViewItem *item ){ if( !item ) return false; return item->rtti() == PodcastChannel::RTTI ? true : false;}inline boolisPodcastEpisode( QListViewItem *item ){ if( !item ) return false; return item->rtti() == PodcastEpisode::RTTI ? true : false;}inline boolisStream( QListViewItem *item ){ if( !item ) return false; return item->rtti() == StreamEntry::RTTI ? true : false;}inline boolisLastFm( QListViewItem *item ){ if( !item ) return false; return item->rtti() == LastFmEntry::RTTI ? true : false;}inline QStringfileBaseName( const QString &filePath ){ // this function returns the file name without extension // (e.g. if the file path is "/home/user/playlist.m3u", "playlist" is returned QString fileName = filePath.right( filePath.length() - filePath.findRev( '/' ) - 1 ); return fileName.mid( 0, fileName.findRev( '.' ) );}inline QStringfileDirPath( const QString &filePath ){ return filePath.left( filePath.findRev( '/' )+1 );}class InfoPane : public QVBox{ Q_OBJECTpublic: InfoPane( QWidget *parent ); ~InfoPane(); int getHeight(); void setStoredHeight( const int newHeight );public slots: void setInfo( const QString &title, const QString &info );private slots: void toggle( bool );private: HTMLView *m_infoBrowser; KPushButton *m_pushButton; bool m_enable; int m_storedHeight;};#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?