dm.py 10 KB

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