From 6ea5995c12e82996a3f0dbad1d368f25708d31b2 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Mon, 31 Jan 2022 09:15:13 +0800 Subject: [PATCH] NewNoteDialog: remember default file type --- src/core/buffer/filetypehelper.cpp | 4 +++- src/core/widgetconfig.cpp | 13 +++++++++++++ src/core/widgetconfig.h | 5 +++++ src/data/core/vnotex.json | 3 ++- src/widgets/dialogs/newnotedialog.cpp | 15 ++++++++++++++- src/widgets/dialogs/nodeinfowidget.cpp | 13 +++++++++++++ src/widgets/dialogs/nodeinfowidget.h | 3 +++ 7 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/core/buffer/filetypehelper.cpp b/src/core/buffer/filetypehelper.cpp index 7be0e748..75073a93 100644 --- a/src/core/buffer/filetypehelper.cpp +++ b/src/core/buffer/filetypehelper.cpp @@ -132,7 +132,9 @@ const QVector &FileTypeHelper::getAllFileTypes() const const FileType &FileTypeHelper::getFileType(int p_type) const { - Q_ASSERT(p_type < m_fileTypes.size()); + if (p_type >= m_fileTypes.size()) { + p_type = FileType::Others; + } return m_fileTypes[p_type]; } diff --git a/src/core/widgetconfig.cpp b/src/core/widgetconfig.cpp index 3a85d107..6bc6383c 100644 --- a/src/core/widgetconfig.cpp +++ b/src/core/widgetconfig.cpp @@ -44,6 +44,8 @@ void WidgetConfig::init(const QJsonObject &p_app, m_snippetPanelBuiltInSnippetsVisible = READBOOL(QStringLiteral("snippet_panel_builtin_snippets_visible")); m_tagExplorerTwoColumnsEnabled = READBOOL(QStringLiteral("tag_explorer_two_columns_enabled")); + + m_newNoteDefaultFileType = READINT(QStringLiteral("new_note_default_file_type")); } QJsonObject WidgetConfig::toJson() const @@ -65,6 +67,7 @@ QJsonObject WidgetConfig::toJson() const writeStringList(obj, QStringLiteral("main_window_keep_docks_expanding_content_area"), m_mainWindowKeepDocksExpandingContentArea); + obj[QStringLiteral("new_note_default_file_type")] = m_newNoteDefaultFileType; return obj; } @@ -187,3 +190,13 @@ void WidgetConfig::setTagExplorerTwoColumnsEnabled(bool p_enabled) { updateConfig(m_tagExplorerTwoColumnsEnabled, p_enabled, this); } + +int WidgetConfig::getNewNoteDefaultFileType() const +{ + return m_newNoteDefaultFileType; +} + +void WidgetConfig::setNewNoteDefaultFileType(int p_type) +{ + updateConfig(m_newNoteDefaultFileType, p_type, this); +} diff --git a/src/core/widgetconfig.h b/src/core/widgetconfig.h index 53464a9e..62a066db 100644 --- a/src/core/widgetconfig.h +++ b/src/core/widgetconfig.h @@ -54,6 +54,9 @@ namespace vnotex bool getTagExplorerTwoColumnsEnabled() const; void setTagExplorerTwoColumnsEnabled(bool p_enabled); + int getNewNoteDefaultFileType() const; + void setNewNoteDefaultFileType(int p_type); + private: int m_outlineAutoExpandedLevel = 6; @@ -80,6 +83,8 @@ namespace vnotex // Whether enable two columns for tag explorer. bool m_tagExplorerTwoColumnsEnabled = false; + + int m_newNoteDefaultFileType = 0; }; } diff --git a/src/data/core/vnotex.json b/src/data/core/vnotex.json index 7c47211f..b64c3ef0 100644 --- a/src/data/core/vnotex.json +++ b/src/data/core/vnotex.json @@ -417,6 +417,7 @@ "//comment" : "Docks to ignore when expanding content area of main window", "main_window_keep_docks_expanding_content_area": ["OutlineDock.vnotex"], "snippet_panel_builtin_snippets_visible" : true, - "tag_explorer_two_columns_enabled" : true + "tag_explorer_two_columns_enabled" : true, + "new_note_default_file_type" : 0 } } diff --git a/src/widgets/dialogs/newnotedialog.cpp b/src/widgets/dialogs/newnotedialog.cpp index 673e75b9..0d5b36dc 100644 --- a/src/widgets/dialogs/newnotedialog.cpp +++ b/src/widgets/dialogs/newnotedialog.cpp @@ -16,7 +16,10 @@ #include "nodeinfowidget.h" #include #include +#include +#include #include +#include using namespace vnotex; @@ -105,6 +108,11 @@ void NewNoteDialog::acceptedButtonClicked() { s_lastTemplate = m_templateComboBox->currentData().toString(); + { + auto fileType = FileTypeHelper::getInst().getFileTypeByName(m_infoWidget->getFileType()).m_type; + ConfigMgr::getInst().getWidgetConfig().setNewNoteDefaultFileType(static_cast(fileType)); + } + if (validateInputs() && newNote()) { accept(); } @@ -143,10 +151,15 @@ const QSharedPointer &NewNoteDialog::getNewNode() const void NewNoteDialog::initDefaultValues(const Node *p_node) { { + int defaultType = ConfigMgr::getInst().getWidgetConfig().getNewNoteDefaultFileType(); + const auto &fileType = FileTypeHelper::getInst().getFileType(defaultType); + + m_infoWidget->setFileType(fileType.m_typeName); + auto lineEdit = m_infoWidget->getNameLineEdit(); auto defaultName = FileUtils::generateFileNameWithSequence(p_node->fetchAbsolutePath(), tr("note"), - QStringLiteral("md")); + fileType.preferredSuffix()); lineEdit->setText(defaultName); WidgetUtils::selectBaseName(lineEdit); } diff --git a/src/widgets/dialogs/nodeinfowidget.cpp b/src/widgets/dialogs/nodeinfowidget.cpp index 2c0a8efb..2eb781cf 100644 --- a/src/widgets/dialogs/nodeinfowidget.cpp +++ b/src/widgets/dialogs/nodeinfowidget.cpp @@ -197,3 +197,16 @@ QFormLayout *NodeInfoWidget::getMainLayout() const { return m_mainLayout; } + +QString NodeInfoWidget::getFileType() const +{ + return m_fileTypeComboBox->currentData().toString(); +} + +void NodeInfoWidget::setFileType(const QString &p_typeName) +{ + int idx = m_fileTypeComboBox->findData(p_typeName); + if (idx != -1) { + m_fileTypeComboBox->setCurrentIndex(idx); + } +} diff --git a/src/widgets/dialogs/nodeinfowidget.h b/src/widgets/dialogs/nodeinfowidget.h index 81f4d803..35cd02db 100644 --- a/src/widgets/dialogs/nodeinfowidget.h +++ b/src/widgets/dialogs/nodeinfowidget.h @@ -39,6 +39,9 @@ namespace vnotex // Allow upper level to add more widgets to the layout. QFormLayout *getMainLayout() const; + QString getFileType() const; + void setFileType(const QString &p_typeName); + signals: void inputEdited();