FenetreEditionPartie.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. '''
  2. Fenetre de creation / edition de partie
  3. '''
  4. from PyQt4.QtCore import SIGNAL, QString, QVariant
  5. from PyQt4.QtGui import QDialog, QFrame
  6. from lib.Partie import Partie, Chapitre
  7. from ui.ecran_editionPartie import Ui_ept_fenetre
  8. from ui.ecran_panneauCh import Ui_ch_panneau
  9. class FenetreEditionPartie(QDialog):
  10. def __init__(self):
  11. super(FenetreEditionPartie, self).__init__()
  12. self.createWidgets()
  13. def createWidgets(self):
  14. """construction de l'interface"""
  15. self.ui = Ui_ept_fenetre()
  16. self.ui.setupUi(self)
  17. self.ui.ept_ch_liste.masquerColonneId()
  18. self.connect(self.ui.ept_enregistrer, SIGNAL("clicked()"), self.enregistrer)
  19. self.connect(self.ui.ept_annuler, SIGNAL("clicked()"), self.annuler)
  20. self.connect(self.ui.ept_nom, SIGNAL("textEdited(QString)"), self.majAffichage)
  21. self.connect(self.ui.ept_ch_nouveau, SIGNAL("clicked()"), self.nouveauChapitre)
  22. self.connect(self.ui.ept_ch_liste, SIGNAL("itemClicked()"), self.afficherChapitre)
  23. def nouvelle(self):
  24. self._p = Partie()
  25. self.chargerChapitres()
  26. def charger(self, partie):
  27. self._p = partie
  28. self.ui.ept_nom.majTexte(self._p.nom() )
  29. self.chargerChapitres()
  30. self.ui.ept_ch_choix.allerA( self._p.chapitreEnCours() )
  31. self.majAffichage()
  32. def majAffichage(self):
  33. self.ui.ept_enregistrer.setEnabled( (len(self.ui.ept_nom.texte()) > 0) )
  34. def resultat(self):
  35. self._p.majNom( self.ui.ept_nom.texte() )
  36. self._p.majChapitres( self.chapitres() )
  37. self._p.majChapitreEnCours( self.ui.ept_ch_choix.valeurActuelle().toInt()[0] )
  38. return self._p
  39. def enregistrer(self):
  40. self.done(1)
  41. def annuler(self):
  42. self.done(0)
  43. ####### chapitres
  44. def ajouterChapitre(self, numCh):
  45. """ajoute un chapitre a la table et a la pile"""
  46. # txt = "Ch. {} - {}".format(numCh, self._p.chapitres()[numCh].nom) if len(self._p.chapitres()[numCh].nom) > 0 else "Chapitre {}".format(numCh)
  47. txt = self._p.chapitres()[numCh].nomLong()
  48. #table
  49. l = self.ui.ept_ch_liste.nouvelleLigneFin()
  50. self.ui.ept_ch_liste.majTexte(l, 0, "%02d" % numCh)
  51. self.ui.ept_ch_liste.majTexte(l, 1, txt)
  52. #panneau
  53. panneau = PanneauChapitre()
  54. panneau.charger( self._p.chapitres()[numCh] )
  55. self.connect(panneau, SIGNAL("chNomModifie(int, QString)"), self.majNomListe)
  56. self.ui.ept_ch_panneaux.addWidget(panneau)
  57. #liste deroulante
  58. self.ui.ept_ch_choix.addItem(txt, QVariant(numCh) )
  59. def chargerChapitres(self):
  60. """chargement des chapitres a l'ouverture"""
  61. for numCh in self._p.chapitres():
  62. self.ajouterChapitre(numCh)
  63. if len(self._p.chapitres()) >= 9: self.ui.ept_ch_nouveau.setEnabled(False)
  64. self.afficherChapitre( self._p.chapitreEnCours() )
  65. def nouveauChapitre(self):
  66. numero = max( [key for key in self._p.chapitres().keys()] ) + 1
  67. self._p.chapitres()[numero] = Chapitre(numero)
  68. self.ajouterChapitre(numero)
  69. self.afficherChapitre()
  70. def afficherChapitre(self, numCh = None):
  71. """affiche le chapitre demande. si pas de numero, affiche le dernier chapite"""
  72. if numCh == None:
  73. numCh = max( self._p.chapitres().keys() )
  74. l = self.ui.ept_ch_liste.chercherLigne(0, "%02d" % numCh)
  75. if l != None:
  76. self.ui.ept_ch_liste.setCurrentCell(l, 0)
  77. self.ui.ept_ch_liste.setCurrentCell(l, 1)
  78. self.ui.ept_ch_panneaux.setCurrentIndex(l)
  79. def majNomListe(self, numCh, nom):
  80. """met a jour le noms du chapitre dans la liste"""
  81. nom = str(nom)
  82. l = self.ui.ept_ch_liste.chercherLigne(0, "%02d" % numCh)
  83. if l != None:
  84. txt = "Ch. {} - {}".format(numCh, nom) if len(nom) > 0 else "Chapitre {}".format(numCh)
  85. self.ui.ept_ch_liste.majTexte(l, 1, txt)
  86. index = self.ui.ept_ch_choix.findData(QVariant(numCh))
  87. self.ui.ept_ch_choix.setItemText( index, QString().fromUtf8( txt ) )
  88. def chapitres(self):
  89. dico = {}
  90. for i in range( 0, len(self.ui.ept_ch_panneaux) ):
  91. ch = self.ui.ept_ch_panneaux.widget(i).chapitre()
  92. dico[ch.num] = ch
  93. return dico
  94. class PanneauChapitre(QFrame):
  95. def __init__(self, parent=None):
  96. super (PanneauChapitre, self).__init__(parent)
  97. self.createWidgets()
  98. self._ch = None
  99. def createWidgets(self):
  100. """construction de l'interface"""
  101. self.ui = Ui_ch_panneau()
  102. self.ui.setupUi(self)
  103. self.connect(self.ui.ch_nom, SIGNAL("editingFinished()"), self.nomModifie)
  104. def charger(self, chapitre):
  105. self._ch = chapitre
  106. self.ui.ch_num.majTexte( "Chapitre {}".format(self._ch.num) )
  107. self.ui.ch_nom.majTexte( self._ch.nom )
  108. self.ui.ch_presentation.majTexte( self._ch.presentation )
  109. # self.ui.ch_public.setChecked( self._ch.public )
  110. def chapitre(self):
  111. self._ch.nom = self.ui.ch_nom.texte()
  112. self._ch.presentation = self.ui.ch_presentation.texte()
  113. return self._ch
  114. def nomModifie(self):
  115. nom = QString().fromUtf8( self.ui.ch_nom.texte() )
  116. self.emit(SIGNAL("chNomModifie(int, QString)"), self._ch.num, nom)