SignalingCursor - Итерируемый объект по записям с сигналом
=============================================================

.. currentmodule:: axioma.core.dp

.. class:: SignalingCursor

	Оборачивает объект типа :class:`~axioma.core.dp.Cursor` и добавляет сигнал при каждой итерации

	Унаследован от:

		* :class:`axioma.core.dp.Cursor`

		.. method:: SignalingCursor(cursor, parent=None)

			Конструктор

			:param cursor: Оборачиваемый объект
			:type cursor: :class:`~axioma.core.dp.Cursor`
			:param parent: Родительский объект
			:type parent: :class:`~PyQt5.QtCore.QObject` или :any:`None`

		.. method:: moved(count)

			``[signal]`` Испускается при каждой итерации

			:param count: Номер итерации
			:type count: :class:`int`
			
		.. method:: abort()

			Прервать итерации. Переводит Итератор в состояние, аналогичное завершению просмотра всех записей.

	.. code-block:: python
		:caption: Пример подключения прогресса при перемещении по записям курсора. После 10-й записи прерываем выполнение.
		:name: signaling-cursor-code-sample

			import axioma.core
			from axioma.core.dp import *

			table = axioma.core.open_json({'src': '/tmp/world.tab'})
			if not table:
				raise RuntimeError("Нет открытых таблиц")
			cursor=table.select(QuerySelectAll(table.attributeNames())) # Запрашиваем все данные и открывем курсор
			signaling_cursor=SignalingCursor(cursor) # Оборачиваем курсор

			def local_slot(count): # Функция выполняется при итерации по строкам до значения 10
				print("Запись -->"+str(count))
				if count >= 10:
					print("Прервано на итерации #10")
					signaling_cursor.abort() # Прерывание выполнения

			signaling_cursor.moved.connect(local_slot) # Подключаем функцию к событию перемещения на другую строку курсора
			for feature in signaling_cursor:
				print(feature.getAttribute(0))
