#include "gridpreview.h" GridPreview::GridPreview(QWidget *parent) : QWidget{parent} { colorMap.insert(QString("red"), Qt::red); colorMap.insert(QString("green"), Qt::green); colorMap.insert(QString("blue"), Qt::blue); } void GridPreview::setSize(int newWidth, int newHeight) { width = newWidth; height = newHeight; } void GridPreview::addLine(Line &line) { lines.push_back(line); } void GridPreview::removeLine(int index) { lines.removeAt(index); } QString GridPreview::toLuaTable() { QString output(tableTemplate.arg(width).arg(height)); QString linesSubTable = ""; for(auto iter = lines.begin(); iter != lines.end(); iter++ ) { linesSubTable += QString(" %1,\n").arg(iter->toLuaTable()); } linesSubTable.removeLast(); // \n linesSubTable.removeLast(); // , return output.arg(linesSubTable); } void GridPreview::paintEvent(QPaintEvent *event) { QPainter painter(this); QPen pen(Qt::black, 2); painter.setPen(pen); QBrush brush(Qt::black); bool widthBased = rect().width() > rect().height(); int cellSize = widthBased ? rect().height() / height : rect().width() / width; int dotSize = cellSize * 0.5; int filledDotSize = cellSize * 0.7; int areaWidth = cellSize * width; int areaHeight = cellSize * height; int offsetX = (rect().width() - areaWidth) / 2; int offsetY = (rect().height() - areaHeight) / 2; QRect drawArea(offsetX, offsetY, areaWidth, areaHeight); // Draw main grid painter.drawRect(drawArea); QRect cell(0, 0, cellSize, cellSize); painter.setBrush(brush); for (int cellX = 0; cellX < width; cellX++) { for (int cellY = 0; cellY < height; cellY++) { cell.setLeft(offsetX + (cellSize - dotSize) / 2 + cellX * cellSize); cell.setWidth(dotSize); cell.setTop(offsetY + (cellSize - dotSize) / 2 + cellY * cellSize); cell.setHeight(dotSize); painter.drawEllipse(cell); } } // Draw line points for (auto iter = lines.begin(); iter < lines.end(); iter++) { QColor color(colorFromString(iter->getColor())); brush.setColor(color); painter.setBrush(brush); // Draw start cell.setLeft(offsetX + (cellSize - filledDotSize) / 2 + (iter->getStartX() - 1) * cellSize); cell.setWidth(filledDotSize); cell.setTop(offsetY + (cellSize - filledDotSize) / 2 + (iter->getStartY() - 1) * cellSize); cell.setHeight(filledDotSize); painter.drawEllipse(cell); // Draw end cell.setLeft(offsetX + (cellSize - filledDotSize) / 2 + (iter->getEndX() - 1) * cellSize); cell.setWidth(filledDotSize); cell.setTop(offsetY + (cellSize - filledDotSize) / 2 + (iter->getEndY() - 1) * cellSize); cell.setHeight(filledDotSize); painter.drawEllipse(cell); } } QColor GridPreview::colorFromString(QString color) { if (!colorMap.contains(color)) return colorMap[QString("red")]; return colorMap[color]; }