''' Fenetre de creation / edition de partie ''' from PyQt4.QtCore import SIGNAL, QString, QVariant from PyQt4.QtGui import QDialog, QFrame from lib.Partie import Partie, Chapitre from ui.ecran_editionPartie import Ui_ept_fenetre from ui.ecran_panneauCh import Ui_ch_panneau class FenetreEditionPartie(QDialog): def __init__(self): super(FenetreEditionPartie, self).__init__() self.createWidgets() def createWidgets(self): """construction de l'interface""" self.ui = Ui_ept_fenetre() self.ui.setupUi(self) self.ui.ept_ch_liste.masquerColonneId() self.connect(self.ui.ept_enregistrer, SIGNAL("clicked()"), self.enregistrer) self.connect(self.ui.ept_annuler, SIGNAL("clicked()"), self.annuler) self.connect(self.ui.ept_nom, SIGNAL("textEdited(QString)"), self.majAffichage) self.connect(self.ui.ept_ch_nouveau, SIGNAL("clicked()"), self.nouveauChapitre) self.connect(self.ui.ept_ch_liste, SIGNAL("itemClicked()"), self.afficherChapitre) def nouvelle(self): self._p = Partie() self._p.creer() self.chargerChapitres() def charger(self, partie): self._p = partie self.ui.ept_nom.majTexte(self._p.nom() ) self.chargerChapitres() self.ui.ept_ch_choix.allerA( self._p.chapitreEnCours() ) self.majAffichage() def majAffichage(self): self.ui.ept_enregistrer.setEnabled( (len(self.ui.ept_nom.texte()) > 0) ) def resultat(self): self._p.majNom( self.ui.ept_nom.texte() ) self._p.majChapitres( self.chapitres() ) self._p.majChapitreEnCours( self.ui.ept_ch_choix.valeurActuelle().toInt()[0] ) return self._p def enregistrer(self): self.done(1) def annuler(self): self.done(0) ####### chapitres def ajouterChapitre(self, numCh): """ajoute un chapitre a la table et a la pile""" # txt = "Ch. {} - {}".format(numCh, self._p.chapitres()[numCh].nom) if len(self._p.chapitres()[numCh].nom) > 0 else "Chapitre {}".format(numCh) txt = self._p.chapitres()[numCh].nomLong() #table l = self.ui.ept_ch_liste.nouvelleLigneFin() self.ui.ept_ch_liste.majTexte(l, 0, "%02d" % numCh) self.ui.ept_ch_liste.majTexte(l, 1, txt) #panneau panneau = PanneauChapitre() panneau.charger( self._p.chapitres()[numCh] ) self.connect(panneau, SIGNAL("chNomModifie(int, QString)"), self.majNomListe) self.ui.ept_ch_panneaux.addWidget(panneau) #liste deroulante self.ui.ept_ch_choix.addItem(txt, QVariant(numCh) ) def chargerChapitres(self): """chargement des chapitres a l'ouverture""" for numCh in self._p.chapitres(): self.ajouterChapitre(numCh) if len(self._p.chapitres()) >= 9: self.ui.ept_ch_nouveau.setEnabled(False) self.afficherChapitre( self._p.chapitreEnCours() ) def nouveauChapitre(self): numero = max( [key for key in self._p.chapitres().keys()] ) + 1 self._p.chapitres()[numero] = Chapitre(numero) self.ajouterChapitre(numero) self.afficherChapitre() def afficherChapitre(self, numCh = None): """affiche le chapitre demande. si pas de numero, affiche le dernier chapite""" if numCh == None: numCh = max( self._p.chapitres().keys() ) l = self.ui.ept_ch_liste.chercherLigne(0, "%02d" % numCh) if l != None: self.ui.ept_ch_liste.setCurrentCell(l, 0) self.ui.ept_ch_liste.setCurrentCell(l, 1) self.ui.ept_ch_panneaux.setCurrentIndex(l) def majNomListe(self, numCh, nom): """met a jour le noms du chapitre dans la liste""" nom = str(nom) l = self.ui.ept_ch_liste.chercherLigne(0, "%02d" % numCh) if l != None: txt = "Ch. {} - {}".format(numCh, nom) if len(nom) > 0 else "Chapitre {}".format(numCh) self.ui.ept_ch_liste.majTexte(l, 1, txt) index = self.ui.ept_ch_choix.findData(QVariant(numCh)) self.ui.ept_ch_choix.setItemText( index, QString().fromUtf8( txt ) ) def chapitres(self): dico = {} for i in range( 0, len(self.ui.ept_ch_panneaux) ): ch = self.ui.ept_ch_panneaux.widget(i).chapitre() dico[ch.num] = ch return dico class PanneauChapitre(QFrame): def __init__(self, parent=None): super (PanneauChapitre, self).__init__(parent) self.createWidgets() self._ch = None def createWidgets(self): """construction de l'interface""" self.ui = Ui_ch_panneau() self.ui.setupUi(self) self.connect(self.ui.ch_nom, SIGNAL("editingFinished()"), self.nomModifie) def charger(self, chapitre): self._ch = chapitre self.ui.ch_num.majTexte( "Chapitre {}".format(self._ch.num) ) self.ui.ch_nom.majTexte( self._ch.nom ) self.ui.ch_presentation.majTexte( self._ch.presentation ) # self.ui.ch_public.setChecked( self._ch.public ) def chapitre(self): self._ch.nom = self.ui.ch_nom.texte() self._ch.presentation = self.ui.ch_presentation.texte() return self._ch def nomModifie(self): nom = QString().fromUtf8( self.ui.ch_nom.texte() ) self.emit(SIGNAL("chNomModifie(int, QString)"), self._ch.num, nom)