GridViewerCell.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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, show_label=False):
  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. self.label.setVisible(show_label)
  27. k = 0
  28. if (self.x % 2) != 0:
  29. k = 0.5
  30. if shape == geometry.FLAT_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)