-
Notifications
You must be signed in to change notification settings - Fork 1
/
customrect.cpp
146 lines (117 loc) · 3.49 KB
/
customrect.cpp
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include "customrect.h"
CustomRect::CustomRect(float x, float y, QString dev, QString sig)// QMapperDbScene *scene) {
{
devname = dev;
signame = sig;
originX = x;
originY = y;
setPos(originX, originY);
//setFlags(ItemSendsGeometryChanges | ItemIsMovable);
setFlags(ItemSendsGeometryChanges);
pressed = false;
lifted = false;
hoverovered = false;
setParentItem(0);
colorFill = Qt::gray;
colorText = Qt::blue;
}
void CustomRect::setTitles(QString dev, QString sig) {
devname = dev;
signame = sig;
}
QRectF CustomRect::boundingRect() const {
return QRectF(0, 0, MAPPER_SCENE_ITEM_W, MAPPER_SCENE_ITEM_H);
}
QRectF CustomRect::boundingRectAbs() const {
return QRectF(originX, originY, MAPPER_SCENE_ITEM_W, MAPPER_SCENE_ITEM_H);
}
void CustomRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
QRectF rect = boundingRect();
QPen pen;
pen.setWidth(2);
QBrush brush (colorFill);
//pen.setColor(Qt::black);
if (pressed)
pen.setColor(Qt::red);
if (hoverovered)
pen.setColor(Qt::green);
//painter->setPen(pen,)
painter->fillRect(rect,brush);
painter->drawRect(rect);
painter->setPen(colorText);
QString text = devname + "/" + signame;
rect.moveTo(2,2);
painter->drawText(rect, text);
}
void CustomRect::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *e)
{
Q_EMIT mouseDoubleClickSig();
}
void CustomRect::mousePressEvent(QGraphicsSceneMouseEvent *e) {
if (e->button() == Qt::LeftButton)
{
pressed = true;
qDebug()<<"press = true";
}
else
{
qDebug()<<"lift = true";
lifted = true;
}
//QGraphicsItem::mousePressEvent(e);
update();
}
void CustomRect::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
qDebug() <<"customrect mRelease";
if (e->button() == Qt::LeftButton)
{
if (pressed)
{ //a release... tell parent to see if we made connection with anything...
pressed = false;
qDebug()<<"press = false";
//Q_EMIT mouseDropSig(e->pos());
Q_EMIT mouseDropSig(this->pos(), e->pos());
}
}
else
{
qDebug()<<"lift = false";
lifted = false;
//setFlags(ItemSendsGeometryChanges);
//setFlags(ItemSendsGeometryChanges | ItemIsMovable);
}
QGraphicsItem::mouseReleaseEvent(e);
update();
}
void CustomRect::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
if (lifted)
{
//looks like a hack, probably is a hack.
//manual move:
qDebug() << " pos = " << e->pos() <<"; lastpos = " << e->lastPos();
QPointF diff = e->lastPos() - e->pos();
this->setPos(this->pos() - diff);
Q_EMIT rectMovedSig();
update();
}
qDebug() <<"customrect mousemove: "<< e->pos();
if (pressed) //dragging action for "map": need to tell parent to draw arrow!
{
//Q_EMIT mouseDragSig(e->pos());
Q_EMIT mouseDragSig(this->pos(), e->pos());
}
QGraphicsItem::mouseMoveEvent(e);
}
QVariant CustomRect::itemChange(GraphicsItemChange change, const QVariant &value) {
if (change == ItemPositionChange) {
originX = value.toPointF().x();
originY = value.toPointF().y();
qDebug() << "X = " << originX << " Y = " << originY;
}
return QGraphicsItem::itemChange(change, value);
}
void CustomRect::setAlpha(int alpha)
{
colorFill.setAlpha(alpha);
colorOutlineDef.setAlpha(alpha);
}