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

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

?? playlistbrowseritem.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統(tǒng)中運行的音頻播放器軟件。 經過兩年開發(fā)后
?? 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一区二区三区免费野_久草精品视频
不卡av在线免费观看| 久久色中文字幕| 精品日韩一区二区三区免费视频| 国产亚洲综合性久久久影院| 亚洲在线免费播放| 国产精品一区一区| 日韩一区二区精品在线观看| 亚洲三级理论片| 国产美女娇喘av呻吟久久| 欧美嫩在线观看| 亚洲欧美日韩国产综合在线| 久久www免费人成看片高清| 欧美色精品在线视频| 亚洲欧美区自拍先锋| 福利一区在线观看| 欧美精品一区二区三区很污很色的 | 国产一区二区美女诱惑| 91麻豆精品91久久久久久清纯| 中文字幕一区二区三区av| 国产夫妻精品视频| 久久久天堂av| 国产美女久久久久| 国产亚洲欧美色| 美女任你摸久久| 91精品国产色综合久久久蜜香臀| 亚洲激情第一区| 色成人在线视频| 亚洲精品高清在线| 色综合天天综合网国产成人综合天 | 日韩电影在线免费看| 精品视频一区二区不卡| 亚洲1区2区3区4区| 欧美日韩国产欧美日美国产精品| 夜夜操天天操亚洲| 在线亚洲欧美专区二区| 一区二区三区在线视频观看58| 99视频超级精品| 亚洲私人黄色宅男| 欧美性大战久久久久久久| 亚洲制服丝袜av| 7777精品伊人久久久大香线蕉完整版 | 成人欧美一区二区三区1314| 成人激情免费视频| 亚洲欧美偷拍卡通变态| 色悠久久久久综合欧美99| 一区二区三区中文字幕电影| 91高清在线观看| 天堂影院一区二区| 精品对白一区国产伦| 国产iv一区二区三区| 中文字幕av一区二区三区高| 99精品欧美一区二区三区小说| 亚洲人精品午夜| 欧美午夜免费电影| 久久精品久久综合| 国产精品妹子av| 91黄色小视频| 免费成人在线网站| 国产精品午夜久久| 欧美色图激情小说| 激情综合色丁香一区二区| 欧美经典三级视频一区二区三区| 91麻豆精东视频| 日本三级亚洲精品| 国产精品嫩草久久久久| 一本大道久久a久久综合| 舔着乳尖日韩一区| 久久视频一区二区| 欧美日韩一区二区在线观看视频| 美女一区二区在线观看| 亚洲色图第一区| 日韩免费观看高清完整版在线观看| 成人综合婷婷国产精品久久蜜臀 | 欧美变态口味重另类| 99精品视频在线播放观看| 欧美a级理论片| 国产精品福利一区二区三区| 欧美日韩成人激情| 成人sese在线| 免费成人av在线播放| 国产三级久久久| 9191成人精品久久| 91在线高清观看| 国内成+人亚洲+欧美+综合在线| 一区二区久久久久久| 久久精品亚洲国产奇米99| 欧美日韩国产综合草草| 成人性生交大片| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美不卡视频一区| 欧美色视频在线观看| av成人免费在线观看| 久88久久88久久久| 亚洲va韩国va欧美va精品| 中文字幕av在线一区二区三区| 日韩三级免费观看| 欧美亚洲日本一区| 99国产精品一区| 丁香天五香天堂综合| 韩国在线一区二区| 美女脱光内衣内裤视频久久网站| 亚洲一区视频在线| 136国产福利精品导航| 亚洲国产精品成人综合| 久久久欧美精品sm网站| 日韩欧美另类在线| 日韩午夜精品视频| 欧美日韩一级黄| 在线观看www91| 欧美影院精品一区| 欧美怡红院视频| 欧美性xxxxxx少妇| 欧美主播一区二区三区| 色狠狠综合天天综合综合| 99精品视频在线观看| 91在线免费播放| 91在线视频18| 色偷偷一区二区三区| 色婷婷综合久色| 一本一道波多野结衣一区二区| av中文字幕不卡| 99精品视频免费在线观看| www.成人在线| 一本到三区不卡视频| 欧美性高清videossexo| 欧美日韩视频在线第一区| 欧美日韩国产区一| 日韩一区二区影院| 精品99一区二区| 国产亚洲综合性久久久影院| 国产精品久久久久久久久免费相片 | 日韩亚洲欧美高清| 久久天天做天天爱综合色| 国产精品无圣光一区二区| 亚洲天堂网中文字| 一区二区在线观看不卡| 亚洲高清不卡在线| 蜜桃视频一区二区三区在线观看| 精品一区二区三区av| 粉嫩aⅴ一区二区三区四区| 99久久久久久99| 在线不卡欧美精品一区二区三区| 日韩一区二区三区四区| 欧美国产禁国产网站cc| 亚洲午夜私人影院| 久久国产乱子精品免费女| 东方欧美亚洲色图在线| 欧美色网一区二区| 久久先锋影音av| 亚洲欧美偷拍三级| 九色综合狠狠综合久久| av激情综合网| 欧美不卡激情三级在线观看| 最新热久久免费视频| 图片区小说区国产精品视频| 国产一区视频网站| 91福利小视频| 久久久久久9999| 亚洲一区二区三区四区在线观看 | 日韩一区二区在线看| 国产精品麻豆久久久| 日日骚欧美日韩| 成人av在线影院| 精品福利一二区| 五月综合激情日本mⅴ| 成人综合婷婷国产精品久久免费| 欧美乱熟臀69xxxxxx| 1区2区3区精品视频| 久久国产精品色婷婷| 色天使色偷偷av一区二区| 久久久影视传媒| 青娱乐精品视频在线| 色一情一乱一乱一91av| 久久精品一区蜜桃臀影院| 日本一不卡视频| 欧美影视一区二区三区| 国产精品不卡在线观看| 韩国一区二区视频| 欧美疯狂做受xxxx富婆| 亚洲精品久久久久久国产精华液| 国产一区二区主播在线| 在线不卡免费av| 亚洲一区免费观看| eeuss国产一区二区三区| 久久精品一二三| 国产一区二区三区四区五区美女 | 亚洲理论在线观看| 国产成人精品午夜视频免费| 精品国产一区二区三区忘忧草| 亚洲无人区一区| 色94色欧美sute亚洲线路一ni | 性做久久久久久久久| 色综合视频在线观看| 17c精品麻豆一区二区免费| 成人黄色软件下载| 国产精品色在线观看| 东方欧美亚洲色图在线| 国产欧美精品一区二区色综合朱莉 | 91色婷婷久久久久合中文| 中文字幕精品一区二区精品绿巨人|