EntreeSortie.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #from __future__ import unicode_literals
  2. # -*- coding: utf-8 -*-
  3. from __future__ import division
  4. from PyQt4.QtCore import *
  5. from PyQt4.QtGui import *
  6. import Modes
  7. class EntreeSortie(QGraphicsPolygonItem):
  8. """marqueur d'entree sortie du plateau"""
  9. def __init__(self, plateau, entreeSortie = "", parent=None):
  10. """initialisation de la fenetre"""
  11. super (EntreeSortie, self).__init__()
  12. self.plateau = plateau
  13. self.entreeSortie = entreeSortie
  14. self.position = QPointF(0,0)
  15. self.nbRotations = 0
  16. self.prepareGeometryChange()
  17. self.setFlag(QGraphicsItem.ItemIsFocusable)
  18. self.estPositionne = False
  19. def __getstate__(self):
  20. state = {key:value for key, value in self.__dict__.items() if key in ["entreeSortie", "position", "nbRotations"]}
  21. return (state)
  22. def __setstate__(self, state):
  23. self.__dict__ = state
  24. def creerForme(self):
  25. """cree le polygone graphique"""
  26. polygone = QPolygonF()
  27. polygone << QPointF(60,0) \
  28. << QPointF(-60,60) \
  29. << QPointF(-60,-60)
  30. if self.entreeSortie == "E":
  31. couleur = QColor("green")
  32. self.txtEtiquette = "Entree"
  33. elif self.entreeSortie == "S":
  34. couleur = QColor("red")
  35. self.txtEtiquette = "Sortie"
  36. if couleur.isValid():
  37. self.setBrush(couleur)
  38. self.setPen(QPen(couleur))
  39. self.setPolygon(polygone)
  40. self.setTransformOriginPoint(0,0)
  41. self.plateau.addItem(self)
  42. def recreer(self, plateau):
  43. """recreation et repositionnement dans le cadre d'un chargement du plateau"""
  44. self.plateau = plateau
  45. super(EntreeSortie, self).__init__()
  46. self.creerForme()
  47. self.setPos(self.position)
  48. self.setRotation(self.nbRotations*90)
  49. self.positionner()
  50. def supprimer(self):
  51. self.prepareGeometryChange()
  52. self.plateau.removeItem(self)
  53. self.plateau = None
  54. def saisir(self):
  55. """le polygone va suivre la souris et etre semi transparent
  56. jusqu'au prochain clic sur le plateau"""
  57. self.setOpacity(0.5)
  58. self.estPositionne = False
  59. def majProjection(self, position = None):
  60. """met a jour la projection de la position de l'objet"""
  61. if position != None:
  62. self.setPos(position)
  63. self.position = position
  64. self.setRotation(90*self.nbRotations)
  65. def positionner(self):
  66. """la projection est validee, le marqueur est laisse a cette position"""
  67. self.setOpacity(1)
  68. self.estPositionne = True
  69. def mousePressEvent(self, event):
  70. if event.button() == 1:
  71. if self.estPositionne:
  72. self.plateau.modeActif.clic_es(self)
  73. event.accept()
  74. else:
  75. event.ignore()