Exemplo n.º 1
0
 def allChildren(index: QtCore.QModelIndex):
     result = [index]
     for row, column in product(
             range(index.model().rowCount(index)),
             range(index.model().columnCount(index)),
     ):
         result.extend(TreeModel.allChildren(index.child(row, column)))
     return result
 def sort_table(self, index):
     """
     sortira listu
     :param: index - oznacava po kojoj koloni/atributu se sortira
     """
     index = self.table.horizontalHeader().sortIndicatorSection() # dobavljamo vrednost selektovanog headera
     nacin_sortiranja = self.table.horizontalHeader().sortIndicatorOrder() # dobavljamo koja vrednost sortiranja je oznacena
     self.table.sortByColumn(index, nacin_sortiranja)
     self.sortirano = True
     if nacin_sortiranja == Qt.AscendingOrder: # ako je prema vecem
         self.table.model().sort_list(index, False)
     else:                                   # ako nije prema vecem nego prema manjem
         self.table.model().sort_list(index, True)
         
     top = QModelIndex() 
     top.child(0,0)
     bottom = QModelIndex()
     bottom.child(len(self.table.model().lista_prikaz), self.table.model().broj_kolona)
     self.table.dataChanged(top, bottom) # da refresuje tabelu od top indexa to bottom indexa
Exemplo n.º 3
0
 def _uncheck_descendants(self, index: QtCore.QModelIndex) -> None:
     "Mark all descendants of index as unchecked"
     queue = [
         index.child(i, index.column()) for i in range(self.rowCount(index))
     ]
     while queue:
         item = queue.pop()
         self._set_check_state(item, QtCore.Qt.Unchecked)
         queue.extend(
             item.child(i, index.column())
             for i in range(self.rowCount(item)))
Exemplo n.º 4
0
 def sacuvaj_podatke(self):
     if os.path.exists(self.privremena_datoteka):
         if self.tip_datoteke == "sekvencijalna":
             top = QModelIndex()
             top.child(0,0)
             self.parent().table.model().beginRemoveRows(top, 0, 0)
             if sastavi_sekvencijalnu(self):
                 if os.path.exists(self.privremena_datoteka):
                     os.remove(self.privremena_datoteka)
                 else:
                     poruka = QtWidgets.QMessageBox()
                     icon = QtGui.QIcon("src/ikonice/logo.jpg")
                     poruka.setWindowIcon(icon)
                     poruka.setWindowTitle("Upozorenje!")
                     poruka.setText("Privremena datoteka ne postoji!")
                     poruka.exec_()
                     
             self.parent().table.model().endRemoveRows()
             
             self.parent().table.model().beginInsertRows(QModelIndex(), 0, 0)
             top = QModelIndex()
             top.child(0,0)
             bottom = QModelIndex()
             bottom.child(len(self.parent().table.model().lista_prikaz), self.parent().table.model().broj_kolona)
             self.parent().table.dataChanged(top, bottom) 
             self.parent().table.model().endInsertRows()
Exemplo n.º 5
0
    def index(self,
              row: int,
              column: int,
              parent: QModelIndex = None,
              *args,
              **kwargs):
        if not self.hasIndex(row, column, parent):
            return QModelIndex()

        parent = parent.internalPointer() if parent.isValid() else self.root
        child = parent.child(row)
        if child:
            return self.createIndex(row, column, child)
        else:
            return QModelIndex()
Exemplo n.º 6
0
    def dugme_kliknuto(self):
        try:
            for i in range(len(self.lista_atributa)):
                vrijednost = self.__getattribute__(self.lista_atributa[i]).text()
           
                if self.tip_datoteke == "sekvencijalna":
                    brojac =0
                    if self.broj_kljuceva != ['']:
                        for o in range(len(self.broj_kljuceva)):
                            if self.broj_kljuceva != ['']:
                                
                                for k in range(int(self.broj_kljuceva[o])):
                                    self.ucitaj_kljuceve(self.putanja_kljucevi + self.roditelji[o],int(self.pozicije_u_datoteci[brojac]))
                                    vrijed = self.__getattribute__(self.lista_atributa[int(self.pozicije_u_formi[brojac])]).text()
                                    brojac +=1
                                
                                    if self.poredjenje(self.primarni_kljucevi,vrijed) == False:         
                                        poruka = QtWidgets.QMessageBox()
                                        icon = QtGui.QIcon("src/ikonice/logo.jpg")
                                        poruka.setWindowIcon(icon)
                                        poruka.setWindowTitle("Upozorenje!")
                                        poruka.setText(" Jedno polje sadrzi kljuc koji ne postoji u roditeljskoj klasi! Pokusajte ponovo!")
                                        poruka.exec_()
                                        return
                                    else:
                                        continue
                                        
                                    
                    

                if self.tip == 2:
                    if len(vrijednost.strip()) == 0:
                        continue

                if len(vrijednost) <= int(self.lista_duzine_atributa[i]):
                    if bool(self.lista_obaveznosti_atributa[i]) == True and self.tip != 2:
                        if vrijednost == "":
                            poruka = QtWidgets.QMessageBox()
                            icon = QtGui.QIcon("src/ikonice/logo.jpg")
                            poruka.setWindowIcon(icon)
                            poruka.setWindowTitle("Upozorenje!")
                            poruka.setText(str(self.lista_atributa[i]).capitalize()+" polje ne sme biti prazno! Pokusajte ponovo!")
                            poruka.exec_()
                            return
                    
                    try:
                        if isinstance(locate(self.lista_tipovi_atributa[i])(vrijednost), locate(self.lista_tipovi_atributa[i])) == False:
                            poruka = QtWidgets.QMessageBox()
                            icon = QtGui.QIcon("src/ikonice/logo.jpg")
                            poruka.setWindowIcon(icon)
                            poruka.setWindowTitle("Upozorenje!")
                            poruka.setText(str(self.lista_atributa[i]).capitalize()+" polje pogresna vrednost! Pokusajte ponovo!")
                            poruka.exec_()
                            return
                    except ValueError:
                        poruka = QtWidgets.QMessageBox()
                        icon = QtGui.QIcon("src/ikonice/logo.jpg")
                        poruka.setWindowIcon(icon)
                        poruka.setWindowTitle("Upozorenje!")
                        poruka.setText(str(self.lista_atributa[i]).capitalize()+" polje pogresna vrednost! Pokusajte ponovo!")
                        poruka.exec_()
                        return

                    self.element.__setattr__(self.lista_atributa[i], vrijednost)
                    self.lista_atr.append(self.lista_atributa[i])
                    self.lista_kriterijuma.append(vrijednost)
                    if self.tip == 2:
                        self.lista_vece_manje.append(self.__getattribute__(self.lista_atributa[i]+"_vece_manje").currentIndex())
                else:
                    poruka = QtWidgets.QMessageBox()
                    icon = QtGui.QIcon("src/ikonice/logo.jpg")
                    poruka.setWindowIcon(icon)
                    poruka.setWindowTitle("Upozorenje!")
                    poruka.setText(str(self.lista_atributa[i]).capitalize() + ". Prekoracili ste duzinu karaktera!")
                    poruka.exec_()
                    return
            
            if self.tip == 1:
                if not self.parent().is_baza:
                    with open(self.putanja_podaci, 'r',newline='') as csvfile:
                        spamreader = csv.reader(csvfile, delimiter = "\n")
                        counter = 0
                        prva_linija = True
                        lista = []
                        for row in spamreader:
                            if prva_linija:
                                prva_linija = False
                                continue
                            if row[0] == "":
                                break
                            
                            objekat = GenerickaKlasa(self.lista_atributa, row[0].split(","))
                            nadjen = True
                            
                            self.parent().table.model().lista_prikaz = []
                            for i in range(len(self.lista_atributa)):
                                if objekat.__getattribute__(self.lista_atributa[i]) !=  self.original_elem.__getattribute__(self.lista_atributa[i]):
                                    nadjen = False
                            if not nadjen:
                                lista.append(objekat)
                            else:
                                for i in range(len(self.lista_atributa)):
                                    objekat.__setattr__(self.lista_atributa[i], self.element.__getattribute__(self.lista_atributa[i]))

                                lista.append(objekat)
                                
                            counter += 1
                        
                        self.parent().table.model().lista_prikaz = lista

                    with open(self.putanja_podaci, 'w', newline='') as f:
                        writer = csv.writer(f, delimiter = ",")
                        writer.writerow([self.parent().putanja_meta])
                        for i in range(len(self.parent().table.model().lista_prikaz)):
                            tekst = ""
                            for j in range(len(self.lista_atributa)):
                                tekst += str(self.parent().table.model().lista_prikaz[i].__getattribute__(self.lista_atributa[j]))
                                if j < len(self.lista_atributa)-1:
                                    tekst += ","
                                
                            novi_red = tekst.split(",")
                            writer.writerow(novi_red)
                else:
                    parent = self.parent().pocetna_strana
                    
                    query = "UPDATE " + self.parent().naziv + " SET "
                    block = False
                    for i in range(len(self.lista_atributa)):
                        block = False
                        if self.blocked:
                            for j in self.lista_kljuceva:
                                if self.lista_atributa[i] == j:
                                    block = True
                                    break
                        if block:
                            continue
                        query += self.lista_atributa[i] + "="
                        if self.lista_tipovi_atributa[i] == "str":
                            query += "'"
                        query += self.element.__getattribute__(self.lista_atributa[i])
                        if self.lista_tipovi_atributa[i] == "str":
                            query += "'"

                        if i < len(self.lista_atributa) - 1:
                            query += " , "
                            
                    if len(self.lista_atributa) == len(self.lista_kljuceva) and self.blocked:
                        return
                        
                    query += " WHERE "
                    for i in range(len(self.lista_kljuceva)):
                        query += self.lista_kljuceva[i] + "="
                        if self.lista_tipovi_atributa[i] == "str":
                            query += "'"

                        query += self.original_elem.__getattribute__(self.lista_kljuceva[i])
                        if self.lista_tipovi_atributa[i] == "str":
                            query += "'"

                        if i < len(self.lista_kljuceva) - 1:
                            query += " AND "
                    try:
                        parent.csor.execute(query)
                    except mysql.connector.errors.IntegrityError as e:
                        poruka = QtWidgets.QMessageBox()
                        icon = QtGui.QIcon("src/ikonice/logo.jpg")
                        poruka.setWindowIcon(icon)
                        poruka.setWindowTitle("Upozorenje!")
                        poruka.setText("Vec postoji element sa zadatim kljucem!\n"+e.msg)
                        poruka.exec_()

                    parent.connection.commit()

                    query = "SELECT * FROM " + self.parent().naziv
                    parent.csor.execute(query)
                    
                    self.parent().table.model().lista_prikaz = []
                    for result in parent.csor.fetchall():
                        lista_podataka = []
                        for i in result:
                            lista_podataka.append(str(i))
                            
                        self.parent().table.model().lista_prikaz.append(GenerickaKlasa(self.lista_atributa, lista_podataka))

                top = QModelIndex()
                top.child(0,0)
                bottom = QModelIndex()
                bottom.child(len(self.parent().table.model().lista_prikaz), self.parent().table.model().broj_kolona)
                self.parent().table.dataChanged(top, bottom) 

            elif self.tip == 0:
                if self.tip_datoteke == "sql":
                    parent = self.parent().pocetna_strana
                  
                    query = "INSERT INTO " + self.parent().naziv +" (" 
                    brojac =0
                    for i in range(len(self.lista_atributa)):
                        query += self.lista_atributa[i]
                        if brojac < len(self.lista_atributa)-1:
                            query += ", "
                        brojac += 1
                    query += ") " + "VALUES ("
                    brojac2=0
                    for i in range(len(self.lista_atributa)):
                        if self.lista_tipovi_atributa[i] == "str":
                            query += "'"+self.__getattribute__(self.lista_atributa[i]).text()+"'"
                        else:
                            query += self.__getattribute__(self.lista_atributa[i]).text()
                        if brojac2 < len(self.lista_atributa)-1:
                            query += ", "
                        brojac2 += 1
                    query += ")"
                    
                    provjeri = True
                    try:
                        parent.csor.execute(query)
                    except mysql.connector.errors.IntegrityError as e:
                        poruka = QtWidgets.QMessageBox()
                        provjeri=False
                        icon = QtGui.QIcon("src/ikonice/logo.jpg")
                        poruka.setWindowIcon(icon)
                        poruka.setWindowTitle("Upozorenje!")
                        poruka.setText("Vec postoji element sa zadatim kljucem!\n"+e.msg)
                        poruka.exec_()
                   
                    except mysql.connector.errors.DataError as e:
                        poruka = QtWidgets.QMessageBox()
                        provjeri=False
                        icon = QtGui.QIcon("src/ikonice/logo.jpg")
                        poruka.setWindowIcon(icon)
                        poruka.setWindowTitle("Upozorenje!")
                        poruka.setText("Uneli ste pogresnu vrednost!\n"+e.msg)
                        poruka.exec_()


                    parent.connection.commit()
                    query = "SELECT * FROM " + self.parent().naziv
                    parent.csor.execute(query)
                    self.parent().table.model().lista_prikaz = []
                    for result in parent.csor.fetchall():
                        lista_podataka = []
                        for i in result:
                            lista_podataka.append(str(i))
                            
                        self.parent().table.model().lista_prikaz.append(GenerickaKlasa(self.lista_atributa, lista_podataka))
               
                    top = QModelIndex()
                    top.child(0,0)
                    bottom = QModelIndex()
                    bottom.child(len(self.parent().table.model().lista_prikaz), self.parent().table.model().broj_kolona)
                    self.parent().table.dataChanged(top, bottom)
                    if provjeri:
                        self.parent().table.model().beginInsertRows(QModelIndex(), 0, 0)
                        model = self.parent().table.model()
                        model.lista_prikaz.append(self.element)
                        self.parent().table.setModel(model)
                        self.parent().table.model().endInsertRows()

                    
                if self.tip_datoteke == "serijska":
                    dodaj_u_serijsku(self.element, self.lista_atributa, self.putanja_podaci, self.parent().putanja)
                    self.parent().table.model().beginInsertRows(QModelIndex(), 0, 0)
                    model = self.parent().table.model()
                    model.lista_prikaz.append(self.element)
                    self.parent().table.setModel(model)
                    self.parent().table.model().endInsertRows()

                elif self.tip_datoteke == "sekvencijalna":
                    dodaj_u_serijsku(self.element, self.lista_atributa, self.privremena_datoteka, self.parent().putanja)
                
                top = QModelIndex()
                top.child(0,0)
                bottom = QModelIndex()
                bottom.child(len(self.parent().table.model().lista_prikaz), self.parent().table.model().broj_kolona)
                self.parent().table.dataChanged(top, bottom) 
                
            elif self.tip == 2:
                self.close()
            
        except ValueError:
            poruka = QtWidgets.QMessageBox()
            icon = QtGui.QIcon("src/ikonice/logo.jpg")
            poruka.setWindowIcon(icon)
            poruka.setWindowTitle("Upozorenje!")
            poruka.setText("Pogresna vrednost!")
            poruka.exec_()
            return    
            
Exemplo n.º 7
0
def _iter_children(idx: QModelIndex):
    for i in range(idx.model().rowCount(idx)):
        yield idx.child(i, 0)
Exemplo n.º 8
0
    def ukloni_iz_tabele(self):
        if self.central_widget.currentWidget() == None:
            poruka = QMessageBox()
            icon = QtGui.QIcon("src/ikonice/logo.jpg")
            poruka.setWindowIcon(icon)
            poruka.setWindowTitle("Upozorenje!")
            poruka.setText("Trenutno nijedna datoteka nije otvorena!")
            poruka.exec_()
            return
        
        elif not hasattr(self.central_widget.currentWidget().table, "selected_elem"):
            poruka = QMessageBox()
            icon = QtGui.QIcon("src/ikonice/logo.jpg")
            poruka.setWindowIcon(icon)
            poruka.setWindowTitle("Upozorenje")
            poruka.setText("Trenutno nijedan element nije selektovan!")
            poruka.exec_()
            return
        ime_datoteke = self.central_widget.currentWidget().meta_podaci[0]    
        tip_datoteke = self.central_widget.currentWidget().meta_podaci[1]  
        model = self.central_widget.currentWidget().table.model()
        element_selected = model.get_element(self.central_widget.currentWidget().table.selected_elem)
        putanja = self.central_widget.currentWidget().meta_podaci[4]
        lista_kljuceva = self.central_widget.currentWidget().meta_podaci[11].split(",")
        lista_atributa = self.central_widget.currentWidget().meta_podaci[5].split(",")
        lista_tip_atributa = self.central_widget.currentWidget().meta_podaci[6].split(",")
        veze = []
        veze = self.central_widget.currentWidget().meta_podaci[9].split(",")
        
        #DELETE FROM plan_studijske_grupe WHERE STU_VU_OZNAKA='IR' AND SP_OZNAKA='IT' AND SPB_BLOK=2 AND SPB_POZICIJA=2;
        if tip_datoteke == "sql":
            query= " DELETE FROM " + ime_datoteke + " WHERE "
            brojac = 0 
            for i in range(len(lista_kljuceva)):
                if brojac == 0:
                    query+= lista_kljuceva[i] + "="
                else:
                    query += " AND " + lista_kljuceva[i] + "="
                if lista_tip_atributa[i] == "str":
                    query += "'" + element_selected.__getattribute__(lista_atributa[i]) +"'"
                else:
                    query += element_selected.__getattribute__(lista_atributa[i])
                brojac +=1
            query += ";"

            try:
                self.csor.execute(query)
            except mysql.connector.errors.IntegrityError as e:
                poruka = QtWidgets.QMessageBox() 
                
                icon = QtGui.QIcon("src/ikonice/logo.jpg")
                poruka.setWindowIcon(icon)
                poruka.setWindowTitle("Upozorenje!")
                poruka.setText("Ne mozete izbrisati ovaj element!\n"+e.msg)
                poruka.exec_()
                return

            self.connection.commit()
            query = "SELECT * FROM " + ime_datoteke
            self.csor.execute(query)
            self.central_widget.currentWidget().table.model().lista_prikaz = []
            for result in self.csor.fetchall():
                lista_podataka = []
                for i in result:
                    lista_podataka.append(str(i))
                    
                self.central_widget.currentWidget().table.model().lista_prikaz.append(GenerickaKlasa(lista_atributa, lista_podataka))

        top = QModelIndex()
        top.child(0,0)
        self.central_widget.currentWidget().table.model().beginRemoveRows(top, 0, 0) 
        for i in range(len(veze)): #provjaravamo da li ima djecu, ako ima ne smije se obrisati
            if hasattr(self.central_widget.currentWidget(), "sub_table"+str(i+1)):
                if len(self.central_widget.currentWidget().__getattribute__("sub_table"+str(i+1)).model.lista_prikaz) != 0:
                    poruka = QMessageBox()
                    icon = QtGui.QIcon("src/ikonice/logo.jpg")
                    poruka.setWindowIcon(icon)
                    poruka.setWindowTitle("Upozorenje!")
                    poruka.setText("Selektovani element ne sme da se obrise zato sto se njegovi podaci koriste u podtabelama, njegovoj deci!")
                    poruka.exec_()
                    return
               
        self.central_widget.currentWidget().table.model().lista_prikaz = []
        if tip_datoteke != "sql":
            
            with open(putanja, 'r',newline='') as csvfile:
                spamreader = csv.reader(csvfile, delimiter = "\n")
                counter = 0
                prva_linija = True
                izbrisan = False
                for row in spamreader:
                    if prva_linija:
                        prva_linija = False
                        continue
                    
                    if len(row) == 0:
                        break
                    
                    objekat = GenerickaKlasa(lista_atributa, row[0].split(","))
                    nadjen = True
                    for i in range(len(lista_kljuceva)):
                        if objekat.__getattribute__(lista_kljuceva[i]) != element_selected.__getattribute__(lista_kljuceva[i]):
                            nadjen = False
                
                    if not izbrisan and nadjen:
                        izbrisan = True
                        self.central_widget.currentWidget().table.model().removeRow(counter) #uklanjamo red iz tabele
                    else:
                        self.central_widget.currentWidget().table.model().lista_prikaz.append(objekat)
                    counter += 1
            
            
            
            with open(putanja, 'w', newline='') as f:
                writer = csv.writer(f, delimiter = ",")
                writer.writerow([self.central_widget.currentWidget().putanja_meta])
                for i in range(len(self.central_widget.currentWidget().table.model().lista_prikaz)):
                    tekst = ""
                    for j in range(len(lista_atributa)):
                        tekst += str(self.central_widget.currentWidget().table.model().lista_prikaz[i].__getattribute__(lista_atributa[j]))
                        if j < len(lista_atributa)-1:
                            tekst += ","
                            
                    novi_red = tekst.split(",")
                    writer.writerow(novi_red)
        else:
            query = "SELECT * FROM " + ime_datoteke
            self.csor.execute(query)

            for result in self.csor.fetchall():
                lista_podataka = []
                for i in result:
                    lista_podataka.append(str(i))
                    
                self.central_widget.currentWidget().table.model().lista_prikaz.append(GenerickaKlasa(lista_atributa, lista_podataka))

        self.central_widget.currentWidget().table.model().endRemoveRows()