From 94c5934f2d81929a9d0aa6b4339d80c62f2d09c4 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Mon, 9 Oct 2017 19:38:35 +0800 Subject: [PATCH] bug-fix: do not change mode when clicking an item in VFileList to open an already opened note --- src/veditarea.cpp | 6 ++---- src/veditarea.h | 8 +++++++- src/vfilelist.cpp | 6 +++--- src/vfilelist.h | 10 ++++++++-- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/veditarea.cpp b/src/veditarea.cpp index 9465aa34..c92dcb32 100644 --- a/src/veditarea.cpp +++ b/src/veditarea.cpp @@ -119,9 +119,7 @@ void VEditArea::removeSplitWindow(VEditWindow *win) win->deleteLater(); } -// A given file can be opened in multiple split windows. A given file could be -// opened at most in one tab inside a window. -void VEditArea::openFile(VFile *p_file, OpenFileMode p_mode) +void VEditArea::openFile(VFile *p_file, OpenFileMode p_mode, bool p_forceMode) { if (!p_file) { return; @@ -169,7 +167,7 @@ void VEditArea::openFile(VFile *p_file, OpenFileMode p_mode) out: setCurrentTab(winIdx, tabIdx, setFocus); - if (existFile) { + if (existFile && p_forceMode) { if (p_mode == OpenFileMode::Read) { readFile(); } else if (p_mode == OpenFileMode::Edit) { diff --git a/src/veditarea.h b/src/veditarea.h index 32e6caf7..b8ee6824 100644 --- a/src/veditarea.h +++ b/src/veditarea.h @@ -79,7 +79,13 @@ protected: void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; public slots: - void openFile(VFile *p_file, OpenFileMode p_mode); + // Open @p_file in mode @p_mode. + // If @p_file has already been opened, change its mode to @p_mode only if + // @p_forceMode is true. + // A given file can be opened in multiple split windows. A given file could be + // opened at most in one tab inside a window. + void openFile(VFile *p_file, OpenFileMode p_mode, bool p_forceMode = false); + void editFile(); void saveFile(); void readFile(); diff --git a/src/vfilelist.cpp b/src/vfilelist.cpp index 162e0421..5629ad37 100644 --- a/src/vfilelist.cpp +++ b/src/vfilelist.cpp @@ -103,7 +103,7 @@ void VFileList::initActions() this, [this]() { QListWidgetItem *item = fileList->currentItem(); if (item) { - emit fileClicked(getVFile(item), OpenFileMode::Read); + emit fileClicked(getVFile(item), OpenFileMode::Read, true); } }); @@ -114,7 +114,7 @@ void VFileList::initActions() this, [this]() { QListWidgetItem *item = fileList->currentItem(); if (item) { - emit fileClicked(getVFile(item), OpenFileMode::Edit); + emit fileClicked(getVFile(item), OpenFileMode::Edit, true); } }); @@ -368,7 +368,7 @@ void VFileList::newFile() fileList->update(); // Open it in edit mode - emit fileCreated(file, OpenFileMode::Edit); + emit fileCreated(file, OpenFileMode::Edit, true); // Move cursor down if content has been inserted. if (contentInserted) { diff --git a/src/vfilelist.h b/src/vfilelist.h index 35d2761e..ac24d9eb 100644 --- a/src/vfilelist.h +++ b/src/vfilelist.h @@ -60,8 +60,14 @@ public slots: void newFile(); signals: - void fileClicked(VNoteFile *p_file, OpenFileMode mode = OpenFileMode::Read); - void fileCreated(VNoteFile *p_file, OpenFileMode mode = OpenFileMode::Read); + void fileClicked(VNoteFile *p_file, + OpenFileMode p_mode = OpenFileMode::Read, + bool p_forceMode = false); + + void fileCreated(VNoteFile *p_file, + OpenFileMode p_mode = OpenFileMode::Read, + bool p_forceMode = false); + void fileUpdated(const VNoteFile *p_file); private slots: