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