-
Notifications
You must be signed in to change notification settings - Fork 2
/
CHANGELOG
301 lines (273 loc) · 15.7 KB
/
CHANGELOG
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
2010-11-09
- a new screenshot: screenshots/interface7.png illustrating the current state of the project
- changed some internals see Model.cpp::insertModule(..) and DataAbstractItem.cpp
as ports are now created in the data structure.
- added NoiseNetwork and NoiseNetworkRenderer
- a NoiseNetwork is used to encapsulate the 'noise library backend' but also for 'garbage collection'
- NoiseNetworkRenderer returns a rendered 2d image (raw), given a NoiseNetwork.
this is used to generate the preview tile for each Module but can be used as done in the libnoise-viewer
WARNING: this is not complete yet
also:
- the NoiseNetwork is generated 'on the fly' for each module in the hierarchy
-> there is no caching
-> the garbage collection is encapsulated in the class NoiseNetwork and the last user must delete it
the frontend QGraphicsItem is updated when a certain 'event' has happened, see Model.cpp:
-> [done] module parameter changed -> Model::setData()
-> [done] connection added -> Model::insertConnection()
-> [done] connection removed -> Model::removeRows()
this event must be tracked by the Model and NOT by the frontend NOR by the backend
2010-11-02
- added doc/graphicssceneasabstractitemview.odg and doc/graphicssceneasabstractitemview.png
- created new class NoiseNetwork which will do 'garbage collection' for libnoise
- extended class_generator.py:
- properties are now registered based on the script
- altough using class_generator.py it's nice to make certain changes to Perlin.cpp/.h (and others) without having
to compile all libnoise modules again
- extended registermodule_macro.cpp to also generate a generic identify(), modules have less code now
2010-09-05
- some minor fixes
- last commit without libnoise dependency
2010-09-01
- fixed: selection of Connections now works as expected. the problem was that
void GraphicsScene::mousePressEvent ( QGraphicsSceneMouseEvent *mouseEvent ) {
had a return; statement which in some cases did not forward the mousePressEvent to the respecitve item
2010-08-31
- implemented GraphcisItemRelayInterface using multiple inheritance to reduce duplicated code
QList<GraphicsItemRelay*> relays;
void addRelay(GraphicsItemRelay* r);
void delRelay(GraphicsItemRelay* r);
are now found in GraphcisItemRelayInterface
2010-08-30
- Connection(s) to modputs are now drawn correctly, fixed a simple assignment but in Connection::Connection(..)
2010-08-29
this relase fixes one of my worst problems in frontend item handling
- created a easy to use interface to pass position changes from Ports to Connections
- a Connection does not hold a pointer to a Port
- a Port does not hold a pointer to a Connection
-> see class GraphicsItemRelay
-> also see the whole discussion: 'why QGraphicsItem(s) do need direct access to each other sometimes'
- when a module is inserted after a connection is inserted, then the relays are inserted now
-> this framework still needs some love (see TODO) and testing
- added Model::references(..) function to query a list of QModelIndexes (connections) for a certain Port
- found a use-case where a certain bug is always triggered, see top item in TODO
2010-08-27
- not much code in this commit but TODO has a lot of interesting concepts waiting to be implemented
2010-08-24
- QTreeView is now expanded when loading modules via Document.cpp
- CTRL+A selects all QGraphicsItems in the scene now
- fixed a BUG where the program crashed if a new connection was drawn from a Port to nowhere, see GraphicsScene::mouseReleaseEvent(..)
- class ObjectPool extends the GraphicsScene to give View objects as 'Connection', 'Module' or 'Port' access to translate
QGraphicsItems into QPersistentModelIndex'es and vice versa without having to use the 'scene' pointer as done before
- reduced code in GraphicsScene as this 3 functions were moved to class ObjectPool:
- QGraphicsItem* model2GraphicsItem( QPersistentModelIndex index );
- QPersistentModelIndex graphicsItem2Model ( QGraphicsItem* graphicsItem );
- bool compareIndexes( const QPersistentModelIndex & a, const QPersistentModelIndex & b );
- made rowsInserted more simple to read
- ObjectPool can be extended or profiled for other purposes but helps to seperate jobs to different classes
2010-08-23
- removed branching of moduleInserted(..) and connectionInserted(..). a generic interface handles that now.
- removed branching of rowsRemoved(..) to moduleRemoved(..) and connectionRemoved(..). a generic interface handles that now.
2010-08-22
- removed ItemView.cpp/ItemView.h and the class. the former implementation was moved to GraphicsScene
- ISSUE: selection of 'Connections' is - again - tricky? somehow the shape() is not used?!
- DataItemType was extended by EXTENDEDGRAPHICSITEM
- Module.h, Connection.h, Port.h was extended using a generic type() return EXTENDEDGRAPHICSITEM
as well as a specialized type (was was used for type() before)
- GraphicsScene was adapted to distinguish between EXTENDEDGRAPHICSITEM and specialized type
2010-08-20
- inserted a dummy picture for the module module
- added a resource file, adapted the src/CMakeLists.txt to use it
2010-08-19
- Connection uses QGraphicsPathItem instead of QGraphicsLineItem
- partial fix on the QTreeView issue, needs further fixing: see TODO
- fixed a drawing issue, where a connection wasn't drawn to the propper center of the parent item. this has something to do with:
case QGraphicsItem::ItemPositionHasChanged:
case QGraphicsItem::ItemPositionChange:
in QVariant Module::itemChange ( GraphicsItemChange change, const QVariant & value ) {
- WARNING: the QTreeView does not show anything: regression?!
- when moving an Module (in QGraphicsView) the new position is stored in the Model but not yet read back (only in the constructor)
that means when save/load is implemented the modules will be back on the correct position but if the position is altered using
the QTreeView the update won't affect the QGraphicsView until a save/load cycle is done
2010-08-18
- DataItemType now starts at 65536 which should make it compatible to be used with QGraphicsItem->type(), did work before
but was against the specification which could result in undefined behaviour.
- fixed the crash issue. see the first paragraph in TODO which discusses the issue
at least it does not crash anymore
2010-08-17
- WARNING: when quitting the program it will crash if at least one connection exists
- selection of Modules do look better now
- selecting a Connection is now possible (was very tricky before to click the right pixel) as the connection has
a wider range where a selection can be triggered
- fixed some code where 0,1,2.. was used instead of PortDirection::OUT or similar
- removing a Module via Model::removeRows(..) is specified as:
- first: remove all outgoing connections (Connection)
- second: remove all references (Connection)
- finally: remove the Module (Module)
- removing a Connection via the Model::removeRows(..) is specified as:
- when ~Connection is called, Connection c must remove the updatereference at both attached Ports, then remove it
- Connection do register on both Port(s), so that Port::updateConnection() will trigger Connection::update()
2010-08-14
- fixed a bug where removing of a module which has two outgoing connections (from the same output)
will crash the program
-> the problem was in Model::removeRows(..) where a for-loop was iterating over a shrinking container,
code was replaced by 'while(container.size()) {..}' statement
2010-08-13
- removing of items from the QGraphicsScene/QGraphicsView is implemented:
classes which were change in order to make removeRows work:
Model::removeRows(..)
|-DataAbstractItem
| |-DataRoot
| |-DataAbstractModule
| |-DataPort
| |-DataProperty
| |-DataConnection
|-ItemView (relay)
| |-rowsAboutToBeRemoved
|-GraphicsScene
| |-moduleRemoved
| |-connectionRemoved
2010-08-12
- DataType.h vs DataItemType.h, actually DataType.h lost and was removed
2010-08-11
- QTreeView show items always expanded, see MainWidget.cpp::changeActiveDocument ( Document* doc )
- fixed loop connection handling bug where two modules could be connection in a way they would form a loop
- QMenu for creating modules does now insert the module on x,y where the QMenu was created instead of QCursor::pos()
- QMenu for creating modules has now categories which makes it far more useful, see:
void GraphicsScene::contextMenuEvent ( QGraphicsSceneContextMenuEvent * contextMenuEvent )
- created all modules which are in libnoise using the class_generator.py
- added a class_generator.py
2010-08-10
- reorganizing modules/
- renamed property 'pos' to 'Position'
- removed dependency to noise.h and -lnoise from the backend modules
(this will be done differently soon)
2010-08-09
- Model::setData(..) implemented
- Model::flags(..) implemented
- added a new interface screenshot, see screenshots/
2010-08-07
- module->property() and module->setProperty() work! *yepee*
- fix crash when clicking QTreeView item which does not have a QGraphicsItem associated
- this is an incomplete commit, more or less a momentum of my codebase
- the data backend does now have a DataProperty
- the QListView was replaced by a QTreeView
- currently some things are broken since code has to be adapted to that the new property system will be used
- reassigned many things, see TODO
2010-08-04
- fixed the Data* backend. now the program does not crash anymore if a Document is removed
(this happens on program exit) but later this program might contain multiple documents at once
- now the class Model should be able to remove:
- either everything using delete DataRoot or
- remove a single module or connection
2010-08-03
- removed dump() framework from the backend
2010-08-02
- fix Model.cpp::insertConnection|Modules to return the respective QModelIndex or an invalid QModelIndex if something went wrong
- created an inteface to add connections via Document.cpp
2010-08-01
- minor fixes
- drawing of modput connections looks nicer now
- Model.cpp::insertConnection fixed bug where a module output could be connected to the same module's input
- adding a connection twice is not possible anymore as there is now a prevention check, see Model.cpp
- Model.cpp::insertConnection is now complete! *yepee*
2010-07-25
- connections are now drawn, they are properly added to the graph as well!
see also screenshots/interface3.png
- finally implemented Mode.cpp:insertConnection(..)
- DataConnection.cpp/.h and DataPort.cpp/.h still need to be fixed (not done yet)
- Connection.cpp/.h need to be fixed as well (not done yet)
2010-06-14
- added some code to finally insert connections, all that is missing is:
- implementation of Model::insertConnection(...)
- formal checks for correctness of the to be inserted connection
- fix Connection class, which does the drawing of the connection
- probably changes in the backend: DataConnection
2010-05-03
- added a new hierarchy layer to the Model:
rootNode - module - port - connection
istead of
rootNode - module - connection
- Q: could it be easier to have an abstraction like this:
I) root-module-port-connection compared to VS
II) root-module-connection (with transparent ports?)
A: an output port can have multiple output lines
an input port can only have one ingoing connection
+ it might be easier to implement it the I) way since one does not need the complicated transpartent
port checks
+ if ports would be QModelIndex'es it would be easy to find the parent
which is good since the parent "could" need to validate the connection request
(currently this is done by the connection, which is bad)
CURRENT STATUS OF MIGRATION:
- modules appear and input ports are there
- modputs/outputs are not done yet
- the concept, mentioned above, now works. however it's not complete since there is a issue:
I) while adding a module, transparently also add ports VS
II) after adding a module, the Module registers at the scene(), when that happens the ports
are added.
CURRENTLY I is implemented
this solution looks much much better since:
- less code
- less complex code
- (less object interaction)
FIXED
2010-02-02
- connections are now inserted at the module with the output side, using the GraphicsScene
one can add modules and it does not matter if one selects a free output port and connects
it to a free input port or vice versa.
- problem: modules could be asked if they like the connection but it is not implemented
but can be done, see Model.cpp insertConnection(...) where i have included
some concept code
2010-01-26
- create functionality to 'add connections' by click'n'drag'n'drop is done
- modules can now be moved again but using the red line for connections works as well
2010-01-25
- summary: inserting connections works no backend wise
- Model.h/cpp insertConnection(..) rewritten
- DataAbstractModule ...
- DataConnection.cpp/.h needs rewriting
- Port(s) are now created according to the module settings
- added int ports(int type) to DataAbstractModule, with this function the view
(read class Module : public QGraphicsItem) can query via the model how many Port(s)
are needed per type.
2010-01-24
- QGraphicsItem(s) query the model with modelData(..)/setModelData(..) and they use
GraphicsItemModelExtension for that which is also an abstract base class to force
the final item to implement type() and some other functions which are very important
for the QGraphicsScene <-> QAbstractItemModel overlay to be there.
2010-01-23
- QGraphicsItem(s) in automate have the 'model extension' given by a multiple inheritence 'inheriting class'
using GraphicsItemModelExtension now makes data(..)/setData(..) very easy! ;)
- graphicsview must position right over 0/0 above the scene
- adding an item SHOULD NOT move the VIEW (GraphicsView)
POSSIBLE FIX: doc->scene->setSceneRect(QRect(-width/2,-height/2,width,height));
but using this results in no scrollbars and the scene does not exapand at all....
FINAL FIX
void GraphicsView::resizeEvent(QResizeEvent* event) {
QRectF v = sceneRect();
setSceneRect(v.x(),v.y(),v.width(),v.height());
}
- moving an item SHOULD NOT expand the VIEW
POSSIBLE FIX: rewrite the resize() and keep it at width()/height() instead of the
real scene's sceneRect() which can be greater
FINAL FIX
see void GraphicsView::resizeEvent(QResizeEvent* event) {
- the scrollbars should indicated NOT how big the document is BUT instead
they should scroll the view in the range most left item <-> most right item
and top vs bottom items equivalent
FIX no scrollbars for the moment
- moving an item MUST NOT scroll the scene if the item is towards a border
FIX: reimplement mouseMoveEvent as the documentation about ScrollHandDrag or
similar referes to, see libnoise-viewer where i have done that already
FIX: the QGraphisView (or GraphicsView) must have a fixed width/height and MUST NOT resize!
2010-01-22
- view can now be moved but items can't be selected anymore ;P
2010-01-21
- adding modules using the QMenu context menu on the scene now is partially fixed,
still the QCursor position is used instead of the QMenu position
- modules are now inserted into the QGraphicsScene/QGraphicsView and can be moved
- class Model is nearly done, only minor additions (NO CHANGES ;-) need to be done
- QGraphicsItem(s) don't update them selfs and they don't query the model yet
2010-01-10
- GraphicsScene can now insert modules via rightclick
2009-12-18
- CHANGELOG created