[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/4.0/kdelibs/kdeui/widgets
From: Andras Mantia <amantia () kde ! org>
Date: 2008-01-29 9:46:50
Message-ID: 1201600010.419736.26767.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 768071 by amantia:
Backport the "show close buttons on tabs" implementation.
M +62 -57 ktabbar.cpp
M +2 -4 ktabbar.h
--- branches/KDE/4.0/kdelibs/kdeui/widgets/ktabbar.cpp #768070:768071
@@ -27,10 +27,13 @@
#include <QtGui/QMouseEvent>
#include <QtGui/QPushButton>
#include <QtGui/QStyle>
+#include <QtGui/QStyleOption>
#include <kglobalsettings.h>
+#include <kicon.h>
#include <kiconloader.h>
#include <klocale.h>
+#include <kstyle.h>
class KTabBar::Private
{
@@ -38,11 +41,11 @@
Private()
: mReorderStartTab( -1 ),
mReorderPreviousTab( -1 ),
- // mHoverCloseButtonTab( 0 ),
mDragSwitchTab( -1 ),
- // mHoverCloseButton( 0 ),
- // mHoverCloseButtonEnabled( false ),
- // mHoverCloseButtonDelayed( true ),
+ mHoverCloseButtonTab( -1 ),
+ mHoverCloseButton( 0 ),
+ mHoverCloseButtonEnabled( false ),
+ mHoverCloseButtonDelayed( true ),
mTabReorderingEnabled( false ),
mTabCloseActivatePrevious( false )
{
@@ -52,13 +55,14 @@
int mReorderStartTab;
int mReorderPreviousTab;
int mDragSwitchTab;
- //QTab *mHoverCloseButtonTab, *mDragSwitchTab;
- //QPushButton *mHoverCloseButton;
- //QTimer mEnableCloseButtonTimer;
+ int mHoverCloseButtonTab;
+ //QTab *mDragSwitchTab;
+ QPushButton *mHoverCloseButton;
+ QTimer *mEnableCloseButtonTimer;
QTimer *mActivateDragSwitchTabTimer;
- //bool mHoverCloseButtonEnabled;
- //bool mHoverCloseButtonDelayed;
+ bool mHoverCloseButtonEnabled;
+ bool mHoverCloseButtonDelayed;
bool mTabReorderingEnabled : 1;
bool mTabCloseActivatePrevious : 1;
@@ -71,8 +75,9 @@
setAcceptDrops( true );
setMouseTracking( true );
- //d->mEnableCloseButtonTimer = new QTimer( this );
- //connect( d->mEnableCloseButtonTimer, SIGNAL( timeout() ), SLOT( \
enableCloseButton() ) ); + d->mEnableCloseButtonTimer = new QTimer( this );
+ d->mEnableCloseButtonTimer->setSingleShot( true );
+ connect( d->mEnableCloseButtonTimer, SIGNAL( timeout() ), SLOT( \
enableCloseButton() ) );
d->mActivateDragSwitchTabTimer = new QTimer( this );
d->mActivateDragSwitchTabTimer->setSingleShot( true );
@@ -104,7 +109,7 @@
void KTabBar::mousePressEvent( QMouseEvent *event )
{
if ( event->button() == Qt::LeftButton ) {
- //d->mEnableCloseButtonTimer->stop();
+ d->mEnableCloseButtonTimer->stop();
d->mDragStart = event->pos();
} else if( event->button() == Qt::RightButton ) {
int tab = selectTab( event->pos() );
@@ -167,24 +172,39 @@
}
}
- /*if ( d->mHoverCloseButtonEnabled && d->mReorderStartTab == -1 ) {
- QTab *t = selectTab( event->pos() );
- if ( t && t->iconSet() && t->isEnabled() ) {
- QPixmap pixmap = t->iconSet()->pixmap( QIcon::Small, QIcon::Normal );
- QRect rect( 0, 0, pixmap.width() + 4, pixmap.height() +4);
+ if ( d->mHoverCloseButtonEnabled && d->mReorderStartTab == -1 ) {
+ int t = selectTab( event->pos() );
+ if ( t != -1 && !tabIcon(t).isNull() && isTabEnabled(t) ) {
+ QPixmap pixmap = tabIcon(t).pixmap( KIconLoader::SizeSmall, QIcon::Normal \
); + QRect rect( 0, 0, pixmap.width() + 4, pixmap.height() + 4 );
+ QStyleOption option;
+ option.initFrom(this);
+ QStyle* st = style();
int xoff = 0, yoff = 0;
- // The additional offsets were found by try and error, TODO: find the \
rational behind them
- if ( t == tab( currentTab() ) ) {
- xoff = style().pixelMetric( QStyle::PM_TabBarTabShiftHorizontal, this ) \
+ 3;
- yoff = style().pixelMetric( QStyle::PM_TabBarTabShiftVertical, this ) - \
4;
- } else {
- xoff = 7;
- yoff = 0;
+ // The place for the icon was found by try and error, by trying to have good \
results with + // all styles
+ // TODO: find the rational behind them
+ if ( t == currentIndex() ) {
+ xoff = st->pixelMetric( QStyle::PM_TabBarTabShiftHorizontal, &option, \
this ); + yoff = st->pixelMetric( QStyle::PM_TabBarTabShiftVertical, \
&option, this ) - 1; + }
+
+ int xPos = 0;
+ if (qobject_cast<KStyle *>(style()) && layoutDirection() == Qt::RightToLeft) \
{ + //KStyle paints the tab icon on the right in RTL mode
+ xPos = st->pixelMetric( QStyle::PM_TabBarBaseOverlap, &option, this ) + \
st->pixelMetric( QStyle::PM_TabBarTabOverlap, &option, this ) + 4 + rect.width(); + \
rect.moveLeft( tabRect(t).right() - xPos ); + } else
+ {
+ xPos = st->pixelMetric( QStyle::PM_TabBarBaseOverlap, &option, this ) - \
st->pixelMetric( QStyle::PM_TabBarTabOverlap, &option, this ) + 5; + \
rect.moveLeft( tabRect(t).left() + xPos ); }
+ int yPos = st->pixelMetric( QStyle::PM_TabBarBaseHeight, &option, this ) - \
st->pixelMetric( QStyle::PM_TabBarTabVSpace, &option, this ) + 1; +
+ rect.moveTop( tabRect(t).center().y() - pixmap.height() / 2 - yoff - yPos );
+
- rect.moveLeft( t->rect().left() + 2 + xoff );
- rect.moveTop( t->rect().center().y() - pixmap.height() / 2 + yoff );
if ( rect.contains( event->pos() ) ) {
if ( d->mHoverCloseButton ) {
if ( d->mHoverCloseButtonTab == t )
@@ -195,14 +215,14 @@
}
d->mHoverCloseButton = new QPushButton( this );
- d->mHoverCloseButton->setIcon( KGlobal::iconLoader()->loadIconSet( \
"window-close", KIconLoader::Toolbar, KIconLoader::SizeSmall ) ); + \
d->mHoverCloseButton->setIcon( KIcon( "window-close" ) ); \
d->mHoverCloseButton->setGeometry( rect ); d->mHoverCloseButton->setToolTip( i18n( \
"Close this tab" ) ); d->mHoverCloseButton->setFlat( true );
d->mHoverCloseButton->show();
if ( d->mHoverCloseButtonDelayed ) {
d->mHoverCloseButton->setEnabled( false );
- d->mEnableCloseButtonTimer->start( QApplication::doubleClickInterval(), \
true ); + d->mEnableCloseButtonTimer->start( \
QApplication::doubleClickInterval() ); }
d->mHoverCloseButtonTab = t;
@@ -216,18 +236,18 @@
d->mHoverCloseButton->deleteLater();
d->mHoverCloseButton = 0;
}
- }*/
+ }
QTabBar::mouseMoveEvent( event );
}
-/*
+
void KTabBar::enableCloseButton()
{
d->mHoverCloseButton->setEnabled( true );
}
-*/
+
void KTabBar::activateDragSwitchTab()
{
int tab = selectTab( mapFromGlobal( QCursor::pos() ) );
@@ -327,55 +347,40 @@
d->mTabCloseActivatePrevious = on;
}
-/*
+
void KTabBar::closeButtonClicked()
{
- emit closeRequest( indexOf( d->mHoverCloseButtonTab->identifier() ) );
+ emit closeRequest( d->mHoverCloseButtonTab );
}
-*/
-void KTabBar::setHoverCloseButton( bool /*button*/ )
+void KTabBar::setHoverCloseButton( bool button )
{
- // KDE4 porting: disabled
- return;
-
-/*
d->mHoverCloseButtonEnabled = button;
if ( !button )
tabLayoutChange();
-*/
}
bool KTabBar::hoverCloseButton() const
{
- // KDE4 porting: disabled
- return false;
-
- //return d->mHoverCloseButtonEnabled;
+ return d->mHoverCloseButtonEnabled;
}
-void KTabBar::setHoverCloseButtonDelayed( bool /*delayed*/ )
+void KTabBar::setHoverCloseButtonDelayed( bool delayed )
{
- // KDE4 porting: disabled
- return;
-
- //d->mHoverCloseButtonDelayed = delayed;
+ d->mHoverCloseButtonDelayed = delayed;
}
bool KTabBar::hoverCloseButtonDelayed() const
{
- // KDE4 porting: disabled
- return false;
-
- //return d->mHoverCloseButtonDelayed;
+ return d->mHoverCloseButtonDelayed;
}
void KTabBar::tabLayoutChange()
{
- //d->mEnableCloseButtonTimer->stop();
- //delete d->mHoverCloseButton;
- //d->mHoverCloseButton = 0;
- //d->mHoverCloseButtonTab = 0;
+ d->mEnableCloseButtonTimer->stop();
+ delete d->mHoverCloseButton;
+ d->mHoverCloseButton = 0;
+ d->mHoverCloseButtonTab = 0;
d->mActivateDragSwitchTabTimer->stop();
d->mDragSwitchTab = 0;
}
--- branches/KDE/4.0/kdelibs/kdeui/widgets/ktabbar.h #768070:768071
@@ -57,11 +57,9 @@
*/
bool isTabReorderingEnabled() const;
- // KDE4 porting: disabled
void setHoverCloseButton( bool );
bool hoverCloseButton() const;
- // KDE4 porting: disabled
void setHoverCloseButtonDelayed( bool );
bool hoverCloseButtonDelayed() const;
@@ -122,8 +120,8 @@
virtual void dropEvent( QDropEvent *event );
protected Q_SLOTS:
- //virtual void closeButtonClicked();
- //virtual void enableCloseButton();
+ void closeButtonClicked();
+ void enableCloseButton();
virtual void activateDragSwitchTab();
protected:
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic