| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 | #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_highlightWhitespace = READBOOL(QStringLiteral("highlight_whitespace"));    m_zoomDelta = READINT(QStringLiteral("zoom_delta"));    m_spellCheckEnabled = READBOOL(QStringLiteral("spell_check"));}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("highlight_whitespace")] = m_highlightWhitespace;    obj[QStringLiteral("zoom_delta")] = m_zoomDelta;    obj[QStringLiteral("spell_check")] = m_spellCheckEnabled;    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");    case InputMode::VscodeMode:        return QStringLiteral("vscode");    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 if (inputMode == QStringLiteral("vscode")) {        return InputMode::VscodeMode;    } 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_enabled){    updateConfig(m_textFoldingEnabled, p_enabled, 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_enabled){    updateConfig(m_expandTab, p_enabled, this);}bool TextEditorConfig::getHighlightWhitespaceEnabled() const{    return m_highlightWhitespace;}void TextEditorConfig::setHighlightWhitespaceEnabled(bool p_enabled){    updateConfig(m_highlightWhitespace, p_enabled, 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);}bool TextEditorConfig::isSpellCheckEnabled() const{    return m_spellCheckEnabled;}void TextEditorConfig::setSpellCheckEnabled(bool p_enabled){    updateConfig(m_spellCheckEnabled, p_enabled, this);}
 |