亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? playlistbrowseritem.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統中運行的音頻播放器軟件。 經過兩年開發后
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/*************************************************************************** * copyright            : (c) 2004 Pierpaolo Di Panfilo                    * *                        (c) 2004 Mark Kretschmann <markey@web.de>        * *                        (c) 2005-2006 Seb Ruiz <me@sebruiz.net>          * *                        (c) 2005 Christian Muehlhaeuser <chris@chris.de> * *                        (c) 2006 Bart Cerneels <bart.cerneels@gmail.com> * *                        (c) 2006 Ian Monroe <ian@monroe.nu>              * *                        (c) 2006 Alexandre Oliveira <aleprj@gmail.com>   * *                        (c) 2006 Adam Pigg <adam@piggz.co.uk>            * *                        (c) 2006 Bonne Eggleston <b.eggleston@gmail.com> * * See COPYING file for licensing information                              * ***************************************************************************/#include "amarok.h"#include "collectiondb.h"#include "debug.h"#include "dynamicmode.h"#include "k3bexporter.h"#include "playlist.h"#include "playlistbrowser.h"#include "playlistbrowseritem.h"#include "playlistloader.h"    //load()#include "playlistselection.h"#include "podcastbundle.h"#include "podcastsettings.h"#include "progressBar.h"#include "metabundle.h"#include "statusbar.h"#include "tagdialog.h"#include "threadmanager.h"#include "mediabrowser.h"#include <qdatetime.h>#include <qfileinfo.h>#include <qlabel.h>#include <qpainter.h>          //paintCell()#include <qpixmap.h>           //paintCell()#include <qregexp.h>#include <kapplication.h>      //Used for Shoutcast random name generation#include <kdeversion.h>        //KDE_VERSION ifndefs.  Remove this once we reach a kde 4 dep#include <kiconloader.h>       //smallIcon#include <kio/jobclasses.h>    //podcast retrieval#include <kio/job.h>           //podcast retrieval#include <klocale.h>#include <kmessagebox.h>       //podcast info box#include <kmimetype.h>#include <kpopupmenu.h>#include <krun.h>#include <kstandarddirs.h>     //podcast loading icons#include <kstringhandler.h>#include <ktrader.h>#include <kurlrequester.h>#include <cstdio>             //rename////////////////////////////////////////////////////////////////////////////////    CLASS PlaylistReader////////////////////////////////////////////////////////////////////////////class PlaylistReader : public ThreadManager::DependentJob{    public:        PlaylistReader( QObject *recipient, const QString &path )                : ThreadManager::DependentJob( recipient, "PlaylistReader" )                , m_path( QDeepCopy<QString>( path ) ) {}        virtual bool doJob() {            DEBUG_BLOCK            PlaylistFile pf = PlaylistFile( m_path );            title = pf.title();            for( BundleList::iterator it = pf.bundles().begin();                    it != pf.bundles().end();                    ++it )                bundles += MetaBundle( (*it).url() );            return true;        }        virtual void completeJob() {            DEBUG_BLOCK            PlaylistFile pf = PlaylistFile( m_path );            bundles = QDeepCopy<BundleList>( bundles );            title = QDeepCopy<QString>( title );            for( BundleList::iterator it = bundles.begin();                    it != bundles.end();                    ++it )                *it = QDeepCopy<MetaBundle>( *it );            ThreadManager::DependentJob::completeJob();        }        BundleList bundles;        QString    title;    private:        const QString m_path;};////////////////////////////////////////////////////////////////////////////////    CLASS PlaylistBrowserEntry////////////////////////////////////////////////////////////////////////////intPlaylistBrowserEntry::compare( QListViewItem* item, int col, bool ascending ) const{    bool i1 = rtti() == PlaylistCategory::RTTI;    bool i2 = item->rtti() == PlaylistCategory::RTTI;    // If only one of them is a category, make it show up before    if ( i1 != i2 )        return i1 ? -1 : 1;    else if ( i1 ) //both are categories    {        PlaylistBrowser * const pb = PlaylistBrowser::instance();        QValueList<PlaylistCategory*> toplevels; //define a static order for the toplevel categories        toplevels << pb->m_playlistCategory                  << pb->m_smartCategory                  << pb->m_dynamicCategory                  << pb->m_streamsCategory                  << pb->m_podcastCategory;        for( int i = 0, n = toplevels.count(); i < n; ++i )        {            if( this == toplevels[i] )                return ascending ? -1 : 1; //same order whether or not it's ascending            if( item == toplevels[i] )                return ascending ? 1 : -1;        }    }    return KListViewItem::compare(item, col, ascending);}voidPlaylistBrowserEntry::setKept( bool k ){    m_kept = k;    if ( !k )   //Disable renaming by two single clicks        setRenameEnabled( 0, false );}voidPlaylistBrowserEntry::updateInfo(){    PlaylistBrowser::instance()->setInfo( QString::null, QString::null );    return;}voidPlaylistBrowserEntry::slotDoubleClicked(){    warning() << "No functionality for item double click implemented" << endl;}voidPlaylistBrowserEntry::slotRenameItem(){    QListViewItem *parent = KListViewItem::parent();    while( parent )    {        if( !static_cast<PlaylistBrowserEntry*>( parent )->isKept() )            return;        if( !parent->parent() )            break;        parent = parent->parent();    }    setRenameEnabled( 0, true );    static_cast<PlaylistBrowserView*>( listView() )->rename( this, 0 );}voidPlaylistBrowserEntry::slotPostRenameItem( const QString /*newName*/ ){    setRenameEnabled( 0, false );}////////////////////////////////////////////////////////////////////////////////    CLASS PlaylistCategory////////////////////////////////////////////////////////////////////////////PlaylistCategory::PlaylistCategory( QListView *parent, QListViewItem *after, const QString &t, bool isFolder )    : PlaylistBrowserEntry( parent, after )    , m_title( t )    , m_id( -1 )    , m_folder( isFolder ){    setDragEnabled( false );    setRenameEnabled( 0, isFolder );    setPixmap( 0, SmallIcon( Amarok::icon( "files2" ) ) );    setText( 0, t );}PlaylistCategory::PlaylistCategory( PlaylistCategory *parent, QListViewItem *after, const QString &t, bool isFolder )    : PlaylistBrowserEntry( parent, after )    , m_title( t )    , m_id( -1 )    , m_folder( isFolder ){    setDragEnabled( false );    setRenameEnabled( 0, isFolder );    setPixmap( 0, SmallIcon( Amarok::icon( "files" ) ) );    setText( 0, t );}PlaylistCategory::PlaylistCategory( QListView *parent, QListViewItem *after, const QDomElement &xmlDefinition, bool isFolder )    : PlaylistBrowserEntry( parent, after )    , m_id( -1 )    , m_folder( isFolder ){    setXml( xmlDefinition );    setDragEnabled( false );    setRenameEnabled( 0, isFolder );    setPixmap( 0, SmallIcon( Amarok::icon( "files2") ) );}PlaylistCategory::PlaylistCategory( PlaylistCategory *parent, QListViewItem *after, const QDomElement &xmlDefinition )    : PlaylistBrowserEntry( parent, after )    , m_id( -1 )    , m_folder( true ){    setXml( xmlDefinition );    setDragEnabled( false );    setRenameEnabled( 0, true );    setPixmap( 0, SmallIcon( Amarok::icon( "files" ) ) );}PlaylistCategory::PlaylistCategory( PlaylistCategory *parent, QListViewItem *after, const QString &t, const int id )    : PlaylistBrowserEntry( parent, after )    , m_title( t )    , m_id( id )    , m_folder( true ){    setDragEnabled( false );    setRenameEnabled( 0, true );    setPixmap( 0, SmallIcon( Amarok::icon( "files" ) ) );    setText( 0, t );}void PlaylistCategory::okRename( int col ){    QListViewItem::okRename( col );    if( m_id < 0 )  return;    // update the database entry to have the correct name    const int parentId = parent() ? static_cast<PlaylistCategory*>(parent())->id() : 0;    CollectionDB::instance()->updatePodcastFolder( m_id, text(0), parentId, isOpen() );}void PlaylistCategory::setXml( const QDomElement &xml ){    PlaylistBrowser *pb = PlaylistBrowser::instance();    QString tname = xml.tagName();    if ( tname == "category" )    {        setOpen( xml.attribute( "isOpen" ) == "true" );        m_title = xml.attribute( "name" );        setText( 0, m_title );        QListViewItem *last = 0;        for( QDomNode n = xml.firstChild() ; !n.isNull(); n = n.nextSibling() )        {            QDomElement e = n.toElement();            if ( e.tagName() == "category" )                last = new PlaylistCategory( this, last, e);            else if ( e.tagName() == "default" ) {                if( e.attribute( "type" ) == "stream" )                    pb->m_coolStreamsOpen   = (e.attribute( "isOpen" ) == "true");                if( e.attribute( "type" ) == "smartplaylist" )                    pb->m_smartDefaultsOpen = (e.attribute( "isOpen" ) == "true");                if( e.attribute( "type" ) == "lastfm" )                    pb->m_lastfmOpen = (e.attribute( "isOpen" ) == "true");                continue;            }            else if ( e.tagName() == "stream" )                last = new StreamEntry( this, last, e );            else if ( e.tagName() == "smartplaylist" )                last = new SmartPlaylist( this, last, e );            else if ( e.tagName() == "playlist" )                last = new PlaylistEntry( this, last, e );            else if ( e.tagName() == "lastfm" )                last = new LastFmEntry( this, last, e );            else if ( e.tagName() == "dynamic" ) {                if ( e.attribute( "name" ) == i18n("Random Mix") || e.attribute( "name" ) == i18n("Suggested Songs" ) )                    continue;                last = new DynamicEntry( this, last, e );            }            else if ( e.tagName() == "podcast" )            {                const KURL url( n.namedItem( "url").toElement().text() );                QString xmlLocation = Amarok::saveLocation( "podcasts/" );                xmlLocation        += n.namedItem( "cache" ).toElement().text();                QDomDocument xml;                QFile xmlFile( xmlLocation );                QTextStream stream( &xmlFile );                stream.setEncoding( QTextStream::UnicodeUTF8 );                if( !xmlFile.open( IO_ReadOnly ) || !xml.setContent( stream.read() ) )                {                    // Invalid podcasts should still be added to the browser, which means there is no cached xml.                    last = new PodcastChannel( this, last, url, n );                }                else                    last = new PodcastChannel( this, last, url, n, xml );                #define item static_cast<PodcastChannel*>(last)                if( item->autoscan() )                    pb->m_podcastItemsToScan.append( item );                #undef  item            }            else if ( e.tagName() == "settings" )                PlaylistBrowser::instance()->registerPodcastSettings(  title(), new PodcastSettings( e, title() ) );            if( !e.attribute( "isOpen" ).isNull() && last )                last->setOpen( e.attribute( "isOpen" ) == "true" ); //settings doesn't have an attribute "isOpen"        }        setText( 0, xml.attribute("name") );    }}QDomElement PlaylistCategory::xml() const{        QDomDocument d;        QDomElement i = d.createElement("category");        i.setAttribute( "name", text(0) );        if( isOpen() )            i.setAttribute( "isOpen", "true" );        for( PlaylistBrowserEntry *it = static_cast<PlaylistBrowserEntry*>( firstChild() ); it;             it = static_cast<PlaylistBrowserEntry*>( it->nextSibling() ) )        {            if( it == PlaylistBrowser::instance()->m_coolStreams )            {                QDomDocument doc;                QDomElement e = doc.createElement("default");                e.setAttribute( "type", "stream" );                if( it->isOpen() )                    e.setAttribute( "isOpen", "true" );                i.appendChild( d.importNode( e, true ) );            }            else if( it == PlaylistBrowser::instance()->m_lastfmCategory )            {                QDomDocument doc;                QDomElement e = doc.createElement("default");                e.setAttribute( "type", "lastfm" );                if( it->isOpen() )                    e.setAttribute( "isOpen", "true" );                i.appendChild( d.importNode( e, true ) );            }            else if( it == PlaylistBrowser::instance()->m_smartDefaults )            {                QDomDocument doc;                QDomElement e = doc.createElement("default");                e.setAttribute( "type", "smartplaylist" );                if( it->isOpen() )                    e.setAttribute( "isOpen", "true" );                i.appendChild( d.importNode( e, true ) );            }            else if( it->isKept() )                i.appendChild( d.importNode( it->xml(), true ) );        }        return i;}voidPlaylistCategory::slotDoubleClicked(){    setOpen( !isOpen() );}voidPlaylistCategory::slotRenameItem(){    if ( isKept() ) {        setRenameEnabled( 0, true );        static_cast<PlaylistBrowserView*>( listView() )->rename( this, 0 );    }}voidPlaylistCategory::showContextMenu( const QPoint &position ){    KPopupMenu menu( listView() );    if( !isKept() ) return;    enum Actions { RENAME, REMOVE, CREATE, PLAYLIST, PLAYLIST_IMPORT, SMART, STREAM, DYNAMIC,                    LASTFM, LASTFMCUSTOM, PODCAST, REFRESH, CONFIG, INTERVAL };    QListViewItem *parentCat = this;    while( parentCat->parent() )        parentCat = parentCat->parent();    bool isPodcastFolder = false;    if( isFolder() ) {        menu.insertItem( SmallIconSet( Amarok::icon("edit") ), i18n( "&Rename" ), RENAME );        menu.insertItem( SmallIconSet( Amarok::icon("remove") ), i18n( "&Delete" ), REMOVE );        menu.insertSeparator();    }    if( parentCat == static_cast<QListViewItem*>( PlaylistBrowser::instance()->m_playlistCategory) )    {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本韩国一区二区三区视频| 亚洲国产精品精华液ab| 在线观看91视频| 91精品国产综合久久蜜臀| 日韩网站在线看片你懂的| 中文字幕不卡一区| 日本欧美久久久久免费播放网| 91同城在线观看| 久久久一区二区三区| 日韩和欧美一区二区三区| 色狠狠一区二区三区香蕉| 国产精品卡一卡二卡三| 国产乱子轮精品视频| 日韩欧美激情在线| 亚洲一线二线三线视频| 99久久国产综合精品色伊| 久久精品夜色噜噜亚洲a∨| 久久精品av麻豆的观看方式| 欧美日精品一区视频| 亚洲免费观看高清完整| 99久久婷婷国产综合精品电影| 久久久久久久久久久久久女国产乱| 日韩不卡手机在线v区| 欧美无砖专区一中文字| 一区二区在线观看av| 99久久精品免费看国产免费软件| 久久九九影视网| 国产一区二区伦理片| 日韩女优毛片在线| 麻豆国产精品视频| 欧美成人国产一区二区| 青青草成人在线观看| 日韩一区二区免费在线电影| 蜜桃传媒麻豆第一区在线观看| 欧美日韩国产另类不卡| 日韩成人精品在线观看| 欧美一区二区成人| 久久99国内精品| 久久网站热最新地址| 国产高清精品网站| 国产精品欧美一区喷水| 色综合久久久久综合体| 亚洲自拍偷拍av| 欧美一区二区三区在线视频| 蜜桃av一区二区在线观看| 精品国产91洋老外米糕| 国产不卡在线播放| 最近中文字幕一区二区三区| 欧美色精品在线视频| 日韩和欧美一区二区| 久久久五月婷婷| aaa亚洲精品一二三区| 亚洲一区二区三区国产| 91精品国产综合久久久久久漫画 | 成人免费高清视频| 亚洲精品国产精华液| 在线综合视频播放| 国产一区在线看| 亚洲女与黑人做爰| 7777女厕盗摄久久久| 国产精品一区二区久激情瑜伽| 中文字幕日韩一区二区| 欧美日韩dvd在线观看| 国产精品一区二区不卡| 亚洲免费av高清| 精品国产一区二区国模嫣然| 成人精品视频一区二区三区尤物| 亚洲午夜激情网页| 欧美精品一区二区高清在线观看| 91麻豆国产福利精品| 国产一区不卡精品| 一区二区三区中文字幕在线观看| 欧美va天堂va视频va在线| 91网站最新网址| 精品一区二区三区在线观看| 亚洲久草在线视频| 久久久www免费人成精品| 欧美亚洲综合另类| 成人爽a毛片一区二区免费| 亚洲成人一区二区在线观看| 中文字幕av一区二区三区| 555www色欧美视频| 91麻豆国产香蕉久久精品| 激情丁香综合五月| 丝袜美腿亚洲一区二区图片| 亚洲欧洲国产日韩| www激情久久| 欧美一卡二卡三卡四卡| 色94色欧美sute亚洲线路一ni | 成人av资源站| 免费人成网站在线观看欧美高清| 亚洲人成7777| 国产精品人妖ts系列视频| 日韩免费一区二区三区在线播放| 色视频一区二区| 丁香婷婷综合网| 狠狠久久亚洲欧美| 无吗不卡中文字幕| 亚洲免费观看高清| 亚洲同性gay激情无套| 国产女同互慰高潮91漫画| 精品免费日韩av| 亚洲日本在线视频观看| 久久久不卡网国产精品一区| 日韩美一区二区三区| 5858s免费视频成人| 欧美视频中文字幕| 欧美亚洲综合久久| 欧美在线观看视频一区二区三区| 色综合久久久久综合| 成人97人人超碰人人99| 粉嫩av一区二区三区在线播放| 国产一区二区美女| 国产剧情一区二区三区| 国产盗摄女厕一区二区三区| 国产一区二区精品在线观看| 国产露脸91国语对白| 国产乱国产乱300精品| 国产成人精品亚洲日本在线桃色| 国产麻豆成人精品| 成人精品在线视频观看| 99精品国产一区二区三区不卡| 成人免费观看视频| 91一区二区三区在线观看| 91久久精品网| 欧美日韩国产高清一区二区 | 久久久精品日韩欧美| 久久久99精品免费观看不卡| 日本一区二区三区视频视频| 亚洲丝袜自拍清纯另类| 一区二区三区电影在线播| 性做久久久久久免费观看欧美| 日韩综合在线视频| 国产精品一区二区三区乱码 | 国内偷窥港台综合视频在线播放| 久草精品在线观看| 成人黄色软件下载| 91国产免费看| 日韩午夜在线播放| 国产精品久久综合| 亚洲成在人线免费| 国产精品99精品久久免费| 91视视频在线直接观看在线看网页在线看 | 亚洲视频电影在线| 午夜久久电影网| 国产a精品视频| 欧美三级欧美一级| 夜夜嗨av一区二区三区中文字幕| 亚洲va欧美va天堂v国产综合| 久久99九九99精品| 91丨porny丨首页| 日韩欧美综合在线| 最新欧美精品一区二区三区| 日本特黄久久久高潮| 成人精品免费网站| 日韩一区二区在线观看视频播放| 国产精品无码永久免费888| 亚洲地区一二三色| 国产v综合v亚洲欧| 91精品黄色片免费大全| 国产精品久久国产精麻豆99网站| 日韩高清在线一区| 一本到三区不卡视频| 欧美tickling挠脚心丨vk| 依依成人综合视频| 国产成人在线色| 欧美一区二区三区免费观看视频| 国产精品久久久久影院| 免费观看久久久4p| 欧美在线观看18| 国产精品精品国产色婷婷| 韩国在线一区二区| 欧美一区二区免费| 亚洲另类一区二区| 国产91在线观看丝袜| 日韩美女主播在线视频一区二区三区| 亚洲精品乱码久久久久久| 国产成人免费在线| 精品国产制服丝袜高跟| 午夜亚洲福利老司机| 91视视频在线直接观看在线看网页在线看 | 欧美精品一区二区三区视频| 亚洲成人免费视频| 日本高清视频一区二区| 国产女人18毛片水真多成人如厕 | 精品国产乱码久久久久久久久| 天堂一区二区在线| 欧洲国产伦久久久久久久| 亚洲欧洲一区二区三区| 成人午夜激情片| 国产精品网站一区| 国产成人精品三级| 国产午夜三级一区二区三| 久久精品国产一区二区| 欧美一区二区三区免费大片| 日本成人中文字幕在线视频| 欧美一区二区成人6969| 六月丁香综合在线视频| 日韩精品一区二区在线| 精品一二三四在线|