Fix newspaper height for both variants - #284.

This commit is contained in:
Martin Rotter 2020-11-04 08:00:30 +01:00
parent abbeb9f968
commit 93fc541587
15 changed files with 61 additions and 79 deletions

View File

@ -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();

View File

@ -16,13 +16,17 @@
#include <QToolTip>
#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)),
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);

View File

@ -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;

View File

@ -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<QPair<LabelButton*, QAction*>>()) {
#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);

View File

@ -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();

View File

@ -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);
}

View File

@ -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;

View File

@ -11,6 +11,7 @@
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)) {
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()));

View File

@ -37,7 +37,7 @@
<x>0</x>
<y>0</y>
<width>360</width>
<height>213</height>
<height>216</height>
</rect>
</property>
<layout class="QVBoxLayout" name="m_layout">
@ -77,7 +77,7 @@
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
<number>0</number>
</property>
<property name="rightMargin">
<number>3</number>

View File

@ -15,6 +15,7 @@
#include <QKeyEvent>
#include <QScrollBar>
#include <QTimer>
#include <QToolBar>
#include <QToolTip>
#include <QWebEngineSettings>
@ -251,6 +252,7 @@ void WebBrowser::onLoadingFinished(bool success) {
m_loadingProgress->hide();
m_loadingProgress->setValue(0);
}
Message* WebBrowser::findMessage(int id) {

View File

@ -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;

View File

@ -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) {

View File

@ -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

View File

@ -19,34 +19,6 @@ WebViewer* WebPage::view() const {
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) {
const RootItem* root = view()->root();

View File

@ -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