rssguard/src/librssguard/gui/messagetextbrowser.cpp
Martin Rotter 6796c81ce0 fix build
2021-11-18 08:57:50 +01:00

105 lines
3.2 KiB
C++

// For license of this file, see <project-root-folder>/LICENSE.md.
#include "gui/messagetextbrowser.h"
#include "miscellaneous/application.h"
#include "miscellaneous/externaltool.h"
#include "miscellaneous/iconfactory.h"
#include "network-web/networkfactory.h"
#include <QContextMenuEvent>
#include <QFileIconProvider>
MessageTextBrowser::MessageTextBrowser(QWidget* parent) : QTextBrowser(parent) {
setAutoFillBackground(true);
setFrameShape(QFrame::Shape::StyledPanel);
setFrameShadow(QFrame::Shadow::Plain);
setTabChangesFocus(true);
setOpenLinks(false);
viewport()->setAutoFillBackground(true);
}
QVariant MessageTextBrowser::loadResource(int type, const QUrl& name) {
Q_UNUSED(name)
switch (type) {
case QTextDocument::ResourceType::ImageResource: {
if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::DisplayImagePlaceholders)).toBool()) {
if (m_imagePlaceholder.isNull()) {
m_imagePlaceholder = qApp->icons()->miscPixmap(QSL("image-placeholder")).scaledToWidth(20,
Qt::TransformationMode::FastTransformation);
}
return m_imagePlaceholder;
}
else {
return QVariant();
}
}
default:
return QTextBrowser::loadResource(type, name);
}
}
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::contextMenuEvent(QContextMenuEvent* event) {
event->accept();
auto* menu = createStandardContextMenu();
if (menu == nullptr) {
return;
}
auto anchor = anchorAt(event->pos());
if (!anchor.isEmpty()) {
QFileIconProvider icon_provider;
QMenu* menu_ext_tools = new QMenu(tr("Open with external tool"), menu);
auto tools = ExternalTool::toolsFromSettings();
menu_ext_tools->setIcon(qApp->icons()->fromTheme(QSL("document-open")));
for (const ExternalTool& tool : qAsConst(tools)) {
QAction* act_tool = new QAction(QFileInfo(tool.executable()).fileName(), menu_ext_tools);
act_tool->setIcon(icon_provider.icon(QFileInfo(tool.executable())));
act_tool->setToolTip(tool.executable());
act_tool->setData(QVariant::fromValue(tool));
menu_ext_tools->addAction(act_tool);
connect(act_tool, &QAction::triggered, this, [act_tool, anchor]() {
act_tool->data().value<ExternalTool>().run(anchor);
});
}
if (menu_ext_tools->actions().isEmpty()) {
QAction* act_not_tools = new QAction("No external tools activated");
act_not_tools->setEnabled(false);
menu_ext_tools->addAction(act_not_tools);
}
menu->addMenu(menu_ext_tools);
}
menu->popup(event->globalPos());
}
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);
}