GridViewerCell.py 1.8 KB

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