dm.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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. ##from lib.outilsSvg import *
  7. class DmLabel(QLabel):
  8. """surcharge de QLabel"""
  9. def __init__(self, parent = None):
  10. super(DmLabel, self).__init__(parent)
  11. def majTexte(self, txt):
  12. self.clear()
  13. self.setText(QString.fromUtf8(txt))
  14. def chargerImage(self, chemin):
  15. self.clear()
  16. if len(chemin) > 0:
  17. pix = QPixmap(QString.fromUtf8(chemin))
  18. pix = pix.scaled(self.width(), self.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
  19. else:
  20. pix = QPixmap()
  21. self.setPixmap(pix)
  22. def texte(self):
  23. return str(self.text())
  24. class DmTextEdit(QTextEdit):
  25. def __init__(self, parent = None):
  26. super(DmTextEdit, self).__init__(parent)
  27. def majTexte(self, txt):
  28. self.clear()
  29. self.setText(QString.fromUtf8(txt))
  30. def texte(self):
  31. return str(self.text())
  32. class DmGraphicsView(QGraphicsView):
  33. """surcharge de QGraphicsView"""
  34. def __init__(self, parent = None):
  35. super(DmGraphicsView, self).__init__(parent)
  36. self.nbZoomActuel = 0
  37. def resizeEvent(self, event):
  38. super(DmGraphicsView, self).resizeEvent(event)
  39. self.emit(SIGNAL("resizeEvent()"))
  40. def wheelEvent(self, event):
  41. """zoom/dezoom avec la molette de la souris"""
  42. #on zoom/dezoom et on recentre sur la position du curseur
  43. zoom = 1.00
  44. if event.delta() > 0:
  45. if self.nbZoomActuel <= 10:
  46. self.nbZoomActuel += 1
  47. zoom = 1.25
  48. elif event.delta() < 0:
  49. if self.nbZoomActuel >= -10:
  50. zoom = 0.8
  51. self.nbZoomActuel -= 1
  52. if zoom != 0.00:
  53. self.scale(zoom, zoom)
  54. self.centerOn(self.mapToScene(event.pos()))
  55. event.accept() #pour considerer l'evenement comme resolu, sans ca les barres de defilement reagissent aussi
  56. class DmTableWidget(QTableWidget):
  57. """surcharge de QTableWidget"""
  58. def __init__(self, parent = None):
  59. super(DmTableWidget, self).__init__(parent)
  60. self.majEnCours = False
  61. def vider(self):
  62. """supprime toutes les lignes"""
  63. self.majEnCours = True
  64. while self.rowCount() > 0:
  65. self.removeRow(0)
  66. self.majEnCours = False
  67. def masquerColonneId(self):
  68. """masque la colonne en position 0 qui contient les identifiants"""
  69. self.setColumnWidth(0, 0)
  70. class DmTableBiblio(DmTableWidget):
  71. """table utilisee pour afficher les bibliotheques d'objets:
  72. terrains, decors, creatures"""
  73. def __init__(self, parent = None):
  74. super(DmTableBiblio, self).__init__(parent)
  75. self.fichier = ""
  76. self.masquerColonneId()
  77. def defFichier(self, fichier):
  78. """definit le fichier de sauvegarde qui la source des donnees de la table"""
  79. self.fichier = fichier
  80. def initAffichage(self):
  81. """fait les differents reglages relatifs a l'apparence"""
  82. self.setColumnWidth(0, 0)
  83. self.setIconSize(QSize(30,20))
  84. self.horizontalHeader().setStretchLastSection(True)
  85. def remplir(self):
  86. """remplit la table avec les donnees contenues dans le dictionnaire de la savuvegarde"""
  87. dico = afficheSvg(self.fichier)
  88. self.majEnCours = True
  89. self.setSortingEnabled(False)
  90. index = 0
  91. for elt in dico:
  92. objet = dico[elt]
  93. self.insertRow(int(index))
  94. #code de l'objet
  95. self.setItem(int(index),0,QTableWidgetItem(QString.fromUtf8(elt)))
  96. #icone et nom
  97. icon = QIcon("img\\"+objet.icone())
  98. item = QTableWidgetItem(icon,QString.fromUtf8(objet.nom))
  99. self.setItem(int(index),1,item)
  100. index += 1
  101. self.sizeHintForColumn(1)
  102. self.setSortingEnabled(True)
  103. self.sortItems(1)
  104. self.majEnCours = False
  105. def maj(self):
  106. self.vider()
  107. self.remplir()
  108. def actuel(self):
  109. """renvoie l'objet actuellement selectionne"""
  110. objet = None
  111. index = self.item(self.currentRow(), 0)
  112. if index > 0:
  113. objet = charger(self.fichier, str(index.text().toUtf8()))
  114. return objet
  115. class DmTableAttributsPi(DmTableWidget):
  116. """table utilisee pour afficher les attributs d'un pion dans le panneau Pi"""
  117. def __init__(self, parent = None):
  118. super(DmTableBiblio, self).__init__(parent)
  119. self.fichier = ""
  120. self.masquerColonneId()
  121. def defFichier(self, fichier):
  122. """definit le fichier de sauvegarde qui la source des donnees de la table"""
  123. self.fichier = fichier
  124. def initAffichage(self):
  125. """fait les differents reglages relatifs a l'apparence"""
  126. self.setColumnWidth(0, 0)
  127. self.setIconSize(QSize(30,20))
  128. self.horizontalHeader().setStretchLastSection(True)
  129. def remplir(self):
  130. """remplit la table avec les donnees contenues dans le dictionnaire de la savuvegarde"""
  131. dico = afficheSvg(self.fichier)
  132. self.majEnCours = True
  133. self.setSortingEnabled(False)
  134. index = 0
  135. for elt in dico:
  136. objet = dico[elt]
  137. self.insertRow(int(index))
  138. #code de l'objet
  139. self.setItem(int(index),0,QTableWidgetItem(QString.fromUtf8(elt)))
  140. #icone et nom
  141. icon = QIcon("img\\"+objet.icone())
  142. item = QTableWidgetItem(icon,QString.fromUtf8(objet.nom))
  143. self.setItem(int(index),1,item)
  144. index += 1
  145. self.sizeHintForColumn(1)
  146. self.setSortingEnabled(True)
  147. self.sortItems(1)
  148. self.majEnCours = False
  149. def maj(self):
  150. self.vider()
  151. self.remplir()
  152. def actuel(self):
  153. """renvoie l'objet actuellement selectionne"""
  154. objet = None
  155. index = self.item(self.currentRow(), 0)
  156. if index > 0:
  157. objet = charger(self.fichier, str(index.text().toUtf8()))
  158. return objet
  159. class DmTableMenu(QTableWidget):
  160. """table utilisee comme barre d'onglets verticale"""
  161. def __init__(self, parent = None):
  162. super(DmTableMenu, self).__init__(parent)
  163. def setItem(self, ligne, colonne, item):
  164. super(DmTableMenu, self).setItem(ligne, colonne, item)
  165. if ligne == 0:
  166. self.setItemSelected(item, True)
  167. class DmFrameInf_Combattant(QGroupBox):
  168. """frame d'information (combattant)"""
  169. def __init__(self, parent = None):
  170. super(DmFrameInf_Combattant, self).__init__(parent)
  171. def maj(self, combattant):
  172. self.setVisible((combattant != None))
  173. if combattant:
  174. self.findChild(DmLabel, "inf_pionNom").majTexte(combattant.nom)
  175. self.findChild(DmLabel, "inf_pionImage").chargerImage("img\\"+combattant.img.nomFichier)
  176. self.findChild(DmLabel, "inf_pionEffet").setVisible(False)
  177. class DmFrameInf_Decor(QGroupBox):
  178. """frame d'information (decor)"""
  179. def __init__(self, parent = None):
  180. super(DmFrameInf_Decor, self).__init__(parent)
  181. def maj(self, decor):
  182. self.setVisible((decor != None))
  183. if decor:
  184. self.findChild(DmLabel, "inf_decorNom").majTexte(decor.nom)
  185. self.findChild(DmLabel, "inf_decorImage").chargerImage("img\\"+decor.img.nomFichier)
  186. class DmFrameInf_Case(QGroupBox):
  187. """frame d'information (case)"""
  188. def __init__(self, parent = None):
  189. super(DmFrameInf_Case, self).__init__(parent)
  190. def maj(self, case):
  191. self.setVisible((case != None))
  192. if len(case.terrain.nom) > 0:
  193. self.findChild(DmLabel, "inf_caseTerrain").majTexte(case.terrain.nom)
  194. else:
  195. self.findChild(DmLabel, "inf_caseTerrain").majTexte("Case")
  196. self.findChild(DmLabel, "inf_caseCoord").majTexte("X: {} Y: {}".format(case.x, case.y))
  197. self.findChild(DmLabel, "inf_caseAltitude").majTexte("Alt.: {}".format(case.altitude))
  198. if case.effetActif != "":
  199. self.findChild(DmLabel, "inf_caseEffet").chargerImage("img\\"+case.imgEffet[case.effetActif])
  200. else:
  201. self.findChild(DmLabel, "inf_caseEffet").clear()