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)9 MainTabWidget::MainTabWidget( QWidget * parent) : QTabWidget( parent ) {
10   hideSingleTab = false;
11   installEventFilter( this );
12   tabBar()->installEventFilter( this );
13 }
14 
setHideSingleTab(bool hide)15 void MainTabWidget::setHideSingleTab(bool hide)
16 {
17   hideSingleTab = hide;
18   updateTabBarVisibility();
19 }
20 
tabInserted(int index)21 void 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)30 void 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()39 void 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)52 bool 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