- добавить команды копирования и вставки выбранных светодиодов в режиме редактирования
- назначить на новые команды настраиваемые сочетания Ctrl+C и Ctrl+V
- создавать свободные копии с уникальными идентификаторами и каскадным смещением по шагу сетки
- сохранять взаимное расположение и пользовательские поля копируемых точек
- объединить вставку группы в одну операцию Undo с восстановлением выделения через Redo
- не перехватывать стандартное копирование и вставку при редактировании текста и координат
- добавить пункты меню, иконки, документацию и проверки, расширив QA до 164 сценариев
- встраивать исходное изображение подложки в JSON вместе с метаданными и контрольной суммой
- сохранять геометрию и параметры встроенной подложки при повторном редактировании
- показывать значение «Встроенная» в диалоге подложки до выбора замены
- загружать встроенное изображение непосредственно из JSON на холст
- защищать существующий файл схемы при ошибке чтения подложки
- расширить автоматические проверки до 161 сценария
- исправить точное и атомарное сохранение схем
- добавить настройку шага сетки и абсолютного размера LED
- добавить пакетное удаление выбранных блоков
- исключить генерацию устаревшего INO-файла
- синхронизировать сетку обычного режима и режима редактирования
- устранить движение схемы при переключении режима редактирования
- расширить автоматические проверки до 158 сценариев
- Добавлена bbox-подсветка с синим пунктиром вокруг выделенных светодиодов
- Реализовано перетаскивание выделенной группы светодиодов за любую область внутри bbox-рамки
- Добавлен инструмент «Выровнять по сетке» (Snap to Grid) на правую панель
- Добавлена поддержка бесконечной сетки во все стороны в режиме редактирования
- Исправлено прореживание и масштабирование сетки в режиме редактирования
- Добавлены пункты выделения линий и блоков по правому клику мыши
- Стабилизировано положение камеры при добавлении точек (устранено смещение scrolling-вьюпорта)
- Исправлено отображение кнопок инструментов в QMenuBar: вместо QWidgetAction использован дочерний виджет QWidget с абсолютным позиционированием.
- Добавлено позиционирование виджета кнопок справа от заголовка Инструменты с автоматическим пересчетом координат в resizeEvent.
- Обновлен юнит-тест test_menu_bar_tools_buttons под новое представление.
- Инструменты добавлены непосредственно на панель меню QMenuBar в виде QToolButton.
- Действия инструментов отображаются справа от заголовков меню (Файл, Правка, Вид, Инструменты).
- Действия инструментов отделены от заголовков вертикальным разделителем.
- Добавлен и пройден тест test_menu_bar_tools_buttons в qa_smoke.py.
- Добавлено действие Создать... (Ctrl+N) в меню Файл для инициализации нового файла схемы.
- Реализована автоматическая запись дефолтной схемы circles при открытии пустого или содержащего только пробелы json-файла.
- Добавлены соответствующие автоматические тесты в qa_smoke.py.
- Добавлена возможность выбора тёмной или светлой темы для экспортируемого изображения.
- Легенда перенесена вниз и отрисовывается слева направо в виде колонок одинаковой ширины.
- Реализованы пунктирные линии связи между соседними блоками одной ленты.
- На соединительных линиях рисуются стрелки направления соединения светодиодов.
- Добавлен механизм сдвига номеров светодиодов для предотвращения наложений друг на друга и их ухода за пределы холста.
- Создан автономный модуль mapping_renderer.py, рисующий маппинг напрямую из MappingDocument.
- Изображение больше не зависит от Qt-сцены и не содержит метки интерфейса или лишних id.
- Разрешение выходного изображения 2400x2400+800 пикселей с боковой легендой.
- Плашки start/end блоков рисуются напрямую на изображении.
- Добавлено предупреждение при несохранённых изменениях (с возможностью сохранить и экспортировать сразу).
- canvas.py очищен от предыдущей неработающей реализации export_to_image.
- Реализован метод export_to_image в canvas.py для рендеринга всей сцены маппинга (с учетом кастомного фона, сетки и точек) в файл изображения с полями и масштабированием.
- Добавлено действие export_image (Экспортировать в изображение...) в меню Файл с хоткеем Ctrl+Shift+E и вызовом диалога сохранения файла.
- Добавлен интеграционный тест test_export_mapping_to_image в qa_smoke.py для проверки экспорта схемы в PNG.
- Добавлены локальные горячие клавиши для действий в дереве: 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 сделаны визуальной подсказкой, которая не мешает кликам и перетаскиванию точек.
- Добавлены проверки для новых сценариев редактирования, маршрутизации, таблицы и сборочного имени.
- Добавлено полное удаление выбранных 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 проверок для новых функций и регрессий.