diff --git a/src/src.pro b/src/src.pro index 3812fc37..1912155b 100644 --- a/src/src.pro +++ b/src/src.pro @@ -22,7 +22,6 @@ SOURCES += main.cpp\ vfilelist.cpp \ dialog/vnewfiledialog.cpp \ vedit.cpp \ - veditor.cpp \ vnotefile.cpp \ vdocument.cpp \ utils/vutils.cpp \ @@ -41,7 +40,8 @@ SOURCES += main.cpp\ dialog/vinsertimagedialog.cpp \ vdownloader.cpp \ veditarea.cpp \ - veditwindow.cpp + veditwindow.cpp \ + vedittab.cpp HEADERS += vmainwindow.h \ vdirectorytree.h \ @@ -52,7 +52,6 @@ HEADERS += vmainwindow.h \ vfilelist.h \ dialog/vnewfiledialog.h \ vedit.h \ - veditor.h \ vconstants.h \ vnotefile.h \ vdocument.h \ @@ -73,7 +72,8 @@ HEADERS += vmainwindow.h \ dialog/vinsertimagedialog.h \ vdownloader.h \ veditarea.h \ - veditwindow.h + veditwindow.h \ + vedittab.h RESOURCES += \ vnote.qrc diff --git a/src/veditarea.cpp b/src/veditarea.cpp index 01d53e04..3c0a79d5 100644 --- a/src/veditarea.cpp +++ b/src/veditarea.cpp @@ -1,7 +1,7 @@ #include #include "veditarea.h" #include "veditwindow.h" -#include "veditor.h" +#include "vedittab.h" #include "vnote.h" #include "vconfigmanager.h" @@ -143,16 +143,16 @@ int VEditArea::openFileInWindow(int windowIndex, const QString ¬ebook, const void VEditArea::setCurrentTab(int windowIndex, int tabIndex, bool setFocus) { - setCurrentWindow(windowIndex, setFocus); - VEditWindow *win = getWindow(windowIndex); win->setCurrentIndex(tabIndex); + + setCurrentWindow(windowIndex, setFocus); } void VEditArea::setCurrentWindow(int windowIndex, bool setFocus) { if (curWindowIndex == windowIndex) { - return; + goto out; } qDebug() << "current window" << windowIndex; curWindowIndex = windowIndex; @@ -160,7 +160,13 @@ void VEditArea::setCurrentWindow(int windowIndex, bool setFocus) getWindow(windowIndex)->focusWindow(); } +out: // Update tab status + noticeTabStatus(); +} + +void VEditArea::noticeTabStatus() +{ QString notebook, relativePath; bool editMode, modifiable; getWindow(curWindowIndex)->getTabStatus(notebook, relativePath, editMode, modifiable); diff --git a/src/veditarea.h b/src/veditarea.h index 3c6cb6d2..0a6355aa 100644 --- a/src/veditarea.h +++ b/src/veditarea.h @@ -54,6 +54,7 @@ private: inline VEditWindow *getWindow(int windowIndex) const; void insertSplitWindow(int idx); void removeSplitWindow(VEditWindow *win); + void noticeTabStatus(); VNote *vnote; int curWindowIndex; diff --git a/src/veditor.cpp b/src/vedittab.cpp similarity index 90% rename from src/veditor.cpp rename to src/vedittab.cpp index 9850b342..190f3edb 100644 --- a/src/veditor.cpp +++ b/src/vedittab.cpp @@ -3,7 +3,7 @@ #include #include #include -#include "veditor.h" +#include "vedittab.h" #include "vedit.h" #include "vdocument.h" #include "vnote.h" @@ -16,13 +16,13 @@ extern VConfigManager vconfig; -VEditor::VEditor(const QString &path, bool modifiable, QWidget *parent) +VEditTab::VEditTab(const QString &path, bool modifiable, QWidget *parent) : QStackedWidget(parent), mdConverterType(vconfig.getMdConverterType()) { DocType docType = isMarkdown(path) ? DocType::Markdown : DocType::Html; QString basePath = QFileInfo(path).path(); QString fileName = QFileInfo(path).fileName(); - qDebug() << "VEditor basePath" << basePath << "file" << fileName; + qDebug() << "VEditTab basePath" << basePath << "file" << fileName; QString fileText = VUtils::readFileFromDisk(path); noteFile = new VNoteFile(basePath, fileName, fileText, docType, modifiable); @@ -34,17 +34,17 @@ VEditor::VEditor(const QString &path, bool modifiable, QWidget *parent) showFileReadMode(); connect(qApp, &QApplication::focusChanged, - this, &VEditor::handleFocusChanged); + this, &VEditTab::handleFocusChanged); } -VEditor::~VEditor() +VEditTab::~VEditTab() { if (noteFile) { delete noteFile; } } -void VEditor::setupUI() +void VEditTab::setupUI() { textEditor = new VEdit(noteFile); addWidget(textEditor); @@ -67,7 +67,7 @@ void VEditor::setupUI() } } -bool VEditor::isMarkdown(const QString &name) +bool VEditTab::isMarkdown(const QString &name) { const QVector mdPostfix({"md", "markdown", "mkd"}); @@ -84,7 +84,7 @@ bool VEditor::isMarkdown(const QString &name) return false; } -void VEditor::showFileReadMode() +void VEditTab::showFileReadMode() { isEditMode = false; switch (noteFile->docType) { @@ -107,7 +107,7 @@ void VEditor::showFileReadMode() } } -void VEditor::previewByConverter() +void VEditTab::previewByConverter() { VMarkdownConverter mdConverter; QString content = noteFile->content; @@ -119,7 +119,7 @@ void VEditor::previewByConverter() webPreviewer->setHtml(completeHtml, QUrl::fromLocalFile(noteFile->basePath + QDir::separator())); } -void VEditor::showFileEditMode() +void VEditTab::showFileEditMode() { isEditMode = true; textEditor->beginEdit(); @@ -127,13 +127,13 @@ void VEditor::showFileEditMode() textEditor->setFocus(); } -bool VEditor::requestClose() +bool VEditTab::requestClose() { readFile(); return !isEditMode; } -void VEditor::editFile() +void VEditTab::editFile() { if (isEditMode || !noteFile->modifiable) { return; @@ -142,7 +142,7 @@ void VEditor::editFile() showFileEditMode(); } -void VEditor::readFile() +void VEditTab::readFile() { if (!isEditMode) { return; @@ -176,7 +176,7 @@ void VEditor::readFile() showFileReadMode(); } -bool VEditor::saveFile() +bool VEditTab::saveFile() { if (!isEditMode || !noteFile->modifiable || !textEditor->isModified()) { return true; @@ -207,7 +207,7 @@ bool VEditor::saveFile() return true; } -void VEditor::setupMarkdownPreview() +void VEditTab::setupMarkdownPreview() { webPreviewer = new QWebEngineView(this); VPreviewPage *page = new VPreviewPage(this); @@ -224,12 +224,12 @@ void VEditor::setupMarkdownPreview() addWidget(webPreviewer); } -void VEditor::focusTab() +void VEditTab::focusTab() { currentWidget()->setFocus(); } -void VEditor::handleFocusChanged(QWidget *old, QWidget *now) +void VEditTab::handleFocusChanged(QWidget *old, QWidget *now) { if (isChild(now)) { emit getFocused(); diff --git a/src/veditor.h b/src/vedittab.h similarity index 80% rename from src/veditor.h rename to src/vedittab.h index f0bbd248..61b758ee 100644 --- a/src/veditor.h +++ b/src/vedittab.h @@ -1,5 +1,5 @@ -#ifndef VEDITOR_H -#define VEDITOR_H +#ifndef VEDITTAB_H +#define VEDITTAB_H #include #include @@ -14,12 +14,12 @@ class QTextBrowser; class QWebEngineView; class VNote; -class VEditor : public QStackedWidget +class VEditTab : public QStackedWidget { Q_OBJECT public: - VEditor(const QString &path, bool modifiable, QWidget *parent = 0); - ~VEditor(); + VEditTab(const QString &path, bool modifiable, QWidget *parent = 0); + ~VEditTab(); bool requestClose(); // Enter edit mode void editFile(); @@ -56,17 +56,17 @@ private: MarkdownConverterType mdConverterType; }; -inline bool VEditor::getIsEditMode() const +inline bool VEditTab::getIsEditMode() const { return isEditMode; } -inline bool VEditor::isModified() const +inline bool VEditTab::isModified() const { return textEditor->isModified(); } -inline bool VEditor::isChild(QObject *obj) +inline bool VEditTab::isChild(QObject *obj) { while (obj) { if (obj == this) { @@ -77,4 +77,4 @@ inline bool VEditor::isChild(QObject *obj) return false; } -#endif // VEDITOR_H +#endif // VEDITTAB_H diff --git a/src/veditwindow.cpp b/src/veditwindow.cpp index d2a539e9..d9e1e83c 100644 --- a/src/veditwindow.cpp +++ b/src/veditwindow.cpp @@ -1,7 +1,7 @@ #include #include #include "veditwindow.h" -#include "veditor.h" +#include "vedittab.h" #include "vnote.h" #include "vconfigmanager.h" @@ -107,6 +107,7 @@ out: editFile(); } focusWindow(); + noticeTabStatus(idx); return idx; } @@ -119,7 +120,7 @@ void VEditWindow::closeFile(const QString ¬ebook, const QString &relativePath } // Do not check if modified - VEditor *editor = getTab(idx); + VEditTab *editor = getTab(idx); Q_ASSERT(editor); removeTab(idx); delete editor; @@ -149,9 +150,9 @@ int VEditWindow::openFileInTab(const QString ¬ebook, const QString &relativeP } } - VEditor *editor = new VEditor(QDir::cleanPath(QDir(rootPath).filePath(relativePath)), - modifiable); - connect(editor, &VEditor::getFocused, + VEditTab *editor = new VEditTab(QDir::cleanPath(QDir(rootPath).filePath(relativePath)), + modifiable); + connect(editor, &VEditTab::getFocused, this, &VEditWindow::getFocused); QJsonObject tabJson; @@ -178,7 +179,7 @@ int VEditWindow::findTabByFile(const QString ¬ebook, const QString &relativeP bool VEditWindow::handleTabCloseRequest(int index) { qDebug() << "request closing tab" << index; - VEditor *editor = getTab(index); + VEditTab *editor = getTab(index); Q_ASSERT(editor); bool ok = editor->requestClose(); if (ok) { @@ -194,7 +195,7 @@ bool VEditWindow::handleTabCloseRequest(int index) void VEditWindow::readFile() { - VEditor *editor = getTab(currentIndex()); + VEditTab *editor = getTab(currentIndex()); Q_ASSERT(editor); editor->readFile(); noticeTabStatus(currentIndex()); @@ -209,7 +210,7 @@ void VEditWindow::saveAndReadFile() void VEditWindow::editFile() { - VEditor *editor = getTab(currentIndex()); + VEditTab *editor = getTab(currentIndex()); Q_ASSERT(editor); editor->editFile(); noticeTabStatus(currentIndex()); @@ -217,7 +218,7 @@ void VEditWindow::editFile() void VEditWindow::saveFile() { - VEditor *editor = getTab(currentIndex()); + VEditTab *editor = getTab(currentIndex()); Q_ASSERT(editor); editor->saveFile(); } @@ -248,7 +249,7 @@ void VEditWindow::noticeTabStatus(int index) QString notebook = tabJson["notebook"].toString(); QString relativePath = tabJson["relative_path"].toString(); - VEditor *editor = getTab(index); + VEditTab *editor = getTab(index); bool editMode = editor->getIsEditMode(); bool modifiable = tabJson["modifiable"].toBool(); @@ -270,7 +271,7 @@ void VEditWindow::getTabStatus(QString ¬ebook, QString &relativePath, Q_ASSERT(!tabJson.isEmpty()); notebook = tabJson["notebook"].toString(); relativePath = tabJson["relative_path"].toString(); - VEditor *editor = getTab(idx); + VEditTab *editor = getTab(idx); editMode = editor->getIsEditMode(); modifiable = tabJson["modifiable"].toBool(); } diff --git a/src/veditwindow.h b/src/veditwindow.h index e34ae9fc..2d3ecdf8 100644 --- a/src/veditwindow.h +++ b/src/veditwindow.h @@ -7,7 +7,7 @@ #include #include #include "vnotebook.h" -#include "veditor.h" +#include "vedittab.h" class VNote; class QPushButton; @@ -60,7 +60,7 @@ private: int appendTabWithData(QWidget *page, const QJsonObject &tabData); int openFileInTab(const QString ¬ebook, const QString &relativePath, bool modifiable); inline QString getFileName(const QString &relativePath) const; - inline VEditor *getTab(int tabIndex) const; + inline VEditTab *getTab(int tabIndex) const; void noticeTabStatus(int index); VNote *vnote; @@ -77,9 +77,9 @@ inline QString VEditWindow::getFileName(const QString &path) const return QFileInfo(QDir::cleanPath(path)).fileName(); } -inline VEditor* VEditWindow::getTab(int tabIndex) const +inline VEditTab* VEditWindow::getTab(int tabIndex) const { - return dynamic_cast(widget(tabIndex)); + return dynamic_cast(widget(tabIndex)); } #endif // VEDITWINDOW_H