From 6055c95b2831d7e20426dc61cc2aa903965d9480 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Sun, 21 Jul 2013 11:26:57 +0200 Subject: [PATCH] Added custom context menu for web browser. --- src/gui/basewebview.cpp | 47 +++++++++++++++++++++++++++++++++++++++++ src/gui/basewebview.h | 3 +++ src/gui/webbrowser.cpp | 4 ++++ src/gui/webbrowser.h | 3 +++ 4 files changed, 57 insertions(+) diff --git a/src/gui/basewebview.cpp b/src/gui/basewebview.cpp index 172d37b32..7517164de 100644 --- a/src/gui/basewebview.cpp +++ b/src/gui/basewebview.cpp @@ -1,7 +1,12 @@ #include +#include +#include +#include +#include #include "core/basewebpage.h" #include "gui/basewebview.h" +#include "gui/themefactory.h" BaseWebView::BaseWebView(QWidget *parent) @@ -30,6 +35,48 @@ void BaseWebView::displayErrorPage() { setHtml("error", url()); } +void BaseWebView::contextMenuEvent(QContextMenuEvent *event) { + QMenu context_menu(tr("Web browser"), this); + QMenu image_submenu(tr("Image"), &context_menu); + QWebHitTestResult hit_result = page()->mainFrame()->hitTestContent(event->pos()); + + // Obtain needed actions. + QAction *action_reload = pageAction(QWebPage::Reload); + action_reload->setText(tr("Reload web page")); + action_reload->setToolTip(tr("Reload current web page")); + context_menu.addAction(action_reload); + + if (hit_result.linkUrl().isValid()) { + QAction *action_copylink = pageAction(QWebPage::CopyLinkToClipboard); + action_copylink->setText(tr("Copy link url")); + action_copylink->setToolTip(tr("Copy link url to clipboard")); + action_copylink->setIcon(ThemeFactory::fromTheme("edit-copy")); + context_menu.addAction(action_copylink); + } + + if (!hit_result.pixmap().isNull()) { + context_menu.addMenu(&image_submenu); + + QAction *action_copyimage = pageAction(QWebPage::CopyImageToClipboard); + action_copyimage->setText(tr("Copy image")); + action_copyimage->setToolTip(tr("Copy image to clipboard")); + action_copyimage->setIcon(ThemeFactory::fromTheme("insert-image")); + image_submenu.addAction(action_copyimage); + } + + if (hit_result.imageUrl().isValid()) { + QAction *action_copyimageurl = pageAction(QWebPage::CopyImageUrlToClipboard); + action_copyimageurl->setText(tr("Copy image url")); + action_copyimageurl->setToolTip(tr("Copy image url to clipboard")); + action_copyimageurl->setIcon(ThemeFactory::fromTheme("edit-copy")); + image_submenu.addAction(action_copyimageurl); + } + + // Display the menu. + context_menu.exec(mapToGlobal(event->pos())); + context_menu.deleteLater(); +} + void BaseWebView::paintEvent(QPaintEvent *event) { QWebView::paintEvent(event); diff --git a/src/gui/basewebview.h b/src/gui/basewebview.h index 849094076..28a20d2db 100644 --- a/src/gui/basewebview.h +++ b/src/gui/basewebview.h @@ -29,6 +29,9 @@ class BaseWebView : public QWebView { // Does additional painting. void paintEvent(QPaintEvent *event); + // Provides custom context menu. + void contextMenuEvent(QContextMenuEvent *event); + private: BaseWebPage *m_page; }; diff --git a/src/gui/webbrowser.cpp b/src/gui/webbrowser.cpp index d9319fc65..038172dd8 100644 --- a/src/gui/webbrowser.cpp +++ b/src/gui/webbrowser.cpp @@ -116,6 +116,10 @@ QList WebBrowser::runningWebBrowsers() { return m_runningWebBrowsers; } +void WebBrowser::setNavigationBarVisible(bool visible) { + m_toolBar->setVisible(visible); +} + WebBrowserNetworkAccessManager *WebBrowser::globalNetworkManager() { if (m_networkManager.isNull()) { // TODO: Not sure if qApp is needed here. diff --git a/src/gui/webbrowser.h b/src/gui/webbrowser.h index 6ce5130da..2df9668f7 100644 --- a/src/gui/webbrowser.h +++ b/src/gui/webbrowser.h @@ -30,6 +30,9 @@ class WebBrowser : public QWidget { // Returns list of all running web browsers. static QList runningWebBrowsers(); + public slots: + void setNavigationBarVisible(bool visible); + protected: // Creates necessary connections. void createConnections();