diff --git a/src/librssguard/gui/feedmessageviewer.cpp b/src/librssguard/gui/feedmessageviewer.cpp index d7709f477..bb1d1b0f5 100644 --- a/src/librssguard/gui/feedmessageviewer.cpp +++ b/src/librssguard/gui/feedmessageviewer.cpp @@ -47,7 +47,7 @@ FeedMessageViewer::FeedMessageViewer(QWidget* parent) : TabContent(parent), m_toolBarsEnabled(true), m_listHeadersEnabled(true), m_toolBarFeeds(new FeedsToolBar(tr("Toolbar for feeds"), this)), m_toolBarMessages(new MessagesToolBar(tr("Toolbar for messages"), this)), m_messagesView(new MessagesView(this)), m_feedsView(new FeedsView(this)), - m_messagesBrowser(new MessagePreviewer(this)) { + m_messagesBrowser(new MessagePreviewer(false, this)) { initialize(); initializeViews(); diff --git a/src/librssguard/gui/messagebrowser.cpp b/src/librssguard/gui/messagebrowser.cpp index 76acaf957..3d42be517 100644 --- a/src/librssguard/gui/messagebrowser.cpp +++ b/src/librssguard/gui/messagebrowser.cpp @@ -16,13 +16,17 @@ #include #include -MessageBrowser::MessageBrowser(QWidget* parent) +MessageBrowser::MessageBrowser(bool should_resize_to_fit, QWidget* parent) : QWidget(parent), m_txtBrowser(new MessageTextBrowser(this)), m_searchWidget(new SearchTextWidget(this)), m_layout(new QVBoxLayout(this)) { m_layout->setContentsMargins(3, 3, 3, 3); m_layout->addWidget(m_txtBrowser, 1); m_layout->addWidget(m_searchWidget); + if (should_resize_to_fit) { + m_txtBrowser->setSizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::MinimumExpanding); + } + connect(m_searchWidget, &SearchTextWidget::searchCancelled, this, [this]() { m_txtBrowser->textCursor().clearSelection(); m_txtBrowser->moveCursor(QTextCursor::MoveOperation::Left); diff --git a/src/librssguard/gui/messagebrowser.h b/src/librssguard/gui/messagebrowser.h index 1de0d39b5..91f328286 100644 --- a/src/librssguard/gui/messagebrowser.h +++ b/src/librssguard/gui/messagebrowser.h @@ -20,7 +20,7 @@ class MessageBrowser : public QWidget { Q_OBJECT public: - explicit MessageBrowser(QWidget* parent = nullptr); + explicit MessageBrowser(bool should_resize_to_fit, QWidget* parent = nullptr); double verticalScrollBarPosition() const; diff --git a/src/librssguard/gui/messagepreviewer.cpp b/src/librssguard/gui/messagepreviewer.cpp index 4c4ce50f0..3e03fc1f2 100755 --- a/src/librssguard/gui/messagepreviewer.cpp +++ b/src/librssguard/gui/messagepreviewer.cpp @@ -45,15 +45,22 @@ void MessagePreviewer::createConnections() { &MessagePreviewer::switchMessageImportance); } -MessagePreviewer::MessagePreviewer(QWidget* parent) +MessagePreviewer::MessagePreviewer(bool should_resize_to_fit, QWidget* parent) : QWidget(parent), m_layout(new QGridLayout(this)), m_toolBar(new QToolBar(this)), m_verticalScrollBarPosition(0.0), m_separator(nullptr), m_btnLabels(QList>()) { #if defined (USE_WEBENGINE) m_txtMessage = new WebBrowser(this); + + if (should_resize_to_fit) { + m_txtMessage->setFixedHeight(parent->parentWidget()->height()); + } #else - m_txtMessage = new MessageBrowser(this); + m_txtMessage = new MessageBrowser(should_resize_to_fit, this); #endif + // NOTE: To make sure that if we have many labels and short message + m_toolBar->setSizePolicy(m_toolBar->sizePolicy().horizontalPolicy(), QSizePolicy::Policy::MinimumExpanding); + m_toolBar->setOrientation(Qt::Orientation::Vertical); m_layout->setContentsMargins(3, 3, 3, 3); m_layout->addWidget(m_txtMessage, 0, 1, 1, 1); diff --git a/src/librssguard/gui/messagepreviewer.h b/src/librssguard/gui/messagepreviewer.h index 54a422300..8c155ef57 100644 --- a/src/librssguard/gui/messagepreviewer.h +++ b/src/librssguard/gui/messagepreviewer.h @@ -37,7 +37,7 @@ class MessagePreviewer : public QWidget { Q_OBJECT public: - explicit MessagePreviewer(QWidget* parent = nullptr); + explicit MessagePreviewer(bool should_resize_to_fit, QWidget* parent = nullptr); void reloadFontSettings(); diff --git a/src/librssguard/gui/messagetextbrowser.cpp b/src/librssguard/gui/messagetextbrowser.cpp index 4083626f4..9a5de1009 100644 --- a/src/librssguard/gui/messagetextbrowser.cpp +++ b/src/librssguard/gui/messagetextbrowser.cpp @@ -37,7 +37,20 @@ QVariant MessageTextBrowser::loadResource(int type, const QUrl& name) { } } -void MessageTextBrowser::wheelEvent(QWheelEvent* e) { - QTextBrowser::wheelEvent(e); +QSize MessageTextBrowser::sizeHint() const { + auto doc_size = document()->size().toSize(); + + doc_size.setHeight(doc_size.height() + contentsMargins().top() + contentsMargins().bottom()); + return doc_size; +} + +void MessageTextBrowser::wheelEvent(QWheelEvent* event) { + QTextBrowser::wheelEvent(event); qApp->settings()->setValue(GROUP(Messages), Messages::PreviewerFontStandard, font().toString()); } + +void MessageTextBrowser::resizeEvent(QResizeEvent* event) { + // Notify parents about changed geometry. + updateGeometry(); + QTextBrowser::resizeEvent(event); +} diff --git a/src/librssguard/gui/messagetextbrowser.h b/src/librssguard/gui/messagetextbrowser.h index 64688813f..a3b61cc61 100644 --- a/src/librssguard/gui/messagetextbrowser.h +++ b/src/librssguard/gui/messagetextbrowser.h @@ -14,10 +14,12 @@ class MessageTextBrowser : public QTextBrowser { explicit MessageTextBrowser(QWidget* parent = nullptr); virtual ~MessageTextBrowser() = default; - QVariant loadResource(int type, const QUrl& name); + virtual QVariant loadResource(int type, const QUrl& name); + virtual QSize sizeHint() const; protected: - void wheelEvent(QWheelEvent* e); + virtual void wheelEvent(QWheelEvent* event); + virtual void resizeEvent (QResizeEvent* event); private: QPixmap m_imagePlaceholder; diff --git a/src/librssguard/gui/newspaperpreviewer.cpp b/src/librssguard/gui/newspaperpreviewer.cpp index bdcfece7f..8d458f09e 100644 --- a/src/librssguard/gui/newspaperpreviewer.cpp +++ b/src/librssguard/gui/newspaperpreviewer.cpp @@ -11,6 +11,7 @@ NewspaperPreviewer::NewspaperPreviewer(int msg_height, RootItem* root, QList messages, QWidget* parent) : TabContent(parent), m_msgHeight(msg_height), m_ui(new Ui::NewspaperPreviewer), m_root(root), m_messages(std::move(messages)) { m_ui->setupUi(this); + m_ui->m_btnShowMoreMessages->setIcon(qApp->icons()->fromTheme(QSL("view-refresh"))); connect(m_ui->m_btnShowMoreMessages, &QPushButton::clicked, this, &NewspaperPreviewer::showMoreMessages); showMoreMessages(); } @@ -29,17 +30,16 @@ void NewspaperPreviewer::showMoreMessages() { for (int i = 0; i < 5 && !m_messages.isEmpty(); i++) { Message msg = m_messages.takeFirst(); - auto* prev = new MessagePreviewer(this); + auto* prev = new MessagePreviewer(true, this); QMargins margins = prev->layout()->contentsMargins(); + prev->setContentsMargins(margins); + connect(prev, &MessagePreviewer::markMessageRead, this, &NewspaperPreviewer::markMessageRead); connect(prev, &MessagePreviewer::markMessageImportant, this, &NewspaperPreviewer::markMessageImportant); - prev->layout()->setContentsMargins(margins); - - prev->setFixedHeight(m_msgHeight); - prev->loadMessage(msg, m_root.data()); m_ui->m_layout->insertWidget(m_ui->m_layout->count() - 1, prev); + prev->loadMessage(msg, m_root.data()); } m_ui->m_btnShowMoreMessages->setText(tr("Show more messages (%n remaining)", "", m_messages.size())); diff --git a/src/librssguard/gui/newspaperpreviewer.ui b/src/librssguard/gui/newspaperpreviewer.ui index a853b2ad7..f6ac02d74 100644 --- a/src/librssguard/gui/newspaperpreviewer.ui +++ b/src/librssguard/gui/newspaperpreviewer.ui @@ -37,7 +37,7 @@ 0 0 360 - 213 + 216 @@ -77,7 +77,7 @@ 3 - 3 + 0 3 diff --git a/src/librssguard/gui/webbrowser.cpp b/src/librssguard/gui/webbrowser.cpp index 71f64bf1e..6feebb861 100644 --- a/src/librssguard/gui/webbrowser.cpp +++ b/src/librssguard/gui/webbrowser.cpp @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -251,6 +252,7 @@ void WebBrowser::onLoadingFinished(bool success) { m_loadingProgress->hide(); m_loadingProgress->setValue(0); + } Message* WebBrowser::findMessage(int id) { diff --git a/src/librssguard/gui/webbrowser.h b/src/librssguard/gui/webbrowser.h index 4aa307d01..2ef027e5c 100644 --- a/src/librssguard/gui/webbrowser.h +++ b/src/librssguard/gui/webbrowser.h @@ -35,11 +35,10 @@ class WebBrowser : public TabContent { WebViewer* viewer() const; double verticalScrollBarPosition() const; + void setVerticalScrollBarPosition(double pos); public slots: - void setVerticalScrollBarPosition(double pos); void reloadFontSettings(); - void increaseZoom(); void decreaseZoom(); void resetZoom(); @@ -52,7 +51,7 @@ class WebBrowser : public TabContent { void setNavigationBarVisible(bool visible); protected: - bool eventFilter(QObject* watched, QEvent* event); + virtual bool eventFilter(QObject* watched, QEvent* event); private slots: void updateUrl(const QUrl& url); @@ -70,10 +69,11 @@ class WebBrowser : public TabContent { private: void initializeLayout(); - Message* findMessage(int id); - void createConnections(); + Message* findMessage(int id); + + private: QVBoxLayout* m_layout; QToolBar* m_toolBar; WebViewer* m_webView; diff --git a/src/librssguard/gui/webviewer.cpp b/src/librssguard/gui/webviewer.cpp index f3eca184a..92828158a 100644 --- a/src/librssguard/gui/webviewer.cpp +++ b/src/librssguard/gui/webviewer.cpp @@ -20,7 +20,6 @@ WebViewer::WebViewer(QWidget* parent) : QWebEngineView(parent), m_root(nullptr) { WebPage* page = new WebPage(this); - connect(page, &WebPage::messageStatusChangeRequested, this, &WebViewer::messageStatusChangeRequested); setPage(page); resetWebPageZoom(); } @@ -190,7 +189,6 @@ QWebEngineView* WebViewer::createWindow(QWebEnginePage::WebWindowType type) { void WebViewer::wheelEvent(QWheelEvent* event) { QWebEngineView::wheelEvent(event); - } bool WebViewer::eventFilter(QObject* object, QEvent* event) { diff --git a/src/librssguard/gui/webviewer.h b/src/librssguard/gui/webviewer.h index dd69b88e2..584a2f95d 100644 --- a/src/librssguard/gui/webviewer.h +++ b/src/librssguard/gui/webviewer.h @@ -14,21 +14,16 @@ class WebViewer : public QWebEngineView { Q_OBJECT public: - explicit WebViewer(QWidget* parent = 0); + explicit WebViewer(QWidget* parent = nullptr); bool canIncreaseZoom(); bool canDecreaseZoom(); - inline QString messageContents() { - return m_messageContents; - } - + QString messageContents(); WebPage* page() const; RootItem* root() const; public slots: - - // Page zoom modifiers. bool increaseWebPageZoom(); bool decreaseWebPageZoom(); bool resetWebPageZoom(); @@ -38,19 +33,19 @@ class WebViewer : public QWebEngineView { void clear(); protected: - void contextMenuEvent(QContextMenuEvent* event); - QWebEngineView* createWindow(QWebEnginePage::WebWindowType type); - - void wheelEvent(QWheelEvent* event); - bool event(QEvent* event); - bool eventFilter(QObject* object, QEvent* event); - - signals: - void messageStatusChangeRequested(int message_id, WebPage::MessageStatusChange change); + virtual QWebEngineView* createWindow(QWebEnginePage::WebWindowType type); + virtual void contextMenuEvent(QContextMenuEvent* event); + virtual void wheelEvent(QWheelEvent* event); + virtual bool event(QEvent* event); + virtual bool eventFilter(QObject* object, QEvent* event); private: RootItem* m_root; QString m_messageContents; }; +inline QString WebViewer::messageContents() { + return m_messageContents; +} + #endif // WEBVIEWER_H diff --git a/src/librssguard/network-web/webpage.cpp b/src/librssguard/network-web/webpage.cpp index 1f1120c4e..9c6d195a4 100644 --- a/src/librssguard/network-web/webpage.cpp +++ b/src/librssguard/network-web/webpage.cpp @@ -19,34 +19,6 @@ WebViewer* WebPage::view() const { return qobject_cast(QWebEnginePage::view()); } -void WebPage::javaScriptAlert(const QUrl& securityOrigin, const QString& msg) { - QStringList parts = msg.split(QL1C('-')); - - if (parts.size() == 2) { - int message_id = parts.at(0).toInt(); - const QString& action = parts.at(1); - - if (action == QSL("read")) { - emit messageStatusChangeRequested(message_id, MessageStatusChange::MarkRead); - } - else if (action == QSL("unread")) { - emit messageStatusChangeRequested(message_id, MessageStatusChange::MarkUnread); - } - else if (action == QSL("starred")) { - emit messageStatusChangeRequested(message_id, MessageStatusChange::MarkStarred); - } - else if (action == QSL("unstarred")) { - emit messageStatusChangeRequested(message_id, MessageStatusChange::MarkUnstarred); - } - else { - QWebEnginePage::javaScriptAlert(securityOrigin, msg); - } - } - else { - QWebEnginePage::javaScriptAlert(securityOrigin, msg); - } -} - bool WebPage::acceptNavigationRequest(const QUrl& url, NavigationType type, bool isMainFrame) { const RootItem* root = view()->root(); diff --git a/src/librssguard/network-web/webpage.h b/src/librssguard/network-web/webpage.h index 81bf7ce66..e794a97b8 100644 --- a/src/librssguard/network-web/webpage.h +++ b/src/librssguard/network-web/webpage.h @@ -11,23 +11,12 @@ class WebPage : public QWebEnginePage { Q_OBJECT public: - enum class MessageStatusChange { - MarkRead, - MarkUnread, - MarkStarred, - MarkUnstarred - }; - explicit WebPage(QObject* parent = nullptr); WebViewer* view() const; protected: - void javaScriptAlert(const QUrl& securityOrigin, const QString& msg); bool acceptNavigationRequest(const QUrl& url, NavigationType type, bool isMainFrame); - - signals: - void messageStatusChangeRequested(int message_id, WebPage::MessageStatusChange change); }; #endif // WEBPAGE_H