From 730cee0029c26b30736d71f34825855c7407dc41 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 18 Dec 2021 12:24:39 +0000 Subject: [PATCH] TextEditor: implement/expose syntax highlight options Signed-off-by: falkTX --- plugins/Cardinal/src/ImGuiTextEditor.cpp | 22 +++++++++++ plugins/Cardinal/src/ImGuiTextEditor.hpp | 2 + plugins/Cardinal/src/TextEditor.cpp | 47 +++++++----------------- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/plugins/Cardinal/src/ImGuiTextEditor.cpp b/plugins/Cardinal/src/ImGuiTextEditor.cpp index ebe4272..ff05528 100644 --- a/plugins/Cardinal/src/ImGuiTextEditor.cpp +++ b/plugins/Cardinal/src/ImGuiTextEditor.cpp @@ -73,6 +73,28 @@ std::string ImGuiTextEditor::getFile() const return pData->file; } +void ImGuiTextEditor::setLanguageDefinition(const std::string& lang) +{ + if (lang == "AngelScript") + return pData->editor.SetLanguageDefinition(TextEditor::LanguageDefinition::AngelScript()); + if (lang == "C") + return pData->editor.SetLanguageDefinition(TextEditor::LanguageDefinition::C()); + if (lang == "C++") + return pData->editor.SetLanguageDefinition(TextEditor::LanguageDefinition::CPlusPlus()); + if (lang == "GLSL") + return pData->editor.SetLanguageDefinition(TextEditor::LanguageDefinition::GLSL()); + if (lang == "HLSL") + return pData->editor.SetLanguageDefinition(TextEditor::LanguageDefinition::HLSL()); + if (lang == "Lua") + return pData->editor.SetLanguageDefinition(TextEditor::LanguageDefinition::Lua()); + if (lang == "SQL") + return pData->editor.SetLanguageDefinition(TextEditor::LanguageDefinition::SQL()); + + pData->editor.SetLanguageDefinition(TextEditor::LanguageDefinition()); +} + +// -------------------------------------------------------------------------------------------------------------------- + void ImGuiTextEditor::setText(const std::string& text) { pData->file.clear(); diff --git a/plugins/Cardinal/src/ImGuiTextEditor.hpp b/plugins/Cardinal/src/ImGuiTextEditor.hpp index f770f84..08b45e2 100644 --- a/plugins/Cardinal/src/ImGuiTextEditor.hpp +++ b/plugins/Cardinal/src/ImGuiTextEditor.hpp @@ -42,6 +42,8 @@ struct ImGuiTextEditor : ImGuiWidget void setFileWithKnownText(const std::string& file, const std::string& text); std::string getFile() const; + void setLanguageDefinition(const std::string& lang); + /** Methods from internal TextEdit. */ diff --git a/plugins/Cardinal/src/TextEditor.cpp b/plugins/Cardinal/src/TextEditor.cpp index 7d75fcb..417918b 100644 --- a/plugins/Cardinal/src/TextEditor.cpp +++ b/plugins/Cardinal/src/TextEditor.cpp @@ -36,30 +36,6 @@ "int such_highlight_much_wow() { return 1337; }\n" #define DEFAULT_WIDTH 30 -#if 0 // ndef HEADLESS -// utils -static const TextEditor::LanguageDefinition& getLangFromString(const std::string& lang) -{ - if (lang == "AngelScript") - return TextEditor::LanguageDefinition::AngelScript(); - if (lang == "C") - return TextEditor::LanguageDefinition::C(); - if (lang == "C++") - return TextEditor::LanguageDefinition::CPlusPlus(); - if (lang == "GLSL") - return TextEditor::LanguageDefinition::GLSL(); - if (lang == "HLSL") - return TextEditor::LanguageDefinition::HLSL(); - if (lang == "Lua") - return TextEditor::LanguageDefinition::Lua(); - if (lang == "SQL") - return TextEditor::LanguageDefinition::SQL(); - - static const TextEditor::LanguageDefinition none; - return none; -} -#endif - struct TextEditorModule : Module { std::string file; std::string lang = DEFAULT_LANG; @@ -88,8 +64,8 @@ struct TextEditorModule : Module { { lang = json_string_value(langJ); #ifndef HEADLESS - // if (ImGuiTextEditor* const widget = widgetPtr) - // widget->SetLanguageDefinition(getLangFromString(lang)); + if (ImGuiTextEditor* const widget = widgetPtr) + widget->setLanguageDefinition(lang); #endif } @@ -148,17 +124,20 @@ struct TextEditorLangSelectItem : MenuItem { TextEditorLangSelectItem(TextEditorModule* const textEditorModule, ImGuiTextEditor* const textEditorWidget, - const char* const textToUse) + const char* const lang) : module(textEditorModule), widget(textEditorWidget) { - text = textToUse; + text = lang; + + if (module->lang == lang) + rightText = CHECKMARK_STRING; } void onAction(const event::Action &e) override { module->lang = text; - // widget->SetLanguageDefinition(getLangFromString(text)); + widget->setLanguageDefinition(text); } }; @@ -185,12 +164,12 @@ struct TextEditorLangSelectMenuItem : MenuItem { widget(textEditorWidget) { text = "Syntax Highlight"; + rightText = RIGHT_ARROW; } - void onAction(const event::Action &e) override + Menu* createChildMenu() override { - // TODO - // new TextEditorLangSelectMenu(module, widget); + return new TextEditorLangSelectMenu(module, widget); } }; @@ -328,6 +307,7 @@ struct TextEditorModuleWidget : ModuleWidget { textEditorModule = module; textEditorWidget = new ImGuiTextEditor(); textEditorWidget->setFileWithKnownText(module->file, module->text); + textEditorWidget->setLanguageDefinition(module->lang); textEditorWidget->box.pos = Vec(RACK_GRID_WIDTH, 0); textEditorWidget->box.size = Vec((module->width - 2) * RACK_GRID_WIDTH, box.size.y); addChild(textEditorWidget); @@ -342,8 +322,7 @@ struct TextEditorModuleWidget : ModuleWidget { { menu->addChild(new MenuSeparator); menu->addChild(new TextEditorLoadFileItem(textEditorModule, textEditorWidget)); - // TODO - // menu->addChild(new TextEditorLangSelectMenuItem(textEditorModule, textEditorWidget)); + menu->addChild(new TextEditorLangSelectMenuItem(textEditorModule, textEditorWidget)); } void step() override