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 + -
显示快捷键?