| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505 |
- #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.12");
- 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();
- m_enableFlashAnchor = getConfigFromSettings("web",
- "enable_flash_anchor").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 == "Transparent") {
- return "transparent";
- } else 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();
- }
|