-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcomponent.cpp
More file actions
128 lines (104 loc) · 2.96 KB
/
component.cpp
File metadata and controls
128 lines (104 loc) · 2.96 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
119
120
121
122
123
124
125
126
127
128
#include <component.h>
Component::Component(QWidget* parent) : QWidget(parent) {
deleteFlag = false;
MENU_OFFSET = 20;
id = std::time(0) + (rand() % 1000); // setting the id (epoch)
createActions();
}
bool Component::isDead() {
return deleteFlag;
}
void Component::setValue(int v){
int oldv = val;
val = v;
emitValueChangedSig(oldv, v);
}
int Component::getValue(){
return val;
}
void Component::mousePressEvent(QMouseEvent *event) {
moveOffset = event->pos();
}
void Component::mouseMoveEvent(QMouseEvent *event) {
int eX = (int) event->windowPos().x();
int eY = ((int) event->windowPos().y()) - MENU_OFFSET; // y_offset correction
move(eX - moveOffset.x(), eY - moveOffset.y());
QWidget * p = (QWidget*) parent();
p->repaint();
}
void Component::contextMenuEvent(QContextMenuEvent *event) {
QMenu menu(this);
if(getComponentType()!=2) // if is not a collector
menu.addAction(wireAct);
if(getComponentType()==7) // if is a diver
menu.addAction(dividerAct);
if(outComponentList.isEmpty() && inComponentList.isEmpty())
deleteWireAct->setEnabled(false);
else
deleteWireAct->setEnabled(true);
menu.addAction(deleteWireAct);
menu.addSeparator();
menu.addAction(deleteAct);
menu.exec(event->globalPos());
}
void Component::createActions() {
// delete
deleteAct = new QAction(tr("&Delete"), this);
deleteAct->setStatusTip(tr("Delete this variable"));
connect(deleteAct, SIGNAL(triggered()), this, SLOT(deleteSlot()));
// connect
wireAct = new QAction(tr("&Connect"), this);
wireAct->setStatusTip(tr("Connect this element with another"));
connect(wireAct, SIGNAL(triggered()), this, SLOT(wireSlot()));
// disconnect
deleteWireAct = new QAction(tr("&Disconnect"), this);
deleteWireAct->setStatusTip(tr("Disconnect this element from others"));
connect(deleteWireAct, SIGNAL(triggered()), this, SLOT(deleteWireSlot()));
// change divider if the component is a diver
dividerAct = new QAction(tr("&Change divider"), this);
dividerAct->setStatusTip(tr("Change the current divider, by default it's neutral"));
connect(dividerAct, SIGNAL(triggered()), this, SLOT(dividerSlot()));
}
// Slots
void Component::dividerSlot() {
emitDividerSig();
}
void Component::deleteSlot() {
deleteFlag = true;
emitDeleteSig();
}
void Component::wireSlot() {
emitWireSig();
}
void Component::deleteWireSlot() {
emitDeleteWireSig();
}
// Emitters
void Component::emitDividerSig() {
emit dividerSig(100, this);
}
void Component::emitDeleteSig() {
emit deleteSig(100);
}
void Component::emitWireSig() {
emit wireSig(100, this);
}
void Component::emitValueChangedSig(int oldval, int newval) {
emit valueChangedSig(100, this, oldval, newval);
}
void Component::emitDeleteWireSig() {
emit deleteWireSig(100, this);
}
// Other stuff
void Component::setComponentType(int t) {
componentType = t;
}
int Component::getComponentType() {
return componentType;
}
int Component::getId() {
return id;
}
void Component::setId(int nid) {
id = nid;
}