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

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

?? multitabbar.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統(tǒng)中運(yùn)行的音頻播放器軟件。 經(jīng)過兩年開發(fā)后
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/***************************************************************************                       kmultitabbar.cpp -  description                           -------------------   begin                :  2001   copyright            : (C) 2001,2002,2003 by Joseph Wenninger <jowenn@kde.org>                          (C) 2005           by Mark Kretschmann <markey@web.de>***************************************************************************//***************************************************************************    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Library General Public    License as published by the Free Software Foundation; either    version 2 of the License, or (at your option) any later version.    This library 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    Library General Public License for more details.    You should have received a copy of the GNU Library General Public License    along with this library; see the file COPYING.LIB.  If not, write to    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,    Boston, MA 02111-1307, USA.***************************************************************************/#include "debug.h"#include "multitabbar.h"#include "multitabbar.moc"#include "multitabbar_p.h"#include "multitabbar_p.moc"#include <math.h>#include <qbutton.h>#include <qfontmetrics.h>#include <qlayout.h>#include <qpainter.h>#include <qpopupmenu.h>#include <qstyle.h>#include <qtimer.h>#include <kapplication.h>#include <kconfig.h>#include <kdebug.h>#include <kiconeffect.h>#include <kiconloader.h>#include <klocale.h>#include <kpopupmenu.h>#include <kstringhandler.h>#define NEARBYINT(i) ((int(float(i) + 0.5)))namespace Amarok { extern KConfig *config( const QString& ); }class MultiTabBarTabPrivate{    public:        QPixmap pix;};class MultiTabBarButtonPrivate{    public:        MultiTabBarButtonPrivate() : finalDropTarget( 0 ) {}        DropProxyTarget *finalDropTarget;};MultiTabBarInternal::MultiTabBarInternal( QWidget *parent, MultiTabBar::MultiTabBarMode bm ) : QScrollView( parent ){    m_expandedTabSize = -1;    m_showActiveTabTexts = false;    m_tabs.setAutoDelete( true );    m_barMode = bm;    setHScrollBarMode( AlwaysOff );    setVScrollBarMode( AlwaysOff );    if ( bm == MultiTabBar::Vertical ) {        box = new QWidget( viewport() );        mainLayout = new QVBoxLayout( box );        mainLayout->setAutoAdd( true );        box->setFixedWidth( 24 );        setFixedWidth( 24 );    } else {        box = new QWidget( viewport() );        mainLayout = new QHBoxLayout( box );        mainLayout->setAutoAdd( true );        box->setFixedHeight( 24 );        setFixedHeight( 24 );    }    addChild( box );    setFrameStyle( NoFrame );    viewport() ->setBackgroundMode( Qt::PaletteBackground );    /*  box->setPaletteBackgroundColor(Qt::red);        setPaletteBackgroundColor(Qt::green);*/}void MultiTabBarInternal::setStyle( enum MultiTabBar::MultiTabBarStyle style ){    m_style = style;    for ( uint i = 0;i < m_tabs.count();i++ )        m_tabs.at( i ) ->setStyle( m_style );    if ( ( m_style == MultiTabBar::KDEV3 ) ||            ( m_style == MultiTabBar::KDEV3ICON ) ||            ( m_style == MultiTabBar::AMAROK ) ) {        delete mainLayout;        mainLayout = 0;        resizeEvent( 0 );    } else if ( mainLayout == 0 ) {        if ( m_barMode == MultiTabBar::Vertical ) {            box = new QWidget( viewport() );            mainLayout = new QVBoxLayout( box );            box->setFixedWidth( 24 );            setFixedWidth( 24 );        } else {            box = new QWidget( viewport() );            mainLayout = new QHBoxLayout( box );            box->setFixedHeight( 24 );            setFixedHeight( 24 );        }        addChild( box );        for ( uint i = 0;i < m_tabs.count();i++ )            mainLayout->add( m_tabs.at( i ) );        mainLayout->setAutoAdd( true );    }    viewport() ->repaint();}void MultiTabBarInternal::drawContents ( QPainter * paint, int clipx, int clipy, int clipw, int cliph ){    QScrollView::drawContents ( paint , clipx, clipy, clipw, cliph );    if ( m_position == MultiTabBar::Right ) {        paint->setPen( colorGroup().shadow() );        paint->drawLine( 0, 0, 0, viewport() ->height() );        paint->setPen( colorGroup().background().dark( 120 ) );        paint->drawLine( 1, 0, 1, viewport() ->height() );    } else        if ( m_position == MultiTabBar::Left ) {            paint->setPen( colorGroup().light() );            paint->drawLine( 23, 0, 23, viewport() ->height() );            paint->drawLine( 22, 0, 22, viewport() ->height() );            paint->setPen( colorGroup().shadow() );            paint->drawLine( 0, 0, 0, viewport() ->height() );        } else            if ( m_position == MultiTabBar::Bottom ) {                paint->setPen( colorGroup().shadow() );                paint->drawLine( 0, 0, viewport() ->width(), 0 );                paint->setPen( colorGroup().background().dark( 120 ) );                paint->drawLine( 0, 1, viewport() ->width(), 1 );            } else {                paint->setPen( colorGroup().light() );                paint->drawLine( 0, 23, viewport() ->width(), 23 );                paint->drawLine( 0, 22, viewport() ->width(), 22 );                /*                paint->setPen(colorGroup().shadow());                                paint->drawLine(0,0,0,viewport()->height());*/            }}void MultiTabBarInternal::contentsMousePressEvent( QMouseEvent *ev ){    ev->ignore();}void MultiTabBarInternal::showTabSelectionMenu(QPoint pos){    KPopupMenu popup;    popup.insertTitle(  i18n("Browsers") , /*id*/ -1, /*index*/ 1 );    popup.setCheckable( true );    for( uint i = 0; i < m_tabs.count(); i++ ) {        MultiTabBarTab* tab = m_tabs.at( i );        popup.insertItem( tab->text(), i );        popup.setItemChecked(i, tab->visible() ? true : false);    }    int col = popup.exec(pos);    if ( col >= 0 )        setTabVisible( col, !popup.isItemChecked(col) );}void MultiTabBarInternal::mousePressEvent( QMouseEvent *ev ){    if ( ev->button() != QMouseEvent::RightButton ){        ev->ignore();        return;    }    // right button pressed    showTabSelectionMenu(ev->globalPos());}#define CALCDIFF(m_tabs,diff,i) if (m_lines>(int)lines) {\                    /*kdDebug()<<"i="<<i<<" visibleTabCount="<<visibleTabCount()<<" space="<<space<<endl;*/ \                    uint ulen=0;\                    diff=0; \                    for (uint i2=i;i2<visibleTabCount();i2++) {\                        uint l1=sizePerTab();\                        if ((ulen+l1)>space){\                            if (ulen==0) diff=0;\                            else diff=((float)(space-ulen))/(i2-i);\                            break;\                        }\                        ulen+=l1;\                    }\                } else {diff=0; }void MultiTabBarInternal::resizeEvent( QResizeEvent *ev ){    /*  kdDebug()<<"MultiTabBarInternal::resizeEvent"<<endl;        kdDebug()<<"MultiTabBarInternal::resizeEvent - box geometry"<<box->geometry()<<endl;        kdDebug()<<"MultiTabBarInternal::resizeEvent - geometry"<<geometry()<<endl;*/    if ( ev ) QScrollView::resizeEvent( ev );    if ( ( m_style == MultiTabBar::KDEV3 ) ||            ( m_style == MultiTabBar::KDEV3ICON ) ||            ( m_style == MultiTabBar::AMAROK ) ) {        box->setGeometry( 0, 0, width(), height() );        int lines = 1;        uint space;        float tmp = 0;        if ( ( m_position == MultiTabBar::Bottom ) || ( m_position == MultiTabBar::Top ) )            space = width();        else            space = height(); // made space for tab management button        int cnt = 0;        //CALCULATE LINES        const uint tabCount = m_tabs.count();        for ( uint i = 0;i < tabCount;i++ ) {            if ( ! m_tabs.at( i ) ->visible() ) continue;            cnt++;            tmp += sizePerTab();            if ( tmp > space ) {                if ( cnt > 1 ) i--;                else if ( i == ( tabCount - 1 ) ) break;                cnt = 0;                tmp = 0;                lines++;            }        }        //SET SIZE & PLACE        float diff = 0;        cnt = 0;        if ( ( m_position == MultiTabBar::Bottom ) || ( m_position == MultiTabBar::Top ) ) {            setFixedHeight( lines * 24 );            box->setFixedHeight( lines * 24 );            m_lines = height() / 24 - 1;            lines = 0;            CALCDIFF( m_tabs, diff, 0 )            tmp = -diff;            //kdDebug()<<"m_lines recalculated="<<m_lines<<endl;            for ( uint i = 0;i < tabCount;i++ ) {                MultiTabBarTab *tab = m_tabs.at( i );                if ( ! tab->visible() ) continue;                cnt++;                tmp += sizePerTab() + diff;                if ( tmp > space ) {                    //kdDebug()<<"about to start new line"<<endl;                    if ( cnt > 1 ) {                        CALCDIFF( m_tabs, diff, i )                        i--;                    } else {                        //kdDebug()<<"placing line on old line"<<endl;                        kdDebug() << "diff=" << diff << endl;                        tab->removeEventFilter( this );                        tab->move( NEARBYINT( tmp - sizePerTab() ), lines * 24 );                        //						tab->setFixedWidth(tab->neededSize()+diff);                        tab->setFixedWidth( NEARBYINT( tmp + diff ) - tab->x() );;                        tab->installEventFilter( this );                        CALCDIFF( m_tabs, diff, ( i + 1 ) )                    }                    tmp = -diff;                    cnt = 0;                    lines++;                    //kdDebug()<<"starting new line:"<<lines<<endl;                } else {                    //kdDebug()<<"Placing line on line:"<<lines<<" pos: (x/y)=("<<tmp-m_tabs.at(i)->neededSize()<<"/"<<lines*24<<")"<<endl;                    //kdDebug()<<"diff="<<diff<<endl;                    tab->removeEventFilter( this );                    tab->move( NEARBYINT( tmp - sizePerTab() ), lines * 24 );                    tab->setFixedWidth( NEARBYINT( tmp + diff ) - tab->x() );;                    //tab->setFixedWidth(tab->neededSize()+diff);                    tab->installEventFilter( this );                }            }        } else {            // Left or Right            setFixedWidth( lines * 24 );            box->setFixedWidth( lines * 24 );            m_lines = lines = width() / 24;            lines = 0;            CALCDIFF( m_tabs, diff, 0 )            tmp = -diff;            for ( uint i = 0;i < tabCount;i++ ) {                MultiTabBarTab *tab = m_tabs.at( i );                if ( ! tab->visible() ) continue;                cnt++;                tmp += sizePerTab() + diff;                if ( tmp > space ) {                    if ( cnt > 1 ) {                        CALCDIFF( m_tabs, diff, i );                        tmp = -diff;                        i--;                    } else {                        tab->removeEventFilter( this );                        tab->move( lines * 24, NEARBYINT( tmp - sizePerTab() ) );                        tab->setFixedHeight( NEARBYINT( tmp + diff ) - tab->y() );;                        tab->installEventFilter( this );                    }                    cnt = 0;                    tmp = -diff;                    lines++;                } else {                    tab->removeEventFilter( this );                    tab->move( lines * 24, NEARBYINT( tmp - sizePerTab() ) );                    tab->setFixedHeight( NEARBYINT( tmp + diff ) - tab->y() );                    tab->installEventFilter( this );                }            }        }        //kdDebug()<<"needed lines:"<<m_lines<<endl;    } else {        int size = 0; /*move the calculation into another function and call it only on add tab and tab click events*/        for ( int i = 0;i < ( int ) m_tabs.count();i++ )            size += ( m_barMode == MultiTabBar::Vertical ? m_tabs.at( i ) ->height() : m_tabs.at( i ) ->width() );        if ( ( m_position == MultiTabBar::Bottom ) || ( m_position == MultiTabBar::Top ) )            box->setGeometry( 0, 0, size, height() );        else box->setGeometry( 0, 0, width(), size );    }}void MultiTabBarInternal::showActiveTabTexts( bool show ){    m_showActiveTabTexts = show;}MultiTabBarTab* MultiTabBarInternal::tab( int id ) const{    for ( QPtrListIterator<MultiTabBarTab> it( m_tabs );it.current();++it ) {        if ( it.current() ->id() == id ) return it.current();    }    return 0;}bool MultiTabBarInternal::eventFilter( QObject *, QEvent *e ){    if ( e->type() == QEvent::Resize )        resizeEvent( 0 );    //PATCH by markey: Allow switching of tabs with mouse wheel    if ( e->type() == QEvent::Wheel ) {        QWheelEvent* event = static_cast<QWheelEvent*>( e );        const int delta = event->delta() / 120;        // Determine which tab is currently active        uint i;        for( i = 0; i < m_tabs.count(); i++ )            if ( m_tabs.at( i )->isOn() ) break;        // Calculate index of the new tab to activate        int newTab = i - delta;        while (true) {            if ( newTab < 0 ) {                newTab = i;                break;            }            if ( newTab > (int)m_tabs.count() - 1 ) {                newTab = i;                break;            }            if ( m_tabs.at( newTab )->visible() && m_tabs.at( newTab )->isEnabled() )                break;            // try one tab more            newTab -= delta;        }        if ( i < m_tabs.count() && newTab != (int)i )            m_tabs.at( newTab )->animateClick();        // Must return true here for the wheel to work properly        return true;    }    return false;}int MultiTabBarInternal::appendTab( const QPixmap &pic , int id, const QString& text, const QString& identifier ){    MultiTabBarTab * tab;    m_tabs.append( tab = new MultiTabBarTab( pic, text, id, box, m_position, m_style ) );    tab->setIdentifier( identifier );    tab->installEventFilter( this );    tab->showActiveTabText( m_showActiveTabTexts );    tab->setVisible( Amarok::config( "BrowserBar" )->readBoolEntry( identifier, true ) );    if ( m_style == MultiTabBar::KONQSBC ) {        if ( m_expandedTabSize < tab->neededSize() ) {            m_expandedTabSize = tab->neededSize();            for ( uint i = 0;i < m_tabs.count();i++ )                m_tabs.at( i ) ->setSize( m_expandedTabSize );        } else tab->setSize( m_expandedTabSize );    } else tab->updateState();    if ( tab->visible() ) {        tab->show();        resizeEvent( 0 );    } else tab->hide();    return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区久久久| 99国产欧美另类久久久精品 | 日本一区二区三区久久久久久久久不| 日本成人在线一区| 26uuu国产在线精品一区二区| 麻豆国产一区二区| 久久久精品黄色| av福利精品导航| 亚洲丰满少妇videoshd| 欧美一区二区三区喷汁尤物| 久久国产精品无码网站| 国产亚洲欧美一区在线观看| 成人av影视在线观看| 亚洲精品国产品国语在线app| 欧美综合一区二区| 喷白浆一区二区| 国产欧美日韩三区| 日本高清不卡视频| 卡一卡二国产精品| ...xxx性欧美| 欧美一二三区在线| 成人激情开心网| 午夜免费久久看| 久久久国产精品麻豆| 日本精品一级二级| 久久精品国产一区二区| 18成人在线观看| 91精品国产综合久久久久久久久久| 精品一区二区在线免费观看| 国产精品久久久久久久久果冻传媒| 欧洲生活片亚洲生活在线观看| 麻豆精品在线视频| 亚洲日本青草视频在线怡红院| 51精品视频一区二区三区| 成人午夜av影视| 日本vs亚洲vs韩国一区三区二区 | 91浏览器打开| 精品影视av免费| 亚洲综合在线第一页| 国产婷婷色一区二区三区在线| 91久久国产最好的精华液| 美国av一区二区| 亚洲综合一区二区三区| 欧美国产精品专区| 欧美大片在线观看| 欧美色手机在线观看| 国产精品一区免费视频| 日本成人在线网站| 亚洲午夜精品久久久久久久久| 久久精品人人做人人综合| 日韩欧美一区在线| 欧洲另类一二三四区| 99久久精品免费| 国产91精品露脸国语对白| 蜜臀精品久久久久久蜜臀 | 欧美一区二区女人| 欧美日韩一区二区三区免费看| 成人av午夜影院| 国产福利不卡视频| 秋霞成人午夜伦在线观看| 亚洲一区二区三区四区五区中文| 亚洲欧美一区二区在线观看| 国产婷婷精品av在线| 精品免费国产二区三区| 欧美一区二区三区在| 欧美日韩亚州综合| 欧美亚洲动漫另类| 欧美午夜精品一区二区蜜桃| 91麻豆免费视频| 99久久久久免费精品国产 | 欧美中文字幕久久| 日本韩国一区二区三区视频| 不卡一卡二卡三乱码免费网站| 丁香天五香天堂综合| 国产 欧美在线| 成人国产亚洲欧美成人综合网| 国产精品一区三区| 成人一区二区三区| 成人精品免费看| caoporen国产精品视频| www.日本不卡| 一本久久精品一区二区| 色国产精品一区在线观看| 色哟哟一区二区在线观看| 欧美午夜电影网| 9191国产精品| 日韩精品一区二区三区视频播放| 欧美v国产在线一区二区三区| 337p日本欧洲亚洲大胆精品| 国产欧美日产一区| 亚洲精品国产高清久久伦理二区| 亚洲最新在线观看| 日本亚洲三级在线| 国产综合色在线视频区| 国产高清无密码一区二区三区| 成人免费视频播放| 91在线观看一区二区| 欧美日韩高清在线播放| 日韩欧美自拍偷拍| 国产欧美一区二区精品忘忧草| 国产精品久久久久久福利一牛影视| 国产精品久久久久久久久免费樱桃 | 亚洲在线免费播放| 午夜激情久久久| 久久99深爱久久99精品| 成人综合在线网站| 日本高清成人免费播放| 91精品婷婷国产综合久久竹菊| 日韩欧美国产一区在线观看| 97精品电影院| xfplay精品久久| 久久久91精品国产一区二区精品| 亚洲成人免费影院| 欧美bbbbb| 成人一级黄色片| 7777精品伊人久久久大香线蕉的 | 成人免费精品视频| 欧美日韩色综合| 久久蜜桃香蕉精品一区二区三区| 亚洲人123区| 韩国理伦片一区二区三区在线播放 | 国内精品视频一区二区三区八戒| 成人性视频网站| 欧美日韩高清在线| 欧美激情自拍偷拍| 日韩黄色在线观看| 99久久精品费精品国产一区二区| 制服丝袜亚洲精品中文字幕| 国产精品免费av| 蜜桃av一区二区三区电影| 91原创在线视频| 久久嫩草精品久久久精品| 调教+趴+乳夹+国产+精品| 成人黄色一级视频| 精品国产制服丝袜高跟| 亚洲一级不卡视频| 成人av电影在线网| 精品国产三级a在线观看| 亚洲一区免费在线观看| www.色精品| 中文子幕无线码一区tr| 久久se精品一区二区| 欧美日韩日日摸| 亚洲男人的天堂在线观看| 成熟亚洲日本毛茸茸凸凹| 日韩视频免费直播| 午夜精品福利久久久| 色乱码一区二区三区88| 中文字幕在线一区| 国产激情一区二区三区桃花岛亚洲| 日韩亚洲电影在线| 午夜久久久久久| 91网站在线观看视频| 国产精品无码永久免费888| 韩国精品在线观看| 欧美大片国产精品| 麻豆精品久久精品色综合| 欧美精品高清视频| 天堂久久久久va久久久久| 欧美天天综合网| 亚洲精品日韩专区silk| 一本到不卡精品视频在线观看| 中文字幕高清不卡| 成人免费电影视频| 国产精品美日韩| 成人av电影在线| 亚洲欧洲精品天堂一级 | 精品1区2区在线观看| 久久机这里只有精品| 欧美成人aa大片| 国产成人一区在线| 国产精品天天摸av网| av在线不卡免费看| 亚洲免费色视频| 在线欧美小视频| 亚欧色一区w666天堂| 欧美一区二区精品久久911| 久久精品99国产国产精| 国产亚洲欧洲一区高清在线观看| 国产一区在线观看视频| 欧美高清在线视频| 色婷婷激情久久| 亚洲成人三级小说| 精品美女一区二区三区| 丁香另类激情小说| 亚洲精品日日夜夜| 欧美一区二区三区免费视频| 精品一区二区三区香蕉蜜桃| 久久久精品一品道一区| 91在线视频网址| 日一区二区三区| 久久伊99综合婷婷久久伊| av一区二区三区在线| 午夜精品久久久久久久久久久 | 欧美影视一区在线| 美女性感视频久久| 国产精品麻豆视频| 欧美精品久久99久久在免费线| 国产在线一区二区综合免费视频| 国产精品免费久久|