# ReportView - Окно просмотра отчета

class axipy.ReportView

  Базовые классы: `DrawableView`

  Окно с планом отчета. Для создания экземпляра необходимо использовать `axipy.ViewManager.create_reportview()`. через экземпляр `axipy.view_manager`. Параметры отчета `axipy.Report` можно получить через свойство `ReportView.report()`.

  Пример создания отчета:

      reportview = view_manager.create_reportview()

      # Добавим полигон
      geomItem = GeometryReportItem()
      geomItem.geometry = Polygon((10,10), (10, 100), (100, 100), (10, 10))
      geomItem.style = PolygonStyle(45, Qt.red)
      reportview.report.items.add(geomItem)

      # Установим текущий масштаб
      reportview.view_scale = 33

  Свойства:

  `can_redo` | Возможен ли откат на один шаг вперед.
  `can_undo` | Возможен ли откат на один шаг назад.
  `device_to_scene_transform` | Объект трансформации из координат окна в координаты карты.
  `is_modified` | Есть ли изменения в окне.
  `mesh_size` | Размер ячейки сетки.
  `position` | Размер и положение окна.
  `report` | Объект отчета.
  `scene_to_device_transform` | Объект трансформации из координат карты в координаты окна.
  `show_borders` | Показывать границы страниц.
  `show_elements_size` | Показывать размер элементов.
  `show_mesh` | Показывать сетку привязки.
  `show_ruler` | Показывать линейку по краям.
  `show_type` | Возвращает тип состояния окна.
  `snap_mode` | Включает режим привязки координат при редактировании геометрии в окне карты или отчета.
  `snap_to_guidelines` | Включение режима притяжения элементов отчета к направляющим.
  `snap_to_mesh` | Включение режима притяжения элементов отчета к узлам сетки.
  `title` | Заголовок окна просмотра.
  `view_scale` | Текущий масштаб.
  `widget` | Виджет, соответствующий содержимому окна.
  `x_guidelines` | Вертикальные направляющие.
  `y_guidelines` | Горизонтальные направляющие.

  Методы:

  `clear_guidelines`() | Удаляет все направляющие.
  `clear_selected_guidelines`() | Очищает выбранные направляющие.
  `close`() | Закрывает окно.
  `fill_on_pages`() | Наиболее эффективно заполняет пространство отчета масштабированием его элементов.
  `get_printer`() | Ссылка на используемый текущий принтер.
  `offset`(dx, dy) | Производит сдвиг окна карты или отчета.
  `redo`() | Производит откат на один шаг вперед.
  `reset_parent`(parent) | Сбрасывает окно контейнера для карты или таблицы просмотра, если он существует и закрывает его.
  `save_template`(file_name) | Сохраняет отчет в виде шаблона как файл *.tmpl
  `scale_with_center`(scale, center) | Установка нового центра с заданным масштабированием.
  `set_printer`(printer) | Устанавливает для отчета объект `PySide2.QtPrintSupport.QPrinter`
  `show`([type]) | Показывает окно в соответствие с приведенным типом.
  `undo`() | Производит откат на один шаг назад.

  Сигналы:

  `mouse_moved` | Сигнал при смещении курсора мыши.
  `scene_changed` | Сигнал об изменении контента окна.

  Специальные методы:

  `__eq__`(other) | Оператор равенства (==).
  `__repr__`() | Официальное строковое представление объекта при вызове `repr()`.
  `__str__`() | Неформальное строковое представление объекта при вызове `str` или `print()`.

  __eq__(other: object) → bool

    Оператор равенства (==).

  __repr__() → str

    Официальное строковое представление объекта при вызове `repr()`.

  __str__() → str

    Неформальное строковое представление объекта при вызове `str` или `print()`.

  property can_redo: bool

    Возможен ли откат на один шаг вперед.

  property can_undo: bool

    Возможен ли откат на один шаг назад.

  clear_guidelines()

    Удаляет все направляющие.

  clear_selected_guidelines()

    Очищает выбранные направляющие.

  close()

    Закрывает окно.

    Примечание

    Если при закрытии окна выдается запрос о сохранении данных перед закрытием и необходимо изменить поведение, то это можно сделать через соответствующие типу окна настройки или же через свойство `axipy.CurrentSettings.SilentCloseWidget`

  property device_to_scene_transform: QTransform

    Объект трансформации из координат окна в координаты карты.

    Результат:

      Объект трансформации.

  fill_on_pages()

    Наиболее эффективно заполняет пространство отчета масштабированием его элементов.

  get_printer() → QPrinter

    Ссылка на используемый текущий принтер. Для того, чтобы изменить настройки, нужно запросить существующий объект, поменять необходимые значения и снова назначить посредством `ReportView.set_printer()`. Или же установить другой объект `PySide2.QtPrintSupport.QPrinter`.

    Пример смены свойств у текущего окна отчета

        from PySide2.QtGui import QPageLayout, QPageSize
        import axipy
        # Получение текущего окна отчета
        reportview = axipy.view_manager.active
        if isinstance(reportview, axipy.ReportView):
            # Получение текущего принтера
            printer = reportview.get_printer()
            # Именение размера страницы
            printer.setPageSize(QPageSize(QPageSize.A3))
            # Изменение ориентации страницы
            printer.setPageOrientation(QPageLayout.Landscape)
            # Установление нового значения
            reportview.set_printer(printer)

  property is_modified: bool

    Есть ли изменения в окне.

  property mesh_size: float

    Размер ячейки сетки.

  property mouse_moved: Signal

    Сигнал при смещении курсора мыши. Возвращает значения в координатах отчета.

    Тип результата:

      Signal[float, float]

    Пример:

        reportview.mouse_moved.connect(lambda x,y: print('Coords: {} {}'.format(x, y)))

  offset(dx: float, dy: float)

    Производит сдвиг окна карты или отчета. Особенностью является то, что при этом сохраняется прежний центр (актуально для карты).

    Параметры:

      - dx – Смещение по горизонтали в координатах экрана (пикселях)

      - dy – Смещение по вертикали в координатах экрана (пикселях)

  property position: QRect

    Размер и положение окна.

  redo()

    Производит откат на один шаг вперед.

    При этом возвращается состояние до последней отмены.

  property report: Report

    Объект отчета.

    Результат:

      Отчет.

  reset_parent(parent: QWidget)

    Сбрасывает окно контейнера для карты или таблицы просмотра, если он существует и закрывает его. Это требуется когда окно карты или таблица просмотра необходимо встроить в другое окно.

    Параметры:

      parent – Окно - новый родитель

    Пример встраивания окно карты в диалог:

        table = provider_manager.openfile('world.tab')
        layer = Layer.create(table)
        m = Map([layer])
        view = view_manager.create_mapview(m)

        # Диалог, в который будет встраиваться
        class MyDialog(QDialog):

            def __init__(self, parent ):
                super().__init__(parent)
                # Инициализируем менеджер компоновки
                self.layout = QGridLayout()
                self.setLayout(self.layout)

            def set_mapview(self, view):
                # Устанавливаем окно карты как контент данного диалога
                view.reset_parent(self)
                self.layout.addWidget(view.widget)
                view.show()

        dialog = MyDialog(view_manager.global_parent)
        dialog.resize(500,300)
        dialog.set_mapview(view)
        dialog.show()

  save_template(file_name: str)

    Сохраняет отчет в виде шаблона как файл *.tmpl

    Параметры:

      file_name – Наименование выходного файла.

  scale_with_center(scale: float, center: Pnt)

    Установка нового центра с заданным масштабированием.

    Параметры:

      - scale – Коэффициент масштабирования по отношению к текущему.

      - center – Устанавливаемый центр.

  property scene_changed: Signal

    Сигнал об изменении контента окна.

    Тип результата:

      Signal[]

  property scene_to_device_transform: QTransform

    Объект трансформации из координат карты в координаты окна.

    Результат:

      Объект трансформации.

  set_printer(printer: QPrinter)

    Устанавливает для отчета объект `PySide2.QtPrintSupport.QPrinter`

    Параметры:

      printer – Новое значение принтера или измененное запрошенное ранее через `ReportView.get_printer()`

  show(type: int = SHOW_NORMAL)

    Показывает окно в соответствие с приведенным типом.

    Допустимые значения:
    Константа | Значение | Описание
    --- | --- | ---
    SHOW_NORMAL | 1 | Обычный показ окна (по умолчанию).
    SHOW_MINIMIZED | 2 | Показ окна в режиме минимизации.
    SHOW_MAXIMIZED | 3 | Показ окна в режиме распахивания.

  property show_borders: bool

    Показывать границы страниц.

  property show_elements_size: bool

    Показывать размер элементов.

  property show_mesh: bool

    Показывать сетку привязки.

  property show_ruler: bool

    Показывать линейку по краям.

  property show_type: int

    Возвращает тип состояния окна.

    Подробнее см. `show()`

  property snap_mode: bool

    Включает режим привязки координат при редактировании геометрии в окне карты или отчета.

  property snap_to_guidelines: bool

    Включение режима притяжения элементов отчета к направляющим.

  property snap_to_mesh: bool

    Включение режима притяжения элементов отчета к узлам сетки.

  property title: str

    Заголовок окна просмотра.

  undo()

    Производит откат на один шаг назад.

  property view_scale: float

    Текущий масштаб.

  property widget: QWidget

    Виджет, соответствующий содержимому окна.

    Результат:

      Qt5 виджет содержимого.

  property x_guidelines: XGuidelines

    Вертикальные направляющие. Значения содержатся в единицах измерения отчета.

    Рассмотрим на примере:

        # Добавление вертикальной направляющей
        reportview.x_guidelines.append(20)
        # Изменение значения направляющей по индексу
        reportview.x_guidelines[0] = 80
        # Удаление всех направляющих.
        reportview.clear_guidelines()

  property y_guidelines: YGuidelines

    Горизонтальные направляющие.

    Работа с ними производится по аналогии с вертикальными направляющими.