mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00

After hitting `Ctrl+D` or keeping pressing `Ctrl+Alt`, VNote will enter Vim normal pending mode. 1. Support <num>h,j,k,l to move cursor around; TODO: Design a finite state machine to handle more Vim commands elegantly. Signed-off-by: Le Tan <tamlokveer@gmail.com>
85 lines
1.6 KiB
C++
85 lines
1.6 KiB
C++
#include <QtWidgets>
|
|
#include <QVector>
|
|
#include "vedit.h"
|
|
#include "vnote.h"
|
|
#include "vconfigmanager.h"
|
|
#include "vtoc.h"
|
|
#include "utils/vutils.h"
|
|
#include "veditoperations.h"
|
|
|
|
extern VConfigManager vconfig;
|
|
|
|
VEdit::VEdit(VFile *p_file, QWidget *p_parent)
|
|
: QTextEdit(p_parent), m_file(p_file), m_editOps(NULL)
|
|
{
|
|
connect(document(), &QTextDocument::modificationChanged,
|
|
(VFile *)m_file, &VFile::setModified);
|
|
}
|
|
|
|
VEdit::~VEdit()
|
|
{
|
|
if (m_file) {
|
|
disconnect(document(), &QTextDocument::modificationChanged,
|
|
(VFile *)m_file, &VFile::setModified);
|
|
}
|
|
}
|
|
|
|
void VEdit::beginEdit()
|
|
{
|
|
setReadOnly(false);
|
|
setModified(false);
|
|
}
|
|
|
|
void VEdit::endEdit()
|
|
{
|
|
setReadOnly(true);
|
|
}
|
|
|
|
void VEdit::saveFile()
|
|
{
|
|
if (!document()->isModified()) {
|
|
return;
|
|
}
|
|
m_file->setContent(toHtml());
|
|
document()->setModified(false);
|
|
}
|
|
|
|
void VEdit::reloadFile()
|
|
{
|
|
setHtml(m_file->getContent());
|
|
setModified(false);
|
|
}
|
|
|
|
void VEdit::scrollToLine(int p_lineNumber)
|
|
{
|
|
Q_ASSERT(p_lineNumber >= 0);
|
|
|
|
// Move the cursor to the end first
|
|
moveCursor(QTextCursor::End);
|
|
QTextCursor cursor(document()->findBlockByLineNumber(p_lineNumber));
|
|
cursor.movePosition(QTextCursor::EndOfBlock);
|
|
setTextCursor(cursor);
|
|
|
|
setFocus();
|
|
}
|
|
|
|
bool VEdit::isModified() const
|
|
{
|
|
return document()->isModified();
|
|
}
|
|
|
|
void VEdit::setModified(bool p_modified)
|
|
{
|
|
document()->setModified(p_modified);
|
|
if (m_file) {
|
|
m_file->setModified(p_modified);
|
|
}
|
|
}
|
|
|
|
void VEdit::insertImage()
|
|
{
|
|
if (m_editOps) {
|
|
m_editOps->insertImage();
|
|
}
|
|
}
|