add Edit to context menu in read mode to edit current note

This commit is contained in:
Le Tan 2017-04-20 22:46:49 +08:00
parent bcdfc90951
commit 022d3ae2f7
5 changed files with 83 additions and 9 deletions

View File

@ -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 \

View File

@ -1,6 +1,5 @@
#include <QtWidgets>
#include <QWebChannel>
#include <QWebEngineView>
#include <QFileInfo>
#include <QXmlStreamReader>
#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("<!-- EXTRA_PLACE_HOLDER -->");
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());

View File

@ -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<VFile> m_file;
bool isEditMode;
VEdit *m_textEditor;
QWebEngineView *webPreviewer;
VWebView *webPreviewer;
VDocument document;
MarkdownConverterType mdConverterType;
VToc tableOfContent;

39
src/vwebview.cpp Normal file
View File

@ -0,0 +1,39 @@
#include "vwebview.h"
#include <QMenu>
#include <QPoint>
#include <QContextMenuEvent>
#include <QWebEnginePage>
#include <QAction>
#include <QList>
#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<QAction *> 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();
}

27
src/vwebview.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef VWEBVIEW_H
#define VWEBVIEW_H
#include <QWebEngineView>
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