texteditorpage.cpp 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. #include "texteditorpage.h"
  2. #include <QComboBox>
  3. #include <QFormLayout>
  4. #include <QCheckBox>
  5. #include <QSpinBox>
  6. #include <widgets/widgetsfactory.h>
  7. #include <core/editorconfig.h>
  8. #include <core/texteditorconfig.h>
  9. #include <core/configmgr.h>
  10. #include <utils/widgetutils.h>
  11. #include "editorpage.h"
  12. using namespace vnotex;
  13. TextEditorPage::TextEditorPage(QWidget *p_parent)
  14. : SettingsPage(p_parent)
  15. {
  16. setupUI();
  17. }
  18. void TextEditorPage::setupUI()
  19. {
  20. auto mainLayout = WidgetUtils::createFormLayout(this);
  21. {
  22. m_lineNumberComboBox = WidgetsFactory::createComboBox(this);
  23. m_lineNumberComboBox->setToolTip(tr("Line number type"));
  24. m_lineNumberComboBox->addItem(tr("None"), (int)TextEditorConfig::LineNumberType::None);
  25. m_lineNumberComboBox->addItem(tr("Absolute"), (int)TextEditorConfig::LineNumberType::Absolute);
  26. m_lineNumberComboBox->addItem(tr("Relative"), (int)TextEditorConfig::LineNumberType::Relative);
  27. const QString label(tr("Line number:"));
  28. mainLayout->addRow(label, m_lineNumberComboBox);
  29. addSearchItem(label, m_lineNumberComboBox->toolTip(), m_lineNumberComboBox);
  30. connect(m_lineNumberComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
  31. this, &TextEditorPage::pageIsChanged);
  32. }
  33. {
  34. const QString label(tr("Fold text"));
  35. m_textFoldingCheckBox = WidgetsFactory::createCheckBox(label, this);
  36. m_textFoldingCheckBox->setToolTip(tr("Text folding"));
  37. mainLayout->addRow(m_textFoldingCheckBox);
  38. addSearchItem(label, m_textFoldingCheckBox->toolTip(), m_textFoldingCheckBox);
  39. connect(m_textFoldingCheckBox, &QCheckBox::stateChanged,
  40. this, &TextEditorPage::pageIsChanged);
  41. }
  42. {
  43. m_inputModeComboBox = WidgetsFactory::createComboBox(this);
  44. m_inputModeComboBox->setToolTip(tr("Input mode like Vi"));
  45. m_inputModeComboBox->addItem(tr("Normal"), (int)TextEditorConfig::InputMode::NormalMode);
  46. m_inputModeComboBox->addItem(tr("Vi"), (int)TextEditorConfig::InputMode::ViMode);
  47. const QString label(tr("Input mode:"));
  48. mainLayout->addRow(label, m_inputModeComboBox);
  49. addSearchItem(label, m_inputModeComboBox->toolTip(), m_inputModeComboBox);
  50. connect(m_inputModeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
  51. this, &TextEditorPage::pageIsChanged);
  52. }
  53. {
  54. m_centerCursorComboBox = WidgetsFactory::createComboBox(this);
  55. m_centerCursorComboBox->setToolTip(tr("Force to center text cursor"));
  56. m_centerCursorComboBox->addItem(tr("Never"), (int)TextEditorConfig::CenterCursor::NeverCenter);
  57. m_centerCursorComboBox->addItem(tr("Always Center"), (int)TextEditorConfig::CenterCursor::AlwaysCenter);
  58. m_centerCursorComboBox->addItem(tr("Center On Bottom"), (int)TextEditorConfig::CenterCursor::CenterOnBottom);
  59. const QString label(tr("Center cursor:"));
  60. mainLayout->addRow(label, m_centerCursorComboBox);
  61. addSearchItem(label, m_centerCursorComboBox->toolTip(), m_centerCursorComboBox);
  62. connect(m_centerCursorComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
  63. this, &TextEditorPage::pageIsChanged);
  64. }
  65. {
  66. m_wrapModeComboBox = WidgetsFactory::createComboBox(this);
  67. m_wrapModeComboBox->setToolTip(tr("Word wrap mode of editor"));
  68. m_wrapModeComboBox->addItem(tr("No Wrap"), (int)TextEditorConfig::WrapMode::NoWrap);
  69. m_wrapModeComboBox->addItem(tr("Word Wrap"), (int)TextEditorConfig::WrapMode::WordWrap);
  70. m_wrapModeComboBox->addItem(tr("Wrap Anywhere"), (int)TextEditorConfig::WrapMode::WrapAnywhere);
  71. m_wrapModeComboBox->addItem(tr("Word Wrap Or Wrap Anywhere"), (int)TextEditorConfig::WrapMode::WordWrapOrAnywhere);
  72. const QString label(tr("Wrap mode:"));
  73. mainLayout->addRow(label, m_wrapModeComboBox);
  74. addSearchItem(label, m_wrapModeComboBox->toolTip(), m_wrapModeComboBox);
  75. connect(m_wrapModeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
  76. this, &TextEditorPage::pageIsChanged);
  77. }
  78. {
  79. const QString label(tr("Expand Tab"));
  80. m_expandTabCheckBox = WidgetsFactory::createCheckBox(label, this);
  81. m_expandTabCheckBox->setToolTip(tr("Expand Tab into spaces"));
  82. mainLayout->addRow(m_expandTabCheckBox);
  83. addSearchItem(label, m_expandTabCheckBox->toolTip(), m_expandTabCheckBox);
  84. connect(m_expandTabCheckBox, &QCheckBox::stateChanged,
  85. this, &TextEditorPage::pageIsChanged);
  86. }
  87. {
  88. m_tabStopWidthSpinBox = WidgetsFactory::createSpinBox(this);
  89. m_tabStopWidthSpinBox->setToolTip(tr("Number of spaces to use where Tab is needed"));
  90. m_tabStopWidthSpinBox->setRange(1, 32);
  91. m_tabStopWidthSpinBox->setSingleStep(1);
  92. const QString label(tr("Tab stop width:"));
  93. mainLayout->addRow(label, m_tabStopWidthSpinBox);
  94. addSearchItem(label, m_tabStopWidthSpinBox->toolTip(), m_tabStopWidthSpinBox);
  95. connect(m_tabStopWidthSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
  96. this, &TextEditorPage::pageIsChanged);
  97. }
  98. {
  99. m_zoomDeltaSpinBox = WidgetsFactory::createSpinBox(this);
  100. m_zoomDeltaSpinBox->setToolTip(tr("Zoom delta of the basic font size"));
  101. m_zoomDeltaSpinBox->setRange(-20, 20);
  102. m_zoomDeltaSpinBox->setSingleStep(1);
  103. const QString label(tr("Zoom delta:"));
  104. mainLayout->addRow(label, m_zoomDeltaSpinBox);
  105. addSearchItem(label, m_zoomDeltaSpinBox->toolTip(), m_zoomDeltaSpinBox);
  106. connect(m_zoomDeltaSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
  107. this, &TextEditorPage::pageIsChanged);
  108. }
  109. }
  110. void TextEditorPage::loadInternal()
  111. {
  112. const auto &textConfig = ConfigMgr::getInst().getEditorConfig().getTextEditorConfig();
  113. {
  114. int idx = m_lineNumberComboBox->findData(static_cast<int>(textConfig.getLineNumberType()));
  115. Q_ASSERT(idx != -1);
  116. m_lineNumberComboBox->setCurrentIndex(idx);
  117. }
  118. m_textFoldingCheckBox->setChecked(textConfig.getTextFoldingEnabled());
  119. {
  120. int idx = m_inputModeComboBox->findData(static_cast<int>(textConfig.getInputMode()));
  121. Q_ASSERT(idx != -1);
  122. m_inputModeComboBox->setCurrentIndex(idx);
  123. }
  124. {
  125. int idx = m_centerCursorComboBox->findData(static_cast<int>(textConfig.getCenterCursor()));
  126. Q_ASSERT(idx != -1);
  127. m_centerCursorComboBox->setCurrentIndex(idx);
  128. }
  129. {
  130. int idx = m_wrapModeComboBox->findData(static_cast<int>(textConfig.getWrapMode()));
  131. Q_ASSERT(idx != -1);
  132. m_wrapModeComboBox->setCurrentIndex(idx);
  133. }
  134. m_expandTabCheckBox->setChecked(textConfig.getExpandTabEnabled());
  135. m_tabStopWidthSpinBox->setValue(textConfig.getTabStopWidth());
  136. m_zoomDeltaSpinBox->setValue(textConfig.getZoomDelta());
  137. }
  138. void TextEditorPage::saveInternal()
  139. {
  140. auto &textConfig = ConfigMgr::getInst().getEditorConfig().getTextEditorConfig();
  141. {
  142. auto lineNumber = m_lineNumberComboBox->currentData().toInt();
  143. textConfig.setLineNumberType(static_cast<TextEditorConfig::LineNumberType>(lineNumber));
  144. }
  145. textConfig.setTextFoldingEnabled(m_textFoldingCheckBox->isChecked());
  146. {
  147. auto inputMode = m_inputModeComboBox->currentData().toInt();
  148. textConfig.setInputMode(static_cast<TextEditorConfig::InputMode>(inputMode));
  149. }
  150. {
  151. auto centerCursor = m_centerCursorComboBox->currentData().toInt();
  152. textConfig.setCenterCursor(static_cast<TextEditorConfig::CenterCursor>(centerCursor));
  153. }
  154. {
  155. auto wrapMode = m_wrapModeComboBox->currentData().toInt();
  156. textConfig.setWrapMode(static_cast<TextEditorConfig::WrapMode>(wrapMode));
  157. }
  158. textConfig.setExpandTabEnabled(m_expandTabCheckBox->isChecked());
  159. textConfig.setTabStopWidth(m_tabStopWidthSpinBox->value());
  160. textConfig.setZoomDelta(m_zoomDeltaSpinBox->value());
  161. EditorPage::notifyEditorConfigChange();
  162. }
  163. QString TextEditorPage::title() const
  164. {
  165. return tr("Text Editor");
  166. }