* @brief Constructs the QML-side frame parser code editor. */
| 54 | * @brief Constructs the QML-side frame parser code editor. |
| 55 | */ |
| 56 | DataModel::JsCodeEditor::JsCodeEditor(QQuickItem* parent) |
| 57 | : QQuickPaintedItem(parent), m_sourceId(0), m_language(0), m_readingCode(false) |
| 58 | { |
| 59 | setMipmap(false); |
| 60 | setAntialiasing(false); |
| 61 | setOpaquePainting(true); |
| 62 | setAcceptTouchEvents(true); |
| 63 | setFlag(ItemHasContents, true); |
| 64 | setFlag(ItemIsFocusScope, true); |
| 65 | setFlag(ItemAcceptsInputMethod, true); |
| 66 | setAcceptedMouseButtons(Qt::AllButtons); |
| 67 | setFillColor(Misc::ThemeManager::instance().getColor(QStringLiteral("base"))); |
| 68 | |
| 69 | m_widget.setTabReplace(true); |
| 70 | m_widget.setTabReplaceSize(2); |
| 71 | m_widget.setAutoIndentation(true); |
| 72 | m_widget.setHighlighter(new QJavascriptHighlighter()); |
| 73 | m_widget.setFont(Misc::CommonFonts::instance().monoFont()); |
| 74 | m_widget.setLayoutDirection(Qt::LeftToRight); |
| 75 | m_widget.setLanguageHint(QCodeEditor::LanguageHint::JavaScript); |
| 76 | m_widget.setCompleter(new DataModel::SerialStudioCompleter(false, &m_widget)); |
| 77 | |
| 78 | onThemeChanged(); |
| 79 | connect(&Misc::ThemeManager::instance(), |
| 80 | &Misc::ThemeManager::themeChanged, |
| 81 | this, |
| 82 | &DataModel::JsCodeEditor::onThemeChanged); |
| 83 | |
| 84 | connect(&m_widget, &QCodeEditor::textChanged, this, [this] { Q_EMIT modifiedChanged(); }); |
| 85 | connect(&m_widget, &QCodeEditor::textChanged, this, &DataModel::JsCodeEditor::textChanged); |
| 86 | |
| 87 | connect(&m_widget, &QCodeEditor::textChanged, this, [this] { |
| 88 | if (!m_readingCode) |
| 89 | ProjectModel::instance().storeFrameParserCode(m_sourceId, text()); |
| 90 | }); |
| 91 | |
| 92 | connect(&DataModel::ProjectModel::instance(), |
| 93 | &DataModel::ProjectModel::frameParserCodeChanged, |
| 94 | this, |
| 95 | &DataModel::JsCodeEditor::readCode); |
| 96 | |
| 97 | connect(&DataModel::ProjectModel::instance(), |
| 98 | &DataModel::ProjectModel::frameParserLanguageChanged, |
| 99 | this, |
| 100 | &DataModel::JsCodeEditor::readCode); |
| 101 | |
| 102 | connect(&DataModel::ProjectModel::instance(), |
| 103 | &DataModel::ProjectModel::sourceFrameParserLanguageChanged, |
| 104 | this, |
| 105 | [this](int sourceId) { |
| 106 | if (sourceId == m_sourceId) |
| 107 | readCode(); |
| 108 | }); |
| 109 | |
| 110 | connect(&DataModel::ProjectModel::instance(), |
| 111 | &DataModel::ProjectModel::sourceFrameParserCodeChanged, |
| 112 | this, |
| 113 | [this](int sourceId) { |
nothing calls this directly
no test coverage detected