summaryrefslogtreecommitdiffstats
path: root/kdeui/ktabbar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdeui/ktabbar.cpp')
-rw-r--r--kdeui/ktabbar.cpp427
1 files changed, 0 insertions, 427 deletions
diff --git a/kdeui/ktabbar.cpp b/kdeui/ktabbar.cpp
deleted file mode 100644
index eed23ebfe..000000000
--- a/kdeui/ktabbar.cpp
+++ /dev/null
@@ -1,427 +0,0 @@
-/* This file is part of the KDE libraries
- Copyright (C) 2003 Stephan Binner <binner@kde.org>
- Copyright (C) 2003 Zack Rusin <zack@kde.org>
-
- 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., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include <tqapplication.h>
-#include <tqcursor.h>
-#include <tqpainter.h>
-#include <tqstyle.h>
-#include <tqtimer.h>
-#include <tqpushbutton.h>
-#include <tqtooltip.h>
-
-#include <kglobalsettings.h>
-#include <kiconloader.h>
-#include <klocale.h>
-
-#include "ktabbar.h"
-#include "ktabwidget.h"
-
-KTabBar::KTabBar( TQWidget *parent, const char *name )
- : TQTabBar( parent, name ), mReorderStartTab( -1 ), mReorderPreviousTab( -1 ),
- mHoverCloseButtonTab( 0 ), mDragSwitchTab( 0 ), mHoverCloseButton( 0 ),
- mHoverCloseButtonEnabled( false ), mHoverCloseButtonDelayed( true ),
- mTabReorderingEnabled( false ), mTabCloseActivatePrevious( false )
-{
- setAcceptDrops( true );
- setMouseTracking( true );
-
- mEnableCloseButtonTimer = new TQTimer( this );
- connect( mEnableCloseButtonTimer, TQT_SIGNAL( timeout() ), TQT_SLOT( enableCloseButton() ) );
-
- mActivateDragSwitchTabTimer = new TQTimer( this );
- connect( mActivateDragSwitchTabTimer, TQT_SIGNAL( timeout() ), TQT_SLOT( activateDragSwitchTab() ) );
-
- connect(this, TQT_SIGNAL(layoutChanged()), TQT_SLOT(onLayoutChange()));
-}
-
-KTabBar::~KTabBar()
-{
- //For the future
- //delete d;
-}
-
-void KTabBar::setTabEnabled( int id, bool enabled )
-{
- TQTab * t = tab( id );
- if ( t ) {
- if ( t->isEnabled() != enabled ) {
- t->setEnabled( enabled );
- TQRect r( t->rect() );
- if ( !enabled && id == currentTab() && count()>1 ) {
- TQPtrList<TQTab> *tablist = tabList();
- if ( mTabCloseActivatePrevious )
- t = tablist->tqat( count()-2 );
- else {
- int index = indexOf( id );
- index += ( index+1 == count() ) ? -1 : 1;
- t = tabAt( index );
- }
-
- if ( t->isEnabled() ) {
- r = r.unite( t->rect() );
- tablist->append( tablist->take( tablist->findRef( t ) ) );
- emit selected( t->identifier() );
- }
- }
- tqrepaint( r );
- }
- }
-}
-
-void KTabBar::mouseDoubleClickEvent( TQMouseEvent *e )
-{
- if( e->button() != Qt::LeftButton )
- return;
-
- TQTab *tab = selectTab( e->pos() );
- if( tab ) {
- emit( mouseDoubleClick( indexOf( tab->identifier() ) ) );
- return;
- }
- TQTabBar::mouseDoubleClickEvent( e );
-}
-
-void KTabBar::mousePressEvent( TQMouseEvent *e )
-{
- if( e->button() == Qt::LeftButton ) {
- mEnableCloseButtonTimer->stop();
- mDragStart = e->pos();
- }
- else if( e->button() == Qt::RightButton ) {
- TQTab *tab = selectTab( e->pos() );
- if( tab ) {
- emit( contextMenu( indexOf( tab->identifier() ), mapToGlobal( e->pos() ) ) );
- return;
- }
- }
- TQTabBar::mousePressEvent( e );
-}
-
-void KTabBar::mouseMoveEvent( TQMouseEvent *e )
-{
- if ( e->state() == Qt::LeftButton ) {
- TQTab *tab = selectTab( e->pos() );
- if ( mDragSwitchTab && tab != mDragSwitchTab ) {
- mActivateDragSwitchTabTimer->stop();
- mDragSwitchTab = 0;
- }
-
- int delay = KGlobalSettings::dndEventDelay();
- TQPoint newPos = e->pos();
- if( newPos.x() > mDragStart.x()+delay || newPos.x() < mDragStart.x()-delay ||
- newPos.y() > mDragStart.y()+delay || newPos.y() < mDragStart.y()-delay )
- {
- if( tab ) {
- emit( initiateDrag( indexOf( tab->identifier() ) ) );
- return;
- }
- }
- }
- else if ( e->state() == Qt::MidButton ) {
- if (mReorderStartTab==-1) {
- int delay = KGlobalSettings::dndEventDelay();
- TQPoint newPos = e->pos();
- if( newPos.x() > mDragStart.x()+delay || newPos.x() < mDragStart.x()-delay ||
- newPos.y() > mDragStart.y()+delay || newPos.y() < mDragStart.y()-delay )
- {
- TQTab *tab = selectTab( e->pos() );
- if( tab && mTabReorderingEnabled ) {
- mReorderStartTab = indexOf( tab->identifier() );
- grabMouse( tqsizeAllCursor );
- return;
- }
- }
- }
- else {
- TQTab *tab = selectTab( e->pos() );
- if( tab ) {
- int reorderStopTab = indexOf( tab->identifier() );
- if ( mReorderStartTab!=reorderStopTab && mReorderPreviousTab!=reorderStopTab ) {
- emit( moveTab( mReorderStartTab, reorderStopTab ) );
- mReorderPreviousTab=mReorderStartTab;
- mReorderStartTab=reorderStopTab;
- return;
- }
- }
- }
- }
-
- if ( mHoverCloseButtonEnabled && mReorderStartTab==-1) {
- TQTab *t = selectTab( e->pos() );
- if( t && t->iconSet() && t->isEnabled() ) {
- TQPixmap pixmap = t->iconSet()->pixmap( TQIconSet::Small, TQIconSet::Normal );
- TQRect rect( 0, 0, pixmap.width() + 4, pixmap.height() +4);
-
- 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 = tqstyle().tqpixelMetric( TQStyle::PM_TabBarTabShiftHorizontal, this ) + 3;
- yoff = tqstyle().tqpixelMetric( TQStyle::PM_TabBarTabShiftVertical, this ) - 4;
- }
- else {
- xoff = 7;
- yoff = 0;
- }
- rect.moveLeft( t->rect().left() + 2 + xoff );
- rect.moveTop( t->rect().center().y()-pixmap.height()/2 + yoff );
- if ( rect.contains( e->pos() ) ) {
- if ( mHoverCloseButton ) {
- if ( mHoverCloseButtonTab == t )
- return;
- mEnableCloseButtonTimer->stop();
- mHoverCloseButton->deleteLater();
- mHoverCloseButton = 0;
- }
-
- mHoverCloseButton = new TQPushButton( this );
- mHoverCloseButton->setIconSet( KGlobal::iconLoader()->loadIconSet("fileclose", KIcon::Toolbar, KIcon::SizeSmall) );
- mHoverCloseButton->setGeometry( rect );
- TQToolTip::add(mHoverCloseButton,i18n("Close this tab"));
- mHoverCloseButton->setFlat(true);
- mHoverCloseButton->show();
- if ( mHoverCloseButtonDelayed ) {
- mHoverCloseButton->setEnabled(false);
- mEnableCloseButtonTimer->start( TQApplication::doubleClickInterval(), true );
- }
- mHoverCloseButtonTab = t;
- connect( mHoverCloseButton, TQT_SIGNAL( clicked() ), TQT_SLOT( closeButtonClicked() ) );
- return;
- }
- }
- if ( mHoverCloseButton ) {
- mEnableCloseButtonTimer->stop();
- mHoverCloseButton->deleteLater();
- mHoverCloseButton = 0;
- }
- }
-
- TQTabBar::mouseMoveEvent( e );
-}
-
-void KTabBar::enableCloseButton()
-{
- mHoverCloseButton->setEnabled(true);
-}
-
-void KTabBar::activateDragSwitchTab()
-{
- TQTab *tab = selectTab( mapFromGlobal( TQCursor::pos() ) );
- if ( tab && mDragSwitchTab == tab )
- setCurrentTab( mDragSwitchTab );
- mDragSwitchTab = 0;
-}
-
-void KTabBar::mouseReleaseEvent( TQMouseEvent *e )
-{
- if( e->button() == Qt::MidButton ) {
- if ( mReorderStartTab==-1 ) {
- TQTab *tab = selectTab( e->pos() );
- if( tab ) {
- emit( mouseMiddleClick( indexOf( tab->identifier() ) ) );
- return;
- }
- }
- else {
- releaseMouse();
- setCursor( tqarrowCursor );
- mReorderStartTab=-1;
- mReorderPreviousTab=-1;
- }
- }
- TQTabBar::mouseReleaseEvent( e );
-}
-
-void KTabBar::dragMoveEvent( TQDragMoveEvent *e )
-{
- TQTab *tab = selectTab( e->pos() );
- if( tab ) {
- bool accept = false;
- // The tqreceivers of the testCanDecode() signal has to adjust
- // 'accept' accordingly.
- emit testCanDecode( e, accept);
- if ( accept && tab != TQTabBar::tab( currentTab() ) ) {
- mDragSwitchTab = tab;
- mActivateDragSwitchTabTimer->start( TQApplication::doubleClickInterval()*2, true );
- }
- e->accept( accept );
- return;
- }
- e->accept( false );
- TQTabBar::dragMoveEvent( e );
-}
-
-void KTabBar::dropEvent( TQDropEvent *e )
-{
- TQTab *tab = selectTab( e->pos() );
- if( tab ) {
- mActivateDragSwitchTabTimer->stop();
- mDragSwitchTab = 0;
- emit( receivedDropEvent( indexOf( tab->identifier() ) , e ) );
- return;
- }
- TQTabBar::dropEvent( e );
-}
-
-#ifndef QT_NO_WHEELEVENT
-void KTabBar::wheelEvent( TQWheelEvent *e )
-{
- if ( e->orientation() == Qt::Horizontal )
- return;
-
- emit( wheelDelta( e->delta() ) );
-}
-#endif
-
-void KTabBar::setTabColor( int id, const TQColor& color )
-{
- TQTab *t = tab( id );
- if ( t ) {
- mTabColors.insert( id, color );
- tqrepaint( t->rect(), false );
- }
-}
-
-const TQColor &KTabBar::tabColor( int id ) const
-{
- if ( mTabColors.contains( id ) )
- return mTabColors[id];
-
- return tqcolorGroup().foreground();
-}
-
-int KTabBar::insertTab( TQTab *t, int index )
-{
- int res = TQTabBar::insertTab( t, index );
-
- if ( mTabCloseActivatePrevious && count() > 2 ) {
- TQPtrList<TQTab> *tablist = tabList();
- tablist->insert( count()-2, tablist->take( tablist->findRef( t ) ) );
- }
-
- return res;
-}
-
-void KTabBar::removeTab( TQTab *t )
-{
- mTabColors.remove( t->identifier() );
- TQTabBar::removeTab( t );
-}
-
-void KTabBar::paintLabel( TQPainter *p, const TQRect& br,
- TQTab *t, bool has_focus ) const
-{
- TQRect r = br;
- bool selected = currentTab() == t->identifier();
- if ( t->iconSet() ) {
- // the tab has an iconset, draw it in the right mode
- TQIconSet::Mode mode = ( t->isEnabled() && isEnabled() )
- ? TQIconSet::Normal : TQIconSet::Disabled;
- if ( mode == TQIconSet::Normal && has_focus )
- mode = TQIconSet::Active;
- TQPixmap pixmap = t->iconSet()->pixmap( TQIconSet::Small, mode );
- int pixw = pixmap.width();
- int pixh = pixmap.height();
- r.setLeft( r.left() + pixw + 4 );
- r.setRight( r.right() + 2 );
-
- int inactiveXShift = tqstyle().tqpixelMetric( TQStyle::PM_TabBarTabShiftHorizontal, this );
- int inactiveYShift = tqstyle().tqpixelMetric( TQStyle::PM_TabBarTabShiftVertical, this );
-
- int right = t->text().isEmpty() ? br.right() - pixw : br.left() + 2;
-
- p->drawPixmap( right + (selected ? 0 : inactiveXShift),
- br.center().y() - pixh / 2 + (selected ? 0 : inactiveYShift),
- pixmap );
- }
-
- TQStyle::SFlags flags = TQStyle::Style_Default;
-
- if ( isEnabled() && t->isEnabled() )
- flags |= TQStyle::Style_Enabled;
- if ( has_focus )
- flags |= TQStyle::Style_HasFocus;
-
- TQColorGroup cg( tqcolorGroup() );
- if ( mTabColors.contains( t->identifier() ) )
- cg.setColor( TQColorGroup::Foreground, mTabColors[t->identifier()] );
-
- tqstyle().tqdrawControl( TQStyle::CE_TabBarLabel, p, this, r,
- t->isEnabled() ? cg : tqpalette().disabled(),
- flags, TQStyleOption(t) );
-}
-
-bool KTabBar::isTabReorderingEnabled() const
-{
- return mTabReorderingEnabled;
-}
-
-void KTabBar::setTabReorderingEnabled( bool on )
-{
- mTabReorderingEnabled = on;
-}
-
-bool KTabBar::tabCloseActivatePrevious() const
-{
- return mTabCloseActivatePrevious;
-}
-
-void KTabBar::setTabCloseActivatePrevious( bool on )
-{
- mTabCloseActivatePrevious = on;
-}
-
-void KTabBar::closeButtonClicked()
-{
- emit closeRequest( indexOf( mHoverCloseButtonTab->identifier() ) );
-}
-
-void KTabBar::setHoverCloseButton( bool button )
-{
- mHoverCloseButtonEnabled = button;
- if ( !button )
- onLayoutChange();
-}
-
-bool KTabBar::hoverCloseButton() const
-{
- return mHoverCloseButtonEnabled;
-}
-
-void KTabBar::setHoverCloseButtonDelayed( bool delayed )
-{
- mHoverCloseButtonDelayed = delayed;
-}
-
-bool KTabBar::hoverCloseButtonDelayed() const
-{
- return mHoverCloseButtonDelayed;
-}
-
-void KTabBar::onLayoutChange()
-{
- mEnableCloseButtonTimer->stop();
- delete mHoverCloseButton;
- mHoverCloseButton = 0;
- mHoverCloseButtonTab = 0;
- mActivateDragSwitchTabTimer->stop();
- mDragSwitchTab = 0;
-}
-
-#include "ktabbar.moc"