SelectionManager - Класс доступа к выделенным объектам
======================================================

.. currentmodule:: axioma.core.dp

.. class:: SelectionManager

	Класс доступа к выделенным объектам. Получить ссылку на менеджер можно у экземпляра класса :class:`~axioma.gui.Gui` посредством :meth:`~axioma.gui.Gui.selectionManager()`

	Унаследован от :class:`~PyQt5.QtCore.QObject`
	
		.. .. method:: SelectionManager(parent=None)
		..
		..	Конструктор класса
		..	
		..	:param parent: Родительский объект
		..	:type parent: :class:`~PyQt5.QtCore.QObject`
			
		.. method:: readSelectedFeaturesData()
		
			Получить курсор с данными для всех выделенных объектов
			
			:return: Курсор
			:rtype: :class:`~axioma.core.dp.Cursor`
		
			.. code-block:: python
				:caption: Пример получения выделенных объектов:
				:name: selectionManager-code-sample

				import axioma.app

				selectionManager = axioma.app.gui.selectionManager()
				cursor = selectionManager.readSelectedFeaturesData()
				for feature in cursor:
					print(feature.valuesToText())

		.. method:: hasSelection()

			Имеет ли выделенные объекты

			:rtype: :class:`bool`

		.. method:: hasSelection(table)

			Имеет ли заданная таблица выделенные объекты

			:param table: таблица для проверки
			:type table: :class:`~axioma.core.dp.Table`
			:rtype: :class:`bool`

		.. method:: hasTarget()

			Имеет ли выделение для изменяемых объектов

			:rtype: :class:`bool`

		.. method:: hasTarget(table)

			Имеет ли заданная таблица выделение для изменяемых объектов

			:param table: таблица для проверки
			:type table: :class:`~axioma.core.dp.Table`
			:rtype: :class:`bool`

		.. method:: currentSelection()

			Текущее выделение

			:rtype: :class:`~axioma.core.dp.Selection`

		.. method:: currentTarget()

			Текущее выделение изменяемых объектов

			:rtype: :class:`~axioma.core.dp.Selection`

		.. method:: sourceTableWithSelection()

			Получить таблицу, являющуюся источником текущего выделения

			:rtype: :class:`~axioma.core.dp.Table` или :any:`None`

			.. code-block:: python

				selectionManager = axioma.app.gui.selectionManager()
				table = selectionManager.sourceTableWithSelection()
				# Эквивалентно сдедующей строчке:
				# table = selectionManager.currentSelection().table

		.. method:: selectionChanged(selectionChange)

			[signal] Выделение было изменено

			:param selectionChange: информация о смене выделения
			:type selectionChange: :class:`~axioma.core.dp.SelectionChangeInfo`
			
		.. method:: setSelection(table,ids)
			
			Создать выборку из объектов таблицы по их id
			
			:param table: таблица с необходимыми объектами
			:type table: :class:`~axioma.core.dp.Table`
			:param ids: список id необходимых объектов
			:type ids: :class:`list` [:class:`~PyQt5.QtCore.QVariant`]
			
		.. method:: addToSelection(table,ids)
			
			Добавить в созданную ранее выборку объекты таблицы по их id
			
			:param table: таблица с необходимыми объектами
			:type table: :class:`~axioma.core.dp.Table`
			:param ids: список id необходимых объектов
			:type ids: :class:`list` [:class:`~PyQt5.QtCore.QVariant`]
		
		.. method:: deselect(table,ids)
			
			Удалить из выборки объекты таблицы по их id
			
			:param table: таблица с необходимыми объектами
			:type table: :class:`~axioma.core.dp.Table`
			:param ids: список id необходимых объектов
			:type ids: :class:`list` [:class:`~PyQt5.QtCore.QVariant`]
			
			.. seealso:: функции :class:`~axioma.core.dp.SelectionManager.addToSelection()`, :class:`~axioma.core.dp.SelectionManager.setSelection()`

			.. code-block:: python
				
				# Получаем каталог открытых данных
				catalog = axioma.app.mainWindow.dataCatalog()
				# Выбираем открытую таблицу
				table = catalog.allDataObjects()[0]
				# Получаем объект класса SelectionManager
				manager = catalog.selectionManager()
				# Создаем выборку из объектов таблицы с номерами 1, 3 и 5
				manager.setSelection(table, [1, 3, 5])
				# Добавляем в созданную выборку объект таблицы с номером 2
				manager.addToSelection(table, [2])
				# Удаляем выборку
				manager.deselect(table, [1, 2, 3, 5])
