From 5f5841aeb23120683033841044ae0106d3350f17 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Sun, 4 Jan 2015 16:10:57 +0100 Subject: [PATCH] Fixed #100. --- resources/text/CHANGELOG | 1 + src/gui/formimportexport.cpp | 2 -- src/gui/formmain.cpp | 5 +++++ src/gui/tabwidget.cpp | 27 ++++++++------------------- src/network-web/webview.cpp | 36 ++++++++++++++++++++++++++++++++++++ src/network-web/webview.h | 2 ++ 6 files changed, 52 insertions(+), 21 deletions(-) diff --git a/resources/text/CHANGELOG b/resources/text/CHANGELOG index 5f805b10f..5b354aacb 100644 --- a/resources/text/CHANGELOG +++ b/resources/text/CHANGELOG @@ -4,6 +4,7 @@ Fixed: Added: diff --git a/src/gui/formimportexport.cpp b/src/gui/formimportexport.cpp index df16a21ca..48dfb7a41 100644 --- a/src/gui/formimportexport.cpp +++ b/src/gui/formimportexport.cpp @@ -107,8 +107,6 @@ void FormImportExport::selectExportFile() { QString selected_file = QFileDialog::getSaveFileName(this, tr("Select file for feeds export"), qApp->homeFolderPath(), filter, &selected_filter); - - if (!selected_file.isEmpty()) { if (selected_filter == filter_opml20) { m_conversionType = OPML20; diff --git a/src/gui/formmain.cpp b/src/gui/formmain.cpp index fe6a7726e..b877758c1 100755 --- a/src/gui/formmain.cpp +++ b/src/gui/formmain.cpp @@ -376,13 +376,18 @@ void FormMain::loadWebBrowserMenu(int index) { WebBrowser *active_browser = m_ui->m_tabWidget->widget(index)->webBrowser(); m_ui->m_menuCurrentTab->clear(); + if (active_browser != NULL) { + m_ui->m_menuCurrentTab->setEnabled(true); m_ui->m_menuCurrentTab->addActions(active_browser->globalMenu()); if (m_ui->m_menuCurrentTab->actions().size() == 0) { m_ui->m_menuCurrentTab->insertAction(NULL, m_ui->m_actionNoActions); } } + else { + m_ui->m_menuCurrentTab->setEnabled(false); + } m_ui->m_actionCloseCurrentTab->setEnabled(m_ui->m_tabWidget->tabBar()->tabType(index) == TabBar::Closable); } diff --git a/src/gui/tabwidget.cpp b/src/gui/tabwidget.cpp index 4bcc5541d..fe4f9ca2b 100755 --- a/src/gui/tabwidget.cpp +++ b/src/gui/tabwidget.cpp @@ -221,8 +221,7 @@ void TabWidget::removeTab(int index) { QTabWidget::removeTab(index); } -int TabWidget::addTab(TabContent *widget, const QIcon &icon, - const QString &label, const TabBar::TabType &type) { +int TabWidget::addTab(TabContent *widget, const QIcon &icon, const QString &label, const TabBar::TabType &type) { int index = QTabWidget::addTab(widget, icon, label); tabBar()->setTabType(index, type); @@ -236,16 +235,14 @@ int TabWidget::addTab(TabContent *widget, const QString &label, const TabBar::Ta return index; } -int TabWidget::insertTab(int index, QWidget *widget, const QIcon &icon, - const QString &label, const TabBar::TabType &type) { +int TabWidget::insertTab(int index, QWidget *widget, const QIcon &icon, const QString &label, const TabBar::TabType &type) { int tab_index = QTabWidget::insertTab(index, widget, icon, label); tabBar()->setTabType(tab_index, type); return tab_index; } -int TabWidget::insertTab(int index, QWidget *widget, const QString &label, - const TabBar::TabType &type) { +int TabWidget::insertTab(int index, QWidget *widget, const QString &label, const TabBar::TabType &type) { int tab_index = QTabWidget::insertTab(index, widget, label); tabBar()->setTabType(tab_index, type); @@ -271,14 +268,10 @@ int TabWidget::addLinkedBrowser(const QString &initial_url) { } int TabWidget::addLinkedBrowser(const QUrl &initial_url) { - return addBrowser(qApp->settings()->value(GROUP(Browser), SETTING(Browser::QueueTabs)).toBool(), - false, - initial_url); + return addBrowser(qApp->settings()->value(GROUP(Browser), SETTING(Browser::QueueTabs)).toBool(), false, initial_url); } -int TabWidget::addBrowser(bool move_after_current, - bool make_active, - const QUrl &initial_url) { +int TabWidget::addBrowser(bool move_after_current, bool make_active, const QUrl &initial_url) { // Create new WebBrowser. WebBrowser *browser = new WebBrowser(this); browser->setupIcons(); @@ -287,16 +280,12 @@ int TabWidget::addBrowser(bool move_after_current, if (move_after_current) { // Insert web browser after current tab. - final_index = insertTab(currentIndex() + 1, - browser, - qApp->icons()->fromTheme("text-html"), - tr("Web browser"), - TabBar::Closable); + final_index = insertTab(currentIndex() + 1, browser, qApp->icons()->fromTheme("text-html"), + tr("Web browser"), TabBar::Closable); } else { // Add new browser as the last tab. - final_index = addTab(browser, - qApp->icons()->fromTheme("text-html"), + final_index = addTab(browser, qApp->icons()->fromTheme("text-html"), //: Web browser default tab title. tr("Web browser"), TabBar::Closable); diff --git a/src/network-web/webview.cpp b/src/network-web/webview.cpp index 1e054285a..b8eec7fe4 100755 --- a/src/network-web/webview.cpp +++ b/src/network-web/webview.cpp @@ -23,6 +23,7 @@ #include "miscellaneous/iconfactory.h" #include "network-web/webpage.h" #include "network-web/webfactory.h" +#include "gui/messagebox.h" #include #include @@ -33,6 +34,7 @@ #include #include #include +#include #if QT_VERSION >= 0x050000 #include @@ -76,10 +78,41 @@ void WebView::openImageInNewTab() { emit linkMiddleClicked(m_contextImageUrl); } +void WebView::saveCurrentPageToFile() { + QString filter_html = tr("HTML web pages (*.html)"); + + QString filter; + QString selected_filter; + + // Add more filters here. + filter += filter_html; + + QString selected_file = QFileDialog::getSaveFileName(this, tr("Select destination file for web page"), + qApp->homeFolderPath(), filter, &selected_filter); + + if (!selected_file.isEmpty()) { + QFile selected_file_handle(selected_file); + + if (selected_file_handle.open(QIODevice::WriteOnly | QIODevice::Unbuffered)) { + QString html_text = page()->mainFrame()->toHtml(); + QTextStream str(&selected_file_handle); + + str.setCodec("UTF-16"); + str << html_text; + selected_file_handle.close(); + } + else { + MessageBox::show(this, QMessageBox::Critical, tr("Cannot save web page"), + tr("Web page cannot be saved because destination file is not writtable.")); + } + } +} + void WebView::createConnections() { connect(this, SIGNAL(loadFinished(bool)), this, SLOT(onLoadFinished(bool))); connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(popupContextMenu(QPoint))); + connect(m_actionSavePageAs, SIGNAL(triggered()), this, SLOT(saveCurrentPageToFile())); connect(m_actionPrint, SIGNAL(triggered()), this, SLOT(printCurrentPage())); connect(m_actionOpenLinkNewTab, SIGNAL(triggered()), this, SLOT(openLinkInNewTab())); connect(m_actionOpenImageNewTab, SIGNAL(triggered()), this, SLOT(openImageInNewTab())); @@ -133,6 +166,8 @@ void WebView::initializeActions() { m_actionCopyImage->setText(tr("Copy image")); m_actionCopyImage->setToolTip(tr("Copy image to clipboard.")); + m_actionSavePageAs = new QAction(qApp->icons()->fromTheme("document-export"), tr("Save page as..."), this); + #if QT_VERSION >= 0x040800 m_actionCopyImageUrl = pageAction(QWebPage::CopyImageUrlToClipboard); m_actionCopyImageUrl->setParent(this); @@ -197,6 +232,7 @@ void WebView::popupContextMenu(const QPoint &pos) { } context_menu.addAction(m_actionCopySelectedItem); + context_menu.addAction(m_actionSavePageAs); QUrl hit_url = hit_result.linkUrl(); QUrl hit_image_url = hit_result.imageUrl(); diff --git a/src/network-web/webview.h b/src/network-web/webview.h index ffeec7a2f..7281e3f2b 100644 --- a/src/network-web/webview.h +++ b/src/network-web/webview.h @@ -64,6 +64,7 @@ class WebView : public QWebView { void openLinkInNewTab(); void openLinkExternally(); void openImageInNewTab(); + void saveCurrentPageToFile(); // Provides custom context menu. void popupContextMenu(const QPoint &pos); @@ -95,6 +96,7 @@ class WebView : public QWebView { QAction *m_actionCopySelectedItem; QAction *m_actionCopyLink; QAction *m_actionCopyImage; + QAction *m_actionSavePageAs; #if QT_VERSION >= 0x040800 QAction *m_actionCopyImageUrl;