vnote/src/dialog/vtipsdialog.cpp
Le Tan 2a7a4f864e WebView: do not set background color to transparent
Setting background color of a web engine page to transparent will force
it to render using grayscale antialiasing.
2018-10-25 21:03:41 +08:00

77 lines
2.2 KiB
C++

#include "vtipsdialog.h"
#include <QtWidgets>
#include <QWebEngineView>
#include "vconfigmanager.h"
#include "vmarkdownconverter.h"
#include "utils/vutils.h"
#include "vnote.h"
extern VConfigManager *g_config;
VTipsDialog::VTipsDialog(const QString &p_tipFile,
const QString &p_actionText,
TipsDialogFunc p_action,
QWidget *p_parent)
: QDialog(p_parent), m_actionBtn(NULL), m_action(p_action)
{
setupUI(p_actionText);
readFile(p_tipFile);
}
void VTipsDialog::setupUI(const QString &p_actionText)
{
m_viewer = VUtils::getWebEngineView(g_config->getBaseBackground());
m_viewer->setContextMenuPolicy(Qt::NoContextMenu);
m_btnBox = new QDialogButtonBox(QDialogButtonBox::Ok);
connect(m_btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
m_okBtn = m_btnBox->button(QDialogButtonBox::Ok);
if (!p_actionText.isEmpty()) {
Q_ASSERT(m_action != nullptr);
m_actionBtn = m_btnBox->addButton(p_actionText, QDialogButtonBox::ActionRole);
m_actionBtn->setProperty("SpecialBtn", true);
m_actionBtn->setDefault(true);
connect(m_actionBtn, &QPushButton::clicked,
this, [this]() {
m_action();
});
}
QVBoxLayout *mainLayout = new QVBoxLayout();
mainLayout->addWidget(m_viewer);
mainLayout->addWidget(m_btnBox);
setLayout(mainLayout);
setWindowTitle(tr("VNote Tips"));
}
void VTipsDialog::readFile(const QString &p_tipFile)
{
QString content = VUtils::readFileFromDisk(p_tipFile);
VMarkdownConverter mdConverter;
QString toc;
QString html = mdConverter.generateHtml(content,
g_config->getMarkdownExtensions(),
toc);
html = VUtils::generateSimpleHtmlTemplate(html);
// Add a base URL to enable it to access local style files.
m_viewer->setHtml(html, QUrl("qrc:/resources"));
}
void VTipsDialog::showEvent(QShowEvent *p_event)
{
QDialog::showEvent(p_event);
if (m_actionBtn) {
m_actionBtn->setFocus();
} else {
m_okBtn->setFocus();
}
}