EcranEditionMateriel.py 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602
  1. #from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. from __future__ import division
  4. import sys
  5. from PyQt4.QtCore import SIGNAL, Qt, QString, QSize, QVariant
  6. from PyQt4.QtGui import QDialog, QColorDialog, QColor, QHBoxLayout, QFrame, \
  7. QApplication, QCheckBox
  8. import Actions
  9. from Combattant import Combattant
  10. from EcranEditionObjet import EcranEditionObjet
  11. from Objet import Objet
  12. from VueEditionForme import VueEditionForme
  13. from dialogues import dmMessage
  14. from frameAttaque import FrameAttaque
  15. from lib.Decor import Decor
  16. from lib.commun import lstLibEtats
  17. import regles
  18. from rsc import selectionImage, RImage
  19. import ui.dm as dm
  20. from ui.ecran_editionMateriel import Ui_edm_fenetre
  21. def nouveauCombattant():
  22. return Combattant()
  23. def nouveauDecor():
  24. return Decor()
  25. class EcranEditionMateriel(QDialog):
  26. """interface de creation/edition de terrains"""
  27. def __init__(self, mat, parent=None):
  28. """initialisation de la fenetre"""
  29. super (EcranEditionMateriel, self).__init__()
  30. self._mat = mat
  31. self._mode = "creation" if mat.position == (-1,-1) else "combat"
  32. self._sections = []
  33. def mat(self):
  34. """retourne le materiel de la fenetre"""
  35. return self._mat
  36. def mode(self):
  37. return self._mode
  38. def createWidgets(self):
  39. """construction de l'interface"""
  40. #construction de l'interface
  41. self.ui = Ui_edm_fenetre()
  42. self.ui.setupUi(self)
  43. self.connect(self.ui.edm_enregistrer, SIGNAL("clicked()"), self.valider)
  44. self.connect(self.ui.edm_annuler, SIGNAL("clicked()"), self.annuler)
  45. def toutesLesSections(self):
  46. return [EdEnTete, EdPageCreation, EdPageCombat, EdPageDeplacement, EdPageProprietes, \
  47. EdPageAttributs, EdPageAttaques, EdPageInventaire, EdPageNotes]
  48. def section(self, nom):
  49. for section in self._sections:
  50. if section.__class__.__name__ == nom: return section
  51. return None
  52. def afficher(self, pageInitiale = 0, formeCases = "H"):
  53. """affiche la fenetre"""
  54. self.createWidgets()
  55. #on instancie et on construit les sections necessaires
  56. for section in self.toutesLesSections():
  57. instance = section(self)
  58. if self.mat().typ() in instance.filtre() \
  59. and self._mode in instance.modes():
  60. self._sections.append(instance)
  61. instance.construire()
  62. if section == EdPageCreation:
  63. if formeCases == "C": self.ui.edm_casesCarrees.setChecked(True)
  64. instance.charger()
  65. else:
  66. self.ui.edm_menu.setRowHidden((self.toutesLesSections().index(section) - 1), True)
  67. self.allerAPage(pageInitiale)
  68. self.majAffichage()
  69. self.show()
  70. def allerAPage(self, index, sens = "+"):
  71. while self.ui.edm_menu.isRowHidden(index):
  72. index += 1 if sens == "+" else -1
  73. if index > self.ui.edm_menu.rowCount(): return
  74. self.ui.edm_menu.setCurrentCell(index, 0)
  75. self.ui.edm_menu.setCurrentCell(index, 1)
  76. self.ui.edm_pages.setCurrentIndex(index)
  77. def pageSuivante(self):
  78. index = self.ui.edm_menu.currentRow() + 1
  79. if index > (self.ui.edm_menu.rowCount() - 1): index = 0
  80. print index
  81. self.allerAPage(index)
  82. def pagePrecedente(self):
  83. index = self.ui.edm_menu.currentRow() - 1
  84. if index < 0: index = self.ui.edm_menu.rowCount() - 1
  85. print index
  86. self.allerAPage(index, "-")
  87. def nomModifie(self):
  88. """le nom du pion a ete modifie"""
  89. self.majAffichage()
  90. sectionForme = self.section("EdPageCreation")
  91. if sectionForme: sectionForme.majEtiquetteVueForme()
  92. def logoModifie(self):
  93. """le logo du pion a ete modifie"""
  94. sectionForme = self.section("EdPageCreation")
  95. if sectionForme: sectionForme.logoModifie()
  96. #### barre d'outils
  97. def majAffichage(self):
  98. """verifie la validite des saisies"""
  99. self.ui.edm_enregistrer.setEnabled(len(self.ui.edm_nom.texte()) > 0)
  100. def valider(self):
  101. """enregistre le materiel cree/edite"""
  102. for section in self._sections:
  103. section.enregistrer()
  104. self.done(1)
  105. def annuler(self):
  106. """annule la creation/edition"""
  107. self._mat = None
  108. self.done(0)
  109. def wheelEvent(self, event):
  110. if event.delta() < 0:
  111. self.pageSuivante()
  112. return
  113. elif event.delta() > 0:
  114. self.pagePrecedente()
  115. return
  116. return QDialog.wheelEvent(self, event)
  117. class EdSectionBase(object):
  118. """classe de base pour les differentes sections de l'ecran d'edition des pions"""
  119. def __init__(self, ecran):
  120. self.ecran = ecran
  121. self._filtre = []
  122. self._modes = ["creation", "combat"]
  123. def filtre(self):
  124. """liste des classes de materiel concernees par cette section"""
  125. return self._filtre
  126. def modes(self):
  127. return self._modes
  128. def ui(self):
  129. return self.ecran.ui
  130. def mat(self):
  131. return self.ecran.mat()
  132. def construire(self):
  133. """construit et met en forme"""
  134. pass
  135. def charger(self):
  136. """charge les donnees du materiel dans la section"""
  137. pass
  138. def enregistrer(self):
  139. """met a jour le materiel en fonction des donnees saisies"""
  140. pass
  141. class EdEnTete(EdSectionBase):
  142. def __init__(self, ecran):
  143. super(EdEnTete, self).__init__(ecran)
  144. self._filtre = ["cb", "dc"]
  145. def construire(self):
  146. self.ecran.connect(self.ui().edm_nom, SIGNAL("textEdited(QString)"), self.ecran.nomModifie)
  147. self.ecran.connect(self.ui().edm_logo, SIGNAL("clicked()"), self.selectionnerLogo)
  148. self.majLibelleMode()
  149. # couleur = "rgb(250,100,50)" if self.ecran.mode() == "combat" else "rgb(20,100,250)"
  150. # self.ui().edm_enTete.setStyleSheet(QString("#edm_enTete {border-bottom: 3px solid "+couleur+";}"))
  151. # self.ui().edm_enTete.setStyleSheet(QString("#edm_enTete {background-color: "+couleur+";}"))
  152. def majLibelleMode(self):
  153. if self.mat().typ() == "cb":
  154. txt1 = "Fiche de personnage"
  155. else:
  156. txt1 = "Fiche du decor"
  157. txt2 = " Creation" if self.ecran.mode() == "creation" else "Combat"
  158. self.ui().edm_mode.majTexte((txt1 + " : " + txt2).upper())
  159. couleur = "rgb(180,60,50)" if self.ecran.mode() == "combat" else "rgb(20,20,150)"
  160. self.ui().edm_enTete.setStyleSheet(QString("#edm_mode {color: "+couleur+";}"))
  161. def selectionnerLogo(self):
  162. img = selectionImage()
  163. if img:
  164. self.ui().edm_logo.chargerImage(img)
  165. self.ecran.logoModifie()
  166. def charger(self):
  167. self.ui().edm_nom.majTexte(self.mat().nom())
  168. if self.mat().logo.estValide():
  169. self.ui().edm_logo.chargerImage(self.mat().logo)
  170. else:
  171. self.ui().edm_logo.majTexte("Choisissez \nun fichier\nimage")
  172. def enregistrer(self):
  173. self.mat().majNom(self.ui().edm_nom.texte())
  174. self.mat().logo = self.ui().edm_logo.image() if self.ui().edm_logo.image() else RImage()
  175. class EdPageCreation(EdSectionBase):
  176. def __init__(self, ecran):
  177. super(EdPageCreation, self).__init__(ecran)
  178. self._filtre = ["cb", "dc"]
  179. self._modes = ["creation"]
  180. def construire(self):
  181. self.vueForme = VueEditionForme(self.ui().edm_vueForme)
  182. self.ecran.connect(self.ui().edm_aideForme, SIGNAL("clicked()"), self.afficherAideForme)
  183. self.ecran.connect(self.ui().edm_casesHexa, SIGNAL("clicked()"), self.majFormeCases)
  184. self.ecran.connect(self.ui().edm_casesCarrees, SIGNAL("clicked()"), self.majFormeCases)
  185. self.ecran.connect(self.ui().edm_couleur, SIGNAL("clicked()"), self.selectionCouleur)
  186. self.ecran.connect(self.ui().edm_image, SIGNAL("clicked()"), self.selectionImage)
  187. def formeCases(self):
  188. return "H" if self.ui().edm_casesHexa.isChecked() else "C"
  189. def majFormeCases(self):
  190. if self.vueForme.formeCases() != self.ecran.formeCases():
  191. #on enregistre la def de forme, d'image et d'etiquette en cours
  192. self.mat().formeDef[self.vueForme.formeCases()] = self.vueForme.formeDef()
  193. self.mat().img = self.vueForme.imageDef()
  194. self.mat().etiquette = self.vueForme.etiquetteDef()
  195. #on recree la scene avec la nouvelle forme de cases
  196. self.vueForme.vider()
  197. self.vueForme.creer(self.ecran.formeCases())
  198. #on charge les def correspondantes a la nouvelle forme
  199. self.vueForme.chargerFormeDef(self.mat().formeDef[self.formeCases()])
  200. self.vueForme.chargerImageDef(self.mat().img)
  201. self.vueForme.chargerEtiquetteDef(self.mat().etiquette)
  202. def majEtiquetteVueForme(self):
  203. self.mat().etiquette.txt = self.ui().edm_nom.texte()
  204. self.vueForme.chargerEtiquetteDef(self.mat().etiquette)
  205. def logoModifie(self):
  206. self.vueForme.nouvelleImageDef(self.ui.edm_logo.image())
  207. def selectionImage(self):
  208. """selectionne le fichier image dans la boite de dialogue dediee"""
  209. img = selectionImage()
  210. if img:
  211. self.vueForme.nouvelleImageDef(img)
  212. def selectionCouleur(self):
  213. """selectionne la couleur dans la boite de dialogue dediee"""
  214. couleur = QColorDialog(self).getColor(QColor("white"), self)
  215. if couleur.isValid():
  216. self.mat().couleur = couleur
  217. self.vueForme.majCouleur(couleur)
  218. def afficherAideForme(self):
  219. msg = "Sur l'écran ci-contre, vous pouvez éditer la forme et l'apparence de votre pion. Vous pouvez: \n\n" \
  220. "Choisir la couleur du pion \n" \
  221. "Choisir une image (qui remplacera alors le logo sur le pion) \n" \
  222. "Deplacer l'etiquette et l'image sur le pion en cliquant dessus \n" \
  223. "Faire pivoter l'image avec [FLECHE HAUT] et [FLECHE BAS] \n" \
  224. "Modifier la taille de l'image avec [FLECHE GAUCHE] et [FLECHE DROITE] \n" \
  225. "Activer desactiver l'etiquette en gras avec [G] \n" \
  226. "Modifier la taille de la police avec [FLECHE HAUT] et [FLECHE BAS]"
  227. dmMessage(msg)
  228. def charger(self):
  229. self.vueForme.creer(self.formeCases())
  230. self.vueForme.autoriserModifForme(True)
  231. self.vueForme.majCouleur(self.mat().couleur)
  232. self.vueForme.chargerFormeDef(self.mat().formeDef[self.formeCases()])
  233. self.vueForme.chargerImageDef(self.mat().img)
  234. self.vueForme.chargerEtiquetteDef(self.mat().etiquette)
  235. def enregistrer(self):
  236. self.mat().formeDef[self.vueForme.formeCases()] = self.vueForme.formeDef()
  237. self.mat().img = self.vueForme.imageDef()
  238. self.mat().etiquette = self.vueForme.etiquetteDef()
  239. class EdPageCombat(EdSectionBase):
  240. def __init__(self, ecran):
  241. super(EdPageCombat, self).__init__(ecran)
  242. self._filtre = ["cb", "dc"]
  243. self._modes = ["combat"]
  244. def construire(self):
  245. #etat
  246. dico = lstLibEtats(self.mat().typ())
  247. for num in dico:
  248. self.ui().edm_etat.addItem(QString.fromUtf8(dico[num]), QVariant(num))
  249. self.ui().edm_etat.setCurrentIndex(0)
  250. #statuts
  251. if self.mat().typ() == "dc":
  252. self.ui().edm_statut0.setVisible(False)
  253. self.ui().edm_statut2.setVisible(False)
  254. self.ui().edm_statut3.setVisible(False)
  255. self.ui().edm_effets.setVisible(False);self.ui().edm_effets_lbl.setVisible(False)
  256. self.ui().edm_actions_lbl.setVisible(False)
  257. else:
  258. self.ui().edm_statut5.setVisible(False)
  259. # self.ui().edm_layoutStatuts.update()
  260. def charger(self):
  261. self.ui().edm_etat.setCurrentIndex(self.ui().edm_etat.findData(QVariant(self.mat().etat)))
  262. for statut in self.mat().statuts:
  263. case = self.ui().page_cbt.findChild(QCheckBox, "edm_statut{}".format(statut))
  264. if case: case.setChecked(True)
  265. def enregistrer(self):
  266. self.mat().etat = self.ui().edm_etat.itemData(self.ui().edm_etat.currentIndex()).toInt()[0]
  267. self.mat().statuts = []
  268. for i in range(0, 6):
  269. case = self.ui().page_cbt.findChild(QCheckBox, "edm_statut{}".format(i))
  270. if case:
  271. if case.isChecked(): self.mat().statuts.append(i)
  272. class EdPageDeplacement(EdSectionBase):
  273. def __init__(self, ecran):
  274. super(EdPageDeplacement, self).__init__(ecran)
  275. self._filtre = ["cb"]
  276. def charger(self):
  277. self.ui().edm_taille.setValue(self.mat().hauteur)
  278. self.ui().edm_depMarche.setValue(self.mat().depMarche)
  279. self.ui().edm_depNage.setValue(self.mat().depNage)
  280. self.ui().edm_depEscalade.setValue(self.mat().depEscalade)
  281. self.ui().edm_depVol.setValue(self.mat().depVol)
  282. self.ui().edm_saut.setValue(self.mat().saut)
  283. def enregistrer(self):
  284. self.mat().hauteur = self.ui().edm_taille.value()
  285. self.mat().depMarche = self.ui().edm_depMarche.value()
  286. self.mat().depNage = self.ui().edm_depNage.value()
  287. self.mat().depEscalade = self.ui().edm_depEscalade.value()
  288. self.mat().depVol = self.ui().edm_depVol.value()
  289. self.mat().saut = self.ui().edm_saut.value()
  290. class EdPageProprietes(EdSectionBase):
  291. def __init__(self, ecran):
  292. super(EdPageProprietes, self).__init__(ecran)
  293. self._filtre = ["dc"]
  294. def charger(self):
  295. self.ui().edm_hauteur.setValue(self.mat().hauteur)
  296. self.ui().edm_hauteurPlafond.setChecked(self.mat().hauteurMax)
  297. self.ui().edm_escalade.setChecked(self.mat().escalade)
  298. self.ui().edm_inflammable.setChecked(self.mat().inflammable)
  299. def enregistrer(self):
  300. self.mat().hauteur = self.ui().edm_hauteur.value()
  301. self.mat().hauteurMax = self.ui().edm_hauteurPlafond.isChecked()
  302. self.mat().escalade = self.ui().edm_escalade.isChecked()
  303. self.mat().brule = self.ui().edm_inflammable.isChecked()
  304. class EdPageAttributs(EdSectionBase):
  305. def __init__(self, ecran):
  306. super(EdPageAttributs, self).__init__(ecran)
  307. self._filtre = ["cb"]
  308. self._modes = ["creation", "combat"]
  309. def layoutCarac(self):
  310. """retourne le layout des attributs"""
  311. return self.ecran.ui.edm_deroulementAttributs_layout
  312. def construire(self):
  313. """construit les champs d'attributs"""
  314. """cree les champs dedies a la saisie des attributs dans la grille dediee"""
  315. self.layoutCarac().setSpacing(4)
  316. self.layoutCarac().setMargin(0)
  317. for nomAttribut in regles.ordreAttributsFichePerso():
  318. if len(nomAttribut) > 0:
  319. lay = QHBoxLayout()
  320. lay.setMargin(0)
  321. lay.setSpacing(2)
  322. etiquette = dm.DmLabel()
  323. etiquette.majTexte(regles.attribut(nomAttribut).nom)
  324. etiquette.setObjectName("{}_etiquette".format(nomAttribut))
  325. etiquette.setAlignment(Qt.AlignLeft|Qt.AlignVCenter)
  326. etiquette.setMinimumSize(QSize(110, 24))
  327. etiquette.setMaximumSize(QSize(110, 24))
  328. lay.addWidget(etiquette)
  329. champ = dm.DmLineEdit()
  330. champ.setMinimumSize(QSize(80, 24))
  331. champ.setMaximumSize(QSize(80, 24))
  332. champ.setAlignment(Qt.AlignCenter)
  333. champ.majTexte(regles.listeAttributs()[nomAttribut])
  334. champ.setObjectName("{}_champ".format(nomAttribut))
  335. champ.setStyleSheet("background-color: rgb({},{},{});".format(248,248,248))
  336. ## self.connect(champ, SIGNAL("textChanged()"), self.controlerAttribut)
  337. lay.addWidget(champ)
  338. self.layoutCarac().addLayout(lay)
  339. else:
  340. lay = QHBoxLayout()
  341. etiquetteVide = dm.DmLabel()
  342. etiquetteVide.setMinimumHeight(9)
  343. etiquetteVide.setMaximumHeight(9)
  344. lay.addWidget(etiquetteVide)
  345. lay.addWidget(etiquetteVide)
  346. self.layoutCarac().addLayout(lay)
  347. def listeAttributs(self):
  348. """renvoie la liste des attributs tels qu'ils
  349. sont saisis dans la liste des attributs"""
  350. attributs = regles.listeAttributs()
  351. for i in range(0, self.layoutCarac().count()):
  352. layout = self.layoutCarac().itemAt(i).layout()
  353. widget = layout.itemAt(1).widget()
  354. if widget != 0 and widget != None:
  355. if str(widget.objectName()[-6:]) == "_champ":
  356. attr = str(widget.objectName()[:-6])
  357. attributs[attr] = widget.texte()
  358. return attributs
  359. def charger(self):
  360. """met a jour la liste des attributs du Combattant"""
  361. for i in range(0, self.layoutCarac().count()):
  362. layout = self.layoutCarac().itemAt(i).layout()
  363. widget = layout.itemAt(1).widget()
  364. if widget != 0:
  365. if str(widget.objectName()[-6:]) == "_champ":
  366. attr = str(widget.objectName()[:-6])
  367. widget.majTexte(self.ecran.mat().listeAttributs[attr])
  368. def enregistrer(self):
  369. self.mat().attributs = self.listeAttributs()
  370. class EdPageAttaques(EdSectionBase):
  371. def __init__(self, ecran):
  372. super(EdPageAttaques, self).__init__(ecran)
  373. self._filtre = ["cb"]
  374. self._compteurAttaque = 0
  375. def layoutAtt(self):
  376. """retourne le layout des attaques"""
  377. return self.ecran.ui.edm_deroulementAttaques_layout
  378. def construire(self):
  379. self.layoutAtt().setAlignment(Qt.AlignLeft)
  380. def attaqueNouvelle(self, attaque = None):
  381. """ajoute une nouvelle ligne a la liste des attaques"""
  382. #on ajoute de suite un panneau 'nouvelle attaque en dessous'
  383. self._compteurAttaque += 1
  384. panneau = FrameAttaque(self._compteurAttaque)
  385. if attaque: panneau.chargerAttaque(attaque)
  386. panneau.setObjectName(QString("att_frame_{}".format(self._compteurAttaque)))
  387. self.ecran.connect(panneau, SIGNAL("attaqueNouvelle()"), self.attaqueNouvelle)
  388. self.ecran.connect(panneau, SIGNAL("attaqueSupprimer(int)"), self.attaqueSupprimer)
  389. self.layoutAtt().addWidget(panneau)
  390. def attaqueSupprimer(self, index):
  391. """supprime la ligne selectionnee de la liste des attaques"""
  392. panneau = self.findChild(QFrame, "att_frame_{}".format(index))
  393. self.layoutAtt().removeWidget(panneau)
  394. def charger(self):
  395. self.layoutAtt().setAlignment(Qt.AlignTop)
  396. for attaque in self.mat().attaques:
  397. self.attaqueNouvelle(attaque)
  398. self.attaqueNouvelle()
  399. def enregistrer(self):
  400. listeAttaques = []
  401. for i in range(0, self.layoutAtt().count()):
  402. panneau = self.layoutAtt().itemAt(i).widget()
  403. if panneau != 0:
  404. attaque = panneau.attaque()
  405. if attaque:
  406. listeAttaques.append(attaque)
  407. self.mat().attaques = listeAttaques
  408. class EdPageInventaire(EdSectionBase):
  409. def __init__(self, ecran):
  410. super(EdPageInventaire, self).__init__(ecran)
  411. self._filtre = ["cb", "dc"]
  412. def construire(self):
  413. self.ecran.ui.edm_listeInventaire.construire()
  414. self.ecran.connect(self.ecran.ui.edm_filtreTypeObjet, SIGNAL("currentChanged(int)"), self.filtrerInventaire)
  415. self.ecran.ui.edm_filtreTypeObjet.stackUnder(self.ecran.ui.edm_listeInventaire)
  416. self.ecran.connect(self.ecran.ui.edm_listeInventaire, SIGNAL("objetClique(int)"), self.editerObjet)
  417. def editerObjet(self, indexObjet):
  418. if indexObjet < len(self.ecran.ui.edm_listeInventaire.inventaire()):
  419. objet = self.ecran.ui.edm_listeInventaire.inventaire()[indexObjet]
  420. else:
  421. objet = None
  422. typeObjet = self.ecran.ui.edm_filtreTypeObjet.currentIndex() - 1
  423. self.fenetreEO = EcranEditionObjet(objet, typeObjet)
  424. self.fenetreEO.show()
  425. self.fenetreEO.exec_()
  426. resultat = self.fenetreEO.resultat()
  427. if resultat:
  428. if objet:
  429. self.ecran.ui.edm_listeInventaire.majObjet(objet, resultat)
  430. else:
  431. self.ecran.ui.edm_listeInventaire.ajouterObjet(resultat)
  432. else:
  433. if objet:
  434. self.ecran.ui.edm_listeInventaire.supprimerObjet(objet)
  435. self.fenetreEO = None
  436. self.majTotauxInventaire()
  437. def majTotauxInventaire(self):
  438. inv = self.ecran.ui.edm_listeInventaire.inventaire()
  439. poidsTotal = 0.00
  440. for obj in inv:
  441. poidsTotal += obj.poidsTotal()
  442. self.ecran.ui.edm_inventaire_poids.majTexte("{} kg".format(poidsTotal))
  443. def filtrerInventaire(self, index):
  444. filtre = index - 1
  445. self.ecran.ui.edm_listeInventaire.filtrer(filtre)
  446. def charger(self):
  447. self.ui().edm_listeInventaire.charger(self.mat().inventaire)
  448. self.majTotauxInventaire()
  449. def enregistrer(self):
  450. self.mat().inventaire = self.ui().edm_listeInventaire.inventaire()
  451. class EdPageNotes(EdSectionBase):
  452. def __init__(self, ecran):
  453. super(EdPageNotes, self).__init__(ecran)
  454. self._filtre = ["cb", "dc"]
  455. def construire(self):
  456. if self.mat().typ() == "dc":
  457. self.ui().edm_detail_espece.setVisible(False);self.ui().edm_lbl_espece.setVisible(False)
  458. self.ui().edm_detail_profession.setVisible(False);self.ui().edm_lbl_profession.setVisible(False)
  459. self.ui().edm_detail_religion.setVisible(False);self.ui().edm_lbl_religion.setVisible(False)
  460. self.ui().edm_detail_lieuNaissance.setVisible(False);self.ui().edm_lbl_lieuNaissance.setVisible(False)
  461. self.ui().edm_detail_espece.setVisible(False);self.ui().edm_lbl_espece.setVisible(False)
  462. self.ui().edm_detail_sexe.setVisible(False);self.ui().edm_lbl_sexe.setVisible(False)
  463. self.ui().edm_detail_yeux.setVisible(False);self.ui().edm_lbl_yeux.setVisible(False)
  464. self.ui().edm_detail_peau.setVisible(False);self.ui().edm_lbl_peau.setVisible(False)
  465. self.ui().edm_detail_cheveux.setVisible(False);self.ui().edm_lbl_cheveux.setVisible(False)
  466. self.ui().edm_detail_langues.setVisible(False);self.ui().edm_lbl_langues.setVisible(False)
  467. def layout(self):
  468. return self.ui().edm_layoutNotes
  469. def charger(self):
  470. for detail in self.mat().details:
  471. widget = self.ui().edm_pages.findChild(dm.DmLineEdit, "edm_detail_{}".format(detail))
  472. if widget: widget.majTexte(self.mat().details[detail])
  473. # self.ui().edm_notes.setText(QString.fromUtf8(self.mat().notes))
  474. def enregistrer(self):
  475. listeWidget = self.ui().edm_pages.findChildren(dm.DmLineEdit)
  476. for widget in listeWidget:
  477. detail = str(widget.objectName()).replace("edm_detail_","")
  478. txt = widget.texte()
  479. if len(txt) > 0: self.mat().details[detail] = txt
  480. # self.mat().notes = str(self.ui().edm_notes.toPlainText().toUtf8())
  481. if __name__ == "__main__":
  482. app = QApplication(sys.argv)
  483. mat = Combattant()
  484. # mat.position = (1,1)
  485. ecran = EcranEditionMateriel(mat)
  486. ecran.afficher()
  487. r = app.exec_()
  488. mat = ecran.mat()
  489. exit(r)