18 Commits

Author SHA1 Message Date
82ce556847 Rewrite export to image using standalone renderer from document data
- Создан автономный модуль mapping_renderer.py, рисующий маппинг напрямую из MappingDocument.
- Изображение больше не зависит от Qt-сцены и не содержит метки интерфейса или лишних id.
- Разрешение выходного изображения 2400x2400+800 пикселей с боковой легендой.
- Плашки start/end блоков рисуются напрямую на изображении.
- Добавлено предупреждение при несохранённых изменениях (с возможностью сохранить и экспортировать сразу).
- canvas.py очищен от предыдущей неработающей реализации export_to_image.
2026-07-31 13:44:40 +03:00
59586baca1 Enhance export mapping to image with block badges and sidebar legend
- Добавлен детальный рендеринг маппинга при экспорте:
  - Рисуются информационные плашки (badges) для первого и последнего светодиода в каждом блоке, показывающие ID точки и её локальный индекс в линии.
  - Справа от маппинга выводится боковая панель с легендой линий и блоков.
  - В легенде под цветом каждой линии выводятся блоки и диапазоны индексов их светодиодов (например, Блок: 0-186).
2026-07-31 13:11:04 +03:00
31b9028fc2 Add export mapping scheme to image feature
- Реализован метод export_to_image в canvas.py для рендеринга всей сцены маппинга (с учетом кастомного фона, сетки и точек) в файл изображения с полями и масштабированием.
- Добавлено действие export_image (Экспортировать в изображение...) в меню Файл с хоткеем Ctrl+Shift+E и вызовом диалога сохранения файла.
- Добавлен интеграционный тест test_export_mapping_to_image в qa_smoke.py для проверки экспорта схемы в PNG.
2026-07-31 13:04:39 +03:00
91189d6d37 Fix block and line name resetting upon saving document
- Изменены методы renumber_lines и renumber_blocks в models.py: теперь они переименовывают только стандартные (дефолтные) названия блоков/линий.
- Кастомные названия блоков и линий теперь полностью сохраняются при переиндексации (на сохранении).
- Добавлен интеграционный тест на сохранение/загрузку кастомных имен линий и блоков в qa_smoke.py.
v1.9
2026-07-31 12:42:05 +03:00
65d7580977 Add tree context menu hotkeys and support renaming lines in GUI
- Добавлены локальные горячие клавиши для действий в дереве: F2 для переименования, Ctrl+Del для удаления, Ctrl+M для объединения блоков.
- Изменен дефолтный хоткей для удаления всех фиксаций (clear_all) на Shift+Del.
- Реализована функция rename_line для переименования линий по аналогии с блоками.
- В контекстное меню дерева добавлено отображение горячих клавиш справа от названий команд.
- Добавлены интеграционные тесты для верификации переименования линий и регистрации хоткеев.
2026-07-31 12:35:15 +03:00
c15fe6e510 Fix block renaming display in tree widget and correct shortcut leakage during modal dialogs
- Добавлен вызов self.refresh_tree() в rename_block для незамедлительного отображения переименованного блока.
- Переработаны _disable_shortcuts и _enable_shortcuts для полного очищения/восстановления последовательностей QKeySequence.
- В eventFilter заменено self.focusWidget() на QApplication.focusWidget() для корректного отслеживания фокуса в диалогах.
- Добавлена проверка activeWindow() в _trigger_layout_independent_shortcut для блокировки хоткеев главного окна при активных диалогах.
2026-07-31 11:25:03 +03:00
030c327d3b Fix hotkeys interception in modal dialog text inputs
- Реализованы методы _disable_shortcuts и _enable_shortcuts для временного отключения ApplicationShortcut контекста.
- Устранена проблема с перехватом горячих клавиш (N, G, B, I) во время ввода текста в QInputDialog (переименование блока) и QDialog (редактирование координат, настройки, фоновое изображение).
- Все вызовы диалогов обёрнуты в блоки try-finally для гарантированного восстановления контекста хоткеев.
2026-07-31 11:12:36 +03:00
8f814bc1fc Add block renaming in GUI and support block name-based addressing in generated scripts
- Реализовано переименование блоков по двойному клику и в контекстном меню дерева.
- Добавлена функция транслитерации и санитарной очистки имён блоков для C++ идентификаторов.
- Реализован массив строк имён блоков в flash-памяти (PROGMEM) и метод поиска getBlockIndexByName.
- Добавлены перегрузки функций управления светодиодами, принимающие оригинальные строковые названия блоков.
- Добавлены интеграционные тесты для проверки санитации имён, генерации макросов и функций поиска.
2026-07-31 11:07:12 +03:00
228e4e4f0b Add support for script generation strategies and block-level LED functions
- Добавлен диалог выбора стратегий генерации (Сетка и Блоки) в GUI.
- Добавлен C++ код для управления светодиодами в блоках по их ID и по количеству в vm_map.h и virtual_matrix_legacy.ino.txt.
- Обновлены функции генератора, добавлена поддержка индивидуальных параметров генерации.
- Написаны интеграционные тесты для проверки генерации стратегий и функций управления блоками.
2026-07-31 09:42:54 +03:00
2832914343 feat: Add counterclockwise routing and LED editing
- Добавлено автоматическое построение блока против часовой стрелки.
- Добавлено редактирование координат LED через контекстное меню.
- Добавлено перемещение светодиодов через Alt + ЛКМ.
- Убран лишний столбец "Источник" из таблицы выбранных LED.
- Индексы LED сделаны визуальной подсказкой, которая не мешает кликам и перетаскиванию точек.
- Добавлены проверки для новых сценариев редактирования, маршрутизации, таблицы и сборочного имени.
v1.8
2026-06-11 08:49:58 +03:00
207d6ca86c fix: Accept raw JSON encodings
- Добавлена мягкая загрузка сырых JSON-файлов с корневым массивом точек.

- Исправляются trailing commas перед закрывающими скобками и числа вида 1173. без дробной части.

- При открытии файлов в UTF-16, UTF-16 LE/BE, CP1251 или CP1252 содержимое автоматически конвертируется и сохраняется в UTF-8.

- Добавлены smoke-проверки для сырого circle_centers JSON, CP1251 и UTF-16 LE без BOM.
v1.7
2026-06-10 14:05:07 +03:00
3699586cc2 feat: Allow editing and deleting LED points
- Добавлено полное удаление выбранных LED-точек через контекстное меню холста, таблицы и горячую клавишу Ctrl+Del.

- Разрешено редактирование координат X и Y для всех точек схемы, а не только для созданных вручную.

- После удаления точек пересчитываются UID, связи блоков и индексы линий без повреждения маршрутов.

- UID в таблице теперь показывает исходный id точки, сохраняя внутренний идентификатор для выбора и операций.

- Добавлена настройка распределения высоты внутренних областей боковой панели.

- Расширены smoke-тесты на удаление точек, редактирование координат, пересчет блоков и состояние интерфейса.
v1.6
2026-06-03 15:46:05 +03:00
ffa7be203e feat: Preserve mappings during generation
- Перед генерацией скрипта текущая схема теперь обязательно сохраняется.

- Для несохраненной схемы перед генерацией открывается диалог сохранения, а отмена останавливает генерацию.

- ordered_circles.json теперь сохраняет полный документ с метаданными, линиями, блоками, подложкой и unfolding.

- UID точек и point_ids блоков в ordered_circles.json пересчитываются под новый порядок генерации, а исходный id сохраняется в source_id.

- Неизвестные поля исходного JSON сохраняются при обычном сохранении и при генерации ordered_circles.json.

- Диалог выбора папки генерации теперь по умолчанию открывается в папке приложения.

- Добавлены smoke-проверки на сохранение полей, ремап UID и стартовую папку генерации.
v1.5
2026-05-26 14:34:40 +03:00
d8c95a15e2 feat: Improve editor overlays and stability
- Добавлена подложка с видимостью, прозрачностью, масштабом, перемещением и редактированием через отдельное меню.

- Добавлен инструмент создания свободных светодиодов и редактирование X/Y для вручную созданных точек в таблице.

- Упрощена таблица выбранных LED: единый ID, координаты X/Y и UID в конце.

- Добавлены настраиваемые горячие клавиши для всех действий и переключатель отображения id светодиодов.

- Улучшена отрисовка линий: стрелки направления, изгибы при полном и частичном визуальном наложении сегментов.

- Оптимизировано переключение активных линий, выбор точек и поиск наложений соединений для снижения подвисаний.

- Исправлена логика ручных LED: row/col рассчитываются по сетке 34 мм, а ручные точки не сдвигают якорь сетки.

- Обновлена сборка EXE: имя использует тег, короткий хэш или дату/время для dirty-репозитория.

- Расширен smoke-набор до 113 проверок для новых функций и регрессий.
v1.4
2026-05-25 13:39:59 +03:00
9f297b326f Release settings and shortcut customization v1.3 2026-05-21 16:58:28 +03:00
bbf580bb56 Release build naming and arrow visibility controls v1.2 2026-05-21 09:52:12 +03:00
5895ccc29a Release icon and connection direction update v1.1 2026-05-21 09:30:15 +03:00
59bbad8288 Initial LED Mapper application v1.0 2026-05-21 08:16:32 +03:00