Modes.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. #from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. """les modes d'interaction permettent l'interaction
  4. entre l'interface (l'utilisateur) et le plateau de combat.
  5. Un seul mode ne peut etre actif a la fois
  6. Cette classe doit permettre de recevoir les commandes de l'utilisateur
  7. de maniere a produire un resultat unique (cases peintes, pion deplace...)"""
  8. from PyQt4.QtCore import *
  9. from PyQt4.QtGui import *
  10. from EntreeSortie import EntreeSortie
  11. import Actions
  12. import regles
  13. from Pion import Pion
  14. from Combattant import Combattant
  15. from Decor import Decor
  16. import dmK
  17. class ModeBase(object):
  18. """mode de base: tous les modes heritent de cette classe"""
  19. def __init__(self, plateau):
  20. self.plateau = plateau
  21. #le mode est il active
  22. self._actif = False
  23. #le dragmode est il active sur la QGraphicsView
  24. self._activerDragMode = 0
  25. #curseur de la QGraphicsView
  26. self._sourceCurseur = ""
  27. #met le focus sur la QGraphicsView a l'activation
  28. self._focus = False
  29. def nom(self):
  30. return self.__class__.__name__
  31. def activer(self, param = None):
  32. """active le mode"""
  33. self.activerCurseur()
  34. if self._focus:
  35. self.plateau.fenetre.ui.cbt_vue.setFocus()
  36. self._actif = True
  37. def desactiver(self):
  38. """desactive le mode"""
  39. self.desactiverCurseur()
  40. self.plateau.fenetre.ui.cbt_vue.setDragMode(1)
  41. self._actif = False
  42. def reinit(self):
  43. """remet les variables a 0 et reactive le mode"""
  44. pass
  45. def activerCurseur(self):
  46. self.plateau.fenetre.ui.cbt_vue.setDragMode(self._activerDragMode)
  47. curseurPix = QPixmap(self._sourceCurseur)
  48. if not curseurPix.isNull():
  49. curseur = QCursor(curseurPix, 0, curseurPix.height())
  50. self.plateau.fenetre.ui.cbt_vue.setCursor(curseur)
  51. def desactiverCurseur(self):
  52. self.plateau.fenetre.ui.cbt_vue.setCursor(QCursor(Qt.ArrowCursor))
  53. ### gestion des evenements souris
  54. # clic gauche
  55. def clic_combattant(self, num):
  56. return False
  57. def clic_decor(self, num):
  58. return False
  59. def clic_case(self, coord):
  60. return False
  61. def clic_es(self, es):
  62. #clic sur une entree/sortie
  63. return False
  64. #double clic gauche
  65. def doubleClic_combattant(self, num):
  66. return False
  67. def doubleClic_decor(self, num):
  68. return False
  69. def doubleClic_case(self, coord):
  70. return False
  71. #survol de la souris (entree)
  72. def survol_combattant(self, num):
  73. return False
  74. def survol_decor(self, num):
  75. return False
  76. def survol_case(self, coord):
  77. return False
  78. #survol de la souris (sortie)
  79. def finSurvol_combattant(self, num):
  80. return False
  81. def finSurvol_decor(self, num):
  82. return False
  83. def finSurvol_case(self, coord):
  84. return False
  85. #survol de la souris avec clic gauche enfonce (entree)
  86. def survolClic_combattant(self, event):
  87. return False
  88. def survolClic_decor(self, event):
  89. return False
  90. def survolClic_case(self, coord):
  91. return False
  92. #autre
  93. def clicGauche(self, event):
  94. return False
  95. def finClicGauche(self, event):
  96. return False
  97. def mouvementSouris(self, event):
  98. return False
  99. def toucheClavier(self, event):
  100. return False
  101. def clicDroit(self, event):
  102. return False
  103. class ModeBaseCp(ModeBase):
  104. """mode servant de base a tous les modes lies a la creation de plateau"""
  105. def __init__(self, plateau):
  106. super(ModeBaseCp, self).__init__(plateau)
  107. self.type = "cp"
  108. def activer(self, param = None):
  109. self.plateau.fenetre.ui.cbt_modeCreation.setChecked(True)
  110. super(ModeBaseCp, self).activer(param)
  111. def desactiver(self):
  112. self.plateau.fenetre.ui.cbt_modeCreation.setChecked(False)
  113. super(ModeBaseCp, self).desactiver()
  114. def clicDroit(self, event):
  115. self.plateau.activerMode(StandardCp)
  116. return True
  117. class ModeBasePi(ModeBase):
  118. """mode servant de base a tous les modes lies aux actions des combattants"""
  119. def __init__(self, plateau):
  120. super(ModeBasePi, self).__init__(plateau)
  121. self.type = "pi"
  122. def activer(self, param = None):
  123. self.plateau.fenetre.ui.cbt_modeCombat.setChecked(True)
  124. super(ModeBasePi, self).activer(param)
  125. def desactiver(self):
  126. self.plateau.fenetre.ui.cbt_modeCombat.setChecked(False)
  127. super(ModeBasePi, self).desactiver()
  128. def clicDroit(self, event):
  129. self.plateau.activerMode(StandardPi)
  130. return True
  131. ### --------------------------------------- ####
  132. class StandardCp(ModeBaseCp):
  133. """mode standard en creation de plateau"""
  134. def __init__(self, plateau):
  135. super(StandardCp, self).__init__(plateau)
  136. self._sourceCurseur = ""
  137. self._focus = False
  138. self._activerDragMode = True
  139. def activer(self, param):
  140. """active le mode"""
  141. self.plateau.fenetre.ui.cbt_panneauDroite.setCurrentIndex(1)
  142. if len(self.plateau.caches) > 0:
  143. for coord in self.plateau.cases:
  144. self.plateau.cases[coord].majCache()
  145. super(StandardCp, self).activer()
  146. def clic_combattant(self, num):
  147. self.plateau.activerMode(DeplacementPion, num)
  148. return True
  149. def clic_decor(self, num):
  150. self.plateau.activerMode(DeplacementPion, num)
  151. return True
  152. def clic_es(self, es):
  153. self.plateau.activerMode(EditionEntreeSortie, es)
  154. return True
  155. class MajCases(ModeBaseCp):
  156. """mode de mise a jour des cases (terrain, couleur, effet special)"""
  157. def __init__(self, plateau):
  158. super(MajCases, self).__init__(plateau)
  159. self._sourceCurseur = ":/interface/16/ressource/pinceau_16.png"
  160. self._focus = True
  161. self._param = None #parametre avec lequel on mettra a jour la case
  162. self._caseSurvolee = None
  163. def activer(self, param):
  164. """active le mode"""
  165. self.majParam(param)
  166. super(MajCases, self).activer()
  167. def desactiver(self):
  168. """desactive le mode"""
  169. self.plateau.pinceau.reinit()
  170. super(MajCases, self).desactiver()
  171. def majParam(self, param):
  172. self._param = param
  173. def param(self):
  174. return self._param
  175. def clic_case(self, coord):
  176. #demarre une operation de peinture des cases
  177. self.plateau.pinceau.demarrer(coord)
  178. return True
  179. def survolClic_case(self, coord):
  180. accepte = False
  181. if coord != self._caseSurvolee:
  182. self.plateau.pinceau.maj(coord)
  183. accepte = True
  184. return accepte
  185. def finClicGauche(self, event):
  186. accepte = False
  187. if self.plateau.pinceau.estActif():
  188. for coord in self.plateau.pinceau.selection():
  189. self.plateau.cases[coord].majTerrain(self._param)
  190. self.plateau.cases[coord].majAltitude(self.plateau.fenetre.ui.cp_valeurAltitude.value())
  191. self.plateau.pinceau.reinit()
  192. self.reinit()
  193. accepte = True
  194. return accepte
  195. def toucheClavier(self, event):
  196. accepte = False
  197. if event.key() == Qt.Key_Up:
  198. self.plateau.fenetre.ui.epaisseurPinceau.setValue(self.plateau.fenetre.ui.epaisseurPinceau.value()+1)
  199. accepte = True
  200. elif event.key() == Qt.Key_Down:
  201. self.plateau.fenetre.ui.epaisseurPinceau.setValue(self.plateau.fenetre.ui.epaisseurPinceau.value()-1)
  202. accepte = True
  203. return accepte
  204. class MajCasesEffet(MajCases):
  205. """mode de mise a jour des cases (effets speciaux)"""
  206. def __init__(self, plateau):
  207. super(MajCasesEffet, self).__init__(plateau)
  208. self._sourceCurseur = ":/interface/16/ressource/pinceau_16.png"
  209. def finClicGauche(self, event):
  210. accepte = False
  211. if self.plateau.pinceau.estActif():
  212. for coord in self.plateau.pinceau.selection():
  213. self.plateau.cases[coord].majEffet(self._param)
  214. self.plateau.pinceau.reinit()
  215. self.reinit()
  216. accepte = True
  217. return accepte
  218. class Pipette(ModeBaseCp):
  219. """mode pipette: on preleve la couleur ou le terrain d'une case"""
  220. def __init__(self, plateau):
  221. super(Pipette, self).__init__(plateau)
  222. self._sourceCurseur = ":/interface/16/ressource/seringue_16.png"
  223. def activerCurseur(self):
  224. super(Pipette, self).activerCurseur()
  225. def clic_case(self, coord):
  226. self.plateau.activerMode(MajCases, self.plateau.cases[coord].terrain)
  227. return True
  228. class ZonePlacement(ModeBaseCp):
  229. """mode de definition de la/les zones de placement des joueurs"""
  230. def __init__(self, plateau):
  231. super(ZonePlacement, self).__init__(plateau)
  232. self._sourceCurseur = ":/interface/16/ressource/pinceau.png"
  233. self._focus = True
  234. def activerCurseur(self):
  235. super(ZonePlacement, self).activerCurseur()
  236. def activer(self, param = None):
  237. self.plateau.pinceau.majForme("rectP")
  238. self.plateau.pinceau.verrouillerForme(True)
  239. super(ZonePlacement, self).activer()
  240. def desactiver(self):
  241. self.plateau.pinceau.reinit()
  242. super(ZonePlacement, self).desactiver()
  243. def clic_case(self, coord):
  244. #demarre une operation de peinture des cases
  245. self.plateau.pinceau.demarrer(coord)
  246. return True
  247. def survolClic_case(self, coord):
  248. self.plateau.pinceau.maj(coord)
  249. return True
  250. def finClicGauche(self, coord):
  251. if self.plateau.pinceau.estActif():
  252. if len(self.plateau.pinceau.selection()) > 0:
  253. self.plateau.majZonePlacement(self.plateau.pinceau.selection())
  254. return True
  255. class EditerCaches(ModeBaseCp):
  256. """mode de creation/ edition des caches"""
  257. def __init__(self, plateau):
  258. super(EditerCaches, self).__init__(plateau)
  259. self._sourceCurseur = ":/interface/16/ressource/pinceau_16.png"
  260. self._focus = True
  261. self._numCache = None
  262. def activer(self, param = None):
  263. self._numCache = param
  264. self.plateau.pinceau.majForme("rectP")
  265. super(EditerCaches, self).activer()
  266. def desactiver(self):
  267. self.plateau.pinceau.reinit()
  268. super(EditerCaches, self).desactiver()
  269. def clic_case(self, coord):
  270. self.plateau.pinceau.demarrer(coord)
  271. return True
  272. def survolClic_case(self, coord):
  273. self.plateau.pinceau.maj(coord)
  274. return True
  275. def finClicGauche(self, coord):
  276. accepte = False
  277. if self.plateau.pinceau.estActif():
  278. if len(self.plateau.pinceau.selection()) > 0:
  279. if self._numCache != None:
  280. self.plateau.editerFormeCache(self._numCache, self.plateau.pinceau.selection())
  281. else:
  282. self.plateau.nouveauCache(self.plateau.pinceau.selection())
  283. self.plateau.activerMode(StandardCp)
  284. accepte = True
  285. return accepte
  286. class EntreeSortieBase(ModeBaseCp):
  287. """mode de base de la gestion des entrees et sorties du plateau"""
  288. def __init__(self, plateau):
  289. super(EntreeSortieBase, self).__init__(plateau)
  290. self._sourceCurseur = ":/interface/16/ressource/pinceau_16.png"
  291. self._focus = True
  292. def activerCurseur(self):
  293. super(EntreeSortieBase, self).activerCurseur()
  294. def activer(self, param):
  295. self.es = param
  296. self.es.saisir()
  297. super(EntreeSortieBase, self).activer()
  298. def desactiver(self):
  299. if not self.es.estPositionne:
  300. self.es.prepareGeometryChange()
  301. self.es.plateau = None
  302. self.plateau.removeItem(self.es)
  303. if self.es in self.plateau.entreesSorties:
  304. self.plateau.entreesSorties.remove(self.es)
  305. super(EntreeSortieBase, self).desactiver()
  306. def mouvementSouris(self, event):
  307. accepte = False
  308. if event.buttons() != Qt.LeftButton:
  309. if not self.es.estPositionne:
  310. self.es.majProjection(event.scenePos())
  311. accepte = True
  312. return accepte
  313. def toucheClavier(self, event):
  314. accepte = False
  315. if event.key() == Qt.Key_Delete:
  316. self.es.supprimer()
  317. if self.es in self.plateau.entreesSorties:
  318. self.plateau.entreesSorties.remove(self.es)
  319. self.plateau.activerMode(StandardCp)
  320. accepte = True
  321. elif event.key() == Qt.Key_Right:
  322. self.es.nbRotations += 1
  323. self.es.majProjection()
  324. accepte = True
  325. elif event.key() == Qt.Key_Left:
  326. self.es.nbRotations -= 1
  327. self.es.majProjection()
  328. accepte = True
  329. return accepte
  330. class CreationEntreeSortie(EntreeSortieBase):
  331. """mode de creation des entrees / sorties"""
  332. def __init__(self, plateau):
  333. super(CreationEntreeSortie, self).__init__(plateau)
  334. def activer(self, typeES):
  335. self.plateau.fenetre.ui.cbt_vue.fitInView(self.plateau.sceneRect(), Qt.KeepAspectRatio)
  336. param = EntreeSortie(self.plateau, typeES)
  337. param.creerForme()
  338. super(CreationEntreeSortie, self).activer(param)
  339. def clicGauche(self, event):
  340. self.es.positionner()
  341. self.plateau.entreesSorties.append(self.es)
  342. self.plateau.activerMode(StandardCp)
  343. return True
  344. class EditionEntreeSortie(EntreeSortieBase):
  345. """mode d'edition des entrees / sorties"""
  346. def __init__(self, plateau):
  347. super(EditionEntreeSortie, self).__init__(plateau)
  348. def clicGauche(self, event):
  349. accepte = False
  350. if not event.isAccepted():
  351. self.es.positionner()
  352. self.plateau.activerMode(StandardCp)
  353. accepte = True
  354. return accepte
  355. class CreationPion(ModeBaseCp):
  356. """mode de creation de pions (combattant ou decor)"""
  357. def __init__(self, plateau):
  358. super(CreationPion, self).__init__(plateau)
  359. self._focus = True
  360. self._pion = None
  361. def activer(self, pion):
  362. self._pion = pion
  363. self.plateau.proj.creer(self._pion)
  364. super(CreationPion, self).activer()
  365. def desactiver(self):
  366. self.plateau.proj.desactiver()
  367. self._pion = None
  368. super(CreationPion, self).desactiver()
  369. def survol_case(self, coord):
  370. accepte = False
  371. if self._pion:
  372. self.plateau.proj.majCoord(coord)
  373. accepte = True
  374. return accepte
  375. def clic_case(self, coord):
  376. accepte = False
  377. if self._pion:
  378. if not self.plateau.cases[coord].estOccupee():
  379. if isinstance(self._pion, Combattant) and dmK.touchesEnfoncees() == ["maj"]:
  380. nouveauZ = self.plateau.dialogueVol(self._pion.z)
  381. self._pion.majZ(nouveauZ)
  382. self.plateau.creerPion(self._pion)
  383. accepte = True
  384. return accepte
  385. def toucheClavier(self, event):
  386. accepte = False
  387. if self._pion:
  388. if event.key() == Qt.Key_Right:
  389. self.plateau.proj.majRotation(1)
  390. accepte = True
  391. elif event.key() == Qt.Key_Left:
  392. self.plateau.proj.majRotation(-1)
  393. accepte = True
  394. return accepte
  395. class SuppressionPion(ModeBaseCp):
  396. """mode de suppression de pions (combattant ou decor)"""
  397. def __init__(self, plateau):
  398. super(SuppressionPion, self).__init__(plateau)
  399. self._sourceCurseur = ":/interface/16/ressource/gomme_16.png"
  400. self._enSurbrillance = []
  401. self._focus = True
  402. self._cible = ""
  403. def activer(self, cible = Pion):
  404. #cible est le nom de la classe des objets a supprimer
  405. self._cible = cible
  406. super(SuppressionPion, self).activer()
  407. def desactiver(self):
  408. for num in self._enSurbrillance:
  409. if num >= 10000:
  410. if num in self.plateau.decors:
  411. self.plateau.decors[num].surbrillance(False)
  412. else:
  413. if num in self.plateau.combattants:
  414. self.plateau.combattants[num].surbrillance(False)
  415. super(SuppressionPion, self).desactiver()
  416. def clicGauche(self, event):
  417. """supprime le pion sous le clic. S'il y en a plusieurs,
  418. supprime le premier de la pile"""
  419. accepte = False
  420. num = None
  421. item = self.plateau.itemAt(event.scenePos())
  422. if isinstance(item.parentItem(), self._cible):
  423. num = item.parentItem().numero
  424. else:
  425. if item.parentItem() != None:
  426. if isinstance(item.parentItem().parentItem(), self._cible):
  427. num = item.parentItem().parentItem().numero
  428. if num:
  429. self.plateau.pionSupprimer(num)
  430. accepte = True
  431. return accepte
  432. def survol_combattant(self, num):
  433. accepte = False
  434. if self._cible == Combattant:
  435. self.plateau.combattants[num].surbrillance(True, 0.4)
  436. self._enSurbrillance.append(num)
  437. accepte = True
  438. return accepte
  439. def finSurvol_combattant(self, num):
  440. accepte = False
  441. if self._cible == Combattant:
  442. self.plateau.combattants[num].surbrillance(False)
  443. accepte = True
  444. return accepte
  445. def survol_decor(self, num):
  446. accepte = False
  447. if self._cible == Decor:
  448. self.plateau.decors[num].surbrillance(True, 0.4)
  449. self._enSurbrillance.append(num)
  450. accepte = True
  451. return accepte
  452. def finSurvol_decor(self, num):
  453. accepte = False
  454. if self._cible == Decor:
  455. self.plateau.decors[num].surbrillance(False)
  456. accepte = True
  457. return accepte
  458. class DeplacementPion(ModeBaseCp):
  459. """mode de deplacement de pions (combattant ou decor) en mode creation
  460. attention: different des actions de type deplacement qu'effectuent les pions en mode Combat"""
  461. def __init__(self, plateau):
  462. super(DeplacementPion, self).__init__(plateau)
  463. self._num = 0
  464. def activer(self, num):
  465. self._num = num
  466. if self._num < 10000:
  467. pion = self.plateau.combattants[self._num]
  468. else:
  469. pion = self.plateau.decors[self._num]
  470. self.plateau.proj.creer(pion)
  471. self.deplace = False
  472. super(DeplacementPion, self).activer()
  473. def desactiver(self):
  474. self.plateau.proj.desactiver()
  475. self._num = 0
  476. super(DeplacementPion, self).desactiver()
  477. def survol_case(self, coord):
  478. accepte = False
  479. if self._num > 0:
  480. self.plateau.proj.majCoord(coord)
  481. self.deplace = True
  482. accepte = True
  483. return accepte
  484. def clic_case(self, coord):
  485. accepte = False
  486. if self._num > 0:
  487. if self.deplace:
  488. if self._num < 10000:
  489. pion = self.plateau.combattants[self._num]
  490. if dmK.touchesEnfoncees() == ["maj"]:
  491. nouveauZ = self.plateau.dialogueVol(pion.z)
  492. pion.majZ(nouveauZ)
  493. else:
  494. pion = self.plateau.decors[self._num]
  495. pion.majPosition(self.plateau.proj.coord(), self.plateau.proj.nbRotations())
  496. accepte = True
  497. return accepte
  498. def toucheClavier(self, event):
  499. accepte = False
  500. if self._num > 0:
  501. if event.key() == Qt.Key_Right:
  502. self.plateau.proj.majRotation(1)
  503. self.deplace = True
  504. accepte = True
  505. elif event.key() == Qt.Key_Left:
  506. self.plateau.proj.majRotation(-1)
  507. self.deplace = True
  508. accepte = True
  509. return accepte
  510. #-----------------------------------------------
  511. #-----------------------------------------------
  512. class StandardPi(ModeBasePi):
  513. """mode standard de la manipulation de pion en combat"""
  514. def __init__(self, plateau):
  515. super(StandardPi, self).__init__(plateau)
  516. self._focus = False
  517. self._activerDragMode = True
  518. def activer(self, num):
  519. self.plateau.fenetre.ui.cbt_panneauDroite.setCurrentIndex(3)
  520. if len(self.plateau.caches) > 0:
  521. for coord in self.plateau.cases:
  522. self.plateau.cases[coord].majCache()
  523. super(StandardPi, self).activer()
  524. def clic_combattant(self, num):
  525. self.plateau.activerMode(PionSelectionne, num)
  526. return True
  527. def clic_decor(self, num):
  528. self.plateau.activerMode(PionSelectionne, num)
  529. return True
  530. def nouvelleAction(self, action):
  531. pass
  532. class PionSelectionne(ModeBasePi):
  533. """mode active a la selection d'un pion combattant"""
  534. def __init__(self, plateau):
  535. super(PionSelectionne, self).__init__(plateau)
  536. self._focus = True
  537. self._num = None
  538. self._action = None
  539. def pion(self):
  540. """retourne la ref du pion actuellement selectionne"""
  541. retour = None
  542. if self._num in self.plateau.combattants:
  543. retour = self.plateau.combattants[self._num]
  544. elif self._num in self.plateau.decors:
  545. retour = self.plateau.decors[self._num]
  546. return retour
  547. def activer(self, num):
  548. self._num = num
  549. self.plateau.fenetre.ui.cbt_panneauDroite.setCurrentIndex(2)
  550. self.pion().afficheOmbreSelection(True)
  551. self.plateau.majPanneauPi()
  552. super(PionSelectionne, self).activer()
  553. def desactiver(self):
  554. if self._action:
  555. self._action.desactiver()
  556. self._action = None
  557. self.pion().afficheOmbreSelection(False)
  558. self._num = None
  559. self.plateau.majPanneauPi()
  560. super(PionSelectionne, self).desactiver()
  561. def nouvelleAction(self, action):
  562. if self._action:
  563. self._action.desactiver()
  564. self._action = None
  565. self._action = action()
  566. self._action.activer(self.plateau, self._num)
  567. def action(self):
  568. return self._action
  569. def survol_case(self, coord):
  570. accepte = False
  571. if self._action:
  572. self._action.majCoordCible(coord)
  573. accepte = True
  574. return accepte
  575. def clic_case(self, coord):
  576. accepte = False
  577. if self._action:
  578. self._action.valider()
  579. if not self._action.enCours(): self._action = None
  580. accepte = True
  581. return accepte
  582. def clicDroit(self, event):
  583. accepte = False
  584. if self._action != None:
  585. self._action.desactiver()
  586. self._action = None
  587. accepte = True
  588. else:
  589. accepte = super(PionSelectionne, self).clicDroit(event)
  590. return accepte
  591. def toucheClavier(self, event):
  592. accepte = False
  593. if self._num > 0:
  594. if event.key() == Qt.Key_Right:
  595. self._action.pivoter(1)
  596. accepte = True
  597. elif event.key() == Qt.Key_Left:
  598. self._action.pivoter(-1)
  599. accepte = True
  600. return accepte