| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- '''
- ** By Cro-Ki l@b, 2017 **
- '''
- from PyQt5.QtCore import QPointF
- from PyQt5.QtGui import QPolygonF, QPen, QBrush, QColor, QFont
- from PyQt5.QtWidgets import QGraphicsPolygonItem, QGraphicsItem, \
- QGraphicsSimpleTextItem
- from pypog import geometry
- from pypog import graphic
- class GridViewerCell(QGraphicsPolygonItem):
- def __init__(self, gridViewer, x, y):
- super(GridViewerCell, self).__init__()
- self.gridViewer = gridViewer
- self.x = x
- self.y = y
- self.selected = False
- def generate(self, shape, scale=120, show_label=False):
- points = [QPointF(xp, yp) for xp, yp in graphic.g_cell(shape, self.x, self.y, scale)]
- qpolygon = QPolygonF(points)
- self.setPolygon(qpolygon)
- pen = QPen()
- pen.setWidth(3)
- self.setPen(pen)
- self.setFlag(QGraphicsItem.ItemIsFocusable)
- self.label = QGraphicsSimpleTextItem("{}-{}".format(self.x, self.y), parent=self)
- self.label.setVisible(show_label)
- k = 0
- if (self.x % 2) != 0:
- k = 0.5
- if shape == geometry.FLAT_HEX:
- self.label.setPos(QPointF(((self.x * 0.866) + 0.2886) * scale, (self.y + k + 0.5) * scale))
- else:
- self.label.setPos(QPointF(self.x * scale, self.y * scale))
- font = QFont()
- font.setPointSize(20)
- self.label.setFont(font)
- def select(self):
- self.setBrush(QBrush(QColor(200, 0, 0, 100)))
- self.selected = True
- self.gridViewer.add_to_selection(self.x, self.y)
- def unselect(self):
- self.setBrush(QBrush())
- self.selected = False
- self.gridViewer.remove_from_selection(self.x, self.y)
- def mousePressEvent(self, *args, **kwargs):
- if self.selected:
- self.unselect()
- else:
- self.select()
- def show_label(self, visible):
- self.label.setVisible(visible)
|