| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500 |
- #include "vconfigmanager.h"
- #include <QDir>
- #include <QFile>
- #include <QString>
- #include <QJsonArray>
- #include <QJsonObject>
- #include <QJsonDocument>
- #include <QtDebug>
- #include <QTextEdit>
- #include <QStandardPaths>
- #include <QCoreApplication>
- #include "utils/vutils.h"
- #include "vstyleparser.h"
- #include "vpalette.h"
- const QString VConfigManager::orgName = QString("vnote");
- const QString VConfigManager::appName = QString("vnote");
- const QString VConfigManager::c_version = QString("1.11.1");
- const QString VConfigManager::c_obsoleteDirConfigFile = QString(".vnote.json");
- const QString VConfigManager::c_dirConfigFile = QString("_vnote.json");
- const QString VConfigManager::c_defaultConfigFilePath = QString(":/resources/vnote.ini");
- const QString VConfigManager::c_defaultConfigFile = QString("vnote.ini");
- const QString VConfigManager::c_sessionConfigFile = QString("session.ini");
- const QString VConfigManager::c_snippetConfigFile = QString("snippet.json");
- const QString VConfigManager::c_styleConfigFolder = QString("styles");
- const QString VConfigManager::c_themeConfigFolder = QString("themes");
- const QString VConfigManager::c_codeBlockStyleConfigFolder = QString("codeblock_styles");
- const QString VConfigManager::c_templateConfigFolder = QString("templates");
- const QString VConfigManager::c_snippetConfigFolder = QString("snippets");
- const QString VConfigManager::c_warningTextStyle = QString("color: #C9302C; font: bold");
- const QString VConfigManager::c_dataTextStyle = QString("font: bold");
- const QString VConfigManager::c_vnoteNotebookFolderName = QString("vnote_notebooks");
- const QString VConfigManager::c_exportFolderName = QString("vnote_exports");
- VConfigManager::VConfigManager(QObject *p_parent)
- : QObject(p_parent),
- m_hasReset(false),
- userSettings(NULL),
- defaultSettings(NULL),
- m_sessionSettings(NULL)
- {
- }
- void VConfigManager::initialize()
- {
- initSettings();
- initThemes();
- initEditorStyles();
- initCssStyles();
- initCodeBlockCssStyles();
- m_theme = getConfigFromSettings("global", "theme").toString();
- m_editorStyle = getConfigFromSettings("global", "editor_style").toString();
- m_cssStyle = getConfigFromSettings("global", "css_style").toString();
- m_codeBlockCssStyle = getConfigFromSettings("global", "code_block_css_style").toString();
- m_defaultEditPalette = QTextEdit().palette();
- welcomePagePath = getConfigFromSettings("global", "welcome_page_path").toString();
- markdownExtensions = hoedown_extensions(HOEDOWN_EXT_TABLES | HOEDOWN_EXT_FENCED_CODE |
- HOEDOWN_EXT_HIGHLIGHT | HOEDOWN_EXT_AUTOLINK |
- HOEDOWN_EXT_QUOTE | HOEDOWN_EXT_MATH | HOEDOWN_EXT_MATH_EXPLICIT);
- mdConverterType = (MarkdownConverterType)getConfigFromSettings("global", "markdown_converter").toInt();
- tabStopWidth = getConfigFromSettings("global", "tab_stop_width").toInt();
- isExpandTab = getConfigFromSettings("global", "is_expand_tab").toBool();
- m_highlightCursorLine = getConfigFromSettings("global", "highlight_cursor_line").toBool();
- m_highlightSelectedWord = getConfigFromSettings("global", "highlight_selected_word").toBool();
- m_highlightSearchedWord = getConfigFromSettings("global", "highlight_searched_word").toBool();
- m_autoIndent = getConfigFromSettings("global", "auto_indent").toBool();
- m_autoList = getConfigFromSettings("global", "auto_list").toBool();
- readCustomColors();
- curBackgroundColor = getConfigFromSettings("global", "current_background_color").toString();
- updateEditStyle();
- curRenderBackgroundColor = getConfigFromSettings("global",
- "current_render_background_color").toString();
- m_toolsDockChecked = getConfigFromSettings("global", "tools_dock_checked").toBool();
- m_findCaseSensitive = getConfigFromSettings("global",
- "find_case_sensitive").toBool();
- m_findWholeWordOnly = getConfigFromSettings("global",
- "find_whole_word_only").toBool();
- m_findRegularExpression = getConfigFromSettings("global",
- "find_regular_expression").toBool();
- m_findIncrementalSearch = getConfigFromSettings("global",
- "find_incremental_search").toBool();
- m_language = getConfigFromSettings("global", "language").toString();
- m_enableMermaid = getConfigFromSettings("global", "enable_mermaid").toBool();
- m_enableFlowchart = getConfigFromSettings("global", "enable_flowchart").toBool();
- m_enableMathjax = getConfigFromSettings("global", "enable_mathjax").toBool();
- m_webZoomFactor = getConfigFromSettings("global", "web_zoom_factor").toReal();
- if (!isCustomWebZoomFactor()) {
- // Calculate the zoom factor based on DPI.
- m_webZoomFactor = VUtils::calculateScaleFactor();
- qDebug() << "set WebZoomFactor to" << m_webZoomFactor;
- }
- m_enableCodeBlockHighlight = getConfigFromSettings("global",
- "enable_code_block_highlight").toBool();
- m_enablePreviewImages = getConfigFromSettings("global",
- "enable_preview_images").toBool();
- m_enablePreviewImageConstraint = getConfigFromSettings("global",
- "enable_preview_image_constraint").toBool();
- m_enableImageConstraint = getConfigFromSettings("global",
- "enable_image_constraint").toBool();
- m_enableImageCaption = getConfigFromSettings("global",
- "enable_image_caption").toBool();
- m_imageFolder = getConfigFromSettings("global",
- "image_folder").toString();
- m_imageFolderExt = getConfigFromSettings("global",
- "external_image_folder").toString();
- m_attachmentFolder = getConfigFromSettings("global",
- "attachment_folder").toString();
- if (m_attachmentFolder.isEmpty()) {
- // Reset the default folder.
- m_attachmentFolder = resetDefaultConfig("global", "attachment_folder").toString();
- }
- m_enableTrailingSpaceHighlight = getConfigFromSettings("global",
- "enable_trailing_space_highlight").toBool();
- m_enableVimMode = getConfigFromSettings("global",
- "enable_vim_mode").toBool();
- m_enableSmartImInVimMode = getConfigFromSettings("global",
- "enable_smart_im_in_vim_mode").toBool();
- m_editorLineNumber = getConfigFromSettings("global",
- "editor_line_number").toInt();
- m_minimizeToSystemTray = getConfigFromSettings("global",
- "minimize_to_system_tray").toInt();
- if (m_minimizeToSystemTray > 1 || m_minimizeToSystemTray < -1) {
- setMinimizeToSystemTray(0);
- }
- readShortcutsFromSettings();
- readCaptainShortcutsFromSettings();
- initDocSuffixes();
- m_markdownHighlightInterval = getConfigFromSettings("global",
- "markdown_highlight_interval").toInt();
- m_lineDistanceHeight = getConfigFromSettings("global",
- "line_distance_height").toInt();
- 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;
- }
- int tmpHeadingSequenceType = getConfigFromSettings("global",
- "heading_sequence_type").toInt();
- if (tmpHeadingSequenceType < (int)HeadingSequenceType::Invalid
- && tmpHeadingSequenceType >= (int)HeadingSequenceType::Disabled) {
- m_headingSequenceType = (HeadingSequenceType)tmpHeadingSequenceType;
- } else {
- m_headingSequenceType = HeadingSequenceType::Disabled;
- }
- m_headingSequenceBaseLevel = getConfigFromSettings("global",
- "heading_sequence_base_level").toInt();
- m_colorColumn = getConfigFromSettings("global", "color_column").toInt();
- m_enableCodeBlockLineNumber = getConfigFromSettings("global",
- "enable_code_block_line_number").toBool();
- m_toolBarIconSize = getConfigFromSettings("global",
- "tool_bar_icon_size").toInt();
- m_markdownitOptHtml = getConfigFromSettings("global",
- "markdownit_opt_html").toBool();
- m_markdownitOptBreaks = getConfigFromSettings("global",
- "markdownit_opt_breaks").toBool();
- m_markdownitOptLinkify = getConfigFromSettings("global",
- "markdownit_opt_linkify").toBool();
- m_recycleBinFolder = getConfigFromSettings("global",
- "recycle_bin_folder").toString();
- m_recycleBinFolderExt = getConfigFromSettings("global",
- "external_recycle_bin_folder").toString();
- m_confirmImagesCleanUp = getConfigFromSettings("global",
- "confirm_images_clean_up").toBool();
- m_confirmReloadFolder = getConfigFromSettings("global",
- "confirm_reload_folder").toBool();
- m_mathjaxJavascript = getConfigFromSettings("web",
- "mathjax_javascript").toString();
- m_doubleClickCloseTab = getConfigFromSettings("global",
- "double_click_close_tab").toBool();
- m_enableCompactMode = getConfigFromSettings("global",
- "enable_compact_mode").toBool();
- int tmpStartupPageMode = getConfigFromSettings("global",
- "startup_page_type").toInt();
- if (tmpStartupPageMode < (int)StartupPageType::Invalid
- && tmpStartupPageMode >= (int)StartupPageType::None) {
- m_startupPageType = (StartupPageType)tmpStartupPageMode;
- } else {
- m_startupPageType = StartupPageType::None;
- }
- m_startupPages = getConfigFromSettings("global",
- "startup_pages").toStringList();
- initFromSessionSettings();
- m_fileTimerInterval = getConfigFromSettings("global",
- "file_timer_interval").toInt();
- if (m_fileTimerInterval < 100) {
- m_fileTimerInterval = 100;
- }
- m_backupDirectory = getConfigFromSettings("global",
- "backup_directory").toString();
- m_backupExtension = getConfigFromSettings("global",
- "backup_extension").toString();
- if (m_backupExtension.isEmpty()) {
- m_backupExtension = ".";
- }
- m_vimExemptionKeys = getConfigFromSettings("global",
- "vim_exemption_keys").toString();
- m_closeBeforeExternalEditor = getConfigFromSettings("global",
- "close_before_external_editor").toBool();
- m_stylesToInlineWhenCopied = getConfigFromSettings("web",
- "styles_to_inline_when_copied").toStringList().join(",");
- m_singleClickClosePreviousTab = getConfigFromSettings("global",
- "single_click_close_previous_tab").toBool();
- }
- void VConfigManager::initSettings()
- {
- Q_ASSERT(!userSettings && !defaultSettings && !m_sessionSettings);
- const char *codecForIni = "UTF-8";
- // vnote.ini.
- // First try to read vnote.ini from the directory of the executable.
- QString userIniPath = QDir(QCoreApplication::applicationDirPath()).filePath(c_defaultConfigFile);
- if (QFileInfo::exists(userIniPath)) {
- userSettings = new QSettings(userIniPath,
- QSettings::IniFormat,
- this);
- } else {
- userSettings = new QSettings(QSettings::IniFormat,
- QSettings::UserScope,
- orgName,
- appName,
- this);
- }
- userSettings->setIniCodec(codecForIni);
- qDebug() << "use user config" << userSettings->fileName();
- // Default vnote.ini from resource file.
- defaultSettings = new QSettings(c_defaultConfigFilePath, QSettings::IniFormat, this);
- defaultSettings->setIniCodec(codecForIni);
- // session.ini.
- m_sessionSettings = new QSettings(QDir(getConfigFolder()).filePath(c_sessionConfigFile),
- QSettings::IniFormat,
- this);
- m_sessionSettings->setIniCodec(codecForIni);
- }
- void VConfigManager::initFromSessionSettings()
- {
- curNotebookIndex = getConfigFromSessionSettings("global", "current_notebook").toInt();
- m_mainWindowGeometry = getConfigFromSessionSettings("geometry",
- "main_window_geometry").toByteArray();
- m_mainWindowState = getConfigFromSessionSettings("geometry",
- "main_window_state").toByteArray();
- m_mainSplitterState = getConfigFromSessionSettings("geometry",
- "main_splitter_state").toByteArray();
- m_naviSplitterState = getConfigFromSessionSettings("geometry",
- "navi_splitter_state").toByteArray();
- }
- void VConfigManager::readCustomColors()
- {
- m_customColors.clear();
- QStringList str = getConfigFromSettings("global", "custom_colors").toStringList();
- for (auto const & item : str) {
- QStringList parts = item.split(':', QString::SkipEmptyParts);
- if (parts.size() != 2) {
- continue;
- }
- if (!QColor(parts[1]).isValid()) {
- continue;
- }
- VColor color;
- color.m_name = parts[0];
- color.m_color = parts[1];
- m_customColors.append(color);
- }
- }
- void VConfigManager::readNotebookFromSettings(QSettings *p_settings,
- QVector<VNotebook *> &p_notebooks,
- QObject *parent)
- {
- Q_ASSERT(p_notebooks.isEmpty());
- int size = p_settings->beginReadArray("notebooks");
- for (int i = 0; i < size; ++i) {
- p_settings->setArrayIndex(i);
- QString name = p_settings->value("name").toString();
- QString path = p_settings->value("path").toString();
- VNotebook *notebook = new VNotebook(name, path, parent);
- notebook->readConfigNotebook();
- p_notebooks.append(notebook);
- }
- p_settings->endArray();
- qDebug() << "read" << p_notebooks.size()
- << "notebook items from [notebooks] section";
- }
- void VConfigManager::writeNotebookToSettings(QSettings *p_settings,
- const QVector<VNotebook *> &p_notebooks)
- {
- // Clear it first
- p_settings->beginGroup("notebooks");
- p_settings->remove("");
- p_settings->endGroup();
- p_settings->beginWriteArray("notebooks");
- for (int i = 0; i < p_notebooks.size(); ++i) {
- p_settings->setArrayIndex(i);
- const VNotebook ¬ebook = *p_notebooks[i];
- p_settings->setValue("name", notebook.getName());
- p_settings->setValue("path", notebook.getPath());
- }
- p_settings->endArray();
- qDebug() << "write" << p_notebooks.size()
- << "notebook items in [notebooks] section";
- }
- static QVariant getConfigFromSettingsBySectionKey(const QSettings *p_settings,
- const QString &p_section,
- const QString &p_key)
- {
- QString fullKey = p_section + "/" + p_key;
- return p_settings->value(fullKey);
- }
- static void setConfigToSettingsBySectionKey(QSettings *p_settings,
- const QString &p_section,
- const QString &p_key,
- const QVariant &p_value)
- {
- QString fullKey = p_section + "/" + p_key;
- return p_settings->setValue(fullKey, p_value);
- }
- QVariant VConfigManager::getConfigFromSettings(const QString §ion, const QString &key) const
- {
- // First, look up the user-scoped config file
- QVariant value = getConfigFromSettingsBySectionKey(userSettings, section, key);
- if (!value.isNull()) {
- qDebug() << "user config:" << (section + "/" + key) << value;
- return value;
- }
- // Second, look up the default config file
- return getDefaultConfig(section, key);
- }
- void VConfigManager::setConfigToSettings(const QString §ion, const QString &key, const QVariant &value)
- {
- if (m_hasReset) {
- return;
- }
- // Set the user-scoped config file
- setConfigToSettingsBySectionKey(userSettings, section, key, value);
- qDebug() << "set user config:" << (section + "/" + key) << value;
- }
- QVariant VConfigManager::getDefaultConfig(const QString &p_section, const QString &p_key) const
- {
- QVariant value = getConfigFromSettingsBySectionKey(defaultSettings, p_section, p_key);
- qDebug() << "default config:" << (p_section + "/" + p_key) << value;
- return value;
- }
- QVariant VConfigManager::resetDefaultConfig(const QString &p_section, const QString &p_key)
- {
- QVariant defaultValue = getDefaultConfig(p_section, p_key);
- setConfigToSettings(p_section, p_key, defaultValue);
- return defaultValue;
- }
- QVariant VConfigManager::getConfigFromSessionSettings(const QString &p_section,
- const QString &p_key) const
- {
- return getConfigFromSettingsBySectionKey(m_sessionSettings,
- p_section,
- p_key);
- }
- void VConfigManager::setConfigToSessionSettings(const QString &p_section,
- const QString &p_key,
- const QVariant &p_value)
- {
- if (m_hasReset) {
- return;
- }
- setConfigToSettingsBySectionKey(m_sessionSettings,
- p_section,
- p_key,
- p_value);
- }
- QString VConfigManager::fetchDirConfigFilePath(const QString &p_path)
- {
- QDir dir(p_path);
- QString fileName = c_dirConfigFile;
- if (dir.exists(c_obsoleteDirConfigFile)) {
- V_ASSERT(!dir.exists(c_dirConfigFile));
- if (!dir.rename(c_obsoleteDirConfigFile, c_dirConfigFile)) {
- fileName = c_obsoleteDirConfigFile;
- }
- qDebug() << "rename old directory config file:" << fileName;
- }
- QString filePath = QDir::cleanPath(dir.filePath(fileName));
- qDebug() << "use directory config file:" << filePath;
- return filePath;
- }
- QJsonObject VConfigManager::readDirectoryConfig(const QString &path)
- {
- QString configFile = fetchDirConfigFilePath(path);
- QFile config(configFile);
- if (!config.open(QIODevice::ReadOnly)) {
- qWarning() << "fail to read directory configuration file:"
- << configFile;
- return QJsonObject();
- }
- QByteArray configData = config.readAll();
- return QJsonDocument::fromJson(configData).object();
- }
- bool VConfigManager::directoryConfigExist(const QString &path)
- {
- return QFileInfo::exists(fetchDirConfigFilePath(path));
- }
- bool VConfigManager::writeDirectoryConfig(const QString &path, const QJsonObject &configJson)
- {
- QString configFile = fetchDirConfigFilePath(path);
- QFile config(configFile);
- // We use Unix LF for config file.
- if (!config.open(QIODevice::WriteOnly)) {
- qWarning() << "fail to open directory configuration file for write:"
- << configFile;
- return false;
- }
- QJsonDocument configDoc(configJson);
- config.write(configDoc.toJson());
- return true;
- }
- bool VConfigManager::deleteDirectoryConfig(const QString &path)
- {
- QString configFile = fetchDirConfigFilePath(path);
- QFile config(configFile);
- if (!config.remove()) {
- qWarning() << "fail to delete directory configuration file:"
- << configFile;
- return false;
- }
- qDebug() << "delete config file:" << configFile;
- return true;
- }
- QString VConfigManager::getLogFilePath() const
- {
- return QDir(getConfigFolder()).filePath("vnote.log");
- }
- void VConfigManager::updateMarkdownEditStyle()
- {
- static const QString defaultColor = "#00897B";
- // Read style file .mdhl
- QString file(getEditorStyleFile());
- qDebug() << "use editor style file" << file;
- QString styleStr = VUtils::readFileFromDisk(file);
- if (styleStr.isEmpty()) {
- return;
- }
- mdEditPalette = baseEditPalette;
- mdEditFont = baseEditFont;
- VStyleParser parser;
- parser.parseMarkdownStyle(styleStr);
- QMap<QString, QMap<QString, QString>> styles;
- parser.fetchMarkdownEditorStyles(mdEditPalette, mdEditFont, styles);
- mdHighlightingStyles = parser.fetchMarkdownStyles(mdEditFont);
- m_codeBlockStyles = parser.fetchCodeBlockStyles(mdEditFont);
- m_editorCurrentLineBg = defaultColor;
- m_editorVimInsertBg = defaultColor;
- m_editorVimNormalBg = defaultColor;
- m_editorVimVisualBg = defaultColor;
- m_editorVimReplaceBg = defaultColor;
- auto editorCurrentLineIt = styles.find("editor-current-line");
- if (editorCurrentLineIt != styles.end()) {
- auto backgroundIt = editorCurrentLineIt->find("background");
- if (backgroundIt != editorCurrentLineIt->end()) {
- // Do not need to add "#" here, since this is a built-in attribute.
- m_editorCurrentLineBg = *backgroundIt;
- }
- auto vimBgIt = editorCurrentLineIt->find("vim-insert-background");
- if (vimBgIt != editorCurrentLineIt->end()) {
- m_editorVimInsertBg = "#" + *vimBgIt;
- }
- vimBgIt = editorCurrentLineIt->find("vim-normal-background");
- if (vimBgIt != editorCurrentLineIt->end()) {
- m_editorVimNormalBg = "#" + *vimBgIt;
- }
- vimBgIt = editorCurrentLineIt->find("vim-visual-background");
- if (vimBgIt != editorCurrentLineIt->end()) {
- m_editorVimVisualBg = "#" + *vimBgIt;
- }
- vimBgIt = editorCurrentLineIt->find("vim-replace-background");
- if (vimBgIt != editorCurrentLineIt->end()) {
- m_editorVimReplaceBg = "#" + *vimBgIt;
- }
- }
- m_editorTrailingSpaceBg = defaultColor;
- m_editorSelectedWordFg = defaultColor;
- m_editorSelectedWordBg = defaultColor;
- m_editorSearchedWordFg = defaultColor;
- m_editorSearchedWordBg = defaultColor;
- m_editorSearchedWordCursorFg = defaultColor;
- m_editorSearchedWordCursorBg = defaultColor;
- m_editorIncrementalSearchedWordFg = defaultColor;
- m_editorIncrementalSearchedWordBg = defaultColor;
- m_editorLineNumberBg = defaultColor;
- m_editorLineNumberFg = defaultColor;
- m_editorColorColumnBg = defaultColor;
- m_editorColorColumnFg = defaultColor;
- m_editorPreviewImageLineFg = defaultColor;
- auto editorIt = styles.find("editor");
- if (editorIt != styles.end()) {
- auto it = editorIt->find("trailing-space");
- if (it != editorIt->end()) {
- m_editorTrailingSpaceBg = "#" + *it;
- }
- it = editorIt->find("line-number-background");
- if (it != editorIt->end()) {
- m_editorLineNumberBg = "#" + *it;
- }
- it = editorIt->find("line-number-foreground");
- if (it != editorIt->end()) {
- m_editorLineNumberFg = "#" + *it;
- }
- it = editorIt->find("selected-word-foreground");
- if (it != editorIt->end()) {
- m_editorSelectedWordFg = "#" + *it;
- }
- it = editorIt->find("selected-word-background");
- if (it != editorIt->end()) {
- m_editorSelectedWordBg = "#" + *it;
- }
- it = editorIt->find("searched-word-foreground");
- if (it != editorIt->end()) {
- m_editorSearchedWordFg = "#" + *it;
- }
- it = editorIt->find("searched-word-background");
- if (it != editorIt->end()) {
- m_editorSearchedWordBg = "#" + *it;
- }
- it = editorIt->find("searched-word-cursor-foreground");
- if (it != editorIt->end()) {
- m_editorSearchedWordCursorFg = "#" + *it;
- }
- it = editorIt->find("searched-word-cursor-background");
- if (it != editorIt->end()) {
- m_editorSearchedWordCursorBg = "#" + *it;
- }
- it = editorIt->find("incremental-searched-word-foreground");
- if (it != editorIt->end()) {
- m_editorIncrementalSearchedWordFg = "#" + *it;
- }
- it = editorIt->find("incremental-searched-word-background");
- if (it != editorIt->end()) {
- m_editorIncrementalSearchedWordBg = "#" + *it;
- }
- it = editorIt->find("color-column-background");
- if (it != editorIt->end()) {
- m_editorColorColumnBg = "#" + *it;
- }
- it = editorIt->find("color-column-foreground");
- if (it != editorIt->end()) {
- m_editorColorColumnFg = "#" + *it;
- }
- it = editorIt->find("preview-image-line-foreground");
- if (it != editorIt->end()) {
- m_editorPreviewImageLineFg = "#" + *it;
- }
- }
- }
- void VConfigManager::updateEditStyle()
- {
- // Reset font and palette.
- baseEditFont = mdEditFont = m_defaultEditFont;
- baseEditPalette = mdEditPalette = m_defaultEditPalette;
- static const QColor defaultColor = m_defaultEditPalette.color(QPalette::Base);
- QColor newColor = defaultColor;
- bool force = false;
- if (curBackgroundColor != "System") {
- for (int i = 0; i < m_customColors.size(); ++i) {
- if (m_customColors[i].m_name == curBackgroundColor) {
- newColor = QColor(m_customColors[i].m_color);
- force = true;
- break;
- }
- }
- }
- baseEditPalette.setColor(QPalette::Base, newColor);
- // Update markdown editor palette
- updateMarkdownEditStyle();
- // Base editor will use the same font size as the markdown editor by now.
- if (mdEditFont.pointSize() > -1) {
- baseEditFont.setPointSize(mdEditFont.pointSize());
- }
- if (force) {
- mdEditPalette.setColor(QPalette::Base, newColor);
- }
- }
- void VConfigManager::setWebZoomFactor(qreal p_factor)
- {
- if (isCustomWebZoomFactor()) {
- if (VUtils::realEqual(m_webZoomFactor, p_factor)) {
- return;
- } else if (VUtils::realEqual(p_factor, -1)) {
- m_webZoomFactor = VUtils::calculateScaleFactor();
- setConfigToSettings("global", "web_zoom_factor", -1);
- return;
- }
- } else {
- if (VUtils::realEqual(p_factor, -1)) {
- return;
- }
- }
- m_webZoomFactor = p_factor;
- setConfigToSettings("global", "web_zoom_factor", m_webZoomFactor);
- }
- QString VConfigManager::getConfigFolder() const
- {
- V_ASSERT(userSettings);
- QString iniPath = userSettings->fileName();
- return VUtils::basePathFromPath(iniPath);
- }
- QString VConfigManager::getConfigFilePath() const
- {
- V_ASSERT(userSettings);
- return userSettings->fileName();
- }
- const QString &VConfigManager::getStyleConfigFolder() const
- {
- static QString path = QDir(getConfigFolder()).filePath(c_styleConfigFolder);
- return path;
- }
- const QString &VConfigManager::getThemeConfigFolder() const
- {
- static QString path = QDir(getConfigFolder()).filePath(c_themeConfigFolder);
- return path;
- }
- const QString &VConfigManager::getCodeBlockStyleConfigFolder() const
- {
- static QString path = QDir(getStyleConfigFolder()).filePath(c_codeBlockStyleConfigFolder);
- return path;
- }
- const QString &VConfigManager::getTemplateConfigFolder() const
- {
- static QString path = QDir(getConfigFolder()).filePath(c_templateConfigFolder);
- return path;
- }
- const QString &VConfigManager::getSnippetConfigFolder() const
- {
- static QString path = QDir(getConfigFolder()).filePath(c_snippetConfigFolder);
- return path;
- }
- const QString &VConfigManager::getSnippetConfigFilePath() const
- {
- static QString path = QDir(getSnippetConfigFolder()).filePath(c_snippetConfigFile);
- return path;
- }
- QString VConfigManager::getThemeFile() const
- {
- auto it = m_themes.find(m_theme);
- if (it != m_themes.end()) {
- return it.value();
- } else {
- qWarning() << "use default theme due to missing specified theme" << m_theme;
- const_cast<VConfigManager *>(this)->m_theme = getDefaultConfig("global", "theme").toString();
- return m_themes[m_theme];
- }
- }
- QVector<QString> VConfigManager::getNoteTemplates(DocType p_type) const
- {
- QVector<QString> res;
- QDir dir(getTemplateConfigFolder());
- if (!dir.exists()) {
- dir.mkpath(getTemplateConfigFolder());
- return res;
- }
- dir.setFilter(QDir::Files | QDir::NoSymLinks);
- QStringList files = dir.entryList();
- res.reserve(files.size());
- for (auto const &item : files) {
- if (p_type == DocType::Unknown
- || p_type == VUtils::docTypeFromName(item)) {
- res.push_back(item);
- }
- }
- return res;
- }
- // The URL will be used in the Web page.
- QString VConfigManager::getCssStyleUrl() const
- {
- Q_ASSERT(!m_themes.isEmpty());
- Q_ASSERT(!m_cssStyles.isEmpty());
- if (m_cssStyle.isEmpty()) {
- // Use theme's style.
- const_cast<VConfigManager *>(this)->m_cssStyle = VPalette::themeCssStyle(getThemeFile());
- }
- QString cssPath = getCssStyleUrl(m_cssStyle);
- qDebug() << "use css style file" << cssPath;
- return cssPath;
- }
- QString VConfigManager::getCssStyleUrl(const QString &p_style) const
- {
- Q_ASSERT(!m_themes.isEmpty());
- Q_ASSERT(!m_cssStyles.isEmpty());
- if (p_style.isEmpty()) {
- return QString();
- }
- QString cssPath;
- auto it = m_cssStyles.find(p_style);
- if (it != m_cssStyles.end()) {
- cssPath = it.value();
- }
- if (cssPath.startsWith(":")) {
- cssPath = "qrc" + cssPath;
- } else {
- QUrl cssUrl = QUrl::fromLocalFile(cssPath);
- cssPath = cssUrl.toString();
- }
- return cssPath;
- }
- QString VConfigManager::getCodeBlockCssStyleUrl() const
- {
- Q_ASSERT(!m_themes.isEmpty());
- Q_ASSERT(!m_codeBlockCssStyles.isEmpty());
- if (m_codeBlockCssStyle.isEmpty()) {
- // Use theme's style.
- const_cast<VConfigManager *>(this)->m_codeBlockCssStyle =
- VPalette::themeCodeBlockCssStyle(getThemeFile());
- }
- QString cssPath = getCodeBlockCssStyleUrl(m_codeBlockCssStyle);
- qDebug() << "use code block css style file" << cssPath;
- return cssPath;
- }
- QString VConfigManager::getCodeBlockCssStyleUrl(const QString &p_style) const
- {
- Q_ASSERT(!m_themes.isEmpty());
- Q_ASSERT(!m_codeBlockCssStyles.isEmpty());
- if (p_style.isEmpty()) {
- return QString();
- }
- QString cssPath;
- auto it = m_codeBlockCssStyles.find(p_style);
- if (it != m_codeBlockCssStyles.end()) {
- cssPath = it.value();
- }
- if (cssPath.startsWith(":")) {
- cssPath = "qrc" + cssPath;
- } else {
- QUrl cssUrl = QUrl::fromLocalFile(cssPath);
- cssPath = cssUrl.toString();
- }
- return cssPath;
- }
- QString VConfigManager::getMermaidCssStyleUrl() const
- {
- Q_ASSERT(!m_themes.isEmpty());
- Q_ASSERT(!m_theme.isEmpty());
- static QString mermaidCssPath;
- if (mermaidCssPath.isEmpty()) {
- VPaletteMetaData data = VPalette::getPaletteMetaData(getThemeFile());
- mermaidCssPath = data.m_mermaidCssFile;
- if (mermaidCssPath.startsWith(":")) {
- mermaidCssPath = "qrc" + mermaidCssPath;
- } else {
- QUrl cssUrl = QUrl::fromLocalFile(mermaidCssPath);
- mermaidCssPath = cssUrl.toString();
- }
- qDebug() << "use mermaid css style file" << mermaidCssPath;
- }
- return mermaidCssPath;
- }
- QString VConfigManager::getEditorStyleFile() const
- {
- Q_ASSERT(!m_themes.isEmpty());
- Q_ASSERT(!m_editorStyles.isEmpty());
- if (m_editorStyle.isEmpty()) {
- // Use theme's style.
- const_cast<VConfigManager *>(this)->m_editorStyle = VPalette::themeEditorStyle(getThemeFile());
- }
- auto it = m_editorStyles.find(m_editorStyle);
- if (it != m_editorStyles.end()) {
- return it.value();
- }
- return QString();
- }
- QString VConfigManager::getVnoteNotebookFolderPath()
- {
- QStringList folders = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
- if (folders.isEmpty()) {
- return QDir::home().filePath(c_vnoteNotebookFolderName);
- } else {
- return QDir(folders[0]).filePath(c_vnoteNotebookFolderName);
- }
- }
- QString VConfigManager::getExportFolderPath()
- {
- QStringList folders = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
- if (folders.isEmpty()) {
- return QDir::home().filePath(c_exportFolderName);
- } else {
- return QDir(folders[0]).filePath(c_exportFolderName);
- }
- }
- QString VConfigManager::getDocumentPathOrHomePath()
- {
- QStringList folders = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
- if (folders.isEmpty()) {
- return QDir::homePath();
- } else {
- return folders[0];
- }
- }
- QHash<QString, QString> VConfigManager::readShortcutsFromSettings(QSettings *p_settings,
- const QString &p_group)
- {
- QHash<QString, QString> ret;
- p_settings->beginGroup(p_group);
- QStringList keys = p_settings->childKeys();
- for (auto const & key : keys) {
- if (key.isEmpty()) {
- continue;
- }
- QVariant varVal = p_settings->value(key);
- QString sequence = varVal.toString();
- if (varVal.type() == QVariant::StringList) {
- sequence = varVal.toStringList().join(",");
- }
- sequence = sequence.trimmed();
- if (isValidKeySequence(sequence)) {
- ret.insert(key, sequence);
- }
- }
- p_settings->endGroup();
- return ret;
- }
- bool VConfigManager::isValidKeySequence(const QString &p_seq)
- {
- return p_seq.isEmpty()
- || (p_seq.toLower() != "ctrl+q" && !QKeySequence(p_seq).isEmpty());
- }
- void VConfigManager::readShortcutsFromSettings()
- {
- const QString group("shortcuts");
- m_shortcuts.clear();
- m_shortcuts = readShortcutsFromSettings(defaultSettings, group);
- // Update default settings according to user settings.
- QHash<QString, QString> userShortcuts = readShortcutsFromSettings(userSettings,
- group);
- QSet<QString> matched;
- matched.reserve(m_shortcuts.size());
- for (auto it = userShortcuts.begin(); it != userShortcuts.end(); ++it) {
- auto defaultIt = m_shortcuts.find(it.key());
- if (defaultIt != m_shortcuts.end()) {
- QString sequence = it.value().trimmed();
- if (sequence != defaultIt.value()) {
- if (isValidKeySequence(sequence)) {
- matched.insert(it.key());
- *defaultIt = sequence;
- }
- } else {
- matched.insert(it.key());
- }
- }
- }
- if (matched.size() < m_shortcuts.size()) {
- qDebug() << "override user shortcuts settings using default settings";
- writeShortcutsToSettings(userSettings, group, m_shortcuts);
- }
- }
- void VConfigManager::readCaptainShortcutsFromSettings()
- {
- const QString group("captain_mode_shortcuts");
- m_captainShortcuts.clear();
- m_captainShortcuts = readShortcutsFromSettings(defaultSettings, group);
- // Update default settings according to user settings.
- QHash<QString, QString> userShortcuts = readShortcutsFromSettings(userSettings,
- group);
- QSet<QString> matched;
- matched.reserve(m_captainShortcuts.size());
- for (auto it = userShortcuts.begin(); it != userShortcuts.end(); ++it) {
- auto defaultIt = m_captainShortcuts.find(it.key());
- if (defaultIt != m_captainShortcuts.end()) {
- QString sequence = it.value().trimmed();
- if (sequence != defaultIt.value()) {
- if (isValidKeySequence(sequence)) {
- matched.insert(it.key());
- *defaultIt = sequence;
- }
- } else {
- matched.insert(it.key());
- }
- }
- }
- if (matched.size() < m_captainShortcuts.size()) {
- writeShortcutsToSettings(userSettings, group, m_captainShortcuts);
- }
- qDebug() << "captain mode shortcuts:" << m_captainShortcuts;
- }
- void VConfigManager::writeShortcutsToSettings(QSettings *p_settings,
- const QString &p_group,
- const QHash<QString, QString> &p_shortcuts)
- {
- p_settings->beginGroup(p_group);
- p_settings->remove("");
- for (auto it = p_shortcuts.begin(); it != p_shortcuts.end(); ++it) {
- p_settings->setValue(it.key(), it.value());
- }
- p_settings->endGroup();
- }
- QString VConfigManager::getShortcutKeySequence(const QString &p_operation) const
- {
- auto it = m_shortcuts.find(p_operation);
- if (it == m_shortcuts.end()) {
- return QString();
- }
- return *it;
- }
- QString VConfigManager::getCaptainShortcutKeySequence(const QString &p_operation) const
- {
- auto it = m_captainShortcuts.find(p_operation);
- if (it == m_captainShortcuts.end()) {
- return QString();
- }
- return *it;
- }
- void VConfigManager::initDocSuffixes()
- {
- m_docSuffixes.clear();
- QStringList mdSuffix = getConfigFromSettings("global",
- "markdown_suffix").toStringList();
- if (mdSuffix.isEmpty()) {
- mdSuffix = getDefaultConfig("global",
- "markdown_suffix").toStringList();
- }
- for (auto it = mdSuffix.begin(); it != mdSuffix.end();) {
- if (it->isEmpty()) {
- it = mdSuffix.erase(it);
- } else {
- *it = it->toLower();
- ++it;
- }
- }
- Q_ASSERT(!mdSuffix.isEmpty());
- mdSuffix.removeDuplicates();
- m_docSuffixes[(int)DocType::Markdown] = mdSuffix;
- QList<QString> list;
- list << "ls" << "list";
- m_docSuffixes[(int)DocType::List] = list;
- QList<QString> container;
- container << "co" << "container" << "con";
- m_docSuffixes[(int)DocType::Container] = container;
- QList<QString> html;
- html << "html";
- m_docSuffixes[(int)DocType::Html] = html;
- qDebug() << "doc suffixes" << m_docSuffixes;
- }
- QVector<VFileSessionInfo> VConfigManager::getLastOpenedFiles()
- {
- QVector<VFileSessionInfo> files;
- int size = m_sessionSettings->beginReadArray("last_opened_files");
- for (int i = 0; i < size; ++i) {
- m_sessionSettings->setArrayIndex(i);
- files.push_back(VFileSessionInfo::fromSettings(m_sessionSettings));
- }
- m_sessionSettings->endArray();
- qDebug() << "read" << files.size()
- << "items from [last_opened_files] section";
- return files;
- }
- void VConfigManager::setLastOpenedFiles(const QVector<VFileSessionInfo> &p_files)
- {
- if (m_hasReset) {
- return;
- }
- const QString section("last_opened_files");
- // Clear it first
- m_sessionSettings->beginGroup(section);
- m_sessionSettings->remove("");
- m_sessionSettings->endGroup();
- m_sessionSettings->beginWriteArray(section);
- for (int i = 0; i < p_files.size(); ++i) {
- m_sessionSettings->setArrayIndex(i);
- const VFileSessionInfo &info = p_files[i];
- info.toSettings(m_sessionSettings);
- }
- m_sessionSettings->endArray();
- qDebug() << "write" << p_files.size()
- << "items in [last_opened_files] section";
- }
- QVector<VMagicWord> VConfigManager::getCustomMagicWords()
- {
- QVector<VMagicWord> words;
- int size = userSettings->beginReadArray("magic_words");
- for (int i = 0; i < size; ++i) {
- userSettings->setArrayIndex(i);
- VMagicWord word;
- word.m_name = userSettings->value("name").toString();
- word.m_definition = userSettings->value("definition").toString();
- words.push_back(word);
- }
- userSettings->endArray();
- return words;
- }
- QVector<VExternalEditor> VConfigManager::getExternalEditors() const
- {
- QVector<VExternalEditor> ret;
- userSettings->beginGroup("external_editors");
- QStringList keys = userSettings->childKeys();
- for (auto const & key : keys) {
- if (key.isEmpty()) {
- continue;
- }
- QStringList val = userSettings->value(key).toStringList();
- if (val.size() > 2
- || val.isEmpty()) {
- continue;
- }
- VExternalEditor editor;
- editor.m_name = key;
- editor.m_cmd = val[0].trimmed();
- if (editor.m_cmd.isEmpty()) {
- continue;
- }
- if (val.size() == 2) {
- editor.m_shortcut = val[1].trimmed();
- }
- ret.push_back(editor);
- }
- userSettings->endGroup();
- return ret;
- }
- const QString &VConfigManager::getFlashPage() const
- {
- if (m_flashPage.isEmpty()) {
- VConfigManager *var = const_cast<VConfigManager *>(this);
- var->m_flashPage = var->getConfigFromSettings("global",
- "flash_page").toString();
- if (var->m_flashPage.isEmpty()) {
- var->m_flashPage = var->resetDefaultConfig("global", "flash_page").toString();
- }
- if (VUtils::checkFileNameLegal(m_flashPage)) {
- var->m_flashPage = QDir(getConfigFolder()).filePath(m_flashPage);
- }
- }
- if (!QFileInfo::exists(m_flashPage)) {
- VUtils::touchFile(m_flashPage);
- }
- return m_flashPage;
- }
- void VConfigManager::initThemes()
- {
- m_themes.clear();
- // Built-in.
- QString file(":/resources/themes/v_white/v_white.palette");
- m_themes.insert(VPalette::themeName(file), file);
- file = ":/resources/themes/v_pure/v_pure.palette";
- m_themes.insert(VPalette::themeName(file), file);
- file = ":/resources/themes/v_moonlight/v_moonlight.palette";
- m_themes.insert(VPalette::themeName(file), file);
- /* NOT ready yet. Wait for author's tuning.
- file = ":/resources/themes/v_material/v_material.palette";
- m_themes.insert(VPalette::themeName(file), file);
- */
- outputBuiltInThemes();
- // User theme folder.
- QDir dir(getThemeConfigFolder());
- Q_ASSERT(dir.exists());
- if (!dir.exists()) {
- dir.mkpath(getThemeConfigFolder());
- return;
- }
- dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks);
- QStringList dirs = dir.entryList();
- for (auto const &item : dirs) {
- QDir themeDir(dir.filePath(item));
- QStringList files = themeDir.entryList(QStringList() << "*.palette");
- if (files.size() != 1) {
- continue;
- }
- QFileInfo fi(files[0]);
- m_themes.insert(VPalette::themeName(files[0]), themeDir.filePath(files[0]));
- }
- }
- void VConfigManager::outputBuiltInThemes()
- {
- QDir dir(getThemeConfigFolder());
- if (!dir.exists()) {
- dir.mkpath(getThemeConfigFolder());
- }
- QStringList suffix({"*.palette"});
- for (auto it = m_themes.begin(); it != m_themes.end(); ++it) {
- QString file = it.value();
- QString srcDir = VUtils::basePathFromPath(file);
- QString folder = VUtils::directoryNameFromPath(srcDir);
- bool needOutput = false;
- if (dir.exists(folder)) {
- QString folderPath = dir.filePath(folder);
- QDir tmpDir(folderPath);
- QStringList files = tmpDir.entryList(suffix);
- if (files.size() == 1) {
- int newVer = VPalette::getPaletteVersion(file);
- int curVer = VPalette::getPaletteVersion(tmpDir.filePath(files[0]));
- if (newVer != curVer) {
- needOutput = true;
- }
- } else {
- needOutput = true;
- }
- if (needOutput) {
- // Delete the folder.
- bool ret = VUtils::deleteDirectory(folderPath);
- VUtils::sleepWait(100);
- Q_UNUSED(ret);
- qDebug() << "delete obsolete theme" << folderPath << ret;
- }
- } else {
- needOutput = true;
- }
- if (needOutput) {
- qDebug() << "output built-in theme" << file << folder;
- VUtils::copyDirectory(srcDir, dir.filePath(folder), false);
- }
- }
- }
- void VConfigManager::initEditorStyles()
- {
- Q_ASSERT(!m_themes.isEmpty());
- // Styles from themes.
- m_editorStyles = VPalette::editorStylesFromThemes(m_themes.values());
- // User style folder.
- // Get all the .mdhl files in the folder.
- QDir dir(getStyleConfigFolder());
- if (!dir.exists()) {
- dir.mkpath(getStyleConfigFolder());
- return;
- }
- dir.setFilter(QDir::Files | QDir::NoSymLinks);
- dir.setNameFilters(QStringList("*.mdhl"));
- QStringList files = dir.entryList();
- for (auto const &item : files) {
- QFileInfo fi(item);
- m_editorStyles.insert(fi.completeBaseName(), dir.filePath(item));
- }
- }
- void VConfigManager::initCssStyles()
- {
- Q_ASSERT(!m_themes.isEmpty());
- // Styles from themes.
- m_cssStyles = VPalette::cssStylesFromThemes(m_themes.values());
- // User style folder.
- // Get all the .css files in the folder.
- QDir dir(getStyleConfigFolder());
- if (!dir.exists()) {
- dir.mkpath(getStyleConfigFolder());
- return;
- }
- dir.setFilter(QDir::Files | QDir::NoSymLinks);
- dir.setNameFilters(QStringList("*.css"));
- QStringList files = dir.entryList();
- for (auto const &item : files) {
- QFileInfo fi(item);
- m_cssStyles.insert(fi.completeBaseName(), dir.filePath(item));
- }
- }
- void VConfigManager::initCodeBlockCssStyles()
- {
- Q_ASSERT(!m_themes.isEmpty());
- // Styles from themes.
- m_codeBlockCssStyles = VPalette::codeBlockCssStylesFromThemes(m_themes.values());
- // User style folder.
- // Get all the .css files in the folder.
- QDir dir(getCodeBlockStyleConfigFolder());
- if (!dir.exists()) {
- dir.mkpath(getCodeBlockStyleConfigFolder());
- return;
- }
- dir.setFilter(QDir::Files | QDir::NoSymLinks);
- dir.setNameFilters(QStringList("*.css"));
- QStringList files = dir.entryList();
- for (auto const &item : files) {
- QFileInfo fi(item);
- m_codeBlockCssStyles.insert(fi.completeBaseName(), dir.filePath(item));
- }
- }
- void VConfigManager::resetConfigurations()
- {
- // Clear userSettings.
- userSettings->clear();
- // Clear m_sessionSettings except the notebooks information.
- clearGroupOfSettings(m_sessionSettings, "last_opened_files");
- clearGroupOfSettings(m_sessionSettings, "geometry");
- m_hasReset = true;
- }
- void VConfigManager::resetLayoutConfigurations()
- {
- resetDefaultConfig("global", "tools_dock_checked");
- resetDefaultConfig("global", "menu_bar_checked");
- resetDefaultConfig("global", "enable_compact_mode");
- clearGroupOfSettings(m_sessionSettings, "geometry");
- m_hasReset = true;
- }
- void VConfigManager::clearGroupOfSettings(QSettings *p_settings, const QString &p_group)
- {
- p_settings->beginGroup(p_group);
- p_settings->remove("");
- p_settings->endGroup();
- }
- QString VConfigManager::getRenderBackgroundColor(const QString &p_bgName) const
- {
- if (p_bgName != "System") {
- for (int i = 0; i < m_customColors.size(); ++i) {
- if (m_customColors[i].m_name == p_bgName) {
- return m_customColors[i].m_color;
- }
- }
- }
- return QString();
- }
|