-
Notifications
You must be signed in to change notification settings - Fork 7
/
NL_systemobject.h
133 lines (116 loc) · 4.52 KB
/
NL_systemobject.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
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
/***************************************************************************
** **
** This file is part of SpineCreator, an easy to use GUI for **
** describing spiking neural network models. **
** Copyright (C) 2013-2014 Alex Cope, Paul Richmond, Seb James **
** **
** This program is free software: you can redistribute it and/or modify **
** it under the terms of the GNU General Public License as published by **
** the Free Software Foundation, either version 3 of the License, or **
** (at your option) any later version. **
** **
** This program is distributed in the hope that it will be useful, **
** but WITHOUT ANY WARRANTY; without even the implied warranty of **
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the **
** GNU General Public License for more details. **
** **
** You should have received a copy of the GNU General Public License **
** along with this program. If not, see http://www.gnu.org/licenses/. **
** **
****************************************************************************
** Author: Alex Cope **
** Website/Contact: http://bimpa.group.shef.ac.uk/ **
****************************************************************************/
#ifndef SYSTEMOBJECT_H
#define SYSTEMOBJECT_H
#include "globalHeader.h"
/*!
* Order matters here. Order these from "should be lowest in the
* diagram" to "should be drawn on top of everything in a
* diagram". See saveNetworkImageDialog::drawOrderLessThan for the
* reason why this is.
*/
enum systemObjectType
{
populationObject,
projectionObject,
synapseObject,
inputObject,
nullObject
};
class systemObject
{
public:
virtual QString getName() { return "oops";}
virtual void move(float, float) {}
virtual void draw(QPainter *, float, float, float, int, int, QImage, drawStyle){}
virtual bool is_clicked(float, float, float) {return true;}
virtual void remove(nl_rootdata *) {/*delete this;*/}
virtual void delAll(nl_rootdata *) {/*delete this;*/}
/*!
* \brief newFromExisting
* Copy *this* and return as a new QSharedPointer
* \return
*/
virtual QSharedPointer<systemObject> newFromExisting(QMap <systemObject *, QSharedPointer <systemObject> > &) {return QSharedPointer<systemObject>(new systemObject);}
/*!
* \brief remapSharedPointers
* Takes a map from old shared pointers to new ones - used
* to update references when copy / pasting systemObjects
*/
virtual void remapSharedPointers(QMap <systemObject *, QSharedPointer <systemObject> >) {return;}
/*!
* Set location offset for the object relative to the points x and
* y (which is probably the mouse x,y), using the currentLocation
* as a starting point.
*/
virtual void setLocationOffsetRelTo(float x, float y)
{
this->locationOffset = currentLocation() - QPointF(x,y);
}
/*!
* Plain setter for the location offset.
*/
virtual void setLocationOffset(float x, float y)
{
this->locationOffset = QPointF(x,y);
}
/*!
* Plain setter for the location offset.
*/
virtual void setLocationOffset(QPointF offset)
{
this->locationOffset = offset;
}
/*!
* Plain getter for the location offset.
*/
virtual QPointF getLocationOffset()
{
return this->locationOffset;
}
virtual QPointF currentLocation()
{
return QPointF(0,0);
}
systemObjectType type;
int tag;
bool connected;
bool isDeleted;
systemObject();
virtual ~systemObject() {}
/*!
* The offset between (probably) the mouse which is
* holding/dragging the object and the "real" currentLocation of
* the object.
*/
QPointF locationOffset;
/*!
* \brief annotation
* QString to hold the annotation data for this object
*/
QString annotation;
// Maybe have QMap<QString,QString> annotationTexts here, plus
// virtual methods for saving the data to the network.
};
#endif // SYSTEMOBJECT_H