markdowneditorconfig.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #include "markdowneditorconfig.h"
  2. #include <QDebug>
  3. #include "texteditorconfig.h"
  4. #include "mainconfig.h"
  5. using namespace vnotex;
  6. #define READSTR(key) readString(appObj, userObj, (key))
  7. #define READBOOL(key) readBool(appObj, userObj, (key))
  8. #define READREAL(key) readReal(appObj, userObj, (key))
  9. MarkdownEditorConfig::MarkdownEditorConfig(ConfigMgr *p_mgr,
  10. IConfig *p_topConfig,
  11. const QSharedPointer<TextEditorConfig> &p_textEditorConfig)
  12. : IConfig(p_mgr, p_topConfig),
  13. m_textEditorConfig(p_textEditorConfig)
  14. {
  15. m_sessionName = QStringLiteral("markdown_editor");
  16. }
  17. void MarkdownEditorConfig::init(const QJsonObject &p_app, const QJsonObject &p_user)
  18. {
  19. const auto appObj = p_app.value(m_sessionName).toObject();
  20. const auto userObj = p_user.value(m_sessionName).toObject();
  21. loadViewerResource(appObj, userObj);
  22. m_webPlantUml = READBOOL(QStringLiteral("web_plantuml"));
  23. m_webGraphviz = READBOOL(QStringLiteral("web_graphviz"));
  24. m_prependDotInRelativeLink = READBOOL(QStringLiteral("prepend_dot_in_relative_link"));
  25. m_confirmBeforeClearObsoleteImages = READBOOL(QStringLiteral("confirm_before_clear_obsolete_images"));
  26. m_insertFileNameAsTitle = READBOOL(QStringLiteral("insert_file_name_as_title"));
  27. m_sectionNumberEnabled = READBOOL(QStringLiteral("section_number"));
  28. m_constrainImageWidthEnabled = READBOOL(QStringLiteral("constrain_image_width"));
  29. m_constrainInPlacePreviewWidthEnabled = READBOOL(QStringLiteral("constrain_inplace_preview_width"));
  30. m_zoomFactorInReadMode = READREAL(QStringLiteral("zoom_factor_in_read_mode"));
  31. m_fetchImagesInParseAndPaste = READBOOL(QStringLiteral("fetch_images_in_parse_and_paste"));
  32. m_protectFromXss = READBOOL(QStringLiteral("protect_from_xss"));
  33. m_htmlTagEnabled = READBOOL(QStringLiteral("html_tag"));
  34. m_autoBreakEnabled = READBOOL(QStringLiteral("auto_break"));
  35. m_linkifyEnabled = READBOOL(QStringLiteral("linkify"));
  36. }
  37. QJsonObject MarkdownEditorConfig::toJson() const
  38. {
  39. QJsonObject obj;
  40. obj[QStringLiteral("viewer_resource")] = saveViewerResource();
  41. obj[QStringLiteral("web_plantuml")] = m_webPlantUml;
  42. obj[QStringLiteral("web_graphviz")] = m_webGraphviz;
  43. obj[QStringLiteral("prepend_dot_in_relative_link")] = m_prependDotInRelativeLink;
  44. obj[QStringLiteral("confirm_before_clear_obsolete_images")] = m_confirmBeforeClearObsoleteImages;
  45. obj[QStringLiteral("insert_file_name_as_title")] = m_insertFileNameAsTitle;
  46. obj[QStringLiteral("section_number")] = m_sectionNumberEnabled;
  47. obj[QStringLiteral("constrain_image_width")] = m_constrainImageWidthEnabled;
  48. obj[QStringLiteral("constrain_inplace_preview_width")] = m_constrainInPlacePreviewWidthEnabled;
  49. obj[QStringLiteral("zoom_factor_in_read_mode")] = m_zoomFactorInReadMode;
  50. obj[QStringLiteral("fetch_images_in_parse_and_paste")] = m_fetchImagesInParseAndPaste;
  51. obj[QStringLiteral("protect_from_xss")] = m_protectFromXss;
  52. obj[QStringLiteral("html_tag")] = m_htmlTagEnabled;
  53. obj[QStringLiteral("auto_break")] = m_autoBreakEnabled;
  54. obj[QStringLiteral("linkify")] = m_linkifyEnabled;
  55. return obj;
  56. }
  57. TextEditorConfig &MarkdownEditorConfig::getTextEditorConfig()
  58. {
  59. return *m_textEditorConfig;
  60. }
  61. const TextEditorConfig &MarkdownEditorConfig::getTextEditorConfig() const
  62. {
  63. return *m_textEditorConfig;
  64. }
  65. int MarkdownEditorConfig::revision() const
  66. {
  67. return m_revision + m_textEditorConfig->revision();
  68. }
  69. void MarkdownEditorConfig::loadViewerResource(const QJsonObject &p_app, const QJsonObject &p_user)
  70. {
  71. const QString name(QStringLiteral("viewer_resource"));
  72. if (MainConfig::isVersionChanged()) {
  73. bool needOverride = p_app[QStringLiteral("override_viewer_resource")].toBool();
  74. if (needOverride) {
  75. qInfo() << "override \"viewer_resource\" in user configuration due to version change";
  76. m_viewerResource.init(p_app[name].toObject());
  77. return;
  78. }
  79. }
  80. if (p_user.contains(name)) {
  81. m_viewerResource.init(p_user[name].toObject());
  82. } else {
  83. m_viewerResource.init(p_app[name].toObject());
  84. }
  85. }
  86. QJsonObject MarkdownEditorConfig::saveViewerResource() const
  87. {
  88. return m_viewerResource.toJson();
  89. }
  90. const ViewerResource &MarkdownEditorConfig::getViewerResource() const
  91. {
  92. return m_viewerResource;
  93. }
  94. bool MarkdownEditorConfig::getWebPlantUml() const
  95. {
  96. return m_webPlantUml;
  97. }
  98. bool MarkdownEditorConfig::getWebGraphviz() const
  99. {
  100. return m_webGraphviz;
  101. }
  102. bool MarkdownEditorConfig::getPrependDotInRelativeLink() const
  103. {
  104. return m_prependDotInRelativeLink;
  105. }
  106. bool MarkdownEditorConfig::getConfirmBeforeClearObsoleteImages() const
  107. {
  108. return m_confirmBeforeClearObsoleteImages;
  109. }
  110. void MarkdownEditorConfig::setConfirmBeforeClearObsoleteImages(bool p_confirm)
  111. {
  112. updateConfig(m_confirmBeforeClearObsoleteImages,
  113. p_confirm,
  114. this);
  115. }
  116. bool MarkdownEditorConfig::getInsertFileNameAsTitle() const
  117. {
  118. return m_insertFileNameAsTitle;
  119. }
  120. void MarkdownEditorConfig::setInsertFileNameAsTitle(bool p_enabled)
  121. {
  122. updateConfig(m_insertFileNameAsTitle, p_enabled, this);
  123. }
  124. bool MarkdownEditorConfig::getSectionNumberEnabled() const
  125. {
  126. return m_sectionNumberEnabled;
  127. }
  128. void MarkdownEditorConfig::setSectionNumberEnabled(bool p_enabled)
  129. {
  130. updateConfig(m_sectionNumberEnabled, p_enabled, this);
  131. }
  132. bool MarkdownEditorConfig::getConstrainImageWidthEnabled() const
  133. {
  134. return m_constrainImageWidthEnabled;
  135. }
  136. void MarkdownEditorConfig::setConstrainImageWidthEnabled(bool p_enabled)
  137. {
  138. updateConfig(m_constrainImageWidthEnabled, p_enabled, this);
  139. }
  140. bool MarkdownEditorConfig::getConstrainInPlacePreviewWidthEnabled() const
  141. {
  142. return m_constrainInPlacePreviewWidthEnabled;
  143. }
  144. void MarkdownEditorConfig::setConstrainInPlacePreviewWidthEnabled(bool p_enabled)
  145. {
  146. updateConfig(m_constrainInPlacePreviewWidthEnabled, p_enabled, this);
  147. }
  148. qreal MarkdownEditorConfig::getZoomFactorInReadMode() const
  149. {
  150. return m_zoomFactorInReadMode;
  151. }
  152. void MarkdownEditorConfig::setZoomFactorInReadMode(qreal p_factor)
  153. {
  154. updateConfig(m_zoomFactorInReadMode, p_factor, this);
  155. }
  156. bool MarkdownEditorConfig::getFetchImagesInParseAndPaste() const
  157. {
  158. return m_fetchImagesInParseAndPaste;
  159. }
  160. void MarkdownEditorConfig::setFetchImagesInParseAndPaste(bool p_enabled)
  161. {
  162. updateConfig(m_fetchImagesInParseAndPaste, p_enabled, this);
  163. }
  164. bool MarkdownEditorConfig::getProtectFromXss() const
  165. {
  166. return m_protectFromXss;
  167. }
  168. bool MarkdownEditorConfig::getHtmlTagEnabled() const
  169. {
  170. return m_htmlTagEnabled;
  171. }
  172. void MarkdownEditorConfig::setHtmlTagEnabled(bool p_enabled)
  173. {
  174. updateConfig(m_htmlTagEnabled, p_enabled, this);
  175. }
  176. bool MarkdownEditorConfig::getAutoBreakEnabled() const
  177. {
  178. return m_autoBreakEnabled;
  179. }
  180. void MarkdownEditorConfig::setAutoBreakEnabled(bool p_enabled)
  181. {
  182. updateConfig(m_autoBreakEnabled, p_enabled, this);
  183. }
  184. bool MarkdownEditorConfig::getLinkifyEnabled() const
  185. {
  186. return m_linkifyEnabled;
  187. }
  188. void MarkdownEditorConfig::setLinkifyEnabled(bool p_enabled)
  189. {
  190. updateConfig(m_linkifyEnabled, p_enabled, this);
  191. }