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

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

?? contextbrowser.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統中運行的音頻播放器軟件。 經過兩年開發后
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
// (c) 2004 Christian Muehlhaeuser <chris@chris.de>// (c) 2005 Reigo Reinmets <xatax@hot.ee>// (c) 2005 Mark Kretschmann <markey@web.de>// (c) 2006 Peter C. Ndikuwera <pndiku@gmail.com>// (c) 2006 Alexandre Pereira de Oliveira <aleprj@gmail.com>// (c) 2006 Maximilian Kossick <maximilian.kossick@googlemail.com>// License: GNU General Public License V2#define DEBUG_PREFIX "ContextBrowser"#include "amarok.h"#include "amarokconfig.h"#include "app.h"#include "browserToolBar.h"#include "debug.h"#include "clicklineedit.h"#include "collectiondb.h"#include "collectionbrowser.h"#include "colorgenerator.h"#include "contextbrowser.h"#include "coverfetcher.h"#include "covermanager.h"#include "cuefile.h"#include "enginecontroller.h"#include "htmlview.h"#include "lastfm.h"#include "mediabrowser.h"#include "metabundle.h"#include "mountpointmanager.h"#include "playlist.h"      //appendMedia()#include "podcastbundle.h"#include "qstringx.h"#include "scriptmanager.h"#include "starmanager.h"#include "statusbar.h"#include "tagdialog.h"#include "threadmanager.h"#include <qbuffer.h>#include <qdatetime.h>#include <qdeepcopy.h>#include <qdom.h>#include <qimage.h>#include <qregexp.h>#include <qtextstream.h>  // External CSS reading#include <qvbox.h> //wiki tab#include <qhbox.h>#include <qlayout.h>#include <qlineedit.h>#include <qlistview.h>#include <qtimer.h>#include <qtooltip.h>#include <kaction.h>#include <kapplication.h> //kapp#include <kcalendarsystem.h>  // for Amarok::verboseTimeSince()#include <kconfig.h> // suggested/related/favorite box visibility#include <kdialog.h>#include <kfiledialog.h>#include <kglobal.h>#include <kiconloader.h>#include <kio/job.h>#include <kio/jobclasses.h>#include <kmdcodec.h> // for data: URLs#include <kmessagebox.h>#include <kpopupmenu.h>#include <kstandarddirs.h>#include <ktextedit.h>#include <ktoolbarbutton.h>#include <unistd.h> //usleep()namespace Amarok{    QString escapeHTML( const QString &s )    {        return QString(s).replace( "&", "&amp;" ).replace( "<", "&lt;" ).replace( ">", "&gt;" );        // .replace( "%", "%25" ) has to be the first(!) one, otherwise we would do things like converting spaces into %20 and then convert them into %25%20    }    QString escapeHTMLAttr( const QString &s )    {        return QString(s).replace( "%", "%25" ).replace( "'", "%27" ).replace( "\"", "%22" ).replace( "#", "%23" ).replace( "?", "%3F" );    }    QString unescapeHTMLAttr( const QString &s )    {        return QString(s).replace( "%3F", "?" ).replace( "%23", "#" ).replace( "%22", "\"" ).replace( "%27", "'" ).replace( "%25", "%" );    }    QString verboseTimeSince( const QDateTime &datetime )    {        const QDateTime now = QDateTime::currentDateTime();        const int datediff = datetime.daysTo( now );        if( datediff >= 6*7 /*six weeks*/ ) {  // return absolute month/year            const KCalendarSystem *cal = KGlobal::locale()->calendar();            const QDate date = datetime.date();            return i18n( "monthname year", "%1 %2" ).arg( cal->monthName(date), cal->yearString(date, false) );        }        //TODO "last week" = maybe within 7 days, but prolly before last sunday        if( datediff >= 7 )  // return difference in weeks            return i18n( "One week ago", "%n weeks ago", (datediff+3)/7 );        if( datediff == -1 )            return i18n( "Tomorrow" );        const int timediff = datetime.secsTo( now );        if( timediff >= 24*60*60 /*24 hours*/ )  // return difference in days            return datediff == 1 ?                    i18n( "Yesterday" ) :                    i18n( "One day ago", "%n days ago", (timediff+12*60*60)/(24*60*60) );        if( timediff >= 90*60 /*90 minutes*/ )  // return difference in hours            return i18n( "One hour ago", "%n hours ago", (timediff+30*60)/(60*60) );        //TODO are we too specific here? Be more fuzzy? ie, use units of 5 minutes, or "Recently"        if( timediff >= 0 )  // return difference in minutes            return timediff/60 ?                    i18n( "One minute ago", "%n minutes ago", (timediff+30)/60 ) :                    i18n( "Within the last minute" );        return i18n( "The future" );    }    QString verboseTimeSince( uint time_t )    {        if( !time_t )            return i18n( "Never" );        QDateTime dt;        dt.setTime_t( time_t );        return verboseTimeSince( dt );    }    extern KConfig *config( const QString& );    /**    * Function that must be used when separating contextBrowser escaped urls    * detail can contain track/discnumber    */    void albumArtistTrackFromUrl( QString url, QString &artist, QString &album, QString &detail )    {        if ( !url.contains("@@@") ) return;        //KHTML removes the trailing space!        if ( url.endsWith( " @@@" ) )            url += ' ';        const QStringList list = QStringList::split( " @@@ ", url, true );        int size = list.count();        Q_ASSERT( size>0 );        artist = size > 0 ? unescapeHTMLAttr( list[0] ) : "";        album  = size > 1 ? unescapeHTMLAttr( list[1] ) : "";        detail = size > 2 ? unescapeHTMLAttr( list[2] ) : "";    }}using Amarok::QStringx;using Amarok::escapeHTML;using Amarok::escapeHTMLAttr;using Amarok::unescapeHTMLAttr;staticQString albumImageTooltip( const QString &albumImage, int size ){    if ( albumImage == CollectionDB::instance()->notAvailCover( false, size ) )        return escapeHTMLAttr( i18n( "Click to fetch cover from amazon.%1, right-click for menu." ).arg( CoverManager::amazonTld() ) );    return escapeHTMLAttr( i18n( "Click for information from Amazon, right-click for menu." ) );}ContextBrowser *ContextBrowser::s_instance = 0;QString ContextBrowser::s_wikiLocale = "en";ContextBrowser::ContextBrowser( const char *name )        : KTabWidget( 0, name )        , EngineObserver( EngineController::instance() )        , m_dirtyCurrentTrackPage( true )        , m_dirtyLyricsPage( true )        , m_dirtyWikiPage( true )        , m_emptyDB( CollectionDB::instance()->isEmpty() )        , m_wikiBackPopup( new KPopupMenu( this ) )        , m_wikiForwardPopup( new KPopupMenu( this ) )        , m_wikiJob( NULL )        , m_wikiConfigDialog( NULL )        , m_relatedOpen( true )        , m_suggestionsOpen( true )        , m_favoritesOpen( true )        , m_labelsOpen( true )        , m_showFreshPodcasts( true )        , m_showFavoriteAlbums( true )        , m_showNewestAlbums( true )        , m_browseArtists( false )        , m_browseLabels( false )        , m_cuefile( NULL ){    s_instance = this;    s_wikiLocale = AmarokConfig::wikipediaLocale();    m_contextTab = new QVBox(this, "context_tab");    m_currentTrackPage = new HTMLView( m_contextTab, "current_track_page", true /* DNDEnabled */,            true /*JScriptEnabled*/ );    m_lyricsTab = new QVBox(this, "lyrics_tab");    m_lyricsToolBar = new Browser::ToolBar( m_lyricsTab );    m_lyricsToolBar->setIconText( KToolBar::IconTextRight, false );    m_lyricsToolBar->insertButton( Amarok::icon( "refresh" ), LYRICS_REFRESH, true, i18n("Refresh") );    m_lyricsToolBar->insertButton( Amarok::icon( "add_lyrics" ), LYRICS_ADD, true, i18n("Add") );    m_lyricsToolBar->insertButton( Amarok::icon( "edit" ), LYRICS_EDIT, true, i18n("Edit") );    m_lyricsToolBar->setToggle( LYRICS_EDIT, true );    m_lyricsToolBar->insertButton( Amarok::icon( "search" ), LYRICS_SEARCH, true, i18n("Search") );    m_lyricsToolBar->setIconText( KToolBar::IconOnly, false );    m_lyricsToolBar->insertButton( Amarok::icon( "external" ), LYRICS_BROWSER, true, i18n("Open in external browser") );    { //Search text inside lyrics. Code inspired/copied from playlistwindow.cpp       m_lyricsTextBar = new KToolBar( m_lyricsTab, "NotMainToolBar" );       m_lyricsTextBar->hide();       m_lyricsTextBarShowed=false;       m_lyricsTextBar->setIconSize( 22, false ); //looks more sensible       m_lyricsTextBar->setFlat( true ); //removes the ugly frame       m_lyricsTextBar->setMovingEnabled( false ); //removes the ugly frame       m_lyricsTextBar->boxLayout()->addStretch();       QWidget *button = new KToolBarButton( "locationbar_erase", 1, m_lyricsTextBar );       QLabel *filter_label = new QLabel( i18n("S&earch:") + ' ', m_lyricsTextBar );       m_lyricsSearchText = new ClickLineEdit( i18n( "Search in lyrics" ), m_lyricsTextBar );       filter_label->setBuddy( m_lyricsSearchText );       m_lyricsTextBar->setStretchableWidget(m_lyricsSearchText );       m_lyricsSearchText->setFrame( QFrame::Sunken );       m_lyricsSearchText->installEventFilter( this ); //we intercept keyEvents       connect( button, SIGNAL(clicked()), m_lyricsSearchText, SLOT(clear()) );       QToolTip::add( button, i18n( "Clear search" ) );       QString filtertip = i18n( "Enter text to search for. Press enter to advance to the next match." );       QToolTip::add( m_lyricsSearchText, filtertip );       connect ( button, SIGNAL(clicked()), m_lyricsSearchText, SLOT(clear()) );       connect ( m_lyricsSearchText, SIGNAL(textChanged(const QString &)), this, SLOT(lyricsSearchText(const QString & )) );       connect ( m_lyricsSearchText, SIGNAL(returnPressed()), this, (SLOT(lyricsSearchTextNext())) );       Amarok::actionCollection()->setAutoConnectShortcuts ( true );       new KAction( i18n("Search text in lyrics"), KShortcut("/"), this,SLOT( lyricsSearchTextShow() ), Amarok::actionCollection(), "search_text_lyric");       Amarok::actionCollection()->setAutoConnectShortcuts ( false );    }    m_lyricsPage = new HTMLView( m_lyricsTab, "lyrics_page", true /* DNDEnabled */, false /* JScriptEnabled*/ );    m_lyricsTextEdit = new KTextEdit ( m_lyricsTab, "lyrics_text_edit");    m_lyricsTextEdit->setTextFormat( Qt::PlainText );    m_lyricsTextEdit->hide();    m_wikiTab = new QVBox(this, "wiki_tab");    m_wikiToolBar = new Browser::ToolBar( m_wikiTab );    m_wikiToolBar->insertButton( "back", WIKI_BACK, false, i18n("Back") );    m_wikiToolBar->insertButton( "forward", WIKI_FORWARD, false, i18n("Forward") );    m_wikiToolBar->insertLineSeparator();    m_wikiToolBar->insertButton( Amarok::icon( "artist" ), WIKI_ARTIST, false, i18n("Artist Page") );    m_wikiToolBar->insertButton( Amarok::icon( "album" ), WIKI_ALBUM, false, i18n("Album Page") );    m_wikiToolBar->insertButton( Amarok::icon( "track" ), WIKI_TITLE, false, i18n("Title Page") );    m_wikiToolBar->insertLineSeparator();    m_wikiToolBar->insertButton( Amarok::icon( "external" ), WIKI_BROWSER, true, i18n("Open in external browser") );    m_wikiToolBar->insertButton( Amarok::icon( "change_language" ), WIKI_CONFIG, true, i18n("Change Locale") );    m_wikiToolBar->setDelayedPopup( WIKI_BACK, m_wikiBackPopup );    m_wikiToolBar->setDelayedPopup( WIKI_FORWARD, m_wikiForwardPopup );    m_wikiPage = new HTMLView( m_wikiTab, "wiki_page", true /* DNDEnabled */, false /* JScriptEnabled */ );    m_cuefile = CueFile::instance();    connect( m_cuefile, SIGNAL(metaData( const MetaBundle& )),             EngineController::instance(), SLOT(currentTrackMetaDataChanged( const MetaBundle& )) );    connect( m_cuefile, SIGNAL(newCuePoint( long, long, long )),             Scrobbler::instance(), SLOT(subTrack( long, long, long )) );    addTab( m_contextTab, SmallIconSet( Amarok::icon( "music" ) ),  i18n( "Music" ) );    addTab( m_lyricsTab,  SmallIconSet( Amarok::icon( "lyrics" ) ), i18n( "Lyrics" ) );    addTab( m_wikiTab,    SmallIconSet( Amarok::icon( "artist" ) ), i18n( "Artist" ) );    setTabEnabled( m_lyricsTab, false );    setTabEnabled( m_wikiTab, false );    m_showRelated   = Amarok::config( "ContextBrowser" )->readBoolEntry( "ShowRelated", true );    m_showSuggested = Amarok::config( "ContextBrowser" )->readBoolEntry( "ShowSuggested", true );    m_showFaves     = Amarok::config( "ContextBrowser" )->readBoolEntry( "ShowFaves", true );    m_showLabels    = Amarok::config( "ContextBrowser" )->readBoolEntry( "ShowLabels", true );    m_showFreshPodcasts  = Amarok::config( "ContextBrowser" )->readBoolEntry( "ShowFreshPodcasts", true );    m_showNewestAlbums   = Amarok::config( "ContextBrowser" )->readBoolEntry( "ShowNewestAlbums", true );    m_showFavoriteAlbums = Amarok::config( "ContextBrowser" )->readBoolEntry( "ShowFavoriteAlbums", true );    // Delete folder with the cached coverimage shadow pixmaps    KIO::del( KURL::fromPathOrURL( Amarok::saveLocation( "covershadow-cache/" ) ), false, false );    connect( this, SIGNAL( currentChanged( QWidget* ) ), SLOT( tabChanged( QWidget* ) ) );    connect( m_currentTrackPage->browserExtension(), SIGNAL( openURLRequest( const KURL &, const KParts::URLArgs & ) ),             this,                                   SLOT( openURLRequest( const KURL & ) ) );    connect( m_lyricsPage->browserExtension(),       SIGNAL( openURLRequest( const KURL &, const KParts::URLArgs & ) ),             this,                                   SLOT( openURLRequest( const KURL & ) ) );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜电影网亚洲视频| 99久久精品免费看| 成人中文字幕合集| 欧美美女激情18p| 国产精品私人自拍| 蜜桃精品在线观看| 欧美视频一区二区三区| 国产午夜精品理论片a级大结局 | 91在线云播放| 欧美电视剧在线观看完整版| 亚洲国产wwwccc36天堂| 成人开心网精品视频| 精品剧情v国产在线观看在线| 一区二区三区丝袜| 99久久综合国产精品| 337p粉嫩大胆噜噜噜噜噜91av| 午夜视频一区二区| 一本大道av伊人久久综合| 国产亚洲一二三区| 国产一区美女在线| 精品国产乱码久久久久久牛牛 | 在线播放国产精品二区一二区四区| 久久久久9999亚洲精品| 免费成人av在线| 9191久久久久久久久久久| 夜色激情一区二区| 色拍拍在线精品视频8848| 国产精品高潮久久久久无| 国产不卡在线一区| 久久综合五月天婷婷伊人| 伦理电影国产精品| 9191成人精品久久| 视频一区免费在线观看| 欧美日韩国产综合草草| 亚洲高清一区二区三区| 欧美日韩国产欧美日美国产精品| 一区二区三区在线视频免费| 91行情网站电视在线观看高清版| 亚洲手机成人高清视频| 97久久超碰国产精品| 成人免费在线播放视频| 日本韩国欧美国产| 亚洲电影一区二区| 欧美伦理电影网| 奇米影视一区二区三区| 精品久久久久久久久久久久久久久 | 国产欧美一区二区精品忘忧草| 91在线你懂得| 亚洲视频免费在线观看| 色999日韩国产欧美一区二区| 亚洲精品写真福利| 欧美日韩一级大片网址| 美女脱光内衣内裤视频久久网站| 欧美一区二区三区电影| 久久精品国产77777蜜臀| 精品成人一区二区| 成人免费视频视频在线观看免费| 亚洲欧美在线视频| 欧美日精品一区视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩一区二区电影在线| 国产91露脸合集magnet | 懂色av一区二区三区免费看| 亚洲欧洲av在线| 精品视频一区二区三区免费| 精品一区二区三区免费视频| 国产精品沙发午睡系列990531| 日本韩国欧美三级| 久久99精品久久久| 国产精品的网站| 91精品国产综合久久香蕉麻豆| 国产精品99久久久久久久vr| 一区二区三区四区国产精品| 欧美成人一区二区三区片免费| 成人av在线资源| 三级久久三级久久久| 中文字幕免费一区| 欧美丰满美乳xxx高潮www| 国产成人在线视频网址| 亚洲国产三级在线| 中文成人综合网| 欧美一区二区三区播放老司机| 丁香一区二区三区| 免费欧美日韩国产三级电影| 国产精品福利影院| 亚洲精品一线二线三线无人区| 91小视频免费观看| 韩国欧美一区二区| 天堂蜜桃91精品| 亚洲欧美日韩国产综合在线| 精品久久一区二区三区| 精品视频一区二区三区免费| 从欧美一区二区三区| 免费在线欧美视频| 亚洲一级二级三级| 国产精品日日摸夜夜摸av| 日韩欧美国产高清| 欧美色电影在线| 色女孩综合影院| 波多野结衣91| 久久精品国产一区二区三区免费看| 亚洲乱码国产乱码精品精的特点 | 国产拍揄自揄精品视频麻豆| 日韩欧美一级二级| 欧美酷刑日本凌虐凌虐| 色成年激情久久综合| 成人国产在线观看| 成人一区二区视频| 国产精品亚洲人在线观看| 久久aⅴ国产欧美74aaa| 日本欧美一区二区三区| 午夜精品久久久久久久久久久| 亚洲免费色视频| 亚洲激情第一区| 亚洲男人的天堂在线aⅴ视频| 国产精品久久久久婷婷二区次| 国产日韩精品一区二区浪潮av| 久久久午夜精品| 国产嫩草影院久久久久| 国产精品美女久久久久久久久| 欧美激情一区二区三区在线| 国产三级一区二区三区| 中文字幕第一区综合| 欧美激情一二三区| 国产精品久久久久久久第一福利| 欧美激情自拍偷拍| 中文字幕亚洲区| 亚洲资源在线观看| 日韩福利视频网| 久久国产福利国产秒拍| 国产剧情一区二区三区| 国产精品一二三在| 91在线观看下载| 欧美三区免费完整视频在线观看| 91福利在线观看| 欧美一区二区三区在线| 亚洲精品一区二区三区四区高清| 久久久久久久久久美女| 中文字幕一区二区三区不卡| 亚洲午夜一区二区| 麻豆精品在线视频| 懂色av中文字幕一区二区三区| 岛国av在线一区| 色狠狠色噜噜噜综合网| 51精品久久久久久久蜜臀| 久久毛片高清国产| 亚洲免费在线电影| 蜜桃av一区二区在线观看| 高清成人免费视频| 精品视频在线免费观看| 久久一区二区三区国产精品| 亚洲丝袜精品丝袜在线| 免费成人深夜小野草| 成人黄色免费短视频| 欧美浪妇xxxx高跟鞋交| 国产免费成人在线视频| 亚洲第一久久影院| 国产精品自产自拍| 欧美日韩国产大片| 国产欧美日韩在线| 日本成人中文字幕在线视频 | 国产日产欧美一区| 亚洲综合免费观看高清完整版在线| 日韩精品91亚洲二区在线观看| 国产69精品久久777的优势| 欧美日韩中文国产| 国产天堂亚洲国产碰碰| 午夜欧美电影在线观看| 丰满放荡岳乱妇91ww| 6080日韩午夜伦伦午夜伦| 国产精品看片你懂得| 老司机精品视频导航| 欧美综合视频在线观看| 欧美高清一级片在线观看| 日本欧美在线看| 色94色欧美sute亚洲线路一ni| 久久丝袜美腿综合| 视频一区中文字幕| 在线视频一区二区三区| 日本一区二区三区高清不卡| 成人黄色在线网站| 日韩一区二区三区视频在线 | 久久日韩精品一区二区五区| 亚洲靠逼com| 不卡一区二区三区四区| 欧美xxxx老人做受| 亚洲bt欧美bt精品777| 91久久精品国产91性色tv| 国产日本欧美一区二区| 久久精品国产亚洲aⅴ| 91精品欧美福利在线观看| 亚洲成人av资源| 欧美视频一二三区| 一个色妞综合视频在线观看| 91美女在线视频| 亚洲裸体在线观看| 一本高清dvd不卡在线观看| 中文字幕欧美一区| 91欧美一区二区| 亚洲另类中文字|