FenetreEditionPartie.py 5.6 KB

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