mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-06 06:19: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 ExportHTMLOption &p_opt,
|
||||||
const QString &p_filePath)
|
const QString &p_filePath)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(p_opt);
|
||||||
|
|
||||||
m_downloadState = QWebEngineDownloadItem::DownloadRequested;
|
m_downloadState = QWebEngineDownloadItem::DownloadRequested;
|
||||||
|
|
||||||
p_webViewer->page()->save(p_filePath, QWebEngineDownloadItem::MimeHtmlSaveFormat);
|
p_webViewer->page()->save(p_filePath, QWebEngineDownloadItem::MimeHtmlSaveFormat);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include <QWebChannel>
|
#include <QWebChannel>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
#include <QWebEngineProfile>
|
||||||
#include "vmdtab.h"
|
#include "vmdtab.h"
|
||||||
#include "vdocument.h"
|
#include "vdocument.h"
|
||||||
#include "vnote.h"
|
#include "vnote.h"
|
||||||
@ -383,10 +384,14 @@ void VMdTab::setupMarkdownViewer()
|
|||||||
m_webViewer = new VWebView(m_file, this);
|
m_webViewer = new VWebView(m_file, this);
|
||||||
connect(m_webViewer, &VWebView::editNote,
|
connect(m_webViewer, &VWebView::editNote,
|
||||||
this, &VMdTab::editFile);
|
this, &VMdTab::editFile);
|
||||||
|
connect(m_webViewer, &VWebView::requestSavePage,
|
||||||
|
this, &VMdTab::handleSavePageRequested);
|
||||||
|
|
||||||
VPreviewPage *page = new VPreviewPage(m_webViewer);
|
VPreviewPage *page = new VPreviewPage(m_webViewer);
|
||||||
m_webViewer->setPage(page);
|
m_webViewer->setPage(page);
|
||||||
m_webViewer->setZoomFactor(g_config->getWebZoomFactor());
|
m_webViewer->setZoomFactor(g_config->getWebZoomFactor());
|
||||||
|
connect(page->profile(), &QWebEngineProfile::downloadRequested,
|
||||||
|
this, &VMdTab::handleDownloadRequested);
|
||||||
|
|
||||||
// Avoid white flash before loading content.
|
// Avoid white flash before loading content.
|
||||||
page->setBackgroundColor(Qt::transparent);
|
page->setBackgroundColor(Qt::transparent);
|
||||||
@ -1199,3 +1204,56 @@ bool VMdTab::executeVimCommandInWebView(const QString &p_cmd)
|
|||||||
|
|
||||||
return validCommand;
|
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 VMdEditor;
|
||||||
class VInsertSelector;
|
class VInsertSelector;
|
||||||
class QTimer;
|
class QTimer;
|
||||||
|
class QWebEngineDownloadItem;
|
||||||
|
|
||||||
class VMdTab : public VEditTab
|
class VMdTab : public VEditTab
|
||||||
{
|
{
|
||||||
@ -132,6 +133,12 @@ private slots:
|
|||||||
// Restore from m_infoToRestore.
|
// Restore from m_infoToRestore.
|
||||||
void restoreFromTabInfo();
|
void restoreFromTabInfo();
|
||||||
|
|
||||||
|
// Handle download request from web page.
|
||||||
|
void handleDownloadRequested(QWebEngineDownloadItem *p_item);
|
||||||
|
|
||||||
|
// Handle save page request.
|
||||||
|
void handleSavePageRequested();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum TabReady { None = 0, ReadMode = 0x1, EditMode = 0x2 };
|
enum TabReady { None = 0, ReadMode = 0x1, EditMode = 0x2 };
|
||||||
|
|
||||||
|
@ -95,6 +95,13 @@ void VWebView::contextMenuEvent(QContextMenuEvent *p_event)
|
|||||||
defaultCopyImageAct->setVisible(false);
|
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.
|
// Add Copy All As menu.
|
||||||
initCopyAllAsMenu(menu);
|
initCopyAllAsMenu(menu);
|
||||||
|
|
||||||
|
@ -18,6 +18,8 @@ public:
|
|||||||
signals:
|
signals:
|
||||||
void editNote();
|
void editNote();
|
||||||
|
|
||||||
|
void requestSavePage();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void contextMenuEvent(QContextMenuEvent *p_event);
|
void contextMenuEvent(QContextMenuEvent *p_event);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user