mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
support SavePage action in reading mode
This commit is contained in:
parent
bccc0b28db
commit
3bee0365e9
@ -398,6 +398,8 @@ bool VExporter::exportToMHTML(VWebView *p_webViewer,
|
||||
const ExportHTMLOption &p_opt,
|
||||
const QString &p_filePath)
|
||||
{
|
||||
Q_UNUSED(p_opt);
|
||||
|
||||
m_downloadState = QWebEngineDownloadItem::DownloadRequested;
|
||||
|
||||
p_webViewer->page()->save(p_filePath, QWebEngineDownloadItem::MimeHtmlSaveFormat);
|
||||
|
@ -2,6 +2,7 @@
|
||||
#include <QWebChannel>
|
||||
#include <QFileInfo>
|
||||
#include <QCoreApplication>
|
||||
#include <QWebEngineProfile>
|
||||
#include "vmdtab.h"
|
||||
#include "vdocument.h"
|
||||
#include "vnote.h"
|
||||
@ -383,10 +384,14 @@ void VMdTab::setupMarkdownViewer()
|
||||
m_webViewer = new VWebView(m_file, this);
|
||||
connect(m_webViewer, &VWebView::editNote,
|
||||
this, &VMdTab::editFile);
|
||||
connect(m_webViewer, &VWebView::requestSavePage,
|
||||
this, &VMdTab::handleSavePageRequested);
|
||||
|
||||
VPreviewPage *page = new VPreviewPage(m_webViewer);
|
||||
m_webViewer->setPage(page);
|
||||
m_webViewer->setZoomFactor(g_config->getWebZoomFactor());
|
||||
connect(page->profile(), &QWebEngineProfile::downloadRequested,
|
||||
this, &VMdTab::handleDownloadRequested);
|
||||
|
||||
// Avoid white flash before loading content.
|
||||
page->setBackgroundColor(Qt::transparent);
|
||||
@ -1199,3 +1204,56 @@ bool VMdTab::executeVimCommandInWebView(const QString &p_cmd)
|
||||
|
||||
return validCommand;
|
||||
}
|
||||
|
||||
void VMdTab::handleDownloadRequested(QWebEngineDownloadItem *p_item)
|
||||
{
|
||||
connect(p_item, &QWebEngineDownloadItem::stateChanged,
|
||||
this, [p_item, this](QWebEngineDownloadItem::DownloadState p_state) {
|
||||
QString msg;
|
||||
switch (p_state) {
|
||||
case QWebEngineDownloadItem::DownloadCompleted:
|
||||
emit statusMessage(tr("Page saved to %1").arg(p_item->path()));
|
||||
break;
|
||||
|
||||
case QWebEngineDownloadItem::DownloadCancelled:
|
||||
case QWebEngineDownloadItem::DownloadInterrupted:
|
||||
emit statusMessage(tr("Fail to save page to %1").arg(p_item->path()));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void VMdTab::handleSavePageRequested()
|
||||
{
|
||||
static QString lastPath = g_config->getDocumentPathOrHomePath();
|
||||
|
||||
QStringList filters;
|
||||
filters << tr("Single HTML (*.html)") << tr("Complete HTML (*.html)") << tr("MIME HTML (*.mht)");
|
||||
QList<QWebEngineDownloadItem::SavePageFormat> formats;
|
||||
formats << QWebEngineDownloadItem::SingleHtmlSaveFormat
|
||||
<< QWebEngineDownloadItem::CompleteHtmlSaveFormat
|
||||
<< QWebEngineDownloadItem::MimeHtmlSaveFormat;
|
||||
|
||||
QString selectedFilter = filters[1];
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
tr("Save Page"),
|
||||
lastPath,
|
||||
filters.join(";;"),
|
||||
&selectedFilter);
|
||||
if (fileName.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
lastPath = QFileInfo(fileName).path();
|
||||
|
||||
QWebEngineDownloadItem::SavePageFormat format = formats.at(filters.indexOf(selectedFilter));
|
||||
|
||||
qDebug() << "save page as" << format << "to" << fileName;
|
||||
|
||||
emit statusMessage(tr("Saving page to %1").arg(fileName));
|
||||
|
||||
m_webViewer->page()->save(fileName, format);
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ class VDocument;
|
||||
class VMdEditor;
|
||||
class VInsertSelector;
|
||||
class QTimer;
|
||||
class QWebEngineDownloadItem;
|
||||
|
||||
class VMdTab : public VEditTab
|
||||
{
|
||||
@ -132,6 +133,12 @@ private slots:
|
||||
// Restore from m_infoToRestore.
|
||||
void restoreFromTabInfo();
|
||||
|
||||
// Handle download request from web page.
|
||||
void handleDownloadRequested(QWebEngineDownloadItem *p_item);
|
||||
|
||||
// Handle save page request.
|
||||
void handleSavePageRequested();
|
||||
|
||||
private:
|
||||
enum TabReady { None = 0, ReadMode = 0x1, EditMode = 0x2 };
|
||||
|
||||
|
@ -95,6 +95,13 @@ void VWebView::contextMenuEvent(QContextMenuEvent *p_event)
|
||||
defaultCopyImageAct->setVisible(false);
|
||||
}
|
||||
|
||||
if (!hasSelection()) {
|
||||
QAction *savePageAct = new QAction(QWebEnginePage::tr("Save &Page"), menu);
|
||||
connect(savePageAct, &QAction::triggered,
|
||||
this, &VWebView::requestSavePage);
|
||||
menu->addAction(savePageAct);
|
||||
}
|
||||
|
||||
// Add Copy All As menu.
|
||||
initCopyAllAsMenu(menu);
|
||||
|
||||
|
@ -18,6 +18,8 @@ public:
|
||||
signals:
|
||||
void editNote();
|
||||
|
||||
void requestSavePage();
|
||||
|
||||
protected:
|
||||
void contextMenuEvent(QContextMenuEvent *p_event);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user