Fix newspaper height for both variants - #284.
This commit is contained in:
parent
abbeb9f968
commit
93fc541587
15 changed files with 61 additions and 79 deletions
|
@ -47,7 +47,7 @@
|
||||||
FeedMessageViewer::FeedMessageViewer(QWidget* parent) : TabContent(parent), m_toolBarsEnabled(true), m_listHeadersEnabled(true),
|
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_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_messagesView(new MessagesView(this)), m_feedsView(new FeedsView(this)),
|
||||||
m_messagesBrowser(new MessagePreviewer(this)) {
|
m_messagesBrowser(new MessagePreviewer(false, this)) {
|
||||||
initialize();
|
initialize();
|
||||||
initializeViews();
|
initializeViews();
|
||||||
|
|
||||||
|
|
|
@ -16,13 +16,17 @@
|
||||||
#include <QToolTip>
|
#include <QToolTip>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
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)),
|
: QWidget(parent), m_txtBrowser(new MessageTextBrowser(this)), m_searchWidget(new SearchTextWidget(this)),
|
||||||
m_layout(new QVBoxLayout(this)) {
|
m_layout(new QVBoxLayout(this)) {
|
||||||
m_layout->setContentsMargins(3, 3, 3, 3);
|
m_layout->setContentsMargins(3, 3, 3, 3);
|
||||||
m_layout->addWidget(m_txtBrowser, 1);
|
m_layout->addWidget(m_txtBrowser, 1);
|
||||||
m_layout->addWidget(m_searchWidget);
|
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]() {
|
connect(m_searchWidget, &SearchTextWidget::searchCancelled, this, [this]() {
|
||||||
m_txtBrowser->textCursor().clearSelection();
|
m_txtBrowser->textCursor().clearSelection();
|
||||||
m_txtBrowser->moveCursor(QTextCursor::MoveOperation::Left);
|
m_txtBrowser->moveCursor(QTextCursor::MoveOperation::Left);
|
||||||
|
|
|
@ -20,7 +20,7 @@ class MessageBrowser : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit MessageBrowser(QWidget* parent = nullptr);
|
explicit MessageBrowser(bool should_resize_to_fit, QWidget* parent = nullptr);
|
||||||
|
|
||||||
double verticalScrollBarPosition() const;
|
double verticalScrollBarPosition() const;
|
||||||
|
|
||||||
|
|
|
@ -45,15 +45,22 @@ void MessagePreviewer::createConnections() {
|
||||||
&MessagePreviewer::switchMessageImportance);
|
&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),
|
: QWidget(parent), m_layout(new QGridLayout(this)), m_toolBar(new QToolBar(this)), m_verticalScrollBarPosition(0.0),
|
||||||
m_separator(nullptr), m_btnLabels(QList<QPair<LabelButton*, QAction*>>()) {
|
m_separator(nullptr), m_btnLabels(QList<QPair<LabelButton*, QAction*>>()) {
|
||||||
#if defined (USE_WEBENGINE)
|
#if defined (USE_WEBENGINE)
|
||||||
m_txtMessage = new WebBrowser(this);
|
m_txtMessage = new WebBrowser(this);
|
||||||
|
|
||||||
|
if (should_resize_to_fit) {
|
||||||
|
m_txtMessage->setFixedHeight(parent->parentWidget()->height());
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
m_txtMessage = new MessageBrowser(this);
|
m_txtMessage = new MessageBrowser(should_resize_to_fit, this);
|
||||||
#endif
|
#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_toolBar->setOrientation(Qt::Orientation::Vertical);
|
||||||
m_layout->setContentsMargins(3, 3, 3, 3);
|
m_layout->setContentsMargins(3, 3, 3, 3);
|
||||||
m_layout->addWidget(m_txtMessage, 0, 1, 1, 1);
|
m_layout->addWidget(m_txtMessage, 0, 1, 1, 1);
|
||||||
|
|
|
@ -37,7 +37,7 @@ class MessagePreviewer : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit MessagePreviewer(QWidget* parent = nullptr);
|
explicit MessagePreviewer(bool should_resize_to_fit, QWidget* parent = nullptr);
|
||||||
|
|
||||||
void reloadFontSettings();
|
void reloadFontSettings();
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,20 @@ QVariant MessageTextBrowser::loadResource(int type, const QUrl& name) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessageTextBrowser::wheelEvent(QWheelEvent* e) {
|
QSize MessageTextBrowser::sizeHint() const {
|
||||||
QTextBrowser::wheelEvent(e);
|
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());
|
qApp->settings()->setValue(GROUP(Messages), Messages::PreviewerFontStandard, font().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessageTextBrowser::resizeEvent(QResizeEvent* event) {
|
||||||
|
// Notify parents about changed geometry.
|
||||||
|
updateGeometry();
|
||||||
|
QTextBrowser::resizeEvent(event);
|
||||||
|
}
|
||||||
|
|
|
@ -14,10 +14,12 @@ class MessageTextBrowser : public QTextBrowser {
|
||||||
explicit MessageTextBrowser(QWidget* parent = nullptr);
|
explicit MessageTextBrowser(QWidget* parent = nullptr);
|
||||||
virtual ~MessageTextBrowser() = default;
|
virtual ~MessageTextBrowser() = default;
|
||||||
|
|
||||||
QVariant loadResource(int type, const QUrl& name);
|
virtual QVariant loadResource(int type, const QUrl& name);
|
||||||
|
virtual QSize sizeHint() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void wheelEvent(QWheelEvent* e);
|
virtual void wheelEvent(QWheelEvent* event);
|
||||||
|
virtual void resizeEvent (QResizeEvent* event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPixmap m_imagePlaceholder;
|
QPixmap m_imagePlaceholder;
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
NewspaperPreviewer::NewspaperPreviewer(int msg_height, RootItem* root, QList<Message> messages, QWidget* parent)
|
NewspaperPreviewer::NewspaperPreviewer(int msg_height, RootItem* root, QList<Message> messages, QWidget* parent)
|
||||||
: TabContent(parent), m_msgHeight(msg_height), m_ui(new Ui::NewspaperPreviewer), m_root(root), m_messages(std::move(messages)) {
|
: 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->setupUi(this);
|
||||||
|
m_ui->m_btnShowMoreMessages->setIcon(qApp->icons()->fromTheme(QSL("view-refresh")));
|
||||||
connect(m_ui->m_btnShowMoreMessages, &QPushButton::clicked, this, &NewspaperPreviewer::showMoreMessages);
|
connect(m_ui->m_btnShowMoreMessages, &QPushButton::clicked, this, &NewspaperPreviewer::showMoreMessages);
|
||||||
showMoreMessages();
|
showMoreMessages();
|
||||||
}
|
}
|
||||||
|
@ -29,17 +30,16 @@ void NewspaperPreviewer::showMoreMessages() {
|
||||||
|
|
||||||
for (int i = 0; i < 5 && !m_messages.isEmpty(); i++) {
|
for (int i = 0; i < 5 && !m_messages.isEmpty(); i++) {
|
||||||
Message msg = m_messages.takeFirst();
|
Message msg = m_messages.takeFirst();
|
||||||
auto* prev = new MessagePreviewer(this);
|
auto* prev = new MessagePreviewer(true, this);
|
||||||
QMargins margins = prev->layout()->contentsMargins();
|
QMargins margins = prev->layout()->contentsMargins();
|
||||||
|
|
||||||
|
prev->setContentsMargins(margins);
|
||||||
|
|
||||||
connect(prev, &MessagePreviewer::markMessageRead, this, &NewspaperPreviewer::markMessageRead);
|
connect(prev, &MessagePreviewer::markMessageRead, this, &NewspaperPreviewer::markMessageRead);
|
||||||
connect(prev, &MessagePreviewer::markMessageImportant, this, &NewspaperPreviewer::markMessageImportant);
|
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);
|
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()));
|
m_ui->m_btnShowMoreMessages->setText(tr("Show more messages (%n remaining)", "", m_messages.size()));
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>360</width>
|
<width>360</width>
|
||||||
<height>213</height>
|
<height>216</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="m_layout">
|
<layout class="QVBoxLayout" name="m_layout">
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
<number>3</number>
|
<number>3</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="topMargin">
|
<property name="topMargin">
|
||||||
<number>3</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="rightMargin">
|
<property name="rightMargin">
|
||||||
<number>3</number>
|
<number>3</number>
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
|
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
|
#include <QTimer>
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
#include <QToolTip>
|
#include <QToolTip>
|
||||||
#include <QWebEngineSettings>
|
#include <QWebEngineSettings>
|
||||||
|
@ -251,6 +252,7 @@ void WebBrowser::onLoadingFinished(bool success) {
|
||||||
|
|
||||||
m_loadingProgress->hide();
|
m_loadingProgress->hide();
|
||||||
m_loadingProgress->setValue(0);
|
m_loadingProgress->setValue(0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Message* WebBrowser::findMessage(int id) {
|
Message* WebBrowser::findMessage(int id) {
|
||||||
|
|
|
@ -35,11 +35,10 @@ class WebBrowser : public TabContent {
|
||||||
WebViewer* viewer() const;
|
WebViewer* viewer() const;
|
||||||
|
|
||||||
double verticalScrollBarPosition() const;
|
double verticalScrollBarPosition() const;
|
||||||
|
void setVerticalScrollBarPosition(double pos);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setVerticalScrollBarPosition(double pos);
|
|
||||||
void reloadFontSettings();
|
void reloadFontSettings();
|
||||||
|
|
||||||
void increaseZoom();
|
void increaseZoom();
|
||||||
void decreaseZoom();
|
void decreaseZoom();
|
||||||
void resetZoom();
|
void resetZoom();
|
||||||
|
@ -52,7 +51,7 @@ class WebBrowser : public TabContent {
|
||||||
void setNavigationBarVisible(bool visible);
|
void setNavigationBarVisible(bool visible);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool eventFilter(QObject* watched, QEvent* event);
|
virtual bool eventFilter(QObject* watched, QEvent* event);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void updateUrl(const QUrl& url);
|
void updateUrl(const QUrl& url);
|
||||||
|
@ -70,10 +69,11 @@ class WebBrowser : public TabContent {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initializeLayout();
|
void initializeLayout();
|
||||||
Message* findMessage(int id);
|
|
||||||
|
|
||||||
void createConnections();
|
void createConnections();
|
||||||
|
|
||||||
|
Message* findMessage(int id);
|
||||||
|
|
||||||
|
private:
|
||||||
QVBoxLayout* m_layout;
|
QVBoxLayout* m_layout;
|
||||||
QToolBar* m_toolBar;
|
QToolBar* m_toolBar;
|
||||||
WebViewer* m_webView;
|
WebViewer* m_webView;
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
WebViewer::WebViewer(QWidget* parent) : QWebEngineView(parent), m_root(nullptr) {
|
WebViewer::WebViewer(QWidget* parent) : QWebEngineView(parent), m_root(nullptr) {
|
||||||
WebPage* page = new WebPage(this);
|
WebPage* page = new WebPage(this);
|
||||||
|
|
||||||
connect(page, &WebPage::messageStatusChangeRequested, this, &WebViewer::messageStatusChangeRequested);
|
|
||||||
setPage(page);
|
setPage(page);
|
||||||
resetWebPageZoom();
|
resetWebPageZoom();
|
||||||
}
|
}
|
||||||
|
@ -190,7 +189,6 @@ QWebEngineView* WebViewer::createWindow(QWebEnginePage::WebWindowType type) {
|
||||||
|
|
||||||
void WebViewer::wheelEvent(QWheelEvent* event) {
|
void WebViewer::wheelEvent(QWheelEvent* event) {
|
||||||
QWebEngineView::wheelEvent(event);
|
QWebEngineView::wheelEvent(event);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WebViewer::eventFilter(QObject* object, QEvent* event) {
|
bool WebViewer::eventFilter(QObject* object, QEvent* event) {
|
||||||
|
|
|
@ -14,21 +14,16 @@ class WebViewer : public QWebEngineView {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit WebViewer(QWidget* parent = 0);
|
explicit WebViewer(QWidget* parent = nullptr);
|
||||||
|
|
||||||
bool canIncreaseZoom();
|
bool canIncreaseZoom();
|
||||||
bool canDecreaseZoom();
|
bool canDecreaseZoom();
|
||||||
|
|
||||||
inline QString messageContents() {
|
QString messageContents();
|
||||||
return m_messageContents;
|
|
||||||
}
|
|
||||||
|
|
||||||
WebPage* page() const;
|
WebPage* page() const;
|
||||||
RootItem* root() const;
|
RootItem* root() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
// Page zoom modifiers.
|
|
||||||
bool increaseWebPageZoom();
|
bool increaseWebPageZoom();
|
||||||
bool decreaseWebPageZoom();
|
bool decreaseWebPageZoom();
|
||||||
bool resetWebPageZoom();
|
bool resetWebPageZoom();
|
||||||
|
@ -38,19 +33,19 @@ class WebViewer : public QWebEngineView {
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void contextMenuEvent(QContextMenuEvent* event);
|
virtual QWebEngineView* createWindow(QWebEnginePage::WebWindowType type);
|
||||||
QWebEngineView* createWindow(QWebEnginePage::WebWindowType type);
|
virtual void contextMenuEvent(QContextMenuEvent* event);
|
||||||
|
virtual void wheelEvent(QWheelEvent* event);
|
||||||
void wheelEvent(QWheelEvent* event);
|
virtual bool event(QEvent* event);
|
||||||
bool event(QEvent* event);
|
virtual bool eventFilter(QObject* object, QEvent* event);
|
||||||
bool eventFilter(QObject* object, QEvent* event);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void messageStatusChangeRequested(int message_id, WebPage::MessageStatusChange change);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RootItem* m_root;
|
RootItem* m_root;
|
||||||
QString m_messageContents;
|
QString m_messageContents;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline QString WebViewer::messageContents() {
|
||||||
|
return m_messageContents;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // WEBVIEWER_H
|
#endif // WEBVIEWER_H
|
||||||
|
|
|
@ -19,34 +19,6 @@ WebViewer* WebPage::view() const {
|
||||||
return qobject_cast<WebViewer*>(QWebEnginePage::view());
|
return qobject_cast<WebViewer*>(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) {
|
bool WebPage::acceptNavigationRequest(const QUrl& url, NavigationType type, bool isMainFrame) {
|
||||||
const RootItem* root = view()->root();
|
const RootItem* root = view()->root();
|
||||||
|
|
||||||
|
|
|
@ -11,23 +11,12 @@ class WebPage : public QWebEnginePage {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum class MessageStatusChange {
|
|
||||||
MarkRead,
|
|
||||||
MarkUnread,
|
|
||||||
MarkStarred,
|
|
||||||
MarkUnstarred
|
|
||||||
};
|
|
||||||
|
|
||||||
explicit WebPage(QObject* parent = nullptr);
|
explicit WebPage(QObject* parent = nullptr);
|
||||||
|
|
||||||
WebViewer* view() const;
|
WebViewer* view() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void javaScriptAlert(const QUrl& securityOrigin, const QString& msg);
|
|
||||||
bool acceptNavigationRequest(const QUrl& url, NavigationType type, bool isMainFrame);
|
bool acceptNavigationRequest(const QUrl& url, NavigationType type, bool isMainFrame);
|
||||||
|
|
||||||
signals:
|
|
||||||
void messageStatusChangeRequested(int message_id, WebPage::MessageStatusChange change);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // WEBPAGE_H
|
#endif // WEBPAGE_H
|
||||||
|
|
Loading…
Add table
Reference in a new issue