GridViewerCell.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. '''
  2. Created on 26 nov. 2016
  3. @author: olinox
  4. '''
  5. from PyQt5.QtCore import QPointF
  6. from PyQt5.QtGui import QPolygonF, QPen, QBrush, QColor, QFont
  7. from PyQt5.QtWidgets import QGraphicsPolygonItem, QGraphicsItem, \
  8. QGraphicsSimpleTextItem
  9. from pypog import geometry
  10. from pypog import graphic
  11. class GridViewerCell(QGraphicsPolygonItem):
  12. def __init__(self, gridViewer, x, y):
  13. super(GridViewerCell, self).__init__()
  14. self.gridViewer = gridViewer
  15. self.x = x
  16. self.y = y
  17. self.selected = False
  18. def generate(self, shape, scale=120):
  19. points = [QPointF(xp, yp) for xp, yp in graphic.polygon(shape, self.x, self.y, scale)]
  20. qpolygon = QPolygonF( points )
  21. self.setPolygon(qpolygon)
  22. pen = QPen()
  23. pen.setWidth(3)
  24. self.setPen(pen)
  25. self.setFlag(QGraphicsItem.ItemIsFocusable)
  26. self.label = QGraphicsSimpleTextItem("{}-{}".format(self.x, self.y), parent=self)
  27. k = 0
  28. if (self.x % 2) != 0:
  29. k = 0.5
  30. if shape == geometry.HEX:
  31. self.label.setPos(QPointF(((self.x*0.866)+0.2886)*scale, (self.y+k+0.5)*scale))
  32. else:
  33. self.label.setPos(QPointF(self.x*scale, self.y*scale))
  34. font = QFont()
  35. font.setPointSize(20)
  36. self.label.setFont( font )
  37. def select(self):
  38. self.setBrush( QBrush( QColor(200,0,0, 100) ) )
  39. self.selected = True
  40. self.gridViewer.add_to_selection(self.x, self.y)
  41. def unselect(self):
  42. self.setBrush( QBrush( ) )
  43. self.selected = False
  44. self.gridViewer.remove_from_selection(self.x, self.y)
  45. def mousePressEvent(self, *args, **kwargs):
  46. if self.selected:
  47. self.unselect()
  48. else:
  49. self.select()
  50. def show_label(self, visible):
  51. self.label.setVisible(visible)