empty previewer for emails
This commit is contained in:
parent
ded2ce26eb
commit
55571a9d44
8 changed files with 128 additions and 11 deletions
|
@ -295,6 +295,8 @@ set(SOURCES
|
||||||
services/gmail/gui/formeditgmailaccount.h
|
services/gmail/gui/formeditgmailaccount.h
|
||||||
services/gmail/gui/gmailaccountdetails.cpp
|
services/gmail/gui/gmailaccountdetails.cpp
|
||||||
services/gmail/gui/gmailaccountdetails.h
|
services/gmail/gui/gmailaccountdetails.h
|
||||||
|
services/gmail/gui/emailpreviewer.h
|
||||||
|
services/gmail/gui/emailpreviewer.cpp
|
||||||
services/greader/definitions.h
|
services/greader/definitions.h
|
||||||
services/greader/greaderentrypoint.cpp
|
services/greader/greaderentrypoint.cpp
|
||||||
services/greader/greaderentrypoint.h
|
services/greader/greaderentrypoint.h
|
||||||
|
@ -541,6 +543,7 @@ set(UI_FILES
|
||||||
services/gmail/gui/formaddeditemail.ui
|
services/gmail/gui/formaddeditemail.ui
|
||||||
services/gmail/gui/formdownloadattachment.ui
|
services/gmail/gui/formdownloadattachment.ui
|
||||||
services/gmail/gui/gmailaccountdetails.ui
|
services/gmail/gui/gmailaccountdetails.ui
|
||||||
|
services/gmail/gui/emailpreviewer.ui
|
||||||
services/greader/gui/greaderaccountdetails.ui
|
services/greader/gui/greaderaccountdetails.ui
|
||||||
services/newsblur/gui/newsbluraccountdetails.ui
|
services/newsblur/gui/newsbluraccountdetails.ui
|
||||||
services/owncloud/gui/owncloudaccountdetails.ui
|
services/owncloud/gui/owncloudaccountdetails.ui
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
|
#include <QStackedLayout>
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
#include <QToolTip>
|
#include <QToolTip>
|
||||||
|
|
||||||
|
@ -41,22 +42,28 @@ void MessagePreviewer::createConnections() {
|
||||||
}
|
}
|
||||||
|
|
||||||
MessagePreviewer::MessagePreviewer(QWidget* parent)
|
MessagePreviewer::MessagePreviewer(QWidget* parent)
|
||||||
: QWidget(parent), m_layout(new QGridLayout(this)), m_toolBar(new QToolBar(this)),
|
: QWidget(parent), m_mainLayout(new QGridLayout(this)), m_viewerLayout(new QStackedLayout(this)),
|
||||||
m_separator(nullptr), m_btnLabels(QList<QPair<LabelButton*, QAction*>>()) {
|
m_toolBar(new QToolBar(this)), m_msgBrowser(new WebBrowser(nullptr, this)), m_separator(nullptr),
|
||||||
m_msgBrowser = new WebBrowser(nullptr, this);
|
m_btnLabels(QList<QPair<LabelButton*, QAction*>>()) {
|
||||||
|
|
||||||
m_actionSwitchImportance->setCheckable(true);
|
|
||||||
m_toolBar->setOrientation(Qt::Orientation::Vertical);
|
m_toolBar->setOrientation(Qt::Orientation::Vertical);
|
||||||
|
|
||||||
// NOTE: To make sure that if we have many labels and short message
|
// NOTE: To make sure that if we have many labels and short message
|
||||||
// that whole toolbar is visible.
|
// that whole toolbar is visible.
|
||||||
m_toolBar->setSizePolicy(m_toolBar->sizePolicy().horizontalPolicy(), QSizePolicy::Policy::MinimumExpanding);
|
m_toolBar->setSizePolicy(m_toolBar->sizePolicy().horizontalPolicy(), QSizePolicy::Policy::MinimumExpanding);
|
||||||
|
|
||||||
m_layout->setContentsMargins(3, 3, 3, 3);
|
// This layout holds standard article browser on index 0
|
||||||
m_layout->addWidget(m_msgBrowser, 0, 1, 1, 1);
|
// and optional custom browser on index 1.
|
||||||
m_layout->addWidget(m_toolBar, 0, 0, -1, 1);
|
m_viewerLayout->addWidget(m_msgBrowser);
|
||||||
|
|
||||||
|
m_mainLayout->setContentsMargins(3, 3, 3, 3);
|
||||||
|
m_mainLayout->addLayout(m_viewerLayout, 0, 1, 1, 1);
|
||||||
|
m_mainLayout->addWidget(m_toolBar, 0, 0, -1, 1);
|
||||||
|
|
||||||
createConnections();
|
createConnections();
|
||||||
|
|
||||||
|
m_actionSwitchImportance->setCheckable(true);
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,6 +84,7 @@ WebBrowser* MessagePreviewer::webBrowser() const {
|
||||||
|
|
||||||
void MessagePreviewer::clear() {
|
void MessagePreviewer::clear() {
|
||||||
updateLabels(true);
|
updateLabels(true);
|
||||||
|
ensureDefaultBrowserVisible();
|
||||||
m_msgBrowser->clear(false);
|
m_msgBrowser->clear(false);
|
||||||
hide();
|
hide();
|
||||||
m_root.clear();
|
m_root.clear();
|
||||||
|
@ -88,6 +96,7 @@ void MessagePreviewer::hideToolbar() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagePreviewer::loadUrl(const QString& url) {
|
void MessagePreviewer::loadUrl(const QString& url) {
|
||||||
|
ensureDefaultBrowserVisible();
|
||||||
m_msgBrowser->loadUrl(url);
|
m_msgBrowser->loadUrl(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,10 +118,9 @@ void MessagePreviewer::loadMessage(const Message& message, RootItem* root) {
|
||||||
return it->kind() == RootItem::Kind::Feed && it->customId() == msg_feed_id;
|
return it->kind() == RootItem::Kind::Feed && it->customId() == msg_feed_id;
|
||||||
})->toFeed();
|
})->toFeed();
|
||||||
|
|
||||||
// TODO: tady místo na otevření skrze custom previewer, pokud
|
|
||||||
// ho root má.
|
|
||||||
|
|
||||||
if (feed != nullptr && feed->openArticlesDirectly() && !m_message.m_url.isEmpty()) {
|
if (feed != nullptr && feed->openArticlesDirectly() && !m_message.m_url.isEmpty()) {
|
||||||
|
ensureDefaultBrowserVisible();
|
||||||
|
|
||||||
m_msgBrowser->setVerticalScrollBarPosition(0.0);
|
m_msgBrowser->setVerticalScrollBarPosition(0.0);
|
||||||
m_msgBrowser->loadUrl(m_message.m_url);
|
m_msgBrowser->loadUrl(m_message.m_url);
|
||||||
}
|
}
|
||||||
|
@ -120,9 +128,24 @@ void MessagePreviewer::loadMessage(const Message& message, RootItem* root) {
|
||||||
CustomMessagePreviewer* custom_previewer = root->getParentServiceRoot()->customMessagePreviewer();
|
CustomMessagePreviewer* custom_previewer = root->getParentServiceRoot()->customMessagePreviewer();
|
||||||
|
|
||||||
if (custom_previewer != nullptr) {
|
if (custom_previewer != nullptr) {
|
||||||
|
auto* current_custom_previewer = m_viewerLayout->widget(1);
|
||||||
|
|
||||||
|
if (current_custom_previewer != nullptr) {
|
||||||
|
if (current_custom_previewer != custom_previewer) {
|
||||||
|
m_viewerLayout->removeWidget(current_custom_previewer);
|
||||||
|
m_viewerLayout->addWidget(custom_previewer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_viewerLayout->addWidget(custom_previewer);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_viewerLayout->setCurrentIndex(1);
|
||||||
custom_previewer->loadMessage(message, m_root);
|
custom_previewer->loadMessage(message, m_root);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
ensureDefaultBrowserVisible();
|
||||||
|
|
||||||
m_msgBrowser->loadMessages({ message }, m_root);
|
m_msgBrowser->loadMessages({ message }, m_root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -249,6 +272,14 @@ void MessagePreviewer::updateLabels(bool only_clear) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessagePreviewer::ensureDefaultBrowserVisible() {
|
||||||
|
if (m_viewerLayout->count() > 1) {
|
||||||
|
m_viewerLayout->removeWidget(m_viewerLayout->widget(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
m_viewerLayout->setCurrentIndex(0);
|
||||||
|
}
|
||||||
|
|
||||||
LabelButton::LabelButton(QWidget* parent) : QToolButton(parent), m_label(nullptr) {}
|
LabelButton::LabelButton(QWidget* parent) : QToolButton(parent), m_label(nullptr) {}
|
||||||
|
|
||||||
Label* LabelButton::label() const {
|
Label* LabelButton::label() const {
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
|
|
||||||
class QGridLayout;
|
class QGridLayout;
|
||||||
|
class QStackedLayout;
|
||||||
class QToolBar;
|
class QToolBar;
|
||||||
class WebBrowser;
|
class WebBrowser;
|
||||||
|
|
||||||
|
@ -60,8 +61,10 @@ class MessagePreviewer : public QWidget {
|
||||||
void createConnections();
|
void createConnections();
|
||||||
void updateButtons();
|
void updateButtons();
|
||||||
void updateLabels(bool only_clear);
|
void updateLabels(bool only_clear);
|
||||||
|
void ensureDefaultBrowserVisible();
|
||||||
|
|
||||||
QGridLayout* m_layout;
|
QGridLayout* m_mainLayout;
|
||||||
|
QStackedLayout* m_viewerLayout;
|
||||||
QToolBar* m_toolBar;
|
QToolBar* m_toolBar;
|
||||||
WebBrowser* m_msgBrowser;
|
WebBrowser* m_msgBrowser;
|
||||||
Message m_message;
|
Message m_message;
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "services/gmail/definitions.h"
|
#include "services/gmail/definitions.h"
|
||||||
#include "services/gmail/gmailentrypoint.h"
|
#include "services/gmail/gmailentrypoint.h"
|
||||||
#include "services/gmail/gmailnetworkfactory.h"
|
#include "services/gmail/gmailnetworkfactory.h"
|
||||||
|
#include "services/gmail/gui/emailpreviewer.h"
|
||||||
#include "services/gmail/gui/formaddeditemail.h"
|
#include "services/gmail/gui/formaddeditemail.h"
|
||||||
#include "services/gmail/gui/formdownloadattachment.h"
|
#include "services/gmail/gui/formdownloadattachment.h"
|
||||||
#include "services/gmail/gui/formeditgmailaccount.h"
|
#include "services/gmail/gui/formeditgmailaccount.h"
|
||||||
|
@ -97,6 +98,14 @@ bool GmailServiceRoot::wantsBaggedIdsOfExistingMessages() const {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CustomMessagePreviewer* GmailServiceRoot::customMessagePreviewer() {
|
||||||
|
if (m_emailPreview.isNull()) {
|
||||||
|
m_emailPreview.reset(new EmailPreviewer());
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_emailPreview.data();
|
||||||
|
}
|
||||||
|
|
||||||
bool GmailServiceRoot::downloadAttachmentOnMyOwn(const QUrl& url) const {
|
bool GmailServiceRoot::downloadAttachmentOnMyOwn(const QUrl& url) const {
|
||||||
QString str_url = url.toString();
|
QString str_url = url.toString();
|
||||||
QString attachment_id = str_url.mid(str_url.indexOf(QL1C('?')) + 1);
|
QString attachment_id = str_url.mid(str_url.indexOf(QL1C('?')) + 1);
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#include "services/abstract/cacheforserviceroot.h"
|
#include "services/abstract/cacheforserviceroot.h"
|
||||||
#include "services/abstract/serviceroot.h"
|
#include "services/abstract/serviceroot.h"
|
||||||
|
|
||||||
|
#include "services/gmail/gui/emailpreviewer.h"
|
||||||
|
|
||||||
class GmailNetworkFactory;
|
class GmailNetworkFactory;
|
||||||
|
|
||||||
class GmailServiceRoot : public ServiceRoot, public CacheForServiceRoot {
|
class GmailServiceRoot : public ServiceRoot, public CacheForServiceRoot {
|
||||||
|
@ -35,6 +37,7 @@ class GmailServiceRoot : public ServiceRoot, public CacheForServiceRoot {
|
||||||
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages,
|
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages,
|
||||||
const QHash<QString, QStringList>& tagged_messages);
|
const QHash<QString, QStringList>& tagged_messages);
|
||||||
virtual bool wantsBaggedIdsOfExistingMessages() const;
|
virtual bool wantsBaggedIdsOfExistingMessages() const;
|
||||||
|
virtual CustomMessagePreviewer* customMessagePreviewer();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual RootItem* obtainNewTreeForSyncIn() const;
|
virtual RootItem* obtainNewTreeForSyncIn() const;
|
||||||
|
@ -47,6 +50,7 @@ class GmailServiceRoot : public ServiceRoot, public CacheForServiceRoot {
|
||||||
void updateTitle();
|
void updateTitle();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QScopedPointer<EmailPreviewer> m_emailPreview;
|
||||||
GmailNetworkFactory* m_network;
|
GmailNetworkFactory* m_network;
|
||||||
QAction* m_actionReply;
|
QAction* m_actionReply;
|
||||||
Message m_replyToMessage;
|
Message m_replyToMessage;
|
||||||
|
|
13
src/librssguard/services/gmail/gui/emailpreviewer.cpp
Executable file
13
src/librssguard/services/gmail/gui/emailpreviewer.cpp
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
#include "services/gmail/gui/emailpreviewer.h"
|
||||||
|
|
||||||
|
EmailPreviewer::EmailPreviewer(QWidget* parent) : CustomMessagePreviewer(parent) {
|
||||||
|
m_ui.setupUi(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
EmailPreviewer::~EmailPreviewer() {
|
||||||
|
qDebugNN << LOGSEC_GMAIL << "Email previewer destroyed.";
|
||||||
|
}
|
||||||
|
|
||||||
|
void EmailPreviewer::clear() {}
|
||||||
|
|
||||||
|
void EmailPreviewer::loadMessage(const Message& msg, RootItem* selected_item) {}
|
22
src/librssguard/services/gmail/gui/emailpreviewer.h
Executable file
22
src/librssguard/services/gmail/gui/emailpreviewer.h
Executable file
|
@ -0,0 +1,22 @@
|
||||||
|
#ifndef EMAILPREVIEWER_H
|
||||||
|
#define EMAILPREVIEWER_H
|
||||||
|
|
||||||
|
#include "services/abstract/gui/custommessagepreviewer.h"
|
||||||
|
|
||||||
|
#include "ui_emailpreviewer.h"
|
||||||
|
|
||||||
|
class EmailPreviewer : public CustomMessagePreviewer {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit EmailPreviewer(QWidget* parent = nullptr);
|
||||||
|
virtual ~EmailPreviewer();
|
||||||
|
|
||||||
|
virtual void clear();
|
||||||
|
virtual void loadMessage(const Message& msg, RootItem* selected_item);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::EmailPreviewer m_ui;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // EMAILPREVIEWER_H
|
32
src/librssguard/services/gmail/gui/emailpreviewer.ui
Executable file
32
src/librssguard/services/gmail/gui/emailpreviewer.ui
Executable file
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>EmailPreviewer</class>
|
||||||
|
<widget class="QWidget" name="EmailPreviewer">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>80</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>49</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>test</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
Loading…
Add table
Reference in a new issue