StyleCatalogService
=====================

.. currentmodule:: axioma.render

.. class:: StyleCatalogService

	Служба каталогов стилей оформления векторных графических объектов. Служит для оперативного изменения каталогов, в которых хранятся стили оформления объектов. Для постоянного запоминания значений с загрузкой в следующих сессиях работы необходимо использовать соответствующие методы класса :class:`~axioma.render.RenderSettingsManager`. Первоначально при загрузке служба инициализирует значения из настроек, которые были изменены посредством класса :class:`~axioma.render.RenderSettingsManager`

	Унаследован от: :class:`~PyQt5.QtCore.QObject`
	
		.. py:method:: setBaseCatalog(dir)

			Задает базовый каталог, в котором должны находиться подкаталоги со стандартными наименованиями Pen, Brush и CustSymb , в которых содержатся файлы с соответствующими стилями

			:param dir: Базовый каталог, в котором предполагается расположены подкаталоги со стилями
			:type dir: :class:`~PyQt5.QtCore.QDir`
			:return: True, если успешно. В противном случае False
			:rtype: :class:`bool`

		.. py:method:: resetToDefault()

			Сброс пользовательских установок и задание каталогов по умолчанию

		.. py:method:: setPenCatalog(dirName = None)

			Смена каталога, в котором содержатся стили линий. Если каталог не по каким-то причинам не установлен, сбрасывается на значение по умолчанию :class:`~axioma.render.StyleCatalogService.defaultPenDir`

			:param dirName: Наименование каталога со стилями линий. Если параметр опущен, каталог устанавливается по умолчанию как в первоначальном варианте поставки
			:type dirName: :class:`str`
			:return: True, если каталог существует и он непустой. В противном случае False
			:rtype: :class:`bool`

		.. py:method:: penCatalog()

			Установленный на данный момент каталог со стилями линий. 

			:rtype: :class:`str`

		.. py:method:: setBrushCatalog(dirName = None)

			Смена каталога, в котором содержатся стили заливок. Если каталог не по каким-то причинам не установлен, сбрасывается на значение по умолчанию :class:`~axioma.render.StyleCatalogService.defaultBrushDir`

			:param dirName: Наименование каталога со стилями заливок. Если параметр опущен, каталог устанавливается по умолчанию как в первоначальном варианте поставки
			:type dirName: :class:`str`
			:return: True, если каталог существует и он непустой. В противном случае False
			:rtype: :class:`bool`

		.. py:method:: brushCatalog()

			Установленный на данный момент каталог со стилями заливок

			:rtype: :class:`str`

		.. py:method:: setSymbolCatalog(dirName = None)

			Смена каталога, в котором содержатся растровые файлы точечных объектов. Если каталог не по каким-то причинам не установлен, сбрасывается на значение по умолчанию :class:`~axioma.render.StyleCatalogService.defaultSymbolDir`

			:param dirName: Наименование каталога с растрами точечных объектов. Если параметр опущен, каталог устанавливается по умолчанию как в первоначальном варианте поставки
			:type dirName: :class:`str`
			:return: True, если каталог существует и он непустой. В противном случае False
			:rtype: :class:`bool`

		.. py:method:: symbolCatalog()

			Установленный на данный момент каталог с растровыми файлами точечных объектов

			:rtype: :class:`str`

		.. py:method:: defaultPenDir()

			Каталог по умолчанию для хранения стилей линий

			:rtype: :class:`str`

		.. py:method:: defaultBrushDir()

			Каталог по умолчанию для хранения стилей заливок

			:rtype: :class:`str`

		.. py:method:: defaultSymbolDir()

			Каталог по умолчанию для хранения растровых символов

			:rtype: :class:`str`

		.. method:: changed()

			[signal] Сигнал испускается при смене любого из каталогов со стилями


Пример использования:

  .. code-block:: python
  
    from axioma.core.plugin import *
    import axioma.render

    # Создаем своё расширение и объявляем в нём службу каталогов для стилей
    class MyExtension(axioma.core.plugin.Extension):
        def __init__(self):
            super().__init__()
            self.catalogService = self.createDependencyGetter(axioma.render.StyleCatalogService)

    # Создаем расширение и регистрируем его в системе
    ext = MyExtension()
    axioma.app.core.prependExtension(ext)

    if ext.catalogService is not None:
        # При смене каталога печатается сообщение
        ext.catalogService().changed.connect(lambda: print("Каталог сменен"))
        # Текущее значение  каталога с растровыми точечными стилями
        print('Текущий каталог: {}'.format(ext.catalogService().symbolCatalog()))
        ext.catalogService().setSymbolCatalog("c:\\work\\style\\CustSymb")
        print('Новый каталог: {}'.format(ext.catalogService().symbolCatalog()))
        ext.catalogService().setPenCatalog('c:\\work\\style\\Pen')
        # Сбрасываем каталог со стилями растровых точечных объектов на значение по умолчанию
        ext.catalogService().setSymbolCatalog()

        
.. note:: В поставку Аксиома.ГИС входит модуль для оперативного переключения между каталогами со стилями - styleCatalog. Подробнее см. исходные тексты модуля.
