PetEd -- a gEDA/gschem clone

The primary goals of this schematics editor are

-easy to use
-nice look with simple user customisation (colors, fonts...)
-smart editing
-compact and not too complicated code

I have used Ruby, GTK3 and Cairo for it. Of course not everybody will like that. GTK3
will indeed restrict the editor strongly to Linux and other Unix like
operationg systems. For me this is OK, for other commercial operationg systems
there are already enough commercial EDA tools available. And Ruby? Not a bad
choise I think -- a nice language and fast enough. Speed is currently more
limited by Cairo. Python is much more popolar now, but popularity is not
really an important point for me. 

Compatibility with gschem file format

I will try to ensure compatibility, maybe with some extensions.

Smart editing

One core feature of this schematics editor is smart editing. This means: You
can do most basic operations simple with the mouse, without any kind of "mode
switching". This includes:

moving and rotationg elements
moving endpoints of nets
starting nets at pins or net endpoints
zooming, panning and selecting

Objects are highlighed in four steps: Plain, mouse pointer is hovering over
object, object is selected, and selected plus hovering.

You can grab an object simple with the mouse: Mouve mouse pointer over
object, press left mouse button and hold it, move mouse, release left mouse
button. This works for selelected and unselected elements -- their state
remains unchanged. When you mouse a selected element in this way, other
selected elements follow. Attributes (text) of each object builds an sub group
-- so you can move (or rotate) a set of selected attributes of an object,
without interfering with other selected objects.

Selecting objects works in this way: Click on an empty area with left mouse
button deselects all, click on an object selects that one. Click with Shift
key pressed can be used to select other Objects also, click with Control key
hold down can be used to toggle other elements between selected and deselected
state. Drag select: Move mopuse pointer to an empty are, pres left mouse
button and move mouse to draw a selection rectange. Use Shift or Control key
to add objects to selection or to toggle their state.

Use scroll wheel of mouse to rotate objects when mouse pointer is hovering
over it. Objects rotate around mouse pointer position.

Zooming: Mouse wheeel con be used to zoom in and out when mouse pointer hovers
over an empty area. Or you can do a drag select with the middle mouse button
(button 2, often combined with the mouse wheel). Drag must start over an empty
area -- if that is not possible you may hold Shift key down.

Panning: Hold middle mouse key down over an object and move the mouse after
you have zoomed in. If you hold Control key pressed you can also pan over an
empty area.

Special grab action: Some objects support their own grab actions, i.e.
endpoints of nets can be moved when you select not the center, but the
endpoint of a net.

Starting nets: Click with left mouse button over a pin endpoint or net
endpoint to start a net.

Overlapping objects: When objects overlapp, the the first click with the left
mouse button selects all, while next clicks selects one of them in cyclic
order. This is important when you move nets en points: A basic move will
translate all endpoints under the mouse cursor, but when only one is selected
by multiple clicks at that location, then only that one will move.

These are the most importand actions currently supported in "Smart mode".
Of course you are free to select dedicated modes later also.

Grid: We have a minor and major grid with a few default values. You can type
in arbitraty values. The ckeckbox at the left is used to select which one is
active, so we can switch between big or small grid fast. Grid text entry field
has its own popup menu, you can add your favorite values to the list.
