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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? queuelabel.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統(tǒng)中運行的音頻播放器軟件。 經(jīng)過兩年開發(fā)后
?? CPP
字號:
/*************************************************************************** *   Copyright (C) 2005 by Gábor Lehel <illissius@gmail.com>               * *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * *   This program is distributed in the hope that it will be useful,       * *   but WITHOUT ANY WARRANTY; without even the implied warranty of        * *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         * *   GNU General Public License for more details.                          * *                                                                         * *   You should have received a copy of the GNU General Public License     * *   along with this program; if not, write to the                         * *   Free Software Foundation, Inc.,                                       * *   51 Franklin Steet, Fifth Floor, Boston, MA  02111-1307, USA.          * ***************************************************************************/#include "amarok.h"#include "collectiondb.h"#include "metabundle.h"#include "playlist.h"#include "playlistitem.h"#include "queueLabel.h"#include "statusbar.h"#include <qapplication.h>#include <qlabel.h>#include <qpainter.h>#include <qpixmap.h>#include <qtimer.h>#include <kactioncollection.h>#include <kglobal.h>#include <kiconloader.h>#include <kpopupmenu.h>#include <kstringhandler.h>static const uint MAX_TO_SHOW = 20;QueueLabel::QueueLabel( QWidget *parent, const char *name )    : QLabel( parent, name )    , m_timer( this )    , m_tooltip( 0 )    , m_tooltipShowing( false )    , m_tooltipHidden( false ){    connect( this,                 SIGNAL( queueChanged( const PLItemList &, const PLItemList & ) ),             Playlist::instance(), SIGNAL( queueChanged( const PLItemList &, const PLItemList & ) ) );    connect( CollectionDB::instance(), SIGNAL( coverChanged( const QString &, const QString & ) ),             this, SLOT( slotCoverChanged( const QString &, const QString & ) ) );    setNum( 0 );}void QueueLabel::update() //SLOT{    PLItemList &queue = Playlist::instance()->m_nextTracks;    setNum( queue.count() );    if( isVisible() )        getCover( queue.getFirst()->artist(), queue.getFirst()->album() );}void QueueLabel::slotCoverChanged( const QString &artist, const QString &album ) //SLOT{    PLItemList &queue = Playlist::instance()->m_nextTracks;    if( isVisible() && queue.getFirst()->artist().string() == artist && queue.getFirst()->album().string() == album )        getCover( artist, album );}void QueueLabel::getCover( const QString &artist, const QString &album ){    m_cover = CollectionDB::instance()->albumImage( artist, album, 50 );    if( m_cover == CollectionDB::instance()->notAvailCover( 50 ) )        m_cover = KGlobal::iconLoader()->iconPath( "goto", -KIcon::SizeHuge );}void QueueLabel::setNum( int num ){    if( num <= 0 )    {        clear();        hide();    }    else    {        show();        const QString text = QString::number( num );        const int h = 18;        QFont f = font();        f.setPixelSize( h - 2 );        f.setBold( true );        const int w = kMax( h, QFontMetrics( f ).width( text ) + h/4 + 2 );        QPixmap pix( w, h );        QPainter p( &pix );        p.setBrush( colorGroup().background() );        p.setPen( colorGroup().background() );        p.drawRect( pix.rect() );        p.setBrush( colorGroup().highlight() );        p.setPen( colorGroup().highlight().dark() );        if( w > h )        {            p.drawPie( 0, 0, h, h, 90*16, 180*16 );            p.drawPie( w-1 -h, 0, h, h, -90*16, 180*16 );            p.drawLine( h/2-1, 0, w-1 - h/2, 0 );            p.drawLine( h/2-1, h-1, w-1 - h/2, h-1 );            p.setPen( colorGroup().highlight() );            p.drawRect( h/2-1, 1, w - h + 1, h-2 );        }        else            p.drawEllipse( pix.rect() );        p.setFont( f );        p.setPen( colorGroup().highlightedText() );        p.setBrush( colorGroup().highlight().dark() );        p.drawText( pix.rect(), Qt::AlignCenter | Qt::SingleLine, text );        p.end();        setPixmap( pix );    }}void QueueLabel::enterEvent( QEvent* ){    m_tooltipHidden = false;    QTimer::singleShot( 1000, this, SLOT(aboutToShow()) );}void QueueLabel::leaveEvent( QEvent* ){    hideToolTip();}void QueueLabel::aboutToShow(){    if( hasMouse() && !m_tooltipHidden )        showToolTip();}void QueueLabel::mousePressEvent( QMouseEvent* mouseEvent ){    hideToolTip();    if( m_timer.isActive() )  // if the user clicks again when (right after) the menu is open,    {                         // (s)he probably wants to close it        m_timer.stop();        return;    }    Playlist *pl = Playlist::instance();    PLItemList &queue = pl->m_nextTracks;    if( queue.isEmpty() )        return;    int length = 0;    for( QPtrListIterator<PlaylistItem> it( queue ); *it; ++it )    {        const int s = (*it)->length();        if( s > 0 ) length += s;    }    QPtrList<KPopupMenu> menus;    menus.setAutoDelete( true );    KPopupMenu *menu = new KPopupMenu;    menus.append( menu );    const uint count = queue.count();    if( length )        menu->insertTitle( i18n( "1 Queued Track (%1)", "%n Queued Tracks (%1)", count )                           .arg( MetaBundle::prettyLength( length, true ) ) );    else        menu->insertTitle( i18n( "1 Queued Track", "%n Queued Tracks", count ) );    Amarok::actionCollection()->action( "queue_manager" )->plug( menu );    menu->insertItem( SmallIconSet( Amarok::icon( "rewind" ) ),                      count > 1 ? i18n( "&Dequeue All Tracks" ) : i18n( "&Dequeue Track" ), 0 );    menu->insertSeparator();    uint i = 1;    QPtrListIterator<PlaylistItem> it( queue );    it.toFirst();    while( i <= count )    {        for( uint n = kMin( i + MAX_TO_SHOW - 1, count ); i <= n; ++i, ++it )            menu->insertItem(                KStringHandler::rsqueeze( i18n( "%1. %2" ).arg( i ).arg( veryNiceTitle( *it ) ), 50 ), i );        if( i < count )        {            menus.append( new KPopupMenu );            menu->insertSeparator();            menu->insertItem( i18n( "1 More Track", "%n More Tracks", count - i + 1 ), menus.getLast() );            menu = menus.getLast();        }    }    menu = menus.getFirst();    int mx, my;    const int   mw      = menu->sizeHint().width(),                mh      = menu->sizeHint().height(),                sy      = mapFrom( Amarok::StatusBar::instance(), QPoint( 0, 0 ) ).y(),                sheight = Amarok::StatusBar::instance()->height();    const QRect dr      = QApplication::desktop()->availableGeometry( this );    if( mapYToGlobal( sy ) - mh > dr.y() )       my = mapYToGlobal( sy ) - mh;    else if( mapYToGlobal( sy + sheight ) + mh < dr.y() + dr.height() )       my = mapYToGlobal( sy + sheight );    else       my = mapToGlobal( mouseEvent->pos() ).y();    mx = mapXToGlobal( 0 ) - ( mw - width() ) / 2;    int id = menu->exec( QPoint( mx, my ) );    if( id < 0 )        m_timer.start( 50, true );    else if( id == 0 ) //dequeue    {        const PLItemList dequeued = queue;        while( !queue.isEmpty() )            pl->queue( queue.getLast(), true );        emit queueChanged( PLItemList(), dequeued );    }    else    {        PlaylistItem *selected = queue.at( id - 1 );        if( selected )            pl->ensureItemCentered( selected );    }}void QueueLabel::showToolTip(){    if( m_tooltipShowing )        return;    m_tooltipShowing = true;    Playlist     *pl    = Playlist::instance();    const uint    count = pl->m_nextTracks.count();    PlaylistItem *item  = pl->m_nextTracks.getFirst();    if( !item )        return;    QString text;    if( count > 1 )    {        int length = 0;        for( QPtrListIterator<PlaylistItem> it( pl->m_nextTracks ); *it; ++it )        {            const int s = (*it)->length();            if( s > 0 ) length += s;        }        if( length )            text += QString("<center>%1</center>")                    .arg( i18n( "1 track (%1)", "%n tracks (%1)", count )                          .arg( MetaBundle::prettyLength( length, true ) ) );    }    text += i18n( "Next: %1" ).arg( veryNiceTitle( item, true /*bold*/ ) );    m_tooltip = new KDE::PopupMessage( parentWidget()->parentWidget(), this, 0 );    m_tooltip->setShowCloseButton( false );    m_tooltip->setShowCounter( false );    m_tooltip->setMaskEffect( KDE::PopupMessage::Plain );    m_tooltip->setText( text );    m_tooltip->setImage( m_cover );    m_tooltip->reposition(); //make sure it is in the correct location    m_tooltip->display();}void QueueLabel::hideToolTip(){    if( m_tooltip && m_tooltipShowing )        m_tooltip->close();    m_tooltipHidden = true;    m_tooltipShowing = false;}QString QueueLabel::veryNiceTitle( PlaylistItem* item, bool bold ) const{    const QString artist = item->artist()->stripWhiteSpace(),                  title =  item->title().stripWhiteSpace();    if( !artist.isEmpty() && !title.isEmpty() )       return ( bold ? i18n( "<b>%1</b> by <b>%2</b>" ) : i18n( "%1 by %2" ) ).arg( title ).arg( artist );    else       return QString( "<b>%1</b>" ).arg( MetaBundle::prettyTitle( item->filename() ) );}#include "queueLabel.moc"

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精东粉嫩av免费一区二区三区| 欧美日韩一区二区在线观看| av成人免费在线观看| 欧美专区在线观看一区| 欧美一区二区三区不卡| 亚洲视频你懂的| 麻豆精品国产91久久久久久| av福利精品导航| 日韩一区二区中文字幕| 亚洲蜜臀av乱码久久精品| 久久精品国产精品亚洲综合| 欧美在线观看视频一区二区三区 | 欧美丰满少妇xxxbbb| 亚洲国产精品精华液ab| 美女爽到高潮91| 在线亚洲+欧美+日本专区| 欧美国产日韩在线观看| 久久成人综合网| 欧美日韩一本到| 亚洲激情自拍偷拍| 成人av在线播放网址| 久久无码av三级| 麻豆精品一区二区| 777a∨成人精品桃花网| 亚洲观看高清完整版在线观看 | 日韩午夜电影在线观看| 亚洲香肠在线观看| 91亚洲精品乱码久久久久久蜜桃| 久久青草国产手机看片福利盒子 | 精品少妇一区二区三区日产乱码 | 精品久久久久久久久久久院品网| 亚洲国产另类av| 色吊一区二区三区| 亚洲欧美在线aaa| 成人免费视频视频在线观看免费| 久久免费视频一区| 久久av资源网| 久久久电影一区二区三区| 九九九精品视频| 欧美不卡一区二区三区四区| 麻豆视频观看网址久久| 日韩一区二区高清| 麻豆精品新av中文字幕| 精品久久人人做人人爽| 韩国精品免费视频| 国产欧美精品区一区二区三区 | 亚洲国产精品久久一线不卡| 欧美专区亚洲专区| 天天av天天翘天天综合网| 欧美日韩精品一区二区| 日韩在线一区二区| 日韩欧美一级二级| 国产精品一线二线三线| 国产亚洲一区二区在线观看| 成人免费视频视频| 亚洲精品福利视频网站| 欧美日韩电影一区| 蜜乳av一区二区| 久久久久九九视频| av不卡在线播放| 亚洲一区二区三区四区的| 欧美精品乱码久久久久久| 美女一区二区视频| 国产精品午夜在线| 欧美自拍偷拍一区| 久久99精品国产麻豆不卡| 欧美韩国一区二区| 在线免费视频一区二区| 日本女人一区二区三区| 久久伊人蜜桃av一区二区| 91亚洲精品乱码久久久久久蜜桃| 亚洲午夜在线视频| 精品日韩av一区二区| 99久久婷婷国产| 日韩国产精品久久| 国产精品久久久久一区二区三区共| 91丨porny丨蝌蚪视频| 亚洲高清视频中文字幕| 久久久蜜臀国产一区二区| 色综合久久综合网| 久久不见久久见免费视频7| 亚洲欧美偷拍卡通变态| 日韩一区二区精品在线观看| jiyouzz国产精品久久| 蜜桃一区二区三区在线| 日韩一区中文字幕| 日韩一级精品视频在线观看| 色欧美乱欧美15图片| 精品亚洲国产成人av制服丝袜| 中文字幕亚洲欧美在线不卡| 日韩美女主播在线视频一区二区三区| aaa国产一区| 久久精品国产99国产| 亚洲自拍偷拍综合| 国产精品拍天天在线| 精品美女一区二区三区| 欧美性猛交xxxx乱大交退制版| 国产a视频精品免费观看| 日产国产欧美视频一区精品| 伊人夜夜躁av伊人久久| 国产欧美精品在线观看| 日韩欧美久久久| 91国产视频在线观看| 高清国产一区二区| 裸体健美xxxx欧美裸体表演| 亚洲国产精品自拍| 一卡二卡三卡日韩欧美| 国产精品久久久久天堂| 国产亚洲一区字幕| 精品国产乱码久久久久久影片| 9191精品国产综合久久久久久| 91在线国产福利| 成人爱爱电影网址| 国产麻豆精品一区二区| 久久成人免费电影| 久久精品国产免费看久久精品| 首页欧美精品中文字幕| 亚洲va中文字幕| 一区二区三区精品久久久| 亚洲男人都懂的| 中文字幕一区av| 亚洲欧美另类图片小说| 亚洲欧洲美洲综合色网| 国产精品色哟哟网站| 国产精品毛片久久久久久久| 国产精品亲子伦对白| 国产精品成人一区二区三区夜夜夜| 国产亚洲精品7777| 国产欧美一区二区精品忘忧草| 久久精品视频网| 国产精品素人一区二区| 中文字幕在线观看不卡视频| 亚洲天堂av老司机| 一区二区三区在线视频观看58| 一片黄亚洲嫩模| 三级一区在线视频先锋| 久久精品国产一区二区三| 国产精品一区二区在线观看网站| 国产一区二区按摩在线观看| 成人精品亚洲人成在线| 一本色道久久综合亚洲91| 欧美丝袜丝交足nylons图片| 欧美一区二区播放| 久久久美女毛片| 亚洲图片你懂的| 亚洲成人动漫在线观看| 欧美a一区二区| 国产伦精品一区二区三区视频青涩 | 国产精品色呦呦| 亚洲精品成人天堂一二三| 日日夜夜精品视频免费| 国产在线精品免费| 色综合久久天天| 91麻豆精品国产自产在线| 欧美精品一区二区高清在线观看| 国产日韩精品一区| 夜夜精品视频一区二区| 麻豆精品视频在线观看| 成人一二三区视频| 欧美日韩中文字幕一区二区| 欧美精品一区二区精品网| 亚洲人123区| 蜜臀av性久久久久蜜臀aⅴ| 成人激情小说网站| 欧美日韩国产首页在线观看| 久久久无码精品亚洲日韩按摩| 亚洲激情中文1区| 国产美女精品在线| 欧美三日本三级三级在线播放| 精品88久久久久88久久久| 一区二区三区日韩欧美精品| 极品销魂美女一区二区三区| 色视频成人在线观看免| 亚洲精品一区二区在线观看| 亚洲综合一区在线| 国产91精品一区二区| 91精品免费观看| 亚洲丝袜自拍清纯另类| 韩日av一区二区| 欧美日韩不卡一区| 亚洲欧美另类久久久精品2019| 国产一区二区影院| 4438x亚洲最大成人网| 《视频一区视频二区| 国产精一品亚洲二区在线视频| 欧美日韩成人一区二区| 自拍偷拍国产亚洲| 国产乱人伦偷精品视频不卡 | 亚洲久草在线视频| 国产成人av电影免费在线观看| 91精品福利在线一区二区三区 | 风流少妇一区二区| 精品国产91亚洲一区二区三区婷婷| 亚洲一区av在线| 色婷婷久久久久swag精品| 国产精品嫩草影院com| 国产精品91一区二区| 精品国产第一区二区三区观看体验| 热久久免费视频| 欧美老女人第四色|