dm.py 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691
  1. #from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. """ensemble des widgets surchargés"""
  4. from PyQt4.QtCore import *
  5. from PyQt4.QtGui import *
  6. try:
  7. from lib.outilsSvg import *
  8. import lib.regles as regles
  9. from lib.Actions import *
  10. except:
  11. try:
  12. from outilsSvg import *
  13. import regles as regles
  14. from Actions import *
  15. except:
  16. pass
  17. class Biblio():
  18. """cette classe fournit une liste spreciale"""
  19. def __init__(self):
  20. self.dico = {}
  21. self.ordre = []
  22. def trierPar(self, param):
  23. """trie en fonction du parametre des objets"""
  24. ordre = []
  25. return ordre
  26. def elt(self, index):
  27. return self.dict[index]
  28. class DmLabel(QLabel):
  29. """surcharge de QLabel"""
  30. def __init__(self, parent = None):
  31. super(DmLabel, self).__init__(parent)
  32. def majTexte(self, txt):
  33. self.clear()
  34. self.setText(QString.fromUtf8(txt))
  35. def chargerImage(self, chemin):
  36. self.clear()
  37. if len(chemin) > 0:
  38. pix = QPixmap(QString.fromUtf8(chemin))
  39. pix = pix.scaled(self.width(), self.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
  40. else:
  41. pix = QPixmap()
  42. self.setPixmap(pix)
  43. def texte(self):
  44. return str(self.text().toUtf8())
  45. class DmLabelChoixImage(DmLabel):
  46. """surcharge de DmLabel,
  47. affiche une fenetre de selection de fichier, recupere une image,
  48. et l'affiche."""
  49. def __init__(self, parent = None):
  50. super(DmLabelChoixImage, self).__init__(parent)
  51. self.setStyleSheet("QLabel { padding: 3px; }")
  52. self._sourceImage = ""
  53. def mousePressEvent(self, event):
  54. if event.button() == 1:
  55. self.selectionImage()
  56. def selectionImage(self):
  57. fichier = QFileDialog.getOpenFileName(self,
  58. "Selectionnez une image",
  59. "\\img",
  60. "Images (*.png *.jpg)")
  61. if len(fichier) > 0:
  62. pix = QPixmap(fichier)
  63. if not pix.isNull():
  64. self._sourceImage = fichier
  65. self.clear()
  66. pix = pix.scaled(self.width(), self.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
  67. self.setPixmap(pix)
  68. self.emit(SIGNAL("imageModifiee()"))
  69. else:
  70. dial = QMessageBox(self)
  71. dial.setText("Format non reconnu")
  72. dial.setWindowTitle("Erreur")
  73. dial.setStandardButtons(QMessageBox.Ok)
  74. dial.exec_()
  75. def image(self):
  76. """retourne le chemin de l'image chargee"""
  77. return self._sourceImage
  78. def chargerImage(self, chemin):
  79. self._sourceImage = chemin
  80. super(DmLabelChoixImage, self).chargerImage(chemin)
  81. class DmTextEdit(QTextEdit):
  82. def __init__(self, parent = None):
  83. super(DmTextEdit, self).__init__(parent)
  84. def majTexte(self, txt):
  85. self.clear()
  86. self.setText(QString.fromUtf8(str(txt)))
  87. def texte(self):
  88. return str(self.toPlainText().toUtf8())
  89. class DmLineEdit(QLineEdit):
  90. def __init__(self, parent = None):
  91. super(DmLineEdit, self).__init__(parent)
  92. def majTexte(self, txt):
  93. self.clear()
  94. self.setText(QString.fromUtf8(str(txt)))
  95. def texte(self):
  96. return str(self.text().toUtf8())
  97. class DmGraphicsView(QGraphicsView):
  98. """surcharge de QGraphicsView"""
  99. def __init__(self, parent = None):
  100. super(DmGraphicsView, self).__init__(parent)
  101. self.nbZoomActuel = 0
  102. def resizeEvent(self, event):
  103. super(DmGraphicsView, self).resizeEvent(event)
  104. self.emit(SIGNAL("resizeEvent()"))
  105. def wheelEvent(self, event):
  106. """zoom/dezoom avec la molette de la souris"""
  107. #on zoom/dezoom et on recentre sur la position du curseur
  108. zoom = 1.00
  109. if event.delta() > 0:
  110. if self.nbZoomActuel <= 10:
  111. self.nbZoomActuel += 1
  112. zoom = 1.25
  113. elif event.delta() < 0:
  114. if self.nbZoomActuel >= -10:
  115. zoom = 0.8
  116. self.nbZoomActuel -= 1
  117. if zoom != 0.00:
  118. self.scale(zoom, zoom)
  119. self.centerOn(self.mapToScene(event.pos()))
  120. event.accept() #pour considerer l'evenement comme resolu, sans ca les barres de defilement reagissent aussi
  121. class DmComboBox(QComboBox):
  122. """surcharge de QComboBox"""
  123. def __init__(self, parent = None):
  124. super(DmComboBox, self).__init__(parent)
  125. def allerA(self, donnee):
  126. """cherche la donnee demandee et affiche la ligne"""
  127. index = self.findData(QVariant(donnee))
  128. self.setCurrentIndex(index)
  129. def valeurActuelle(self):
  130. """renvoie sous forme de QVariant la valeur en cours"""
  131. return self.itemData(self.currentIndex())
  132. class DmTabInventaire(QTabWidget):
  133. """surcharge de QTabWidget stylisee et
  134. utilisee pour filtrer les types d'objets affiches"""
  135. def __init__(self, parent = None):
  136. super(DmTabInventaire, self).__init__(parent)
  137. ## self.setStyleSheet(QString.fromUtf8("""QTabWidget::tab-bar { alignment: right;
  138. ## background: rgba(0,248,248,200) }"""))
  139. self.setStyleSheet(QString.fromUtf8("""
  140. QTabWidget::pane { border-top: 2px solid #C2C7CB; }
  141. QTabWidget::tab-bar { alignment: right; }
  142. QTabBar::tab {
  143. background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
  144. stop: 0 #E1E1E1, stop: 0.4 #DDDDDD,
  145. stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);
  146. border: 2px solid #C4C4C3;
  147. border-bottom-color: #C2C7CB; border-top-left-radius: 4px;
  148. border-top-right-radius: 8px;
  149. border-top-left-radius: 8px;
  150. padding-left: 15px; }
  151. QTabBar::tab:selected, QTabBar::tab:hover {
  152. background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
  153. stop: 0 #fafafa, stop: 0.4 #f4f4f4,
  154. stop: 0.5 #e7e7e7, stop: 1.0 #fafafa); }
  155. QTabBar::tab:selected { border-color: #9B9B9B;
  156. border-bottom-color: #C2C7CB; }
  157. """))
  158. class DmTableWidget(QTableWidget):
  159. """surcharge de QTableWidget"""
  160. def __init__(self, parent = None):
  161. super(DmTableWidget, self).__init__(parent)
  162. self.majEnCours = False
  163. def vider(self):
  164. """supprime toutes les lignes"""
  165. self.majEnCours = True
  166. while self.rowCount() > 0:
  167. self.removeRow(0)
  168. self.majEnCours = False
  169. def nouvelleLigneFin(self):
  170. """ajoute une ligne en derniere position"""
  171. pos = self.rowCount()
  172. self.insertRow(pos)
  173. return pos
  174. def lignes(self):
  175. """retourne la liste des index de lignes de la table"""
  176. return range(0, self.rowCount())
  177. def colonnes(self):
  178. """retourne la liste des index de lignes de la table"""
  179. return range(0, self.columnCount())
  180. def masquerColonneId(self):
  181. """masque la colonne en position 0 qui contient les identifiants"""
  182. self.setColumnWidth(0, 0)
  183. def majData(self, ligne, colonne, var):
  184. """met a jour la cellule avec une donnee de type QVariant"""
  185. var = QVariant(var)
  186. if not self.item(ligne, colonne):
  187. item = QTableWidgetItem()
  188. item.setData(0, var)
  189. self.setItem(ligne, colonne, item)
  190. else:
  191. self.item(ligne, colonne).setData(0, var)
  192. return True
  193. def majTexte(self, ligne, colonne, texte):
  194. """met a jour la cellule avec du texte"""
  195. if not self.item(ligne, colonne):
  196. self.setItem(ligne, colonne, QTableWidgetItem(QString.fromUtf8(str(texte))))
  197. else:
  198. self.item(ligne, colonne).setText(QString.fromUtf8(str(texte)))
  199. return True
  200. def majEnt(self, ligne, colonne, valeur):
  201. """met a jour la cellule avec une valeur numerique entiere
  202. si valeur ne peut etre converti en numerique, on retourne Faux"""
  203. retour = False
  204. try:
  205. entier = QVariant(long(valeur))
  206. self.item(ligne, colonne).setData(0, entier)
  207. retour = True
  208. except:
  209. pass
  210. return retour
  211. def chercherLigne(self, colonne, valeur):
  212. """cherche la valeur dans la colonne demandee
  213. renvoie la ligne correspondante """
  214. ligne = None
  215. for i in range(0, self.rowCount()):
  216. if str(self.item(i, colonne).text().toUtf8()) == str(valeur):
  217. ligne = i
  218. break
  219. return ligne
  220. def majLigne(self, ligne, dico, flags = []):
  221. """rempli la ligne avec les donnees trouvees dans le dictionnaire"""
  222. for colonne in range(0, self.columnCount()):
  223. nomChamp = ""
  224. item = self.horizontalHeaderItem(colonne)
  225. if item:
  226. nomChamp = str(item.text())
  227. if nomChamp in dico:
  228. item = QTableWidgetItem()
  229. for f in flags:
  230. item.setFlag(f)
  231. var = QVariant(dico[nomChamp])
  232. item.setData(0, var)
  233. self.setItem(ligne, colonne, item)
  234. def texte(self, ligne, colonne):
  235. return str(self.item(ligne, colonne).text().toUtf8())
  236. def data(self, ligne, colonne):
  237. retour = None
  238. item = self.item(ligne, colonne)
  239. if item:
  240. retour = item.data(0)
  241. return retour
  242. def ligneSelectionnee(self):
  243. """renvoie la ligne selectionnee (la premiere si plusieurs le sont)"""
  244. return self.currentRow()
  245. def selectionner(self, ligne, colonne):
  246. self.setCurrentCell(ligne, colonne, QItemSelectionModel.Select)
  247. class DmTableBiblio(DmTableWidget):
  248. """table utilisee pour afficher les bibliotheques d'objets:
  249. terrains, decors, creatures"""
  250. def __init__(self, parent = None):
  251. super(DmTableBiblio, self).__init__(parent)
  252. self.fichier = ""
  253. self.masquerColonneId()
  254. def defFichier(self, fichier):
  255. """definit le fichier de sauvegarde qui la source des donnees de la table"""
  256. self.fichier = fichier
  257. def initAffichage(self):
  258. """fait les differents reglages relatifs a l'apparence"""
  259. self.setColumnWidth(0, 0)
  260. self.setIconSize(QSize(30,20))
  261. self.horizontalHeader().setStretchLastSection(True)
  262. def remplir(self):
  263. """remplit la table avec les donnees contenues dans le dictionnaire de la savuvegarde"""
  264. dico = afficheSvg(self.fichier)
  265. self.majEnCours = True
  266. self.setSortingEnabled(False)
  267. index = 0
  268. for elt in dico:
  269. objet = dico[elt]
  270. self.insertRow(int(index))
  271. #code de l'objet
  272. self.setItem(int(index),0,QTableWidgetItem(QString.fromUtf8(elt)))
  273. #icone et nom
  274. icon = QIcon(objet.icone())
  275. item = QTableWidgetItem(icon,QString.fromUtf8(objet.nom))
  276. self.setItem(int(index),1,item)
  277. index += 1
  278. self.sizeHintForColumn(1)
  279. self.setSortingEnabled(True)
  280. self.sortItems(1)
  281. self.majEnCours = False
  282. def maj(self):
  283. self.vider()
  284. self.remplir()
  285. def actuel(self):
  286. """renvoie l'objet actuellement selectionne"""
  287. objet = None
  288. index = self.item(self.currentRow(), 0)
  289. if index > 0:
  290. objet = charger(self.fichier, str(index.text().toUtf8()))
  291. return objet
  292. class DmTableAttributsPi(DmTableWidget):
  293. """table utilisee pour afficher les attributs d'un pion dans le panneau Pi"""
  294. def __init__(self, parent = None):
  295. super(DmTableBiblio, self).__init__(parent)
  296. self.fichier = ""
  297. self.masquerColonneId()
  298. def defFichier(self, fichier):
  299. """definit le fichier de sauvegarde qui la source des donnees de la table"""
  300. self.fichier = fichier
  301. def initAffichage(self):
  302. """fait les differents reglages relatifs a l'apparence"""
  303. self.setColumnWidth(0, 0)
  304. self.setIconSize(QSize(30,20))
  305. self.horizontalHeader().setStretchLastSection(True)
  306. def remplir(self):
  307. """remplit la table avec les donnees contenues dans le dictionnaire de la savuvegarde"""
  308. dico = afficheSvg(self.fichier)
  309. self.majEnCours = True
  310. self.setSortingEnabled(False)
  311. index = 0
  312. for elt in dico:
  313. objet = dico[elt]
  314. self.insertRow(int(index))
  315. #code de l'objet
  316. self.setItem(int(index),0,QTableWidgetItem(QString.fromUtf8(elt)))
  317. #icone et nom
  318. icon = QIcon("img\\"+objet.icone())
  319. item = QTableWidgetItem(icon,QString.fromUtf8(objet.nom))
  320. self.setItem(int(index),1,item)
  321. index += 1
  322. self.sizeHintForColumn(1)
  323. self.setSortingEnabled(True)
  324. self.sortItems(1)
  325. self.majEnCours = False
  326. def maj(self):
  327. self.vider()
  328. self.remplir()
  329. def actuel(self):
  330. """renvoie l'objet actuellement selectionne"""
  331. objet = None
  332. index = self.item(self.currentRow(), 0)
  333. if index > 0:
  334. objet = charger(self.fichier, str(index.text().toUtf8()))
  335. return objet
  336. class DmTableInventaire(DmTableWidget):
  337. """table utilisee pour afficher l'inventaire d'un combattant"""
  338. itemExited = pyqtSignal(QTableWidgetItem)
  339. def __init__(self, parent = None):
  340. super(DmTableInventaire, self).__init__(parent)
  341. self._inventaire = []
  342. #pour la gestion des survols
  343. self.setMouseTracking(True)
  344. self._last_index = QPersistentModelIndex()
  345. self.viewport().installEventFilter(self)
  346. self.connect(self, SIGNAL("itemEntered(QTableWidgetItem*)"), self.itemSurvole)
  347. self.connect(self, SIGNAL("itemExited(QTableWidgetItem*)"), self.itemSurvoleFin)
  348. self.connect(self, SIGNAL("itemClicked(QTableWidgetItem*)"), self.itemClique)
  349. def construire(self):
  350. self.setColumnWidth(0, 20);self.setColumnWidth(1, 70)
  351. self.setColumnWidth(2, 241);self.setColumnWidth(4, 60)
  352. self.setColumnWidth(6, 20)
  353. def ajouterObjet(self, objet):
  354. ligne = self.rowCount() - 1 #avant la ligne 'ajouter'
  355. self.insertRow(ligne)
  356. self.remplirLigne(ligne, objet)
  357. self._inventaire.append(objet)
  358. def charger(self, inventaire):
  359. """charge l'inventaire en parametre"""
  360. for objet in inventaire:
  361. self.ajouterObjet(objet)
  362. def majObjet(self, ancien, nouveau):
  363. """maj la ligne correspondant a l'objet"""
  364. index = self._inventaire.index(ancien)
  365. self._inventaire[index] = nouveau
  366. self.remplirLigne(index, nouveau)
  367. def supprimerObjet(self, objet):
  368. """ajoute la ligne correspondant a l'objet"""
  369. index = self._inventaire.index(objet)
  370. self._inventaire.remove(objet)
  371. self.removeRow(index)
  372. def remplirLigne(self, ligne, objet):
  373. """remplit les cellules de la ligne avec les donnees de l'objet"""
  374. imgType = ["pieces.png", "btn_ModeCombat.png", "chimie.png", "diamant.png", "boite_outils.png"]
  375. self.creerItem(ligne, 0, "", imgType[objet.typeObjet])
  376. self.creerItem(ligne, 1, objet.quantite)
  377. self.creerItem(ligne, 2, objet.nom)
  378. self.creerItem(ligne, 3, objet.poidsTotal())
  379. self.creerItem(ligne, 4, "")
  380. def inventaire(self):
  381. """cree un inventaire a partir des donnees de la table"""
  382. return self._inventaire
  383. def itemSurvole(self, item):
  384. ligne = item.row()
  385. self.majCouleurLigne(ligne, QColor(150, 50, 50, 150))
  386. def itemSurvoleFin(self, item):
  387. ligne = item.row()
  388. self.majCouleurLigne(ligne, QColor(248, 248, 248, 150))
  389. def itemClique(self, item):
  390. ligne = item.row()
  391. self.emit(SIGNAL("objetClique(int)"), ligne)
  392. def majCouleurLigne(self, ligne, couleur):
  393. """modifie la couleur de fond des items de la lignes"""
  394. for col in self.colonnes():
  395. item = self.item(ligne, col)
  396. if item:
  397. item.setBackground(QBrush(couleur))
  398. def creerItem(self, ligne, colonne, txt, img = None):
  399. item = QTableWidgetItem()
  400. item.setFlags(Qt.NoItemFlags)
  401. item.setText(QString().fromUtf8(" {}".format(txt)))
  402. if img:
  403. pix = QPixmap("img\\{}".format(img))
  404. item.setIcon(QIcon(pix))
  405. self.setItem(ligne, colonne, item)
  406. def filtrer(self, typeObjet):
  407. """filtre l'affichage des lignes par type d'objet"""
  408. for ligne in range(0, self.rowCount() - 1):
  409. self.setRowHidden(ligne, typeObjet >= 0 and typeObjet != self._inventaire[ligne].typeObjet )
  410. def eventFilter(self, widget, event):
  411. if widget is self.viewport():
  412. index = self._last_index
  413. if event.type() == QEvent.MouseMove:
  414. index = self.indexAt(event.pos())
  415. elif event.type() == QEvent.Leave:
  416. index = QModelIndex()
  417. if index != self._last_index:
  418. row = self._last_index.row()
  419. column = self._last_index.column()
  420. item = self.item(row, column)
  421. if item is not None:
  422. self.itemExited.emit(item)
  423. self._last_index = QPersistentModelIndex(index)
  424. return QTableWidget.eventFilter(self, widget, event)
  425. class DmTableInventaireCombat(DmTableInventaire):
  426. """inventaire affiche dans le panneau de combat"""
  427. def __init__(self, parent = None):
  428. super(DmTableInventaireCombat, self).__init__(parent)
  429. ##class DmTableListeAttaques(DmTableWidget):
  430. ## """liste des attaques du combattant"""
  431. ## def __init__(self, parent = None):
  432. ## super(DmTableListeAttaques, self).__init__(parent)
  433. ## self.panneau = None
  434. ## self._listeAttaques = []
  435. ## self.connect(self, SIGNAL("currentCellChanged(int, int, int, int)"), self.selectionChangee)
  436. ##
  437. ## def listeAttaques(self):
  438. ## #on recupere les donnees de l'attaque en cours avant d'exporter la liste
  439. ## self.enregistrerPanneau(self.ligneSelectionnee())
  440. ## return self._listeAttaques
  441. ##
  442. ## def attaqueSelectionnee(self):
  443. ## """renvoie l'attaque selectionnee"""
  444. ## retour = None
  445. ## if len(self._listeAttaques) > 0 and self.ligneSelectionnee() != None:
  446. ## retour = self._listeAttaques[self.ligneSelectionnee()]
  447. ## return retour
  448. ##
  449. ## def majAttaque(self, index, nouvelle):
  450. ## """met a jour les donnees de l'attaque en position x"""
  451. ## self._listeAttaques[index] = nouvelle
  452. ##
  453. ## def charger(self, fenetre, listeAttaques):
  454. ## self.panneau = fenetre.ui.edc_attaque_panneau
  455. ## self._listeAttaques = listeAttaques
  456. ## self.peupler()
  457. ## self.selectionner(0, 0)
  458. ## self.majPanneau()
  459. ##
  460. ## def peupler(self):
  461. ## self.vider()
  462. ## for attaque in self._listeAttaques:
  463. ## ligne = self.nouvelleLigneFin()
  464. ## self.setItem(ligne, 0, QTableWidgetItem(attaque.icone(), QString.fromUtf8(attaque.nom())))
  465. ##
  466. ## def majPanneau(self):
  467. ## """met a jour les donnees du panneau"""
  468. ## self.panneau.chargerAttaque(self.attaqueSelectionnee())
  469. ##
  470. ## def enregistrerPanneau(self, ligne):
  471. ## """enregistre les donnees du panneau sur l'attaque de la ligne"""
  472. ## attaque = self.panneau.attaque()
  473. ## if attaque:
  474. ## self._listeAttaques[ligne] = attaque
  475. ## self.peupler()
  476. ##
  477. ## def nouvelle(self):
  478. ## attaque = Cac()
  479. ## self._listeAttaques.append(attaque)
  480. ## self.peupler()
  481. ## self.selectionner(self.rowCount(), 0)
  482. ##
  483. ## def supprimer(self):
  484. ## """supprime l'attaque actuellement selectionnee"""
  485. #### ligne = self.ligneSelectionnee()
  486. ## self._listeAttaques.remove(self.attaqueSelectionnee())
  487. ## self.peupler()
  488. #### self.selectionner(ligne, 0)
  489. #### self.removeRow(self.ligneSelectionnee())
  490. ##
  491. ## def selectionChangee(self, ancienneLigne, ancienneColonne, ligne, colonne):
  492. ## self.enregistrerPanneau(ancienneLigne)
  493. ## self.panneau.chargerAttaque(None)
  494. ## self.majPanneau()
  495. #### self.emit(SIGNAL("selectionChangee(int, int)"), ancienneLigne, ligne)
  496. ##
  497. ##
  498. ##
  499. ##class DmTableAttributsAttaque(DmTableWidget):
  500. ## """table contenant les attributs (selon regles) d'une attaque"""
  501. ## def __init__(self, parent = None):
  502. ## super(DmTableAttributsAttaque, self).__init__(parent)
  503. ## self._constr = False
  504. ##
  505. ## def attributs(self):
  506. ## """retourne un dictionnaire contenant les attributs"""
  507. ## dico = {}
  508. ## for ligne in self.lignes():
  509. ## nomAttr = regles.ordreAttributsAttaques()[ligne]
  510. ## dico[nomAttr] = regles.attributAttaque(nomAttr).controler(self.texte(ligne, 1))
  511. ## return dico
  512. ##
  513. ## def construire(self):
  514. ## """cree les lignes et remplit la colonne des noms d'attributs"""
  515. ## for nomAttribut in regles.ordreAttributsAttaques():
  516. ## attribut = regles.attributAttaque(nomAttribut)
  517. ## ligne = self.nouvelleLigneFin()
  518. ## self.majTexte(ligne, 0, attribut.nom)
  519. ## self.majTexte(ligne, 1, "")
  520. ## self._constr = True
  521. ##
  522. ## def charger(self, attributs):
  523. ## """charge les attributs d'une attaque"""
  524. ## self.decharger()
  525. ## for ligne in self.lignes():
  526. ## attr = regles.ordreAttributsAttaques()[ligne]
  527. ## valeur = attributs[attr]
  528. ## self.majTexte(ligne, 1, valeur)
  529. ##
  530. ## def decharger(self):
  531. ## """efface les valeurs de la colonne des valeurs,
  532. ## mais laisse intacte la colonne des noms d'attributs"""
  533. ## if not self._constr:
  534. ## self.contruire()
  535. ## else:
  536. ## for ligne in self.lignes():
  537. ## self.majTexte(ligne, 1, "")
  538. ##
  539. class DmTableMenu(QTableWidget):
  540. """table utilisee comme barre d'onglets verticale"""
  541. def __init__(self, parent = None):
  542. super(DmTableMenu, self).__init__(parent)
  543. def setItem(self, ligne, colonne, item):
  544. super(DmTableMenu, self).setItem(ligne, colonne, item)
  545. if ligne == 0:
  546. self.setItemSelected(item, True)
  547. class DmFrameInf_Combattant(QGroupBox):
  548. """frame d'information (combattant)"""
  549. def __init__(self, parent = None):
  550. super(DmFrameInf_Combattant, self).__init__(parent)
  551. def maj(self, combattant):
  552. self.setVisible((combattant != None))
  553. if combattant:
  554. self.findChild(DmLabel, "inf_pionNom").majTexte(combattant.nom)
  555. self.findChild(DmLabel, "inf_pionImage").chargerImage("img\\"+combattant.img.nomFichier)
  556. self.findChild(DmLabel, "inf_pionEffet").setVisible(False)
  557. class DmFrameInf_Decor(QGroupBox):
  558. """frame d'information (decor)"""
  559. def __init__(self, parent = None):
  560. super(DmFrameInf_Decor, self).__init__(parent)
  561. def maj(self, decor):
  562. self.setVisible((decor != None))
  563. if decor:
  564. self.findChild(DmLabel, "inf_decorNom").majTexte(decor.nom)
  565. self.findChild(DmLabel, "inf_decorImage").chargerImage("img\\"+decor.img.nomFichier)
  566. class DmFrameInf_Case(QGroupBox):
  567. """frame d'information (case)"""
  568. def __init__(self, parent = None):
  569. super(DmFrameInf_Case, self).__init__(parent)
  570. def maj(self, case):
  571. self.setVisible((case != None))
  572. if len(case.terrain.nom) > 0:
  573. self.findChild(DmLabel, "inf_caseTerrain").majTexte(case.terrain.nom)
  574. else:
  575. self.findChild(DmLabel, "inf_caseTerrain").majTexte("Case")
  576. self.findChild(DmLabel, "inf_caseCoord").majTexte("X: {} Y: {}".format(case.x, case.y))
  577. self.findChild(DmLabel, "inf_caseAltitude").majTexte("Alt.: {}".format(case.altitude))
  578. if case.effetActif != "":
  579. self.findChild(DmLabel, "inf_caseEffet").chargerImage("img\\"+case.imgEffet[case.effetActif])
  580. else:
  581. self.findChild(DmLabel, "inf_caseEffet").clear()
  582. class DmFrame(QFrame):
  583. """surcharge de QFrame"""
  584. def __init__(self, parent = None):
  585. super(DmFrame, self).__init__(parent)