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...
