70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# hub/ticket/ui/pages/report_viewer.py
|
|
|
|
"""Просмотрщик документа Ticket."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from gui.components import Button, Dialog, Label, TextInput
|
|
from gui.containers import VContainer
|
|
|
|
from domain import TicketDocumentSnapshot
|
|
|
|
|
|
class ReportViewer(Dialog):
|
|
"""Простой viewer сохранённого документа Ticket."""
|
|
|
|
def __init__(
|
|
self,
|
|
document: TicketDocumentSnapshot,
|
|
parent=None,
|
|
):
|
|
self._document = document
|
|
self._close_button: Button | None = None
|
|
super().__init__(
|
|
title=document.title,
|
|
width=720,
|
|
height=760,
|
|
modal=True,
|
|
parent=parent,
|
|
)
|
|
self._setup_ui()
|
|
self._connect_signals()
|
|
|
|
def _setup_ui(self) -> None:
|
|
# Root-контейнер viewer-окна: заголовок, метаданные, текст документа и кнопка закрытия.
|
|
main_container = VContainer(margin=20,
|
|
spacing=12)
|
|
self.add_widget(main_container)
|
|
|
|
title_label = Label(
|
|
self._document.title,
|
|
alignment="left",
|
|
style="TICKET_LIST_HEADER",
|
|
)
|
|
metadata_label = Label(
|
|
(
|
|
f"Задача #{self._document.payload.get('task_id', self._document.task_id)}\n"
|
|
f"{self._document.created_at.strftime('%d.%m.%Y %H:%M')}\n"
|
|
f"{self._document.location or 'Локация не указана'}"
|
|
),
|
|
alignment="left",
|
|
style="TICKET_LIST_SUBTITLE",
|
|
)
|
|
viewer = TextInput(
|
|
text=self._document.content or self._document.summary,
|
|
style="TICKET_PREVIEW_AREA",
|
|
multiline=True,
|
|
)
|
|
viewer.set_read_only(True)
|
|
self._close_button = Button("Закрыть", style="FILTER_BUTTON", content_fit=True)
|
|
|
|
main_container.add_widget(title_label)
|
|
main_container.add_widget(metadata_label)
|
|
main_container.add_widget(viewer)
|
|
main_container.add_widget(self._close_button)
|
|
|
|
def _connect_signals(self) -> None:
|
|
if self._close_button is not None:
|
|
self._close_button.clicked.connect(self.accept)
|