From 9ca2eb6a61ea5307923cab67c789e1c0ba2086d5 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Fri, 9 Oct 2009 02:08:01 +0200 Subject: HUGE COMMIT 1) moved lionel preview implementation to tabbar class. This to simplify MainView management AND to use TabBar::tabSizeHint(). Now previews are of the same width of the tab :) 2) cleaned a bit TabBar code 3) fixed scrollButton bug, via a "rude" HACK: an hidden toolbutton shown when tabs are more than.. a number! 4) Changed tabbar::tabsizehint implementation using 2 stupid constants: BASE_WIDTH_DIVISOR and MIN_WIDTH_DIVISOR. Just play with them to modify tab dimension and resize quite all :) Good night, guys! --- src/tabbar.cpp | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 118 insertions(+), 6 deletions(-) (limited to 'src/tabbar.cpp') 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 #include #include #include +#include // Qt Includes #include #include #include +#include +#include +#include +#include -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 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()= 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 (ipos())) + { + 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); } -- cgit v1.2.1