|
@@ -1,154 +1,64 @@
|
|
|
#include <QtWidgets>
|
|
#include <QtWidgets>
|
|
|
#include "vedit.h"
|
|
#include "vedit.h"
|
|
|
|
|
|
|
|
-VEdit::VEdit(const QString &path, const QString &name, bool modifiable,
|
|
|
|
|
- QWidget *parent)
|
|
|
|
|
- : QTextEdit(parent), path(path), name(name), modifiable(modifiable)
|
|
|
|
|
|
|
+VEdit::VEdit(VNoteFile *noteFile, QWidget *parent)
|
|
|
|
|
+ : QTextEdit(parent), noteFile(noteFile)
|
|
|
{
|
|
{
|
|
|
- docType = isMarkdown() ? DocType::Markdown : DocType::Html;
|
|
|
|
|
- fileText = readFileFromDisk(QDir(path).filePath(name));
|
|
|
|
|
- showFileReadMode();
|
|
|
|
|
- fileLoaded = true;
|
|
|
|
|
- qDebug() << "VEdit:" << name << (docType == DocType::Markdown ? "Markdown" : "Html");
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void VEdit::showFileReadMode()
|
|
|
|
|
-{
|
|
|
|
|
- setReadOnly(true);
|
|
|
|
|
- switch (docType) {
|
|
|
|
|
- case DocType::Html:
|
|
|
|
|
- if (!fileLoaded) {
|
|
|
|
|
- setHtml(fileText);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case DocType::Markdown:
|
|
|
|
|
- setText(fileText);
|
|
|
|
|
- break;
|
|
|
|
|
- default:
|
|
|
|
|
- qWarning() << "error: unknown doc type" << int(docType);
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-void VEdit::showFileEditMode()
|
|
|
|
|
|
|
+void VEdit::beginEdit()
|
|
|
{
|
|
{
|
|
|
setReadOnly(false);
|
|
setReadOnly(false);
|
|
|
- switch (docType) {
|
|
|
|
|
|
|
+ switch (noteFile->docType) {
|
|
|
case DocType::Html:
|
|
case DocType::Html:
|
|
|
- if (!fileLoaded) {
|
|
|
|
|
- setHtml(fileText);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ setHtml(noteFile->content);
|
|
|
break;
|
|
break;
|
|
|
case DocType::Markdown:
|
|
case DocType::Markdown:
|
|
|
- setText(fileText);
|
|
|
|
|
|
|
+ setPlainText(noteFile->content);
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
- qWarning() << "error: unknown doc type" << int(docType);
|
|
|
|
|
|
|
+ qWarning() << "error: unknown doc type" << int(noteFile->docType);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-QString VEdit::readFileFromDisk(const QString &filePath)
|
|
|
|
|
|
|
+bool VEdit::tryEndEdit()
|
|
|
{
|
|
{
|
|
|
- QFile file(filePath);
|
|
|
|
|
- if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
|
|
|
- qWarning() << "error: fail to read file" << filePath;
|
|
|
|
|
- return QString();
|
|
|
|
|
- }
|
|
|
|
|
- QString fileText(file.readAll());
|
|
|
|
|
- file.close();
|
|
|
|
|
- qDebug() << "read file content:" << filePath;
|
|
|
|
|
- return fileText;
|
|
|
|
|
|
|
+ return !document()->isModified();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool VEdit::writeFileToDisk(const QString &filePath, const QString &text)
|
|
|
|
|
|
|
+void VEdit::beginSave()
|
|
|
{
|
|
{
|
|
|
- QFile file(filePath);
|
|
|
|
|
- if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
|
|
|
|
- qWarning() << "error: fail to open file" << filePath << "to write to";
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
- QTextStream stream(&file);
|
|
|
|
|
- stream << text;
|
|
|
|
|
- file.close();
|
|
|
|
|
- qDebug() << "write file content:" << filePath;
|
|
|
|
|
- return true;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-bool VEdit::requestClose()
|
|
|
|
|
-{
|
|
|
|
|
- readFile();
|
|
|
|
|
- return isReadOnly();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-void VEdit::editFile()
|
|
|
|
|
-{
|
|
|
|
|
- if (!modifiable || !isReadOnly()) {
|
|
|
|
|
|
|
+ if (!document()->isModified()) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
- showFileEditMode();
|
|
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
-void VEdit::readFile()
|
|
|
|
|
-{
|
|
|
|
|
- if (isReadOnly()) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- if (document()->isModified()) {
|
|
|
|
|
- QMessageBox msgBox(QMessageBox::Information, tr("Exit edit mode"),
|
|
|
|
|
- QString("Note has been changed. Do you want to save it before exit?"));
|
|
|
|
|
- msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::No | QMessageBox::Cancel);
|
|
|
|
|
- msgBox.setDefaultButton(QMessageBox::Save);
|
|
|
|
|
- int ret = msgBox.exec();
|
|
|
|
|
- switch (ret) {
|
|
|
|
|
- case QMessageBox::Save:
|
|
|
|
|
- saveFile();
|
|
|
|
|
- // Fall through
|
|
|
|
|
- case QMessageBox::No:
|
|
|
|
|
- showFileReadMode();
|
|
|
|
|
- break;
|
|
|
|
|
- case QMessageBox::Cancel:
|
|
|
|
|
- break;
|
|
|
|
|
- default:
|
|
|
|
|
- qWarning() << "error: wrong return value from QMessageBox:" << ret;
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- showFileReadMode();
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-void VEdit::saveFile()
|
|
|
|
|
-{
|
|
|
|
|
- if (!modifiable || !document()->isModified()) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- switch (docType) {
|
|
|
|
|
|
|
+ switch (noteFile->docType) {
|
|
|
case DocType::Html:
|
|
case DocType::Html:
|
|
|
- fileText = toHtml();
|
|
|
|
|
- writeFileToDisk(QDir(path).filePath(name), fileText);
|
|
|
|
|
|
|
+ noteFile->content = toHtml();
|
|
|
break;
|
|
break;
|
|
|
case DocType::Markdown:
|
|
case DocType::Markdown:
|
|
|
|
|
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
- qWarning() << "error: unknown doc type" << int(docType);
|
|
|
|
|
|
|
+ qWarning() << "error: unknown doc type" << int(noteFile->docType);
|
|
|
}
|
|
}
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
|
|
+void VEdit::endSave()
|
|
|
|
|
+{
|
|
|
document()->setModified(false);
|
|
document()->setModified(false);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool VEdit::isMarkdown()
|
|
|
|
|
|
|
+void VEdit::reloadFile()
|
|
|
{
|
|
{
|
|
|
- const QVector<QString> mdPostfix({"md", "markdown", "mkd"});
|
|
|
|
|
-
|
|
|
|
|
- QStringList list = name.split('.', QString::SkipEmptyParts);
|
|
|
|
|
- if (list.isEmpty()) {
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
- const QString &postfix = list.last();
|
|
|
|
|
- for (int i = 0; i < mdPostfix.size(); ++i) {
|
|
|
|
|
- if (postfix == mdPostfix[i]) {
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ switch (noteFile->docType) {
|
|
|
|
|
+ case DocType::Html:
|
|
|
|
|
+ setHtml(noteFile->content);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case DocType::Markdown:
|
|
|
|
|
+ setPlainText(noteFile->content);
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ qWarning() << "error: unknown doc type" << int(noteFile->docType);
|
|
|
}
|
|
}
|
|
|
- return false;
|
|
|
|
|
}
|
|
}
|