163 lines
4.5 KiB
C++
163 lines
4.5 KiB
C++
#include "mainwindow.h"
|
|
#include "ui_mainwindow.h"
|
|
|
|
MainWindow::MainWindow(QWidget *parent)
|
|
: QMainWindow(parent)
|
|
, ui(new Ui::MainWindow)
|
|
{
|
|
ui->setupUi(this);
|
|
QObject::connect(ui->gridPreview, &GridPreview::updatedContents,
|
|
this, &MainWindow::onGridUpdated);
|
|
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()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void MainWindow::onGridUpdated()
|
|
{
|
|
ui->gridPreview->repaint();
|
|
|
|
ui->textPreview->setPlainText(ui->gridPreview->toLuaTable());
|
|
|
|
ui->spinGridWidth->setValue(ui->gridPreview->getWidth());
|
|
ui->spinGridHeight->setValue(ui->gridPreview->getHeight());
|
|
|
|
ui->listLines->clear();
|
|
|
|
QMap<QString, QList<int>> colorCount;
|
|
for (int i = 0; i< ui->gridPreview->getLines().size(); i++)
|
|
{
|
|
ui->listLines->addItem(QString("Line #%1").arg(i + 1));
|
|
QString color = ui->gridPreview->getLine(i).getColor();
|
|
auto iter = colorCount.find(color);
|
|
if (iter == colorCount.end())
|
|
colorCount.insert(color, { i + 1 });
|
|
else
|
|
iter->push_back(i + 1);
|
|
}
|
|
|
|
ui->treeWarnings->clear();
|
|
|
|
for (auto iter = colorCount.begin(); iter != colorCount.end(); iter++)
|
|
{
|
|
if (iter->size() > 1)
|
|
{
|
|
QString warningTitle = QString("Color \"%1\" is used by several lines:").arg(iter.key());
|
|
QStringList warningDescription{};
|
|
|
|
for(int i = 0; i < iter->size(); i++)
|
|
{
|
|
warningDescription.push_back(QString("Line #%1").arg(iter->at(i)));
|
|
}
|
|
|
|
throwWarning(warningTitle, warningDescription);
|
|
}
|
|
}
|
|
ui->treeWarnings->expandAll();
|
|
|
|
PointProbe pp = ui->gridPreview->getCapturedProbe();
|
|
|
|
ui->listLines->setCurrentRow(pp.ownerIndex);
|
|
}
|
|
|
|
void MainWindow::on_spinGridWidth_valueChanged(int arg1)
|
|
{
|
|
ui->gridPreview->setSize(arg1, ui->gridPreview->getHeight());
|
|
}
|
|
|
|
|
|
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;
|
|
}
|
|
|
|
void MainWindow::throwWarning(const QString &title, const QStringList &description)
|
|
{
|
|
QTreeWidgetItem *titleItem = new QTreeWidgetItem(ui->treeWarnings, QStringList{ title });
|
|
for (auto iter = description.begin(); iter != description.end(); iter++)
|
|
{
|
|
QTreeWidgetItem *descriptionItem = new QTreeWidgetItem(titleItem, QStringList{ *iter });
|
|
titleItem->addChild(descriptionItem);
|
|
}
|
|
ui->treeWarnings->addTopLevelItem(titleItem);
|
|
}
|
|
|
|
|
|
void MainWindow::on_buttonSave_clicked()
|
|
{
|
|
QString fileName = QFileDialog::getSaveFileName(this, QString("Save grid"), ".", "Lua source code (*.lua)");
|
|
QFile file(fileName);
|
|
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
|
|
return;
|
|
|
|
QTextStream out(&file);
|
|
out << ui->gridPreview->toLuaTable();
|
|
}
|
|
|
|
|
|
void MainWindow::on_buttonClear_clicked()
|
|
{
|
|
ui->gridPreview->clear();
|
|
}
|
|
|
|
|
|
void MainWindow::on_buttonDeleteLine_clicked()
|
|
{
|
|
int selected = ui->listLines->currentRow();
|
|
|
|
if (!isSelectedLineCorrect(selected))
|
|
return;
|
|
|
|
ui->gridPreview->getCapturedProbe().ownerIndex = -1;
|
|
ui->gridPreview->removeLine(selected);
|
|
|
|
ui->listLines->clearSelection();
|
|
}
|
|
|