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 ================================================================================ 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 ================================================================================ 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 ================================================================================ ++ 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 ================================================================================ ++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 ================================================================================ ++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 ================================================================================ ++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 ================================================================================ ++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 ================================================================================ ++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 ================================================================================ 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 ================================================================================ 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 ================================================================================ ++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 , 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 ================================================================================ ++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 ================================================================================ ++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 ================================================================================ ++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.