예제 #1
0
class calcolodannoDialog(QtGui.QDialog, Ui_FloodRisk):
    def __init__(self, iface):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)
        self.iface = iface
        self.btnChooseShellFile_3.setIcon(
            QIcon(":/plugins/floodrisk/icons/folder_explore.png"))
        self.btnChooseShellFile_3.setIconSize(QSize(25, 25))
        self.pushButtonView.setIcon(
            QIcon(":/plugins/floodrisk/icons/table_go.png"))
        self.pushButtonView.setIconSize(QSize(25, 25))
        self.pushButton.setIcon(
            QIcon(":/plugins/floodrisk/icons/chart_bar.png"))
        self.pushButton.setIconSize(QSize(25, 25))
        self.buttonGrafici.setIcon(
            QIcon(":/plugins/floodrisk/icons/images.jpg"))
        self.buttonGrafici.setIconSize(QSize(35, 25))
        self.label_red_danno.setPixmap(
            QPixmap(":/plugins/floodrisk/icons/red20.png"))
        self.label_red_vuln.setPixmap(
            QPixmap(":/plugins/floodrisk/icons/red20.png"))
        self.label_green_danno.setPixmap(
            QPixmap(":/plugins/floodrisk/icons/green20.png"))
        self.label_green_vuln.setPixmap(
            QPixmap(":/plugins/floodrisk/icons/green20.png"))

        # initialize actions
        QObject.connect(self.btnChooseShellFile_3, SIGNAL("clicked()"),
                        self.setFileMaxH)
        QObject.connect(self.buttonGrafici, SIGNAL("clicked()"),
                        self.graficoCurve)
        QObject.connect(self.pushButtonView, SIGNAL("clicked()"),
                        self.VediTabellaDanni)
        QObject.connect(self.toolButtonEsegui, SIGNAL("clicked()"),
                        self.EseguiCalcoloDanni)
        QObject.connect(self.pushButtonSalvaProgetto, SIGNAL("clicked()"),
                        self.writexml)
        QObject.connect(self.pushButtonLoadLayer, SIGNAL("clicked()"),
                        self.CaricaLayers)
        QObject.connect(self.pushButton, SIGNAL("clicked()"), self.istogrammi)

        self.dic_TypeId = {}
        self.CurveType = ''
        self.TotalDamage = 0.0
        #self.sep=set_csv_separator()

        # help
        QObject.connect(self.buttonBox, SIGNAL(_fromUtf8("helpRequested()")),
                        self.show_help)

    #------------- Actions -----------------------

    def show_help(self):
        """Load the help text into the system browser."""
        show_context_help(context='include3')

    def setFileMaxH(self):
        message = QtGui.QMessageBox.question(self, self.tr('Attention'),self.tr("Warning you are editing the data input to the project: current data" \
        " of output will be deleted. Are you sure?"), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if message == QtGui.QMessageBox.Yes:
            FileMaxHPath = QFileDialog.getOpenFileName(self, self.tr('Select peak flow depth file'), \
            '.', 'File tif (*.tif);;All files (*.*)')
            self.txtShellFilePath_3.setText(FileMaxHPath)
            msg = FileMaxHPath
            QMessageBox.information(None, "FileMaxHPath", msg)
            msg = str(self.txtShellFilePath.text())
            if msg == "":
                aa = str(FileMaxHPath)
                DirOut = os.path.dirname(aa)
                Name = os.path.basename(aa)
                pp = str.split(Name, '.')
                FileProgettoPath = DirOut + os.sep + pp[0] + '.dmg'
                self.txtShellFilePath.setText(FileProgettoPath)

            msg = str(self.txtShellFilePath_5.text())
            if msg == "":
                aa = str(FileMaxHPath)
                DirOut = os.path.dirname(aa)
                Name = os.path.basename(aa)
                pp = str.split(Name, '.')
                FileDannoPath = DirOut + os.sep + pp[0] + '_dmg.tif'
                self.txtShellFilePath_5.setText(FileDannoPath)

            msg = str(self.txtShellFilePath_6.text())
            if msg == "":
                aa = str(FileMaxHPath)
                DirOut = os.path.dirname(aa)
                Name = os.path.basename(aa)
                pp = str.split(Name, '.')
                FileTabDannoPath = DirOut + os.sep + pp[0] + '_dmg.csv'
                self.txtShellFilePath_6.setText(FileTabDannoPath)

            msg = str(self.txtShellFilePath_vulnerato.text())
            if msg == "":
                aa = str(FileMaxHPath)
                DirOut = os.path.dirname(aa)
                Name = os.path.basename(aa)
                pp = str.split(Name, '.')
                FileVulnPath = DirOut + os.sep + pp[0] + '_vuln.tif'
                self.txtShellFilePath_vulnerato.setText(FileVulnPath)

            #----Deleting output data -----
            self.txtShellFilePath_5.setText("")
            self.txtShellFilePath_vulnerato.setText("")
            self.txtShellFilePath_6.setText("")
            abil = bool("true")
            self.pushButtonSalvaProgetto.setEnabled(abil)

    def graficoCurve(self):
        tipo = self.comboBoxGrafici.currentText()
        try:
            self.idTipo = self.dic_TypeId[tipo]
            from graficofloodriskdialog import graficofloodriskDialog
            gfd = graficofloodriskDialog(self.iface, self.idTipo, tipo)
            geoDataBase = str(self.txtShellFilePath_2.text())
            if geoDataBase != "":
                gfd.lineEdit.setText(geoDataBase)
            gfd.run()
        except:
            txt0 = 'Geodatabase: %s \n\n' % self.txtShellFilePath_2.text()
            txt1 = self.tr("Error in table Vulnerability")
            msg = '%s %s' % (txt0, txt1)
            QMessageBox.information(None, "Graph", msg)

    def EseguiCalcoloDanni(self):

        self.Nome = []
        self.listafiles = []
        # FileDEM1
        self.Nome.append('File Max Water Depth')
        self.listafiles.append(str(self.txtShellFilePath_3.text()))
        # DBfile
        self.Nome.append('File Geodatabase')
        self.listafiles.append(str(self.txtShellFilePath_2.text()))
        # NameFileGridVulnerability
        self.Nome.append('File Grid Vulnerability')
        self.listafiles.append(str(self.txtShellFilePath_vulnerato.text()))
        # NameFileGridDamages
        self.Nome.append('File Grid Damages')
        self.listafiles.append(str(self.txtShellFilePath_5.text()))
        # NameFileTable
        self.Nome.append('File Table 1')
        self.listafiles.append(str(self.txtShellFilePath_6.text()))

        tipo = self.comboBoxGrafici.currentText()
        self.CurveType = tipo

        abil0 = bool("true")
        try:
            self.idTipo = self.dic_TypeId[tipo]
            self.listafiles.append(self.idTipo)
        except:
            txt0 = 'Geodatabase: %s \n\n' % self.txtShellFilePath_2.text()
            txt1 = self.tr('Warning the Depth-Damage Curves Type')
            txt2 = self.tr('does not exists')
            msg = '%s %s %s: %s' % (txt0, txt1, tipo, txt2)
            QMessageBox.information(None, "Input", msg)
            abil0 = bool()
            errMsg = 'Input Error'

        if abil0:
            abil = bool("true")
            for i in range(2):
                if not os.path.exists(self.listafiles[i]):
                    txt1 = self.tr('Warning the file')
                    txt2 = self.tr('does not exists')
                    msg = '%s %s: %s' % (txt1, self.Nome[i], txt2)
                    QMessageBox.information(None, "File input", msg)
                    abil = bool()
                    errMsg = 'Input Error'
            for k in range(3):
                i = k + 2
                if len(self.listafiles[i]) == 0:
                    txt1 = self.tr('Attention assign a name to file')
                    msg = '%s: %s ' % (txt1, self.Nome[i])
                    QMessageBox.information(None, "File output", msg)
                    abil = bool()
                    errMsg = 'Input Error'
        else:
            abil = bool()

        if abil:
            fileprogetto = str(self.txtShellFilePath.text())

            # initializes progressbar
            self.progressBar.setFormat(self.tr('Damage assessment') + ': %p%')

            self.progressBar.setValue(0)
            abil = bool()
            self.buttonBox.setEnabled(abil)

            NotErr, errMsg, TotalDamage = CalcoloDannoInondazione.main(
                self.listafiles, self.progressBar)

            self.TotalDamage = TotalDamage

            self.luci()
            if NotErr:
                msg = self.tr('End of Job')
                QMessageBox.information(None, "FloodRisk", msg)
                self.writexml()

                abil = bool('True')
                self.buttonBox.setEnabled(abil)
                self.progressBar.setFormat(('%p%'))
                self.progressBar.setValue(0)
            else:
                msg = errMsg + " - " + self.tr("Run not executed")
                QMessageBox.information(None, "Run", msg)
                self.luci()
        else:
            msg = errMsg + " - " + self.tr("Run not executed")
            QMessageBox.information(None, "Run", msg)
            self.luci()

    def writexml(self):
        fileprogetto = str(self.txtShellFilePath.text())
        dicProgetto = {}
        dicParameter = {}
        if fileprogetto != "":
            xmlfile = open(fileprogetto)
            dom = minidom.parse(xmlfile)
            for node in dom.getElementsByTagName("General"):
                L = node.getElementsByTagName("File")
                for node2 in L:
                    Button = node2.getAttribute("Button")
                    nome = node2.getAttribute("name")
                    dicProgetto[Button] = nome
            for node in dom.getElementsByTagName("Parameters"):
                L = node.getElementsByTagName("Parameter")
                for node2 in L:
                    Param = node2.getAttribute("Param")
                    Value = node2.getAttribute("Value")
                    dicParameter[Param] = Value

            xmlfile.close()
        # Create the minidom document
        doc = Document()

        # Create the <wml> base element
        wml = doc.createElement("FloodRisk")
        doc.appendChild(wml)

        # Create the main <card> element
        maincard = doc.createElement("General")
        wml.appendChild(maincard)

        # Create a <p> element
        ShellFilePath = str(self.txtShellFilePath_2.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileGeodatabase')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)

        ShellFilePath = str(self.txtShellFilePath_3.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FilePeakFloodDepth')
        paragraph1.setAttribute("name", ShellFilePath)
        #paragraph1.setAttribute("unit", '[m]')
        maincard.appendChild(paragraph1)

        # Save input file
        for Button in dicProgetto.keys():
            nome = dicProgetto[Button]
            if Button == 'FilePeakFloodVelocity':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                #paragraph1.setAttribute("unit", '[m]')
                maincard.appendChild(paragraph1)
            if Button == 'FileWarningTime':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                #paragraph1.setAttribute("unit", '[m]')
                maincard.appendChild(paragraph1)

        # Create a <p> element
        ShellFilePath = str(self.txtShellFilePath_5.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileGridDamages')
        paragraph1.setAttribute("name", ShellFilePath)
        #paragraph1.setAttribute("unit", '[kEuro]')
        maincard.appendChild(paragraph1)
        #
        # Create a <p> element
        ShellFilePath = str(self.txtShellFilePath_vulnerato.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileGridVulnerability')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)
        #
        # Create a <p> element
        ShellFilePath = str(self.txtShellFilePath_6.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileTable1')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)

        # Save input file
        for Button in dicProgetto.keys():
            nome = dicProgetto[Button]
            if Button == 'FileGridPopRisk':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                maincard.appendChild(paragraph1)
            if Button == 'FileTable2':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                maincard.appendChild(paragraph1)

        # Create the main <card> element
        maincard2 = doc.createElement("Parameters")
        wml.appendChild(maincard2)

        # Create a <p> element
        Param1 = doc.createElement("Parameter")
        Param1.setAttribute("Param", 'CurveType')
        Param1.setAttribute("Value", self.CurveType)
        maincard2.appendChild(Param1)

        Param1 = doc.createElement("Parameter")
        Param1.setAttribute("Param", 'TotalDamage')
        msg = '%.1f' % self.TotalDamage
        Param1.setAttribute("Value", msg)
        maincard2.appendChild(Param1)

        for Param in dicParameter.keys():
            Value = dicParameter[Param]
            if Param == 'Method':
                Param2 = doc.createElement("Parameter")
                Param2.setAttribute("Param", 'Method')
                Param2.setAttribute("Value", Value)
                maincard2.appendChild(Param2)
            if Param == 'Understand':
                Param2 = doc.createElement("Parameter")
                Param2.setAttribute("Param", 'Understand')
                Param2.setAttribute("Value", Value)
                maincard2.appendChild(Param2)
            if Param == 'LOL':
                Param2 = doc.createElement("Parameter")
                Param2.setAttribute("Param", 'LOL')
                Param2.setAttribute("Value", Value)
                maincard2.appendChild(Param2)

        if fileprogetto != "":
            fp = open(fileprogetto, "w")
            # writexml(self, writer, indent='', addindent='', newl='', encoding=None)
            doc.writexml(fp, "", "   ", "\n", "UTF-8")
            self.AutoLoad = fileprogetto
            QMessageBox.information(None, "Info", self.tr("Project Saved"))

    def VediTabellaDanni(self):
        self.NomeTabella = str(self.txtShellFilePath_6.text())
        self.TabView = TableViewer(self.iface, self.NomeTabella)
        self.TabView.show()  # show the dialog
        result = self.TabView.exec_()

    def CaricaLayers(self):
        filePath = str(self.txtShellFilePath_2.text())
        if os.path.exists(filePath):
            # case geodatabase
            tabelle = ['StructurePoly', 'InfrastrLines', 'CensusBlocks']
            for nomelayer in tabelle:
                if not LayerCaricato(self, nomelayer):
                    openFile(self, filePath, nomelayer)

        filePath = str(self.txtShellFilePath_3.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self, filePath):
                openFile(self, filePath, '')

        filePath = str(self.txtShellFilePath_vulnerato.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self, filePath):
                openFile(self, filePath, '')

        filePath = str(self.txtShellFilePath_5.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self, filePath):
                openFile(self, filePath, '')

    def istogrammi(self):
        self.NomeFile = str(self.txtShellFilePath_6.text())
        if os.path.exists(self.NomeFile):
            try:

                import matplotlib

                self.sep = check_csv_separator(self.NomeFile)
                # Reading csv file
                finp = open(self.NomeFile)
                csv_reader = csv.reader(finp,
                                        delimiter=self.sep,
                                        quotechar='"')
                headers = csv_reader.next()

                self.fields = []
                for p in headers:
                    self.fields.append(p)

                progress = unicode(
                    'Reading data '
                )  # As a progress bar is used the main window's status bar, because the own one is not initialized yet

                yEuro1 = []
                yEuro2 = []
                xCodice = []
                for record in csv_reader:
                    for i in range(len(record)):
                        if i == 0:
                            xCodice += [record[i]]
                        if i == 5:
                            yEuro2 += [float(record[i])]
                        if i == 6:
                            yEuro1 += [float(record[i])]

                finp.close()

                #---------------Draw Chart-----------------
                y1 = yEuro1
                y2 = yEuro2
                x1 = xCodice
                width = 0.3
                i = arange(len(y1))
                r1 = bar(i, y1, width, color='r', linewidth=1)
                r2 = bar(i + width, y2, width, color='b', linewidth=1)
                xticks(i + width / 2, x1)
                xlabel('Code')
                ylabel('Euro')
                title(self.tr('Damage assessment results'))
                try:
                    legend((r1[0], r2[0]), (self.tr('Content Damage'),
                                            self.tr('Structure Damage')),
                           'best')
                except:
                    pass
                grid()
                show()
            except:
                QMessageBox.information(
                    None, "Warning",
                    "The current version of QGIS does not allow import matplotlib"
                )

        else:
            txt1 = self.tr('Warning the file')
            txt2 = self.tr('does not exists')
            msg = '%s\n\n %s\n\n %s' % (txt1, self.NomeFile, txt2)
            QMessageBox.information(None, "Input", msg)

    #------------------- Functions ---------------------------
    def startxml(self):
        fileprogetto = str(self.txtShellFilePath.text())
        if fileprogetto != "":
            xmlfile = open(fileprogetto)
            dom = minidom.parse(xmlfile)
            for node in dom.getElementsByTagName("General"):
                L = node.getElementsByTagName("File")
                for node2 in L:
                    Button = node2.getAttribute("Button")
                    nome = node2.getAttribute("name")
                    if Button == 'FileGeodatabase':
                        self.txtShellFilePath_2.setText(nome)
                    elif Button == 'FilePeakFloodDepth':
                        self.txtShellFilePath_3.setText(nome)
                    elif Button == 'FileGridDamages':
                        self.txtShellFilePath_5.setText(nome)
                    elif Button == 'FileGridVulnerability':
                        self.txtShellFilePath_vulnerato.setText(nome)
                    elif Button == 'FileTable1':
                        self.txtShellFilePath_6.setText(nome)

            for node in dom.getElementsByTagName("Parameters"):
                L = node.getElementsByTagName("Parameter")
                for node2 in L:
                    Param = node2.getAttribute("Param")
                    try:
                        Value = node2.getAttribute("Value")
                    except:
                        Value = node2.getAttribute("name")
                    if Param == 'CurveType':
                        self.CurveType = Value
                        self.setCurrentCurveType(Value)

            xmlfile.close()
            abil = bool("true")
            self.pushButtonSalvaProgetto.setEnabled(abil)

    def luci(self):

        FilePath = str(self.txtShellFilePath_6.text())
        #FileGridDamages
        FilePath = str(self.txtShellFilePath_5.text())
        if os.path.exists(FilePath):
            self.label_red_danno.hide()
            self.label_green_danno.show()
        else:
            self.label_red_danno.show()
            self.label_green_danno.hide()

        #FileGridVulnerability
        FilePath = str(self.txtShellFilePath_vulnerato.text())
        if os.path.exists(FilePath):
            self.label_red_vuln.hide()
            self.label_green_vuln.show()
        else:
            self.label_red_vuln.show()
            self.label_green_vuln.hide()

    def setListaTipoCurvaVuln(self):
        FileGDB = str(self.txtShellFilePath_2.text())
        if FileGDB != "":
            if self.CheckGeodatabase():
                conn = sqlite3.connect(FileGDB)
                cursor = conn.cursor()
                testoQuery = 'SELECT VulnID FROM Vulnerability GROUP BY VulnID'
                cursor.execute(testoQuery)
                ListaTipi1 = cursor.fetchall()
                ListaTipi = []
                for row in ListaTipi1:
                    ListaTipi.append(int(row[0]))
                dic_VulnType = {}
                self.dic_TypeId = {}
                testoQuery2 = 'SELECT * FROM VulnType'
                cursor.execute(testoQuery2)
                ListaDescription = cursor.fetchall()
                if len(ListaDescription) > 0:
                    for row in ListaDescription:
                        dic_VulnType[int(row[1])] = str(row[2])
                        self.dic_TypeId[str(row[2])] = int(row[1])
                    ListaDescrizione = []
                    for num in ListaTipi:
                        ListaDescrizione.append(dic_VulnType[num])
                    self.comboBoxGrafici.clear()
                    self.comboBoxGrafici.addItems(ListaDescrizione)

            else:
                QMessageBox.information(
                    None, "FloodRisk",
                    self.tr("You must first create the Geodb.Sqlite"))
        else:
            QMessageBox.information(
                None, "FloodRisk",
                self.tr("You must first create the Geodb.Sqlite"))

    def setCurrentCurveType(self, ItemText):
        # set currentItem CurveType
        self.CurveType = ''
        NumType = self.comboBoxGrafici.count()
        AllItems = [self.comboBoxGrafici.itemText(i) for i in range(NumType)]
        if NumType > 0:
            index = -1
            for ii in range(NumType):
                if ItemText == AllItems[ii]:
                    index = ii
            if index >= 0:
                self.comboBoxGrafici.setCurrentIndex(index)
                self.CurveType = ItemText

    def CheckGeodatabase(self):
        res = bool()
        if os.path.exists(self.txtShellFilePath_2.text()):
            mydb_path = self.txtShellFilePath_2.text()
            try:
                # connecting the db
                conn = sqlite3.connect(mydb_path)
                # creating a Cursor
                cur = conn.cursor()

                TablesList = [
                    'spatial_ref_sys', 'AnalysisArea', 'CensusBlocks',
                    'FatalityRate'
                ]
                TablesList.append('FatalityRate')
                TablesList.append('FloodSeverity')
                TablesList.append('InfrastrLines')
                TablesList.append('VulnType')
                TablesList.append('Vulnerability')
                TablesList.append('StructurePoly')

                for NomeTabella in TablesList:
                    sql = "SELECT sql FROM sqlite_master WHERE type='table' AND name='%s';" % (
                        NomeTabella)
                    cur.execute(sql)
                    Tabella = str(cur.fetchone()[0])

                res = bool('True')
            except:
                res = bool()
        else:
            res = bool()
        return res
class calcolorischiopopolazioneDialog(QtGui.QDialog, Ui_FloodRisk):
    def __init__(self,iface):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)
        self.iface=iface

        self.btnChooseShellFile_3.setIcon(QIcon(":/plugins/floodrisk/icons/folder_explore.png"))
        self.btnChooseShellFile_3.setIconSize(QSize(25,25))
        self.btnChooseShellFile_velocita.setIcon(QIcon(":/plugins/floodrisk/icons/folder_explore.png"))
        self.btnChooseShellFile_velocita.setIconSize(QSize(25,25))
        self.btnChooseShellFile_tempi.setIcon(QIcon(":/plugins/floodrisk/icons/folder_explore.png"))
        self.btnChooseShellFile_tempi.setIconSize(QSize(25,25))
        self.pushButtonView_2.setIcon(QIcon(":/plugins/floodrisk/icons/table_go.png"))
        self.pushButtonView_2.setIconSize(QSize(25,25))
        self.pushButtonIstogrammi.setIcon(QIcon(":/plugins/floodrisk/icons/chart_bar.png"))
        self.pushButtonIstogrammi.setIconSize(QSize(25,25))
        self.label_red_pop.setPixmap(QPixmap(":/plugins/floodrisk/icons/red20.png"))
        self.label_green_pop.setPixmap(QPixmap(":/plugins/floodrisk/icons/green20.png"))

        # initialize actions
        QObject.connect(self.btnChooseShellFile_3, SIGNAL("clicked()"), self.setFileMaxH)
        QObject.connect(self.btnChooseShellFile_velocita, SIGNAL("clicked()"), self.setFileMaxV)
        QObject.connect(self.btnChooseShellFile_tempi, SIGNAL("clicked()"), self.setFileTime)
        QObject.connect(self.toolButtonEsegui_2, SIGNAL("clicked()"), self.EseguiCalcoloPopolazione)
        QObject.connect(self.pushButtonView_2, SIGNAL("clicked()"), self.VediTabellaRischio)
        QObject.connect(self.pushButtonSalvaProgetto, SIGNAL("clicked()"), self.writexml)
        QObject.connect(self.pushButtonLoadLayer, SIGNAL("clicked()"), self.CaricaLayers)
        QObject.connect(self.pushButtonIstogrammi, SIGNAL("clicked()"), self.istogrammi)
        self.radioButton.toggled.connect(self.setUnderstandingDam)
        self.radioButton_2.toggled.connect(self.setUnderstandingSufri)

        # help
        QObject.connect(self.buttonBox, SIGNAL(_fromUtf8("helpRequested()")), self.show_help)

        self.paramMethod=''
        self.paramUnderstanding=''
        self.paramLOL_notRound=0.0

    #------------- Actions -----------------------

    def show_help(self):
        """Load the help text into the system browser."""
        show_context_help(context='include4')


    def setFileMaxV(self):
        message = QtGui.QMessageBox.question(self, self.tr('Attention'),self.tr("Warning you are editing the data input to the project: current data" \
        " of output will be deleted. Are you sure?"), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if message == QtGui.QMessageBox.Yes:
            FileMaxVPath = QFileDialog.getOpenFileName(self, "Select file max water velocity", \
            '.', 'File tif (*.tif);;All files (*.*)')
            self.txtShellFilePath_velocita.setText(FileMaxVPath)
            #----Deleting output data-----
            self.txtShellFilePath_4.setText("")
            self.txtShellFilePath_7.setText("")

    def setFileTime(self):
        message = QtGui.QMessageBox.question(self, self.tr('Attention'),self.tr("Warning you are editing the data input to the project: current data" \
        " of output will be deleted. Are you sure?"), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if message == QtGui.QMessageBox.Yes:
            FileTimePath = QFileDialog.getOpenFileName(self, self.tr("Select warning time shape file"), \
            '.', 'File shp (*.shp);;All files (*.*)')
            self.txtShellFilePath_tempi.setText(FileTimePath)
            #----Deleting output data-----
            self.txtShellFilePath_4.setText("")
            self.txtShellFilePath_7.setText("")

    def setFileMaxH(self):
        message = QtGui.QMessageBox.question(self, self.tr('Attention'),self.tr("Warning you are editing the data input to the project: current data" \
        " of output will be deleted. Are you sure?"), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if message == QtGui.QMessageBox.Yes:
            FileMaxHPath = QFileDialog.getOpenFileName(self, self.tr('Select peak flow depth file'), \
            '.', 'File tif (*.tif);;All files (*.*)')
            self.txtShellFilePath_3.setText(FileMaxHPath)
            msg=FileMaxHPath
            QMessageBox.information(None, "FileMaxHPath", msg)
            msg=str(self.txtShellFilePath.text())
            if msg=="":
                aa=str(FileMaxHPath)
                DirOut=os.path.dirname(aa)
                Name=os.path.basename(aa)
                pp=str.split(Name,'.')
                FileProgettoPath=DirOut+os.sep + pp[0]+'.dmg'
                self.txtShellFilePath.setText(FileProgettoPath)

            msg=str(self.txtShellFilePath_4.text())
            if msg=="":
                aa=str(FileMaxHPath)
                DirOut=os.path.dirname(aa)
                Name=os.path.basename(aa)
                pp=str.split(Name,'.')
                FileGridPopPath=DirOut+os.sep + pp[0]+'_pop.tif'
                self.txtShellFilePath_4.setText(FileGridPopPath)

            msg=str(self.txtShellFilePath_7.text())
            if msg=="":
                aa=str(FileMaxHPath)
                DirOut=os.path.dirname(aa)
                Name=os.path.basename(aa)
                pp=str.split(Name,'.')
                FileTab2DannoPath=DirOut+os.sep + pp[0]+'_pop.csv'
                self.txtShellFilePath_7.setText(FileTab2DannoPath)

            #----Deleting output data-----
            self.txtShellFilePath_4.setText("")
            self.txtShellFilePath_7.setText("")
            abil=bool("true")
            self.pushButtonSalvaProgetto.setEnabled(abil)
            #self.luci()

    def EseguiCalcoloPopolazione(self):

        # ------------------------------------------------------
        # performs the calculation of the risk to the population
        # ------------------------------------------------------
        self.Nome=[]
        self.listafiles=[]
        # FileDEM1
        self.Nome.append('File Max Water Depth')
        self.listafiles.append(str(self.txtShellFilePath_3.text()))
        # file Water Velocity
        self.Nome.append('File Water Velocity')
        self.listafiles.append(str(self.txtShellFilePath_velocita.text()))
        # file Warning Time
        self.Nome.append('File Warning Time')
        self.listafiles.append(str(self.txtShellFilePath_tempi.text()))
        # DBfile
        self.Nome.append('File Geodatabase')
        self.listafiles.append(str(self.txtShellFilePath_2.text()))
        # NameFileGridPop
        self.Nome.append('File Grid population at risk')
        self.listafiles.append(str(self.txtShellFilePath_4.text()))
        # NameFileTable2
        self.Nome.append('File Table 2')
        self.listafiles.append(str(self.txtShellFilePath_7.text()))

        parametroUnderstanding = self.comboBox.currentText()
        self.paramUnderstanding=parametroUnderstanding
        self.listafiles.append(parametroUnderstanding)

        abil=bool("true")
        for i in range(4):
            if not os.path.exists(self.listafiles[i]):
                msg1=self.tr('Error the file')
                msg2=self.tr('does not exist')
                msg='%s %s: %s ' % (msg1,self.Nome[i],msg2)
                QMessageBox.information(None, "Fine input", msg)
                abil=bool()
        for k in range(2):
            i=k+4
            if len(self.listafiles[i])==0:
                txt1=self.tr('Attention assign a name to file')
                msg='%s: %s ' % (txt1,self.Nome[i])
                QMessageBox.information(None, "Fine output", msg)
                abil=bool()
        if not self.CheckFloodSeverity():
            abil=bool()

        if not self.CheckFatalityRate():
            abil=bool()

        if abil:
            fileprogetto=str(self.txtShellFilePath.text())

            if self.CheckGeodatabase():

                # initializes progressbar
                self.progressBar.setFormat(self.tr('Population consequences assessment') +': %p%')

                self.progressBar.setValue(0)
                abil=bool()
                self.buttonBox.setEnabled(abil)

                NotErr, errMsg, NumLoss_notRound = AssessConsequencesPopulation.main(self.listafiles,self.progressBar)

                self.paramLOL_notRound=NumLoss_notRound

                self.luci()

                if NotErr:
                    msg=self.tr('End of Job')
                    QMessageBox.information(None, "FloodRisk", msg)
                    self.writexml()

                    abil=bool('True')
                    self.buttonBox.setEnabled(abil)
                    self.progressBar.setFormat(('%p%'))
                    self.progressBar.setValue(0)
                else:
                    msg=self.tr("Run not executed")
                    msg='%s : %s' % (errMsg,msg)
                    QMessageBox.information(None, "Run", msg)
                    self.luci()

            else:

                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

        else:
            msg=self.tr("Run not executed")
            QMessageBox.information(None, "Run", msg)
            self.luci()

    def VediTabellaRischio(self):
        self.NomeTabella=str(self.txtShellFilePath_7.text())
        self.TabView = TableViewer(self.iface,self.NomeTabella)
        self.TabView.show()# show the dialog
        result = self.TabView.exec_()

    def writexml (self):
        fileprogetto=str(self.txtShellFilePath.text())
        dicProgetto={}
        dicParameter={}
        if fileprogetto!="":
            xmlfile=open(fileprogetto)
            dom=minidom.parse(xmlfile)
            for node in dom.getElementsByTagName("General"):
                L = node.getElementsByTagName("File")
                for node2 in L:
                    Button = node2.getAttribute("Button")
                    nome = node2.getAttribute("name")
                    dicProgetto[Button] = nome
            for node in dom.getElementsByTagName("Parameters"):
                L = node.getElementsByTagName("Parameter")
                for node2 in L:
                    Param = node2.getAttribute("Param")
                    Value = node2.getAttribute("Value")
                    dicParameter[Param] = Value

            xmlfile.close()
        # Create the minidom document
        doc = Document()

        # Create the <wml> base element
        wml = doc.createElement("FloodRisk")
        doc.appendChild(wml)

        # Create the main <card> element
        maincard = doc.createElement("General")
        wml.appendChild(maincard)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_2.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileGeodatabase')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)

        ShellFilePath= str(self.txtShellFilePath_3.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FilePeakFloodDepth')
        paragraph1.setAttribute("name", ShellFilePath)
        #paragraph1.setAttribute("unit", '[m]')
        maincard.appendChild(paragraph1)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_velocita.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FilePeakFloodVelocity')
        paragraph1.setAttribute("name", ShellFilePath)
        #paragraph1.setAttribute("unit", '[m]')
        maincard.appendChild(paragraph1)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_tempi.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileWarningTime')
        paragraph1.setAttribute("name", ShellFilePath)
        #paragraph1.setAttribute("unit", '[m]')
        maincard.appendChild(paragraph1)

        # Save input files
        for Button in dicProgetto.keys():
            nome = dicProgetto[Button]
            if Button == 'FileGridDamages':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                #paragraph1.setAttribute("unit", '[m]')
                maincard.appendChild(paragraph1)
            if Button == 'FileGridVulnerability':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                #paragraph1.setAttribute("unit", '[m]')
                maincard.appendChild(paragraph1)
            if Button == 'FileTable1':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                #paragraph1.setAttribute("unit", '[m]')
                maincard.appendChild(paragraph1)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_4.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileGridPopRisk')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_7.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileTable2')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)

        # Create the main <card> element
        maincard2 = doc.createElement("Parameters")
        wml.appendChild(maincard2)

        for Param in dicParameter.keys():
            Value = dicParameter[Param]
            if Param == 'CurveType':
                Param2 = doc.createElement("Parameter")
                Param2.setAttribute("Param", 'CurveType')
                Param2.setAttribute("Value", Value)
                maincard2.appendChild(Param2)
            if Param == 'TotalDamage':
                Param2 = doc.createElement("Parameter")
                Param2.setAttribute("Param", 'TotalDamage')
                Param2.setAttribute("Value", Value)
                maincard2.appendChild(Param2)

        Param2 = doc.createElement("Parameter")
        Param2.setAttribute("Param", 'Method')
        Param2.setAttribute("Value", str(self.paramMethod))
        maincard2.appendChild(Param2)

        Param2 = doc.createElement("Parameter")
        Param2.setAttribute("Param", 'Understand')
        Param2.setAttribute("Value", self.paramUnderstanding)
        maincard2.appendChild(Param2)

        Param3 = doc.createElement("Parameter")
        Param3.setAttribute("Param", 'LOL')
        msg='%4f' % self.paramLOL_notRound
        Param3.setAttribute("Value", msg)
        maincard2.appendChild(Param3)


        if fileprogetto!="":
            fp = open(fileprogetto,"w")
            # writexml(self, writer, indent='', addindent='', newl='', encoding=None)
            doc.writexml(fp, "", "   ", "\n", "UTF-8")
            self.AutoLoad=fileprogetto
            QMessageBox.information(None, "Info", self.tr("Project Saved"))

    def CaricaLayers(self):
        filePath=str(self.txtShellFilePath_2.text())
        if os.path.exists(filePath):
            # case geodatabase
            tabelle=['StructurePoly','InfrastrLines','CensusBlocks']
            for nomelayer in tabelle:
                # checks if the layer is already loaded
                if not LayerCaricato(self,nomelayer):
                    openFile(self,filePath,nomelayer)

        filePath=str(self.txtShellFilePath_3.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self,filePath):
                openFile(self,filePath,'')

        filePath=str(self.txtShellFilePath_velocita.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self,filePath):
                openFile(self,filePath,'')

        filePath=str(self.txtShellFilePath_tempi.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self,filePath):
                openFile(self,filePath,'')

        filePath=str(self.txtShellFilePath_4.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self,filePath):
                openFile(self,filePath,'')

    def istogrammi(self):
        self.NomeFile=str(self.txtShellFilePath_7.text())
        if os.path.exists(self.NomeFile):
            filcsv=open(self.NomeFile,'r')
            riga=filcsv.readline()
            testo=riga[:-1]
            pp=str.split(testo,';')
            self.fields=[]
            yPopTotRischio=[]
            yPerViteUman=[]
            xTiranteIdrico=[]
            for p in pp:
                self.fields.append(p)
            self.data = []
            for i in range(len(self.fields)):
                self.data += [[]]
            steps=0
            for rec in filcsv:
                if len(rec)>0:
                    steps=steps+1
            #steps = self.provider.featureCount()
            stepp = steps / 10
            if stepp == 0:
                stepp = 1
            progress = unicode('Reading data ') # As a progress bar is used the main window's status bar, because the own one is not initialized yet
            filcsv.close()
            filcsv=open(self.NomeFile,'r')
            riga=filcsv.readline()
            n = 0
            self.numRows=0
            for kk in range(steps):
                riga=filcsv.readline()[:-1]
                attrs=str.split(riga,';')
                for i in range(len(attrs)):
                    self.data[i] += [attrs[i]]
                    if i == 0:
                        xTiranteIdrico += [attrs[i]]
                    if i == 4:
                        yPopTotRischio += [int(attrs[i])]
                    if i == 5:
                        yPerViteUman += [int(attrs[i])]

                n += 1
                self.numRows+=1

        #---------------Draw Chart-----------------
        y1=yPerViteUman
        y2=yPopTotRischio
        x1=xTiranteIdrico
        width=0.3  # bar width
        i=arange(len(y1))
        r1=bar(i, y1,width, color='r',linewidth=1)
        r2=bar(i+width,y2,width,color='b',linewidth=1)
        xticks(i+width/2,x1)
        xlabel(self.tr('Range water depth (m)')); ylabel(self.tr('Number people')); title(self.tr('Consequences for the population'))
        legend((r1[0],r2[0]),(self.tr('Loss of Life'), self.tr('Total Polpulation at Risk')),'best')
        grid()
        show()

    def setUnderstandingDam(self, enabled):
        if enabled:
            self.paramMethod=0
            FileGDB = str(self.txtShellFilePath_2.text())
            if FileGDB != "":
                if self.CheckGeodatabase():
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    testoQuery='SELECT Understanding FROM FatalityRate WHERE FRType=0 GROUP BY Understanding'
                    cursor.execute(testoQuery)
                    ListaDam = cursor.fetchall()
                    if len(ListaDam)>0:
                        Lista=[]
                        for i in range(len(ListaDam)):
                            Lista.append(str(ListaDam[i][0]))
                        self.comboBox.clear()
                        self.comboBox.addItems(Lista)
                    else:
                        self.comboBox.clear()
                        msg0='Geodatabse %s' % FileGDB
                        msg1=self.tr('error table FatalityRate is empty')
                        msg='%s : %s' % (msg0,msg1)
                        QMessageBox.information(None, "FloodRisk", msg)
                else:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FatalityRate')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)
            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

    def setUnderstandingSufri(self, enabled):
        if enabled:
            self.paramMethod=1
            FileGDB = str(self.txtShellFilePath_2.text())
            if FileGDB != "":
                if self.CheckGeodatabase():
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    testoQuery='SELECT Understanding FROM FatalityRate WHERE FRType=1 GROUP BY Understanding'
                    cursor.execute(testoQuery)
                    ListaDam = cursor.fetchall()
                    if len(ListaDam)>0:
                        Lista=[]
                        for i in range(len(ListaDam)):
                            Lista.append(str(ListaDam[i][0]))
                        self.comboBox.clear()
                        self.comboBox.addItems(Lista)
                    else:
                        self.comboBox.clear()
                        msg0='Geodatabse %s' % FileGDB
                        msg1=self.tr('error table FatalityRate is empty')
                        msg='%s : %s' % (msg0,msg1)
                        QMessageBox.information(None, "FloodRisk", msg)
                else:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FatalityRate')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)
            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))


    def setCurrentUnderstanding(self,ItemText):
        # set currentItem paramUnderstanding
        NumType=self.comboBox.count()
        AllItems = [self.comboBox.itemText(i) for i in range(NumType)]
        if NumType>0:
            index=-1
            for ii in range(NumType):
                if ItemText==AllItems[ii]:
                    index=ii
            if index>=0:
                self.comboBox.setCurrentIndex(index)
                self.paramUnderstanding=ItemText

    #------------------- Functions -------------------
    def luci(self):
        #FileGridPopRisk
        FilePath= str(self.txtShellFilePath_4.text())
        if os.path.exists(FilePath):
            self.label_red_pop.hide()
            self.label_green_pop.show()
        else:
            self.label_red_pop.show()
            self.label_green_pop.hide()

    def preSetUnderstandingDam(self):

            self.radioButton.toggle()
            FileGDB = str(self.txtShellFilePath_2.text())
            if FileGDB != "":
                if self.CheckGeodatabase():
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    testoQuery='SELECT Understanding FROM FatalityRate WHERE FRType=0 GROUP BY Understanding'
                    cursor.execute(testoQuery)
                    ListaDam = cursor.fetchall()
                    Lista=[]
                    for i in range(len(ListaDam)):
                        Lista.append(str(ListaDam[i][0]))
                    self.comboBox.clear()
                    self.comboBox.addItems(Lista)
                    self.paramMethod=0
                else:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FatalityRate')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)
            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

    def preSetUnderstandingSufri(self):
            self.radioButton_2.toggle()
            FileGDB = str(self.txtShellFilePath_2.text())
            if FileGDB != "":
                if self.CheckGeodatabase():
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    testoQuery='SELECT Understanding FROM FatalityRate WHERE FRType=1 GROUP BY Understanding'
                    cursor.execute(testoQuery)
                    ListaDam = cursor.fetchall()
                    Lista=[]
                    for i in range(len(ListaDam)):
                        Lista.append(str(ListaDam[i][0]))
                    self.comboBox.clear()
                    self.comboBox.addItems(Lista)
                else:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FatalityRate')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)
            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

    def CheckGeodatabase(self):
        res=bool()
        if os.path.exists(self.txtShellFilePath_2.text()):
            mydb_path=self.txtShellFilePath_2.text()
            try:
                # connecting the db
                conn = sqlite3.connect(mydb_path)
                # creating a Cursor
                cur = conn.cursor()

                TablesList=['spatial_ref_sys','AnalysisArea','CensusBlocks','FatalityRate']
                TablesList.append('FatalityRate')
                TablesList.append('FloodSeverity')
                TablesList.append('InfrastrLines')
                TablesList.append('VulnType')
                TablesList.append('Vulnerability')
                TablesList.append('StructurePoly')

                for NomeTabella in TablesList:
                    sql="SELECT sql FROM sqlite_master WHERE type='table' AND name='%s';" % (NomeTabella)
                    cur.execute(sql)
                    Tabella=str(cur.fetchone()[0])

                res=bool('True')
            except:
                res=bool()
        else:
            res=bool()
        return res

    def CheckFloodSeverity(self):
        res=bool()
        FileGDB = str(self.txtShellFilePath_2.text())
        if FileGDB != "":
            if self.CheckGeodatabase():
                try:
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    fieldOrder='Num'
                    NomeTabella='FloodSeverity'
                    testoQuery=" SELECT * FROM %s ORDER BY %s;" %(NomeTabella,fieldOrder)
                    cursor.execute(testoQuery)
                    Lista = cursor.fetchall()
                    if len(Lista)>0:
                        res=bool('True')
                    else:
                        msg0='Geodatabse %s' % FileGDB
                        msg1=self.tr('error table FloodSeverity is empty')
                        msg='%s : %s' % (msg0,msg1)
                        QMessageBox.information(None, "FloodRisk", msg)

                except:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FloodSeverity')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)

            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))
        else:
            QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

        return res

    def CheckFatalityRate(self):
        res=bool()
        FileGDB = str(self.txtShellFilePath_2.text())
        if FileGDB != "":
            if self.CheckGeodatabase():
                try:
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    fieldOrder='Num'
                    NomeTabella='FatalityRate'
                    testoQuery=" SELECT * FROM %s ORDER BY %s;" %(NomeTabella,fieldOrder)
                    cursor.execute(testoQuery)
                    Lista = cursor.fetchall()
                    if len(Lista)>0:
                        res=bool('True')
                    else:
                        msg0='Geodatabse %s' % FileGDB
                        msg1=self.tr('error table FatalityRate is empty')
                        msg='%s : %s' % (msg0,msg1)
                        QMessageBox.information(None, "FloodRisk", msg)

                except:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FatalityRate')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)

            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))
        else:
            QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

        return res
예제 #3
0
class calcolodannoDialog(QtGui.QDialog, Ui_FloodRisk):
    def __init__(self,iface):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)
        self.iface=iface
        self.btnChooseShellFile_3.setIcon(QIcon(":/plugins/floodrisk/icons/folder_explore.png"))
        self.btnChooseShellFile_3.setIconSize(QSize(25,25))
        self.pushButtonView.setIcon(QIcon(":/plugins/floodrisk/icons/table_go.png"))
        self.pushButtonView.setIconSize(QSize(25,25))
        self.pushButton.setIcon(QIcon(":/plugins/floodrisk/icons/chart_bar.png"))
        self.pushButton.setIconSize(QSize(25,25))
        self.buttonGrafici.setIcon(QIcon(":/plugins/floodrisk/icons/images.jpg"))
        self.buttonGrafici.setIconSize(QSize(35,25))
        self.label_red_danno.setPixmap(QPixmap(":/plugins/floodrisk/icons/red20.png"))
        self.label_red_vuln.setPixmap(QPixmap(":/plugins/floodrisk/icons/red20.png"))
        self.label_green_danno.setPixmap(QPixmap(":/plugins/floodrisk/icons/green20.png"))
        self.label_green_vuln.setPixmap(QPixmap(":/plugins/floodrisk/icons/green20.png"))

        # initialize actions
        QObject.connect(self.btnChooseShellFile_3, SIGNAL("clicked()"), self.setFileMaxH)
        QObject.connect(self.buttonGrafici, SIGNAL("clicked()"), self.graficoCurve)
        QObject.connect(self.pushButtonView, SIGNAL("clicked()"), self.VediTabellaDanni)
        QObject.connect(self.toolButtonEsegui, SIGNAL("clicked()"), self.EseguiCalcoloDanni)
        QObject.connect(self.pushButtonSalvaProgetto, SIGNAL("clicked()"), self.writexml)
        QObject.connect(self.pushButtonLoadLayer, SIGNAL("clicked()"), self.CaricaLayers)
        QObject.connect(self.pushButton, SIGNAL("clicked()"), self.istogrammi)

        self.dic_TypeId={}
        self.CurveType=''
        self.TotalDamage=0.0

        # help
        QObject.connect(self.buttonBox, SIGNAL(_fromUtf8("helpRequested()")), self.show_help)


    #------------- Actions -----------------------

    def show_help(self):
        """Load the help text into the system browser."""
        show_context_help(context='include3')

    def setFileMaxH(self):
        message = QtGui.QMessageBox.question(self, self.tr('Attention'),self.tr("Warning you are editing the data input to the project: current data" \
        " of output will be deleted. Are you sure?"), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if message == QtGui.QMessageBox.Yes:
            FileMaxHPath = QFileDialog.getOpenFileName(self, self.tr('Select peak flow depth file'), \
            '.', 'File tif (*.tif);;All files (*.*)')
            self.txtShellFilePath_3.setText(FileMaxHPath)
            msg=FileMaxHPath
            QMessageBox.information(None, "FileMaxHPath", msg)
            msg=str(self.txtShellFilePath.text())
            if msg=="":
                aa=str(FileMaxHPath)
                DirOut=os.path.dirname(aa)
                Name=os.path.basename(aa)
                pp=str.split(Name,'.')
                FileProgettoPath=DirOut+os.sep + pp[0]+'.dmg'
                self.txtShellFilePath.setText(FileProgettoPath)

            msg=str(self.txtShellFilePath_5.text())
            if msg=="":
                aa=str(FileMaxHPath)
                DirOut=os.path.dirname(aa)
                Name=os.path.basename(aa)
                pp=str.split(Name,'.')
                FileDannoPath=DirOut+os.sep + pp[0]+'_dmg.tif'
                self.txtShellFilePath_5.setText(FileDannoPath)

            msg=str(self.txtShellFilePath_6.text())
            if msg=="":
                aa=str(FileMaxHPath)
                DirOut=os.path.dirname(aa)
                Name=os.path.basename(aa)
                pp=str.split(Name,'.')
                FileTabDannoPath=DirOut+os.sep + pp[0]+'_dmg.csv'
                self.txtShellFilePath_6.setText(FileTabDannoPath)

            msg=str(self.txtShellFilePath_vulnerato.text())
            if msg=="":
                aa=str(FileMaxHPath)
                DirOut=os.path.dirname(aa)
                Name=os.path.basename(aa)
                pp=str.split(Name,'.')
                FileVulnPath=DirOut+os.sep + pp[0]+'_vuln.tif'
                self.txtShellFilePath_vulnerato.setText(FileVulnPath)

            #----Deleting output data -----
            self.txtShellFilePath_5.setText("")
            self.txtShellFilePath_vulnerato.setText("")
            self.txtShellFilePath_6.setText("")
            abil=bool("true")
            self.pushButtonSalvaProgetto.setEnabled(abil)

    def graficoCurve(self):
        tipo = self.comboBoxGrafici.currentText()
        try:
            self.idTipo = self.dic_TypeId[tipo]
            from graficofloodriskdialog import graficofloodriskDialog
            gfd=graficofloodriskDialog(self.iface, self.idTipo, tipo)
            geoDataBase=str(self.txtShellFilePath_2.text())
            if geoDataBase!="":
                gfd.lineEdit.setText(geoDataBase)
            gfd.run()
        except:
            txt0='Geodatabase: %s \n\n' % self.txtShellFilePath_2.text()
            txt1=self.tr("Error in table Vulnerability")
            msg='%s %s' % (txt0,txt1)
            QMessageBox.information(None, "Graph", msg)

    def EseguiCalcoloDanni(self):

        self.Nome=[]
        self.listafiles=[]
        # FileDEM1
        self.Nome.append('File Max Water Depth')
        self.listafiles.append(str(self.txtShellFilePath_3.text()))
        # DBfile
        self.Nome.append('File Geodatabase')
        self.listafiles.append(str(self.txtShellFilePath_2.text()))
        # NameFileGridVulnerability
        self.Nome.append('File Grid Vulnerability')
        self.listafiles.append(str(self.txtShellFilePath_vulnerato.text()))
        # NameFileGridDamages
        self.Nome.append('File Grid Damages')
        self.listafiles.append(str(self.txtShellFilePath_5.text()))
        # NameFileTable
        self.Nome.append('File Table 1')
        self.listafiles.append(str(self.txtShellFilePath_6.text()))

        tipo = self.comboBoxGrafici.currentText()
        self.CurveType=tipo

        abil0=bool("true")
        try:
            self.idTipo = self.dic_TypeId[tipo]
            self.listafiles.append(self.idTipo)
        except:
                txt0='Geodatabase: %s \n\n' % self.txtShellFilePath_2.text()
                txt1=self.tr('Warning the Depth-Damage Curves Type')
                txt2=self.tr('does not exists')
                msg='%s %s %s: %s' % (txt0,txt1,tipo,txt2)
                QMessageBox.information(None, "Input", msg)
                abil0=bool()
                errMsg='Input Error'

        if abil0:
            abil=bool("true")
            for i in range(2):
                if not os.path.exists(self.listafiles[i]):
                    txt1=self.tr('Warning the file')
                    txt2=self.tr('does not exists')
                    msg='%s %s: %s' % (txt1,self.Nome[i],txt2)
                    QMessageBox.information(None, "File input", msg)
                    abil=bool()
                    errMsg='Input Error'
            for k in range(3):
                i=k+2
                if len(self.listafiles[i])==0:
                    txt1=self.tr('Attention assign a name to file')
                    msg='%s: %s ' % (txt1,self.Nome[i])
                    QMessageBox.information(None, "File output", msg)
                    abil=bool()
                    errMsg='Input Error'
        else:
            abil=bool()

        if abil:
            fileprogetto=str(self.txtShellFilePath.text())

            # initializes progressbar
            self.progressBar.setFormat(self.tr('Damage assessment') +': %p%')

            self.progressBar.setValue(0)
            abil=bool()
            self.buttonBox.setEnabled(abil)

            NotErr, errMsg, TotalDamage = CalcoloDannoInondazione.main(self.listafiles,self.progressBar)

            self.TotalDamage=TotalDamage

            self.luci()
            if NotErr:
                msg=self.tr('End of Job')
                QMessageBox.information(None, "FloodRisk", msg)
                self.writexml()

                abil=bool('True')
                self.buttonBox.setEnabled(abil)
                self.progressBar.setFormat(('%p%'))
                self.progressBar.setValue(0)
            else:
                msg=errMsg + " - " + self.tr("Run not executed")
                QMessageBox.information(None, "Run", msg)
                self.luci()
        else:
            msg=errMsg + " - " + self.tr("Run not executed")
            QMessageBox.information(None, "Run", msg)
            self.luci()

    def writexml (self):
        fileprogetto=str(self.txtShellFilePath.text())
        dicProgetto={}
        dicParameter={}
        if fileprogetto!="":
            xmlfile=open(fileprogetto)
            dom=minidom.parse(xmlfile)
            for node in dom.getElementsByTagName("General"):
                L = node.getElementsByTagName("File")
                for node2 in L:
                    Button = node2.getAttribute("Button")
                    nome = node2.getAttribute("name")
                    dicProgetto[Button] = nome
            for node in dom.getElementsByTagName("Parameters"):
                L = node.getElementsByTagName("Parameter")
                for node2 in L:
                    Param = node2.getAttribute("Param")
                    Value = node2.getAttribute("Value")
                    dicParameter[Param] = Value

            xmlfile.close()
        # Create the minidom document
        doc = Document()

        # Create the <wml> base element
        wml = doc.createElement("FloodRisk")
        doc.appendChild(wml)

        # Create the main <card> element
        maincard = doc.createElement("General")
        wml.appendChild(maincard)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_2.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileGeodatabase')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)

        ShellFilePath= str(self.txtShellFilePath_3.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FilePeakFloodDepth')
        paragraph1.setAttribute("name", ShellFilePath)
        #paragraph1.setAttribute("unit", '[m]')
        maincard.appendChild(paragraph1)

        # Save input file
        for Button in dicProgetto.keys():
            nome = dicProgetto[Button]
            if Button == 'FilePeakFloodVelocity':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                #paragraph1.setAttribute("unit", '[m]')
                maincard.appendChild(paragraph1)
            if Button == 'FileWarningTime':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                #paragraph1.setAttribute("unit", '[m]')
                maincard.appendChild(paragraph1)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_5.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileGridDamages')
        paragraph1.setAttribute("name", ShellFilePath)
        #paragraph1.setAttribute("unit", '[kEuro]')
        maincard.appendChild(paragraph1)
#
        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_vulnerato.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileGridVulnerability')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)
#
        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_6.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileTable1')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)

        # Save input file
        for Button in dicProgetto.keys():
            nome = dicProgetto[Button]
            if Button == 'FileGridPopRisk':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                maincard.appendChild(paragraph1)
            if Button == 'FileTable2':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                maincard.appendChild(paragraph1)

        # Create the main <card> element
        maincard2 = doc.createElement("Parameters")
        wml.appendChild(maincard2)

        # Create a <p> element
        Param1 = doc.createElement("Parameter")
        Param1.setAttribute("Param", 'CurveType')
        Param1.setAttribute("Value", self.CurveType)
        maincard2.appendChild(Param1)

        Param1 = doc.createElement("Parameter")
        Param1.setAttribute("Param", 'TotalDamage')
        msg='%.1f' % self.TotalDamage
        Param1.setAttribute("Value", msg)
        maincard2.appendChild(Param1)


        for Param in dicParameter.keys():
            Value = dicParameter[Param]
            if Param == 'Method':
                Param2 = doc.createElement("Parameter")
                Param2.setAttribute("Param", 'Method')
                Param2.setAttribute("Value", Value)
                maincard2.appendChild(Param2)
            if Param == 'Understand':
                Param2 = doc.createElement("Parameter")
                Param2.setAttribute("Param", 'Understand')
                Param2.setAttribute("Value", Value)
                maincard2.appendChild(Param2)
            if Param == 'LOL':
                Param2 = doc.createElement("Parameter")
                Param2.setAttribute("Param", 'LOL')
                Param2.setAttribute("Value", Value)
                maincard2.appendChild(Param2)


        if fileprogetto!="":
          fp = open(fileprogetto,"w")
          # writexml(self, writer, indent='', addindent='', newl='', encoding=None)
          doc.writexml(fp, "", "   ", "\n", "UTF-8")
          self.AutoLoad=fileprogetto
          QMessageBox.information(None, "Info", self.tr("Project Saved"))

    def VediTabellaDanni(self):
        self.NomeTabella=str(self.txtShellFilePath_6.text())
        self.TabView = TableViewer(self.iface,self.NomeTabella)
        self.TabView.show()# show the dialog
        result = self.TabView.exec_()

    def CaricaLayers(self):
        filePath=str(self.txtShellFilePath_2.text())
        if os.path.exists(filePath):
            # case geodatabase
            tabelle=['StructurePoly','InfrastrLines','CensusBlocks']
            for nomelayer in tabelle:
                if not LayerCaricato(self,nomelayer):
                    openFile(self,filePath,nomelayer)

        filePath=str(self.txtShellFilePath_3.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self,filePath):
                openFile(self,filePath,'')

        filePath=str(self.txtShellFilePath_vulnerato.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self,filePath):
                openFile(self,filePath,'')

        filePath=str(self.txtShellFilePath_5.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self,filePath):
                openFile(self,filePath,'')

    def istogrammi(self):
        self.NomeFile=str(self.txtShellFilePath_6.text())
        if os.path.exists(self.NomeFile):
            filcsv=open(self.NomeFile,'r')
            riga=filcsv.readline()
            testo=riga[:-1]
            pp=str.split(testo,';')
            self.fields=[]
            yEuro1=[]
            yEuro2=[]
            xCodice=[]
            for p in pp:
                self.fields.append(p)
            self.data = []
            for i in range(len(self.fields)):
              self.data += [[]]
            steps=0
            for rec in filcsv:
                if len(rec)>0:
                    steps=steps+1
            #steps = self.provider.featureCount()
            stepp = steps / 10
            if stepp == 0:
              stepp = 1
            progress = unicode('Reading data ') # As a progress bar is used the main window's status bar, because the own one is not initialized yet
            filcsv.close()
            filcsv=open(self.NomeFile,'r')
            riga=filcsv.readline()
            n = 0
            self.numRows=0
            for kk in range(steps):
                riga=filcsv.readline()[:-1]
                attrs=str.split(riga,';')
                for i in range(len(attrs)):
                    self.data[i] += [attrs[i]]
                    if i == 0:
                        xCodice += [attrs[i]]
                    if i == 4:
                        yEuro2 += [int(attrs[i])]
                    if i == 5:
                        yEuro1 += [int(attrs[i])]

                n += 1
                self.numRows+=1
            #---------------Draw Chart-----------------
            y1=yEuro1
            y2=yEuro2
            x1=xCodice
            width=0.3
            i=arange(len(y1))
            r1=bar(i, y1,width, color='r',linewidth=1)
            r2=bar(i+width,y2,width,color='b',linewidth=1)
            xticks(i+width/2,x1)
            xlabel('Code'); ylabel('Euro'); title(self.tr('Damage assessment results'))
            legend((r1[0],r2[0]),(self.tr('Content Damage'), self.tr('Structure Damage')), 'best')
            grid()
            show()
        else:
            txt1=self.tr('Warning the file')
            txt2=self.tr('does not exists')
            msg='%s\n\n %s\n\n %s' % (txt1,self.NomeFile,txt2)
            QMessageBox.information(None, "Input", msg)


    #------------------- Functions ---------------------------
    def startxml (self):
        fileprogetto=str(self.txtShellFilePath.text())
        if fileprogetto!="":
            xmlfile=open(fileprogetto)
            dom=minidom.parse(xmlfile)
            for node in dom.getElementsByTagName("General"):
                L = node.getElementsByTagName("File")
                for node2 in L:
                    Button = node2.getAttribute("Button")
                    nome = node2.getAttribute("name")
                    if Button=='FileGeodatabase':
                        self.txtShellFilePath_2.setText(nome)
                    elif Button=='FilePeakFloodDepth':
                        self.txtShellFilePath_3.setText(nome)
                    elif Button=='FileGridDamages':
                        self.txtShellFilePath_5.setText(nome)
                    elif Button=='FileGridVulnerability':
                        self.txtShellFilePath_vulnerato.setText(nome)
                    elif Button=='FileTable1':
                        self.txtShellFilePath_6.setText(nome)

            for node in dom.getElementsByTagName("Parameters"):
                L = node.getElementsByTagName("Parameter")
                for node2 in L:
                    Param = node2.getAttribute("Param")
                    try:
                        Value = node2.getAttribute("Value")
                    except:
                        Value = node2.getAttribute("name")
                    if Param=='CurveType':
                        self.CurveType=Value
                        self.setCurrentCurveType(Value)

            xmlfile.close()
            abil=bool("true")
            self.pushButtonSalvaProgetto.setEnabled(abil)

    def luci(self):

        FilePath= str(self.txtShellFilePath_6.text())
        #FileGridDamages
        FilePath= str(self.txtShellFilePath_5.text())
        if os.path.exists(FilePath):
            self.label_red_danno.hide()
            self.label_green_danno.show()
        else:
            self.label_red_danno.show()
            self.label_green_danno.hide()

        #FileGridVulnerability
        FilePath= str(self.txtShellFilePath_vulnerato.text())
        if os.path.exists(FilePath):
            self.label_red_vuln.hide()
            self.label_green_vuln.show()
        else:
            self.label_red_vuln.show()
            self.label_green_vuln.hide()

    def setListaTipoCurvaVuln(self):
        FileGDB = str(self.txtShellFilePath_2.text())
        if FileGDB != "":
            if self.CheckGeodatabase():
                conn = sqlite3.connect(FileGDB)
                cursor = conn.cursor()
                testoQuery='SELECT VulnID FROM Vulnerability GROUP BY VulnID'
                cursor.execute(testoQuery)
                ListaTipi1 = cursor.fetchall()
                ListaTipi = []
                for row in ListaTipi1:
                    ListaTipi.append(int(row[0]))
                dic_VulnType={}
                self.dic_TypeId={}
                testoQuery2='SELECT * FROM VulnType'
                cursor.execute(testoQuery2)
                ListaDescription = cursor.fetchall()
                if len(ListaDescription)>0:
                    for row in ListaDescription:
                        dic_VulnType[int(row[1])] = str(row[2])
                        self.dic_TypeId[str(row[2])] = int(row[1])
                    ListaDescrizione=[]
                    for num in ListaTipi:
                        ListaDescrizione.append(dic_VulnType[num])
                    self.comboBoxGrafici.clear()
                    self.comboBoxGrafici.addItems(ListaDescrizione)

            else:
                 QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))
        else:
             QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

    def setCurrentCurveType(self,ItemText):
        # set currentItem CurveType
        self.CurveType=''
        NumType=self.comboBoxGrafici.count()
        AllItems = [self.comboBoxGrafici.itemText(i) for i in range(NumType)]
        if NumType>0:
            index=-1
            for ii in range(NumType):
                if ItemText==AllItems[ii]:
                    index=ii
            if index>=0:
                self.comboBoxGrafici.setCurrentIndex(index)
                self.CurveType=ItemText

    def CheckGeodatabase(self):
        res=bool()
        if os.path.exists(self.txtShellFilePath_2.text()):
            mydb_path=self.txtShellFilePath_2.text()
            try:
                # connecting the db
                conn = sqlite3.connect(mydb_path)
                # creating a Cursor
                cur = conn.cursor()

                TablesList=['spatial_ref_sys','AnalysisArea','CensusBlocks','FatalityRate']
                TablesList.append('FatalityRate')
                TablesList.append('FloodSeverity')
                TablesList.append('InfrastrLines')
                TablesList.append('VulnType')
                TablesList.append('Vulnerability')
                TablesList.append('StructurePoly')

                for NomeTabella in TablesList:
                    sql="SELECT sql FROM sqlite_master WHERE type='table' AND name='%s';" % (NomeTabella)
                    cur.execute(sql)
                    Tabella=str(cur.fetchone()[0])

                res=bool('True')
            except:
                res=bool()
        else:
            res=bool()
        return res
예제 #4
0
class calcolorischiopopolazioneDialog(QtGui.QDialog, Ui_FloodRisk):
    def __init__(self,iface):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)
        self.iface=iface

        self.btnChooseShellFile_3.setIcon(QIcon(":/plugins/floodrisk/icons/folder_explore.png"))
        self.btnChooseShellFile_3.setIconSize(QSize(25,25))
        self.btnChooseShellFile_velocita.setIcon(QIcon(":/plugins/floodrisk/icons/folder_explore.png"))
        self.btnChooseShellFile_velocita.setIconSize(QSize(25,25))
        self.btnChooseShellFile_tempi.setIcon(QIcon(":/plugins/floodrisk/icons/folder_explore.png"))
        self.btnChooseShellFile_tempi.setIconSize(QSize(25,25))
        self.pushButtonView_2.setIcon(QIcon(":/plugins/floodrisk/icons/table_go.png"))
        self.pushButtonView_2.setIconSize(QSize(25,25))
        self.pushButtonIstogrammi.setIcon(QIcon(":/plugins/floodrisk/icons/chart_bar.png"))
        self.pushButtonIstogrammi.setIconSize(QSize(25,25))
        self.label_red_pop.setPixmap(QPixmap(":/plugins/floodrisk/icons/red20.png"))
        self.label_green_pop.setPixmap(QPixmap(":/plugins/floodrisk/icons/green20.png"))

        # initialize actions
        QObject.connect(self.btnChooseShellFile_3, SIGNAL("clicked()"), self.setFileMaxH)
        QObject.connect(self.btnChooseShellFile_velocita, SIGNAL("clicked()"), self.setFileMaxV)
        QObject.connect(self.btnChooseShellFile_tempi, SIGNAL("clicked()"), self.setFileTime)
        QObject.connect(self.toolButtonEsegui_2, SIGNAL("clicked()"), self.EseguiCalcoloPopolazione)
        QObject.connect(self.pushButtonView_2, SIGNAL("clicked()"), self.VediTabellaRischio)
        QObject.connect(self.pushButtonSalvaProgetto, SIGNAL("clicked()"), self.writexml)
        QObject.connect(self.pushButtonLoadLayer, SIGNAL("clicked()"), self.CaricaLayers)
        QObject.connect(self.pushButtonIstogrammi, SIGNAL("clicked()"), self.istogrammi)
        self.radioButton.toggled.connect(self.setUnderstandingDam)
        self.radioButton_2.toggled.connect(self.setUnderstandingSufri)

        # help
        QObject.connect(self.buttonBox, SIGNAL(_fromUtf8("helpRequested()")), self.show_help)

        self.paramMethod=''
        self.paramUnderstanding=''
        self.paramLOL_notRound=0.0

    #------------- Actions -----------------------

    def show_help(self):
        """Load the help text into the system browser."""
        show_context_help(context='include4')


    def setFileMaxV(self):
        message = QtGui.QMessageBox.question(self, self.tr('Attention'),self.tr("Warning you are editing the data input to the project: current data" \
        " of output will be deleted. Are you sure?"), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if message == QtGui.QMessageBox.Yes:
            FileMaxVPath = QFileDialog.getOpenFileName(self, "Select file max water velocity", \
            '.', 'File tif (*.tif);;All files (*.*)')
            self.txtShellFilePath_velocita.setText(FileMaxVPath)
            #----Deleting output data-----
            self.txtShellFilePath_4.setText("")
            self.txtShellFilePath_7.setText("")

    def setFileTime(self):
        message = QtGui.QMessageBox.question(self, self.tr('Attention'),self.tr("Warning you are editing the data input to the project: current data" \
        " of output will be deleted. Are you sure?"), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if message == QtGui.QMessageBox.Yes:
            FileTimePath = QFileDialog.getOpenFileName(self, self.tr("Select warning time shape file"), \
            '.', 'File shp (*.shp);;All files (*.*)')
            self.txtShellFilePath_tempi.setText(FileTimePath)
            #----Deleting output data-----
            self.txtShellFilePath_4.setText("")
            self.txtShellFilePath_7.setText("")

    def setFileMaxH(self):
        message = QtGui.QMessageBox.question(self, self.tr('Attention'),self.tr("Warning you are editing the data input to the project: current data" \
        " of output will be deleted. Are you sure?"), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if message == QtGui.QMessageBox.Yes:
            FileMaxHPath = QFileDialog.getOpenFileName(self, self.tr('Select peak flow depth file'), \
            '.', 'File tif (*.tif);;All files (*.*)')
            self.txtShellFilePath_3.setText(FileMaxHPath)
            msg=FileMaxHPath
            QMessageBox.information(None, "FileMaxHPath", msg)
            msg=str(self.txtShellFilePath.text())
            if msg=="":
                aa=str(FileMaxHPath)
                DirOut=os.path.dirname(aa)
                Name=os.path.basename(aa)
                pp=str.split(Name,'.')
                FileProgettoPath=DirOut+os.sep + pp[0]+'.dmg'
                self.txtShellFilePath.setText(FileProgettoPath)

            msg=str(self.txtShellFilePath_4.text())
            if msg=="":
                aa=str(FileMaxHPath)
                DirOut=os.path.dirname(aa)
                Name=os.path.basename(aa)
                pp=str.split(Name,'.')
                FileGridPopPath=DirOut+os.sep + pp[0]+'_pop.tif'
                self.txtShellFilePath_4.setText(FileGridPopPath)

            msg=str(self.txtShellFilePath_7.text())
            if msg=="":
                aa=str(FileMaxHPath)
                DirOut=os.path.dirname(aa)
                Name=os.path.basename(aa)
                pp=str.split(Name,'.')
                FileTab2DannoPath=DirOut+os.sep + pp[0]+'_pop.csv'
                self.txtShellFilePath_7.setText(FileTab2DannoPath)

            #----Deleting output data-----
            self.txtShellFilePath_4.setText("")
            self.txtShellFilePath_7.setText("")
            abil=bool("true")
            self.pushButtonSalvaProgetto.setEnabled(abil)
            #self.luci()

    def EseguiCalcoloPopolazione(self):

        # ------------------------------------------------------
        # performs the calculation of the risk to the population
        # ------------------------------------------------------
        self.Nome=[]
        self.listafiles=[]
        # FileDEM1
        self.Nome.append('File Max Water Depth')
        self.listafiles.append(str(self.txtShellFilePath_3.text()))
        # file Water Velocity
        self.Nome.append('File Water Velocity')
        self.listafiles.append(str(self.txtShellFilePath_velocita.text()))
        # file Warning Time
        self.Nome.append('File Warning Time')
        self.listafiles.append(str(self.txtShellFilePath_tempi.text()))
        # DBfile
        self.Nome.append('File Geodatabase')
        self.listafiles.append(str(self.txtShellFilePath_2.text()))
        # NameFileGridPop
        self.Nome.append('File Grid population at risk')
        self.listafiles.append(str(self.txtShellFilePath_4.text()))
        # NameFileTable2
        self.Nome.append('File Table 2')
        self.listafiles.append(str(self.txtShellFilePath_7.text()))

        parametroUnderstanding = self.comboBox.currentText()
        self.paramUnderstanding=parametroUnderstanding
        self.listafiles.append(parametroUnderstanding)

        abil=bool("true")
        for i in range(4):
            if not os.path.exists(self.listafiles[i]):
                msg1=self.tr('Error the file')
                msg2=self.tr('does not exist')
                msg='%s %s: %s ' % (msg1,self.Nome[i],msg2)
                QMessageBox.information(None, "Fine input", msg)
                abil=bool()
        for k in range(2):
            i=k+4
            if len(self.listafiles[i])==0:
                txt1=self.tr('Attention assign a name to file')
                msg='%s: %s ' % (txt1,self.Nome[i])
                QMessageBox.information(None, "Fine output", msg)
                abil=bool()
        if not self.CheckFloodSeverity():
            abil=bool()

        if not self.CheckFatalityRate():
            abil=bool()

        if abil:
            fileprogetto=str(self.txtShellFilePath.text())

            if self.CheckGeodatabase():

                # initializes progressbar
                self.progressBar.setFormat(self.tr('Population consequences assessment') +': %p%')

                self.progressBar.setValue(0)
                abil=bool()
                self.buttonBox.setEnabled(abil)

                NotErr, errMsg, NumLoss_notRound = AssessConsequencesPopulation.main(self.listafiles,self.progressBar)

                self.paramLOL_notRound=NumLoss_notRound

                self.luci()

                if NotErr:
                    msg=self.tr('End of Job')
                    QMessageBox.information(None, "FloodRisk", msg)
                    self.writexml()

                    abil=bool('True')
                    self.buttonBox.setEnabled(abil)
                    self.progressBar.setFormat(('%p%'))
                    self.progressBar.setValue(0)
                else:
                    msg=self.tr("Run not executed")
                    msg='%s : %s' % (errMsg,msg)
                    QMessageBox.information(None, "Run", msg)
                    self.luci()

            else:

                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

        else:
            msg=self.tr("Run not executed")
            QMessageBox.information(None, "Run", msg)
            self.luci()

    def VediTabellaRischio(self):
        self.NomeTabella=str(self.txtShellFilePath_7.text())
        self.TabView = TableViewer(self.iface,self.NomeTabella)
        self.TabView.show()# show the dialog
        result = self.TabView.exec_()

    def writexml (self):
        fileprogetto=str(self.txtShellFilePath.text())
        dicProgetto={}
        dicParameter={}
        if fileprogetto!="":
            xmlfile=open(fileprogetto)
            dom=minidom.parse(xmlfile)
            for node in dom.getElementsByTagName("General"):
                L = node.getElementsByTagName("File")
                for node2 in L:
                    Button = node2.getAttribute("Button")
                    nome = node2.getAttribute("name")
                    dicProgetto[Button] = nome
            for node in dom.getElementsByTagName("Parameters"):
                L = node.getElementsByTagName("Parameter")
                for node2 in L:
                    Param = node2.getAttribute("Param")
                    Value = node2.getAttribute("Value")
                    dicParameter[Param] = Value

            xmlfile.close()
        # Create the minidom document
        doc = Document()

        # Create the <wml> base element
        wml = doc.createElement("FloodRisk")
        doc.appendChild(wml)

        # Create the main <card> element
        maincard = doc.createElement("General")
        wml.appendChild(maincard)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_2.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileGeodatabase')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)

        ShellFilePath= str(self.txtShellFilePath_3.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FilePeakFloodDepth')
        paragraph1.setAttribute("name", ShellFilePath)
        #paragraph1.setAttribute("unit", '[m]')
        maincard.appendChild(paragraph1)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_velocita.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FilePeakFloodVelocity')
        paragraph1.setAttribute("name", ShellFilePath)
        #paragraph1.setAttribute("unit", '[m]')
        maincard.appendChild(paragraph1)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_tempi.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileWarningTime')
        paragraph1.setAttribute("name", ShellFilePath)
        #paragraph1.setAttribute("unit", '[m]')
        maincard.appendChild(paragraph1)

        # Save input files
        for Button in dicProgetto.keys():
            nome = dicProgetto[Button]
            if Button == 'FileGridDamages':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                #paragraph1.setAttribute("unit", '[m]')
                maincard.appendChild(paragraph1)
            if Button == 'FileGridVulnerability':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                #paragraph1.setAttribute("unit", '[m]')
                maincard.appendChild(paragraph1)
            if Button == 'FileTable1':
                paragraph1 = doc.createElement("File")
                paragraph1.setAttribute("Button", Button)
                paragraph1.setAttribute("name", nome)
                #paragraph1.setAttribute("unit", '[m]')
                maincard.appendChild(paragraph1)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_4.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileGridPopRisk')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)

        # Create a <p> element
        ShellFilePath= str(self.txtShellFilePath_7.text())
        paragraph1 = doc.createElement("File")
        paragraph1.setAttribute("Button", 'FileTable2')
        paragraph1.setAttribute("name", ShellFilePath)
        maincard.appendChild(paragraph1)

        # Create the main <card> element
        maincard2 = doc.createElement("Parameters")
        wml.appendChild(maincard2)

        for Param in dicParameter.keys():
            Value = dicParameter[Param]
            if Param == 'CurveType':
                Param2 = doc.createElement("Parameter")
                Param2.setAttribute("Param", 'CurveType')
                Param2.setAttribute("Value", Value)
                maincard2.appendChild(Param2)
            if Param == 'TotalDamage':
                Param2 = doc.createElement("Parameter")
                Param2.setAttribute("Param", 'TotalDamage')
                Param2.setAttribute("Value", Value)
                maincard2.appendChild(Param2)

        Param2 = doc.createElement("Parameter")
        Param2.setAttribute("Param", 'Method')
        Param2.setAttribute("Value", str(self.paramMethod))
        maincard2.appendChild(Param2)

        Param2 = doc.createElement("Parameter")
        Param2.setAttribute("Param", 'Understand')
        Param2.setAttribute("Value", self.paramUnderstanding)
        maincard2.appendChild(Param2)

        Param3 = doc.createElement("Parameter")
        Param3.setAttribute("Param", 'LOL')
        msg='%4f' % self.paramLOL_notRound
        Param3.setAttribute("Value", msg)
        maincard2.appendChild(Param3)


        if fileprogetto!="":
            fp = open(fileprogetto,"w")
            # writexml(self, writer, indent='', addindent='', newl='', encoding=None)
            doc.writexml(fp, "", "   ", "\n", "UTF-8")
            self.AutoLoad=fileprogetto
            QMessageBox.information(None, "Info", self.tr("Project Saved"))

    def CaricaLayers(self):
        filePath=str(self.txtShellFilePath_2.text())
        if os.path.exists(filePath):
            # case geodatabase
            tabelle=['StructurePoly','InfrastrLines','CensusBlocks']
            for nomelayer in tabelle:
                # checks if the layer is already loaded
                if not LayerCaricato(self,nomelayer):
                    openFile(self,filePath,nomelayer)

        filePath=str(self.txtShellFilePath_3.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self,filePath):
                openFile(self,filePath,'')

        filePath=str(self.txtShellFilePath_velocita.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self,filePath):
                openFile(self,filePath,'')

        filePath=str(self.txtShellFilePath_tempi.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self,filePath):
                openFile(self,filePath,'')

        filePath=str(self.txtShellFilePath_4.text())
        if os.path.exists(filePath):
            if not LayerCaricato(self,filePath):
                openFile(self,filePath,'')

    def istogrammi(self):
        self.NomeFile=str(self.txtShellFilePath_7.text())
        if os.path.exists(self.NomeFile):
            try:
                import matplotlib

                self.sep=check_csv_separator(self.NomeFile)
               # Reading csv file
                finp = open(self.NomeFile)
                csv_reader = csv.reader(finp, delimiter=self.sep, quotechar='"')
                headers = csv_reader.next()

                self.fields=[]
                for p in headers:
                    self.fields.append(p)

                progress = unicode('Reading data ') # As a progress bar is used the main window's status bar, because the own one is not initialized yet

                yPopTotRischio=[]
                yPerViteUman=[]
                xTiranteIdrico=[]
                for record in csv_reader:
                    for i in range(len(record)):

                        if i == 0:
                            xTiranteIdrico += [record[i]]
                        if i == 4:
                            yPopTotRischio += [int(record[i])]
                        if i == 5:
                            yPerViteUman += [int(record[i])]

                finp.close()

                #---------------Draw Chart-----------------
                y1=yPerViteUman
                y2=yPopTotRischio
                x1=xTiranteIdrico
                width=0.3  # bar width
                i=arange(len(y1))
                r1=bar(i, y1,width, color='r',linewidth=1)
                r2=bar(i+width,y2,width,color='b',linewidth=1)
                xticks(i+width/2,x1)
                xlabel(self.tr('Range water depth (m)')); ylabel(self.tr('Number people')); title(self.tr('Consequences for the population'))
                try:
                    legend((r1[0],r2[0]),(self.tr('Loss of Life'), self.tr('Total Polpulation at Risk')),'best')
                except:
                    pass
                grid()
                show()
            except:
                QMessageBox.information(None, "Warning", "The current version of QGIS does not allow import matplotlib")

    def setUnderstandingDam(self, enabled):
        if enabled:
            self.paramMethod=0
            FileGDB = str(self.txtShellFilePath_2.text())
            if FileGDB != "":
                if self.CheckGeodatabase():
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    testoQuery='SELECT Understanding FROM FatalityRate WHERE FRType=0 GROUP BY Understanding'
                    cursor.execute(testoQuery)
                    ListaDam = cursor.fetchall()
                    if len(ListaDam)>0:
                        Lista=[]
                        for i in range(len(ListaDam)):
                            Lista.append(str(ListaDam[i][0]))
                        self.comboBox.clear()
                        self.comboBox.addItems(Lista)
                    else:
                        self.comboBox.clear()
                        msg0='Geodatabse %s' % FileGDB
                        msg1=self.tr('error table FatalityRate is empty')
                        msg='%s : %s' % (msg0,msg1)
                        QMessageBox.information(None, "FloodRisk", msg)
                else:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FatalityRate')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)
            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

    def setUnderstandingSufri(self, enabled):
        if enabled:
            self.paramMethod=1
            FileGDB = str(self.txtShellFilePath_2.text())
            if FileGDB != "":
                if self.CheckGeodatabase():
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    testoQuery='SELECT Understanding FROM FatalityRate WHERE FRType=1 GROUP BY Understanding'
                    cursor.execute(testoQuery)
                    ListaDam = cursor.fetchall()
                    if len(ListaDam)>0:
                        Lista=[]
                        for i in range(len(ListaDam)):
                            Lista.append(str(ListaDam[i][0]))
                        self.comboBox.clear()
                        self.comboBox.addItems(Lista)
                    else:
                        self.comboBox.clear()
                        msg0='Geodatabse %s' % FileGDB
                        msg1=self.tr('error table FatalityRate is empty')
                        msg='%s : %s' % (msg0,msg1)
                        QMessageBox.information(None, "FloodRisk", msg)
                else:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FatalityRate')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)
            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))


    def setCurrentUnderstanding(self,ItemText):
        # set currentItem paramUnderstanding
        NumType=self.comboBox.count()
        AllItems = [self.comboBox.itemText(i) for i in range(NumType)]
        if NumType>0:
            index=-1
            for ii in range(NumType):
                if ItemText==AllItems[ii]:
                    index=ii
            if index>=0:
                self.comboBox.setCurrentIndex(index)
                self.paramUnderstanding=ItemText

    #------------------- Functions -------------------
    def luci(self):
        #FileGridPopRisk
        FilePath= str(self.txtShellFilePath_4.text())
        if os.path.exists(FilePath):
            self.label_red_pop.hide()
            self.label_green_pop.show()
        else:
            self.label_red_pop.show()
            self.label_green_pop.hide()

    def preSetUnderstandingDam(self):

            self.radioButton.toggle()
            FileGDB = str(self.txtShellFilePath_2.text())
            if FileGDB != "":
                if self.CheckGeodatabase():
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    testoQuery='SELECT Understanding FROM FatalityRate WHERE FRType=0 GROUP BY Understanding'
                    cursor.execute(testoQuery)
                    ListaDam = cursor.fetchall()
                    Lista=[]
                    for i in range(len(ListaDam)):
                        Lista.append(str(ListaDam[i][0]))
                    self.comboBox.clear()
                    self.comboBox.addItems(Lista)
                    self.paramMethod=0
                else:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FatalityRate')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)
            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

    def preSetUnderstandingSufri(self):
            self.radioButton_2.toggle()
            FileGDB = str(self.txtShellFilePath_2.text())
            if FileGDB != "":
                if self.CheckGeodatabase():
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    testoQuery='SELECT Understanding FROM FatalityRate WHERE FRType=1 GROUP BY Understanding'
                    cursor.execute(testoQuery)
                    ListaDam = cursor.fetchall()
                    Lista=[]
                    for i in range(len(ListaDam)):
                        Lista.append(str(ListaDam[i][0]))
                    self.comboBox.clear()
                    self.comboBox.addItems(Lista)
                else:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FatalityRate')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)
            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

    def CheckGeodatabase(self):
        res=bool()
        if os.path.exists(self.txtShellFilePath_2.text()):
            mydb_path=self.txtShellFilePath_2.text()
            try:
                # connecting the db
                conn = sqlite3.connect(mydb_path)
                # creating a Cursor
                cur = conn.cursor()

                TablesList=['spatial_ref_sys','AnalysisArea','CensusBlocks','FatalityRate']
                TablesList.append('FatalityRate')
                TablesList.append('FloodSeverity')
                TablesList.append('InfrastrLines')
                TablesList.append('VulnType')
                TablesList.append('Vulnerability')
                TablesList.append('StructurePoly')

                for NomeTabella in TablesList:
                    sql="SELECT sql FROM sqlite_master WHERE type='table' AND name='%s';" % (NomeTabella)
                    cur.execute(sql)
                    Tabella=str(cur.fetchone()[0])

                res=bool('True')
            except:
                res=bool()
        else:
            res=bool()
        return res

    def CheckFloodSeverity(self):
        res=bool()
        FileGDB = str(self.txtShellFilePath_2.text())
        if FileGDB != "":
            if self.CheckGeodatabase():
                try:
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    fieldOrder='Num'
                    NomeTabella='FloodSeverity'
                    testoQuery=" SELECT * FROM %s ORDER BY %s;" %(NomeTabella,fieldOrder)
                    cursor.execute(testoQuery)
                    Lista = cursor.fetchall()
                    if len(Lista)>0:
                        res=bool('True')
                    else:
                        msg0='Geodatabse %s' % FileGDB
                        msg1=self.tr('error table FloodSeverity is empty')
                        msg='%s : %s' % (msg0,msg1)
                        QMessageBox.information(None, "FloodRisk", msg)

                except:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FloodSeverity')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)

            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))
        else:
            QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

        return res

    def CheckFatalityRate(self):
        res=bool()
        FileGDB = str(self.txtShellFilePath_2.text())
        if FileGDB != "":
            if self.CheckGeodatabase():
                try:
                    conn = sqlite3.connect(FileGDB)
                    cursor = conn.cursor()
                    fieldOrder='Num'
                    NomeTabella='FatalityRate'
                    testoQuery=" SELECT * FROM %s ORDER BY %s;" %(NomeTabella,fieldOrder)
                    cursor.execute(testoQuery)
                    Lista = cursor.fetchall()
                    if len(Lista)>0:
                        res=bool('True')
                    else:
                        msg0='Geodatabse %s' % FileGDB
                        msg1=self.tr('error table FatalityRate is empty')
                        msg='%s : %s' % (msg0,msg1)
                        QMessageBox.information(None, "FloodRisk", msg)

                except:
                    msg0='Geodatabse %s' % FileGDB
                    msg1=self.tr('error in table FatalityRate')
                    msg='%s : %s' % (msg0,msg1)
                    QMessageBox.information(None, "FloodRisk", msg)

            else:
                QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))
        else:
            QMessageBox.information(None, "FloodRisk", self.tr("You must first create the Geodb.Sqlite"))

        return res