1 /* This file is (c) 2012 Tvangeste <i.4m.l33t@yandex.ru> 2 * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ 3 4 #include "maintabwidget.hh" 5 #include <QDebug> 6 #include <QEvent> 7 #include <QMouseEvent> 8 MainTabWidget(QWidget * parent)9MainTabWidget::MainTabWidget( QWidget * parent) : QTabWidget( parent ) { 10 hideSingleTab = false; 11 installEventFilter( this ); 12 tabBar()->installEventFilter( this ); 13 } 14 setHideSingleTab(bool hide)15void MainTabWidget::setHideSingleTab(bool hide) 16 { 17 hideSingleTab = hide; 18 updateTabBarVisibility(); 19 } 20 tabInserted(int index)21void MainTabWidget::tabInserted(int index) 22 { 23 (void) index; 24 updateTabBarVisibility(); 25 26 // Avoid bug in Qt 4.8.0 27 setUsesScrollButtons( count() > 10 ); 28 } 29 tabRemoved(int index)30void MainTabWidget::tabRemoved(int index) 31 { 32 (void) index; 33 updateTabBarVisibility(); 34 35 // Avoid bug in Qt 4.8.0 36 setUsesScrollButtons( count() > 10 ); 37 } 38 updateTabBarVisibility()39void MainTabWidget::updateTabBarVisibility() 40 { 41 tabBar()->setVisible( !hideSingleTab || tabBar()->count() > 1 ); 42 } 43 44 /* 45 void MainTabWidget::mouseDoubleClickEvent ( QMouseEvent * event ) 46 { 47 (void) event; 48 emit doubleClicked(); 49 } 50 */ 51 eventFilter(QObject * obj,QEvent * ev)52bool MainTabWidget::eventFilter( QObject * obj, QEvent * ev ) 53 { 54 // mouseDoubleClickEvent don't called under Ubuntu 55 if( ev->type() == QEvent::MouseButtonDblClick ) 56 { 57 QMouseEvent * mev = static_cast< QMouseEvent *>( ev ); 58 if( mev->y() >= tabBar()->rect().y() 59 && mev->y() <= tabBar()->rect().y() + tabBar()->rect().height() 60 && tabBar()->tabAt( mev->pos() ) == -1 ) 61 { 62 emit doubleClicked(); 63 return true; 64 } 65 } 66 67 if( obj == tabBar() && ev->type() == QEvent::MouseButtonPress ) 68 { 69 QMouseEvent * mev = static_cast< QMouseEvent *>( ev ); 70 if( mev->button() == Qt::MidButton ) 71 { 72 emit tabCloseRequested( tabBar()->tabAt( mev->pos() ) ); 73 return true; 74 } 75 } 76 77 return QTabWidget::eventFilter( obj, ev ); 78 } 79