-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEditZone.h
56 lines (47 loc) · 1.36 KB
/
EditZone.h
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
#pragma once
#include <QtWidgets>
#include "Graph.h"
#include "AddEdgeDialog.h"
class EditZone : public QWidget
{
Q_OBJECT
public:
enum Action
{
nothing,
createNewNode,
deleteNode,
selectFirstNode,
selectSecondNode,
deselectNode,
dragNode
};
private:
QPoint _mousePos;
float _scale;
int _radius;
int _selectedNode;
bool _isDragged;
Graph _graph;
AddEdgeDialog* _addEdgeDialog;
Action getAction(QMouseEvent* event);
QPoint getArrowPoint(QPoint inPoint, QPoint outPoint, QPoint centerPoint);
void transformEdgePoints(QPoint& inPoint, QPoint& outPoint);
bool isCorrectPos();
bool isCorrectDropPos(QPoint position);
bool isNodePos();
int getNodeIndex(QPoint* position = nullptr);
QSize getNewWidgetSize();
void drawEdge(int nodeIn, int nodeOut);
void drawArrow(QPoint inPoint, QPoint outPoint, QPoint centerPoint, QPainter& painter);
void drawWeight(int nodeIn, int nodeOut);
void drawNode(int nodeNum);
public:
EditZone(QWidget *parent = nullptr);
void paintEvent(QPaintEvent*);
void mousePressEvent(QMouseEvent* event);
void mouseMoveEvent(QMouseEvent* event);
virtual void dragEnterEvent(QDragEnterEvent* event);
virtual void dragMoveEvent(QDragMoveEvent* event);
virtual void dropEvent(QDropEvent* event);
};