From 10ddcc51a2971b5709034e10f161bf9897d31699 Mon Sep 17 00:00:00 2001 From: 2ndbeam <2ndbeam@disroot.org> Date: Wed, 2 Jul 2025 16:58:22 +0300 Subject: [PATCH] Out of bounds warning --- gridpreview.cpp | 21 +++++++++++++++++++++ gridpreview.h | 3 +++ mainwindow.cpp | 32 ++++++++++++++++++++++++++------ 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/gridpreview.cpp b/gridpreview.cpp index 93d113a..d2db6af 100644 --- a/gridpreview.cpp +++ b/gridpreview.cpp @@ -286,3 +286,24 @@ const PointProbe GridPreview::probePoint(const QPoint &point) } return PointProbe(); } + +const QList GridPreview::pointsOutOfBounds() +{ + QList out; + + for (auto iter = lines.begin(); iter != lines.end(); iter++) + { + const QPoint &start = iter->getStart(); + const QPoint &end = iter->getEnd(); + + PointProbe startProbe = probePoint(start); + PointProbe endProbe = probePoint(end); + + if (!startProbe.inBounds) + out.push_back(startProbe); + if (!endProbe.inBounds) + out.push_back(startProbe); + } + + return out; +} diff --git a/gridpreview.h b/gridpreview.h index 89db5b0..afa06c9 100644 --- a/gridpreview.h +++ b/gridpreview.h @@ -21,6 +21,8 @@ struct PointProbe inBounds(bounds) {} }; + + class GridPreview : public QWidget { Q_OBJECT @@ -69,6 +71,7 @@ public: int getPointOwner(const QPoint& point); const PointProbe probePoint(const QPoint& point); + const QList pointsOutOfBounds(); signals: void updatedContents(); }; diff --git a/mainwindow.cpp b/mainwindow.cpp index 9edee31..370051c 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -52,18 +52,37 @@ void MainWindow::onGridUpdated() { if (iter->size() > 1) { - QString warningTitle = QString("Color \"%1\" is used by several lines:").arg(iter.key()); - QStringList warningDescription{}; + QString title = QString("Color \"%1\" is used by several lines:").arg(iter.key()); + QStringList description{}; for(int i = 0; i < iter->size(); i++) { - warningDescription.push_back(QString("Line #%1").arg(iter->at(i))); + description.push_back(QString("Line #%1").arg(iter->at(i))); } - throwWarning(warningTitle, warningDescription); + throwWarning(title, description); } } - ui->treeWarnings->expandAll(); + + const QList outOfBounds = ui->gridPreview->pointsOutOfBounds(); + + for (auto iter = outOfBounds.begin(); iter != outOfBounds.end(); iter++) + { + const Line &line = ui->gridPreview->getLine(iter->ownerIndex); + const QPoint &point = iter->isStart ? line.getStart() : line.getEnd(); + + QString pointType = iter->isStart ? QString("Start") : QString("End"); + QString title = QString("%1 point of Line #%2 is out of bounds:").arg(pointType).arg(iter->ownerIndex + 1); + QStringList description { + QString("Point located at (%1, %2) while grid size is %3x%4") + .arg(point.x()) + .arg(point.y()) + .arg(ui->gridPreview->getWidth()) + .arg(ui->gridPreview->getHeight()) + }; + + throwWarning(title, description); + } PointProbe pp = ui->gridPreview->getCapturedProbe(); @@ -127,12 +146,13 @@ void MainWindow::throwWarning(const QString &title, const QStringList &descripti titleItem->addChild(descriptionItem); } ui->treeWarnings->addTopLevelItem(titleItem); + ui->treeWarnings->expandItem(titleItem); } void MainWindow::on_buttonSave_clicked() { - QString fileName = QFileDialog::getSaveFileName(this, QString("Save grid"), ".", "Lua source code (*.lua)"); + QString fileName = QFileDialog::getSaveFileName(this, QString("Save grid"), "level.lua", "Lua source code (*.lua)"); QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return;