class TableController(object): def __init__(self,tabHost,objectType,objectName,model): self.view=TableView(tabHost) self.model=model self.name=objectName self.type=objectType self._mapdata() self.wireUp() def _mapdata(self): assert self.model.isDBLoaded() self.datamodel=QSqlTableModel(self.view,self.model.db) self.datamodel.setTable(self.name) self.refresh() def wireUp(self): self.datamodel.setEditStrategy(QSqlTableModel.OnManualSubmit) self.view.ui.tableView.setModel(self.datamodel) self.view.ui.tableView.show() if self.type==self.model.ModelArea.TABLES: ##make widget read-write self.view.ui.tableView.setEditTriggers(QAbstractItemView.DoubleClicked | QAbstractItemView.SelectedClicked) self.datamodel.setEditStrategy(QSqlTableModel.OnRowChange) #TODO: track edits for safe saving def refresh(self): self.datamodel.select()
class IntervenantUI(TableUI): """Classe chargée de l'interface de gestion des intervenants""" def setupModel(self): u"""Définit et configure le modèle sous-jacent à la table""" self._modele = QSqlTableModel(self) self._modele.setTable("intervenant") self._modele.setHeaderData(1, Qt.Horizontal, "Nom") self._modele.setHeaderData(2, Qt.Horizontal, u"Téléphone") self._modele.setHeaderData(3, Qt.Horizontal, "Email") self._modele.setEditStrategy(QSqlTableModel.OnFieldChange) self._modele.select() self._ui.tv.setModel(self._modele) def msgValidationNouveau(self): u"""Message d'erreur quand on veut créer deux items de suite""" return u"Valider l'intervenant avant d'en recréer un nouveau" def titreErrSuppression(self): return u"Cliquer sur l'intervenant à supprimer" def msgErrSuppression(self): return u"""Veuiller cliquer sur un intervenant avant de cliquer sur \ supprimer""" def msgSuppression(self, index): return u"Êtes-vous sûr de vouloir supprimer l'intervenant " + index.sibling( index.row(), 1).data() + " ? " def preSupprVerification(self, index): u"""Vérification à effectuer avant d'autoriser à supprimer un item Renvoit False si la suppression est interdite """ sql = """ SELECT COUNT(*) FROM absence WHERE id_intervenant=""" + str(index.sibling(index.row(), 0).data()) req = QSqlQuery() if req.exec_(sql): req.next() nbAbsences = req.record().value(0) if nbAbsences != 0: pl = "" if nbAbsences != 1: pl = "s" QMessageBox.critical( self, "Impossible de suppprimer", u"L'intervenant a encore " + str(nbAbsences) + u" absence" + pl + u" enregistrée" + pl + "<br />" + u"Il faut les supprimer avant") # TODO trouver un moyen de setter l'onglet de l'application # self._ui.tabWidget.setCurrentIndex(1) return False # TODO gérer le else, au moins logger quelque chose return True
class IntervenantUI(TableUI): """Classe chargée de l'interface de gestion des intervenants""" def setupModel(self): u"""Définit et configure le modèle sous-jacent à la table""" self._modele = QSqlTableModel(self) self._modele.setTable("intervenant") self._modele.setHeaderData(1, Qt.Horizontal, "Nom") self._modele.setHeaderData(2, Qt.Horizontal, u"Téléphone") self._modele.setHeaderData(3, Qt.Horizontal, "Email") self._modele.setEditStrategy(QSqlTableModel.OnFieldChange) self._modele.select() self._ui.tv.setModel(self._modele) def msgValidationNouveau(self): u"""Message d'erreur quand on veut créer deux items de suite""" return u"Valider l'intervenant avant d'en recréer un nouveau" def titreErrSuppression(self): return u"Cliquer sur l'intervenant à supprimer" def msgErrSuppression(self): return u"""Veuiller cliquer sur un intervenant avant de cliquer sur \ supprimer""" def msgSuppression(self, index): return u"Êtes-vous sûr de vouloir supprimer l'intervenant " + index.sibling(index.row(), 1).data() + " ? " def preSupprVerification(self, index): u"""Vérification à effectuer avant d'autoriser à supprimer un item Renvoit False si la suppression est interdite """ sql = """ SELECT COUNT(*) FROM absence WHERE id_intervenant=""" + str(index.sibling(index.row(), 0).data()) req = QSqlQuery() if req.exec_(sql): req.next() nbAbsences = req.record().value(0) if nbAbsences != 0: pl = "" if nbAbsences != 1: pl = "s" QMessageBox.critical(self, "Impossible de suppprimer", u"L'intervenant a encore " + str(nbAbsences) + u" absence" + pl + u" enregistrée" + pl + "<br />" + u"Il faut les supprimer avant") # TODO trouver un moyen de setter l'onglet de l'application # self._ui.tabWidget.setCurrentIndex(1) return False # TODO gérer le else, au moins logger quelque chose return True
def InitTable(self): """Funzione che accede al database ed imposta il data model""" db = QSqlDatabase.addDatabase("QSQLITE") db.setDatabaseName(self.myWidget.txtPercorso.text()) db.open() model = QSqlTableModel() model.setTable("contatti") model.setEditStrategy(QSqlTableModel.OnManualSubmit) model.select() model.setHeaderData(0, QtCore.Qt.Horizontal, "Nome") model.setHeaderData(1, QtCore.Qt.Horizontal, "Cognome") model.setHeaderData(2, QtCore.Qt.Horizontal, "Telefono") self.tableModel = model self.myWidget.lstRubrica.setModel(model)