From 022d3ae2f74c363d038d7164ec0085376bb439c5 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Thu, 20 Apr 2017 22:46:49 +0800 Subject: [PATCH] add Edit to context menu in read mode to edit current note --- src/src.pro | 6 ++++-- src/vedittab.cpp | 10 +++++++--- src/vedittab.h | 10 ++++++---- src/vwebview.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/vwebview.h | 27 +++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 src/vwebview.cpp create mode 100644 src/vwebview.h diff --git a/src/src.pro b/src/src.pro index 21651d65..44f625f5 100644 --- a/src/src.pro +++ b/src/src.pro @@ -59,7 +59,8 @@ SOURCES += main.cpp\ vcaptain.cpp \ vopenedlistmenu.cpp \ vorphanfile.cpp \ - vcodeblockhighlighthelper.cpp + vcodeblockhighlighthelper.cpp \ + vwebview.cpp HEADERS += vmainwindow.h \ vdirectorytree.h \ @@ -105,7 +106,8 @@ HEADERS += vmainwindow.h \ vopenedlistmenu.h \ vnavigationmode.h \ vorphanfile.h \ - vcodeblockhighlighthelper.h + vcodeblockhighlighthelper.h \ + vwebview.h RESOURCES += \ vnote.qrc \ diff --git a/src/vedittab.cpp b/src/vedittab.cpp index a1e765d7..ab67df1d 100644 --- a/src/vedittab.cpp +++ b/src/vedittab.cpp @@ -1,6 +1,5 @@ #include #include -#include #include #include #include "vedittab.h" @@ -18,11 +17,13 @@ #include "dialog/vfindreplacedialog.h" #include "veditarea.h" #include "vconstants.h" +#include "vwebview.h" extern VConfigManager vconfig; VEditTab::VEditTab(VFile *p_file, OpenFileMode p_mode, QWidget *p_parent) - : QStackedWidget(p_parent), m_file(p_file), isEditMode(false), document(p_file, this), + : QStackedWidget(p_parent), m_file(p_file), isEditMode(false), + webPreviewer(NULL), document(p_file, this), mdConverterType(vconfig.getMdConverterType()), m_fileModified(false), m_editArea(NULL) { @@ -273,7 +274,10 @@ void VEditTab::setupMarkdownPreview() const QString jsHolder("JS_PLACE_HOLDER"); const QString extraHolder(""); - webPreviewer = new QWebEngineView(this); + webPreviewer = new VWebView(m_file, this); + connect(webPreviewer, &VWebView::editNote, + this, &VEditTab::editFile); + VPreviewPage *page = new VPreviewPage(this); webPreviewer->setPage(page); webPreviewer->setZoomFactor(vconfig.getWebZoomFactor()); diff --git a/src/vedittab.h b/src/vedittab.h index 70221e04..ade2496b 100644 --- a/src/vedittab.h +++ b/src/vedittab.h @@ -12,7 +12,7 @@ #include "vtoc.h" #include "vfile.h" -class QWebEngineView; +class VWebView; class VNote; class QXmlStreamReader; class VEditArea; @@ -25,8 +25,6 @@ public: ~VEditTab(); void init(VEditArea *p_editArea); bool closeFile(bool p_forced); - // Enter edit mode - void editFile(); // Enter read mode void readFile(); // Save file @@ -51,6 +49,10 @@ public: QString getSelectedText() const; void clearSearchedWordHighlight(); +public slots: + // Enter edit mode + void editFile(); + protected: void wheelEvent(QWheelEvent *p_event) Q_DECL_OVERRIDE; @@ -91,7 +93,7 @@ private: QPointer m_file; bool isEditMode; VEdit *m_textEditor; - QWebEngineView *webPreviewer; + VWebView *webPreviewer; VDocument document; MarkdownConverterType mdConverterType; VToc tableOfContent; diff --git a/src/vwebview.cpp b/src/vwebview.cpp new file mode 100644 index 00000000..dbdfa617 --- /dev/null +++ b/src/vwebview.cpp @@ -0,0 +1,39 @@ +#include "vwebview.h" + +#include +#include +#include +#include +#include +#include +#include "vfile.h" + +VWebView::VWebView(VFile *p_file, QWidget *p_parent) + : QWebEngineView(p_parent), m_file(p_file) +{ +} + +void VWebView::contextMenuEvent(QContextMenuEvent *p_event) +{ + QMenu *menu = page()->createStandardContextMenu(); + menu->setToolTipsVisible(true); + const QList actions = menu->actions(); + + QAction *editAction = new QAction(QIcon(":/resources/icons/edit_note.svg"), + tr("&Edit"), this); + editAction->setToolTip(tr("Edit current note")); + connect(editAction, &QAction::triggered, + this, &VWebView::handleEditAction); + if (!m_file->isModifiable()) { + editAction->setEnabled(false); + } + menu->insertAction(actions.isEmpty() ? NULL : actions[0], editAction); + + connect(menu, &QMenu::aboutToHide, menu, &QObject::deleteLater); + menu->popup(p_event->globalPos()); +} + +void VWebView::handleEditAction() +{ + emit editNote(); +} diff --git a/src/vwebview.h b/src/vwebview.h new file mode 100644 index 00000000..4d65a59d --- /dev/null +++ b/src/vwebview.h @@ -0,0 +1,27 @@ +#ifndef VWEBVIEW_H +#define VWEBVIEW_H + +#include + +class VFile; + +class VWebView : public QWebEngineView +{ + Q_OBJECT +public: + explicit VWebView(VFile *p_file, QWidget *p_parent = Q_NULLPTR); + +signals: + void editNote(); + +protected: + void contextMenuEvent(QContextMenuEvent *p_event); + +private slots: + void handleEditAction(); + +private: + VFile *m_file; +}; + +#endif // VWEBVIEW_H