def __init__(self, iface):
        GenericTool.__init__(self, iface)

        self.labelName = "Statistics Image in batch"
        self.dlg = StatisticsImageDialog()

        self.dlg.lineEditFolder.clear()
        self.dlg.lineEditOutImage.clear()
        self.ListStats = [
            'Standard Desviation', 'Maximum', 'Mean', 'Variance', 'Minimum',
            'Sum'
        ]
        self.dlg.comboBoxStast.addItems(self.ListStats)
        self.dlg.pushButtonFolder.clicked.connect(self.InputFolder)
        self.dlg.pushButtonOutImage.clicked.connect(self.OutputImage)
	def __init__(self,iface):
		GenericTool.__init__(self, iface)
		
		self.labelName = "Statistics Image in batch"
		self.dlg = StatisticsImageDialog()
		
		self.dlg.lineEditFolder.clear()
		self.dlg.lineEditOutImage.clear()
		self.ListStats =['Standard Desviation','Maximum','Mean','Variance','Minimum','Sum']
		self.dlg.comboBoxStast.addItems(self.ListStats)
		self.dlg.pushButtonFolder.clicked.connect(self.InputFolder)
		self.dlg.pushButtonOutImage.clicked.connect(self.OutputImage)
class StatisticsImage(GenericTool):
	"""QGIS Plugin Implementation."""

	def __init__(self,iface):
		GenericTool.__init__(self, iface)
		
		self.labelName = "Statistics Image in batch"
		self.dlg = StatisticsImageDialog()
		
		self.dlg.lineEditFolder.clear()
		self.dlg.lineEditOutImage.clear()
		self.ListStats =['Standard Desviation','Maximum','Mean','Variance','Minimum','Sum']
		self.dlg.comboBoxStast.addItems(self.ListStats)
		self.dlg.pushButtonFolder.clicked.connect(self.InputFolder)
		self.dlg.pushButtonOutImage.clicked.connect(self.OutputImage)
	
	

	def run(self):
		"""Run method that performs all the real work"""
		
		# show the dialog
		self.dlg.show()
				
		# Run the dialog event loop
		result = self.dlg.exec_()
		Lista = ['Standard Desviation','Maximum','Mean','Variance','Minimum','Sum']
		
		# See if OK was pressed
		if result:
			
			iFolder = self.dlg.lineEditFolder.text()
			iSta = self.dlg.comboBoxStast.currentIndex()
			oImage = self.dlg.lineEditOutImage.text()
			NoData = self.dlg.lineEditNoData.text()
			try:
				
				if len(NoData) == 0:
					NoData = NoData
				else:
					NoData = float(NoData)
				self.startWorker(iFolder, iSta, oImage,NoData)
			
			except:
				QMessageBox.warning(qgis.utils.iface.mainWindow(),"Statistic Image in Batch","Nodata is not number")
			
			
			
	#Function input folder shapes
	def InputFolder(self):        
			iFolder = QFileDialog.getExistingDirectory(self.dlg,'Insert Folder','',QFileDialog.ShowDirsOnly)
			self.dlg.lineEditFolder.setText(iFolder)

	#Function output shape file		
	def OutputImage(self):        
			filters = "TIFF (*.tif *.tiff)"
			oImage= QFileDialog.getSaveFileName(self.dlg,'Output Image','',filters)
			if not oImage == '':
				oImage = oImage.replace(".tif","").replace(".tiff","")
				self.dlg.lineEditOutImage.setText(oImage+".tif")				
						
	
	#Function Start thread processing
	def startWorker(self, Folder, Stats, OutImage,NoData):
			
			# create a new worker instance
			worker = Worker(Folder,Stats, OutImage,NoData)

			#Create Progressbar
			qgis.utils.iface.messageBar().clearWidgets() 
			progressMessageBar = qgis.utils.iface.messageBar().createMessage('Calculating Statistics Image...')
			progressBar = QProgressBar()
			progressBar.setMaximum(100)
			progressMessageBar.layout().addWidget(progressBar)
			qgis.utils.iface.messageBar().pushWidget(progressMessageBar)
			self.progressMessageBar = progressMessageBar

			# start the worker in a new thread
			thread = QThread()
			worker.moveToThread(thread)
			worker.finished.connect(self.workerFinished)
			worker.error.connect(self.workerError)
			worker.progress.connect(progressBar.setValue)
			thread.started.connect(worker.StatsImage)
			thread.start()
			self.thread = thread
			self.worker = worker
			self.outImage = OutImage

	#Function to finished thread processing
	def workerFinished(self,value):
		
		# clean up the worker and thread
		self.worker.deleteLater()
		self.thread.quit()
		self.thread.wait()
		self.thread.deleteLater()
		qgis.utils.iface.messageBar().clearWidgets()						
		
		qgis.utils.iface.addRasterLayer(self.outImage,os.path.basename(self.outImage)[0:len(os.path.basename(self.outImage))-4])
		if value == 0:
			QMessageBox.information(qgis.utils.iface.mainWindow(),"Statistics Image","Processing sucessfully...")	
		else:
			QMessageBox.warming(qgis.utils.iface.mainWindow(),"Statistics Image","Image not same dimension...")	

	#Function report error in work
	def workerError(self, e, exception_string):
		QgsMessageLog.logMessage('Worker thread raised an exception:\n'.format(exception_string), level=QgsMessageLog.CRITICAL)	
class StatisticsImage(GenericTool):
    """QGIS Plugin Implementation."""
    def __init__(self, iface):
        GenericTool.__init__(self, iface)

        self.labelName = "Statistics Image in batch"
        self.dlg = StatisticsImageDialog()

        self.dlg.lineEditFolder.clear()
        self.dlg.lineEditOutImage.clear()
        self.ListStats = [
            'Standard Desviation', 'Maximum', 'Mean', 'Variance', 'Minimum',
            'Sum'
        ]
        self.dlg.comboBoxStast.addItems(self.ListStats)
        self.dlg.pushButtonFolder.clicked.connect(self.InputFolder)
        self.dlg.pushButtonOutImage.clicked.connect(self.OutputImage)

    def run(self):
        """Run method that performs all the real work"""

        # show the dialog
        self.dlg.show()

        # Run the dialog event loop
        result = self.dlg.exec_()
        Lista = [
            'Standard Desviation', 'Maximum', 'Mean', 'Variance', 'Minimum',
            'Sum'
        ]

        # See if OK was pressed
        if result:

            iFolder = self.dlg.lineEditFolder.text()
            iSta = self.dlg.comboBoxStast.currentIndex()
            oImage = self.dlg.lineEditOutImage.text()
            NoData = self.dlg.lineEditNoData.text()
            try:

                if len(NoData) == 0:
                    NoData = NoData
                else:
                    NoData = float(NoData)
                self.startWorker(iFolder, iSta, oImage, NoData)

            except:
                QMessageBox.warning(qgis.utils.iface.mainWindow(),
                                    "Statistic Image in Batch",
                                    "Nodata is not number")

    #Function input folder shapes
    def InputFolder(self):
        iFolder = QFileDialog.getExistingDirectory(self.dlg, 'Insert Folder',
                                                   '',
                                                   QFileDialog.ShowDirsOnly)
        self.dlg.lineEditFolder.setText(iFolder)

    #Function output shape file
    def OutputImage(self):
        filters = "TIFF (*.tif *.tiff)"
        oImage = QFileDialog.getSaveFileName(self.dlg, 'Output Image', '',
                                             filters)
        if not oImage == '':
            oImage = oImage.replace(".tif", "").replace(".tiff", "")
            self.dlg.lineEditOutImage.setText(oImage + ".tif")

    #Function Start thread processing
    def startWorker(self, Folder, Stats, OutImage, NoData):

        # create a new worker instance
        worker = Worker(Folder, Stats, OutImage, NoData)

        #Create Progressbar
        qgis.utils.iface.messageBar().clearWidgets()
        progressMessageBar = qgis.utils.iface.messageBar().createMessage(
            'Calculating Statistics Image...')
        progressBar = QProgressBar()
        progressBar.setMaximum(100)
        progressMessageBar.layout().addWidget(progressBar)
        qgis.utils.iface.messageBar().pushWidget(progressMessageBar)
        self.progressMessageBar = progressMessageBar

        # start the worker in a new thread
        thread = QThread()
        worker.moveToThread(thread)
        worker.finished.connect(self.workerFinished)
        worker.error.connect(self.workerError)
        worker.progress.connect(progressBar.setValue)
        thread.started.connect(worker.StatsImage)
        thread.start()
        self.thread = thread
        self.worker = worker
        self.outImage = OutImage

    #Function to finished thread processing
    def workerFinished(self, value):

        # clean up the worker and thread
        self.worker.deleteLater()
        self.thread.quit()
        self.thread.wait()
        self.thread.deleteLater()
        qgis.utils.iface.messageBar().clearWidgets()

        qgis.utils.iface.addRasterLayer(
            self.outImage,
            os.path.basename(
                self.outImage)[0:len(os.path.basename(self.outImage)) - 4])
        if value == 0:
            QMessageBox.information(qgis.utils.iface.mainWindow(),
                                    "Statistics Image",
                                    "Processing sucessfully...")
        else:
            QMessageBox.warming(qgis.utils.iface.mainWindow(),
                                "Statistics Image",
                                "Image not same dimension...")

    #Function report error in work
    def workerError(self, e, exception_string):
        QgsMessageLog.logMessage(
            'Worker thread raised an exception:\n'.format(exception_string),
            level=QgsMessageLog.CRITICAL)