⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediabrowser.h

📁 Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 经过两年开发后
💻 H
📖 第 1 页 / 共 2 页
字号:
// (c) 2004 Christian Muehlhaeuser <chris@chris.de>// (c) 2005 Martin Aumueller <aumuell@reserv.at>// (c) 2005 Seb Ruiz <me@sebruiz.net>// (c) 2006 T.R.Shashwath <trshash84@gmail.com>// See COPYING file for licensing information#ifndef AMAROK_MEDIABROWSER_H#define AMAROK_MEDIABROWSER_H#include "amarok.h"#include "amarok_export.h"#include "browserToolBar.h"#include "medium.h"#include "multitabbar.h"     //baseclass#include "plugin/plugin.h"   //baseclass#include "pluginmanager.h"#include <qmutex.h>#include <qvbox.h>           //baseclass#include <qdatetime.h>#include <klistview.h>       //baseclass#include <kurl.h>            //stack allocated#include <kio/global.h>      //filesize_t#include "scrobbler.h"       //SubmitItem#include "metabundle.h"class MediaBrowser;class MediaDevice;class MediaItemTip;class MediaView;class SpaceLabel;class TransferDialog;class KAction;class KComboBox;class KDialogBase;class KProgress;class KPushButton;class KShellProcess;class QDragObject;class QLabel;class QPalette;class LIBAMAROK_EXPORT MediaItem : public KListViewItem{    public:        MediaItem( QListView* parent );        MediaItem( QListViewItem* parent );        MediaItem( QListView* parent, QListViewItem* after );        MediaItem( QListViewItem* parent, QListViewItem* after );        void init();        virtual ~MediaItem();        MediaItem *lastChild() const;        virtual KURL url() const;        const MetaBundle *bundle() const;        void setBundle( MetaBundle *bundle );        enum Type { UNKNOWN, ARTIST, ALBUM, TRACK, PODCASTSROOT, PODCASTCHANNEL,                    PODCASTITEM, PLAYLISTSROOT, PLAYLIST, PLAYLISTITEM, INVISIBLEROOT,                    INVISIBLE, STALEROOT, STALE, ORPHANEDROOT, ORPHANED, DIRECTORY };        enum Flags { Failed=1, BeginTransfer=2, StopTransfer=4, Transferring=8, SmartPlaylist=16 };        void setType( Type type );        void setFailed( bool failed=true );        Type type() const { return m_type; }        MediaItem *findItem(const QString &key, const MediaItem *after=0) const;        const QString &data() const { return m_data; }        void setData( const QString &data ) { m_data = data; }        virtual bool isLeafItem()     const;        // A leaf node of the tree        virtual bool isFileBacked()   const;      // Should the file be deleted of the device when removed        virtual QDateTime playTime()  const { return QDateTime(); }        virtual int  played()         const { return 0; }        virtual int  recentlyPlayed() const { return 0; } // no of times played on device since last sync        virtual void setPlayCount( int ) {}        virtual int  rating()         const { return 0; } // rating on device, normalized to 100        virtual void setRating( int /*rating*/ ) {}        virtual bool ratingChanged()  const { return false; }        virtual void setLastPlayed( uint ) {}        virtual void syncStatsFromPath( const QString &path );        virtual long size()           const;        virtual MediaDevice *device() const { return m_device; }        virtual bool listened()       const { return m_listened; }        virtual void setListened( bool listened=true ) { m_listened = listened; }        int compare( QListViewItem *i, int col, bool ascending ) const;        int flags() const { return m_flags; }        void paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align );        //attributes:        int             m_order;        Type            m_type;        QString         m_playlistName;        QString         m_data;        MediaDevice    *m_device;        int             m_flags;        bool            m_listened;        static QPixmap *s_pixUnknown;        static QPixmap *s_pixRootItem;        static QPixmap *s_pixFile;        static QPixmap *s_pixArtist;        static QPixmap *s_pixAlbum;        static QPixmap *s_pixPlaylist;        static QPixmap *s_pixPodcast;        static QPixmap *s_pixTrack;        static QPixmap *s_pixInvisible;        static QPixmap *s_pixStale;        static QPixmap *s_pixOrphaned;        static QPixmap *s_pixDirectory;        static QPixmap *s_pixTransferFailed;        static QPixmap *s_pixTransferBegin;        static QPixmap *s_pixTransferEnd;    private:        mutable MetaBundle *m_bundle;};class MediaQueue : public KListView, public DropProxyTarget{    Q_OBJECT    public:        MediaQueue(MediaBrowser *parent);        MediaItem *findPath( QString path );        KIO::filesize_t totalSize() const; // total size of items to transfer in KB        void computeSize() const; // compute total size of items to transfer in KB        void addItemToSize( const MediaItem *item ) const;        void subtractItemFromSize( const MediaItem *item, bool unconditonally=false ) const;        void removeSelected();        void clearItems();        void load( const QString &path );        void save( const QString &path );        void syncPlaylist( const QString &playlistName, const QString &sql, bool loading=false );        void syncPlaylist( const QString &playlistName, const KURL &url, bool loading=false );        void addURL( const KURL& url, MetaBundle *bundle=NULL, const QString &playlistName=QString::null );        void addURL( const KURL& url, MediaItem *item );        void addURLs( const KURL::List urls, const QString &playlistName=QString::null );        void URLsAdded(); // call after finishing adding single urls        void dropProxyEvent( QDropEvent *e );        // Reimplemented from KListView        bool acceptDrag( QDropEvent *e ) const;        QDragObject *dragObject();    public slots:        void itemCountChanged();    private slots:        void selectAll() {QListView::selectAll(true); }        void slotShowContextMenu( QListViewItem* item, const QPoint& point, int );        void slotDropped (QDropEvent* e, QListViewItem* parent, QListViewItem* after);    private:        void keyPressEvent( QKeyEvent *e );        MediaBrowser *m_parent;        mutable KIO::filesize_t m_totalSize;};class MediaBrowser : public QVBox{    Q_OBJECT    friend class DeviceConfigureDialog;    friend class MediaDevice;    friend class MediaView;    friend class MediaQueue;    friend class MediumPluginChooser;    friend class MediaItem;    public:        enum { CONNECT, DISCONNECT, TRANSFER, CONFIGURE, CUSTOM };        static bool isAvailable();        LIBAMAROK_EXPORT static MediaBrowser *instance() { return s_instance; }        LIBAMAROK_EXPORT static MediaQueue *queue() { return s_instance ? s_instance->m_queue : 0; }        MediaBrowser( const char *name );        virtual ~MediaBrowser();        bool blockQuit() const;        MediaDevice *currentDevice() const;        MediaDevice *deviceFromId( const QString &id ) const;        QStringList deviceNames() const;        bool deviceSwitch( const QString &name );        QString getInternalPluginName ( const QString string ) { return m_pluginName[string]; }        QString getDisplayPluginName ( const QString string ) { return m_pluginAmarokName[string]; }        const KTrader::OfferList &getPlugins() { return m_plugins; }        void transcodingFinished( const QString &src, const QString &dst );        bool isTranscoding() const { return m_waitForTranscode; }        void updateStats();        void updateButtons();        void updateDevices();        // return bundle for url if it is known to MediaBrowser        bool getBundle( const KURL &url, MetaBundle *bundle ) const;        bool isQuitting() const { return m_quitting; }        KURL getProxyUrl( const KURL& daapUrl ) const;        KToolBar* getToolBar() const { return m_toolbar; }    signals:        void availabilityChanged( bool isAvailable );    protected slots:        void transferClicked();    private slots:        void slotSetFilterTimeout();        void slotSetFilter();        void slotSetFilter( const QString &filter );        void slotEditFilter();        void mediumAdded( const Medium *, QString , bool constructing = false);        void mediumChanged( const Medium *, QString );        void mediumRemoved( const Medium *, QString );        void activateDevice( const MediaDevice *device );        void activateDevice( int index, bool skipDummy = true );        void pluginSelected( const Medium *, const QString );        void showPluginManager();        void cancelClicked();        void connectClicked();        void disconnectClicked();        void customClicked();        void configSelectPlugin( int index );        bool config(); // false if canceled by user        KURL transcode( const KURL &src, const QString &filetype );        void tagsChanged( const MetaBundle &bundle );        void prepareToQuit();    private:        MediaDevice *loadDevicePlugin( const QString &deviceName );        void         unloadDevicePlugin( MediaDevice *device );        KLineEdit* m_searchEdit;        QTimer *m_timer;        LIBAMAROK_EXPORT static MediaBrowser *s_instance;        QValueList<MediaDevice *> m_devices;        QValueList<MediaDevice *>::iterator m_currentDevice;        QMap<QString, QString> m_pluginName;        QMap<QString, QString> m_pluginAmarokName;        void addDevice( MediaDevice *device );        void removeDevice( MediaDevice *device );        MediaQueue* m_queue;        bool m_waitForTranscode;        KURL m_transcodedUrl;        QString m_transcodeSrc;        SpaceLabel*      m_stats;        QHBox*           m_progressBox;        KProgress*       m_progress;        QVBox*           m_views;        KPushButton*     m_cancelButton;        //KPushButton*     m_playlistButton;        QVBox*           m_configBox;        KComboBox*       m_configPluginCombo;        KComboBox*       m_deviceCombo;        Browser::ToolBar*m_toolbar;        typedef QMap<QString, MediaItem*> ItemMap;        mutable QMutex   m_itemMapMutex;        ItemMap          m_itemMap;        KTrader::OfferList m_plugins;        bool             m_haveDevices;        bool             m_quitting;};class MediaView : public KListView{    Q_OBJECT    friend class MediaBrowser;    friend class MediaDevice;    public:        enum Flags        {            None = 0,            OnlySelected = 1,            OnlyPlayed = 2        };        MediaView( QWidget *parent, MediaDevice *device );        virtual ~MediaView();        LIBAMAROK_EXPORT KURL::List nodeBuildDragList( MediaItem* item, int flags=OnlySelected );        int getSelectedLeaves(MediaItem *parent, QPtrList<MediaItem> *list, int flags=OnlySelected );        LIBAMAROK_EXPORT MediaItem *newDirectory( MediaItem* parent );        bool setFilter( const QString &filter, MediaItem *parent=NULL );    private slots:        void rmbPressed( QListViewItem*, const QPoint&, int );        void renameItem( QListViewItem *item );        void slotExpand( QListViewItem* );        void selectAll() { QListView::selectAll(true); }        void invokeItem( QListViewItem*, const QPoint &, int column );        void invokeItem( QListViewItem* );    private:        void keyPressEvent( QKeyEvent *e );        // Reimplemented from KListView        void contentsDropEvent( QDropEvent *e );        void viewportPaintEvent( QPaintEvent* );        bool acceptDrag( QDropEvent *e ) const;        QDragObject *dragObject();        QWidget *m_parent;        MediaDevice *m_device;        MediaItemTip *m_toolTip;};/* at least the pure virtual functions have to be implemented by a media device,   all items are stored in a hierarchy of MediaItems,   when items are manipulated the MediaItems have to be updated accordingly */class LIBAMAROK_EXPORT MediaDevice : public QObject, public Amarok::Plugin{    Q_OBJECT    friend class DeviceConfigureDialog;    friend class TransferDialog;    friend class MediaBrowser;    friend class MediaView;    friend class MediaQueue;    public:        enum Flags

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -