KiCad TODO List
===============

WXMAC Platform
--------------
* Fix hotkey list to match CMD key
* Fix AddHotkeyName to let wxWidgets handle Ctrl to CMD key
* Fix toolbar button tooltips.

Common
------
* Grep for @TODO or TODO for sourcecode tasks
* Use Doxygen compatible comments on member functions (.h files)
* Add tooltip text to all non-obvious controls in every dialog window.
  Use wxFormBuilder.
* Component and module search displays in which library the
  module or component lives.
* List auto up and down scrolling.
* Push file open semantics down to one of the base frame classes ( likely candidate is
  WinEDA_BasicFrame ) so that file open behavior is consistent across all applications.

* Look over Brian's python BOM generation scripts, which are now in
  scripts/python/ky and sort them out.
  Code came from Brian in this posting's attachment, which is ky2.zip:
  https://lists.launchpad.net/kicad-developers/msg06763.html
  but is now in scripts/python/ky temporarily.


FP LIB TABLE
------------

Dialog:
- - - -

a) check for duplicate nicknames in a single table, complain, give the user a nice indication of the duplicate(s)

b) in the uri column give a small button popup a window(dialog?) which lets user choose a file or directory local to his system by pointing at it.

c) Active library table load and save functions.  There are two tables active at any time, but
they look like one table.  Identify a place to keep the access mechanism (pointer).  Modify
the project specific portion of this RAM table when the board changes.


Other:
- - - -

a) develop a syntax for nickname:footprint combo, i.e. bring to life class FPID
 with development and testing of parsing and formatting.


b) modify cvpcb to handle the nickname:footprint, i.e. textual form of FPID.
This means having a wider textfield for the FPID than was allocated for the footprint name alone.
Needed is the ability to pick a footprint from any active library.


c) modify the netlist format to handle nickname:footprint, save and load.
The nickname needs to be optional.  I would say allowed in the grammar in the
footprint position are:

    footprint | (fp_id FPID)

or just

    FPID   # if it can be parsed when nickname is missing.


d) write functions to lookup a footprint from
 i) FPID
 ii) footprint alone since most old netlists don't have nicknames in them.

e) Replace MODULE::m_LibRef which is a wxString with FPID.  FPID supports
   the footprint name only which is backwards compatible with the current
   design.

f) On the first time an empty global footprint table is encountered, add
   standard KiCad and user libraries not located in the project directory
   or any of it's sub-directories to the global footprint library table.

g) When a project is opened and the project footprint library table is
   empty, add any user library that is located in the project path or any
   of it's sub-directories to the project footprint library table.

h) When populating the footprint library tables, use the library  file name
   without the extension as the FPID nickname.  When duplicate names exist,
   append an incremental integer to the nickname so that the second logic
   libraries FPID nickname becomes logic1.  Assign FPID library nicknames
   to each MODULE based on the legacy library search order when loading an
   existing board that does not have fully defined MODULE FPIDs.

i) Add check for KISYSMOD environment variable, on Pcbnew and CvPcb start up
   and set it to the known directory of the default KiCad footprint libraries.
   The code should look something like:

{
    const char* envar;

    envar = getenv( "KISYSMOD" );

    if( !envar )
    {
        envvar = knownDirOfSysMods;

        setenv( "KISYSMOD", envar );
    }
}


These i) and ii) merge into one if footprint alone is a valid FPID.
Incorporate any environment variable in the the uri expansion using:
const wxString FP_LIB_TABLE::ExpandSubtitutions( const wxString aString )





Eeschema
--------
* Drag and drop between two Eeschema windows.

Wayne:
E3)  Hook up perform last library search hot key to replace search libraries for
     component support removed from find dialog.
E4)  Change add component dialog search text control to combobox and add component
     search history save and restore capability.  Also add session save and restore
     to component history list control.  Add advanced search capability similar to
     new find dialog.
E6)  Start initial work for changing component library file format to use Dick's
     dsnlexer.  See note C2 above.  Come up with a workable library file format to
     handle the wishes of the library implementation group.  Add initial clipboard
     support to the library editor.



PCBNew
------

*)  Make the zone hit testing be done in screen coordinates, not internal units.
    See the @todos in class_zone.cpp.  A fixed distance in internal units becomes
    a variable distance based on zoom factor, leading to inconsistent results at
    various zoom factors.  I believe that a fixed distance in pixels might make
    for a friendlier UI.

*)  Add a hot key to toggle the 45 degree constraint on and off so that it can be
    changed when drawing a trace.


Dick's Final TODO List:
======================
*) write options dialog for fp table dialog.
*) Apply Fabrizio and Alexander's linux desktop patches after unifying them.
*) Get licensing cleaned up.
*) Re-arrange the repo architecture.
*) Merge KiCad GAL/TOM/ORSON if nobody else does.
*) lib_convert.py (i.e. convert) all footprint libraries to pretty format and move copy them to
   github if nobody else does.
*) DLL-ization of pcbnew eeschema
*) Pass options, i.e. PROPERTIES to all PLUGIN::Footprint*() calls.  Current code needs
   to be based on NickNames, not Libpaths, so we have access to the FP_LIB_TABLE::ROWs.
   User should not be prompted for a libpath for reading from it, he/she must pick from the
   known list of nicknames. Possibly duplicate some of the PLUGIN:::Footprint*() api in ROW or
   FP_LIB_TABLE. Again, limited to PLUGIN::Footprint*() calls, not Load() and Save().
