GridViewerCell.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. class GridViewerCell(QGraphicsPolygonItem):
  9. def __init__(self, gridViewer, x, y):
  10. super(GridViewerCell, self).__init__()
  11. self.gridViewer = gridViewer
  12. self.x = x
  13. self.y = y
  14. self.selected = False
  15. def generate(self, points, show_label=False):
  16. qpolygon = QPolygonF([QPointF(xp, yp) for xp, yp in points])
  17. self.setPolygon(qpolygon)
  18. pen = QPen()
  19. pen.setWidth(3)
  20. self.setPen(pen)
  21. self.setFlag(QGraphicsItem.ItemIsFocusable)
  22. self.label = QGraphicsSimpleTextItem("{}-{}".format(self.x, self.y), parent=self)
  23. self.label.setVisible(show_label)
  24. # k = 0
  25. # if (self.x % 2) != 0:
  26. # k = 0.5
  27. # if shape == geometry.FLAT_HEX:
  28. # self.label.setPos(QPointF(((self.x * 0.866) + 0.2886) * scale, (self.y + k + 0.5) * scale))
  29. # else:
  30. # self.label.setPos(QPointF(self.x * scale, self.y * scale))
  31. font = QFont()
  32. font.setPointSize(20)
  33. self.label.setFont(font)
  34. def select(self):
  35. self.setBrush(QBrush(QColor(200, 0, 0, 100)))
  36. self.selected = True
  37. self.gridViewer.add_to_selection(self.x, self.y)
  38. def unselect(self):
  39. self.setBrush(QBrush())
  40. self.selected = False
  41. self.gridViewer.remove_from_selection(self.x, self.y)
  42. def mousePressEvent(self, *args, **kwargs):
  43. if self.selected:
  44. self.unselect()
  45. else:
  46. self.select()
  47. def show_label(self, visible):
  48. self.label.setVisible(visible)