Fix newspaper height for both variants - #284.
This commit is contained in:
parent
abbeb9f968
commit
93fc541587
|
@ -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();
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()));
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue