Modes.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. """modes d'interaction avec le plateau"""
  2. from PyQt4.QtCore import *
  3. from PyQt4.QtGui import *
  4. from EntreeSortie import EntreeSortie
  5. class ModeBase(object):
  6. """mode de base: tous les modes heritent de cette classe"""
  7. def __init__(self, plateau):
  8. self.plateau = plateau
  9. #le mode est il active
  10. self._actif = False
  11. #le dragmode est il active sur la QGraphicsView
  12. self._activerDragMode = 0
  13. #curseur de la QGraphicsView
  14. self._sourceCurseur = ""
  15. #met le focus sur la QGraphicsView a l'activation
  16. self._focus = False
  17. def activer(self, param = None):
  18. """active le mode"""
  19. self.activerCurseur()
  20. if self._focus:
  21. self.plateau.fenetre.ui.cbt_vue.setFocus()
  22. self._actif = True
  23. def desactiver(self):
  24. """desactive le mode"""
  25. self.desactiverCurseur()
  26. self.plateau.fenetre.ui.cbt_vue.setDragMode(1)
  27. self._actif = False
  28. def reinit(self):
  29. """remet les variables a 0 et reactive le mode"""
  30. pass
  31. def activerCurseur(self):
  32. self.plateau.fenetre.ui.cbt_vue.setDragMode(self._activerDragMode)
  33. curseurPix = QPixmap(self._sourceCurseur)
  34. curseurPinceau = QCursor(curseurPix, 0, curseurPix.height())
  35. self.plateau.fenetre.ui.cbt_vue.setCursor(curseurPinceau)
  36. def desactiverCurseur(self):
  37. self.plateau.fenetre.ui.cbt_vue.setCursor(QCursor(Qt.ArrowCursor))
  38. ### gestion des evenements souris
  39. # clic gauche
  40. def clic_combattant(self, num):
  41. pass
  42. def clic_decor(self, num):
  43. pass
  44. def clic_case(self, coord):
  45. pass
  46. #double clic gauche
  47. def doubleClic_combattant(self, num):
  48. pass
  49. def doubleClic_decor(self, num):
  50. pass
  51. def doubleClic_case(self, coord):
  52. pass
  53. #survol de la souris (entree)
  54. def survol_combattant(self, num):
  55. pass
  56. def survol_decor(self, num):
  57. pass
  58. def survol_case(self, coord):
  59. pass
  60. #survol de la souris (sortie)
  61. def finSurvol_combattant(self, num):
  62. pass
  63. def finSurvol_decor(self, num):
  64. pass
  65. def finSurvol_case(self, coord):
  66. pass
  67. #survol de la souris avec clic gauche enfonce (entree)
  68. def survolClic_combattant(self, event):
  69. pass
  70. def survolClic_decor(self, event):
  71. pass
  72. def survolClic_case(self, coord):
  73. pass
  74. #autre
  75. def clicGauche(self, event):
  76. pass
  77. def finClicGauche(self, event):
  78. pass
  79. def mouvementSouris(self, event):
  80. pass
  81. def toucheClavier(self, event):
  82. pass
  83. ### --------------------------------------- ####
  84. class Standard(ModeBase):
  85. """mode standard"""
  86. def __init__(self, plateau):
  87. super(Standard, self).__init__(plateau)
  88. self._sourceCurseur = ""
  89. self._focus = False
  90. self.activerDragMode = True
  91. def clic_pion(self, num):
  92. pass
  93. #doit selectionner le pion
  94. class MajCases(ModeBase):
  95. """mode de mise a jour des cases (terrain, couleur, effet special)"""
  96. def __init__(self, plateau):
  97. super(MajCases, self).__init__(plateau)
  98. self._sourceCurseur = "img\\curseurPinceau.png"
  99. self._focus = True
  100. self._param = None #parametre avec lequel on mettra a jour la case
  101. def activer(self, param):
  102. """active le mode"""
  103. self.majParam(param)
  104. super(MajCases, self).activer()
  105. def desactiver(self):
  106. """desactive le mode"""
  107. self.plateau.pinceau.reinit()
  108. super(MajCases, self).desactiver()
  109. def majParam(self, param):
  110. self._param = param
  111. def param(self):
  112. return self._param
  113. def clic_case(self, coord):
  114. #demarre une operation de peinture des cases
  115. self.plateau.pinceau.demarrer(coord)
  116. def survolClic_case(self, coord):
  117. self.plateau.pinceau.maj(coord)
  118. def finClicGauche(self, event):
  119. if self.plateau.pinceau.estActif():
  120. for coord in self.plateau.pinceau.selection():
  121. if self._param.__class__.__name__ == "Terrain":
  122. self.plateau.cases[coord].majTerrain(self._param)
  123. elif self._param.__class__.__name__ == "QColor":
  124. if self._param.isValid():
  125. self.plateau.cases[coord].majTerrain(None)
  126. self.plateau.cases[coord].majCouleur(self._param)
  127. elif self._param.__class__.__name__ == "EffetCase":
  128. self.plateau.cases[coord].majEffet(self._param)
  129. self.plateau.pinceau.reinit()
  130. self.reinit()
  131. def toucheClavier(self, event):
  132. if event.key() == Qt.Key_Up:
  133. self.plateau.fenetre.ui.epaisseurPinceau.setValue(self.plateau.fenetre.ui.epaisseurPinceau.value()+1)
  134. elif event.key() == Qt.Key_Down:
  135. self.plateau.fenetre.ui.epaisseurPinceau.setValue(self.plateau.fenetre.ui.epaisseurPinceau.value()-1)
  136. class Pipette(ModeBase):
  137. """mode pipette: on preleve la couleur ou le terrain d'une case"""
  138. def __init__(self, plateau):
  139. super(ZonePlacement, self).__init__(plateau)
  140. self._sourceCurseur = "img\\curseurSeringue.png"
  141. def activerCurseur(self):
  142. super(Pipette, self).activerCurseur()
  143. def clic_case(self, coord):
  144. if len(case.terrain.nom) > 0:
  145. param = case.terrain
  146. else:
  147. param = case.couleur
  148. self.plateau.activerMode(Modes.CaseMaj, param)
  149. class ZonePlacement(ModeBase):
  150. """mode de definition de la/les zones de placement des joueurs"""
  151. def __init__(self, plateau):
  152. super(ZonePlacement, self).__init__(plateau)
  153. self._sourceCurseur = "img\\curseurPinceau.png"
  154. self._focus = True
  155. def activerCurseur(self):
  156. super(ZonePlacement, self).activerCurseur()
  157. def activer(self, param = None):
  158. self.plateau.pinceau.majForme("rectP")
  159. self.plateau.pinceau.verrouillerForme(True)
  160. super(ZonePlacement, self).activer()
  161. def desactiver(self):
  162. self.plateau.pinceau.reinit()
  163. super(ZonePlacement, self).desactiver()
  164. def clic_case(self, coord):
  165. #demarre une operation de peinture des cases
  166. self.plateau.pinceau.demarrer(coord)
  167. def survolClic_case(self, coord):
  168. self.plateau.pinceau.maj(coord)
  169. def finClicGauche(self, coord):
  170. if self.plateau.pinceau.estActif():
  171. if len(self.plateau.pinceau.selection()) > 0:
  172. self.plateau.majZonePlacement(self.plateau.pinceau.selection())
  173. class EntreesSorties(ModeBase):
  174. """mode de definition deentrees et sorties du plateau"""
  175. def __init__(self, plateau):
  176. super(EntreesSorties, self).__init__(plateau)
  177. self._sourceCurseur = "img\\curseurPinceau.png"
  178. self._focus = True
  179. def activerCurseur(self):
  180. super(EntreesSorties, self).activerCurseur()
  181. def activer(self, param):
  182. self.es = param
  183. self.es.creerForme()
  184. super(EntreesSorties, self).activer()
  185. def desactiver(self):
  186. if not self.es.estPositionne:
  187. self.es.prepareGeometryChange()
  188. self.es.plateau = None
  189. self.plateau.removeItem(self.es)
  190. super(EntreesSorties, self).desactiver()
  191. def mouvementSouris(self, event):
  192. if event.buttons() != Qt.LeftButton:
  193. if not self.es.estPositionne:
  194. self.es.majProjection(event.scenePos())
  195. def clicGauche(self, event):
  196. if not event.isAccepted():
  197. self.es.positionner()
  198. self.plateau.entreesSorties.append(self.es)
  199. self.desactiver()
  200. def toucheClavier(self, event):
  201. if event.key() == Qt.Key_Delete:
  202. self.desactiver()
  203. elif event.key() == Qt.Key_Right:
  204. self.es.nbRotations += 1
  205. self.es.majProjection()
  206. elif event.key() == Qt.Key_Left:
  207. self.es.nbRotations -= 1
  208. self.es.majProjection()