def __init__(self, qgsMapCanvas, parent):
        QWidget.__init__(self, parent)
        
        if not isinstance(qgsMapCanvas, QgsMapCanvas):
            raise TypeError("IdentifyPlusModel expected a qgis._gui.QgsMapCanvas, got a {} instead".format(type(qgsMapCanvas)))
        
        self.setupUi(self)
        
        self._qgsMapCanvas = qgsMapCanvas
        
        self._objects = list()
        self.currentObjectIndex = -1
        
        self.btnFirstRecord.clicked.connect(self.firstRecord)
        self.btnLastRecord.clicked.connect(self.lastRecord)
        self.btnNextRecord.clicked.connect(self.nextRecord)
        self.btnPrevRecord.clicked.connect(self.prevRecord)
        
        self.lblFeatures.setText(self.tr("No features"))
        
        self.btnFirstRecord.setEnabled(False)
        self.btnLastRecord.setEnabled(False)
        self.btnNextRecord.setEnabled(False)
        self.btnPrevRecord.setEnabled(False)

        self.representations = RepresentationContainer(self)
        self.loObjectContainer.addWidget(self.representations)
        
        self.progressBar.setVisible(False)
        self.pushButton.setVisible(False)
        self.lblIdentifyStatus.setVisible(False)
        
        self.thread = None;
        self.worker = None;
class IdentifyPlusResults(QWidget, Ui_IdentifyPlusResults):
    def __init__(self, qgsMapCanvas, parent):
        QWidget.__init__(self, parent)

        if not isinstance(qgsMapCanvas, QgsMapCanvas):
            raise TypeError(
                "IdentifyPlusModel expected a qgis._gui.QgsMapCanvas, got a {} instead".format(type(qgsMapCanvas))
            )

        self.setupUi(self)

        self._qgsMapCanvas = qgsMapCanvas

        self._objects = list()
        self.currentObjectIndex = -1

        self.btnFirstRecord.clicked.connect(self.firstRecord)
        self.btnLastRecord.clicked.connect(self.lastRecord)
        self.btnNextRecord.clicked.connect(self.nextRecord)
        self.btnPrevRecord.clicked.connect(self.prevRecord)

        self.lblFeatures.setText(self.tr("No features"))

        self.btnFirstRecord.setEnabled(False)
        self.btnLastRecord.setEnabled(False)
        self.btnNextRecord.setEnabled(False)
        self.btnPrevRecord.setEnabled(False)

        self.representations = RepresentationContainer(self)
        self.loObjectContainer.addWidget(self.representations)

        self.progressBar.setVisible(False)
        self.pushButton.setVisible(False)
        self.lblIdentifyStatus.setVisible(False)

        self.thread = None
        self.worker = None

    def setModel(self, model):
        self.__model = model
        self.__model.identificationProgress.connect(self.identifyProgressHandel)
        self.__model.identificationLayer.connect(self.identifyMessageHandel)
        self.__model.finished.connect(self.identifyFinishedHandel)
        self.__model.reseted.connect(self.modelResetHandel)
        self.__model.objectsAppended.connect(self.modelAppendObjectsHandel)

    def identifyMessageHandel(self, layerName):
        self.lblIdentifyStatus.setText(self.tr("Process layer: %s") % layerName)

    def identifyProgressHandel(self, i1, i2):
        if i1 == 0:
            self.progressBar.setVisible(True)
            self.lblIdentifyStatus.setVisible(True)
            self.progressBar.setRange(i1, i2)
        else:
            self.progressBar.setValue(i1)

    def identifyFinishedHandel(self):
        self.progressBar.setVisible(False)
        self.lblIdentifyStatus.setVisible(False)
        self.progressBar.setValue(0)

    def modelChangeProcess(self):
        if len(self._model.objects) == 0:
            self.resetModelProcess()
        else:
            self.changeModelProcess()

        if self._model.state == self._model.IdentificationIsDone:
            self.finishedModelProcess()

    def modelResetHandel(self):
        self.currentObjectIndex = -1

        self.lblFeatures.setText(self.tr("Objects not found"))

        self.btnFirstRecord.setEnabled(False)
        self.btnLastRecord.setEnabled(False)
        self.btnNextRecord.setEnabled(False)
        self.btnPrevRecord.setEnabled(False)

        self.representations.clear()
        self.parent().show()

    def modelAppendObjectsHandel(self):
        if self.__model.objectsCount() > 0:
            self.btnFirstRecord.setEnabled(True)
            self.btnLastRecord.setEnabled(True)
            self.btnNextRecord.setEnabled(True)
            self.btnPrevRecord.setEnabled(True)

            self.updateInterface()
            if self.currentObjectIndex == -1:
                self.firstRecord()
        else:
            self.lblFeatures.setText(self.tr("Objects not found"))
            self.btnFirstRecord.setEnabled(False)
            self.btnLastRecord.setEnabled(False)
            self.btnNextRecord.setEnabled(False)
            self.btnPrevRecord.setEnabled(False)
            QgsMessageLog.logMessage(self.tr("Objects not found"), u"IdentifyPlus", QgsMessageLog.WARNING)

    def firstRecord(self):
        self.currentObjectIndex = 0
        self._loadFeatureAttributes()

    def lastRecord(self):
        self.currentObjectIndex = self.__model.objectsCount() - 1
        self._loadFeatureAttributes()

    def nextRecord(self):
        self.currentObjectIndex += 1
        if self.currentObjectIndex >= self.__model.objectsCount():
            self.currentObjectIndex = 0

        self._loadFeatureAttributes()

    def prevRecord(self):
        self.currentObjectIndex = self.currentObjectIndex - 1
        if self.currentObjectIndex < 0:
            self.currentObjectIndex = self.__model.objectsCount() - 1

        self._loadFeatureAttributes()

    def _loadFeatureAttributes(self):
        self.updateInterface()
        obj = self.__model.data(self.currentObjectIndex)
        self.representations.takeControl(obj)

    def updateInterface(self):
        self.lblFeatures.setText(
            self.tr("Feature %s from %s (%s)")
            % (
                self.currentObjectIndex + 1,
                self.__model.objectsCount(),
                self.__model.data(self.currentObjectIndex).qgsMapLayer.name(),
            )
        )