58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
||
# hub/ticket/ticket_plugin.py
|
||
|
||
"""Plugin-shell модуля Ticket без переноса standalone-оболочки."""
|
||
|
||
from error_logger import log_exception
|
||
from gui.containers import SContainer, VContainer
|
||
|
||
from application import TaskApplicationService
|
||
from ui import TicketShell
|
||
|
||
|
||
PLUGIN_DISPLAY_NAME = "Ticket"
|
||
|
||
|
||
class TicketPlugin(SContainer):
|
||
"""Корневая точка входа Ticket внутри общей plugin-системы."""
|
||
|
||
def __init__(self, application_service: TaskApplicationService | None = None):
|
||
super().__init__(width_percent=100, height_percent=100)
|
||
self._application_service = application_service or TaskApplicationService(parent=self)
|
||
self._shell: TicketShell | None = None
|
||
self._is_cleaned = False
|
||
self._setup_ui()
|
||
self._start_application()
|
||
|
||
def _setup_ui(self) -> None:
|
||
"""Собрать plugin-shell Ticket с локальной навигацией."""
|
||
try:
|
||
main_container = VContainer(margin=16, spacing=10, parent=self)
|
||
self._shell = TicketShell(application=self._application_service, parent=self)
|
||
main_container.add_widget(self._shell)
|
||
except Exception as exc:
|
||
log_exception(__name__, "TicketPlugin._setup_ui", exc)
|
||
raise
|
||
|
||
def _start_application(self) -> None:
|
||
"""Запустить application-слой Ticket после сборки shell."""
|
||
try:
|
||
self._application_service.start()
|
||
except Exception as exc:
|
||
log_exception(__name__, "TicketPlugin._start_application", exc)
|
||
raise
|
||
|
||
def cleanup(self) -> None:
|
||
"""Безопасно остановить application-слой Ticket."""
|
||
if self._is_cleaned:
|
||
return
|
||
self._is_cleaned = True
|
||
try:
|
||
self._application_service.stop()
|
||
except Exception as exc:
|
||
log_exception(__name__, "TicketPlugin.cleanup", exc)
|
||
|
||
def closeEvent(self, event) -> None:
|
||
self.cleanup()
|
||
super().closeEvent(event)
|