Avoid GNUism '\|' by using extended REs.
[geda-gaf.git] / gschem / TODO
bloba0ebf776fac671859212c2f84c43bdca3bf2f0f7
1 TODOs
2 ----------------------
5 Code cleanups (no particular order):
6 ----------------------
8         coding standards
10         Go through and format the code.  it's really gross right now
12         Go through and make sure all mallocs with strings are sane
14         It's becoming critical to add comments...  (very critical)
16         Clean up COPY vs ENDCOPY (MOVE as well) in x_event
18         Change current_attribute and related setting funcs to be more
19         generally named
21         Go through and add null checks and print statements
23         o_connect_midpoint etc... fix/get rid of the offset2 stuff
25         IMPORTANT go through and fix object_tail and return_tail on all places
27         Careful with all lists which have a head, in particular attributes,
28         (they have a head, which has a null "object" pointer), which causes
29         some grief, see note in o_attrib.c about the grief
31         Total chaos between selected/object_head and replicated coded
33         Agg! get rid of all window_current's and global_window_current
35         Go through and clean up switch, case, break tabbing.
36         Related to above, way too many switch/case statements...
38         The object_parent variable and how it is used, is a slight kludge,
39         but I don't know of any other way of getting o_attrib_attach to
40         search the right list, depending on if you are reading a regular
41         component to object_head or a complex which goes to object->complex.
42         It becomes an issue, that you have to search the list.
44         move a_zoom a_pan to i_* world
46         perhaps rename a_basic to something else
48         go through and fix left, top, right, bottom to be what they really
49         mean (0,0 is in the lower left)
51         get some consistancy with *_world world_* etc.. *_world_*
52         (in complex really)
54 DONE    Make zoom in, zoom out, pan a single function.  Now this is doable
56 DONE    Remove gd/gd.h from every file... in gschem and libgeda
58 DONE    Inconsistant naming of o_current, object, current etc...
60 DONE    Get accurate names for o_list... routines.  like o_list_delete_all
61         which doesn't delete all (it doesn't delete the head)
63 FIRST   Figure out gtk_signal_connect and friends: proper last param.
64 SHOT DONE
66 DONE    The p_connect stuff is unused and needs to be removed
68 DONE    Created o_net_translate_world (been using line function)
70 DONE    Replace all struct st_object with a typedef
72 ----------------------
76 Feature additions (no particular order):
77 ----------------------
79         Seperate translate in the X and Y directions (in addition to the
80         current coupled X and Y translate)
82         Simplify i_update_* so that static strings are being re-set
83         constantly
86         Added rc keyword for pin/net thickness (the value) and for visual
87         cue size
89         there was an analog to the 'array' command  where you select
90         a group of stuff and hit array, enter the number of rows and
91         columns, and the relative spacing between them, and the copies
92         the thing nxm times and draws it all for you.
94         when first editing a text object, after the popup box appears with
95         the highlited selection, hitting the right arrow key would clear
96         the highlight and keep the cursor at the end of the text.
98         Text as objects: Visual texts to be selected separately. All
99         text geometry stored relative to its "mother object" so that
100         the text moves when the "mother" does.
102         Go through and make sure everything has a default (every release)
104         Added LogFilename keyword
106         Document all the features of the dialog boxes (returns etc...)
108         Document filename naming restrictions:
109                 - Symbols are named filename.sym
110                 - Schematics are named filename_#.sch  where # is sheet number
111                 - Sym/Sch names need to be unique.
112                 - ONE dot per filename!
114         Generalize the way source files are displayed, ie if you get a .gif
115         the program should run a image program, use mime.types and mailcap
116         for this
118         Change directory option?
120         Open symbol pops up a new window, configurable through rc file
122         Configurability of mouse button order (left vs right handed)
124         Configurable "hit return and close dialog box" for attributes,
125         components etc...
127         Configurability as to what mode a cancel (with right mouse button)
128         does.
130         Breaking of nets when you connect in the middle.
132         Two "indicators" in some way (suggest to the right of the pulldowns)
133         that indicates if you're in 'toggle snap' or not, and if you're in
134         'toggle grid' or not. 'Toggle grid' might not be useful because you
135         should see it :-)  Then 'Toggle outline' is another choice?
137         Another menu option to rotate one component? Or check if the
138         selection is just one component and via a gschemrc item give the
139         user the possibility to rotate the component around it's origin
140         or a common point? Rotate more selected objects the way it is
141         implemented now.
143         Complex within a Complex?
144         Probably not yet at least not yet. (might work mostly now, but not
145         completely)  This is not the same thing as hierarchical design.
147         A set of compile or runtime flags to control "fluff" (ie make things
148         go as fast as possible)
150         metric units instead of mils (in addition to mils)
152         Not sure I like that selectable vs unselectable flag in complex's
153         Fix with locking layers
155         Fix o_edit to handle multi edits.  Should be just a code clean:
156                 get rid of all direct access to new_sel_head and friends
157                 pass in structure that is being edited...
158                 Move object/structure code out of x_dialog.c
160         PIN/NET thickness configurability
162         Add code so that when you switch between actionfeedback modes
163         and your inside an action you get instant feedback
165         Not a well behaved X program: finish wm hints, icon, X commandline args
166         etc...
168 DONE    Add config option for geometry of the window. (or command line option)
171 DONE    Fix the stupidity of when net consolidation is on, you unselect
172         everything.  This was temporary till you rewrite
173         o_net_consoliate_lowlevel (in libgeda)
175 DONE    Code to have all attributes visible
177 DONE    Make sure snap spacing is set to 100 when doing symbol translates
178         (warn user in log window)
180 DONE    Added the ability to rotate embedded components
182 DONE    Fix the color scheme and make it flexable.
184 OKAY    Figure out if you want the net draw/add action to end when you draw
185         a zero length net (configureable?)
187 DONE    Check and see what we are doing with invisible attibutes, if we are
188         rendering them or not (to speed things up), fixed by NOT creating
189         the attribute (or text)
191 DONE    Check for incorrect angles on text... warn user
193 DONE    Add dashed lines etc...
195 DONE    When you rotate a component, associated attributes get de-assosciated
196         write code to fix this
198 DONE    Search for schematic in memory and don't load it from disk if it is.
200 DONE    Add the ability to specify $HOME in an rc file for a path
201         ( do you want to do ~ as well? )
203 DONE    Do sanity checks on all drawing input
205 DONE    Better handling of dot/square size routine drawing based on zoom
206         factor
208 DONE    Don't allow zero length objects in general
210 DONE    Alignment of text objects
212 DONE    Move schematic filenames toward the _# convention.  Where the #
213         (is a number) signifies the sheet number it's on.  Will make moving
214         between sheets easier.
216 DONE    A toggle invisiblity ALL objects
218 DONE    Automatic saving
220 DONE    mouse coordinates
222 DONE    Document the ortho/non ortho ability of nets
224 NAH     Consider using an aspect frame to control the aspectratio of the
225         drawing area (enforce aspect ratio then indirectly)
227 DONE    Dialog box for printing...
228 (first cut)
230 DONE    Default behavior of caps vs case sensitive labels/text?
231         make this configurable
233 GONE    fix dialog box to be able to handle NEW discards... see NEW define
234         in x_filesel.c
236 DONE    Editing of objects:
237                 TEXT - color size string
238                 LINE/CIRCLE/ARC/BOX color endpoints?
239                 NET/COMP ????
241 DONE    configuration ability for ortho pins and nets
242         This wasn't done, but you can draw non-orth lines and nets. (non ortho
243         pins might be added later)
245 OKAY    Pins need their own conn_recalc routine
247 DONE    Boxes (box and selection) that go in both directions... left->right
248         right->left
250 DONE    Attribute dialog box.  which lets you select the standard attributes
252 DONE    Font system must be replaced by a more flexable system.  Ie arbitrary
253         text sizes allowed and the choosing of the font should be based on
254         zoom_scale.
256 DONE    Add lock down component code and interface hook.
258 DONE    Add a new dialog box for saving and managing pages.  Use a different
259         mechanism for calling the saveas dialog box.
261 DONE    Panning: the working area follows the mouse.
263 DONE    Move/Copy actions start right away after hot key press
265 DONE    Go back and look at 4 nets coming together problem (not showing dot)
267 DONE    Added text dialog box which behaves like attribute add.
269 DONE    Better toggle buttons for visibility etc (sub instead: GtkSpinButton)
271 MOSTLY  Object clipping...
272 DONE
274 WORKING component slotting (ie dealing with the number of slots in a packages)
276 WORK    Analog support (draw symbols)
278 PROGESS
280 Second TODO list
282 0 = every release
283 1 = just started
284 2 = crude basics working
285 3 = mostly working
286 4 = a lot fluff added
287 5 = done
289 easy:
290 0       remove all // comments
291         comments in the code
292         Control-C handler
293         checks for all system calls (with perror)
294         update specs
295         crosshair
296 1       buses
297 1       macro/extensiable lang
298 1       Make symbol (odd bug with hitting S twice then it works ? )
299 2       cleanup printfs
300 3       object clipping out of active window
301 3       dashed lines (slightly hard, but time consuming to change code value?)
302 3       sloting (as in pin numbers in multpacks) of components
303 3       console
304 3       Standard place for symbols/symbol hierarchy
305 4       stretch/edit of nets
306 4       newer net system
307 4       color selection (better color handling)
308 4       boundingbox vs outline
309 4       hierarchical design
310 4       pins (still need to check conn funcs)
311 4       interface cleanup
312 4       multibuffers (make sure all routines don't hardcode new_sel_head)
313 5       rotate of complex
314 5       logging mechanism
315 5       push/pop into a symbol
316 5       mirror of primatives
317 5       mirror of complex
318 5       arcs
319 5       rotate of primatives
320 5       attributes
321 5       zoom box
322 5       text (vector font)
323 5       finer grid (selectable snappage)
324 5       page system
325 5       multi select box! / window select
326 5       contrained move/copy
327 5       fix all return values
328 5       Change color of highlight to light grey
329 5       prototypes for everything
330 5       Change file format to use letters for types instead of #'s
331 5       outline copies should be more color realistic
332 5       middle button to repeat last command?
333 5       attributes with names= etc...
334 5       backingstore and improved expose event handling
335 5       multi select
336 5       scrollbars
337 5       Contrained lines (with control key like o_drawbounding())
340 medium:
341         netlists (belongs in gnetlist)
342         layers
344 harder:
345         transparent zooms and pans
346         client lib to do above and protocol
347         cut and paste
349 questionable:
350         active attributes
351         HUD
352         have cursor jump around if snap on
354 MISC
355 -------------
357 -       A solution to the current block problem (offset wrong) is to
358         write out the block as it is in memory to the file.. and then
359         when it is loaded again it will be correct... hmmmmm.. use
360         the left/top coords as the starting x and y then instead of the
361         original pair...
363 -       A better solution would be to translate all the objects to zero zero
364         and then save the object as a symbol.
365         Of course this is what I did
367         Requires a color display
369         Doesn't work too well with AutoRaise
370         This has improved, but I still need to work on this.
373 misc FAQ
374 -----------------------------------------------------------------------------
376 Q:  Copying/Moving objects that aren't on the grid, causes them to snap
377     onto the grid if snap is on.  What's the deal with that?
379 A:  This is a "normal" behavior.  It is an artifact of how I do grid/snap
380     locking.  Don't move/copy objects which are not snapped to the
381     grid with snap on.  Since this is not a general purpose drawing program,
382     don't work with the snap off.  You should only have to do that if you are
383     adding text in key places or drawing symbols.  I am thinking on how
384     to improve my snap/grid locking to be more robust.
389 REWRITES
390 ------------------------------------------------------------------------------
391 - A possible redo of the boundingbox idea, what if you searched through
392   all individual boundingboxes on all objects (especially complex)
394 - Coord system needs total rewrite.  Maybe not, but it is lacking in that
395   it is based on ints
399 Misc Stuff todo:
400 ------------------------------------------------------------------------------
402 midpoint droppings on moves/copies
406 Suggested ideas:
407 -----------------------
409 (this list is not complete, there are still many more people who suggested
410 stuff, and each of the listed people suggested other things.  I just
411 haven't had time to move the ideas from my mailbox to here)
413 suggestions by:  Andrew Dyer
414 - View logic compatibility
415 - web enabled : schematics/symbols/models viewing/distributing on the web etc.
416 - in-memory connections database
417 - revision control (cvs rcs)
418 - infinite undo
419 - EDIF (and tango netlists) and other friends
420 - extension lang/ macro lang (tcl, forth ? )
421 - EDITOR support for editing big symbols
422 - arrow key support
424 suggestions by: Erik de Castro Lopo
425 - SPICE netlist format
426 - Scrollbars and a better zoom (center of window)
427 - properties dialog box for components
428 - Design Rule Checking and dialog box suggestions
429 - better window/aspect ratio control (get rid of mostly)
430 - more dynamic window size (give user more control)
432 suggestions by: Emmanuel Rouat
433 - connected nets staying with components with distortion.
435 suggestions by: Matt Ettus
436 - RCS/CVS support (another vote for this)
437 - project management program ("glue" between programs)
438 - remove concept of filename from gschem ???  (a design librarian)
440 suggestions by: borges@ifi.uio.no
441 - Set a dialog box size on component select.
442 - escape key to cancel.
443 - libraries with this subsloting idea? .
444 - Scrollbar on the middle button (configuration)
445 - toolbox with icons.
446 - alternate move/copy behavior.  Just select object and drag.
448 suggestions by: Harry Eaton
449 - spread-sheet window that contains properties of whatever you're
450   interested in on the schematic (could be a list of elements, names,
451   spice model names, package types, etc, or a list of nets, and their
452   properties)
454 suggestions by: Kyriacos Iacovou
455 - draw/outline commands with the mouse to select the various modes
457 suggestions by: Stefan Petersen
458 - As few keystrokes/mouse clicks as possible -> stay in mode until users
459   selects a new mode
460 - alternate move/copy behavior:  Just click and drag.
462 suggestions by: Jeff McNeal
463 - Another vote for nets update when you move a component
464 - Strokes.  A la CADENCE or Mentor.
465 - Go to FreeHDL intermediate format instead of VHDL?
467 suggestions by: Michael Linnemann <Linnemann@berg.net>
468 - A manual keyboard search entry for entering symbols.
469 - better symbol lookup searching catagorizing mechanism
471 suggestion by: Magnus Danielson <cfmd@swipnet.se>
472 - Oh, shouldn't we rewake the idea of a symbol/symbol library contribute
473 button?  You know, when a user wishes to contribute a symbol, a number
474 or symbols or even a full library (directory) he/she can just walk down
475 the File menu and select Contribute Symbol... which will do screening,
476 encapsuling and then mail/ftp the symbol to you (geda.seul.org).
480 Future Specifications for gschem
481 -----------------------
483 Basic Stuff
484 -------------
485 text
486         add
487         edit
488 nets
489         be one complete net (not done yet)
490         add to existing net
491         break net
492         (filled|empty) squares/cross at the end of nets
493         (filled|empty) circles at midnet connection points
494 boxes
495 circles
496 ellipses?
497 lines
498 pins
499 busses
500 arcs
501 complex
502         add
503         push
504         pop
505         create symbols
506 attributes
507         attach
508         detach
509         edit
510         execute special action
511         value=name
512 Layers
514 Operations (for all objects)
515 ----------
516 copy
517 move
518 delete
519 cut and paste
520 Constrained/Free move (SHIFT/CTRL keys)
521 outline/move
522 multiselect/deselect (SHIFT/CTRL keys)
523 select box
524 rotate?
527 View
528 ----
529 Zoom in/out
530 Zoom Full
532 Redraw
534 Other stuff
535 ----------
536 Page system (neads to be done early)
537 page size selection
538 Zoom box (?)
539 Printing to postscript
540 all units in mils
542 File
543 ----
544         open
545         close
546         save
547         save as
548         rcfile handling
549                 color selection
550                 mode selection
551                 library path selection
554 interface
555 ---------
556         Flexable interface
557         should be easy to use
558         console
559         scripting language