-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainWindow.cpp
More file actions
106 lines (91 loc) · 2.98 KB
/
Copy pathMainWindow.cpp
File metadata and controls
106 lines (91 loc) · 2.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "MainWindow.hpp"
#include <QFileDialog>
#include <QTextStream>
#include "StructureChart.hpp"
#include <QGraphicsSimpleTextItem>
#include <QGraphicsRectItem>
#include <QDebug>
#include <QMessageBox>
#include <QtPrintSupport>
#include <QPainter>
#include <QPrinter>
#include "Parser.hpp"
#include "StructureChartDrawer.hpp"
#include "ClassChartDrawer.hpp"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
setupUi(this);
}
void MainWindow::resetGraphicsView()
{
QGraphicsScene* oldScene = graphicsView->scene();
if (oldScene) {
graphicsView->setScene(nullptr);
delete oldScene;
}
}
void MainWindow::on_actionGenerate_triggered()
{
const float marginClassStructure = 20.f;
const float marginStructure = 10.f;
std::string input = plainTextEdit->toPlainText().toStdString();
const char* begin = &*input.cbegin();
const char* end = &*input.cend();
try {
Parser parser(begin, end);
resetGraphicsView();
scene = new QGraphicsScene(this);
this->actionDirect_Print->setEnabled(true);
this->actionPrint_To_PDF->setEnabled(true);
float height = 0.;
ClassChartDrawer classChartDrawer;
QGraphicsItem* classChart = classChartDrawer.drawClassChart(parser.getResult().classChart);
scene->addItem(classChart);
classChart->setPos(0,0);
height += scene->sceneRect().height() + marginClassStructure;
for (const std::unique_ptr<StructureChart>& structureChartData : parser.getResult().structureCharts) {
StructureChartDrawer drawer(scene);
QGraphicsItem* structureChart = drawer.drawStructureChart(structureChartData.get());
scene->addItem(structureChart);
structureChart->setPos(0, height);
height += structureChart->childrenBoundingRect().height() + marginStructure;
}
graphicsView->setScene(scene);
} catch (std::runtime_error& e) {
QMessageBox::warning(this, "Parser Error", e.what());
}
}
void MainWindow::on_actionOpen_triggered()
{
QStringList files = QFileDialog::getOpenFileNames(this, "Select code files", "../qtroad", "C/C++ (*.c *.h *.cpp *.hpp)");
QString content;
for (QString fileName : files) {
QFile file(fileName);
file.open(QIODevice::ReadOnly);
content += QTextStream(&file).readAll() + "\n";
}
plainTextEdit->setPlainText(content);
}
void MainWindow::on_actionDirect_Print_triggered()
{
QPrinter printer;
if (QPrintDialog(&printer).exec() == QDialog::Accepted) { //Bug: while choosing the directory to print a pdf-file with Nitro PDF Creator, qtroad is marked with "no response"
QPainter painter(&printer);
painter.setRenderHint(QPainter::Antialiasing);
scene->render(&painter);
}
}
void MainWindow::on_actionPrint_To_PDF_triggered()
{
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
QString fileName = QFileDialog::getSaveFileName(this, "Save File", "", "PDF (*.pdf)");
if (!fileName.isNull()) {
printer.setOutputFileName(fileName);
printer.setPageSize(QPrinter::A4);
QPainter painter(&printer);
painter.setRenderHint(QPainter::Antialiasing);
scene->render(&painter);
}
}