class DataWork(QWidget, Ui_Form):
    def __init__(self):
        QWidget.__init__(self)
        self.setupUi(self)
        self.value = 0
        self.value2 = 0
        self.vector = self.VectorList()
        self.raster = self.RasterList()
        vect = len(self.vector)
        rast = len(self.raster)
        numrow = max(vect,rast)
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setRowCount(numrow)
        self.tableWidget.setEditTriggers(QTableWidget.NoEditTriggers)

        for i in range(rast):
            item = QTableWidgetItem(raster[i])
            item.setTextAlignment(Qt.AlignCenter)
            item.setCheckState(Qt.Unchecked)
            self.tableWidget.setItem(i, 0, item)
        for i in range(vect):
            item = QTableWidgetItem(vector[i])
            item.setTextAlignment(Qt.AlignCenter)
            item.setCheckState(Qt.Unchecked)
            self.tableWidget.setItem(i, 1, item)

        self.connect(self.update, SIGNAL("clicked()"),self.aggiorna)
        self.connect(self.getlisttoquery, SIGNAL("clicked()"),self.getrasterstate)
        self.connect(self.getlisttoquery, SIGNAL("clicked()"),self.getvectorstate)

    def setLonValue(self, value):
        self.value = value

    def setLatValue(self, value2):
        self.value2 = value2

    def aggiorna(self):
        newlon = str(self.value)
        newlat = str(self.value2)
        self.longitude.setText(newlon)
        self.latitude.setText(newlat)

    def getrasterstate(self):
        raster = self.raster
        rast = len(raster)
        rastertoquery = []
        valori = []
        newlon = str(self.value)
        newlat = str(self.value2)
        lonlat = str(newlon)+' '+str(newlat)
        coordsfile = apppath+'/lonlatfile'
        f = open(coordsfile, "w")
        f.write(lonlat)
        f.flush()
        f.close
        while 1:
            try:
                c = read_command('m.proj', input=coordsfile, flags='i')
                break
            except IOError:
                time.sleep(0.1) 
        lonlat = parse_key_val(c,'\t')
        lonlat = str(lonlat)
        lonlat = lonlat.replace('{','')
        lonlat = lonlat.replace('}','')
        lonlat = lonlat.replace("'",'')
        lonlat = lonlat.replace(':','')
        lonlat = lonlat.replace('|',' ')
        lonlat = lonlat.split(' ')
        lonlat = str(lonlat[0])+','+str(lonlat[1])
        htmlquery = []
        html = """<TABLE cellpadding="4" style="border: 1px solid \
        000000; border-collapse: collapse;" border="1"><TR><TD>Layer</TD>\
        <TD>Values</TD>"""
        htmlquery.append(html)
        for i in range(rast):
            cell = self.tableWidget.item(i, 0)
            if cell.checkState() == 2:
                while 1:
                    try:
                        s = read_command('r.what', input=cell.text(), east_north=lonlat) 
                        break
                    except IOError:
                        time.sleep(0.1)
                attr = str(s)
                attr = attr.replace("|",' ')
                attr = attr.replace('\n',' ')
                attr = attr.split(':')
                attr = str(attr)
                attr = attr.replace("'",'')
                attr = attr.replace('"','')
                attr = attr.replace('[','')
                attr = attr.replace(']','')
                results = str(cell.text())+'  : '+attr
                htmlvalue = '<TR><TD>%s</TD><TD>%s</TD>' % (cell.text() ,attr)
                htmlquery.append(htmlvalue)
                rastertoquery.append(results)
        htmlend = """</TR></TABLE>"""
        htmlquery.append(htmlend)
        rastertoquery = str(rastertoquery)
        rastertoquery = rastertoquery.replace("'",'')
        rastertoquery = rastertoquery.split(',')
        rastertoquery = str(rastertoquery)
        rastertoquery = rastertoquery.replace('[','')
        rastertoquery = rastertoquery.replace(']','')
        htmlquery = str(htmlquery)
        htmlquery = htmlquery.replace("', u'",'')
        htmlquery = htmlquery.replace("']",'')
        htmlquery = htmlquery.replace("['",'')
        htmlquery = htmlquery.replace("', '",'')
        self.QueryResultsRaster.setText(htmlquery)
        print rastertoquery

    def getvectorstate(self):
        vector = self.vector
        vect = len(vector)
        vectortoquery = []
        newlon = str(self.value)
        newlat = str(self.value2)
        lonlat = str(newlon)+' '+str(newlat)
        coordsfile = apppath+'/lonlatfile'
        f = open(coordsfile, "w")
        f.write(lonlat)
        f.flush()
        f.close
        while 1:
            try:
                c = read_command('m.proj', input=coordsfile, flags='i') 
                break
            except IOError:
                time.sleep(0.1)
        lonlat = parse_key_val(c,'\t')
        lonlat = str(lonlat)
        lonlat = lonlat.replace('{','')
        lonlat = lonlat.replace('}','')
        lonlat = lonlat.replace("'",'')
        lonlat = lonlat.replace(':','')
        lonlat = lonlat.replace('|',' ')
        lonlat = lonlat.split(' ')
        lonlat = str(lonlat[0])+','+str(lonlat[1])
        htmlquery = []
        html = """<TABLE cellpadding="4" style="border: 1px solid \
        000000; border-collapse: collapse;" border="1"><TR>\
        <TD>Layer</TD><TD>Values</TD>"""
        htmlquery.append(html)
        for i in range(vect):
            cell = self.tableWidget.item(i, 1)
            if cell.checkState() == 2:
                while 1:
                    try:
                        s = read_command('v.what', map=cell.text(), east_north=lonlat)
                        break
                    except IOError:
                        time.sleep(0.1)
                attr = parse_key_val(s,':')
                attr = str(attr)
                attr = attr.replace('{','')
                attr = attr.replace('}','')
                attr = attr.replace("'",'')
                attr = attr.replace(': None','')
                htmlvalue = '<TR><TD>%s</TD><TD>%s</TD>' % (cell.text() ,attr)
                htmlquery.append(htmlvalue)
                print attr
        htmlend = """</TR></TABLE>"""
        htmlquery.append(htmlend)
        htmlquery = str(htmlquery)
        htmlquery = htmlquery.replace("', u'",'')
        htmlquery = htmlquery.replace("']",'')
        htmlquery = htmlquery.replace("['",'')
        htmlquery = htmlquery.replace("', '",'')
        htmlquery = htmlquery.replace(",",'<BR>')
        self.QueryResultsVector.setText(str(htmlquery))



    def Vcopy(self):
        vector = self.vector
        vect = len(vector)
        for i in range(vect):
            cell = self.tableWidget.item(i, 1)
            if cell.checkState() == 2:
                while 1:
                    try:
                        s = read_command('g.copy', vect='%s,%s'  % (cell.text(),cell.text()))
                        break
                    except IOError:
                        time.sleep(0.1)
            print 'ok'
        

    def VectorList(self):
        global vector
        while 1:
            try:
                v = list_strings('vect')
                break
            except IOError:
                time.sleep(0.1)
        vector = []
        for i in v:
            vname , mname = i.split('@', 2)
            if mname == grassenv['MAPSET']:
                vector.append(vname)
        vector.sort()
        return vector

    def RasterList(self):
        global raster
        while 1:
            try:
                r = list_strings('rast')
                break
            except IOError:
                time.sleep(0.1)
        raster = []
        for i in r:
            rname , mname = i.split('@', 2)
            if mname == grassenv['MAPSET']:
                raster.append(rname)
        raster.sort()
        return raster
