From 67e63561c4b79d18117485113321f4f4ca0526d4 Mon Sep 17 00:00:00 2001 From: 2ndbeam <2ndbeam@disroot.org> Date: Mon, 30 Jun 2025 13:43:47 +0300 Subject: [PATCH] major api and quality of life changes --- gridpreview.cpp | 36 ++++++++++++++++++++++---------- gridpreview.h | 15 ++++++++------ line.cpp | 4 ++-- line.h | 4 ++-- mainwindow.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++++++++- mainwindow.h | 9 +++++++- mainwindow.ui | 14 ++++++++++++- 7 files changed, 113 insertions(+), 24 deletions(-) diff --git a/gridpreview.cpp b/gridpreview.cpp index a4168ec..582a9a1 100644 --- a/gridpreview.cpp +++ b/gridpreview.cpp @@ -1,12 +1,7 @@ #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); -} + : QWidget{parent} {} void GridPreview::setSize(int newWidth, int newHeight) { @@ -30,27 +25,32 @@ void GridPreview::removeLine(int index) emit updatedContents(); } -void GridPreview::setLineColor(int index, QString color) +void GridPreview::setLineColor(int index, const QString &color) { lines[index].setColor(color); emit updatedContents(); } -void GridPreview::setLineStartPoint(int index, QPoint point) +void GridPreview::setLineStartPoint(int index, const QPoint &point) { lines[index].setStartPoint(point); emit updatedContents(); } -void GridPreview::setLineEndPoint(int index, QPoint point) +void GridPreview::setLineEndPoint(int index, const QPoint &point) { lines[index].setEndPoint(point); emit updatedContents(); } +void GridPreview::setColorMap(QMap &map) +{ + colorMap = map; +} + int GridPreview::getWidth() { return width; @@ -61,12 +61,22 @@ int GridPreview::getHeight() return height; } -const Line &GridPreview::getLine(int index) +const QList &GridPreview::getLines() const +{ + return lines; +} + +const Line &GridPreview::getLine(int index) const { return lines.at(index); } -const PointProbe &GridPreview::getCapturedProbe() +const PointProbe &GridPreview::getCapturedProbe() const +{ + return capturedProbe; +} + +PointProbe &GridPreview::getCapturedProbe() { return capturedProbe; } @@ -199,11 +209,15 @@ void GridPreview::mousePressEvent(QMouseEvent *event) capturedProbe.ownerIndex = lines.size() - 1; } + + emit updatedContents(); } void GridPreview::mouseReleaseEvent(QMouseEvent *event) { mouseCaptured = false; + QPoint gridPos = localMousePosition(event); + PointProbe probe = probePoint(gridPos); } const QPoint GridPreview::localMousePosition(QMouseEvent *event) diff --git a/gridpreview.h b/gridpreview.h index 52880d9..f15873c 100644 --- a/gridpreview.h +++ b/gridpreview.h @@ -24,9 +24,9 @@ struct PointProbe class GridPreview : public QWidget { Q_OBJECT + QMap colorMap; int width = 5, height = 5; QVector lines {}; - QMap colorMap; const QString tableTemplate = "return {\n width = %1,\n height = %2,\n lines = {\n%3\n }\n}"; bool mouseCaptured = false; @@ -38,14 +38,17 @@ public: void addLine(Line &line); void removeLine(int index); - void setLineColor(int index, QString color); - void setLineStartPoint(int index, QPoint point); - void setLineEndPoint(int index, QPoint point); + void setLineColor(int index, const QString &color); + void setLineStartPoint(int index, const QPoint &point); + void setLineEndPoint(int index, const QPoint &point); + void setColorMap(QMap &map); int getWidth(); int getHeight(); - const Line& getLine(int index); - const PointProbe& getCapturedProbe(); + const Line& getLine(int index) const; + const PointProbe& getCapturedProbe() const; + PointProbe& getCapturedProbe(); + const QList& getLines() const; const QString toLuaTable(); void paintEvent(QPaintEvent* event); diff --git a/line.cpp b/line.cpp index 5c09429..7d243cc 100644 --- a/line.cpp +++ b/line.cpp @@ -17,12 +17,12 @@ void Line::setColor(QString newColor) color = newColor; } -const QPoint &Line::getStart() +const QPoint &Line::getStart() const { return start; } -const QPoint &Line::getEnd() +const QPoint &Line::getEnd() const { return end; } diff --git a/line.h b/line.h index 2d25509..6bb0151 100644 --- a/line.h +++ b/line.h @@ -14,8 +14,8 @@ public: void setStartPoint(QPoint newPoint); void setEndPoint(QPoint newPoint); void setColor(QString color); - const QPoint& getStart(); - const QPoint& getEnd(); + const QPoint& getStart() const; + const QPoint& getEnd() const; QString getColor(); QString toLuaTable(); }; diff --git a/mainwindow.cpp b/mainwindow.cpp index 8bb1094..3bcc18d 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -8,7 +8,14 @@ MainWindow::MainWindow(QWidget *parent) ui->setupUi(this); QObject::connect(ui->gridPreview, &GridPreview::updatedContents, this, &MainWindow::onGridUpdated); - ui->gridPreview->updatedContents(); + colorMap.insert(QString("red"), Qt::red); + colorMap.insert(QString("green"), Qt::green); + colorMap.insert(QString("blue"), Qt::blue); + + ui->gridPreview->setColorMap(colorMap); + emit ui->gridPreview->updatedContents(); + + ui->comboLineColor->addItems(colorMap.keys()); } MainWindow::~MainWindow() @@ -24,6 +31,15 @@ void MainWindow::onGridUpdated() ui->spinGridWidth->setValue(ui->gridPreview->getWidth()); ui->spinGridHeight->setValue(ui->gridPreview->getHeight()); + + ui->listLines->clear(); + + for (int i = 0; i< ui->gridPreview->getLines().size(); i++) + ui->listLines->addItem(QString("Line #%1").arg(i + 1)); + + PointProbe pp = ui->gridPreview->getCapturedProbe(); + + ui->listLines->setCurrentRow(pp.ownerIndex); } void MainWindow::on_spinGridWidth_valueChanged(int arg1) @@ -37,3 +53,40 @@ void MainWindow::on_spinGridHeight_valueChanged(int arg1) ui->gridPreview->setSize(ui->gridPreview->getWidth(), arg1); } + +void MainWindow::on_comboLineColor_currentTextChanged(const QString&) +{ + int selected = ui->listLines->currentRow(); + + if (!isSelectedLineCorrect(selected)) + return; + + ui->gridPreview->setLineColor(selected, ui->comboLineColor->currentText()); +} + +void MainWindow::on_listLines_currentRowChanged(int currentRow) +{ + if (!isSelectedLineCorrect(currentRow)) + return; + + PointProbe &probe = ui->gridPreview->getCapturedProbe(); + + probe.ownerIndex = currentRow; + + Line line = ui->gridPreview->getLine(currentRow); + + int startX = line.getStart().x(), startY = line.getStart().y(), + endX = line.getEnd().x(), endY = line.getEnd().y(); + ui->spinLineStartPointX->setValue(startX); + ui->spinLineStartPointY->setValue(startY); + ui->spinLineEndPointX->setValue(endX); + ui->spinLineEndPointY->setValue(endY); + ui->comboLineColor->setCurrentIndex(ui->comboLineColor->findText(line.getColor())); +} + +bool MainWindow::isSelectedLineCorrect(int line) +{ + int size = ui->gridPreview->getLines().size(); + return line >= 0 && line < size && size > 0; +} + diff --git a/mainwindow.h b/mainwindow.h index d79e7dd..56938f5 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -14,6 +14,8 @@ class MainWindow : public QMainWindow Q_OBJECT public: + QMap colorMap; + MainWindow(QWidget *parent = nullptr); ~MainWindow(); @@ -22,10 +24,15 @@ public slots: private slots: void on_spinGridWidth_valueChanged(int arg1); - void on_spinGridHeight_valueChanged(int arg1); + void on_comboLineColor_currentTextChanged(const QString &arg1); + void on_listLines_currentRowChanged(int currentRow); + private: Ui::MainWindow *ui; + int lastEditedLine = -1; + + bool isSelectedLineCorrect(int line); }; #endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui index 5ae5cb7..0983c16 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -177,6 +177,9 @@ + + true + 1 @@ -210,6 +213,9 @@ + + true + 1 @@ -220,6 +226,9 @@ + + true + 1 @@ -324,6 +333,9 @@ + + true + 1 @@ -390,7 +402,7 @@ - + 0