From d580c75ae4c16fa5b13a552549d53e6c17732f87 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Mon, 20 Jun 2016 09:55:00 +0200 Subject: [PATCH] Save work. --- src/gui/feedmessageviewer.cpp | 6 ++-- src/gui/tabwidget.cpp | 62 +++++++++++++++++++++++++++++++++++ src/gui/tabwidget.h | 18 ++++++++-- src/gui/webbrowser.cpp | 18 ++++++++-- src/gui/webbrowser.h | 9 +++++ 5 files changed, 106 insertions(+), 7 deletions(-) diff --git a/src/gui/feedmessageviewer.cpp b/src/gui/feedmessageviewer.cpp index 475d50fe9..93866c51d 100755 --- a/src/gui/feedmessageviewer.cpp +++ b/src/gui/feedmessageviewer.cpp @@ -258,10 +258,10 @@ void FeedMessageViewer::createConnections() { // Message openers. connect(m_messagesView, SIGNAL(openMessagesInNewspaperView(RootItem*,QList)), - m_messagesView, SLOT(createNewspaperView(RootItem*,QList))); + qApp->mainForm()->tabWidget(), SLOT(addNewspaperView(RootItem*,QList)); connect(m_feedsView, SIGNAL(openMessagesInNewspaperView(RootItem*,QList)), - m_messagesView, SLOT(createNewspaperView(RootItem*,QList))); - + qApp->mainForm()->tabWidget(), SLOT(addNewspaperView(RootItem*,QList))); + // Toolbar forwardings. connect(form_main->m_ui->m_actionAddFeedIntoSelectedAccount, SIGNAL(triggered()), m_feedsView, SLOT(addFeedIntoSelectedAccount())); diff --git a/src/gui/tabwidget.cpp b/src/gui/tabwidget.cpp index d7b0a3905..1101d06b0 100755 --- a/src/gui/tabwidget.cpp +++ b/src/gui/tabwidget.cpp @@ -24,6 +24,7 @@ #include "miscellaneous/iconfactory.h" #include "gui/tabbar.h" #include "gui/feedmessageviewer.h" +#include "gui/webbrowser.h" #include "gui/plaintoolbutton.h" #include "gui/dialogs/formmain.h" @@ -202,6 +203,67 @@ void TabWidget::closeAllTabsExceptCurrent() { } } +int TabWidget::addNewspaperView(RootItem *root, const QList &messages) { + WebBrowser *prev = new WebBrowser(this); + int index = addTab(prev, qApp->icons()->fromTheme(QSL("text-x-script")), tr("Newspaper view"), TabBar::Closable); + + setCurrentIndex(index); + prev->loadMessages(messages, root); + + return index; +} + +int TabWidget::addEmptyBrowser() { + return addBrowser(false, true); +} + +int TabWidget::addLinkedBrowser(const QUrl &initial_url) { + return addBrowser(true, false, initial_url); +} + +int TabWidget::addLinkedBrowser(const QString &initial_url) { + return addLinkedBrowser(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); + int final_index; + + if (move_after_current) { + // Insert web browser after current tab. + final_index = insertTab(currentIndex() + 1, browser, qApp->icons()->fromTheme(QSL("text-html")), + tr("Web browser"), TabBar::Closable); + } + else { + // Add new browser as the last tab. + final_index = addTab(browser, qApp->icons()->fromTheme(QSL("text-html")), + //: Web browser default tab title. + tr("Web browser"), + TabBar::Closable); + } + + // Make connections. + connect(browser, SIGNAL(titleChanged(int,QString)), this, SLOT(changeTitle(int,QString))); + connect(browser, SIGNAL(iconChanged(int,QIcon)), this, SLOT(changeIcon(int,QIcon))); + + // Setup the tab index. + browser->setIndex(final_index); + + // Load initial web page if desired. + if (initial_url.isValid()) { + browser->loadUrl(initial_url); + } + + // Make new web browser active if desired. + if (make_active) { + setCurrentIndex(final_index); + browser->setFocus(Qt::OtherFocusReason); + } + + return final_index; +} + void TabWidget::removeTab(int index, bool clear_from_memory) { if (clear_from_memory) { widget(index)->deleteLater(); diff --git a/src/gui/tabwidget.h b/src/gui/tabwidget.h index e5b8c37c9..84c1cf34f 100755 --- a/src/gui/tabwidget.h +++ b/src/gui/tabwidget.h @@ -18,16 +18,17 @@ #ifndef TABWIDGET_H #define TABWIDGET_H +#include + #include "gui/tabbar.h" #include "gui/tabcontent.h" +#include "core/message.h" -#include #include class QMenu; class PlainToolButton; -class Message; class RootItem; class FeedMessageViewer; @@ -111,6 +112,19 @@ class TabWidget : public QTabWidget { // Closes all "closable" tabs except the active tab. void closeAllTabsExceptCurrent(); + int addNewspaperView(RootItem *root, const QList &messages); + + // Adds new WebBrowser tab to global TabWidget. + int addEmptyBrowser(); + + // Adds new WebBrowser with link. This is used when user + // selects to "Open link in new tab.". + int addLinkedBrowser(const QUrl &initial_url = QUrl()); + int addLinkedBrowser(const QString &initial_url); + + // General method for adding WebBrowsers. + int addBrowser(bool move_after_current, bool make_active, const QUrl &initial_url = QUrl()); + private: PlainToolButton *m_btnMainMenu; QMenu *m_menuMain; diff --git a/src/gui/webbrowser.cpp b/src/gui/webbrowser.cpp index 5f26ac3ad..2a4ace892 100755 --- a/src/gui/webbrowser.cpp +++ b/src/gui/webbrowser.cpp @@ -52,8 +52,8 @@ void WebBrowser::createConnections() { connect(m_webView, SIGNAL(loadFinished(bool)), this, SLOT(onLoadingFinished(bool))); // Forward title/icon changes. - //connect(m_webView, SIGNAL(titleChanged(QString)), this, SLOT(onTitleChanged(QString))); - //connect(m_webView, SIGNAL(iconChanged(QIcon)), this, SLOT(onIconChanged(QIcon))); + connect(m_webView, SIGNAL(titleChanged(QString)), this, SLOT(onTitleChanged(QString))); + connect(m_webView, SIGNAL(iconChanged(QIcon)), this, SLOT(onIconChanged(QIcon))); } void WebBrowser::updateUrl(const QUrl &url) { @@ -164,6 +164,20 @@ void WebBrowser::receiveMessageStatusChangeRequest(int message_id, WebPage::Mess } } +void WebBrowser::onTitleChanged(const QString &new_title) { + if (new_title.isEmpty()) { + //: Webbrowser tab title when no title is available. + emit titleChanged(m_index, tr("No title")); + } + else { + emit titleChanged(m_index, new_title); + } +} + +void WebBrowser::onIconChanged(const QIcon &icon) { + emit iconChanged(m_index, m_webView->icon()); +} + void WebBrowser::initializeLayout() { m_toolBar->setFloatable(false); m_toolBar->setMovable(false); diff --git a/src/gui/webbrowser.h b/src/gui/webbrowser.h index 7f80cf678..2d7026ea3 100755 --- a/src/gui/webbrowser.h +++ b/src/gui/webbrowser.h @@ -66,12 +66,21 @@ class WebBrowser : public TabContent { private slots: void updateUrl(const QUrl &url); + void onLoadingStarted(); void onLoadingProgress(int progress); void onLoadingFinished(bool success); + void receiveMessageStatusChangeRequest(int message_id, WebPage::MessageStatusChange change); + void onTitleChanged(const QString &new_title); + void onIconChanged(const QIcon &icon); + signals: + // Title/icon is changed. + void iconChanged(int index, const QIcon &icon); + void titleChanged(int index, const QString &title); + void markMessageRead(int id, RootItem::ReadStatus read); void markMessageImportant(int id, RootItem::Importance important); void requestMessageListReload(bool mark_current_as_read);