import os, sys
import cvb
if sys.version_info >= (3, 11):
from PySide6.QtCore import QObject, QAbstractListModel, Qt, QModelIndex, Property, Signal, Slot
else:
from PySide2.QtCore import QObject, QAbstractListModel, Qt, QModelIndex, Property, Signal, Slot
class MinosResultData(object):
def __init__(self):
self.image = None
self.list = []
class MinosResultModel(QAbstractListModel):
LineText = Qt.UserRole
StartPosition = Qt.UserRole + 1
def __init__(self, image_controller , parent=None):
super(MinosResultModel, self).__init__(parent)
self._image_controller = image_controller
self._result_queue = [None] * 0
self._current_result = MinosResultData()
self._text = ""
self._processing_time = 0.0
self.notify_refresh.connect(self.refresh)
def roleNames(self):
roles = dict()
roles[MinosResultModel.LineText] = b"lineText"
roles[MinosResultModel.StartPosition] = b"startPosition"
return roles
def rowCount(self, parent = QModelIndex()):
return len(self._current_result.list)
def data(self, index, role = Qt.DisplayRole):
if not index.isValid():
return None
position, text = self._current_result.list[index.row()]
if role == MinosResultModel.LineText:
return text
elif role == MinosResultModel.StartPosition:
else:
return None
def push_data(self, data):
self._result_queue.append(data)
self.notify_refresh.emit()
@Slot()
def refresh(self):
if (len(self._result_queue) == 0):
return None
self._current_result = self._result_queue.pop()
self._result_queue.clear()
self.layoutChanged.emit()
stream = ""
for i in range(len(self._current_result.list)):
stream += (self._current_result.list[i][1] + '\n')
self.set_search_result_text(stream)
self._image_controller.refresh(self._current_result.image)
def set_search_result_text(self, text):
if (self._text != text):
self._text = text
self.notify_search_result_text.emit()
def set_processing_time(self, processing_time):
if (self._processing_time != processing_time):
self._processing_time = processing_time
self.notify_processing_time.emit()
def search_result_text(self):
return self._text
def processing_time(self):
return self._processing_time
notify_search_result_text = Signal()
notify_processing_time = Signal()
notify_refresh = Signal()
searchResultText = Property(str, search_result_text, notify=notify_search_result_text)
processingTime = Property(float, processing_time, notify=notify_processing_time)
Union[PySide2.QtCore.QPointF, PySide6.QtCore.QPointF] cvb_to_qt_point(cvb.Point2D point)