diff options
| -rw-r--r-- | src/mainview.cpp | 80 | ||||
| -rw-r--r-- | src/mainview.h | 13 | ||||
| -rw-r--r-- | src/tabbar.cpp | 124 | ||||
| -rw-r--r-- | src/tabbar.h | 23 | 
4 files changed, 139 insertions, 101 deletions
| diff --git a/src/mainview.cpp b/src/mainview.cpp index c77efe83..0abf6996 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -42,7 +42,6 @@  #include "webview.h"  #include "sessionmanager.h"  #include "homepage.h" -#include "websnap.h"  // KDE Includes  #include <KUrl> @@ -63,9 +62,6 @@  #include <QtGui/QLabel>  #include <QtGui/QMovie>  #include <QtGui/QWidget> -#include <QtGui/QMouseEvent> -#include <QtGui/QPainter> -#include <QtGui/QVBoxLayout>  MainView::MainView(QWidget *parent) @@ -73,7 +69,6 @@ MainView::MainView(QWidget *parent)          , m_urlBar(new UrlBar(this))          , m_tabBar(new TabBar(this))          , m_currentTabIndex(0) -        , m_currentTabPreview(-1)  {      // setting tabbar      setTabBar(m_tabBar); @@ -574,78 +569,3 @@ QLabel *MainView::animatedLoading(int index, bool addMovie)      m_tabBar->setTabButton(index, QTabBar::LeftSide, label);      return label;  } - - -void MainView::resizeEvent(QResizeEvent *event) -{ -    KTabWidget::resizeEvent(event); -} - - -void MainView::mouseMoveEvent(QMouseEvent *event) -{ -    //Find the tab under the mouse -    int i = 0; -    int tab = -1; -    while (i<count() && tab==-1) -    { -        if (m_tabBar->tabRect(i).contains(event->pos())) tab = i; -        i++; -    } - -    //if found and not the current tab then show tab preview -    if (tab!=-1 && tab!=m_tabBar->currentIndex() && m_currentTabPreview!=tab) -    { -        showTabPreview(tab); -        m_currentTabPreview=tab; -    } - -    //if current tab or not found then hide previous tab preview -    if (tab==m_tabBar->currentIndex() || tab==-1) -    { -        if ( m_previewPopup) -        { -            m_previewPopup->hide(); -        } -        m_currentTabPreview=-1; -    } -     -    KTabWidget::mouseMoveEvent(event); -} - -void MainView::leaveEvent(QEvent *event) -{ -    //if leave tabwidget then hide previous tab preview -    if ( m_previewPopup) -    { -        m_previewPopup->hide(); -    } -    m_currentTabPreview=-1; -    KTabWidget::leaveEvent(event); -} - - -void MainView::showTabPreview(int tab) -{ -    int w=200; -    int h=w*((0.0+webView(tab)->height())/webView(tab)->width()); - -    //delete previous tab preview -    if (m_previewPopup) -    { -        delete m_previewPopup; -    } -     -    m_previewPopup = new KPassivePopup(this); -    m_previewPopup->setFrameShape(QFrame::StyledPanel); -    m_previewPopup->setFrameShadow(QFrame::Plain); -    m_previewPopup->setFixedSize(w, h); -    QLabel *l = new QLabel(); -    l->setPixmap(WebSnap::renderPreview(*(webView(tab)->page()), w, h)); -    m_previewPopup->setView(l); -    m_previewPopup->layout()->setAlignment(Qt::AlignTop); -    m_previewPopup->layout()->setMargin(0); - -    QPoint pos(m_tabBar->tabRect(tab).x(),m_tabBar->tabRect(tab).y()+m_tabBar->tabRect(tab).height()); -    m_previewPopup->show(mapToGlobal(pos)); -} diff --git a/src/mainview.h b/src/mainview.h index f8c94032..48e0b58b 100644 --- a/src/mainview.h +++ b/src/mainview.h @@ -47,8 +47,6 @@ class QMouseEvent;  class TabBar;  class UrlBar; -class KPassivePopup; -  /**   *  This class represent rekonq Main View. It contains all WebViews and a stack widget @@ -91,9 +89,6 @@ public:       */      WebView *newWebView(bool focused = true, bool nearParent = false); -    virtual void mouseMoveEvent(QMouseEvent *event); -    virtual void leaveEvent(QEvent *event); -    void showTabPreview(int tab);  signals:      // tab widget signals @@ -139,11 +134,8 @@ private slots:      void webViewUrlChanged(const QUrl &url);      void windowCloseRequested(); -     -protected: - -    virtual void resizeEvent(QResizeEvent *event); +      private:      /**       * This function creates (if not exists) and returns a QLabel @@ -163,9 +155,6 @@ private:      QString m_loadingGitPath;      int m_currentTabIndex; - -    QPointer<KPassivePopup> m_previewPopup; -    int m_currentTabPreview;  };  #endif // MAINVIEW_H diff --git a/src/tabbar.cpp b/src/tabbar.cpp index 651265d1..815a153d 100644 --- a/src/tabbar.cpp +++ b/src/tabbar.cpp @@ -36,24 +36,35 @@  #include "mainwindow.h"  #include "urlbar.h"  #include "webview.h" +#include "websnap.h"  // KDE Includes  #include <KShortcut>  #include <KStandardShortcut>  #include <KDebug>  #include <KGlobalSettings> +#include <KPassivePopup>  // Qt Includes  #include <QtCore/QString>  #include <QtGui/QFont>  #include <QtGui/QToolButton> +#include <QtGui/QLabel> +#include <QtGui/QMouseEvent> +#include <QtGui/QPainter> +#include <QtGui/QVBoxLayout> -TabBar::TabBar(QWidget *parent) +#define BASE_WIDTH_DIVISOR    4 +#define MIN_WIDTH_DIVISOR     8 + + +TabBar::TabBar(MainView *parent)          : KTabBar(parent)          , m_parent(parent)          , m_addTabButton(new QToolButton(this)) +        , m_currentTabPreview(-1)  {      setElideMode(Qt::ElideRight); @@ -77,6 +88,11 @@ TabBar::~TabBar()  void TabBar::postLaunch()  { +    // HACK this is used to fix add tab button position +    QToolButton *secondAddTabButton = new QToolButton(this); +    secondAddTabButton->setAutoRaise(true); +    secondAddTabButton->setToolButtonStyle(Qt::ToolButtonIconOnly); +          // Find the correct MainWindow of this tab button      MainWindowList list = Application::instance()->mainWindowList();      Q_FOREACH(QPointer<MainWindow> w, list) @@ -84,6 +100,7 @@ void TabBar::postLaunch()          if (w->isAncestorOf(this))          {              m_addTabButton->setDefaultAction(w->actionByName("new_tab")); +            secondAddTabButton->setDefaultAction(w->actionByName("new_tab"));              break;          }      } @@ -91,17 +108,19 @@ void TabBar::postLaunch()      m_addTabButton->setAutoRaise(true);      m_addTabButton->setToolButtonStyle(Qt::ToolButtonIconOnly);      m_addTabButton->show(); +     +    // stupid tabbar, that's what you gain... +    m_parent->setCornerWidget(secondAddTabButton); +    m_parent->cornerWidget()->hide();  }  QSize TabBar::tabSizeHint(int index) const  { -    //TODO Create a SuperTabWidget class -      int buttonSize = m_addTabButton->size().width();      int tabBarWidth = m_parent->size().width() - buttonSize; -    int baseWidth =  m_parent->sizeHint().width()/4; -    int minWidth =  m_parent->sizeHint().width()/8; +    int baseWidth =  m_parent->sizeHint().width()/BASE_WIDTH_DIVISOR; +    int minWidth =  m_parent->sizeHint().width()/MIN_WIDTH_DIVISOR;      int w;      if (baseWidth*count()<tabBarWidth) @@ -187,13 +206,106 @@ void TabBar::reloadTab()  void TabBar::setTabButtonPosition()  { +    if(count() >= MIN_WIDTH_DIVISOR - 1) +    { +        if(m_addTabButton->isVisible()) +        { +            m_addTabButton->hide(); +            m_parent->cornerWidget()->show(); +        } +        return; +    } +     +    if(m_addTabButton->isHidden()) +    { +        m_addTabButton->show(); +        m_parent->cornerWidget()->hide(); +    } +      int tabWidgetWidth = frameSize().width();      int tabBarWidth = tabSizeHint(0).width()*count(); -    int newPosY = height()/2.0 - m_addTabButton->height()/2.0; +    int newPosY = height() - m_addTabButton->height();      int newPosX = tabWidgetWidth - m_addTabButton->width();      if (tabBarWidth + m_addTabButton->width() < tabWidgetWidth)          newPosX = tabBarWidth;      m_addTabButton->move(newPosX, newPosY); +    m_addTabButton->show(); +} + + +void TabBar::showTabPreview(int tab) +{ +    WebView *view = m_parent->webView(tab); +     +    int w = tabSizeHint(tab).width(); +    int h = w*((0.0 + view->height())/view->width()); + +    //delete previous tab preview +    if (m_previewPopup) +    { +        delete m_previewPopup; +    } +     +    m_previewPopup = new KPassivePopup(this); +    m_previewPopup->setFrameShape(QFrame::StyledPanel); +    m_previewPopup->setFrameShadow(QFrame::Plain); +    m_previewPopup->setFixedSize(w, h); +    QLabel *l = new QLabel(); +    l->setPixmap(WebSnap::renderPreview(*(view->page()), w, h)); +    m_previewPopup->setView(l); +    m_previewPopup->layout()->setAlignment(Qt::AlignTop); +    m_previewPopup->layout()->setMargin(0); + +    QPoint pos( tabRect(tab).x() , tabRect(tab).y() + tabRect(tab).height() ); +    m_previewPopup->show(mapToGlobal(pos)); +} + + +void TabBar::mouseMoveEvent(QMouseEvent *event) +{ +    //Find the tab under the mouse +    int i = 0; +    int tab = -1; +    while (i<count() && tab==-1) +    { +        if (tabRect(i).contains(event->pos()))  +        { +            tab = i; +        } +        i++; +    } + +    //if found and not the current tab then show tab preview +    if (tab != -1 && tab != currentIndex() && m_currentTabPreview != tab) +    { +        showTabPreview(tab); +        m_currentTabPreview = tab; +    } + +    //if current tab or not found then hide previous tab preview +    if (tab==currentIndex() || tab==-1) +    { +        if ( m_previewPopup) +        { +            m_previewPopup->hide(); +        } +        m_currentTabPreview = -1; +    } +     +    KTabBar::mouseMoveEvent(event); +} + + +void TabBar::leaveEvent(QEvent *event) +{ +    //if leave tabwidget then hide previous tab preview +    if ( m_previewPopup) +    { +        m_previewPopup->hide(); +    } +    m_currentTabPreview = -1; + +    KTabBar::leaveEvent(event);  } diff --git a/src/tabbar.h b/src/tabbar.h index 56e2d230..dd08f7b8 100644 --- a/src/tabbar.h +++ b/src/tabbar.h @@ -31,12 +31,22 @@  #define TABBAR_H +// Local Includes +#include "mainview.h" + +// Qt Includes +#include <QPointer> +  // KDE Includes  #include <KTabBar>  // Forward Declarations  class QPoint;  class QToolButton; +class QMouseEvent; +class QEvent; + +class KPassivePopup;  /** @@ -49,9 +59,11 @@ class TabBar : public KTabBar      Q_OBJECT  public: -    TabBar(QWidget *parent = 0); +    TabBar(MainView *parent = 0);      ~TabBar(); +    void showTabPreview(int tab); +  signals:      void cloneTab(int index);      void closeTab(int index); @@ -65,7 +77,9 @@ protected:       */      virtual QSize tabSizeHint(int index) const;      virtual void tabLayoutChange(); - +    virtual void mouseMoveEvent(QMouseEvent *event); +    virtual void leaveEvent(QEvent *event); +      private slots:      void cloneTab();      void closeTab(); @@ -77,13 +91,16 @@ private slots:  private:      void setTabButtonPosition(); -    QWidget *m_parent; +    MainView *m_parent;      QToolButton *m_addTabButton;      /**       * the index in which we are seeing a Context menu       */      int m_actualIndex; + +    QPointer<KPassivePopup> m_previewPopup; +    int m_currentTabPreview;  };  #endif | 
