tools/templates/mainform.cpp
author Wuzzy <Wuzzy2@mail.ru>
Mon, 13 Nov 2017 22:14:45 +0100
changeset 12836 8610462e3d33
parent 10208 f04fdb35fc33
permissions -rw-r--r--
Remove 2 unused number tags in Construction Mode GUI These numbers are shown aside the power tag, but the numbers never change. They don't serve any purpose and are just visual clutter and annoying, since they partially overlap. They are probably a leftover from copying code over from other scripts. With this changeset, only the power and turn time are left visible, as it is supposed to.

#include <QGridLayout>
#include <QImage>
#include <QPixmap>
#include <QMessageBox>
#include <QFile>
#include <QTextStream>
#include <QRegExp>
#include <QDebug>
#include "mainform.h"

MyWindow::MyWindow(QWidget * parent, Qt::WFlags flags)
        : QMainWindow(parent, flags)

{
    QWidget * centralWidget = new QWidget(this);
    QGridLayout * mainlayout = new QGridLayout(centralWidget);
    mainlayout->setMargin(1);
    mainlayout->setSpacing(1);

    sa_xy = new QScrollArea(centralWidget);
    xy = new PixLabel();
    xy->setFixedSize(1024, 512);
    sa_xy->setWidget(xy);

    mainlayout->addWidget(sa_xy, 0, 0, 1, 4);

    setCentralWidget(centralWidget);

    buttAdd = new QPushButton(centralWidget);
    buttAdd->setText(tr("Add"));
    mainlayout->addWidget(buttAdd, 1, 0);

    buttCode = new QPushButton(centralWidget);
    buttCode->setText(tr("Code"));
    mainlayout->addWidget(buttCode, 1, 1);

    buttSave = new QPushButton(centralWidget);
    buttSave->setText(tr("Save"));
    mainlayout->addWidget(buttSave, 1, 3);

    buttLoad = new QPushButton(centralWidget);
    buttLoad->setText(tr("Load"));
    mainlayout->addWidget(buttLoad, 1, 2);

    connect(buttAdd, SIGNAL(clicked()), xy, SLOT(AddRect()));
    connect(buttCode, SIGNAL(clicked()), this, SLOT(Code()));
    connect(buttSave, SIGNAL(clicked()), this, SLOT(Save()));
    connect(buttLoad, SIGNAL(clicked()), this, SLOT(Load()));
}

void MyWindow::Code()
{
    if (xy->rects.size())
    {
        QFile f("template.pas");
        if (!f.open(QIODevice::WriteOnly))
        {
            QMessageBox::information(this, tr("Error"),
                        tr("Cannot save"));
            return ;
        }

        QTextStream stream(&f);
        stream << QString("const Template0Points: array[0..%1] of TSDL_Rect =").arg(xy->rects.size() - 1) << endl;
        stream << "      (" << endl;
        for(int i = 0; i < xy->rects.size(); i++)
        {
            QRect r = xy->rects[i].normalized();
            stream << QString("       (x: %1; y: %2; w: %3; h: %4),").
                    arg(r.x() * 4, 4).arg(r.y() * 4, 4).arg(r.width() * 4, 4).arg(r.height() * 4, 4) << endl;
        }
        stream << "      );" << endl;
        f.close();
    }
}

void MyWindow::Save()
{
    Code();
}

void MyWindow::Load()
{
    QFile f("template.pas");
    if (!f.open(QIODevice::ReadOnly))
    {
        QMessageBox::information(this, tr("Error"),
                    tr("Cannot open file"));
        return ;
    }

    QTextStream stream(&f);
    QStringList sl;
    while (!stream.atEnd())
    {
        sl << stream.readLine();
    }
    xy->rects.clear();
    for (int i = 0; i < sl.size(); ++i)
    {
        QRegExp re("x:\\s*(\\d+);\\sy:\\s*(\\d+);\\sw:\\s*(\\d+);\\sh:\\s*(\\d+)");
        re.indexIn(sl.at(i));
        QStringList coords = re.capturedTexts();
        qDebug() << sl.at(i) << coords;
        if ((coords.size() == 5) && (coords[0].size()))
            xy->rects.push_back(QRect(coords[1].toInt() / 4, coords[2].toInt() / 4, coords[3].toInt() / 4, coords[4].toInt() / 4));
    }
    f.close();
    xy->repaint();
}