mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 22:09:52 +08:00
247 lines
6.4 KiB
C++
247 lines
6.4 KiB
C++
#include "texteditorconfig.h"
|
|
|
|
using namespace vnotex;
|
|
|
|
#define READSTR(key) readString(appObj, userObj, (key))
|
|
#define READBOOL(key) readBool(appObj, userObj, (key))
|
|
#define READINT(key) readInt(appObj, userObj, (key))
|
|
|
|
TextEditorConfig::TextEditorConfig(ConfigMgr *p_mgr, IConfig *p_topConfig)
|
|
: IConfig(p_mgr, p_topConfig)
|
|
{
|
|
m_sessionName = QStringLiteral("text_editor");
|
|
}
|
|
|
|
void TextEditorConfig::init(const QJsonObject &p_app,
|
|
const QJsonObject &p_user)
|
|
{
|
|
const auto appObj = p_app.value(m_sessionName).toObject();
|
|
const auto userObj = p_user.value(m_sessionName).toObject();
|
|
|
|
{
|
|
auto lineNumber = READSTR(QStringLiteral("line_number"));
|
|
m_lineNumberType = stringToLineNumberType(lineNumber);
|
|
}
|
|
|
|
m_textFoldingEnabled = READBOOL(QStringLiteral("text_folding"));
|
|
|
|
{
|
|
auto inputMode = READSTR(QStringLiteral("input_mode"));
|
|
m_inputMode = stringToInputMode(inputMode);
|
|
}
|
|
|
|
{
|
|
auto centerCursor = READSTR(QStringLiteral("center_cursor"));
|
|
m_centerCursor = stringToCenterCursor(centerCursor);
|
|
}
|
|
|
|
{
|
|
auto wrapMode = READSTR(QStringLiteral("wrap_mode"));
|
|
m_wrapMode = stringToWrapMode(wrapMode);
|
|
}
|
|
|
|
m_expandTab = READBOOL(QStringLiteral("expand_tab"));
|
|
|
|
m_tabStopWidth = READINT(QStringLiteral("tab_stop_width"));
|
|
|
|
m_zoomDelta = READINT(QStringLiteral("zoom_delta"));
|
|
}
|
|
|
|
QJsonObject TextEditorConfig::toJson() const
|
|
{
|
|
QJsonObject obj;
|
|
obj[QStringLiteral("line_number")] = lineNumberTypeToString(m_lineNumberType);
|
|
obj[QStringLiteral("text_folding")] = m_textFoldingEnabled;
|
|
obj[QStringLiteral("input_mode")] = inputModeToString(m_inputMode);
|
|
obj[QStringLiteral("center_cursor")] = centerCursorToString(m_centerCursor);
|
|
obj[QStringLiteral("wrap_mode")] = wrapModeToString(m_wrapMode);
|
|
obj[QStringLiteral("expand_tab")] = m_expandTab;
|
|
obj[QStringLiteral("tab_stop_width")] = m_tabStopWidth;
|
|
obj[QStringLiteral("zoom_delta")] = m_zoomDelta;
|
|
return obj;
|
|
}
|
|
|
|
QString TextEditorConfig::lineNumberTypeToString(LineNumberType p_type) const
|
|
{
|
|
switch (p_type) {
|
|
case LineNumberType::None:
|
|
return QStringLiteral("none");
|
|
|
|
case LineNumberType::Relative:
|
|
return QStringLiteral("relative");
|
|
|
|
default:
|
|
return QStringLiteral("absolute");
|
|
}
|
|
}
|
|
|
|
TextEditorConfig::LineNumberType TextEditorConfig::stringToLineNumberType(const QString &p_str) const
|
|
{
|
|
auto lineNumber = p_str.toLower();
|
|
if (lineNumber == QStringLiteral("none")) {
|
|
return LineNumberType::None;
|
|
} else if (lineNumber == QStringLiteral("relative")) {
|
|
return LineNumberType::Relative;
|
|
} else {
|
|
return LineNumberType::Absolute;
|
|
}
|
|
}
|
|
|
|
QString TextEditorConfig::inputModeToString(InputMode p_mode) const
|
|
{
|
|
switch (p_mode) {
|
|
case InputMode::ViMode:
|
|
return QStringLiteral("vi");
|
|
|
|
default:
|
|
return QStringLiteral("normal");
|
|
}
|
|
}
|
|
|
|
TextEditorConfig::InputMode TextEditorConfig::stringToInputMode(const QString &p_str) const
|
|
{
|
|
auto inputMode = p_str.toLower();
|
|
if (inputMode == QStringLiteral("vi")) {
|
|
return InputMode::ViMode;
|
|
} else {
|
|
return InputMode::NormalMode;
|
|
}
|
|
}
|
|
|
|
QString TextEditorConfig::centerCursorToString(CenterCursor p_cursor) const
|
|
{
|
|
switch (p_cursor) {
|
|
case CenterCursor::AlwaysCenter:
|
|
return QStringLiteral("always");
|
|
|
|
case CenterCursor::CenterOnBottom:
|
|
return QStringLiteral("bottom");
|
|
|
|
default:
|
|
return QStringLiteral("never");
|
|
}
|
|
}
|
|
|
|
TextEditorConfig::CenterCursor TextEditorConfig::stringToCenterCursor(const QString &p_str) const
|
|
{
|
|
auto centerCursor = p_str.toLower();
|
|
if (centerCursor == QStringLiteral("always")) {
|
|
return CenterCursor::AlwaysCenter;
|
|
} else if (centerCursor == QStringLiteral("bottom")) {
|
|
return CenterCursor::CenterOnBottom;
|
|
} else {
|
|
return CenterCursor::NeverCenter;
|
|
}
|
|
}
|
|
|
|
QString TextEditorConfig::wrapModeToString(WrapMode p_mode) const
|
|
{
|
|
switch (p_mode) {
|
|
case WrapMode::NoWrap:
|
|
return QStringLiteral("none");
|
|
|
|
case WrapMode::WrapAnywhere:
|
|
return QStringLiteral("anywhere");
|
|
|
|
case WrapMode::WordWrapOrAnywhere:
|
|
return QStringLiteral("word_anywhere");
|
|
|
|
default:
|
|
return QStringLiteral("word");
|
|
}
|
|
}
|
|
|
|
TextEditorConfig::WrapMode TextEditorConfig::stringToWrapMode(const QString &p_str) const
|
|
{
|
|
auto centerCursor = p_str.toLower();
|
|
if (centerCursor == QStringLiteral("none")) {
|
|
return WrapMode::NoWrap;
|
|
} else if (centerCursor == QStringLiteral("anywhere")) {
|
|
return WrapMode::WrapAnywhere;
|
|
} else if (centerCursor == QStringLiteral("word_anywhere")) {
|
|
return WrapMode::WordWrapOrAnywhere;
|
|
} else {
|
|
return WrapMode::WordWrap;
|
|
}
|
|
}
|
|
|
|
TextEditorConfig::LineNumberType TextEditorConfig::getLineNumberType() const
|
|
{
|
|
return m_lineNumberType;
|
|
}
|
|
|
|
void TextEditorConfig::setLineNumberType(TextEditorConfig::LineNumberType p_type)
|
|
{
|
|
updateConfig(m_lineNumberType, p_type, this);
|
|
}
|
|
|
|
bool TextEditorConfig::getTextFoldingEnabled() const
|
|
{
|
|
return m_textFoldingEnabled;
|
|
}
|
|
|
|
void TextEditorConfig::setTextFoldingEnabled(bool p_enable)
|
|
{
|
|
updateConfig(m_textFoldingEnabled, p_enable, this);
|
|
}
|
|
|
|
TextEditorConfig::InputMode TextEditorConfig::getInputMode() const
|
|
{
|
|
return m_inputMode;
|
|
}
|
|
|
|
void TextEditorConfig::setInputMode(TextEditorConfig::InputMode p_mode)
|
|
{
|
|
updateConfig(m_inputMode, p_mode, this);
|
|
}
|
|
|
|
TextEditorConfig::CenterCursor TextEditorConfig::getCenterCursor() const
|
|
{
|
|
return m_centerCursor;
|
|
}
|
|
|
|
void TextEditorConfig::setCenterCursor(TextEditorConfig::CenterCursor p_centerCursor)
|
|
{
|
|
updateConfig(m_centerCursor, p_centerCursor, this);
|
|
}
|
|
|
|
TextEditorConfig::WrapMode TextEditorConfig::getWrapMode() const
|
|
{
|
|
return m_wrapMode;
|
|
}
|
|
|
|
void TextEditorConfig::setWrapMode(TextEditorConfig::WrapMode p_mode)
|
|
{
|
|
updateConfig(m_wrapMode, p_mode, this);
|
|
}
|
|
|
|
bool TextEditorConfig::getExpandTabEnabled() const
|
|
{
|
|
return m_expandTab;
|
|
}
|
|
|
|
void TextEditorConfig::setExpandTabEnabled(bool p_enable)
|
|
{
|
|
updateConfig(m_expandTab, p_enable, this);
|
|
}
|
|
|
|
int TextEditorConfig::getTabStopWidth() const
|
|
{
|
|
return m_tabStopWidth;
|
|
}
|
|
|
|
void TextEditorConfig::setTabStopWidth(int p_width)
|
|
{
|
|
updateConfig(m_tabStopWidth, p_width, this);
|
|
}
|
|
|
|
int TextEditorConfig::getZoomDelta() const
|
|
{
|
|
return m_zoomDelta;
|
|
}
|
|
|
|
void TextEditorConfig::setZoomDelta(int p_delta)
|
|
{
|
|
updateConfig(m_zoomDelta, p_delta, this);
|
|
}
|