359
|
1 |
#include <QGridLayout>
|
|
2 |
#include <QImage>
|
|
3 |
#include <QPixmap>
|
|
4 |
#include <QMessageBox>
|
|
5 |
#include <QFile>
|
|
6 |
#include <QTextStream>
|
|
7 |
#include <QRegExp>
|
|
8 |
#include <QDebug>
|
|
9 |
#include "mainform.h"
|
|
10 |
|
|
11 |
MyWindow::MyWindow(QWidget * parent, Qt::WFlags flags)
|
|
12 |
: QMainWindow(parent, flags)
|
|
13 |
|
|
14 |
{
|
|
15 |
QWidget * centralWidget = new QWidget(this);
|
|
16 |
QGridLayout * mainlayout = new QGridLayout(centralWidget);
|
|
17 |
mainlayout->setMargin(1);
|
|
18 |
mainlayout->setSpacing(1);
|
|
19 |
|
|
20 |
sa_xy = new QScrollArea(centralWidget);
|
|
21 |
xy = new PixLabel();
|
|
22 |
xy->setFixedSize(1024, 512);
|
|
23 |
sa_xy->setWidget(xy);
|
|
24 |
|
|
25 |
mainlayout->addWidget(sa_xy, 0, 0, 1, 4);
|
|
26 |
|
|
27 |
setCentralWidget(centralWidget);
|
|
28 |
|
|
29 |
buttAdd = new QPushButton(centralWidget);
|
|
30 |
buttAdd->setText(tr("Add"));
|
|
31 |
mainlayout->addWidget(buttAdd, 1, 0);
|
|
32 |
|
|
33 |
buttCode = new QPushButton(centralWidget);
|
|
34 |
buttCode->setText(tr("Code"));
|
|
35 |
mainlayout->addWidget(buttCode, 1, 1);
|
|
36 |
|
|
37 |
buttSave = new QPushButton(centralWidget);
|
|
38 |
buttSave->setText(tr("Save"));
|
|
39 |
mainlayout->addWidget(buttSave, 1, 3);
|
|
40 |
|
|
41 |
buttLoad = new QPushButton(centralWidget);
|
|
42 |
buttLoad->setText(tr("Load"));
|
|
43 |
mainlayout->addWidget(buttLoad, 1, 2);
|
|
44 |
|
|
45 |
connect(buttAdd, SIGNAL(clicked()), xy, SLOT(AddRect()));
|
|
46 |
connect(buttCode, SIGNAL(clicked()), this, SLOT(Code()));
|
|
47 |
connect(buttSave, SIGNAL(clicked()), this, SLOT(Save()));
|
|
48 |
connect(buttLoad, SIGNAL(clicked()), this, SLOT(Load()));
|
|
49 |
}
|
|
50 |
|
|
51 |
void MyWindow::Code()
|
|
52 |
{
|
|
53 |
if (xy->rects.size())
|
|
54 |
{
|
|
55 |
QFile f("template.pas");
|
|
56 |
if (!f.open(QIODevice::WriteOnly))
|
|
57 |
{
|
|
58 |
QMessageBox::information(this, tr("Error"),
|
|
59 |
tr("Cannot save"));
|
|
60 |
return ;
|
|
61 |
}
|
|
62 |
|
|
63 |
QTextStream stream(&f);
|
|
64 |
stream << QString("const Template0Points: array[0..%1] of TSDL_Rect =").arg(xy->rects.size() - 1) << endl;
|
|
65 |
stream << " (" << endl;
|
|
66 |
for(int i = 0; i < xy->rects.size(); i++)
|
|
67 |
{
|
|
68 |
QRect r = xy->rects[i].normalized();
|
|
69 |
stream << QString(" (x: %1; y: %2; w: %3; h: %4),").
|
1774
|
70 |
arg(r.x() * 4, 4).arg(r.y() * 4, 4).arg(r.width() * 4, 4).arg(r.height() * 4, 4) << endl;
|
359
|
71 |
}
|
|
72 |
stream << " );" << endl;
|
|
73 |
f.close();
|
|
74 |
}
|
|
75 |
}
|
|
76 |
|
|
77 |
void MyWindow::Save()
|
|
78 |
{
|
361
|
79 |
Code();
|
359
|
80 |
}
|
|
81 |
|
|
82 |
void MyWindow::Load()
|
|
83 |
{
|
361
|
84 |
QFile f("template.pas");
|
|
85 |
if (!f.open(QIODevice::ReadOnly))
|
|
86 |
{
|
|
87 |
QMessageBox::information(this, tr("Error"),
|
|
88 |
tr("Cannot open file"));
|
|
89 |
return ;
|
|
90 |
}
|
359
|
91 |
|
361
|
92 |
QTextStream stream(&f);
|
|
93 |
QStringList sl;
|
|
94 |
while (!stream.atEnd())
|
|
95 |
{
|
|
96 |
sl << stream.readLine();
|
|
97 |
}
|
|
98 |
xy->rects.clear();
|
|
99 |
for (int i = 0; i < sl.size(); ++i)
|
|
100 |
{
|
|
101 |
QRegExp re("x:\\s+(\\d+);\\sy:\\s+(\\d+);\\sw:\\s+(\\d+);\\sh:\\s+(\\d+)");
|
|
102 |
re.indexIn(sl.at(i));
|
|
103 |
QStringList coords = re.capturedTexts();
|
|
104 |
qDebug() << sl.at(i) << coords;
|
|
105 |
if ((coords.size() == 5) && (coords[0].size()))
|
1774
|
106 |
xy->rects.push_back(QRect(coords[1].toInt() / 4, coords[2].toInt() / 4, coords[3].toInt() / 4, coords[4].toInt() / 4));
|
361
|
107 |
}
|
|
108 |
f.close();
|
|
109 |
xy->repaint();
|
359
|
110 |
}
|