KiCad ChangeLog 2012
====================

Please add newer entries at the top, list the date and your name with
email address.

2012-Nov-19 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
Eliminate many assumptions in Pcbnew's library manager, pertaining to locality of libraries and
their type, by using the more abstract PLUGIN::Footprint*() functions.

This is an intermediate phase only, other changes will be necessary as library table support comes in.
Encapsulate usage of library path searching, since that will go away as library table support comes in.
Add FOOTPRINT_EDIT_FRAME::{get,set}LibPath() and FOOTPRINT_EDIT_FRAME::{get,set}LibNickName() functions
to provide this encapsulation.

2012-Nov-14 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
1) Switch to boost hashtable support from wx macros which did not handle std::string.
   This required the additional compiler command line option "-std=c++0x".

2) Switch to unique_ptr from auto_ptr which is C++ deprecated.

3) Change to new English layer names per mailing list discussion, see class_board.cpp.

4) When saving to *.kicad_pcb or *.kicad_mod, identify opportunities to use wildcard
   layer sets, for pads so far.

5) Switch to two std::string hashtables in pcb_parser.cpp, away from one wxString based one
   for layer names and layer sets mapping. One hashtable holds the mask, the other the index.
   Layer sets are only in the mask table.

6) Move "LOCALE_IO toggle" into PCB_IO::Format() since it is a public API function and
   caller should find it as convenient as possible to use.  LOCALE_IO should handle
   nesting OK in the case where public Format() is called from one of the Footprint*()
   functions.

7) Drop support for "export module to new library".  Creating new libraries will have to
   be handled in concert with library table entries, and we've talked recently about
   creating a better footprint library manager, one that resides in a DLL/DSO.  So
   this kind of functionality needs to be handled in there in the near future.

8) Change name of exported PCB_IO module/footprint to *.kicad_mod and not *.emp.



2012-May-5  UPDATE Jerry Jacobs <jerry@xor-gate.org>
================================================================================
++ common
 * Update about dialog to more native size so the notebook is not squeezed
 * Increment copyright year to 2012
 * Fix mousezoom jumping to center for Mac OS X and other platforms
 * Remove lowercase application name because Mac OS X menubar was inconsitent

2012-Mar-11 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++pcbnew
  * Add PCB_EDIT_FRAME::syncLayerVisibilities(), PCB_LAYER_MANAGER::SyncLayerVisibilities().
  * Save all visibilities, layer and render, in BOARD and restore on load.


2012-Feb-19 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++pcbnew
  * Remove virtual BOARD_ITEM::{Get,Set}Position() which in turn means all
    derived classes' implementations of these functions become non virtual and
    can be truly _inlined_ for speed!  All GetPosition() in derived classes were also
    changed to return const wxPoint&, that is, a reference rather than a
    full copy of the position wxPoint. There was no need for polymorphism in
    {Get,Set}Position() since we never call these functions via generic pointer.
  * Remove BOARD::{Get,Set}Position() since they were only there to satisfy
    the pure virtuals established in BOARD_ITEM, which are now gone.
  * Added const wxPoint& CPolyLine::GetPos(), made CPolyLine::Get{X,Y}() inline.
  * Derive CPolyPt from wxPoint so we can return "const wxPoint&" from
    CPolyLine::GetPos().


2012-Feb-19 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++pcbnew
  * remove global g_Pad_Master and put it into BOARD_DESIGN_SETTINGS
    which is in turn already within BOARD.
  * encapsulate class D_PAD with accessors, making data private.
  * make D_PAD::GetBoundingRadius() do its longer calculation lazily, based on
    m_boundingRadius == -1.


2012-Feb-5 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++pcbnew
  * Changed classs ZONE_SETTING to class ZONE_SETTINGS, better English.
  * Changed ZONE_SETTINGS::Import() to operator << ( ZONE_CONTAINER )
  * move globals into BOARD:
    bool g_Zone_45_Only, is now in BOARD::m_zoneSettings.m_Zone_45_Only
    ZONE_SETTINGS g_Zone_Default_Setting is now in BOARD::m_zoneSettings
  * Added BOARD::{Get,Set}ZoneSettings().
  * Added PCB_BASE_FRAME::{Get,Set}ZoneSettings().
  * Save/load BOARD::m_zoneSettings.m_Zone_45_Only to/from BOARD file.
  * Removed PCB_EDIT_FRAME::InstallDialogNonCopperZonesEditor() in favor of
    ::InvokeNonCopperZonesEditor() declared in zones.h
  * Added ::InvokeCopperZonesEditor() declared in zones.h
  * Removed dialog_copper_zones.h since DIALOG class is now declared in *.cpp.
  * Renamed to enum ZONE_EDIT_T in zones.h
  * SetVisibleAlls() is not called as it was in two previous cases for several
    reasons.  BOARD_DESIGN_SETTINGS constructor controls what is visible initially,
    and in the near future so will the *.brd file.  I believe the user should
    have visibility setting rentention accross editing sessions of zones,
    fields, etc.
  * BOARD_DESIGN_SETTINGS constructor initializes hidden text as not visible.
  * Added PCB_EDIT_FRAME::syncRenderStates() and PCB_LAYER_WIDGET::SyncRenderStates()
    so the checkboxes can be set after loading a BOARD file containing previous
    visibility settings.

2012-Feb-2 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++pcbnew
  * move globals into BOARD
    -wxSize g_ModuleTextSize; /* Default footprint texts size */
    -int g_ModuleSegmentWidth;
    -int g_ModuleTextWidth;
    But now the module editor is left hanging.  I'll have to figure out
    a way to pass from board editor to module editor these values, still.


2012-Feb-01, UPDATE Jean-Pierre Charras <jp.charras@wanadoo.fr>
================================================================================
Pcbnew:
Cvpcb:
    more about new netlist format:
    Cvpcb can now read new netlist format.
    There is a big change in Cvpcb: now Cvpcb just creates or updates a .cmp file
    Before this change, Cvpcb recreated the netlist (adding footprint info)
    and updated the .cmp file.
    But there is no reason to modify the netlist, because Pcbnew uses always the .cmp file
    (when exists) to know the footprint selection for components.
    Currently the netlist is used only when the corresponding .cmp file is not fount
    to select footprints.
    So users should not notice this important change.

2012-Jan-26, UPDATE Jean-Pierre Charras <jp.charras@wanadoo.fr>
================================================================================
Pcbnew:
    First draft to use a new netlist format (using S expressions)
    Eeschema can generate this netlist format.
    Pcbnew can use (automatic identification) the current format or the new format.
    Cvpcb does not use yet the new format.
    To do:
        New format in Cvpcb: how to use the .cmp file with the new netlist format


2012-Jan-22 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++all
  * Switch to C++'s true and false and away from C" TRUE and FALSE.
  * Enhance class PLUGIN's comments to improve their value as instructional.
  * Switch #includes from "file.h" to <file.h>, and fiddle with search paths
    by using include_directories(BEFORE ...)
  * dialog_page_settings did not have symmetrical space on its right border.
    And it now remembers it last position and size within a program session.
  * base_screen.cpp is now compiled twice, once for {pcbnew,cvpcb} and once
    for eeschema, in preparation for "compile time" support of internal units
    rather than "runtime" support.


2012-Jan-15 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++all
    Add "portrait" support to the page size settings for all standard paper
    sizes.  Tested with postscript output only.  Required minor file format changes
    to reflect the "portrait" setting.  common/dialogs/dialog_page_settings.cpp
    uses a checkbox but its name is "Landscape", which is inverted from portrait,
    but since it is the more common choice, I used that rather than portrait.
    The tooltip for that checkbox makes it clear.  No portrait mode is supported
    for "User" paper size.


2012-Jan-9 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++all
  * Carve out TITLE_BLOCK from BASE_SCREEN
  * Add include/hashtables.h and put class PROPERTIES in there.
    Change PROPERTIES to use "const char*" as the key instead of wxString.
++eeschema
  * Add shim class SCH_BASE_FRAME which introduces the data model SCH_SCREEN
    to the frame EESCHEMA frame class hierarchy and allows sharing of:
    SCH_SCREEN* GetScreen() const;                              // overload EDA_DRAW_FRAME
    void SetPageSettings( const PAGE_INFO& aPageSettings );     // overload EDA_DRAW_FRAME
    const PAGE_INFO& GetPageSettings () const;                  // overload EDA_DRAW_FRAME
    const wxSize GetPageSizeIU() const;                         // overload EDA_DRAW_FRAME
    const wxPoint& GetOriginAxisPosition() const;               // overload EDA_DRAW_FRAME
    void SetOriginAxisPosition( const wxPoint& aPosition );     // overload EDA_DRAW_FRAME
    const TITLE_BLOCK& GetTitleBlock() const;                   // overload EDA_DRAW_FRAME
    void SetTitleBlock( const TITLE_BLOCK& aTitleBlock );       // overload EDA_DRAW_FRAME


2012-Jan-5 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++all
    Ki_PageDescr was re-written as a proper C++ class and renamed to PAGE_INFO.
    It describes paper.  The m_Offset field was dropped since it was only used
    in HPGL plotting within EESCHEMA.  PAGE_INFO instance was moved out of
    BASE_SCREEN (which is on its way out) into both SCH_SCREEN and BOARD.


