Плагины на языке Python
=======================

.. note:: В дистрибутив Аксиома.ГИС входит тестовый плагин, исходный код которого можно посмотреть в папке bin/python_plugins/pluginexample.

Требования к плагину
--------------------

Плагин должен представлять из себя папку, содержащую как минимум два файла: metadata.json и __init__.py.

metadata.json
^^^^^^^^^^^^^

Это файл с метаданными в формате JSON.

Корневым элементом этого файла должен быть объект, который может иметь следующие поля:

================  =============  =================================================================================
Название          Тип            Описание
================  =============  =================================================================================
id                Строка         Уникальный идентификатор плагина.
                                 Для обеспечения уникальности рекомендуется использовать способ наименования
                                 аналогичный пространствам имен java, например, ru.mycompanyname.HelloWorldPlugin
displayName       Строка         Имя плагина, отображаемое пользователю
description       Строка         Описание предназначения плагина
defaultAutoload   Логический     Флаг, определяющий загружается ли плагин по умолчанию
hidden            Логический     Флаг, определяющий показывать ли плагин пользователю в настройках
================  =============  =================================================================================

Строковые параметры, предназначенные для отображения в интерфейсе, могут быть локализованы.
Для этого нужно использовать JSON-объект, который содержит локализованные строки в полях, соответствующих названию локали.
Например: ``{"ru" : "Русский текст", "en" : "English text", "en_GB" : "Fancy English text"}``

Пример файла с метаданными: ::

	{
		"id" : "ExamplePlugin",
		"displayName" : {"ru" : "Пример модуля"},
		"description" : {"ru" : "Модуль для демонстрации возможностей разработки на Python"},
		"defaultAutoload" : false
	}


__init__.py
^^^^^^^^^^^

С точки зрения Python плагин является пакетом (package), и при его импорте интерпретатор выполняет код из файла __init__.py.
Кроме того, плагин может содержать специальные методы:

* init() - вызывается при загрузке плагина, если инициализировать плагин не удалось, метод должен вернуть False, иначе True.

* createExtensions() - этот метод должен вернуть список расширений, которые будут загружены в приложение.

Расширения
----------

Доступны следующие типы расширений:

* :class:`~axioma.gui.extension.RibbonExtension` - позволяет создавать вкладки и группы на панели ленточного интерфейса в окне приложения Аксиомы.ГИС

* :class:`~axioma.gui.extension.ActionExtension` - позволяет добавлять действия(:class:`~PyQt5.QtWidgets.QAction`) в интерфейс

* :class:`~axioma.gui.extension.ToolControllerExtension` - позволяет добавлять инструменты для работы с окнами

* :class:`~axioma.gui.extension.BasicToolExtension` - упрощенный вариант :class:`~axioma.gui.extension.ToolControllerExtension`
