-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathvisualtree.cpp
More file actions
118 lines (98 loc) · 3.44 KB
/
Copy pathvisualtree.cpp
File metadata and controls
118 lines (98 loc) · 3.44 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
107
108
109
110
111
112
113
114
115
116
117
118
#include "visualtree.h"
#include "ui_visualtree.h"
#include <iostream>
#include <QString>
#include "tree.h"
#include <QPainter>
#include <QPoint>
#include <string>
int Tree::Node::left_nodes = 0;
int Tree::Node::right_nodes = 0;
VisualTree::VisualTree(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::VisualTree)
{
ui->setupUi(this);
}
VisualTree::~VisualTree()
{
delete _node;
delete ui;
}
void VisualTree::on_insert_button_clicked()
{
QString raw_data = ui->Input_text->text();
ui->Input_text->setText("");
if(raw_data.contains(",")){
_node->ResetLastLabel();
QStringList split_data = raw_data.split(",");
for(const auto &a : split_data){
Tree::Data _data;
_data.val = a.toInt();
_node->Insert(_data);
ui->largest_num->setText(QString::number(_node->GetLargestNumber()));
ui->smllest_num->setText(QString::number(_node->GetSmallestNumber()));
ui->left_branch->setText(QString::number(Tree::Node::left_nodes));
ui->right_branch->setText(QString::number(Tree::Node::right_nodes));
}
}
else{
Tree::Data _data;
_data.val = raw_data.toInt();
if(!(_node->Contain(raw_data.toInt()))){
_node->ResetLastLabel();
_node->Insert(_data);
ui->largest_num->setText(QString::number(_node->GetLargestNumber()));
ui->smllest_num->setText(QString::number(_node->GetSmallestNumber()));
ui->left_branch->setText(QString::number(Tree::Node::left_nodes));
ui->right_branch->setText(QString::number(Tree::Node::right_nodes));
}
}
if(_node->IsSymetrical()==1){
ui->symetrcal_lab->setText("Yes");
}
else{
ui->symetrcal_lab->setText("No");
}
DrawTree = true;
update();
}
void VisualTree::on_Root_set_clicked()
{
int root = ui->Root_inp->text().toInt();
Tree::Data r_data;
r_data.val = root;
_node = new Tree::Node(r_data);
ui->Root_inp->setEnabled(false);
ui->Root_set->setEnabled(false);
}
void VisualTree::paintEvent(QPaintEvent *event){
if(DrawTree == true){
QPainter paint_node(this);
paint_node.setPen(QPen(Qt::black,2));
std::vector<Tree::Data> nodes_data = _node->SetPositionOfNodesForVisualization();
const int size = _node->DrawingSize/2;
QPoint line_pos;
line_pos.setX(_node->start_pos.x()+size);
line_pos.setY(_node->start_pos.y()+size);
std::vector<QPoint> nodes_lines = _node->GetVectorOfLinesBetwenNodes();
for(const auto& a : nodes_lines){
paint_node.drawLine(line_pos.x(),line_pos.y(),a.x()+size,a.y()+size);
line_pos.setX(a.x()+size);
line_pos.setY(a.y()+size);
}
paint_node.setBrush(QBrush(QColor(Qt::green)));
for(const auto& a : nodes_data){
QPoint node_pos(a.posX,a.posY);
if(a.new_node == false){
paint_node.drawEllipse(a.posX,a.posY,_node->DrawingSize,_node->DrawingSize);
}
else{
paint_node.setBrush(QBrush(QColor(Qt::red)));
paint_node.drawEllipse(a.posX,a.posY,_node->DrawingSize,_node->DrawingSize);
paint_node.setBrush(QBrush(QColor(Qt::green)));
}
paint_node.drawText(QRectF(QPointF(node_pos),QSizeF(QSize(34,31))),QString::number(a.val),QTextOption(Qt::AlignCenter));
}
}
}