forked from marc-lorber/oregano
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
110 lines (77 loc) · 3.24 KB
/
TODO
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
TODO list for Oregano.
---------------------
* Documentation : User manual, quick reference, doc for developers ,etc
* Add a BUGs file that describe bugs by #.
> If in the simulation I set a start time quite greater than 0, and use
> some pulse and/or sine generator to simulate the input to the circuit,
> then I got no output (because of no input is present). It looks like
> the imput is present only for a duration of tstop - tsart, and always
> starting at time=0
* Use library_name::symbol_name as key to hash the symbols.
* Methods to save/load ItemData's (save first).
* Context menus: make it possible to have entries that only show up when
there are x selected items (e.g. 1 or 1+).
Example: edit properties should only work with 1 selected part.
* Undo/redo
* Find and plug memory leaks
* Voltage/current meters at nodes
* New Sheet widget (resizable). (Gazer: Maybe fixed page model like Orcad)
* Tooltips for sheet-items?
new member: note = text for tooltip.
autoshow/keybinding.
item-data holds the text and sheet-item checks for leave/enter notify.
show properties...?
* Hierarchic schematics (use a schematic as a part).
+-------------------------+
| IDEAS |
+-------------------------+
CRITICAL:
netlists
nodes at wire endpoints.
TODO:
split node->count into wires and parts (to get connection dots...)
Structures
----------
Pins
Pins are stored in a hash table, using the coordinate (x,y) as key.
Wires
All Wires are stored in a list.
SheetNodes
For every position on the sheet that is populated with at least
one pin, there is a SheetNode. This SheetNode contains a list of
pins that are connected to it, as well as a list of wires. (The
SheetNode might also contain a pointer to the NetNode that this
node is part of?)
NetNodes
NetNodes are the nodes that correspond to the spice netlist nodes.
A NetNode holds a list of SheetNodes.
Algorithms
----------
Lookup
Pins are easy to retrieve at a certain coordinate; just perform a
hash table lookup at (x, y).
When we need to see if there is a wire at a certain position,
we can use the gnome_canvas_get_item_at () function. This doesn't
work reliably though, since it depends on the wire being on top and
also uses the close_enough variable, which makes it non-exact.
Another method would be to search through all the wires contained
within the sheet to see if any of them matches the given coordinate.
This could be slow and inefficient, but maybe not, given that there
will not be thousands of wires in a normal circuit, but rather
hundreds. However, this is still not the best way to do it.
Scalability is a goal, so this must be taken in consideration.
To see if a wire crosses a pin, we would have to search through
all the pins and check for matches.
Moving/Removing/Adding
Parts
Wires
Groups of parts/wires
REMEMBER
--------
We must be able to do a "reconnect all nodes"-thing. A function that
goes through all the parts/wires and makes sure that things that are
on the same node are connected and so on. This means we cannot depend
on any canvas helper stuff, like signals from items etc.
When loading schematic files from disk, we need to read the node
structure and not build it on the fly. Unless it will be efficient
enough...