From bfd4013fd9738c841e0bea47f99a11f5f1fd4e43 Mon Sep 17 00:00:00 2001 From: iisaev Date: Sat, 24 Oct 2026 10:01:16 +0200 Subject: [PATCH] Schema Tools: Data Editor and command palette built from mod schemas Co-Authored-By: Claude Opus 5.5 --- .gitattributes | 30 ++ .gitignore | 37 ++ locale/en.properties | 32 ++ locale/es.properties | 32 ++ locale/ja.properties | 32 ++ locale/ko.properties | 32 ++ locale/ru.properties | 32 ++ locale/vi.properties | 32 ++ locale/zh.properties | 32 ++ manifest.json | 28 + mod.jpg | Bin 0 -> 163670 bytes src/DataEditor/DataEditorWindow.cs | 501 ++++++++++++++++++ src/Palette/CommandPaletteWindow.cs | 223 ++++++++ src/Tools/DataEditorToolBoxButton.cs | 20 + src/Tools/DataEditorToolProvider.cs | 22 + src/Tools/PaletteToolBoxButton.cs | 20 + src/Tools/PaletteToolProvider.cs | 22 + test_suites/edit/manifest.json | 10 + test_suites/edit/src/SchemaToolsTestDriver.cs | 216 ++++++++ .../edit/src/SchemaToolsTestInitializer.cs | 28 + tests/SchemaLineTests.cs | 62 +++ 21 files changed, 1443 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 locale/en.properties create mode 100644 locale/es.properties create mode 100644 locale/ja.properties create mode 100644 locale/ko.properties create mode 100644 locale/ru.properties create mode 100644 locale/vi.properties create mode 100644 locale/zh.properties create mode 100644 manifest.json create mode 100644 mod.jpg create mode 100644 src/DataEditor/DataEditorWindow.cs create mode 100644 src/Palette/CommandPaletteWindow.cs create mode 100644 src/Tools/DataEditorToolBoxButton.cs create mode 100644 src/Tools/DataEditorToolProvider.cs create mode 100644 src/Tools/PaletteToolBoxButton.cs create mode 100644 src/Tools/PaletteToolProvider.cs create mode 100644 test_suites/edit/manifest.json create mode 100644 test_suites/edit/src/SchemaToolsTestDriver.cs create mode 100644 test_suites/edit/src/SchemaToolsTestInitializer.cs create mode 100644 tests/SchemaLineTests.cs diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..3030c1a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,30 @@ +# Line endings: LF everywhere, on every OS, whatever core.autocrlf says. +* text=auto eol=lf + +# cmd.exe misreads labels and goto in LF batch files, so they stay CRLF. +*.bat text eol=crlf +*.cmd text eol=crlf + +# Binaries: never converted, never diffed as text. +*.png binary +*.jpg binary +*.jpeg binary +*.webp binary +*.svg text +*.ogg binary +*.wav binary +*.mp3 binary +*.ttf binary +*.otf binary +*.woff binary +*.woff2 binary +*.dll binary +*.so binary +*.dylib binary +*.pdb binary +*.exe binary +*.zip binary +*.pck binary +*.moc3 binary +*.res binary +*.scn binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c301ca8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# Godot 4.x +.godot/ +.idea/ +sdk/ +bin/ +obj/ + +#ai +.omo/ +.opencode/ + +gen/ +obj/ +bin/ + +*.tres~ +*.tscn~ + +# GDScript LSP +.godot/ + +# Export +*.exe +*.dmg +*.apk +*.aab +*.pck +*.zip +*.log + +# OS +.DS_Store +Thumbs.db + +# Editor +*.import +*.godot.uid diff --git a/locale/en.properties b/locale/en.properties new file mode 100644 index 0000000..7fe1bdf --- /dev/null +++ b/locale/en.properties @@ -0,0 +1,32 @@ +mod_schema_tools_name = Schema Tools +mod_schema_tools_desc = Editors built from annotations — RPG Maker plugin parameters turned into data any mod ships: schemas/*.json files describe scenario actions and commands and the fields of entity kinds; the mods' schemas merge, so a mod that adds a field to someone else's kind gets an editor for it at once. The Data Editor window edits any described kind with forms, the command palette builds scenario lines with a form and inserts them into the editor, the validator checks every mod's scenarios and data against the schemas. +tools/schema/palette/title = Command palette +tools/schema/palette/hint = Pick an action or a command and fill the form: the line appears below and goes into the open scenario editor under the caret. +tools/schema/palette/no_editor = No scenario is open: open one in the scenario editor or copy the line. +tools/schema/palette/inserted = The line went into {0} +tools/schema/palette/insert = Insert +tools/schema/palette/insert_tip = Insert the line into the open scenario below the caret +tools/schema/palette/copy = Copy +tools/schema/palette/copy_tip = Copy the line to the clipboard +tools/schema/palette/section_list = Actions and commands +tools/schema/palette/search = Search: damage, item, check… +tools/schema/palette/pick = Pick an action on the left +tools/schema/palette/section_line = Scenario line +tools/schema/palette/count = Described: {0} actions, {1} commands +tools/schema/described_by = Described by the mod {0} +tools/schema/palette/arrow_tip = The label to jump to (:name) +tools/schema/palette/line_ok = ✔ The line is fine +tools/schema/palette/copied = Line copied +tools/schema/category/stats = Stats +tools/schema/category/items = Items +tools/schema/category/characters = Characters +tools/schema/category/battle = Battle +tools/schema/category/world = World +tools/schema/category/quests = Quests +tools/schema/category/dialog = Dialog +tools/schema/category/flow = Flow +tools/schema/data_editor/title = Data Editor +tools/schema/data_editor/hint = On the left is everything the mods described: stats, classes, items, characters, skills. Fields added by different mods are gathered into one form. +tools/schema/data_editor/section_kinds = Data kinds +tools/schema/data_editor/search_kind = Search a kind +tools/schema/data_editor/kinds = Described kinds: {0} diff --git a/locale/es.properties b/locale/es.properties new file mode 100644 index 0000000..6654b37 --- /dev/null +++ b/locale/es.properties @@ -0,0 +1,32 @@ +mod_schema_tools_name = Herramientas de esquemas +mod_schema_tools_desc = Editores construidos a partir de anotaciones: los parámetros de plugins de RPG Maker convertidos en datos que cualquier mod incluye. Los archivos schemas/*.json describen acciones y comandos de escenarios y los campos de los tipos de entidades; los esquemas de los mods se fusionan, así que un mod que añade un campo a un tipo ajeno obtiene su editor al instante. La ventana Editor de datos edita cualquier tipo descrito con formularios, la paleta de comandos arma líneas de escenario con un formulario y las inserta en el editor, el validador comprueba los escenarios y datos de todos los mods según los esquemas. +tools/schema/palette/title = Paleta de comandos +tools/schema/palette/hint = Elige una acción o un comando y rellena el formulario: la línea aparece abajo y se inserta en el editor de escenarios abierto bajo el cursor. +tools/schema/palette/no_editor = No hay ningún escenario abierto: abre uno en el editor de escenarios o copia la línea. +tools/schema/palette/inserted = Línea insertada en {0} +tools/schema/palette/insert = Insertar +tools/schema/palette/insert_tip = Insertar la línea en el escenario abierto bajo el cursor +tools/schema/palette/copy = Copiar +tools/schema/palette/copy_tip = Copiar la línea al portapapeles +tools/schema/palette/section_list = Acciones y comandos +tools/schema/palette/search = Buscar: daño, objeto, check… +tools/schema/palette/pick = Elige una acción a la izquierda +tools/schema/palette/section_line = Línea de escenario +tools/schema/palette/count = Descritos: {0} acciones, {1} comandos +tools/schema/described_by = Descrito por el mod {0} +tools/schema/palette/arrow_tip = La etiqueta a la que saltar (:nombre) +tools/schema/palette/line_ok = ✔ La línea está bien +tools/schema/palette/copied = Línea copiada +tools/schema/category/stats = Estadísticas +tools/schema/category/items = Objetos +tools/schema/category/characters = Personajes +tools/schema/category/battle = Combate +tools/schema/category/world = Mundo +tools/schema/category/quests = Misiones +tools/schema/category/dialog = Diálogo +tools/schema/category/flow = Flujo +tools/schema/data_editor/title = Editor de datos +tools/schema/data_editor/hint = A la izquierda está todo lo que describieron los mods: estadísticas, clases, objetos, personajes, habilidades. Los campos que añadieron distintos mods se reúnen en un formulario. +tools/schema/data_editor/section_kinds = Tipos de datos +tools/schema/data_editor/search_kind = Buscar un tipo +tools/schema/data_editor/kinds = Tipos descritos: {0} diff --git a/locale/ja.properties b/locale/ja.properties new file mode 100644 index 0000000..78ad9ca --- /dev/null +++ b/locale/ja.properties @@ -0,0 +1,32 @@ +mod_schema_tools_name = スキーマツール +mod_schema_tools_desc = 注釈から作るエディター——RPG Maker のプラグインパラメーターを、どの MOD でも同梱できるデータにしたもの:schemas/*.json がシナリオの行動とコマンド、エンティティの種類のフィールドを記述する。各 MOD のスキーマは統合されるので、他人の種類にフィールドを足した MOD はすぐにそのエディターを得る。「データエディター」ウィンドウは記述された種類をフォームで編集し、コマンドパレットはフォームでシナリオの行を組み立ててエディターに挿入し、バリデーターは全 MOD のシナリオとデータをスキーマで検査する。 +tools/schema/palette/title = コマンドパレット +tools/schema/palette/hint = 行動かコマンドを選んでフォームを埋めると、下に行が現れ、開いているシナリオエディターのカーソル下に挿入される。 +tools/schema/palette/no_editor = 開いているシナリオがない:シナリオエディターで開くか、行をコピーする。 +tools/schema/palette/inserted = {0} に挿入した +tools/schema/palette/insert = 挿入 +tools/schema/palette/insert_tip = 開いているシナリオのカーソル下に行を挿入 +tools/schema/palette/copy = コピー +tools/schema/palette/copy_tip = 行をクリップボードにコピー +tools/schema/palette/section_list = 行動とコマンド +tools/schema/palette/search = 検索:ダメージ、アイテム、check… +tools/schema/palette/pick = 左で行動を選ぶ +tools/schema/palette/section_line = シナリオの行 +tools/schema/palette/count = 記述済み:行動 {0}、コマンド {1} +tools/schema/described_by = MOD {0} による記述 +tools/schema/palette/arrow_tip = ジャンプ先のラベル(:名前) +tools/schema/palette/line_ok = ✔ 行に問題なし +tools/schema/palette/copied = 行をコピーした +tools/schema/category/stats = ステータス +tools/schema/category/items = アイテム +tools/schema/category/characters = キャラクター +tools/schema/category/battle = 戦闘 +tools/schema/category/world = ワールド +tools/schema/category/quests = クエスト +tools/schema/category/dialog = 会話 +tools/schema/category/flow = 進行 +tools/schema/data_editor/title = データエディター +tools/schema/data_editor/hint = 左には MOD が記述したすべて:ステータス、職業、アイテム、キャラクター、スキル。別々の MOD が足したフィールドが一つのフォームにまとまる。 +tools/schema/data_editor/section_kinds = データの種類 +tools/schema/data_editor/search_kind = 種類を検索 +tools/schema/data_editor/kinds = 記述された種類:{0} diff --git a/locale/ko.properties b/locale/ko.properties new file mode 100644 index 0000000..94ec6a5 --- /dev/null +++ b/locale/ko.properties @@ -0,0 +1,32 @@ +mod_schema_tools_name = 스키마 도구 +mod_schema_tools_desc = 주석으로 만드는 에디터 — RPG Maker 플러그인 매개변수를 어떤 모드든 담을 수 있는 데이터로 바꾼 것: schemas/*.json 파일이 시나리오의 행동과 명령, 엔티티 종류의 필드를 설명합니다. 모드들의 스키마가 합쳐지므로, 남의 종류에 필드를 더한 모드는 즉시 그 에디터를 얻습니다. ‘데이터 에디터’ 창은 설명된 모든 종류를 양식으로 편집하고, 명령 팔레트는 양식으로 시나리오 줄을 만들어 에디터에 넣으며, 검증기는 모든 모드의 시나리오와 데이터를 스키마로 검사합니다. +tools/schema/palette/title = 명령 팔레트 +tools/schema/palette/hint = 행동이나 명령을 고르고 양식을 채우세요. 아래에 줄이 나타나고, 열린 시나리오 에디터의 커서 아래에 들어갑니다. +tools/schema/palette/no_editor = 열린 시나리오가 없습니다: 시나리오 에디터에서 열거나 줄을 복사하세요. +tools/schema/palette/inserted = {0}에 넣었습니다 +tools/schema/palette/insert = 넣기 +tools/schema/palette/insert_tip = 열린 시나리오의 커서 아래에 줄을 넣기 +tools/schema/palette/copy = 복사 +tools/schema/palette/copy_tip = 줄을 클립보드에 복사 +tools/schema/palette/section_list = 행동과 명령 +tools/schema/palette/search = 검색: 피해, 아이템, check… +tools/schema/palette/pick = 왼쪽에서 행동을 고르세요 +tools/schema/palette/section_line = 시나리오 줄 +tools/schema/palette/count = 설명됨: 행동 {0}개, 명령 {1}개 +tools/schema/described_by = 모드 {0}의 설명 +tools/schema/palette/arrow_tip = 이동할 라벨(:이름) +tools/schema/palette/line_ok = ✔ 줄에 문제 없음 +tools/schema/palette/copied = 줄을 복사했습니다 +tools/schema/category/stats = 능력치 +tools/schema/category/items = 아이템 +tools/schema/category/characters = 캐릭터 +tools/schema/category/battle = 전투 +tools/schema/category/world = 월드 +tools/schema/category/quests = 퀘스트 +tools/schema/category/dialog = 대화 +tools/schema/category/flow = 흐름 +tools/schema/data_editor/title = 데이터 에디터 +tools/schema/data_editor/hint = 왼쪽에는 모드들이 설명한 모든 것: 능력치, 직업, 아이템, 캐릭터, 스킬. 여러 모드가 더한 필드가 한 양식에 모입니다. +tools/schema/data_editor/section_kinds = 데이터 종류 +tools/schema/data_editor/search_kind = 종류 검색 +tools/schema/data_editor/kinds = 설명된 종류: {0} diff --git a/locale/ru.properties b/locale/ru.properties new file mode 100644 index 0000000..cd69644 --- /dev/null +++ b/locale/ru.properties @@ -0,0 +1,32 @@ +mod_schema_tools_name = Инструменты схем +mod_schema_tools_desc = Редакторы по аннотациям — идея параметров плагинов RPG Maker, ставшая данными любого мода: файлы schemas/*.json описывают действия и команды сценариев и поля видов сущностей; схемы модов сливаются, поэтому мод, добавивший поле к чужому виду, сразу получает для него редактор. Окно «Редактор данных» правит любой описанный вид формами, палитра команд собирает строки сценария формой и вставляет их в редактор, валидатор проверяет сценарии и данные всех модов по схемам. +tools/schema/palette/title = Палитра команд +tools/schema/palette/hint = Выберите действие или команду, заполните форму — строка появится ниже и вставится в открытый редактор сценариев под курсор. +tools/schema/palette/no_editor = Нет открытого сценария: откройте его в редакторе сценариев или скопируйте строку. +tools/schema/palette/inserted = Строка вставлена в {0} +tools/schema/palette/insert = Вставить +tools/schema/palette/insert_tip = Вставить строку в открытый сценарий под курсор +tools/schema/palette/copy = Копировать +tools/schema/palette/copy_tip = Скопировать строку в буфер обмена +tools/schema/palette/section_list = Действия и команды +tools/schema/palette/search = Поиск: урон, предмет, check… +tools/schema/palette/pick = Выберите действие слева +tools/schema/palette/section_line = Строка сценария +tools/schema/palette/count = Описано: {0} действий, {1} команд +tools/schema/described_by = Описание из мода {0} +tools/schema/palette/arrow_tip = Метка, на которую перейти (:имя) +tools/schema/palette/line_ok = ✔ Строка в порядке +tools/schema/palette/copied = Строка скопирована +tools/schema/category/stats = Статы +tools/schema/category/items = Предметы +tools/schema/category/characters = Персонажи +tools/schema/category/battle = Бой +tools/schema/category/world = Мир +tools/schema/category/quests = Квесты +tools/schema/category/dialog = Диалог +tools/schema/category/flow = Ход сценария +tools/schema/data_editor/title = Редактор данных +tools/schema/data_editor/hint = Слева — всё, что описали моды: статы, классы, предметы, персонажи, навыки. Поля, которые добавили разные моды, собраны в одну форму. +tools/schema/data_editor/section_kinds = Виды данных +tools/schema/data_editor/search_kind = Поиск вида +tools/schema/data_editor/kinds = Видов с описанием: {0} diff --git a/locale/vi.properties b/locale/vi.properties new file mode 100644 index 0000000..722edd7 --- /dev/null +++ b/locale/vi.properties @@ -0,0 +1,32 @@ +mod_schema_tools_name = Công cụ lược đồ +mod_schema_tools_desc = Trình sửa dựng từ chú thích — tham số plugin của RPG Maker biến thành dữ liệu mà mọi mod đều kèm được: các tệp schemas/*.json mô tả hành động, lệnh kịch bản và trường của các loại thực thể; lược đồ của các mod được gộp, nên mod thêm trường cho loại của người khác có ngay trình sửa cho nó. Cửa sổ Trình sửa dữ liệu sửa mọi loại đã mô tả bằng biểu mẫu, bảng lệnh dựng dòng kịch bản bằng biểu mẫu và chèn vào trình sửa, trình kiểm tra soát kịch bản và dữ liệu của mọi mod theo lược đồ. +tools/schema/palette/title = Bảng lệnh +tools/schema/palette/hint = Chọn một hành động hoặc lệnh và điền biểu mẫu: dòng lệnh hiện bên dưới và được chèn vào trình sửa kịch bản đang mở, dưới con trỏ. +tools/schema/palette/no_editor = Chưa mở kịch bản nào: hãy mở trong trình sửa kịch bản hoặc sao chép dòng. +tools/schema/palette/inserted = Đã chèn vào {0} +tools/schema/palette/insert = Chèn +tools/schema/palette/insert_tip = Chèn dòng vào kịch bản đang mở, dưới con trỏ +tools/schema/palette/copy = Sao chép +tools/schema/palette/copy_tip = Sao chép dòng vào bộ nhớ tạm +tools/schema/palette/section_list = Hành động và lệnh +tools/schema/palette/search = Tìm: sát thương, vật phẩm, check… +tools/schema/palette/pick = Chọn một hành động bên trái +tools/schema/palette/section_line = Dòng kịch bản +tools/schema/palette/count = Đã mô tả: {0} hành động, {1} lệnh +tools/schema/described_by = Mô tả từ mod {0} +tools/schema/palette/arrow_tip = Nhãn để nhảy tới (:tên) +tools/schema/palette/line_ok = ✔ Dòng không có lỗi +tools/schema/palette/copied = Đã sao chép dòng +tools/schema/category/stats = Chỉ số +tools/schema/category/items = Vật phẩm +tools/schema/category/characters = Nhân vật +tools/schema/category/battle = Chiến đấu +tools/schema/category/world = Thế giới +tools/schema/category/quests = Nhiệm vụ +tools/schema/category/dialog = Hội thoại +tools/schema/category/flow = Luồng +tools/schema/data_editor/title = Trình sửa dữ liệu +tools/schema/data_editor/hint = Bên trái là mọi thứ các mod đã mô tả: chỉ số, lớp, vật phẩm, nhân vật, kỹ năng. Các trường do nhiều mod thêm được gom vào một biểu mẫu. +tools/schema/data_editor/section_kinds = Loại dữ liệu +tools/schema/data_editor/search_kind = Tìm loại +tools/schema/data_editor/kinds = Loại đã mô tả: {0} diff --git a/locale/zh.properties b/locale/zh.properties new file mode 100644 index 0000000..2d9c8e8 --- /dev/null +++ b/locale/zh.properties @@ -0,0 +1,32 @@ +mod_schema_tools_name = 模式工具 +mod_schema_tools_desc = 基于注解的编辑器——把 RPG Maker 的插件参数变成任何模组都能附带的数据:schemas/*.json 文件描述剧本的动作与命令以及实体类型的字段;各模组的模式会合并,所以给别人的类型加字段的模组立刻就有对应的编辑器。“数据编辑器”窗口用表单编辑任何已描述的类型,命令面板用表单拼出剧本行并插入编辑器,验证器按模式检查所有模组的剧本和数据。 +tools/schema/palette/title = 命令面板 +tools/schema/palette/hint = 选择一个动作或命令并填写表单:下方会出现该行,并插入到已打开的剧本编辑器的光标下方。 +tools/schema/palette/no_editor = 没有打开的剧本:请在剧本编辑器中打开一个,或复制该行。 +tools/schema/palette/inserted = 已插入到 {0} +tools/schema/palette/insert = 插入 +tools/schema/palette/insert_tip = 把这一行插入到已打开剧本的光标下方 +tools/schema/palette/copy = 复制 +tools/schema/palette/copy_tip = 把这一行复制到剪贴板 +tools/schema/palette/section_list = 动作与命令 +tools/schema/palette/search = 搜索:伤害、物品、check… +tools/schema/palette/pick = 在左侧选择一个动作 +tools/schema/palette/section_line = 剧本行 +tools/schema/palette/count = 已描述:{0} 个动作,{1} 个命令 +tools/schema/described_by = 由模组 {0} 描述 +tools/schema/palette/arrow_tip = 要跳转到的标签(:名称) +tools/schema/palette/line_ok = ✔ 该行没有问题 +tools/schema/palette/copied = 已复制该行 +tools/schema/category/stats = 属性 +tools/schema/category/items = 物品 +tools/schema/category/characters = 角色 +tools/schema/category/battle = 战斗 +tools/schema/category/world = 世界 +tools/schema/category/quests = 任务 +tools/schema/category/dialog = 对话 +tools/schema/category/flow = 流程 +tools/schema/data_editor/title = 数据编辑器 +tools/schema/data_editor/hint = 左侧是各模组描述的全部内容:属性、职业、物品、角色、技能。不同模组添加的字段汇集在同一个表单中。 +tools/schema/data_editor/section_kinds = 数据类型 +tools/schema/data_editor/search_kind = 搜索类型 +tools/schema/data_editor/kinds = 已描述的类型:{0} diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..bb81ccf --- /dev/null +++ b/manifest.json @@ -0,0 +1,28 @@ +{ + "id": "schema_tools", + "name": "Schema Tools", + "version": "1.0.0", + "author": "ct", + "description": "The authoring tools over the schemas of schema_base: the Data Editor window edits any described entity kind with forms built from the merged fields of all mods (entity pickers, formula fields, lists of traits, stat maps, texts in every language), and the command palette builds scenario lines from action and command schemas, checks them and inserts them into the scenario editor. The schemas themselves live with the mods that own the actions and kinds.", + "category": "tools, editor", + "sources": [ + "src/**/*.cs" + ], + "test_sources": [ + "tests/*.cs" + ], + "depends": [ + "editor_tools>=1", + "dialog_base>=1", + "ui_base>=1", + "schema_base>=1" + ], + "test_suites": [ + { + "id": "edit", + "activate": [ + "--itest=schema_tools_edit" + ] + } + ] +} diff --git a/mod.jpg b/mod.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a49b1e296da17201a1003ed428b65ff2f2611266 GIT binary patch literal 163670 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 literal 0 HcmV?d00001 diff --git a/src/DataEditor/DataEditorWindow.cs b/src/DataEditor/DataEditorWindow.cs new file mode 100644 index 0000000..4354860 --- /dev/null +++ b/src/DataEditor/DataEditorWindow.cs @@ -0,0 +1,501 @@ +namespace Cthangover.Tools.Schemas +{ + using Cthangover.Mods.Schemas; + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text.Json; + using System.Text.Json.Nodes; + using Cthangover.Core.Mods; + using Cthangover.Core.Mods.Resolvers; + using Cthangover.Core.UI.Theming; + using Cthangover.Mods.Interface.Theming; + using Cthangover.Core.Utils; + using Cthangover.Mods.Interface.Tool; + using Cthangover.Tools.Common; + using Cthangover.Tools.EntityEditor; + using Cthangover.Tools.Services; + using Godot; + + /// + /// The data editor (RPG Maker's F9 "Database", built from schemas instead of fixed tabs): every entity kind some mod described + /// in a schema — stats, archetypes, items, characters, battle actions, shops, equipment + /// slots — on the left, the entities of the chosen kind in one writable mod in the + /// middle, and a form on the right built from the merged fields of all mods' schemas. + /// + /// That merge is the point: the items mod describes price and picture, the equipment + /// mod adds "Equip" and "Traits", the stats add "Archetype" and "Stats" to characters, + /// and one form shows them all; a mod that adds a field to any kind gets an editor for + /// it by shipping a schema file, without touching this window or the kind's owner. + /// Properties no schema describes stay editable as JSON under "other fields" and are + /// written back as they were. + /// + /// Loading and saving reuse the data editors' : files are kept + /// as JSON trees, only changed files are written, texts go into the mod's locale files, + /// and Save drops the game's caches so the running game sees the change at once. + /// + public partial class DataEditorWindow : ToolWindow + { + private readonly List mods = new(); + private readonly List editors = new(); + private readonly List localeEditors = new(); + private OptionButton modPicker; + private FilteredList kindList; + private FilteredList entityList; + private VBoxContainer form; + private Label kindLabel; + private Label fileLabel; + private LineEdit idEdit; + private CodeEdit otherEdit; + private Label emptyHint; + private KindSchema kind; + private EntityDocument document; + private EntityRecord selected; + private List languages = new(); + private string modId; + private bool suppress; + private bool editing; + + /// Builds the window over the current schema catalog. + public DataEditorWindow() : base("tools/schema/data_editor/title") + { + CthangoverTheme.Apply(this); + BuildUi(); + FillMods(); + FillKinds(); + SetHint(ToolUi.Tr("tools/schema/data_editor/hint")); + } + + /// The kind shown, or null. + public string KindId => kind?.Kind; + + /// The edited mod. + public string ModId => modId; + + /// The selected entity's id, or null. + public string SelectedId => selected?.Id; + + /// The edited entities of the kind in the mod. + public EntityDocument Document => document; + + /// Shows (asks about unsaved changes first). + public void OpenKind(string kindName) + { + RunDiscardingChanges(() => DoOpen(kindName, modId), () => kindList.Select(kind?.Kind)); + } + + /// Shows the kind in another mod (asks about unsaved changes first). + public void OpenMod(string mod) + { + RunDiscardingChanges(() => DoOpen(kind?.Kind, mod), () => modPicker.Select(mods.IndexOf(modId))); + } + + /// Selects an entity by id (null: none). + public void Select(string id) + { + selected = id == null ? null : document?.Find(id); + entityList.Select(selected?.Id); + ShowSelected(); + } + + /// The editor of a field by key (tests drive the form through it). + public ISchemaFieldEditor Editor(string key) => editors.FirstOrDefault(e => string.Equals(e.Field.Key, key, StringComparison.OrdinalIgnoreCase)); + + /// Copies the form into the selected entity (what every edit does). + public void ApplyForm() => WriteForm(); + + // ── layout ───────────────────────────────────────────────── + + private void BuildUi() + { + var outer = CreateFillContainer(); + AddChild(outer); + var toolbar = CreateToolbar(); + modPicker = new OptionButton { TooltipText = ToolUi.Tr("tools/entity_editor/mod_tip") }; + modPicker.ItemSelected += OnModPicked; + toolbar.AddChild(modPicker); + toolbar.AddChild(ToolUi.Button("tools/common/save", OnSavePressed, ButtonKind.Primary, "tools/common/save_tip")); + toolbar.AddChild(ToolUi.Divider()); + toolbar.AddChild(ToolUi.Button("tools/entity_editor/new", AddNew, ButtonKind.Secondary, "tools/entity_editor/new_tip")); + toolbar.AddChild(ToolUi.Button("tools/entity_editor/duplicate", DuplicateSelected, ButtonKind.Secondary, "tools/entity_editor/duplicate_tip")); + toolbar.AddChild(ToolUi.Button("tools/entity_editor/delete", DeleteSelected, ButtonKind.Secondary, "tools/entity_editor/delete_tip")); + toolbar.AddChild(ToolUi.Divider()); + toolbar.AddChild(ToolUi.Button("tools/entity_editor/undo", Undo, ButtonKind.Secondary, "tools/entity_editor/undo_tip")); + toolbar.AddChild(ToolUi.Button("tools/entity_editor/redo", Redo, ButtonKind.Secondary, "tools/entity_editor/redo_tip")); + outer.AddChild(toolbar); + + var main = new HSplitContainer { SizeFlagsHorizontal = Control.SizeFlags.ExpandFill, SizeFlagsVertical = Control.SizeFlags.ExpandFill }; + outer.AddChild(main); + var kinds = new VBoxContainer { SizeFlagsVertical = Control.SizeFlags.ExpandFill }; + kinds.AddChild(ToolUi.Section("tools/schema/data_editor/section_kinds")); + kindList = new FilteredList(300f, "tools/schema/data_editor/search_kind") { SizeFlagsVertical = Control.SizeFlags.ExpandFill }; + kindList.Chosen += OpenKind; + kinds.AddChild(kindList); + main.AddChild(CreateSidebar(kinds, 230)); + + var right = new HSplitContainer { SizeFlagsHorizontal = Control.SizeFlags.ExpandFill }; + main.AddChild(right); + var entities = new VBoxContainer { SizeFlagsVertical = Control.SizeFlags.ExpandFill }; + entities.AddChild(ToolUi.Section("tools/entity_editor/section_list")); + entityList = new FilteredList(300f, "tools/entity_editor/search") { SizeFlagsVertical = Control.SizeFlags.ExpandFill }; + entityList.Chosen += OnEntityChosen; + entities.AddChild(entityList); + right.AddChild(CreateSidebar(entities, 280)); + + var scroll = new ScrollContainer { HorizontalScrollMode = ScrollContainer.ScrollMode.Disabled, SizeFlagsHorizontal = Control.SizeFlags.ExpandFill }; + right.AddChild(scroll); + var column = new VBoxContainer { SizeFlagsHorizontal = Control.SizeFlags.ExpandFill }; + column.AddThemeConstantOverride("separation", UiTokens.Space2); + scroll.AddChild(column); + kindLabel = ToolUi.Hint(string.Empty); + column.AddChild(kindLabel); + emptyHint = ToolUi.Hint(ToolUi.Tr("tools/entity_editor/no_entity")); + column.AddChild(emptyHint); + form = new VBoxContainer { SizeFlagsHorizontal = Control.SizeFlags.ExpandFill, Name = "Form" }; + form.AddThemeConstantOverride("separation", UiTokens.Space2); + column.AddChild(form); + } + + private void FillMods() + { + mods.Clear(); + mods.AddRange(ModFileService.ListWritableMods()); + modPicker.Clear(); + foreach (var mod in mods) + modPicker.AddItem(mod); + if (mods.Count == 0) + SetStatus(ToolUi.Tr("tools/common/no_writable_mods"), ToolStatusKind.Error); + else + modId = mods[0]; + modPicker.Select(mods.IndexOf(modId)); + } + + private void FillKinds() + { + var counts = GameEntityIndex.Kinds(); + var kinds = SchemaCatalog.Current.Kinds.Values.Where(k => k.Fields.Count > 0) + .OrderBy(k => k.Order).ThenBy(k => k.Kind, StringComparer.Ordinal).ToList(); + kindList.SetItems(kinds.Select(k => (k.Kind, $"{KindName(k)} · {(counts.TryGetValue(k.Kind, out var n) ? n : 0)}", (Texture2D)null))); + SetStatus(string.Format(ToolUi.Tr("tools/schema/data_editor/kinds"), kinds.Count)); + } + + private static string KindName(KindSchema k) => string.IsNullOrEmpty(k.Name) ? k.Kind : ToolUi.Tr(k.Name); + + // ── kind and mod ─────────────────────────────────────────── + + private void DoOpen(string kindName, string mod) + { + if (kindName == null || mod == null || !SchemaCatalog.Current.Kinds.TryGetValue(kindName, out var schema)) + return; + kind = schema; + modId = mod; + modPicker.Select(mods.IndexOf(mod)); + kindList.Select(kind.Kind); + kindLabel.Text = string.IsNullOrEmpty(kind.Description) ? KindName(kind) : $"{KindName(kind)} — {ToolUi.Tr(kind.Description)}"; + var sources = ModFileService.ListFiles(mod, string.Empty, ".json").Select(path => (path, ModFileService.ReadText(mod, path))); + document = EntityDocument.Load(kind.Kind, $"{Folder()}/{mod}.json", sources, out var skipped); + if (skipped.Count > 0) + SetStatus(string.Format(ToolUi.Tr("tools/entity_editor/broken_files"), string.Join(", ", skipped)), ToolStatusKind.Error); + languages = LocaleFileService.Languages(mod); + BuildForm(); + MarkClean(); + editing = false; + RefreshList(); + selected = document.Records.FirstOrDefault(); + entityList.Select(selected?.Id); + ShowSelected(); + SetStatus(string.Format(ToolUi.Tr("tools/entity_editor/opened"), document.Records.Count, mod)); + } + + private string Folder() => string.IsNullOrWhiteSpace(kind?.Folder) ? kind?.Kind?.Replace('/', '_') : kind.Folder; + + private void OnModPicked(long index) + { + if (index >= 0 && index < mods.Count && mods[(int)index] != modId) + OpenMod(mods[(int)index]); + } + + private void OnEntityChosen(string id) => Select(id); + + private void RefreshList() + { + var name = editors.OfType().FirstOrDefault(); + entityList.SetItems(document.Records.Select(r => (r.Id, RowText(r, name), (Texture2D)null))); + entityList.Select(selected?.Id); + } + + private string RowText(EntityRecord record, LocaleFieldEditor nameField) + { + var key = nameField == null ? null : record.Data[nameField.Field.Key]?.ToString(); + var language = languages.FirstOrDefault() ?? "ru"; + var text = key == null ? null : document.GetText(language, key) ?? LocaleFileService.Read(modId, language, key); + return string.IsNullOrWhiteSpace(text) ? record.Id : $"{text} · {record.Id}"; + } + + // ── form ─────────────────────────────────────────────────── + + private void BuildForm() + { + foreach (var child in form.GetChildren()) + { + form.RemoveChild(child); + child.QueueFree(); + } + editors.Clear(); + localeEditors.Clear(); + fileLabel = ToolUi.Hint(string.Empty); + form.AddChild(fileLabel); + idEdit = ToolUi.Field(form, "tools/entity_editor/id", ToolUi.Text(string.Empty, OnTyped), "tools/entity_editor/id_tip"); + idEdit.Name = "Id"; + idEdit.AddThemeFontOverride("font", ToolUi.Mono()); + foreach (var field in kind.Fields.Where(f => !string.Equals(f.Key, "Id", StringComparison.OrdinalIgnoreCase))) + editors.Add(CreateEditor(field)); + foreach (var locale in localeEditors) + locale.Open(document, modId, languages); + + form.AddChild(ToolUi.Section("tools/entity_editor/section_other")); + form.AddChild(ToolUi.Hint(ToolUi.Tr("tools/entity_editor/other_hint"))); + otherEdit = ToolUi.Code(); + otherEdit.Name = "Other"; + otherEdit.CustomMinimumSize = new Vector2(0, 140); + otherEdit.TextChanged += OnOtherChanged; + form.AddChild(otherEdit); + } + + private ISchemaFieldEditor CreateEditor(FieldSchema field) + { + var editor = SchemaFieldEditors.Create(form, field, WriteForm); + if (editor is LocaleFieldEditor locale) + localeEditors.Add(locale); + return editor; + } + + private void ShowSelected() + { + emptyHint.Visible = selected == null; + form.Visible = selected != null; + if (selected == null) + return; + suppress = true; + fileLabel.Text = string.Format(ToolUi.Tr("tools/entity_editor/file"), modId, selected.File); + idEdit.Text = selected.Id; + foreach (var editor in editors) + editor.Load(Find(selected.Data, editor.Field.Key)); + otherEdit.Text = OtherJson(selected.Data); + suppress = false; + editing = false; + } + + private static JsonNode Find(JsonObject data, string key) + => data.FirstOrDefault(p => string.Equals(p.Key, key, StringComparison.OrdinalIgnoreCase)).Value; + + private void OnTyped(string text) => WriteForm(); + + private void WriteForm() + { + if (suppress || selected == null) + return; + if (!editing) + { + document.BeginChange(); + editing = true; + } + var data = selected.Data; + data["Id"] = idEdit.Text.Trim(); + foreach (var editor in editors) + { + var existing = data.FirstOrDefault(p => string.Equals(p.Key, editor.Field.Key, StringComparison.OrdinalIgnoreCase)).Key ?? editor.Field.Key; + var value = editor.Save(); + if (value == null) + data.Remove(existing); + else + data[existing] = value; + } + SetDirty(); + RefreshList(); + } + + private bool IsFormKey(string key) + => key == "Id" || kind.Fields.Any(f => string.Equals(f.Key, key, StringComparison.OrdinalIgnoreCase)); + + private string OtherJson(JsonObject data) + { + var other = new JsonObject(); + foreach (var pair in data.Where(p => !IsFormKey(p.Key))) + other[pair.Key] = pair.Value?.DeepClone(); + return EntityDocument.Serialize(other).TrimEnd(); + } + + private void OnOtherChanged() + { + if (suppress || selected == null) + return; + JsonObject other; + try + { + other = JsonNode.Parse(otherEdit.Text) as JsonObject; + } + catch (JsonException ex) + { + SetStatus(string.Format(ToolUi.Tr("tools/entity_editor/other_invalid"), ex.Message), ToolStatusKind.Error); + return; + } + if (other == null) + return; + if (!editing) + { + document.BeginChange(); + editing = true; + } + var data = selected.Data; + foreach (var key in data.Select(p => p.Key).Where(k => !IsFormKey(k)).ToList()) + data.Remove(key); + foreach (var pair in other.Where(p => !IsFormKey(p.Key)).ToList()) + data[pair.Key] = pair.Value?.DeepClone(); + SetDirty(); + } + + // ── commands ─────────────────────────────────────────────── + + /// Adds a new entity of the kind with the schema's defaults (Ctrl+N). + public void AddNew() + { + if (document == null || kind == null) + return; + document.BeginChange(); + var pattern = string.IsNullOrWhiteSpace(kind.NewId) ? "{mod}/new_" + kind.Kind.Replace('/', '_') : kind.NewId; + var id = document.FreeId(pattern.Replace("{mod}", modId)); + var entity = new JsonObject { ["Id"] = id }; + foreach (var field in kind.Fields.Where(f => !string.IsNullOrEmpty(f.Default))) + entity[field.Key] = SchemaJson.ToNode(field, field.Default); + foreach (var field in kind.Fields.Where(f => f.Type == "locale" && !string.IsNullOrEmpty(f.KeyPattern))) + { + var key = field.KeyPattern.Replace("{mod}", modId).Replace("{id}", id).Replace("{key}", field.Key.ToLowerInvariant()); + entity[field.Key] = key; + foreach (var language in languages) + document.SetText(language, key, field.Key == "Name" ? id.Substring(id.LastIndexOf('/') + 1) : string.Empty); + } + var record = document.Add(entity); + SetDirty(); + selected = record; + RefreshList(); + Select(record.Id); + SetStatus(string.Format(ToolUi.Tr("tools/entity_editor/added"), id, record.File)); + } + + private void DuplicateSelected() + { + if (selected == null) + return; + document.BeginChange(); + var record = document.Duplicate(selected, document.FreeId(selected.Id)); + SetDirty(); + selected = record; + RefreshList(); + Select(record.Id); + } + + private void DeleteSelected() + { + if (selected == null) + return; + ShowConfirm("tools/entity_editor/delete_title", "tools/entity_editor/delete_text", ConfirmDelete); + } + + private void ConfirmDelete() + { + if (selected == null) + return; + document.BeginChange(); + document.Remove(selected); + selected = null; + SetDirty(); + RefreshList(); + ShowSelected(); + } + + private void Undo() => StepHistory(document != null && document.Undo()); + + private void Redo() => StepHistory(document != null && document.Redo()); + + private void StepHistory(bool stepped) + { + if (!stepped) + return; + var id = selected?.Id; + SetDirty(); + RefreshList(); + Select(document.Find(id)?.Id ?? document.Records.FirstOrDefault()?.Id); + } + + /// + protected override void OnSaveShortcut() => Save(); + + private void OnSavePressed() => Save(); + + /// + /// Writes the changed data and locale files and makes the game re-read them (entity + /// and file caches, current language, the tools' own entity index). + /// + public bool Save() + { + if (document == null) + return false; + var problems = document.Validate(); + if (problems.Count > 0) + { + SetStatus(string.Format(ToolUi.Tr(problems[0].Key), problems[0].Argument), ToolStatusKind.Error); + return false; + } + var changedFiles = document.ChangedFiles(); + var changedTexts = document.ChangedTexts(); + foreach (var (path, text) in changedFiles) + { + if (!ModFileService.WriteText(modId, path, text)) + { + SetStatus(ToolUi.Tr("tools/common/readonly"), ToolStatusKind.Error); + return false; + } + } + foreach (var (language, key, value) in changedTexts) + LocaleFileService.Write(modId, language, key, value); + document.MarkSaved(); + MarkClean(); + editing = false; + ModManager.Instance.GetResolver()?.ClearCache(); + ModManager.Instance.GetResolver()?.ClearCache(); + GameEntityIndex.Refresh(); + if (changedTexts.Count > 0) + LocaleFileService.ReloadGame(); + GameLogger.Log("TOOLS", $"data editor: saved {changedFiles.Count} {kind.Kind} file(s), {changedTexts.Count} text(s) of '{modId}'"); + SetStatus(string.Format(ToolUi.Tr("tools/entity_editor/saved"), changedFiles.Count, changedTexts.Count, modId), ToolStatusKind.Ok); + FillKinds(); + kindList.Select(kind.Kind); + return true; + } + + /// + protected override bool HandleKey(InputEventKey key) + { + if (!key.CtrlPressed) + return false; + switch (key.Keycode) + { + case Key.Z when key.ShiftPressed: + case Key.Y: + Redo(); + return true; + case Key.Z: + Undo(); + return true; + case Key.N: + AddNew(); + return true; + case Key.D: + DuplicateSelected(); + return true; + } + return false; + } + } +} diff --git a/src/Palette/CommandPaletteWindow.cs b/src/Palette/CommandPaletteWindow.cs new file mode 100644 index 0000000..73e59ef --- /dev/null +++ b/src/Palette/CommandPaletteWindow.cs @@ -0,0 +1,223 @@ +namespace Cthangover.Tools.Schemas +{ + using Cthangover.Mods.Schemas; + using System; + using System.Collections.Generic; + using System.Linq; + using Cthangover.Core.UI.Theming; + using Cthangover.Core.UI.Tool.ScenarioEditor; + using Cthangover.Mods.Interface.Theming; + using Cthangover.Mods.Interface.Tool; + using Cthangover.Tools.Common; + using Godot; + + /// + /// The command palette: every scenario action and command some mod described, searchable + /// and grouped, with a form built from its schema. The author fills the form (pickers + /// for entities, check boxes, formula fields), sees the line it makes and what the + /// validator would say about it, and inserts the line into the open scenario editor + /// below the caret — or copies it. Nothing about an action is hard-coded here: a new + /// mod with a schema file appears in the palette as soon as it is loaded. + /// + /// The text stays the source of truth: the palette writes exactly the DSL line an author + /// would have typed, so a professional keeps typing and a beginner never has to. + /// + public partial class CommandPaletteWindow : ToolWindow + { + private const string ActionPrefix = "action:"; + private const string CommandPrefix = "command:"; + + private readonly List controls = new(); + private FilteredList list; + private VBoxContainer form; + private Label titleLabel; + private Label helpLabel; + private LineEdit arrowEdit; + private LineEdit preview; + private Label issuesLabel; + private ActionSchema action; + private CommandSchema command; + + /// Builds the window over the current schema catalog. + public CommandPaletteWindow() : base("tools/schema/palette/title") + { + CthangoverTheme.Apply(this); + BuildUi(); + Fill(); + SetHint(ToolUi.Tr("tools/schema/palette/hint")); + } + + /// The line the form makes now (empty before anything is chosen). + public string Line => preview?.Text ?? string.Empty; + + /// Chooses an entry: action:<id> or command:<word>. + public void Choose(string entryId) + { + list.Select(entryId); + OnChosen(entryId); + } + + /// Sets a form value by parameter key (tests drive the form like a user). + public void SetValue(string key, string value) + { + var control = controls.FirstOrDefault(c => string.Equals(c.Field.Key, key, StringComparison.OrdinalIgnoreCase)); + if (control == null) + return; + control.Value = value; + Rebuild(); + } + + /// Inserts below the caret of the open scenario editor; false when none is open. + public bool InsertIntoEditor() + { + var tabs = GetTree()?.Root.FindChildren("*", "", true, false).OfType().FirstOrDefault(t => t.HasActiveFile); + if (tabs == null || string.IsNullOrEmpty(Line)) + { + SetStatus(ToolUi.Tr("tools/schema/palette/no_editor"), ToolStatusKind.Error); + return false; + } + var code = tabs.CodeEditor; + var at = Math.Min(code.GetCaretLine() + 1, code.GetLineCount()); + code.InsertLineAt(at, Line); + code.SetCaretLine(at); + SetStatus(string.Format(ToolUi.Tr("tools/schema/palette/inserted"), tabs.CurrentKey), ToolStatusKind.Ok); + return true; + } + + private void BuildUi() + { + var outer = CreateFillContainer(); + AddChild(outer); + var toolbar = CreateToolbar(); + toolbar.AddChild(ToolUi.Button("tools/schema/palette/insert", OnInsertPressed, ButtonKind.Primary, "tools/schema/palette/insert_tip")); + toolbar.AddChild(ToolUi.Button("tools/schema/palette/copy", OnCopyPressed, ButtonKind.Secondary, "tools/schema/palette/copy_tip")); + outer.AddChild(toolbar); + + var main = new HSplitContainer { SizeFlagsHorizontal = Control.SizeFlags.ExpandFill, SizeFlagsVertical = Control.SizeFlags.ExpandFill }; + outer.AddChild(main); + var left = new VBoxContainer { SizeFlagsVertical = Control.SizeFlags.ExpandFill }; + left.AddChild(ToolUi.Section("tools/schema/palette/section_list")); + list = new FilteredList(360f, "tools/schema/palette/search") { SizeFlagsVertical = Control.SizeFlags.ExpandFill }; + list.Chosen += OnChosen; + left.AddChild(list); + main.AddChild(CreateSidebar(left, 340)); + + var scroll = new ScrollContainer { HorizontalScrollMode = ScrollContainer.ScrollMode.Disabled, SizeFlagsHorizontal = Control.SizeFlags.ExpandFill }; + main.AddChild(scroll); + var column = new VBoxContainer { SizeFlagsHorizontal = Control.SizeFlags.ExpandFill }; + column.AddThemeConstantOverride("separation", UiTokens.Space2); + scroll.AddChild(column); + titleLabel = UiKit.Label(ToolUi.Tr("tools/schema/palette/pick"), UiTokens.FontBodyLarge, UiTokens.InkBright); + column.AddChild(titleLabel); + helpLabel = ToolUi.Hint(string.Empty); + column.AddChild(helpLabel); + form = new VBoxContainer { SizeFlagsHorizontal = Control.SizeFlags.ExpandFill }; + form.AddThemeConstantOverride("separation", UiTokens.Space2); + column.AddChild(form); + column.AddChild(ToolUi.Section("tools/schema/palette/section_line")); + preview = new LineEdit { Editable = false, Name = "Preview", SizeFlagsHorizontal = Control.SizeFlags.ExpandFill }; + preview.AddThemeFontOverride("font", ToolUi.Mono()); + column.AddChild(preview); + issuesLabel = ToolUi.Hint(string.Empty); + issuesLabel.Name = "Issues"; + column.AddChild(issuesLabel); + } + + private void Fill() + { + var catalog = SchemaCatalog.Current; + var items = new List<(string Id, string Text, Texture2D Icon)>(); + foreach (var a in catalog.Actions.Values.OrderBy(a => a.Category).ThenBy(a => a.Id, StringComparer.Ordinal)) + items.Add((ActionPrefix + a.Id, Entry(a.Category, a.Name, "action " + a.Id), null)); + foreach (var c in catalog.Commands.Values.OrderBy(c => c.Category).ThenBy(c => c.Id, StringComparer.Ordinal)) + items.Add((CommandPrefix + c.Id, Entry(c.Category, c.Name, c.Id), null)); + list.SetItems(items); + SetStatus(string.Format(ToolUi.Tr("tools/schema/palette/count"), catalog.Actions.Count, catalog.Commands.Count)); + } + + private static string Entry(string category, string nameKey, string syntax) + { + var name = string.IsNullOrEmpty(nameKey) ? syntax : ToolUi.Tr(nameKey); + var group = string.IsNullOrEmpty(category) ? string.Empty : $"[{Category(category)}] "; + return $"{group}{name} · {syntax}"; + } + + private static string Category(string category) + { + var key = "tools/schema/category/" + category; + var text = ToolUi.Tr(key); + return text == key ? category : text; + } + + private void OnChosen(string entryId) + { + action = null; + command = null; + var catalog = SchemaCatalog.Current; + if (entryId?.StartsWith(ActionPrefix, StringComparison.Ordinal) == true) + catalog.Actions.TryGetValue(entryId.Substring(ActionPrefix.Length), out action); + else if (entryId?.StartsWith(CommandPrefix, StringComparison.Ordinal) == true) + catalog.Commands.TryGetValue(entryId.Substring(CommandPrefix.Length), out command); + BuildForm(); + } + + private void BuildForm() + { + foreach (var child in form.GetChildren()) + { + form.RemoveChild(child); + child.QueueFree(); + } + controls.Clear(); + arrowEdit = null; + var nameKey = action?.Name ?? command?.Name; + titleLabel.Text = nameKey == null ? ToolUi.Tr("tools/schema/palette/pick") : ToolUi.Tr(nameKey); + var help = action?.Description ?? command?.Description; + var source = action?.SourceMod ?? command?.SourceMod; + helpLabel.Text = (help == null ? string.Empty : ToolUi.Tr(help) + "\n") + (source == null ? string.Empty : string.Format(ToolUi.Tr("tools/schema/described_by"), source)); + var fields = action != null ? action.Params : command != null ? (command.Positional ?? new()).Concat(command.Params ?? new()).ToList() : new List(); + foreach (var field in fields) + controls.Add(new SchemaFieldControl(form, field, Rebuild)); + if (command?.Arrow != null) + arrowEdit = ToolUi.Field(form, command.Arrow, ToolUi.Text(":label", OnArrowTyped), "tools/schema/palette/arrow_tip"); + Rebuild(); + } + + private void OnArrowTyped(string text) => Rebuild(); + + private void Rebuild() + { + var values = controls.ToDictionary(c => c.Field.Key, c => c.Value, StringComparer.OrdinalIgnoreCase); + List issues; + if (action != null) + { + preview.Text = SchemaLine.Action(action, values); + issues = SchemaChecker.CheckNamed(action.Id, action.Params, values.Where(p => p.Value.Length > 0).ToDictionary(p => p.Key, p => p.Value), GameEntityIndex.Exists); + } + else if (command != null) + { + preview.Text = SchemaLine.Command(command, values, arrowEdit?.Text); + var positional = (command.Positional ?? new()).Select(f => values.GetValueOrDefault(f.Key)).ToList(); + issues = SchemaChecker.CheckPositional(command.Id, command.Positional, positional, GameEntityIndex.Exists); + issues.AddRange(SchemaChecker.CheckNamed(command.Id, command.Params, (command.Params ?? new()).Where(f => values.GetValueOrDefault(f.Key)?.Length > 0).ToDictionary(f => f.Key, f => values[f.Key]), GameEntityIndex.Exists)); + } + else + { + preview.Text = string.Empty; + issues = new List(); + } + issuesLabel.Text = issues.Count == 0 ? (preview.Text.Length > 0 ? ToolUi.Tr("tools/schema/palette/line_ok") : string.Empty) : string.Join("\n", issues.Select(i => (i.IsError ? "✖ " : "⚠ ") + i.Message)); + issuesLabel.AddThemeColorOverride("font_color", issues.Any(i => i.IsError) ? UiTokens.DangerText : issues.Count > 0 ? UiTokens.Warning : UiTokens.SuccessText); + } + + private void OnInsertPressed() => InsertIntoEditor(); + + private void OnCopyPressed() + { + if (string.IsNullOrEmpty(Line)) + return; + DisplayServer.ClipboardSet(Line); + SetStatus(ToolUi.Tr("tools/schema/palette/copied"), ToolStatusKind.Ok); + } + } +} diff --git a/src/Tools/DataEditorToolBoxButton.cs b/src/Tools/DataEditorToolBoxButton.cs new file mode 100644 index 0000000..c2d7e19 --- /dev/null +++ b/src/Tools/DataEditorToolBoxButton.cs @@ -0,0 +1,20 @@ +namespace Cthangover.Tools.Schemas +{ + using Cthangover.Core.UI.Tool; + + /// Puts the data editor window on the in-game tool box. + public class DataEditorToolBoxButton : IToolBoxButton + { + /// + public string ToolId => "schema_data_editor"; + + /// + public string IconPath => ""; + + /// + public string LocaleKey => "tools/schema/data_editor/title"; + + /// + public bool IsVisible() => true; + } +} diff --git a/src/Tools/DataEditorToolProvider.cs b/src/Tools/DataEditorToolProvider.cs new file mode 100644 index 0000000..78b224c --- /dev/null +++ b/src/Tools/DataEditorToolProvider.cs @@ -0,0 +1,22 @@ +namespace Cthangover.Tools.Schemas +{ + using Cthangover.Core.UI.Tool; + using Cthangover.Mods.Interface.Tool; + using Godot; + + /// Puts the data editor window into the tools menu. + public class DataEditorToolProvider : IToolProvider + { + /// + public string Id => "schema_data_editor"; + + /// + public string LocaleKey => "tools/schema/data_editor/title"; + + /// + public Window CreateWindow() => new DataEditorWindow(); + + /// + public void AddMenuButton(Container container) => ToolMenuButton.Attach(container, this); + } +} diff --git a/src/Tools/PaletteToolBoxButton.cs b/src/Tools/PaletteToolBoxButton.cs new file mode 100644 index 0000000..575192b --- /dev/null +++ b/src/Tools/PaletteToolBoxButton.cs @@ -0,0 +1,20 @@ +namespace Cthangover.Tools.Schemas +{ + using Cthangover.Core.UI.Tool; + + /// Puts the command palette on the in-game tool box. + public class PaletteToolBoxButton : IToolBoxButton + { + /// + public string ToolId => "schema_palette"; + + /// + public string IconPath => ""; + + /// + public string LocaleKey => "tools/schema/palette/title"; + + /// + public bool IsVisible() => true; + } +} diff --git a/src/Tools/PaletteToolProvider.cs b/src/Tools/PaletteToolProvider.cs new file mode 100644 index 0000000..ef07a18 --- /dev/null +++ b/src/Tools/PaletteToolProvider.cs @@ -0,0 +1,22 @@ +namespace Cthangover.Tools.Schemas +{ + using Cthangover.Core.UI.Tool; + using Cthangover.Mods.Interface.Tool; + using Godot; + + /// Puts the command palette into the tools menu. + public class PaletteToolProvider : IToolProvider + { + /// + public string Id => "schema_palette"; + + /// + public string LocaleKey => "tools/schema/palette/title"; + + /// + public Window CreateWindow() => new CommandPaletteWindow(); + + /// + public void AddMenuButton(Container container) => ToolMenuButton.Attach(container, this); + } +} diff --git a/test_suites/edit/manifest.json b/test_suites/edit/manifest.json new file mode 100644 index 0000000..9881669 --- /dev/null +++ b/test_suites/edit/manifest.json @@ -0,0 +1,10 @@ +{ + "name": "Schema Tools Test", + "description": "GUI test of the schema tools in rpg_plus: the Data Editor window lists the described kinds, a new item in rpg_plus_game gets an equip type and a trait through the form (a list card with a stat picker), is saved and is gear the game knows at once; the command palette builds 'action stat.add stat=str value=2', reports an unknown stat as an error, and inserts the line into an open scenario editor. The new file and the locale edits are removed again. Activated by --itest=schema_tools_edit with --game=rpg_plus --new.", + "sources": [ + "src/*.cs" + ], + "depends": [ + "rpg_plus_game>=1" + ] +} diff --git a/test_suites/edit/src/SchemaToolsTestDriver.cs b/test_suites/edit/src/SchemaToolsTestDriver.cs new file mode 100644 index 0000000..86c8b8e --- /dev/null +++ b/test_suites/edit/src/SchemaToolsTestDriver.cs @@ -0,0 +1,216 @@ +namespace Cthangover.Tools.Schemas.Tests +{ + using Cthangover.Mods.Schemas; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using Cthangover.Core.Bootstrap; + using Cthangover.Core.Mods; + using Cthangover.Core.Mods.Resolvers; + using Cthangover.Core.UI.Tool.ScenarioEditor; + using Cthangover.Core.Utils; + using Cthangover.Mods.Equipment; + using Cthangover.Mods.Interface.Tool; + using Cthangover.Mods.Stats; + using Cthangover.Tools.Services; + using Godot; + + /// + /// Drives the Data Editor window and the command palette like an author: a new item gets + /// gear fields that two different mods described, the game sees it as gear right after + /// Save, and the palette writes and checks a stats line. Everything the test writes is + /// removed again, the files it changed are restored byte for byte. + /// + public partial class SchemaToolsTestDriver : Node + { + private const float TickSeconds = 0.15f; + private const float TimeoutSeconds = 60f; + private const string Mod = "rpg_plus_game"; + private const string NewFile = "items/rpg_plus_game.json"; + private const string NewId = "rpg_plus_game/new_item"; + private const string ScenarioKey = "rpg_plus_game:scenarios/rpg_plus/events/seer.scenario"; + + private readonly List failures = new(); + private readonly Dictionary backups = new(); + private int passed; + private int step; + private double elapsed; + private bool newFileExisted; + private bool itemsDirExisted; + private DataEditorWindow editor; + private CommandPaletteWindow palette; + private ScenarioEditorWindow scenarios; + + public SchemaToolsTestDriver() + { + Name = "SchemaToolsTestDriver"; + var timer = new Timer { WaitTime = TickSeconds, Autostart = true }; + AddChild(timer); + timer.Timeout += Tick; + } + + private void Tick() + { + if (step < 0) + return; + elapsed += TickSeconds; + if (elapsed > TimeoutSeconds) + { + Fail($"timeout at step {step}"); + Cleanup(); + Finish(); + return; + } + try + { + RunStep(); + } + catch (System.Exception ex) + { + Fail($"step {step}: {ex.GetType().Name}: {ex.Message}\n{ex.StackTrace}"); + Cleanup(); + Finish(); + } + } + + private void RunStep() + { + switch (step) + { + case 0: + if (!Boot.IsReady) + return; + foreach (var file in ModFileService.ListFiles(Mod, "locale", ".properties")) + backups[file] = ModFileService.ReadText(Mod, file); + newFileExisted = ModFileService.ReadText(Mod, NewFile) != null; + itemsDirExisted = Directory.Exists(Path.GetDirectoryName(ModFileService.GetWritablePath(Mod, NewFile)) ?? string.Empty); + Check(!newFileExisted, "the game mod has no items file of its own yet"); + editor = ToolWindow.Open(); + step++; + return; + case 1: + if (!editor.IsInsideTree()) + return; + var kinds = SchemaCatalog.Current.Kinds; + Check(new[] { "stat", "archetype", "equip_slot", "item", "character", "action", "shop" }.All(kinds.ContainsKey), "the editor lists the kinds of five mods' schemas"); + editor.OpenKind("item"); + editor.OpenMod(Mod); + Check(editor.KindId == "item" && editor.ModId == Mod, "items of the game mod are open"); + editor.AddNew(); + Check(editor.SelectedId == NewId, $"New adds {NewId} (got {editor.SelectedId})"); + Type(editor, "Text_Equip", "sword"); + var list = editor.FindChild("List_Traits", true, false); + Check(list != null, "the equipment mod's Traits field is a list editor in the item form"); + (list?.FindChild("Add", true, false) as Button)?.EmitSignal(BaseButton.SignalName.Pressed); + step++; + return; + case 2: + var card = editor.FindChild("List_Traits", true, false)?.FindChild("Card0", true, false); + Check(card != null, "Add made a trait card"); + var picker = card?.FindChild("Picker_Stat", true, false) as OptionButton; + var index = Enumerable.Range(0, picker?.ItemCount ?? 0).FirstOrDefault(i => picker.GetItemText(i).EndsWith(" atk") || picker.GetItemText(i) == "atk"); + Check(picker != null && index > 0, "the trait's stat picker offers the pack's stats"); + picker?.Select(index); + picker?.EmitSignal(OptionButton.SignalName.ItemSelected, index); + Type(card, "Text_Add", "3"); + var data = editor.Document.Find(NewId)?.Data; + Check(data?["Equip"]?.ToString() == "sword", "the form wrote the equip type"); + Check(data?["Traits"]?[0]?["Stat"]?.ToString() == "atk" && data?["Traits"]?[0]?["Add"]?.ToString() == "3", $"the form wrote the trait: {data?["Traits"]?.ToJsonString()}"); + Check(editor.Save(), "Save writes the mod"); + Check(EquipmentService.IsEquipment(NewId), "the game knows the new item as gear right after saving"); + var traits = ExtraData.Traits(EquipmentService.Item(NewId)?.ExtraProperties, NewId); + Check(traits.Count == 1 && traits[0].Stat == "atk" && traits[0].Add == 3, "with its trait"); + var written = ModFileService.ReadText(Mod, NewFile) ?? string.Empty; + Check(written.Contains("\"Kind\": \"item\"") && !written.Contains("\r"), "the new file declares its kind and has LF lines"); + palette = ToolWindow.Open(); + scenarios = ToolWindow.Open(); + step++; + return; + case 3: + if (!palette.IsInsideTree() || !scenarios.IsInsideTree()) + return; + scenarios.OpenScenario(ScenarioKey); + palette.Choose("action:stat.add"); + palette.SetValue("stat", "str"); + palette.SetValue("value", "2"); + Check(palette.Line == "action stat.add stat=str value=2", $"the palette writes the line ({palette.Line})"); + Check((palette.FindChild("Issues", true, false) as Label)?.Text.StartsWith("✔") == true, "and finds nothing wrong with it"); + palette.SetValue("stat", "strenght"); + Check((palette.FindChild("Issues", true, false) as Label)?.Text.Contains("✖") == true, "a misspelt stat is reported as an error"); + palette.SetValue("stat", "str"); + step++; + return; + case 4: + var tabs = scenarios.FindChildren("*", "", true, false).OfType().FirstOrDefault(); + if (tabs == null || !tabs.HasActiveFile) + { + if (elapsed > 30) + Fail("the scenario editor did not open the seer's scenario"); + else + return; + } + Check(palette.InsertIntoEditor(), "Insert puts the line into the open scenario"); + Check(tabs?.CurrentText.Contains("action stat.add stat=str value=2") == true, "the editor's text has the line"); + Check(ModFileService.ReadText(Mod, "scenarios/rpg_plus/events/seer.scenario")?.Contains("stat.add") == false, "nothing is written to disk before the author saves"); + Cleanup(); + Finish(); + return; + } + } + + private static void Type(Node root, string name, string text) + { + if (root?.FindChild(name, true, false) is not LineEdit edit) + return; + edit.Text = text; + edit.EmitSignal(LineEdit.SignalName.TextChanged, text); + } + + private void Cleanup() + { + if (step < 0) + return; + foreach (var window in new Node[] { editor, palette, scenarios }.Where(w => w != null && IsInstanceValid(w))) + window.QueueFree(); + var path = ModFileService.GetWritablePath(Mod, NewFile); + if (!newFileExisted && path != null && File.Exists(path)) + File.Delete(path); + // The save created the folder too; only that empty folder of this run goes away. + var folder = path == null ? null : Path.GetDirectoryName(path); + if (!itemsDirExisted && folder != null && Directory.Exists(folder) && !Directory.EnumerateFileSystemEntries(folder).Any()) + Directory.Delete(folder); + foreach (var backup in backups) + ModFileService.WriteText(Mod, backup.Key, backup.Value); + ModManager.Instance.GetResolver()?.ClearCache(); + ModManager.Instance.GetResolver()?.ClearCache(); + GameEntityIndex.Refresh(); + LocaleFileService.ReloadGame(); + } + + private void Check(bool condition, string what) + { + if (condition) + { + passed++; + GameLogger.Log("TEST", $"[PASS] {what}"); + } + else + { + Fail(what); + } + } + + private void Fail(string what) + { + failures.Add(what); + GameLogger.Log("TEST", $"[FAIL] {what}", LogLevel.Error); + } + + private void Finish() + { + step = -1; + GameLogger.Log("TEST", $"[TEST_RESULT] name=schema_tools_edit passed={passed} failed={failures.Count}"); + GetTree().Quit(failures.Count == 0 ? 0 : 1); + } + } +} diff --git a/test_suites/edit/src/SchemaToolsTestInitializer.cs b/test_suites/edit/src/SchemaToolsTestInitializer.cs new file mode 100644 index 0000000..019704d --- /dev/null +++ b/test_suites/edit/src/SchemaToolsTestInitializer.cs @@ -0,0 +1,28 @@ +namespace Cthangover.Tools.Schemas.Tests +{ + using System.Linq; + using Cthangover.Core.Mods; + using Cthangover.Core.Utils; + using Godot; + + /// Mounts when the game runs with --itest=schema_tools_edit. + public class SchemaToolsTestInitializer : IModInitializer + { + private static bool driverQueued; + + /// + public void OnModLoaded(string modId) + { + } + + /// + public void OnModResourcesReady() + { + if (driverQueued || !OS.GetCmdlineUserArgs().Any(a => a == "--itest=schema_tools_edit")) + return; + driverQueued = true; + GameLogger.Log("TEST", "SchemaToolsTestInitializer: activating schema_tools_edit"); + (Godot.Engine.GetMainLoop() as SceneTree)?.Root?.CallDeferred("add_child", new SchemaToolsTestDriver()); + } + } +} diff --git a/tests/SchemaLineTests.cs b/tests/SchemaLineTests.cs new file mode 100644 index 0000000..dbf279c --- /dev/null +++ b/tests/SchemaLineTests.cs @@ -0,0 +1,62 @@ +namespace Cthangover.Tools.Schemas.Tests +{ + using Cthangover.Mods.Schemas; + using System.Collections.Generic; + using Cthangover.Core.Mods.Testing; + using Cthangover.Mods.Dialog.Scenarios; + + /// Lines the palette writes are DSL the scenario parser reads back with the same values. + public class SchemaLineTests + { + private static readonly ActionSchema Battle = new() + { + Id = "rpg.battle", + Params = new List { new() { Key = "enemies" }, new() { Key = "win_flag" }, new() { Key = "note" } }, + }; + + private static readonly CommandSchema Check = new() + { + Id = "check", + Positional = new List { new() { Key = "stat" }, new() { Key = "difficulty" } }, + Params = new List { new() { Key = "else" } }, + Arrow = "k", + }; + + [ModTest("line/action_order_and_empties")] + static void ActionOrderAndEmpties(ModTestContext ctx) + { + var line = SchemaLine.Action(Battle, new Dictionary { ["win_flag"] = "won", ["enemies"] = "a,b", ["note"] = "" }); + ModAssert.Equal("action rpg.battle enemies=a,b win_flag=won", line, "schema order, empty left out"); + } + + [ModTest("line/round_trip_through_the_parser")] + static void RoundTrip(ModTestContext ctx) + { + var line = SchemaLine.Action(Battle, new Dictionary { ["enemies"] = "rpg_wolf", ["note"] = "two \"words\"" }); + var positional = new List(); + var named = new Dictionary(); + var command = ScenarioParser.SplitLine(line, positional, named, out _); + ModAssert.Equal("action", command, "command"); + ModAssert.Equal("rpg.battle", positional[0], "action name"); + ModAssert.Equal("rpg_wolf", named["enemies"], "plain value"); + ModAssert.Equal("two \"words\"", named["note"], "a value with spaces and quotes survives"); + + var check = SchemaLine.Command(Check, new Dictionary { ["stat"] = "cha", ["difficulty"] = "12", ["else"] = "fail" }, ":ok"); + ModAssert.Equal("check cha 12 else=fail -> :ok", check, "command line"); + positional.Clear(); + named.Clear(); + ScenarioParser.SplitLine(check, positional, named, out var arrow); + ModAssert.Equal("12", positional[1], "positional"); + ModAssert.Equal("ok", arrow, "arrow"); + } + + [ModTest("line/quote")] + static void QuoteRules(ModTestContext ctx) + { + ModAssert.Equal("plain", SchemaLine.Quote("plain"), "no quotes needed"); + ModAssert.Equal("\"a b\"", SchemaLine.Quote("a b"), "spaces"); + ModAssert.Equal("\"\"", SchemaLine.Quote(""), "empty"); + ModAssert.Equal("\"say \\\"hi\\\"\"", SchemaLine.Quote("say \"hi\""), "inner quotes escaped"); + } + } +}