# -*- coding: utf-8 -*- # gui/components/model_view/_mv_interaction.py # Камера, клики, события мыши — композиция специализированных миксинов. from gui.components.model_view._mv_interaction_core import InteractionCoreMixin from gui.components.model_view._mv_interaction_events import InteractionEventsMixin from gui.components.model_view._mv_interaction_nav import InteractionNavigationMixin class InteractionMixin( InteractionCoreMixin, InteractionEventsMixin, InteractionNavigationMixin, ): """Камера, клик-обработка, колесо мыши, eventFilter.""" pass # --------------------------------------------------------------------------- # Module workflow notes # --------------------------------------------------------------------------- # 1) Задача модуля: # Композиционный фасад взаимодействия со сценой: события мыши, навигация и базовые операции. # # 2) Последовательность действий и вызовов: # A. Композиционный класс InteractionMixin: # Назначение: объединяет поведение через InteractionCoreMixin, # InteractionEventsMixin, InteractionNavigationMixin. # InteractionCoreMixin — координаты, камера, утилиты interactor. # InteractionEventsMixin — тонкий диспетчер eventFilter → InteractionManager. # InteractionNavigationMixin — навигация, plotter click callback. # Вся логика сценариев вынесена в _interaction_scenario.py + _scenario_*.py. # # 3) Важные ограничения и инварианты: # - Модуль выполняется в составе ModelViewWidget и использует согласованные поля состояния self._... . # - Межмодульная связность: только через фасад model_view; прямые обращения между zone, rack, shelf, cell запрещены. # - Очистка состояния должна быть идемпотентной: повторный вызов не меняет корректное состояние в ошибочное. # # 4) Правило сопровождения: # - Любое изменение сценария должно сопровождаться обновлением этого блока с сохранением фактического порядка вызовов. # - При добавлении метода указывать его место в цепочке сценария (запуск, основной шаг, завершение, вспомогательная логика).