Major missing features: - populate input area (still needed: mm/mil, rezoom) - add default unit (combine with grid unit selection ?) - consider adding auto/mm/mil selection for each dimension - add measurements (partly done. still needed: find out how to define non-trivial endpoints, e.g., some vector in last iteration of loop) - add KiCad output - add postscript output - add option to include/omit helper vecs and frames (done for display, still need postscript) Minor missing features: - reorder frames (can use text editor) - reorder rows in a table (can use text editor) - reorder columns in a table - reorder variables in a frame (can use text editor) Error detection: - eliminate duplicate instances Style: - make column of entry field greedily consume all unallocated space - make menu bar consume all unallocated space instead of sharing it evenly with upper toolbar - status area looks awful - add button with GTK_STOCK_UNDELETE for "undelete" to menu bar - edit names/values/etc. in place if possible Bugs: - default silk width has no business being hard-coded in obj.c - undelete only works if not much has changed since the deletion Code cleanup: - merge edit_unique with edit_name - merge find_var_in_frame with similar mechanisms in expr.c and fpd.y - add regression tests Open decisions: - Q: should loop be (start, last) or (start, iterations) ? or start ... last ? - change vector circle color ? (also, highlight on hover ?) - Q: allow reassignment of vector names ? A1: no: would cause confusion in GUI (vectors could become orphaned) A2: yes. but we don't change the linkage. - Q: how do we handle stacks of objects ? A: we don't but we make it easy to avoid them, by giving a good zoom, flexible selection, and by disallowing stacks of identical objects in the first place. - Q: add frame arguments ? (e.g., .frame pad(pin_num_offset) ...) we can already approximate this by introducing an intermediate table that sets up the arguments (provided that we don't consider vectors as well) - Q: should we make it a requirement to generate objects only once ? A: almost certainly yes. Future directions: - future: consider using cairo instead of gdk - live update of value when entering strings and expressions ? - advanced: non-standard solder mask - advanced: solder paste exceptions (subtractive, additive) - advanced: silk line width - future: when encountering an error after a change, we could try to find the same element in the old instance, and select it - future: consider editing off-canvas items in place - near future: treat part name as pattern