-
Notifications
You must be signed in to change notification settings - Fork 2
/
controller.py
121 lines (108 loc) · 6.98 KB
/
controller.py
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
119
120
121
# Controller составляющая MVC (Граф)
# добавить вершину по нажатию; параметры: объект "граф", событие, кнопка
def CAddPoint(graph, event, but):
# если нажата кнопка
if event.button() == but:
graph.AddPoint(event.pos().x(), event.pos().y()) # добавить вершину
# добавить вершину по нажатию в сетку; параметры: объект "граф", событие, кнопка, начало сетки по х, шаг сетки по х, фиксированная координата по y
# если FixedY == None, то не фикисировать по y
def CAddPointGrid(graph, event, but, GridBegin, GridStep, FixedY):
# если нажата кнопка
if event.button() == but:
wasFinded = False # найден промежуток, в который попадает курсор
i = 0
while(not wasFinded):
i += 1 # инкрементировать номер
if event.pos().x() <= GridBegin+i*GridStep:
wasFinded = True # найден промежуток
XonGrid = GridBegin
# если курсор в диапозоне одной лини
if abs(event.pos().x() >= GridBegin+(i-3/2)*GridStep) and abs(event.pos().x() < GridBegin+(i-1/2)*GridStep):
XonGrid = GridBegin+(i-1)*GridStep
elif abs(event.pos().x() >= GridBegin+(i-1/2)*GridStep) and abs(event.pos().x() < GridBegin+(i+3/2)*GridStep):
XonGrid = GridBegin+i*GridStep
# если указана фиксированная координата по y
if FixedY != None:
graph.AddPoint(XonGrid, FixedY) # добавить вершину
return
graph.AddPoint(XonGrid, event.pos().y()) # добавить вершину
# удалить вершину по нажатию; параметры: объект "граф", событие, кнопка
def CDeletePoint(graph, event, but):
# если нажата кнопка
if event.button() == but:
graph.DeletePoint(graph.IsCursorOnPoint(event.pos().x(), event.pos().y())) # удалить вершину
# связать вершины по нажатию; параметры: объект "граф", событие, кнопка, выделенные точки
def CAddConnection(graph, event, but, points):
# если нажата кнопка
if event.button() == but:
graph.AddConnection(int(points[0]), int(points[1])) # связать вершины
# удалить связь между вершинами по нажатию; параметры: объект "граф", событие, кнопка
def CDeleteConnection(graph, event, but, points):
# если нажата кнопка
if event.button() == but:
graph.DeleteConnection(int(points[0]), int(points[1])) # удалить связь между вершинами
# переместить вершину по нажатию; параметры: объект "граф", событие, кнопка
def CMovePoint(graph, event, but, FixedPoint):
# если нажата кнопка
if event.buttons() == but:
graph.MovePoint(FixedPoint, event.pos().x(), event.pos().y()) # переместить вершину
# переместить пунктирную стрелку по нажатию; параметры: объект "граф", событие, кнопка
def CMoveArrowPoint(graph, event, but, FixedArrowPoint):
# если нажата кнопка
if event.buttons() == but:
graph.MoveArrowPoint(FixedArrowPoint, event.pos().x(),
event.pos().y()) # переместить пунктирную стрелку
# переместить пунктирную стрелку по нажатию в сетке; параметры: объект "граф", событие, кнопка, начало сетки по х, шаг сетки по х
def CMoveArrowPointGrid(graph, event, but, FixedArrowPoint, GridBegin, GridStep):
wasFinded = False # найден промежуток, в который попадает курсор
i = 0
while(not wasFinded):
i += 1 # инкрементировать номер
if event.pos().x() <= GridBegin+i*GridStep:
wasFinded = True # найден промежуток
XonGrid = GridBegin
# если курсор в диапозоне одной лини
if abs(event.pos().x() >= GridBegin+(i-3/2)*GridStep) and abs(event.pos().x() < GridBegin+(i-1/2)*GridStep):
XonGrid = GridBegin+(i-1)*GridStep
elif abs(event.pos().x() >= GridBegin+(i-1/2)*GridStep) and abs(event.pos().x() < GridBegin+(i+3/2)*GridStep):
XonGrid = GridBegin+i*GridStep
# если нажата кнопка
if event.buttons() == but:
graph.MoveArrowPoint(FixedArrowPoint, XonGrid,
event.pos().y()) # переместить переместить пунктирную стрелку
# переместить вершину по нажатию в сетке; параметры: объект "граф", событие, кнопка, начало сетки по х, шаг сетки по х, фиксированная координата по y
# если FixedY == None, то не фикисировать по y
def CMovePointGrid(graph, event, but, FixedPoint, GridBegin, GridStep, FixedY):
wasFinded = False # найден промежуток, в который попадает курсор
i = 0
while(not wasFinded):
i += 1 # инкрементировать номер
if event.pos().x() <= GridBegin+i*GridStep:
wasFinded = True # найден промежуток
XonGrid = GridBegin
# если курсор в диапозоне одной лини
if abs(event.pos().x() >= GridBegin+(i-3/2)*GridStep) and abs(event.pos().x() < GridBegin+(i-1/2)*GridStep):
XonGrid = GridBegin+(i-1)*GridStep
elif abs(event.pos().x() >= GridBegin+(i-1/2)*GridStep) and abs(event.pos().x() < GridBegin+(i+3/2)*GridStep):
XonGrid = GridBegin+i*GridStep
if FixedY != None:
if event.buttons() == but:
graph.MovePoint(FixedPoint, XonGrid, FixedY) # переместить вершину
return
if event.buttons() == but:
graph.MovePoint(FixedPoint, XonGrid, event.pos().y()) # переместить вершину
# находится ли курсор на вершине;
def CIsCursorOnPoint(graph, event, but):
# если нажата кнопка
if event.button() == but:
return graph.IsCursorOnPoint(event.pos().x(), event.pos().y())
# находится ли курсор на пунктирной стрелке;
def CIsCursorOnArrowPoint(graph, event, but):
# если нажата кнопка
if event.button() == but:
return graph.IsCursorOnArrowPoint(event.pos().x(), event.pos().y())
# выделить критический путь по нажатию; параметры: объект "граф", событие, кнопка, выделенные точки
def CSelectCriticalPath(graph, event, but, points):
# если нажата кнопка
if event.button() == but:
graph.SelectCriticalPath(int(points[0]), int(points[1])) # добавить вершину в критический путь