diff options
author | megabigbug <megabigbug@arrakis.(none)> | 2009-09-19 21:20:28 +0200 |
---|---|---|
committer | megabigbug <megabigbug@arrakis.(none)> | 2009-09-19 21:20:28 +0200 |
commit | 87243819be1b5d3ffa6997d97beea48e86b2b39d (patch) | |
tree | 4b38038f21b01426a42f84946cb50dc64a0404f3 | |
parent | rekonq 0.2.58 with the new homepage! (diff) | |
download | rekonq-87243819be1b5d3ffa6997d97beea48e86b2b39d.tar.xz |
Show a preview when mouse is over a tab
-rw-r--r-- | src/mainview.cpp | 87 | ||||
-rw-r--r-- | src/mainview.h | 12 |
2 files changed, 97 insertions, 2 deletions
diff --git a/src/mainview.cpp b/src/mainview.cpp index a662bbb0..e2b6e1bb 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -51,6 +51,7 @@ #include <KMessageBox> #include <KDebug> #include <KStandardDirs> +#include <KPassivePopup> // Qt Includes #include <QtCore/QTimer> @@ -62,17 +63,22 @@ #include <QtGui/QMovie> #include <QtGui/QWidget> #include <QtGui/QMouseEvent> - +#include <QtGui/QPainter> +#include <QtGui/QVBoxLayout> MainView::MainView(QWidget *parent) : KTabWidget(parent) , m_urlBar(new UrlBar(this)) , m_tabBar(new TabBar(this)) , m_currentTabIndex(0) + , m_currentTabPreview(-1) { // setting tabbar setTabBar(m_tabBar); + // set mouse tracking for tab previews + setMouseTracking(true); + // loading pixmap path m_loadingGitPath = KStandardDirs::locate("appdata" , "pics/loading.mng"); @@ -595,3 +601,82 @@ KUrl::List MainView::recentlyClosedTabs() { return m_recentlyClosedTabs; } + +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 then hide previous tab preview + if (tab==m_tabBar->currentIndex()) + { + 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); +} + +QPixmap MainView::renderTabPreview(int tab, int w, int h) +{ + QPixmap image = QPixmap(webView(tab)->width(), webView(tab)->height()); + image.fill(Qt::transparent); + QPainter p(&image); + webView(tab)->page()->mainFrame()->render(&p); + p.end(); + image = image.scaled(w, h, Qt::KeepAspectRatioByExpanding); + + return image; +} + +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->setAutoDelete(true); + m_previewPopup->setFrameShape(QFrame::NoFrame); + m_previewPopup->setFixedSize(w, h); + QLabel *l = new QLabel(); + l->setPixmap(renderTabPreview(tab, 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)); +}
\ No newline at end of file diff --git a/src/mainview.h b/src/mainview.h index 297871b0..cd212dbd 100644 --- a/src/mainview.h +++ b/src/mainview.h @@ -43,10 +43,12 @@ class QUrl; class QWebFrame; class QLabel; +class QMouseEvent; class TabBar; class UrlBar; +class KPassivePopup; /** * This class represent rekonq Main View. It contains all WebViews and a stack widget @@ -90,7 +92,12 @@ public: * @return the webview embedded in the new tab */ WebView *newWebView(bool focused = true, bool nearParent = false); - + + virtual void mouseMoveEvent(QMouseEvent *event); + virtual void leaveEvent(QEvent *event); + void showTabPreview(int tab); + QPixmap renderTabPreview(int tab, int w, int h); + signals: // tab widget signals void tabsChanged(); @@ -162,6 +169,9 @@ private: int m_currentTabIndex; KUrl::List m_recentlyClosedTabs; + + QPointer<KPassivePopup> m_previewPopup; + int m_currentTabPreview; }; #endif // MAINVIEW_H |