- Изменены методы renumber_lines и renumber_blocks в models.py: теперь они переименовывают только стандартные (дефолтные) названия блоков/линий.
- Кастомные названия блоков и линий теперь полностью сохраняются при переиндексации (на сохранении).
- Добавлен интеграционный тест на сохранение/загрузку кастомных имен линий и блоков в qa_smoke.py.
- Добавлены локальные горячие клавиши для действий в дереве: F2 для переименования, Ctrl+Del для удаления, Ctrl+M для объединения блоков.
- Изменен дефолтный хоткей для удаления всех фиксаций (clear_all) на Shift+Del.
- Реализована функция rename_line для переименования линий по аналогии с блоками.
- В контекстное меню дерева добавлено отображение горячих клавиш справа от названий команд.
- Добавлены интеграционные тесты для верификации переименования линий и регистрации хоткеев.
- Добавлен вызов self.refresh_tree() в rename_block для незамедлительного отображения переименованного блока.
- Переработаны _disable_shortcuts и _enable_shortcuts для полного очищения/восстановления последовательностей QKeySequence.
- В eventFilter заменено self.focusWidget() на QApplication.focusWidget() для корректного отслеживания фокуса в диалогах.
- Добавлена проверка activeWindow() в _trigger_layout_independent_shortcut для блокировки хоткеев главного окна при активных диалогах.
- Реализованы методы _disable_shortcuts и _enable_shortcuts для временного отключения ApplicationShortcut контекста.
- Устранена проблема с перехватом горячих клавиш (N, G, B, I) во время ввода текста в QInputDialog (переименование блока) и QDialog (редактирование координат, настройки, фоновое изображение).
- Все вызовы диалогов обёрнуты в блоки try-finally для гарантированного восстановления контекста хоткеев.
- Реализовано переименование блоков по двойному клику и в контекстном меню дерева.
- Добавлена функция транслитерации и санитарной очистки имён блоков для C++ идентификаторов.
- Реализован массив строк имён блоков в flash-памяти (PROGMEM) и метод поиска getBlockIndexByName.
- Добавлены перегрузки функций управления светодиодами, принимающие оригинальные строковые названия блоков.
- Добавлены интеграционные тесты для проверки санитации имён, генерации макросов и функций поиска.
- Добавлен диалог выбора стратегий генерации (Сетка и Блоки) в GUI.
- Добавлен C++ код для управления светодиодами в блоках по их ID и по количеству в vm_map.h и virtual_matrix_legacy.ino.txt.
- Обновлены функции генератора, добавлена поддержка индивидуальных параметров генерации.
- Написаны интеграционные тесты для проверки генерации стратегий и функций управления блоками.
- Добавлено автоматическое построение блока против часовой стрелки.
- Добавлено редактирование координат LED через контекстное меню.
- Добавлено перемещение светодиодов через Alt + ЛКМ.
- Убран лишний столбец "Источник" из таблицы выбранных LED.
- Индексы LED сделаны визуальной подсказкой, которая не мешает кликам и перетаскиванию точек.
- Добавлены проверки для новых сценариев редактирования, маршрутизации, таблицы и сборочного имени.
- Добавлена мягкая загрузка сырых JSON-файлов с корневым массивом точек.
- Исправляются trailing commas перед закрывающими скобками и числа вида 1173. без дробной части.
- При открытии файлов в UTF-16, UTF-16 LE/BE, CP1251 или CP1252 содержимое автоматически конвертируется и сохраняется в UTF-8.
- Добавлены smoke-проверки для сырого circle_centers JSON, CP1251 и UTF-16 LE без BOM.
- Добавлено полное удаление выбранных LED-точек через контекстное меню холста, таблицы и горячую клавишу Ctrl+Del.
- Разрешено редактирование координат X и Y для всех точек схемы, а не только для созданных вручную.
- После удаления точек пересчитываются UID, связи блоков и индексы линий без повреждения маршрутов.
- UID в таблице теперь показывает исходный id точки, сохраняя внутренний идентификатор для выбора и операций.
- Добавлена настройка распределения высоты внутренних областей боковой панели.
- Расширены smoke-тесты на удаление точек, редактирование координат, пересчет блоков и состояние интерфейса.
- Перед генерацией скрипта текущая схема теперь обязательно сохраняется.
- Для несохраненной схемы перед генерацией открывается диалог сохранения, а отмена останавливает генерацию.
- ordered_circles.json теперь сохраняет полный документ с метаданными, линиями, блоками, подложкой и unfolding.
- UID точек и point_ids блоков в ordered_circles.json пересчитываются под новый порядок генерации, а исходный id сохраняется в source_id.
- Неизвестные поля исходного JSON сохраняются при обычном сохранении и при генерации ordered_circles.json.
- Диалог выбора папки генерации теперь по умолчанию открывается в папке приложения.
- Добавлены smoke-проверки на сохранение полей, ремап UID и стартовую папку генерации.
- Добавлена подложка с видимостью, прозрачностью, масштабом, перемещением и редактированием через отдельное меню.
- Добавлен инструмент создания свободных светодиодов и редактирование X/Y для вручную созданных точек в таблице.
- Упрощена таблица выбранных LED: единый ID, координаты X/Y и UID в конце.
- Добавлены настраиваемые горячие клавиши для всех действий и переключатель отображения id светодиодов.
- Улучшена отрисовка линий: стрелки направления, изгибы при полном и частичном визуальном наложении сегментов.
- Оптимизировано переключение активных линий, выбор точек и поиск наложений соединений для снижения подвисаний.
- Исправлена логика ручных LED: row/col рассчитываются по сетке 34 мм, а ручные точки не сдвигают якорь сетки.
- Обновлена сборка EXE: имя использует тег, короткий хэш или дату/время для dirty-репозитория.
- Расширен smoke-набор до 113 проверок для новых функций и регрессий.