diff --git a/src/dialog/vsettingsdialog.cpp b/src/dialog/vsettingsdialog.cpp index 11b37a7f..84e01104 100644 --- a/src/dialog/vsettingsdialog.cpp +++ b/src/dialog/vsettingsdialog.cpp @@ -234,8 +234,18 @@ VReadEditTab::VReadEditTab(QWidget *p_parent) zoomFactorLayout->addWidget(m_customWebZoom); zoomFactorLayout->addWidget(m_webZoomFactorSpin); + // Default note open mode. + m_openModeCombo = new QComboBox(); + m_openModeCombo->setToolTip(tr("Default mode to open a note")); + m_openModeCombo->addItem(tr("Read Mode"), (int)OpenFileMode::Read); + m_openModeCombo->addItem(tr("Edit Mode"), (int)OpenFileMode::Edit); + + QLabel *openModeLabel = new QLabel(tr("Note open mode:")); + openModeLabel->setToolTip(m_openModeCombo->toolTip()); + QFormLayout *readLayout = new QFormLayout(); readLayout->addRow(zoomFactorLayout); + readLayout->addRow(openModeLabel, m_openModeCombo); m_readBox->setLayout(readLayout); @@ -251,6 +261,11 @@ bool VReadEditTab::loadConfiguration() if (!loadWebZoomFactor()) { return false; } + + if (!loadOpenMode()) { + return false; + } + return true; } @@ -259,6 +274,11 @@ bool VReadEditTab::saveConfiguration() if (!saveWebZoomFactor()) { return false; } + + if (!saveOpenMode()) { + return false; + } + return true; } @@ -295,6 +315,29 @@ void VReadEditTab::customWebZoomChanged(int p_state) m_webZoomFactorSpin->setEnabled(p_state == Qt::Checked); } +bool VReadEditTab::loadOpenMode() +{ + int mode = (int)g_config->getNoteOpenMode(); + bool found = false; + for (int i = 0; i < m_openModeCombo->count(); ++i) { + if (m_openModeCombo->itemData(i).toInt() == mode) { + m_openModeCombo->setCurrentIndex(i); + found = true; + break; + } + } + + Q_ASSERT(found); + return true; +} + +bool VReadEditTab::saveOpenMode() +{ + int mode = m_openModeCombo->currentData().toInt(); + g_config->setNoteOpenMode((OpenFileMode)mode); + return true; +} + VNoteManagementTab::VNoteManagementTab(QWidget *p_parent) : QWidget(p_parent) { diff --git a/src/dialog/vsettingsdialog.h b/src/dialog/vsettingsdialog.h index 83536e21..ed245285 100644 --- a/src/dialog/vsettingsdialog.h +++ b/src/dialog/vsettingsdialog.h @@ -52,12 +52,18 @@ public: QCheckBox *m_customWebZoom; QDoubleSpinBox *m_webZoomFactorSpin; + // Default note open mode for markdown. + QComboBox *m_openModeCombo; + private slots: void customWebZoomChanged(int p_state); private: bool loadWebZoomFactor(); bool saveWebZoomFactor(); + + bool loadOpenMode(); + bool saveOpenMode(); }; class VNoteManagementTab : public QWidget diff --git a/src/resources/vnote.ini b/src/resources/vnote.ini index 6ad2411b..b032ab4d 100644 --- a/src/resources/vnote.ini +++ b/src/resources/vnote.ini @@ -79,6 +79,10 @@ line_distance_height=3 ; Whether insert the note name as a title when creating a new note insert_title_from_note_name=true +; Default open mode when opening a note +; 0 - Read, 1 - Edit +note_open_mode=0 + [session] tools_dock_checked=true diff --git a/src/vconfigmanager.cpp b/src/vconfigmanager.cpp index 61227698..20d21af5 100644 --- a/src/vconfigmanager.cpp +++ b/src/vconfigmanager.cpp @@ -166,6 +166,14 @@ void VConfigManager::initialize() m_insertTitleFromNoteName = getConfigFromSettings("global", "insert_title_from_note_name").toBool(); + + int openMode = getConfigFromSettings("global", + "note_open_mode").toInt(); + if (openMode == 1) { + m_noteOpenMode = OpenFileMode::Edit; + } else { + m_noteOpenMode = OpenFileMode::Read; + } } void VConfigManager::readPredefinedColorsFromSettings() diff --git a/src/vconfigmanager.h b/src/vconfigmanager.h index 1722cbee..6040551c 100644 --- a/src/vconfigmanager.h +++ b/src/vconfigmanager.h @@ -10,6 +10,7 @@ #include "vnotebook.h" #include "hgmarkdownhighlighter.h" #include "vmarkdownconverter.h" +#include "vconstants.h" class QJsonObject; class QString; @@ -228,6 +229,9 @@ public: bool getInsertTitleFromNoteName() const; void setInsertTitleFromNoteName(bool p_enabled); + OpenFileMode getNoteOpenMode() const; + void setNoteOpenMode(OpenFileMode p_mode); + // Return the configured key sequence of @p_operation. // Return empty if there is no corresponding config. QString getShortcutKeySequence(const QString &p_operation) const; @@ -462,6 +466,9 @@ private: // Whether insert the note name as a title when creating a new note. bool m_insertTitleFromNoteName; + // Default mode when opening a note. + OpenFileMode m_noteOpenMode; + // The name of the config file in each directory, obsolete. // Use c_dirConfigFile instead. static const QString c_obsoleteDirConfigFile; @@ -1181,4 +1188,20 @@ inline void VConfigManager::setInsertTitleFromNoteName(bool p_enabled) m_insertTitleFromNoteName); } +inline OpenFileMode VConfigManager::getNoteOpenMode() const +{ + return m_noteOpenMode; +} + +inline void VConfigManager::setNoteOpenMode(OpenFileMode p_mode) +{ + if (m_noteOpenMode == p_mode) { + return; + } + + m_noteOpenMode = p_mode; + setConfigToSettings("global", "note_open_mode", + m_noteOpenMode == OpenFileMode::Read ? 0 : 1); +} + #endif // VCONFIGMANAGER_H diff --git a/src/vfilelist.cpp b/src/vfilelist.cpp index d7edbea7..c90c3600 100644 --- a/src/vfilelist.cpp +++ b/src/vfilelist.cpp @@ -456,7 +456,7 @@ void VFileList::handleItemClicked(QListWidgetItem *currentItem) // Qt seems not to update the QListWidget correctly. Manually force it to repaint. fileList->update(); - emit fileClicked(getVFile(currentItem), OpenFileMode::Read); + emit fileClicked(getVFile(currentItem), g_config->getNoteOpenMode()); } bool VFileList::importFile(const QString &p_srcFilePath)