summaryrefslogtreecommitdiff
path: root/Documentation
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/GUI_Translation_HOWTO.odtbin0 -> 235937 bytes
-rw-r--r--Documentation/GUI_Translation_HOWTO.pdfbin0 -> 339069 bytes
-rw-r--r--Documentation/HOW_TO_CONTRIBUTE.txt56
-rw-r--r--Documentation/KIWAY_Build_Symbols_Defined.txt29
-rw-r--r--Documentation/biu-plan.txt243
-rw-r--r--Documentation/changelogs/CHANGELOG-2007.txt1547
-rw-r--r--Documentation/changelogs/CHANGELOG-2008.txt1561
-rw-r--r--Documentation/changelogs/CHANGELOG-2009.txt1013
-rw-r--r--Documentation/changelogs/CHANGELOG-2010.txt1010
-rw-r--r--Documentation/changelogs/CHANGELOG-2011.txt297
-rw-r--r--Documentation/coding_style_policy.pdfbin0 -> 190635 bytes
-rw-r--r--Documentation/development/Doxyfile1780
-rw-r--r--Documentation/development/coding-style-policy.md800
-rw-r--r--Documentation/development/compiling.md413
-rw-r--r--Documentation/development/road-map.md834
-rw-r--r--Documentation/development/stable-release-policy.md80
-rw-r--r--Documentation/guidelines/UIpolicies.txt85
-rw-r--r--Documentation/interactive_router/build.sh5
-rw-r--r--Documentation/interactive_router/interactive_router.mmd73
-rw-r--r--Documentation/interactive_router/pictures/opengl_menu.pngbin0 -> 44164 bytes
-rw-r--r--Documentation/interactive_router/pictures/route_icon.pngbin0 -> 547 bytes
-rw-r--r--Documentation/interactive_router/pictures/router_options.pngbin0 -> 38081 bytes
-rw-r--r--Documentation/interactive_router/pictures/rules_editor.pngbin0 -> 59613 bytes
-rw-r--r--Documentation/notes_about_pcbnew_new_file_format.odtbin0 -> 41015 bytes
-rw-r--r--Documentation/rules_for_capitalization_in_Kicad_UI.txt48
-rw-r--r--Documentation/s-expressions.txt89
-rw-r--r--Documentation/wxWidgets_patch_notes.txt20
27 files changed, 9983 insertions, 0 deletions
diff --git a/Documentation/GUI_Translation_HOWTO.odt b/Documentation/GUI_Translation_HOWTO.odt
new file mode 100644
index 0000000..1638460
--- /dev/null
+++ b/Documentation/GUI_Translation_HOWTO.odt
Binary files differ
diff --git a/Documentation/GUI_Translation_HOWTO.pdf b/Documentation/GUI_Translation_HOWTO.pdf
new file mode 100644
index 0000000..6e6e408
--- /dev/null
+++ b/Documentation/GUI_Translation_HOWTO.pdf
Binary files differ
diff --git a/Documentation/HOW_TO_CONTRIBUTE.txt b/Documentation/HOW_TO_CONTRIBUTE.txt
new file mode 100644
index 0000000..d042329
--- /dev/null
+++ b/Documentation/HOW_TO_CONTRIBUTE.txt
@@ -0,0 +1,56 @@
+Contribute to KiCad (under Linux)
+--------------------
+
+1) make sure you have all the dependencies of KiCad:
+ sudo apt-get install debhelper dpatch libx11-dev
+ sudo apt-get install libglu1-mesa-dev libgl1-mesa-dev mesa-common-dev
+ sudo apt-get install libwxbase2.8-dev libwxgtk2.8-dev libboost-dev fakeroot
+ sudo apt-get install cmake bzr
+ sudo apt-get install cmake bzr bzrtools
+
+2) initialize Bazaar:
+ bzr whoami "John Doe <john.doe@gmail.com>"
+
+3) get latest KiCad source tree:
+ cd ~/
+ bzr branch lp:kicad kicad.bzr
+
+ this should leave you with the folder kicad.bzr
+
+4) Read coding_style_policy.pdf, in kicad.bzr/Documentation,
+ and other docs.
+
+5) create a local (branch) copy of the KiCad project
+ bzr branch ./kicad.bzr ./kicad.my_contrib
+
+6) Modify/add source code in
+ cd kicad.my_contrib
+ gedit .......
+ if you need to create and add the file foo.cpp do so and:
+ bzr add foo.cpp
+ if you need to delete files:
+ bzr rm foo.cpp
+
+7) Compile:
+ cd kicad.my_contrib
+ mkdir build; cd build
+ cmake ../ -DCMAKE_BUILD_TYPE=Debug
+ to build a debug version
+ or
+ cmake ../ -DCMAKE_BUILD_TYPE=Release
+ to build a release version
+ make -j8
+
+8) Repeat step 6 and 7 until satisfied.
+
+9) Create a patch file:
+ cd kicad.my_contrib
+ bzr diff > my_changes.patch
+
+9) Send the patch file "my_changes.patch" to the KiCad developers mailing list.
+ in the subject of the e-mail include the keyword "[PATCH]".
+ in the body of the e-mail clearly explain what you have done.
+
+
+for more info see INSTALL.txt.
+
diff --git a/Documentation/KIWAY_Build_Symbols_Defined.txt b/Documentation/KIWAY_Build_Symbols_Defined.txt
new file mode 100644
index 0000000..f10dea9
--- /dev/null
+++ b/Documentation/KIWAY_Build_Symbols_Defined.txt
@@ -0,0 +1,29 @@
+
+KIWAY Build Symbols, Definitions and Intentions
+
+
+COMPILING_DLL:
+
+ This is a signal to import_export.h, and when present, toggles the
+ interpretation of the #defines in that file. Its purpose should not be
+ extended beyond this.
+
+
+USE_KIWAY_DLLS:
+
+ Comes from CMake as a user configuration variable, settable in the Cmake
+ user interface. It decides if KiCad will be built with the *.kiface program
+ modules.
+
+
+BUILD_KIWAY_DLL:
+
+ Comes from CMake, but at the 2nd tier, not the top tier. By 2nd tier,
+ something like pcbnew/CMakeLists.txt, not /CMakeLists.txt is meant. It is
+ not a user configuration variable. Instead, the 2nd tier CMakeLists.txt file
+ looks at the top level USE_KIWAY_DLLS and decides how the object files under
+ the 2nd tier's control will be built. If it decides it wants to march in
+ lockstep with USE_KIWAY_DLLS, then this local CMakeLists.txt file may pass a
+ defined BUILD_KIWAY_DLL (singular) on the compiler command line to the
+ pertinent set of compilation steps under its control.
+
diff --git a/Documentation/biu-plan.txt b/Documentation/biu-plan.txt
new file mode 100644
index 0000000..6fe9267
--- /dev/null
+++ b/Documentation/biu-plan.txt
@@ -0,0 +1,243 @@
+Proposed Plan for adding Nano Meters into PCBNEW as the Board Internal Unit
+===========================================================================
+
+Author: Dick Hollenbeck November 25, 2011
+
+Introduction:
+============
+
+This document sketches out a plan to move KiCad's PCBNEW program from deci-mil
+internal units to nanometer internal units. The changes to the code are
+significant enough to describe the basic process before the work is started.
+
+Definitions:
+===========
+
+*) Board Internal Units (BIU). This is a pseudonym for the engineering units
+used by a BOARD when it is in RAM, and only when it is in RAM. BIU is
+essentially equal to nanometers in the future, and equal to deci-mils currently.
+A BIU refers typically to a measurement or a position on an XY grid, and this is
+because this grid is dimensioned in BIUs along both its X and Y axes. Both X and
+Y can be either positive or negative on this grid. In the case of measurements
+or scalars, there can be a radius, a diameter, a distance (length), and all of
+these can and should be expressed in BIUs, so long we are in RAM and so long as
+we are talking about the objects within the class BOARD instance. One special
+feature of XY points within the BIU coordinate system is that they will always
+be integers. In contrast, distances and other forms of measurements are not
+subject to the same limitation by the very nature of physics. Coordinates are
+always integers because we used signed whole numbers to represent these BIU
+coordinates.
+
+*) Snap grid. A snap grid is a subset of the full set of possible XY coordinates
+in the BIU coordinate system. Points falling on the snap grid are evenly spaced
+in X and Y directions and are some integer multiple apart in this 2D space,
+greater than one BIU.
+
+Assumptions:
+===========
+
+a) It is ok to modify the board file format in order to handle the BIU change.
+
+b) Boards saved on disk in the new format will not be readable using old software.
+
+c) Since we have no backwards compatibility obligation (see b) above), we can
+make significant changes to the file format while we have this disruption
+opportunity.
+
+General:
+=======
+
+With nano meters as the Board Internal Unit (BIU), a 32 bit signed integer can
+only hold about 2 meters of positive length and 2 meters of negative length.
+Moreover, because most of the bits within a 32 bit integer can be "used up" to
+hold a typical length within a board, it is very likely that if pure 32 bit
+integer math is done, such as the multiplication of two integers in order to
+calculate a hypotenuse, then there will be an overflow within the 32 bit
+integer. (Another way to think of the BIU acronym is "Board Integer Unit" instead
+of as Board Internal Unit, to pave the way for the BFU, discussed below.)
+
+Therefore all intermediate products, quotients, trig, and exponential
+calculations should be done using some larger floating point type. By larger,
+bitness or number of bits is meant. Distances that do not have to be rounded
+back to integer immediately can and should stay in the larger floating point
+"value container" for as long as possible. The typedef name of this floating
+point type is BFU (Board Float Unit). The engineering units on a BFU are the
+same as on a BIU. A typedef is nice so that we can toggle between double and
+"long double" for various compilations, and so that when performing casts, these
+are brief textual expressions.
+
+Format Strings:
+==============
+
+Because all our save to disk functions use printf() style format strings, we
+discuss how to construct a format string in the most usable way. There should be
+a printf() style format string like "%.6g" for the BFU (cast to a hard coded
+double) enclosed within a #define and its name should be FMT_ENG. This format
+string will be used at least for saving BOARD and MODULE files, and perhaps
+more.
+
+FMT_ENG stands for "format string for ENGineering units used out in the file". A
+define is needed simply to provide consistency across many sites of usage. BIUs
+will be scaled before being written to disk in most every case, and since
+scaling is a multiplication, it means casting one of the factors to BFU, and
+then this product is output with a printf() style function using the FMT_ENG
+string segment.
+
+That is, the FMT_ENG will be suitable for use with a BFU type. When BFU is set
+to double, then FMT_ENG will be set to "%.6g". When BFU is set to long double
+then FMT_ENG will be set to "%.6Lg". For example:
+
+#if USE_DOUBLE_BFU
+typedef double BFU;
+#define FMT_ENG ".%10g"
+#else
+typedef long double BFU;
+#define FMT_ENG ".%10Lg"
+#endif
+
+A format string can then be built up using compile time concatenation of
+strings, like this:
+
+fprintf( fp, "Value: " FMT_ENG " " FMT_ENG "\n", BFU( biu1 * scale), BFU( biu2 * scale ) );
+
+The 3rd and 4th arguments are BFUs, and the casting is done after the multiply
+since the scaling factor is already a double or perhaps even a long double. The
+final argument needs to match the format string, so the final product is wrapped
+in a BFU, which could actually be a truncation down to 64 bit float from 80 bit
+float. The key points are: the calculation must be done in a float type at least
+as bit-wide as BFU, and that the value actually passed to fprintf() must match
+the format string.
+
+Choosing BIU Units:
+==================
+
+BIUs are only used when a BOARD or MODULE is in RAM. A BIU is equivalent to
+either a 1) deci-mil or 2) nanometer, depending on how the source code is
+compiled. It is not a runtime decision. Form 1) is needed only during the
+preparation phase of the source code transition to nanometers. After the
+transition, only nanometers will be used in the compilation. No runtime
+switching is needed or wanted. Again, BIUs can only be one or the other for a
+given compilation, and this will swing based on a single #define.
+
+Eventually we may want to actually use "BIU" as our integer type in source code
+for those lengths which pertain to the board coordinate space. This would give
+us the ability to easily modify it, go to a larger bitness, make the source code
+more readable, and keep the type information out of the variable name. This
+would mean having a point and/or size class based on BIU as the contained
+integer types. This is a nice to have, but not immediately mandatory.
+
+There will be a number of places within the source code which will have to be
+doctored up to use the BFU casting. It will take some time to find all these
+sites. During this time it should be possible to continue using deci-mils as the
+BIU for source compilation.
+
+There are a quite a number of path ways in and out of BOARDs and MODULEs. Most
+everyone of these pathways involve conversion or scaling of BIUs. An example of
+a pathway in is a BOARD disk file loading function. An example of a pathway out
+of a BOARD is a disk file saving function. Likewise for MODULEs. We can
+characterize the load and save functions by their source and destination
+representations of lengths.
+
+BOARDs and MODULEs will soon have a new format, which is basically the existing
+format expressed in um or nm (TBD) rather than in deci-mils. For discussion, we
+will say this new format is in mm, even though it may end up being in um. In
+another year or two we will switch to s-expressions, or sooner if there is a
+volunteer.
+
+Here are the required immediate need BOARD load functions:
+
+1) Legacy to deci-mil loader. This loader uses a floating point scaling factor
+of unity, since destination is a RAM BOARD using deci-mils as its BIU.
+
+2) Legacy to nanometer loader. This loader uses a floating point scaling factor
+of 2540, since destination is a RAM BOARD using nanometers as its BIU, and
+the source format is using deci-mils.
+
+3) mm to nanometer loader. This loader uses a floating point scaling factor
+of 1000000, since the destination is a RAM BOARD using nanometers as its BIU.
+
+There is no need for a nm to deci-mil loader. (Once somebody saves a file in the
+new format, that format is used going forward, or its backup in the old format.)
+
+Now duplicate the above 3 loader types for MODULEs.
+
+Here are the required immediate need BOARD save functions:
+
+1) deci-mil to deci-mil, using a floating point scaling factor of unity. It
+should be possible to use trailing zero suppression on the deci-mils to get a
+BOARD that is identical to an old BOARD, and this can be used to test the new
+save function, using "diff" with whitespace ignore. This saver is only in play
+when the BIU is compiled to be deci-mils.
+
+2) nanometer to mm, using a floating point scaling factor of 1/1000000. This
+saver is only in play when the BIU is compiled to be nanometers.
+
+Now duplicate the above 3 saver types for MODULEs.
+
+New BOARD and MODULE files will have a new field in them identifying the
+engineering units used, say mm.
+
+In actuality, the source code to all 3 loaders, and to all 3 savers can be the
+same source code with a single variable in each case for scaling.
+
+All 6 loaders and all 6 savers should be written in parallel with existing
+loaders and savers, so that we can toggle usage back and forth between the two
+for awhile. This means we do not gut existing savers and loaders until the new
+ones are debugged and stable.
+
+The new savers and loaders are to be done in the context of a plug-in
+architecture, described elsewhere.
+
+Angles and Rotations:
+====================
+
+Internally we are switching from using an int to hold 1/10 of degrees angle to a
+typedef called DEGREES. The allowed values that DEGREES can hold will be
+enforced by the user interface policy, decided elsewhere. The engineering units
+in the DEGREES type is degrees, no longer tenths of degrees.
+
+/// a value used to hold rotations or angles.
+typedef double DEGREES;
+
+
+User Interface Changes:
+======================
+
+All these changes have to be done in a way where they hinge on one #ifdef.
+
+*) The grid dimension choices will have to be changed.
+
+*) The drawing routines will have to be changed to handle the case that BIU is
+compiled to be nm. Work towards getting legacy drawing code capable of handling
+a compile time #define to control a single scaling factor. Only the scaling
+factor should need be changed in the final state. Up until then, the work
+required is to inject the BFU casting where needed along with the scaling
+factor(s).
+
+*) Remove any funky imperial to metric conversion functions which tried to hide/mask
+problems with lack of BIU precision.
+
+*) There may be some fix ups pertaining to "near enough" type testing involving
+the user's mouse position, other than bounding box hit testing which should take
+care of itself (in BIUs). This has more to do with near-ness to a line type
+tests, and these are thought to best be done in screen coordinates anyway, not
+BIUs.
+
+Work Tasks:
+==========
+
+*) Within PCBNEW, find math expressions involving BIUs and cast them to BFUs
+early enough so that the compiler generates code in the BFU realm.
+
+*) Find a way to consistently round values from BFUs back to BIUs, and put that
+code in place. This could be done using a set accessor on a BIU, or other way.
+
+*) Fix the User Interface issues mentioned above, and more found later.
+
+*) Write the 4 new load and save functions. Vladimir recently committed code
+which can be a starting point for some of these functions, except that the new
+ones should reside within a PLUGIN object where we can save the scaling factor
+variable as a member field of the plugin. In order to meet the requirements
+of all 3 board loaders, we may have to dynamically change the scaling factor
+depending on what we find in the *.brd file and how the plugin is compiled.
+
diff --git a/Documentation/changelogs/CHANGELOG-2007.txt b/Documentation/changelogs/CHANGELOG-2007.txt
new file mode 100644
index 0000000..a0d98bf
--- /dev/null
+++ b/Documentation/changelogs/CHANGELOG-2007.txt
@@ -0,0 +1,1547 @@
+KiCad ChangeLog 2007
+====================
+
+2007-Dec-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ First draft (and code..) about new zone handling, using polygons to define an outline.
+ Now currently not useable because the fill function (and many other important functions) is not implemented.
+ Many functions are not yet implemented: merging zones, cutout, DRC ...
+ Nevertheless, one can create, modify edit and save zone outlines
+
+
+2007-Dec-23 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ * Because of the discussion 4 months ago about using Boost::Python, and
+ because of an excellent boost::ptr_vector class, I want to make some of the
+ boost libraries be necessary for building Kicad. These would be:
+ 1) boost pointer container library (immediately)
+ http://www.boost.org/libs/ptr_container/doc/ptr_container.html
+ See the work in specctra.cpp to see where this is going:
+ typedef boost::ptr_vector<ELEM> ELEM_ARRAY found within class PARENT.
+ I found that gcc 4.2.1 was complaining about the standard ubuntu libboost-dev
+ package and would not compile ptr_vector class. But the svn of boost
+ fixed this.
+ 2) boost::python when building python in.
+ * Added FIND_PACKAGE(Boost) to CMakeLists.txt
+
+
+2007-Dec-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ added strlower() to common.h and string.cpp.
+ fixed compiler warnings in common/gr_basic.cpp and pcbnew/clean.cpp
++pcbnew
+ started the DSN file import/export for SPECCTRA routers, adding dsn.cpp and
+ specctra.cpp, with "stand alone" compile support for it in pcbnew/CMakeLists.txt.
+
+
+2007-Dec-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ WinEDA_PcbFrame::Other_Layer_Route() was leaving in the bridging segment
+ when the DRC denied the via insertion.
+
+
+2007-Dec-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ some changes about zones: enhanced dialog, and files reorganisation
+
+
+2007-Dec-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ WinEDA_PcbFrame::Other_Layer_Route() now returns bool, so that if the DRC
+ would not allow the new via placement, then it can be checked and the layer
+ change can also then be aborted. Previously the layer change would happen
+ in mid track even if the via could not be placed.
+
+
+2007-Dec-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * surbrill.cpp's int WinEDA_PcbFrame::Select_High_Light( wxDC* DC )
+ was re-written to use the GENERAL_COLLECTOR, and the scanList is set to
+ give pads a higher search priority than tracks, vias or zones.
+ The objective was to use the pad if possible, rather than a track on a pad,
+ so the pad can be sent to eeschema. Finding the track only (even though
+ on a pad) would not send anything to eeschema.
+
+
+2007-Dec-12 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Fized zone drawing bug in svn HEAD only.
+ pcbnew/zones.cpp, see:
+ http://tech.groups.yahoo.com/group/kicad-users/message/2993
+
+
+2007-Dec-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ * Fixed hotkey table for '+' and '-' bug. The lookup table in
+ common/hotkeys_basic.cpp had bad entries for + and -. These hotkeys
+ were not working on Linux.
+ * Added polygon directory to Doxyfile.
+
+
+2007-Dec-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++cvpcb:
+ listboxes.cpp FootprintListBox::m_ActiveFootprint member was not initialized.
+ Can crash cvpcb (WINDOWS only, i believe)
+
+
+2007-Dec-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ changes in file organisation and classes to prepare zone redesign. No real new code.
+ class zone functions and definitions moved in class_zone.h and .cpp
+
+
+2007-Dec-07 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Very minor bug in drill map : inaccurate via shapes (I believe EXCELLON drill file has no problems)
+
+
+2007-Dec-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all
+ Solved zoom key command problems (under linux and windows)
+ (seen http://sourceforge.net/tracker/index.php?func=detail&aid=1844960&group_id=145591&atid=762476)
+
++pcbnew
+ solved bug when loading a footprint in modedit: invisible text attribute was lost (trunk and tag)
+
+
+2007-Dec-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ added the D() macro to fctsys.h to ease conditional debug printf()s.
+ worked on http://sourceforge.net/tracker/index.php?func=detail&aid=1844960&group_id=145591&atid=762476
+ but could not resolve it in 1/2 day.
+
+
+2007-Dec-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * drc.cpp and dialog_drc.cpp update.
+ Added double click support on a MARKER or unconnected DRC_ITEM in the listboxes.
+ On Linux, it sometimes pops up the menu from PcbGeneralLocateAndDisplay()
+ for some reason after repositioning the cursor. That is not intended, but
+ after several attempts to work around it, I realized it is not so bad to
+ have this happen.
+ * Added right click popup menus to the list boxes. User must first select
+ the item he wants to go to, as the right click does not change the selection.
+ * Added WinEDA_BasePcbFrame::CursorGoto( const wxPoint& ) by factoring it
+ out of pcbnew/find.cpp
+ Done now, its ready for folks to start using it and testing it.
+
+
+2007-Dec-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Solved an annotation problem: in multiple parts per package components,
+ when sorted by position, parts were not grouped by package.
+
+
+2007-Dec-2 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ drc.cpp and dialog_drc.cpp intermediate update.
+
+
+2007-Nov-30 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * added virtual GetPosition() to BOARD_ITEM and derivatives.
+ * added classes DRC, REPORT_ISSUE, DRC_ITEM and rearranged drc.cpp entirely
+ to comprize the DRC class. The result has finer granularity of functions
+ and each is fairly well documented in English, see drc_stuff.h.
+ Keeping old stuff commented out at bottom of drc.cpp until some more usage
+ and testing is done.
+ * Made the DRC dialog modeless, so it can sit off to the side while the MARKER
+ are inspected one by one.
+
+
+2007-Nov-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Removed a bug (function block() ) which crashes pcbnew when erasing a zone by block delete
+
+
+2007-Nov-27 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * changed class MARQUEUR to class MARKER name only.
+ * Moved BOARD's MARKERs from m_Drawings to vector<MARKER*> m_markers so
+ they can be easily deleted and navigated to from the drc dialog.
+ * deprecated the MARKER::Unlink() function.
+ * Added
+ BOARD::Add( BOARD_ITEM*, int )
+ BOARD::GetMARKER(int)
+ BOARD::Delete( BOARD_ITEM* )
+ BOARD::DeleteMARKERs();
+ * Changed BOARD::~BOARD() to use DeleteMARKERs().
+ * Revised screen drawing routine to know about BOARD::m_markers.
+ * Revised BOARD::Visit() to know about BOARD::m_markers.
+ * Revised pcbnew/find.cpp to know about BOARD::m_markers.
+ * removed wxYield() from drc.cpp
+
+
+2007-Nov-26 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ DRC code and dialog rework start. This breaks DRC, until I get out the
+ other end of the tunnel.
+
+
+2007-Nov-24 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * dialog_track_options uses a portable technique for SetFocus(), namely the
+ function OnInitDialog( wxInitDialogEvent& event ).
+ * started work on dialog_drc, not checked in. basic wxHtmlListBox is working with dummied text.
++all
+ makefile.include's now use CXX instead of CC for compiling.
+
+
+2007-Nov-15 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Removed a bug (function Delete_Zone() ) which crashes pcbnew when erasing a zone by popup menu
+
+
+2007-Nov-13 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema & pcbnew
+ * The "Page Settings" dialog box has been enhanced; it now includes a
+ wxStdDialogButtonSizer, and is also now designed to be expandable.
++ pcbnew
+ * The "DRC Control" and "Netlist:" dialog boxes have also been enhanced. Each
+ of those dialogs now includes a wxStdDialogButtonSizer and a "Cancel" button,
+ (so each of those dialogs can now (otherwise) be cancelled by pressing the
+ "Esc" key), and is also now designed to be expandable.
+
+
+2007-Nov-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ Fixed modedit.cpp bug which occurred when selecting a non pad item (such
+ as a text field) in the module editor, then selecting Dimensions -> Pad Settings
+ in the module editor.
+
+
+2007-Nov-11 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema & pcbnew & gerbview
+ * The "Colors" dialog box has been enhanced; the distance between adjacent
+ controls now increases (and in both horizontal and vertical directions)
+ when that dialog is resized. And the "Cancel" button is no longer centre-
+ justified; it is now right-justifed instead.
++ eeschema
+ * A wxStdDialogButtonSizer is now used within the "EESchema Colors" dialog box,
+ meaning that the sequence of the "OK", "Cancel", and "Apply" buttons within
+ that dialog now depends upon which (OS) version of KiCad is being used (and
+ thus matching the nature of the corresponding dialogs within Pcbnew and GerbView
+ in that regard). (As of yet, the vertical distance between adjacent controls
+ does not increase when this dialog is resized, but that aspect will also be
+ implemented when time permits.)
++ gerbview
+ * The "GerbView Layer Colors:" dialog box has been updated, and is now similar
+ in nature to the corresponding dialogs within EESchema and Pcbnew. Tool tips
+ have also been provided for the "Show All" and "Show None" buttons.
+
+
+2007-Nov-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ More comprehensive dialog in netlist plugin interface.
+ Eeschema configuration now shows the plugin netlist list
+
+
+2007-Nov-09 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ 3d-viewer
+ * The 3d_canvas.cpp file has been updated to use a const parameter, as suggested
+ within (Bug) Request ID 1828487.
++ pcbnew
+ * Sizers have now been provided for the "Pcbnew Layer Colors:" dialog box (previously
+ identified as the "Colors:" dialog box), and tool tips have been provided for the
+ "Show All" and "Show None" buttons.
+ * The reglage.cpp file (which is not currently used) has been removed, and replaced
+ with reglage.cpp.notused.
+
+
+2007-Nov-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ removed not used files
+
+
+2007-Nov-07 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ all
+ * The common/svg_print.cpp, common/svg_print.h, and common/svg_print.pjd files (which
+ are not currently used) have been removed, and replaced with svg_print.cpp.notused,
+ svg_print.h.notused, and svg_print.pjd.notused. And common/makefile.include has
+ also been updated so that none of those files are now listed at all.
++ eeschema
+ * A "Cancel" button has now been provided within each of the "Component properties",
+ "EESchema Annotation", "EESchema Erc", "Global Label properties", "Label properties",
+ and "Text properties" dialog boxes, and each of those dialogs can now (otherwise) be
+ cancelled by pressing the "Esc" key. (In due course, each of those dialogs will be
+ refined yet further; this is just an incremental enhancement.)
+ * The eestatus.cpp file (which is not currently used) has been removed, and replaced
+ with eestatus.cpp.notused.
+
+
+2007-Nov-05 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema
+ * The previously provided "Close" button within the "Netlist" dialog box has
+ now been replaced with a "Cancel" button, and this dialog can now (otherwise)
+ be cancelled by pressing the "Esc" key. General cleanup and beautification of
+ eeschema/netlist_control.cpp.
++ pcbnew
+ * The color of each text string provided within the "Swap Layers:" dialog box is
+ now set to blue for each string specifying that the associated layer is *not*
+ being swapped with any other layer, or to fushia for each string specifying that
+ the associated layer *is* being swapped with another layer. (This change was
+ made after being suggested by Dick Hollenbeck.)
++ gerbview
+ * The color of each text string provided within the "Layer selection" dialog box
+ is similarly now set to blue for each string specifying that the associated
+ Gerber layer is *not* being exported to any pcbnew layer, or to fushia for each
+ string specifying that the associated Gerber layer *is* being exported to a
+ pcbnew layer.
+
+
+2007-Nov-2 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ fixed a crashing bug which happened if you "dragged" a module with
+ tracks. Then deleted one of the pad connected tracks, then deleted the
+ next track attached to the first one. Memory was being corrupted because
+ PcbGeneralLocate() and display was not being called on the 2nd track to
+ be deleted because the m_Flags test:
+ bool ItemFree = (GetCurItem()==0 || GetCurItem()->m_Flags==0);
+ was returning false. Solution was to SetCurItem(NULL) after deleting a
+ TRACK. This makes sense, SetCurItem() is used for designating a "selected"
+ item, and a deleted TRACK is not even in the BOARD anymore and should not
+ be selected or selectable. I think this bug may have been causing spurious
+ crashes for the last couple of months.
+
+
+2007-Nov-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ solved: eeschema, pcbnew and cvpcb did not find libraries when they were
+ in the default library path, but in a subdirectory
+ (this is because the default path was not added to the name if the name had
+ already a path)
+
+
+2007-Nov-02 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * Sizers have now been provided for the "Swap Layers:" dialog box, and the
+ previously provided radiobuttons have been replaced with buttons and static
+ text strings. (In the previous version of this dialog, radiobuttons were being
+ used in an inappropriate manner. The most "orthodox" way of implementing the
+ functionality within this dialog would be to provide a combobox for each layer,
+ but as up to 30 strings would be needed within the dropdown list associated with
+ each of those controls (one string for each of the layers, and another string to
+ deselect the layer), such controls would be less than user-friendly. Hence a
+ button is now provided for each layer instead (and which, like the previously
+ provided radiobutton, invokes the "Select Layer:" dialog box after being clicked
+ on). Two static text strings are also provided for each layer, with one of them
+ being used to identify that layer, and the other being used to identify which
+ layer that each layer is currently being swapped to.) The previously provided
+ "Select" and "Deselect" buttons are no longer required, and are thus no longer
+ provided.
++ gerbview
+ * The "Layer selection" dialog box (invoked during the "Export to Pcbnew" command)
+ has similarly been updated. (This dialog did use spacers before, but once again,
+ the previously provided radiobuttons were being used in an inappropriate manner.)
+
+
+2007-Nov-01 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * Provided new definitions of FIRST_COPPER_LAYER and LAST_COPPER_LAYER within
+ include/pcbstruct.h, and used those definitions within various other files.
+ Beautified and generally refined 3d-viewer/3d_draw.cpp and pcbnew/plotgerb.cpp.
+
+
+2007-Oct-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++kicad:
+ rename mdiframe.cpp to mainframe.cpp
+ create commandframe.cpp to handle the command frame (which have the 4 "fast launch" buttons)
+
+
+2007-Oct-31 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ * Added Doxygen configuration file, whose standard name is Doxyfile. Output
+ is set to go to ./doxygen directory just off the project tree.
+ * Added a note to todo.txt which asks folks to start using "Doxygen compatible"
+ comments in member functions and classes. Run Doxygen on the project, then
+ look at the documentation for class INSPECTOR as an example.
++ pcbnew
+ * zones.cpp, Trace_Pcb(), & EDGE_ZONE class:
+ Reversed the usage of EDGE_ZONE::Pnext and Pback in the list management to be
+ consistent with other classes and with BOARD_ITEM::IterateForward() and
+ BOARD::~BOARD().
+ * Fixed a display bug when high contrast mode is enabled and the track tool
+ is selected.
+
+
+2007-Oct-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ gcc 4.2.1 compatibility: change char * to const char * whenever it was necessary,
+ mainly in .xpm files
+
+
+2007-Oct-30 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ added BOARD_ITEM::Save() and to all derived classes as well. Made virtual
+ and removed all UI code from these utility functions.
+ removed WriteDesc() functions from all BOARD_ITEM derived classes, although
+ Keeping old ones in commented out form for a while for reference.
+ @todo: delete these from *.cpp files eventually.
+ zones.cpp, clean up in prep for enhancements.
++ gerbview
+ fixed bug which came about when BOARD::~BOARD() started deleting the objects
+ that a BOARD owns. export_to_pcbnew.cpp was not consistent with this
+ design and was crashing. Also, export_to_pcbnew.cpp now uses the simple
+ BOARD::Save() function. It was another place to maintain the PCB file format,
+ rather than simply putting that knowledge into one place like BOARD::Save().
++ all
+ beautified gr_basic.cpp and made CLIP_LINE macro a static inline function.
+
+
+2007-Oct-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++cvpcb: listboxes.cpp problem solved: exists only under windows
+ now apply to windows only, because this Workaround creates a problem undex linux
++others:
+ some very minor problems solved
++eeschema:
+ in B.O.M.: the footprint field can be added to the field list
+
+
+2007-Oct-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++cvpcb: listboxes.cpp problem solved: Workaround for a curious bug in wxWidgets:
+ if we switch from a long list of footprints to a short list (a filtered footprint list),
+ and if the selected item is near the end of the long list,
+ the new list is not displayed from the top of the list box
++eeschema:
+ Implemented: graying in/out of "Edit/Undo", "Edit/Redo" menu items,
+ when Undo/Redo stack is empty/filled.
++pcbnew:
+ Implemented: action for ID_POPUP_PCB_DELETE_MARKER
+
+
+2007-Oct-27 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all:
+ remove unused files.
+ some translations
++cvpcb:
+ set flag wxFRAME_FLOAT_ON_PARENT when create the footprint 3D frame and the
+ display frame
+ minor other changes
++ pcbnew:
+ Use collector class to locate items in modedit.
+ This is a big enhancement,
+ but a small work for me because Dick made all the work.
+
+
+2007-Oct-26 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ Add class_marker.cpp and class_marker.h and move MARQUEUR functions in class_marker.cpp
+ Change MARQUEUR::HitTest to take in account the zoom level.
+ change global var EDA_Appl to g_EDA_Appl
+
+
+2007-Oct-25 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ cvpcb
+ * Fine-tuned contents of dialog_display_options.cpp, dialog_display_options.h,
+ and dialog_display_options.pjd, so that the controls within the associated
+ ("Display Options") dialog box now also expand if that dialog is expanded.
++ all
+ * The share/selcolor.cpp file (which is no longer used) has been removed, and
+ replaced with share/selcolor.cpp.notused
+
+
+2007-Oct-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ cvpcb:
+ 2 missing .prj files added (and updated)
+ dialog_display_option.cpp is rebuild from its dialog_display_option.prj source
+
+
+2007-Oct-23 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema
+ * Sizers have now been provided for the "EESchema Preferences" dialog box,
+ together with "OK", "Cancel", and "Apply" buttons. And an additional bitmap
+ button and checkbox have also been provided for the purpose of editing the
+ color and visibility of the grid.
+
+
+2007-Oct-21 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ all
+ * Provided an MAYBE_RESIZE_BORDER field within all of the .pjd files (used by
+ DialogBlocks), and restored the MAYBE_RESIZE_BORDER field to cleaningoptions_dialog.h
+
+
+2007-Oct-21 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ added UIpolicies.txt
+
+
+2007-Oct-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ rename dialog_clean_pcb.pjd to cleaningoptions_dialog.pjd,
+ accordind to the corresponding cpp filename.
+ enter the new tool tips in cleaningoptions_dialog.pjd.
++all:
+ USE_RESIZE_BORDER is now defined (default) in fctsys.h.
+ Therefore, under windows, dialogs are now resizable (like under unix)
+
+
+2007-Oct-21 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema & pcbnew & gerbview
+ * Sizers have now been provided within the "Colors" dialog box.
+
+
+2007-Oct-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * "Clean tracks" changed to "Track operations".
+ * Housekeeping on clean.cpp completed.
+ Added static void ConnectDanglingEndToVia( BOARD* pcb ) in clean.cpp which
+ extends tracks to via centers. Call it from "extend to pads", works nice.
+ * Added tooltip text to cleaningoptions_dialog.cpp's m_ConnectToPadsOpt
+ but don't know if DialogBlocks will parse this backwards.
+ * Made compilable, somebody broke #define VIA_???? s throughout. Would not compile.
+ * SEGVIA::SetPos() & GetPos() added.
+
+
+2007-Oct-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ Removed enhancements in connectivity computation because
+ rastnest computation does not work (errors) with short track segments
+ (lenght < width) . This is not a bug, but an algorithm problem, so
+ I must work on algos.
+
+
+2007-Oct-17 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * Rolled back previous changes (made in revision 336) that edited the values of
+ vias' Shape property (following feedback from Jean-Pierre Charras concerning
+ the true significance of that property).
+
+
+2007-Oct-13 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ remove a change for Read VIA because via attributes
+ (TROUGH VIA, BLIND VIA or BURIED VIA) are autorisations for layer connection,
+ and are not a real layer indicator.
+ If a via connect layers from copper to component, it can have a BURIED VIA attribute.
+ the meaning is for this via the layer pair can be changed for other layer pair
+ if after editing this via connect 2 tracks which are only int internal layers,
+ its layer pair can be changed.
+ If a via has a TROUGH VIA attribute, it connects ALL layers, whenever tracks
+ connected to it.
+ Note: curenty: only TROUGH VIA are handled.
+ Other types (BLIND VIA and BURIED VIA) are only experimental.
+ A **lot** of code is needed for a full support.
+ enhancements in connectivity computation
+
+
+2007-Oct-15 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * Made some changes involving vias so that these would have the correct value
+ of the Shape property assigned to them - while being created, and while files
+ are being saved, and while files are being loaded.
+
+
+2007-Oct-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew:
+ * housekeeping and translation to English on bottom third of pcbnew/clean.cpp.
+ No algorithm changes were intended, only improved readability.
+ * my todo: figure out how to intercept double clicks on a wxWidgets text control
+ so I can complete the work I started on MARQUEUR error tracking.
+
+
+2007-Oct-13 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ ratsnest.cpp translated into english.
+ Many infos on the LEE algorithm used here added.
+ todo (by myself): connect.cpp translation.
+ onrightclick() bug (created by last change) solved: one could reselect an item,
+ while moving a previously selected item (pcbnew crashes).
+
+
+2007-Oct-13 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema
+ * The previously provided "Quit" button within the "List of Material" dialog box
+ has been replaced with "OK", "Cancel", and "Apply" buttons. Greater consistency
+ has also been achieved after clicking on the "Create List" button; none of the
+ prevailing settings are subsequently saved (previously, some, but not all, of
+ the settings were subsequently saved). (However, settings can still be saved by
+ clicking on either of the "OK" or "Apply" buttons instead.) Assorted cleanup
+ and beautification of associated source code.
+ * The genliste.cpp file (which is no longer used) has been removed, and replaced
+ with genliste.cpp.notused
+
+
+2007-Oct-12 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ * m_NetCode is now private or protected throughout.
+ added SetNet() and GetNet() to all classes which have this member name.
+ ditto for m_Sous_NetCode, for which there is now SetSubNet() and GetSubNet().
++ pcbnew
+ added more disambiguating text to the PcbGeneralLocateAndDisplay() popup
+ menu for tracks. We need all the info we can get there I found after using
+ the software for many hours.
+
+
+ Jean-Pierre:
+
+ I never thought I would find a greater problem in using Kicad than having to
+ lay down all the ground and power tracks, rather that just linking vias into
+ pre-established zones or "tagged layers".
+
+ But I have, hundreds of my tracks and vias are showing
+ unconnected under my BGA, (where say the track or via is NetCode==0) and it
+ should not be, because the damn track ties the BGA pad to a nearby via.
+ How can the software be made to think these three items are on the same net,
+ without re-entering all the damn tracks?
+
+ This issue has been coming up for months on the user list, it must be dealt with now.
+ There is always the same lame answer, "make sure your tracks go to the center of the pads".
+ Nonsense, the software picked the track end points, not me, and grid was on when it did it.
+ There are bugs here.
+
+ Does Recalcule_all_net_connexion() work, and why is not called from anywhere?
+
+
+
+2007-Oct-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * D_PAD::Draw() refinements.
+ * WinEDA_DrawFrame::SetToolID() will redraw the DrawPanel if the track
+ button is selected or de-selected and the high-contrast mode is in play.
+ * If high-contrast mode is in play, the Select Layer Pair dialog completion
+ will redraw the DisplayPanel, now that SMD pads' colors are so dependent
+ on these variables.
+
+
+2007-Oct-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * D_PAD::Draw() so that it shows SMD pads as greyed out when in high contrast
+ mode and not on current layer. Slight variation on this when laying down
+ tracks: m_Route_Layer_BOTTOM or m_Route_Layer_TOP layers' SMD pads are
+ not greyed out.
+ * Changed English UI text for "Cotation" to "Dimension".
+
+
+2007-Oct-11 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * The "Target Properties" and "Pads Global Edit" dialog boxes can now (otherwise)
+ be cancelled by pressing the "Esc" key, and the caption of the "OK" button
+ within the latter dialog box has been capitalised (so that an icon is now
+ provided within that button within the Linux version of KiCad).
+ * The pcbpiste.cpp file (which is no longer used) has been removed, and replaced
+ with pcbpiste.cpp.notused
++ cvpcb
+ * The affiche.cpp file (which is no longer used) has been removed, and replaced
+ with affiche.cpp.notused
+
+
+2007-Oct-11 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ * The previously provided "Exit" button within the "Colors:" dialog box has been
+ replaced with "OK", "Cancel", and "Apply" buttons, and the code for editing the
+ visibility of the Grid layer from that dialog now is "cleaner" than before.
+ Details associated with buttons within that dialog box moved from set_color.cpp
+ to set_color.h (matching implementation for GerbView's corresponding dialog box).
+ * Fixed bug which previously prevented the Copper layer from being selected as the
+ current layer when only one copper layer is enabled (and made some modifications
+ to the code for selecting the next copper layer and previous copper layer).
++ gerbview
+ * The code for editing the visibility of the Grid layer from the "GerbView Layer
+ Colors:" dialog box is "cleaner" than before, and assorted other beautification.
++ eeschema
+ * The options.cpp file (which is no longer used) has been removed, and replaced
+ with options.cpp.notused
+
+
+2007-Oct-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * bug fix: prevent OnRightClick() from calling PcbGeneralLocateAndDisplay()
+ when creating a new track.
+ * bug fix: popup menu was not handling Mires, because the collector was not
+ being asked to find them.
+ * added TRACK::ShowWidth() and call it from BOARD_ITEM::MenuText(). There was
+ not enough information in Selection Clarification at a busy junction to
+ make a reasonable choice.
+ * SEGVIA::MenuText() shows via width, rather than net_code.
+ * Beautified ratsnets.cpp, I would like to understand it better. It would help
+ if the comments were in English.
++ all
+ * Changed English UI text "Mire" to "Target" according to this post:
+ http://tech.groups.yahoo.com/group/kicad-users/message/1380
+ * rewrote msgpanel.cpp so it retains wxStrings and therefore can repaint its
+ window when being uncovered, resized or whatever.
+
+
+2007-Oct-9 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ changed pcbnew/onrightclick.cpp so that a right click only shows the
+ Selection Clarification menu if there is no selected object or if the
+ click is in a position different from where the selection was previously
+ made.
+
+
+2007-Oct-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema:
+ cross-probing minor bug solved ( due to last modification): pins/pads not probed
+
+
+2007-Oct-08 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ gerbview
+ Display on screen now updates properly (in Linux version) after clicking on
+ the "OK" button provided within the "GerbView Layer Colors" dialog box.
+
+
+2007-Oct-7 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema
+ create new file cross-probing.cpp
+ move RemoteCommand() to cross-probing.cpp and create SendMessageToPCBNEW()
+
++ pcbnew
+ bug in move pad fixed (could crash pcbnew)
+ Small change in selection clarification (side effect removed):
+ - Escape or click on title does not show the next popup menu.
+ - the title is displayed under linux
+ - definition CUIVRE_N translated into COPPER_LAYER_N
+
+
+2007-Oct-07 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ all
+ * Various dialog boxes can now (otherwise) be cancelled by pressing the "Esc" key.
+ (Some dialog boxes still require attention in that regard though, so that task
+ is not yet complete.) And the captions of the "OK" button within various dialog
+ boxes have been fully capitalised (meaning that an icon is now provided within
+ each of those buttons within the Linux version of KiCad).
+ * DIALOG_STYLE (defined within include/wxstruct.h) now includes MAYBE_RESIZE_BORDER
+ field. (Refer to 2007-Oct-2 UPDATE notes for the relevance of this.)
+ * Beautification and house keeping.
++ eeschema
+ * The editpart.cpp and libedpart.cpp files (which are no longer used) have been
+ removed, and replaced with editpart.cpp.notused and libedpart.cpp.notused
++ cvpcb
+ * Additional "OK", "Cancel", and "Apply" buttons have now been provided for the
+ "Options" dialog box which lists various display options for footprints.
++ pcbnew
+ * Invoking the "Select Layer Pair:" dialog box is no longer possible whenever only
+ one (copper) layer is currently enabled. And it is no longer possible to select
+ the same layer to be both the Top Layer and Bottom Layer (for any Layer Pair).
+ * Deselecting layers during the "Swap layers" command is now more user-friendly,
+ due to the provision of an additional "(Deselect)" radiobutton within the (child)
+ "Select Layer:" dialog box (which is always invoked whenever a different
+ radiobutton within the "Swap Layers:" dialog box is clicked on). (It had
+ previously been necessary to cancel the "Select Layer:" dialog box before being
+ able to click on the "Deselect" button within the "Swap Layers:" dialog box.)
+ * Definition for NB_LAYERS changed from (EDGE_N + 1) to (LAST_NO_COPPER_LAYER + 1)
+ (Although EDGE_N is currently the "last" layer, that wouldn't necessarily still
+ be true if any additional layers are ever defined in the future.) And comparisons
+ to 29 (or 28) have been replaced with comparisons to NB_LAYERS (when appropriate).
++ gerbview
+ * The previously provided "Exit" button within the "GerbView Layer Colors" dialog
+ box has been replaced with "OK", "Cancel", and "Apply" buttons; and both the
+ visibility and color of the Grid layer can now be edited from the same dialog.
+ * Deselecting (Gerber) layers during the "Export to Pcbnew" command is now more
+ user-friendly, due to the provision of an additional "(Deselect)" radiobutton
+ within the (child) "Select Layer:" dialog box (which is always invoked whenever
+ a different radiobutton within the "Layer selection:" dialog box is clicked on).
+ (It had previously been necessary to cancel the "Select Layer:" dialog box before
+ being able to click on the "Deselect" button within the "Layer selection:" dialog
+ box.)
+ * The "Export to Pcbnew" command now requires at least one Gerber file to have been
+ already loaded. And Gerber files can now be loaded into any of the 32 (Gerber)
+ layers provided. (It had previously been necessary to avoid having any gaps within
+ the sequence of used Gerber layers.)
+
+
+2007-Oct-6 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ create new file cross-probing.cpp
+ move RemoteCommand() and SendMessageToEESCHEMA() to cross-probing.cpp
+
+
+2007-Oct-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ made BOARD_ITEM::UnLink() virtual
+ added BOARD_ITEM::DeleteStructure().
+ added EDA_BaseStruct::DeleteStructList()
+ deleted gerbview/struct.cpp, pcbnew/struct.cpp,
+ BOARD::~BOARD() now deletes objects that it owns.
+ Collectors now finds MARQUEURs also
+ added MARQUEURS::Display_Infos()
+ added MARQUEURS::HitTest()
+
+
+2007-Oct-2 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ The lack of border resizing in dialogs has been a problem. In my world,
+ dialog boxes are resizable. I use large fonts, I like to see stuff.
+ So now for __UNIX__ they are resizeable, for windows not.
+ See fctsys.h and the #define for MAYBE_RESIZE_BORDER. For windows it defaults
+ to zero which means resizeable is not featured. A compiler command line
+ option of "USE_RESIZE_BORDER" can override this windows default.
+
+
+2007-Oct-01 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew/eeschema
+ Cross-probing pcbnew to eeschema:
+ A left click on a pad in pcbnew moves the eeschema cursor on the corresponding component pin
+ A left click on a footprint ref or value in pcbnew moves the eeschema cursor on the corresponding component ref or value
+ A left ckick on a footprint moves the eeschema cursor on the corresponding component anchor
++ pcbnew
+ removed drc.cpp change line 584, and translate comments in english.
+ nothing broken:
+ -> a pad with its netcode = 0 means the pad ** must be left unconnected ** (not attached to * a net).
+ -> a track with its netcode = 0 means the track is not attached to a net (cannot be connected to any pad).
+
+
+2007-Sep-30 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ Added dedicated Show() function for SEGVIA. Enhanced BOARD_ITEM::MenuText()
+ for SEGVIA.
+
+
+2007-Sep-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * drc.c made a change near line 584 to comment out pt_pad->m_NetCode test against
+ zero. This was preventing me from laying out my board. It's possible that
+ this broke something else, but it is also clear that something was broke before
+ this change, because I could not put down some tracks.
+ * beautification, house keeping.
+
+
+
+2007-Sep-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ create new file onleftclick.cpp
+ move onleftcligk() and onleftDcligk() from edit.cpp to onleftclick.cpp
+
+
+2007-Sep-27 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ test case for OnLeftClick() handling enhancements.
+ TAB key removed, because is not needed for block selection and double click.
+ (SHIHT ou CTRL or ALT key is sufficient to suppress the popup menu
+ if needed for a double click )
+ Some work is still needed, of course
++ pcbnew
+ Color grid setting now works
+
+
+2007-Sep-26 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ test case for OnLeftClick() handling from a release circumstance.
+ a few simple changes to void WinEDA_DrawPanel::OnMouseEvent( wxMouseEvent& event ),
+ but they affect all programs in a subtle way.
+ TAB key allow double clicking, but is not needed for block selection.
+
++ pcbnew
+ GENERAL_COLLECTOR::GetCount() returns int, not unsigned. Was tired of the
+ compiler complaining when using an int ndx.
+
+
+2007-Sep-25 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * removed reference to global display options DisplayOpt.DisplayZones in
+ collectors.cpp so collectors.cpp can continue to be used in multiple future
+ (non-display related) general contexts. I don't want unnecessary dependencies
+ in there. The way to completely ignore a type is to exclude it from scanList.
+ The way to sometimes ignore a type is to add support for this in COLLECTORS_GUIDE.
+ * Moved TYPEZONE to end of AllBoardItems, added GENERAL_COLLECTOR::AllButZones to
+ provide support for DisplayOpt.DisplayZones.
+ * Added aHotKeyCode to PcbGeneralLocateAndDisplay()
++ gerbview
+ * viewer was getting stuck in a loop when loading a bad gerber file. Fixed
+ the bug, but line 223 through 225 of readgerb.cpp needs review.
+ * beautified a few files with uncrustify, (any I had to look at).
+
+
+2007-sept-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ * add class_board_item.cpp file and move BOARD_ITEM::MenuText() and BOARD_ITEM::MenuIcon() in it
+ * Add zone detection, forgotten in PcbGeneralLocateAndDisplay()
++ class_collector.h:
+ add void COLLECTOR::Remove( unsigned int item_position ), needed by zone detection, see PcbGeneralLocateAndDisplay
+
+
+2007-Sep-25 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ gerbview
+ The "Exit" button previously provided within the dialog box invoked from the
+ "Preferences -> File ext" menu entry has now been replaced by "OK" and "Cancel"
+ buttons. Similarly, the "Accept" button previously provided within each of the
+ dialog boxes invoked from the "Preferences -> Options" and "Preferences -> Display"
+ menu entries has now been replaced by an "OK" button. And each of those three
+ dialog boxes can now (otherwise) be cancelled by pressing the "Esc" key.
+
+
+2007-sept-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ * small change in hotkeys handling
+ (Ki_HotkeyInfo: new member m_IdMenuEvent to call an existing event handler from a hotkey list)
+
++ eeschema:
+ * added drag component in pop up menu and hotkeys
+ * plot svg format: incorrect arc draw fixed
+
+
+2007-Sep-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ GENERAL_COLLECTOR::Collect() was skipping thru hole pads even though they
+ were visible.
+ Highlight tool now sends message to eeschema when a pad is selected.
+
+
+2007-Sep-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ eeschema
+ * beautify, add debug Show() functions, changed ReturnFieldName()
+ to return "const wxString&" for speed, added GetFieldValue().
+ * tracking down questionable behavior (a bug?) in erc regarding pwr_flag, still looking
+
+
+2007-sept-20 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ * hotkeys handling finished
++ pcbnew
+ * bug fix: a subtle bug in place via : partial drc only was made.
+
+
+2007-Sep-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * controle.cpp, added Function AllAreModulesAndReturnSmallestIfSo() which is
+ called from PcbGeneralLocateAndDisplay()
+ * onrightclick.cpp changed to calls to BOARD_ITEM::MenuText(), and switched
+ to member functions for createPopupMenus() so we can get all the state
+ information we need for the proper menus.
+ * BOARD_ITEM::MenuText() got new argument BOARD*, and elaboration for
+ TRACKs and VIAs and Pcb Graphics.
+ * Fixed a problem in GENERAL_COLLECTOR::Inspect() so it now knows that MODULEs
+ have their own visibility controls (same for pads and pcb texts). This
+ interpretation must always match the drawing code's interpretation.
+ * Made TRACK::TRACK( const TRACK& ) protected to enforce use of TRACK::Copy()
+
+
+2007-Sep-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ kicad
+ * Inverted the logic associated with filters. Filters now enable a file
+ in the project manager. The default is to ignore all files.
+ * The filter for *.sch files is smarter, in that it looks to display only
+ top level *.sch files, rather than all *.sch files.
++ Others
+ More beautification
+
+
+2007-sept-13 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ * EDA_BaseStruct.SetType() removed.
+ The m_StructType member of class EDA_BaseStruct is no more modified in kicad.
+ Now Virtual functions can be widely used.
+ * The old EDA_BaseStruct.ReturnClassName() was removed.
+ the virtual EDA_BaseStruct.GetClass() is used instead.
+
++ gerbview: hotkeys Ok.
+
+
+2007-Sep-13 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema & pcbnew & gerbview
+ A Cancel button has now been provided for the "Colors" dialog box, which also
+ permits it to (otherwise) be cancelled by pressing the "Esc" key; the button
+ whose color matches that of the color currently selected (for the layer being
+ edited) also has the initial focus set to it.
+
+
+2007-Sep-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * Changed PcbLocateAndDisplay() to be tool specific in its search and to present
+ a popup menu when there are multiple items under the mouse. It is also
+ a framework for future enhancements.
+ @todo: grep for @todo and finish off those tasks.
+ * Introduced a formal notion of "selected item". This is done with the addition
+ of the WinEDA_BasePcbFrame::SetCurItem() function. So now you have to first
+ select an item with the left mouse button before you attempt to use the
+ right button popup menu. Right button no longer has an effect on the
+ currently selected item. The currently selected item is shown in the MsgPanel.
+ When none is selected, the m_Pcb is shown.
+ * Tweaked the OnRightClick() popup menus so that the most likely choices are
+ at the top.
+ * Added wxString BOARD_ITEM::MenuText() const and BOARD_ITEM::MenuIcon() and
+ both need more work, work which I will not have time to do.
+
+
+2007-Sep-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * Searched and did not see any usage of TRACK::Copy(int), where int was other
+ than '1', so renamed it to TRACK::CopyList(int) and commented it out because
+ with int==1, this makes Copy(1) equivalent to the new Copy(void).
+ * Made TRACK::Copy() capable of copying SEGZONE too.
+
+
+2007-sept-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ gerbview
+ Programmable hotkeys added. Fixed a compilation probleme in ansi mode (non unicode mode).
+
+
+2007-Sep-8 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * Made good progress in onrightclick.cpp for multiple items under the mouse.
+ * Fixed some macros in macros.h so they can be followed with a semicolon and
+ used like simple expressions.
+ All changes not yet committed.
+
+2007-sept-6 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema & pcbnew
+ Programmable hotkeys update.
+ some features are still subject to change (mainly path for config files: see 2007-aug-30 UPDATE))
+ The preference menu has a command to create and reread config hotkey files.
+ the hotkey ? lists the current hotkeys.
+
+
+2007-Sep-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * Made GENERAL_COLLECTORS_GUIDE and GENERAL_COLLECTOR useable. They can now
+ serve as a fully functional replacement for PcbGeneralLocateAndDisplay(),
+ see DEBUG code in BOARD_ITEM* WinEDA_BasePcbFrame::PcbGeneralLocateAndDisplay().
+ * Made GENERAL_COLLECTOR capable of Collect()ing from a MODULE as well as a BOARD.
+ * pcbnew/onrightclick.cpp changed English from "Free Module" to "Unlock Module".
+ Next I hope to add some UI to handle multiple items under the mouse in onrightclick.cpp
+
+
+2007-sept-04 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ better comments in editrack-part2 (the todo remark solved)
++ todo.txt: note about editrack-part2 modified (problem solved)
+
+
+2007-Aug-31 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & gerbview
+ * Added TRACK::Copy() which can copy a SEGVIA or a TRACK.
+ * Changed export_to_pcbnew.cpp so it created a SEGVIA properly, a significant change.
+ Moved and changed a big block of code in export_to_pcbnew.cpp so we can
+ properly construct the SEGVIA(). Not tested.
+ * Make EDA_BaseStruct::m_StructType private so we can trap where it is being
+ changed. (It should never be changed after construction, see comment above
+ EDA_BaseStruct::SetType().)
+
+
+2007-Aug-30 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ * Removed SEGVIA::IsViaOnLayer, and instead implemented an override to
+ virtual BOARD_ITEM::IsOnLayer() called SEGVIA::IsOnLayer().
+ * Tweaked TRACK::Visit() to not traverse the KICAD_T scan list and a
+ corresponding change to BOARD::Vist() so we can now get VIA priority
+ if desired. (Have to traverse m_Tracks twice, wonder if we could use
+ two lists: m_Tracks and a new m_Vias?)
+ * Changed signature of MODULE::Display_Infos( WinEDA_DrawFrame* frame ) so
+ it gets called virtually with any BOARD_ITEM* which is actually a MODULE*.
+ This was a bug.
+ * With virtual functions, it is now critical that the correct object type
+ be instantiated. This was not happening in ioascii.cpp when reading
+ the vias. Bug fixed.
+ * GENERAL_COLLECTOR getting closer to useable.
+
+
+2007-aug-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema & pcbnew
+ more about programmable hotkeys.
+ Most existing hotkeys are programmable and displayed in popup menus or tools
+ Work still in progress but most features are ok.
+ some features are not fixed (mainly the configuration files path, which is
+ currently the home directory under unix systems and kicad/template under windows))
+
+
+2007-Aug-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ Started abstract class COLLECTORS_GUIDE.
+ Renamed classtrc.cpp to classtrc.cpp.notused
+ Changed some comments in class BOARD's header to english, clarifying
+ linked list contents.
+
+
+2007-aug-27 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ all
+ Display grid size in mils or mm in popup menu according to the current unit choice
+
+
+2007-Aug-24 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ eeschema & pcbnew
+ * Removed class EDA_BaseLineStruct, which brought no behavioral advantage, only data.
+ Classes which were based on it got its data members added and their initializers.
+ * Changed type of EDA_BaseStruct::m_StructType from int to KICAD_T which is an
+ enum. This makes debugging easier since gdb will show the name of the
+ KICAD_T rather than simply a number. Added NOT_USED = -1 to KICAD_T enum for
+ 3d which was using -1.
+ * More beautification using latest uncrustify and the committed uncrustify.cfg
+
+
+2007-Aug-24 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ A new option has now been provided which permits Gerber files to be generated
+ in which the contents of the Edges Pcb layer are not also included with the
+ contents of each other layer.
+
+
+2007-Aug-23 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ eeschema & pcbnew
+ * Fixed MODULE::Visit() and BOARD::Vist() so they traverse certain lists
+ only once and they are working nicely now.
+ * You can test the GENERALCOLLECTOR::Scan() code by compiling with DEBUG=1 on
+ the command line and enabling the stuff near line 124 in
+ pcbnew/controle.cpp, then watch Show( std::cout ) show the selected items in
+ xml format on your console. (launch pcbnew from command line.)
+ @todo:
+ The layer selection mechanism used by the collector is still inadequate, so
+ tomorrow I will add a new class COLLECTORS_GUIDE which can be used by a
+ COLLECTOR to control its operation. It adds the concept of layer
+ locking, even though PCBNEW does not support that in the UI yet.
+
+
+2007-Aug-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ eeschema & pcbnew
+ Things are still pretty transient, should be stable a day or two:
+ * Fixed a filename case sensitivity problem that would show up on Linux
+ but probably not on Windows: bitmap/Reload.xpm needed uppercase R.
+ * Wedged a new class BOARD_ITEM underneath all PCB drawable classes. This is
+ a big change and may introduce a bug or two, but it is worth it for the
+ future, because we can add virtual functions there that do not impact
+ the entire project (since everything is derived from EDA_BaseStruct).
+ The corresponding class in EESCHEMA seems to be DrawPartStruct, so we had
+ nothing in PCBNEW like that.
+ BOARD_ITEM::GetLayer() and SetLayer() introduced, more functions to come.
+ Much of this work is geared towards making collectors.cpp's ARROWCOLLECTOR::Inspect()
+ very very simple, and that can be a model for future work.
+ * Changed min() and max() macros to MIN() and MAX() because min() and max()
+ are actually reserved according to the C++ standard! (and their usage prevented
+ the use of #include <vector>).
+ * Added files class_collector.h, collectors.h, and collectors.cpp.
+ File collectors.cpp is still unfinished.
+ * Started using a function and class comment style that will make sense to the
+ Doxygen source code documenter program.
+ * Beautified more un-beautified files.
+
+
+2007-aug-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema & pcbnew
+ First version of programmable hotkeys by editing hotkey configuration files.
+ some hotkeys are not programmable (Zoom)(work in progress)
+
+
+2007-Aug-21 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ administrative
+ Added copyright.h as a proposed copyright header for Mr. Charras's review.
+ Added uncrustify.cfg, the configuration file for the "uncrustify" C++ beautifier.
+
+
+2007-Aug-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & eeschema
+ * Moved allowed m_Flags values from pcbnew.h, general.h, and eeschema/delete.cpp to base_struct.h
+ near m_Flags itself. Several of the flags values were changed. I am only
+ comfortable with this change if m_Flags is not written to disk anywhere,
+ and we need to give that some thought. If m_Flags is a memory only usage
+ and not saved to disk, then this change should be safe. I could not find
+ any case where m_Flags was being saved to disk, but I could have missed one.
+ The reason for the change was to consolidate into one place the allowed values
+ so that as new flags are allocated there is no conflict.
+ * Moved most all the pcbnew/affiche.cpp functions to virtual member functions of their
+ respective classes with the name Display_Infos().
+ * Moved GetEquipot() global function to BOARD::FindNet().
+ These changes are working towards a concise locate.cpp module, on the way
+ to implementing the multiple choice support. Mass edits should be slowing down
+ in a day or so.
+
+
+2007-Aug-20 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ eeschema & pcbnew
+ The comments provided within postscript files now fully comply with Adobe's
+ Document Structuring Convention.
+
+
+2007-aug-20 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema & pcbnew
+ modify hotkeys.cpp code (large modifications).
+ Added: common code in hotkeys_basic.cpp (in common) and hotkeys_basic.h (in include)
+ In the future, i hope hotkeys will be programmed by a config file
+
++ pcbnew
+ filename drc_dialog.prj changed to dialog_drc.prj
+ (according to the fulename dialog_drc.cpp and dialog_drc.h created by dialogblock from the .prj)
+
+
+2007-Aug-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ all
+ * Made BASE_SCREEN::m_CurrentItem private so we can force usage of the new
+ SetCurItem() function, and use it to put a breakpoint on the only place
+ that m_CurrentItem is changed, namely in the new SetCurItem() function.
+ ( Added new function GetCurItem() as well to class BASE_SCREEN in
+ drawpanel_wxstruct.h.) Using a stack trace at the breakpoint we can tell
+ who called it. There were in excess of 450 edits to get this done so I
+ had to commit it asap so other folks could get on with edits without a
+ merge conflict.
+ * Started work on the COLLECTOR class which will assist in giving a choice
+ in PCBNEW when there is more than one click candidate at the same mouse
+ or cursor coordinates. COLLECTOR not committed yet.
+ * More beautification.
+ * The mouse click and part synchronization from EESCHEMA to PCBNEW would
+ track fine but would not always position the PCBNEW part on screen. Now
+ we center it unconditionally. No change was made in the reverse direction
+ since that code uses the long established Find support.
+
+
+2007-Aug-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ eeschema & pcbnew
+ * Added mouse click, TCP/IP socket based, part synchronization in the reverse
+ of how it was working, so a mouse click on a module in PCBNEW will take
+ EESCHEMA to the part with the same reference.
+ * More beautification, working with developer of uncrustify. Almost ready
+ to add the customized uncrustifiy configuration file to this project.
+ * Fixed a bug in pcbnew/tracepcb.cpp's WinEDA_PcbFrame::Trace_Pcb( wxDC* DC, int mode )
+ which was using a bool for the MaskLay variable, causing through hole pads
+ on modules on copper layer not to be shown when the copper components were
+ set to invisible.
+
+
+2007-aug-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema
+ modify hotkeys.cpp code.
+
+
+2007-Aug-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ Improved MODULE::FindPadOrModule().
+ Ran more source files through auto-beautifier.
+ Renamed dupltrac.cpp to dupltrac.cpp.notused.
+
+
+2007-aug-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema
+ better hotkeys.cpp code.
+
+
+2007-Aug-09 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ Released the new Visitor paradigm. Wrote MODULE::FindPadOrModule() using
+ it.
+
+
+2007-aug-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema
+ Some new hotkeys (see hotkeys.cpp).
+ Now, the key ? display the current existing hotkeys
+
+
+2007-Aug-08 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ * Renamed locate.cpp's distance() to DistanceTest() and moved it to trigo.cpp.
+ Pass more parameters to DistanceTest and removed globals that were used by
+ distance() in locate.cpp.
+ Moved and renamed DistanceTest function proto from protos.h to trigo.h.
+ * Implemented HitTest() for class_cotation, class_mire, and a few other classes
+ by factoring out existing code from locate.cpp. locate.cpp should operate
+ exactly the same as before.
+ * Improved or implemented the Show() function for several classes.
+ * Detected that the suspected class_module hit-testing bug was not real,
+ i.e. no bug found.
+
+
+2007-aug-08 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ eeschema
+ bug in class_hierarchy_sheet.cpp.
+
++ pcbnew
+ small change in block commands:
+ rastnest was updated for each footprint, while moving footprints.
+ Now it is updated at the end of changes.
+ enhancements in block.cpp and connect.cpp
+
+
+2007-Aug-07 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ * More searching work. Made HitTest() virtual. Factored out a HitTest()
+ function for both class_module and class_pad from existing code.
+ * Embellished the Show() function for several of the classes. Could be the
+ basis of a possible future XML export, but with the native format being
+ ascii already, this is of questionable value as an export.
+ * Discovered a long time existing bug in class_module hit-testing.
+ Still need to understand it. It could just be an improperly formatted module.
+
+
+2007-Aug-06 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ Started sketching out a new search architecture. To learn more:
+ look for "INSPECTOR" text in base_struct.h.
+
+
+2007-Aug-05 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew & common
+ * Added some conditional DEBUG code for showing the pcb object tree in
+ simple XML format. See class EDA_BaseStruct's new Show() function.
+ * Changed the function name of Locate( const wxPoint& ref_pos ) to bool HitTest(..)
+ in both class_text_mod and base_struct.
+ * More beautification and commenting.
+
+
+2007-Aug-04 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ Read-ability formatting, I am playing with a C++ beautifier called "uncrustify".
+ I had to patch it and spent 2 days getting it configured. Patch not
+ sent upstream yet.
+ Fixed a bug in "display local ratsnest pad or module": if you had a small
+ module and the mouse clicked its reference text, the ratnest for
+ the associated module would not show. The work around was to add
+ support to Show_1_Ratsnest() so it could take a TYPETEXTEMODULE as
+ the result of the hit-testing. But I think a longer term better
+ solution will be to create a specific search function for this kind
+ of hit-testing, one which could disregard text and look only for
+ pads and modules.
+
+
+2007-aug-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ Drc test now generates a DRC file report.
+
+
+2007-Jul-31 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
+================================================================================
++ pcbnew
+ Drill Map and Drill Report files now list the diameters of each drill in
+ the selected drill unit first, and then in the other drill unit.
+ Drill report files also now list the tool assigned to each drill, and
+ the correct hole count and oval count for each drill size; the
+ file creation date and the selected drill unit are also listed.
+
+
+2007-Jul-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ Some file are added (missing .prj files)
+ Better Drc test:
+ Zones can be tested.
+ better pad to pad test.
+
+
+2007-Jul-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+ ** Some minor enhancements
++ pcbnew
+ In Drc diags, better (more explicit) messages
+ Change (and simplify) code in 'update' as well as 'insert' modules into main PCB from within the module editor,
+ because it had a bug (crashes when there was no footprint in pcb)
+
+
+
+2007-June-21 UPDATE Tim Hanson <tim@hardcarve.com>
+================================================================================
++ pcbnew
+ 1. added button to 'update' as well as 'insert' modules into main PCB
+ from within the module editor. Made them functional, of course.
+ 2. added control-o, control-s & control-f to pcbnew,
+ though I'm not perfectly happy with the implementation -- wxwidgets puts
+ the control-characters in alphabetical order!
+
+
+2007-June-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew
+ minor enhancement in Edit footprint dialog (more help tool tips).
+ better hotkey.cpp (code cleaning and info messages)
+
+
+2007-June-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ After locking a module with 'L', update the status window with the locked
+ status. Side step some asserts from wxWidgets which were happening when
+ running compiled for debug.
+
+
+2007-June-16 UPDATE Richard A Burton <richardaburton@gmail.com>
+================================================================================
++ pcbnew
+ fix debug assert starting pcbnew with wx2.6
++ build
+ add install targets for resources and docs
+
+
+2007-June-15 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ pcbnew
+ ** only modules on the present layer are subject to individual module
+ moves, rotations, or layer swaps, with the 'M', 'G', 'R' or 'S' hotkeys.
+ ** only unlocked modules are subject to the individual module moves,
+ rotations, or layer swaps, with the 'M', 'G', 'R' or 'S' hotkeys.
+ ** implemented the 'L' hotkey to quickly lock or unlock a module,
+ just by hovering over it and hitting the 'L' or 'l' key. The lock is
+ toggled.
+ ** Enhanced locate.cpp's Locate_Prefered_Module(BOARD * Pcb, int typeloc)
+ significantly, it now has a widely ranging behavior based on the
+ typeloc argument.
+
+
+2007-June-14 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++ eeschema
+ Added sorting by value or position in to the annotation window
+ (Thanks for patch to Andrey Fedorushkov).
+
+2007-June-13 RELEASE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++All:
+ merging my development with svn version
+
++ pcbnew:
+ bug fix (problem in postscript generation due to the internationalization
+ of floating point number notation )
+ added tool to select layer pair and monitor active layer
+
++ eeschema
+ bug fix:
+ crash libedit when loading certain components (linux only)
+ incomplete generation of erc file list
+
+
+2007-June-13 UPDATE Richard A Burton <richardaburton@gmail.com>
+================================================================================
++ build:
+ dynamic linking by default, use make -f makefile.gtk KICAD_STATIC_LINK=1
+ or uncomment the bit in libs.linux for static
+
+
+2007-June-11 UPDATE Richard A Burton <richardaburton@gmail.com>
+================================================================================
++ build:
+ removed several 2 line scripts for configuring wx builds and put them in
+ how-to-build-kicad.txt
+ improved KICAD_STATIC_LINK handling so it can be overridden on the command
+ line e.g. "make -f makefile.gtk KICAD_STATIC_LINK=0"
+
+
+2007-June-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++ Started this change log file.
+
+
+2007-June-5 UPDATE Richard A Burton <richardaburton@gmail.com>
+================================================================================
++ pcbnew:
+ fixed 3d-display image export (blank box in image)
++ build:
+ fixed makefile clean targets so they don't fail if already clean
+ fixed wx2.6 compatibility
+
+
+2007-May-25 RELEASE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++ pcbnew:
+ bug: problem with 3D shapes.
++ Gerbview:
+ Better (but crude...) support to export gerber files to pcbnew.
+
diff --git a/Documentation/changelogs/CHANGELOG-2008.txt b/Documentation/changelogs/CHANGELOG-2008.txt
new file mode 100644
index 0000000..d210585
--- /dev/null
+++ b/Documentation/changelogs/CHANGELOG-2008.txt
@@ -0,0 +1,1561 @@
+KiCad ChangeLog 2008
+====================
+
+2008-Dec-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ Note: this is a work in progress!
+ Files modification.
+ More about italic and bold fields in libraries
+ Use DLIST to handle fields in lib entries
+ Bugs and problems solved in fields edition (some are windows only).
+
+
+2008-Dec-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ Note: this is a work in progress!
+ Change dialog to edit fields in libedit.
+ Most of code created by Dick to edit fields in shematic is reused (this was the goal).
+ Component dialog properties -in libedit) is not modified, and fields can be also edited with it.
+ New dialog box is similar to the component dialog box used in schematic.
+ But all features do not work (work in progress!)
+ TODO (by me):
+ use vector to handle fields in libraries, like schematic.
+ Finish work, and test it.
+
+2008-Dec-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ * gr_basic.h DOXYGEN comments. made a couple functions static and removed
+ those from gr_basic.h since they are private to gr_basic.c. changed the
+ polygon code to use wxPoints since that is what the underlying wxWidgets
+ API uses.
+++gerbview
+ * More work on drawing polygons, erasure of polygons completed.
+ * Added full support for aperture macro 6, MOIRE.
+ * Example 2 in RS274xrevd_e.pdf almost draws properly now. Need ARC support
+ in polygons, and need polygon aperture type support to complete.
+
+
+2008-Dec-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ More about italic and bold texts options in fields and graphic texts
+
+
+2008-Dec-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Pcbnew:
+ Added dialog box to edit graphic items (graphic segments, circles, arcs)
+ properties
+
+
+2008-Dec-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All
+ Cleaning code to draw/plot texts:
+ Now only one function is used to draw and plot texts in pcbnew in all formats
+ Italics texts are allowed in pcbnew (work in progress)
+
+2008-Dec-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All
+ Cleaning code to draw/plot texts (work in progress):
+ Now only one function is used to draw and plot texts (not for pcbnew)
+ (easier to maintain and ensure texts have the same size in ploting and drawing)
+ In eeschema, italic and bold texts allowed (in pcbenew, texts thickness is already adjustable)
+
+
+2008-Dec-18 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Virtualize DrawFrame class methods required to eliminate compiling
+ drawframe.cpp multiple times depending on the application being built.
+ * Move zoom.cpp and drawframe.cpp to common library and update CMake files.
+ * drawpanel.cpp - Extracted mouse wheel events out of mouse event handler,
+ generate commands for mouse wheel events, and moved panning from DrawFrame
+ class into DrawPanel class.
+ * Initial ground work for new zoom implementation.
+
+
+2008-Dec-15 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++gerbview
+ Implemented most of the "thermal" aperture macro, at least so that it
+ displays as concentric circles OK. Still need to do the cross hairs.
+ Fixed a bug loading aperture macros from disk, could crash gerbview.
+ Switched TRACKs to after polygons in tracepcb.cpp, temporary solution until
+ I have more time.
+
+
+2008-Dec-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew
+ Display a short net name on vias and pads (if zoom level allows it).
+ Short net names are net names without hierarchy path
+ Add m_ShortNetname and change m_Netname to private in classes D_PAD and EQUIPOT
+
+
+2008-Dec-08 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Remove all instances of application pointers both global and embedded
+ member variables. Use wxGetApp() for improved readability and type
+ safety.
+
+
+2008-Dec-6 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew & gerbview
+ * As a final migration step, made BOARD_ITEM::SetNext() and
+ BOARD_ITEM::SetBack() _private_, starting at BOARD_ITEM in the class
+ hierarchy so that the compiler will tell us where they are used illegally.
+ Classes derived from BOARD_ITEM then also cannot expose SetNext() and
+ SetPrev(), and this forces everthing related to BOARD_ITEM through DLIST for
+ list manipulation. The compiler turned up a couple I had missed, two of which
+ were the back pointers of MODULE::m_Reference->Back(), m_Value->Back(), which I
+ do not think are needed since the MODULE owns these texts, not the other way around.
+ This should be the final nail in the coffin for undisciplined list manipulation
+ within pcbnew and gerbview.
+ * Converted BOARD::Delete() into BOARD::Remove() and then added an inline for
+ BOARD::Delete() which deletes what Remove() returns.
+ * Removed BOARD::DeleteMARKER( int ) since BOARD::Delete() works.
+ * Removed gerbview's undelete.cpp and made gerbview use pcbnew's,
+ by moving the two supporting functions into the common base class
+ of WinEDA_BasePcbFrame, had to add some "#if !defined(GERBVIEW)"s.
+
+
+2008-Dec-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew & gerbview
+ * Renamed Struct3D_Master to S3D_MASTER.
+ * MODULE::m_3D_Drawings is now a DLIST<>
+ * Removed AddToChain(), DeleteStructList() and replaced with calls to DLIST<>
+ members so that list item counting stays accurate.
+
+
+2008-Dec-05 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Simplified and improved grid implementation. User grid will no longer
+ be displayed if it is the same as any of the default grid sizes.
+ * Removed unused grid code in BASE_SCREEN class.
+ * Source file share/drawpanel.cpp now compiled into common library.
+ * Declare WinEDA_Appl so you can use wxGetApp() instead of passing app
+ pointers all over the place.
+ * Fixed assertion in debug build of 3D viewer.
+ * Some general code beautification and redundant header file removal in files
+ changed by the grid implementation.
+
+
+2008-Dec-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew & gerbview
+ * added g_CurrentTrackList, and made g_CurrentTrackSegment and g_FirstTrackSegment
+ be #defines into this DLIST<TRACK>, see pcbnew.h.
+ * Changed to DLIST<> for almost all the list heads in BOARD.
+ Switched datatype of BOARD::m_Track, BOARD::m_Zone, etc to DLIST<>.
+ This simplifies BOARD::~BOARD() somewhat, and adds automatic counting of list elements and encapsulation
+ of all list operations into DHEAD member functions, see common/dlist.cpp.
+ * Removed TRACK::Insert() since it no long fits with the new BOARD::m_Track and BOARD::m_Zone datatypes.
+ * Removed the g_UnDeleteStack support from <any>::UnLink(), this may leave a deficiency, but this code needs
+ to be external to UnLink() anyway.
+ * Made TRACK::SetNext() and TRACK::SetBack() private so they may not be used,
+ the only way to put a TRACK on a list is through DLIST<TRACK>::PushFront()
+ and other member functions of DLIST<TRACK>.
+ * Switched to std::vector<TRACK*> in track.cpp to hold the temporary static list.
+ * Renamed some KICAD_Ts to more closely match the corresponding classname.
+++gerbview
+ * Switched to GR_COPY mode for drawing so we can see the erasures. debugged
+ erasures in rs274d.cpp.
+ * Now using order specific TRACK loading, so erasures come after objects they
+ are intended to erase. Still need layer ordering and polygon ordering support, my todo.
+
+ I do not like DeleteStructList() and plan to migrate away from it, DLIST<>:DeletAll()
+ does something like it.
+
+
+=======
+2008-Dec-03 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew
+ Switch to polygons in zones (old way no more supported)
+ areas can be now filled using solid polygons, or using segments to fill areas inside polygons.
+ results are same, but using segments can be better (faster redraw time) for polygons having a lot
+ of segments (more than 10000)
+
+2008-Dec-02 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++build fixes
+ * Changed wxWidgets library find order so monolithic build is no longer
+ required (at least on MinGW).
+ * Changed CreateSVNVersionHeader.cmake to fall back to "build_version.h"
+ when 'svn info' command fails. The default macro that ships with CMake
+ will not create build files when 'svn info' fails.
+
+
+2008-Nov-25 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ edit component in schematic editor. works pretty well, I'm done.
+
+
+2008-Nov-24 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ edit component in schematic editor. It is not complete but further.
+ Keep your old eeschema binary, this one does not fully work yet, another day or so.
+ Switched away from wxGrid to wxListCtrl, and that class is poorly documented
+ so much time pioneering how to use it. Should go faster now.
+
+
+2008-Nov-23 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ + Made _protected_ EDA_BaseStruct's:
+ EDA_BaseStruct* Pnext; /* Linked list: Link (next struct) */
+ EDA_BaseStruct* Pback; /* Linked list: Link (previous struct) */
+ EDA_BaseStruct* m_Parent; /* Linked list: Link (parent struct) */
+ EDA_BaseStruct* m_Son; /* Linked list: Link (son struct) */
+ + Split TRACK::Draw() out for SEGVIA
+ + Added dlist.h & dlist.cpp for DLIST<> template. All the _inline_ list manipulation
+ code throughout the package is rediculous. I don't mind list traversal, only
+ list manipulation. DLIST<> templates can be used to consolidate reliable
+ list manipulation operations and get this code out of the mainline.
+ These functions are shared/inherited for any derivation, so only one copy exists
+ in the final program image. To use, simply declare e.g. DLIST<D_PAD> or similar.
+ See dlist.h, template class DLIST for function comments.
+ + added EDA_BaseStruct::m_List to assist in debugging list manipulation functions.
++eeschema
+ Started on the edit component in schematic editor. It is not complete and
+ breaks the usefulness of the editor at this moment. Do not build this version
+ if you want to fully use eeschema.
+
+
+2008-Nov-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew
+ Some cleanup in dialog pad edition.
+ Added:
+ Zones now have a min thickness filled area parameter
+ that ensure a minimun width for filled copper areas
+ (areas below this min thickness are removed)
+ Shapes also are better
+
+
+2008-Nov-19 UPDATE Jerry Jacobs <jerkejacobs@gmail.com>
+================================================================================
+++kicad-library
+ Moved {number}DIP packages to DIP-{number}__{WIDTH} seperated library dip_sockets.mod
+ Created DIP Packages board
+++kicad.pro template
+ Added dip_sockets library to pcbnew libraries in template file
+
+
+2008-Nov-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew
+ First version of pcbnew using polygonal filled areas in zones in rats nets calculations.
+ Needs more tests.
+
+
+2008-Nov-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+kbool:
+ Using the last version (1.9) of kbool, downloaded from the wxArt2D project site
+ (see www.wxart2d.org)
+ But the version 1.8 bug still is here.
+ So using the workaround remains mandatory.
+ (this is not a problem because thermal shapes are better...)
+
+
+
+2008-Nov-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++gerbiew
+ + Added support for displaying most aperture macros embedded in a RS274X compatible file.
+ Cleanup of rs274d.cpp and added the beginning of the isDark support, which we
+ need to discuss. GERBER::m_ImageNegative can toggle during the course of reading
+ a rs274x file and sometimes this means erasing things.
+ + Tested pcbnew's gerber plotting, still working. Done
+ with aperture macros for now, but we need to handle the isDark support to
+ top it off after discussion.
+
+
+2008-Nov-8 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew
+ Thermal shapes modification for round and oblong pads.
+ This is a workaround for a bug (i believe) of kbool.
+ New thermal shapes have NO angle < 90 degrees between 2 adjacent segments.
+ For shapes that have angle < 90 degrees between 2 adjacent segments,
+ under certains circumstances kbool drops some holes and creates a bad filled area.
+ (see zones_convert_brd_items_to_polygons.cpp)
+
+
+2008-Nov-8 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++gerview
+ Added support for reading in aperture macros embedded in a RS274X compatible file.
+ Cannot display them yet.
+ General cleanup of gerbview. GERBER_Descr replaced with class GERBER.
+ ReturnToolDescr() replaced with GERBER::GetDCODE().
+ D_CODEs are created lazily now. pcbnew's gerber plotting needs testing, might
+ have broke something there, accidentally.
+
+
+2008-nov-5 UPDATE Andrey Fedorushkov <andrf@mail.ru>
+================================================================================
++all:
+ Add cyrillic font support.
+ Add russian GOST worksheet support.
+
+2008-nov-2 CLEANUP Jerry Jacobs <jerkejacobs@gmail.com>
+================================================================================
+++kicad:
+ Cleanup comment/codestyle to make things more clear for newbie codeviewer
+ and developers.
+ + buildmnu.cpp
+ + commandframe.cpp
+ + kicad.cpp
+ + treeprj_frame.cpp
+
+
+2008-oct-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All
+ Use double instead float when possible, ande code cleaning.
+ Some changes for a better code compatibility with others compliers (MSVC)
+ (__MSVC__ must be defined when using MSVC)
+ (double round(double) and typeof unkown in MSVC)
+ Note: I cannot test kicad under MSVC.
+
+
+2008-Oct-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ Fixed SCH_COMPONENT() copy constructor with Jean-Pierre's bug catch.
+ Developed a non-functional fbp file using wxFormBuilder for the new
+ dialog_edit_component_in_schematic dialog which I plan on coding in the
+ next couple of weeks as time permits.
+
+2008-oct-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Solved a bug when creating a new zone outline that could crash pcbnew
+ More about copper zones filled without grid (by polygons)
+ Currently for tests only (work in progress).
+ now working: Thermal reliefs parameters can be set.
+
+2008-oct-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ More about copper zones filled without grid (by polygons)
+ Currently for tests only (work in progress).
+ now working
+ thermal reliefs.
+ texts on copper zones.
+ Removing insulated copper islands.
+ currently : not implemented:
+ trapezoidal pads
+
+2008-oct-07 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ More about copper zones filled without grid (by polygons)
+ Currently for eyes and tests only (work in progress).
+ now working
+ thermal reliefs.
+ texts on copper zones.
+ To select this feature choose No Grid in zone grid filling.
+ Work in progress:
+ currently : not implemented:
+ Removing insulated copper islands.
+ trapezoidal pads
+
+
+2008-Oct-6 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ First work on arbitrary number of user fields, i.e. name/value pairs,
+ per schematic component. Use std::vector to hold fields, added GetField()
+ function to SCH_COMPONENT.
+
+
+2008-oct-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ First tests about copper zones filled without grid (by polygons)
+ Currently for eyes and tests only.
+ To select this feature choose No Grid in zone grid filling.
+ Work in progress:
+ currently : not implemented:
+ thermal reliefs (pads are always covered by copper zones).
+ texts on copper zones.
+ Removing insulated copper islands.
+
+2008-Oct-1 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ gen_modules_placefile.cpp: backed out of the "Cu & Cmp" centric terminology
+ and moved towards using layer names which are BOARD specific.
+
+
+2008-Sep-26 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ more about use polygons in zone fill algos on technicals layers:
+ plot Ok. holes are handled
+
+2008-Sep-26 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Starting work to use polygons in zone fill algos.
+ Currently, use this to add zone on non copper layers (technical layers)
+ Only for eyes.
+ Plot outputs do not handle this.
+ Problems with holes in zones.
+ Also: first used of wxFormBuilder
+
+
+2008-Sep-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Fixed a bug in modedit which crashes pcbnew when closing the properties module dialog
+ Both in trunk and tagged versions
+
+
+2008-Sep-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ code cleaning
+ PartTextStruct class name changed to a name : SCH_CMP_FIELD
+
+2008-Sep-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Fixed a problem in zone filling algo: due tu differents ways to truncate coordinates
+ between 2 functions (one round coordinates, and others truncate coordinates),
+ some start points used to fill zones can be inside the zone outlines,
+ but placed outside when init matrix parameters when rounding them instead of truncate.
+ So zone was filled inside and outside when happens.
+
+
+2008-Sep-9 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ Fixed a bug plotting pins with circles in them from eeschema.
+ Added type FILL_T.
+
+
+2008-Aug-26 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ subtle bug solved: no response to the first left click command after opening a dialog box
+ (after an item edition, for instance)
+
+2008-Aug-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ bug solved: netlist calculations could crash eeschema under very rare circumstances.
+ recent bug solved: background filled shapes (filled but not solid: texts are readables inside shapes)
+ were drawn (and plotted) as filled (solid) shapes
+
+2008-Aug-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ bug solved: Horizontal Oblong pads holes have a bad T Code size in the drill file.
+
+
+2008-Aug-15 UPDATE Jerry Jacobs <jerkejacobs@gmail.com>
+================================================================================
++About dialog
+modified: (common.cpp) GetAboutBuildVersion() is a custom build version for the about dialog
+ (config.h.cmake)
+ (CreateSVNVersionHeader.cmake) KICAD_ABOUT_VERSION macro added
+
+added: (about_dialog.cpp) InitKiCadAbout() initalise the about dialog
+
+removed: (common/infospgm.cpp) is no longer needed
+
+
+2008-Aug-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ libedit:
+ solved : a bug which can crash eeschema on a double click.
+ modified : pin lenght edit in pin edit dialog. The value (handle by spin control) was not editable with recent wxWidgets versions
+
+2008-Aug-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ bug solved: pads holes not printed.
+ enforced controls against malformed libraries
+
+2008-Aug-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Removed an obsolete option in the plot menu, in gerber format.
+ Cleanup code.
+ Solved a minor bug: rastnest was not displayed after a move module
+ and if the command was aborted
+
+2008-Juil-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Added component sheet X,Y location in BOM.
+ Netlist generation: now spaces in names are replaced by '_' for pcbnew (which does not accept spaces)
+ Bug: print all pages did not work.
+ Please note in complex hierarchy, the current "Print All" function needs to be enhanced,
+ because it does not draw all sheets but only all different sheets
+
+2008-Jule-08 UPDATE Andrey Fedorushkov <andrf@mail.ru>
+================================================================================
++pcbnew:
+ Added displayed length highlighted net to pcbnew/affiche.cpp
+
+
+2008-June-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ Default path kicad/share added when searching kicad data (like library, internat ...)
+ Kicad data Default paths are now (windows version and linux server install)
+ 1 - kicad/share
+ 2 - kicad
+
+
+2008-June-15 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Bug solved: Eeschema crashed when creating a new subsheet with the same
+ filename as an existing filename, if loading this existing file.
+
+
+2008-June-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ Online doc format changed to PDF format.
+ This is **very** easier to handle, because :
+ - Openoffice has a very good pdf export function.
+ - Only one file for application
+ - Is standart (The old html format used a zipped archive, not standart)
+ - the doc tree is less complex (see doc/help/fr or doc/help/en for the new tree).
+
+ If a localized doc file is not found, the english version is automatically loaded instead.
+ No need to copy the same pdf file in subdirectory.
+
+
+2008-June-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ minor changes
+ added void SetLocaleTo_C_standard(void) and void SetLocaleTo_Default(void)
+ This is wrapper to the C setlocale( LC_NUMERIC, "C" )
+ and setlocale( LC_NUMERIC, "" )function,
+ but could make more easier an optional use of locale in kicad in floating point notations
+
+
+2008-May-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ removed GPC library due to its unacceptable (and stupid) license
+ using the powerfull kbool library insteed (see polygon/kbool)
++all:
+ minor changes
+
+
+2008-May-22 UPDATE Martin Kajdas <kajdas@cox.com>
+================================================================================
++all
+ Moved all XPM files to <kicad>/bitmaps directory and fixed all related files
++PCBnew
+ Changed File/Export shortcut from 'x' to 'e'
+
+
+2008-May-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Solved: problem in manual part selection for multiple parts per package components
+
+
+2008-May-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ Removed bitmaps.cpp. Made a static library target named "bitmaps" which
+ gets linked into any app needing bitmaps. Changed bitmaps.h to simply
+ include an alphabetized listing of the bitmap arrays.
+ We can now continue to migrate all remaining bitmaps into:
+ > the <base>/bitmaps directory
+ > the <base>/bitmaps/CMakeLists.txt file there
+ > the include/bitmaps.h file.
+
+
+2008-May-16 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Solved: bad update of toolbars (eeschema and libedit):
+ undo/redo buttons were not always updated after a change.
+
++kicad
+ the project tree now (as earlier) reads subdirs list files when starting
+ kicad. This feature can be disabled (see treeprj_frame.cpp)
+
+2008-May-15 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ Solved netlist problems for multiple parts per package components
+ in complex hierarchies.
+
+
+
+2008-May-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++common.c
+ wrote wxString& operator << ( wxString&, const wxPoint& ) by moving code
+ from DRC_ITEM::ShowCoord()
++pcbnew
+ * embellished DRAWSEGMENT::MenuText() and DRAWSEGMENT::Display_Infos()
+ * wrote wxString BOARD_ITEM::ShowShape( Track_Shapes aShape )
+ * wrote wxPoint DRAWSEGMENT::GetEnd() which calculates the end point of an arc
+ * wrote DRAWSEGMENT::GetLength()
+ * Added S_ARC support to the specctra_export.cpp for EDGES_PCB with DRAWSEGMENTS
+ of arcs. Arc and lines can be intermixed, its just that they must be
+ contiguous. The user can now use the improved DRAWSEGMENT::Display_Infos() to
+ find any bad or non-contiguous DRAWSEGMENTS, since that function now shows
+ the two endpoints of any segment.
+
+
+2008-May-2 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
++cmake
+ * Use Subversion to automatically generate build date and revision level
+ when building with CMake. Header file build_version.h will still need
+ manual updates when using the hand written make files.
+
+
+2008-May-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Added DRAWSEGMENT::GetStart(), GetEnd() and support S_ARC and S_SEGMENT
+ with it for now.
+ * Added arc support to pcb perimeter of the specctra export.
+
+
+2008-May-2 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Added ZONE_CONTAINER::GetBoundingBox() and used it to clean up
+ ZONE_CONTAINER deletion.
+ * For end of edge dragging activity: used full DrawPanel->Refresh()
+ to clean up all XOR artifacts.
+
+
+2008-May-1 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Fixed bugs in layer name handling within the BOARD
+
+
+2008-Apr-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ made in some dialogs the ESC key working (linux version, already working under windows)
+ screen number and screen count now are set
+
+
+2008-Apr-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Added WinEDA_PcbFrame::UpdateToolbarLayerInfo() by factoring it out of
+ ReCreateLayerBox().
+ * Changed call in void WinEDA_PcbFrame::SetToolbars() from ReCreateLayerBox()
+ to UpdateToolbarLayerInfo().
+ * Removed calls to SetToolbars() from:
+ > share/drawpanel.cpp's void WinEDA_DrawPanel::OnMouseEvent( wxMouseEvent& event )
+ > void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse )
+
+
+2008-Apr-28 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Layer names were not being set into the htoolbar listbox properly if the
+ BOARD was loaded via the command line as happens when kicad chain loads
+ pcbnew. Also, layer names were not being set if a second board was loaded
+ that had the same number of layers as the previous board. The solution was
+ to comment out the listbox rebuild test in WinEDAChoiceBox*
+ WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent )
+ * files.cpp: added Clear_Pcb( false ) to LoadOnePcbFile() and call it if
+ not appending. This way a user can get into the file selection dialog and
+ still abort (change his mind) without losing the current board. Removed calls to
+ Clear_Pcb() where LoadOnePcbFile() would now do that.
+ * edtxtmod.cpp: fixed the drawing relics when moving and rotating module texts.
+
+
+2008-Apr-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ PS output: now shows oblong holes with the true shape.
+
+
+2008-Apr-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ * Spent a 1/2 day tracking down two linked list bugs in deleting a
+ DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE. I cannot believe in the year
+ 2008 we should have to debug a linked list function. This is stuff I expected
+ to do 20 years ago, not today. The function
+ void WinEDA_SchematicFrame::DeleteSheetLabel( wxDC* DC,
+ Hierarchical_PIN_Sheet_Struct* SheetLabelToDel ) never worked as
+ far as I can tell.
+ Should switch to boost::ptr_vector ASAP everywhere, and leave linked lists in the 1980's.
+ * Hierarchical_PIN_Sheet_Struct::Hierarchical_PIN_Sheet_Struct() was not
+ setting the m_Parent.
+
+
+2008-Apr-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ * Added WinEDA_LibeditFrame::GeneralControle( wxDC* DC, wxPoint Mouse );
+ * Added WinEDA_ViewlibFrame::GeneralControle( wxDC* DC, wxPoint Mouse );
+ Needed: Move redundant code to WinEDA_DrawFrame::GeneralControle
+
+ ** Current sheet only Annotation and clear annotation now works for complex hierarchies
+
+
+2008-Apr-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ * Made a little more sense out of the GetScreen() problem by making it
+ non-virtual, and having the two types of frame classes (eeschema's and pcbnew's)
+ each return their respective types of screens {SCH,PCB}_SCREEN*.
+ * Added GetBaseScreen() as the virtual function which always returns BASE_SCREEN*.
+ * Made WinEDA_DrawFrame::GeneralControle( wxDC* DC, wxPoint Mouse ){ dummy }
+ * Added WinEDA_SchematicFrame::GeneralControle( wxDC* DC, wxPoint Mouse );
+ * Moved to void <class>::Place( WinEDA_SchematicFrame* frame, wxDC* DC ) from
+ void <class>::Place( WinEDA_DrawFrame* frame, wxDC* DC ) so that these
+ functions can use the new SCH_SCREEN* WinEDA_SchematicFrame::GetScreen()
+ function (the non-virtual one that returns SCH_SCREEN* not BASE_SCREEN*).
+ * Made some menus conformant to UIpolicies.txt regarding uppercase.
+ * Beautified 5-10 files.
+
+
+2008-Apr-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ very small bug in display component info removed
++pcbnew
++cvpcb
+ removed bug: forgotten paths when adding lib files when not in the default lib path
+ (same problem as in eeschema, solved in 2008-Apr-09 Update)
+
+
+2008-Apr-16 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ In complex hierarchies, multiples parts per packages now should work,
+ without restrictions
+ Update and use annotate_dialog.pjd to create annotate dialog
+
+
+2008-Apr-15 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ More code cleaning and Files cleaning and reorganization.
+ change DrawSheetLabelStruct class name to a better name: Hierarchical_PIN_Sheet_Struct
+ For simple Hierarchies, files are now compatables with old eescheam versions
+ In complex hierarchies, multiples parts per packages have still problems,
+ but i hope to solve that soon
+ (in fact all the last changes were made for that)
+
+
+2008-Apr-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ code cleaning. SCH_ITEM class used for all schematic items in eeschema.
+ Files reorganization.
+
+
+2008-Apr-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ code cleaning.
+
+
+2008-Apr-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ removed bug: forgotten paths when adding lib files when not in the default lib path
+ Also: adding SCH_COMPONENT.m_PartPerPackageSelections to handle multiple parts per package selection
+ in a complex hierarchy, but yet, no other code to do that.
+
+
+2008-Mar-30 UPDATE Jonas Diemer <diemer-at-gmx.de>
+================================================================================
++eeschema
++pcbnew
+ Display a warning on a file format version mismatch.
+
+2008-Mar-31 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ Tweaked class MsgPanel so that the screen drawing only happens from
+ its OnPaint() function.
++pcbnew
+ Added virtual BOARD_ITEM::Draw() and forced all BOARD_ITEM derived classes
+ to implement it so that all these functions are also virtual.
+ Made the offset argument default to the new wxPoint BOARD_ITEM::ZeroOffset.
+ Coded DRAWSEGMENT::Draw() from Trace_DrawSegmentPcb() and removed the latter.
+ Coded EQUIPOT::Draw(), and BOARD::Draw(). Both are dummies for now, but
+ both can be reasonably implemented in the future.
+
+
+2008-Mar-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Solved: eeschema crashes when create a new sheet, using the default filename and enter it.
+ Solved: eeschema crashes when delete a sheet label (pin sheet), undo this and move the label.
+ (bad value (not updated) for the DrawSheetLabelStruct.m_Parent member after redo command in sheet edit).
+
++all:
+ Added comments in gestfich.cpp to explain the default paths used by kicad to find help files and lib files
+
+
+2008-Mar-30 UPDATE Jonas Diemer <diemer-at-gmx.de>
+================================================================================
++eeschema
+ Removed artifacts resulting from redraws in XOR-Mode.
+
+2008-Mar-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Ensure graphic and footprint texts have a sufficient size to be seen on screen.
+ (bug 1909165, due to text on edge layer with a 0 value for X size)
+
+2008-Mar-22 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Netlist dialog redesigned, netlist.cpp code modified
+ and added an option to remove not locked footprints
+ when not found in netlist
+
+
+2008-Mar-21 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ pcbplot.cpp now saves the selected layers as wxConfig options,
+ i.e. retentitively. The ESC key now works in that dialog.
+ Make upper/lower case conformat to UIpolicies.txt
+ Put buttons at bottom, "Close" as bottom button.
+
+
+2008-Mar-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Removed an very old bug in onrightclick.cpp which crashes eeschema when
+ right clicking in a field inside a component.
+ Old code should never works, but ...
+
+
+2008-Mar-20 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ refined the dialog_freeroute_exchange
+ If possible (i.e. if freeroute.jnlp is found in kicad binary directory) javaws is called insteed of the default browser)
+ So @todo removed
+
+2008-Mar-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ Renamed some classes and their corresponding KICAD_T types so they are both
+ simpler, shorter and more closely match each other: the type and the classname.
+ Wedged a class SCH_ITEM underneath most eeschema drawable items, and this
+ class came from DrawPartStruct which was largely disfunctional. Eeschema
+ now more closely matches what we have in pcbnew with the BOARD_ITEM base class.
+ The corresponding class in eeschema is now SCH_ITEM. Put in some of Jonas'
+ patch for the dragging of a block. Needs testing, especially dragging
+ text since there is no GetBoundingBox() for that yet. As an interrim solution
+ we could make SCH_ITEM::GetBoundingBox() return a HUGE rectangle so that any class
+ not implementing GetBoundingBox() in eeschema will get properly re-drawn,
+ in theory.
+
+ We are currently using XORing for dragging a single object and using full
+ redraws for dragging a block. I suppose this can be an experiment for a
+ week or so. I would not expect that dragging a block of labels with no
+ other object to work currently (i.e. *visually* correctly).
+
+
+2008-Mar-19 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
+ * Support for Gnome/KDE menu added.
+ * install.txt rewritten and must be used as main source of information for
+ KiCad installation.
+ * how-to-build-kicad.txt deprecated.
+ * how-to-build-for-windows.txt deprecated.
+
+
+2008-Mar-18 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ refined the dialog_freeroute_exchange.pjd file, adding tooltips, wording
+ changes, wxID_CANCEL so ESC key closes, and added this comment also:
+ // @todo:
+ // 1) add freeroute.jnlp to the Kicad project
+ // 2) change this next C++ line simply run $ "javaws freeroute.jnlp" as a system
+ // command, bypassing the browser altogether. Merely need a PATH to javaws.
+
+
+2008-Mar-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ MODULE::GetBoundingBox() takes in account the clearence around the pads
+ (the clearence limit shape around pads (when shown) was not always erased )
+
+
+2008-Mar-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Fixed a crashing bug which occured when you run the module editor, select
+ "Update module in current board" and then run the DRC checker after that.
+ * Changed to void CreateSortedPadListByXCoord( BOARD* aBoard, std::vector<D_PAD*>* aVector )
+ So caller can safely forget to delete the array of pad pointers and the vector's
+ destructor handles this automatically.
+ * Delete pad from within PCBNEW, not module editor, now uses PostDirtyRect()
+
+
+2008-Mar-14 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++eeschema
+ * cleaned up some xor artifacts, see eeschema/getpart.cpp's comment:
+ // switch from normal mode to xor mode for the duration of the move, first
+ // by erasing fully any "normal drawing mode" primitives with the PostDirtyRect(),
+ // then by drawing the first time in xor mode so that subsequent xor
+ // drawing will fully erase this first copy and then the previous copy.
+ * redraw the entire screen at end of a component move.
+ * added many calls to Refresh() to eeschema/onleftclick.cpp and in such cases
+ I now pass a NULL DC to TestDanglingEnds()
+
+
+2008-Mar-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+ some code cleaning and comment translations.
+ added:
+ /** EDA_Rect::Merge( EDA_Rect & aRect )
+ * Modify Position and Size of this in order to contain the given rect
+ * mainly used to calculate bounding boxes
+ * @param aRect = given rect to merge with this
+ */
+
+
+2008-Mar-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Added a tool to the upper toolbar which gives and easy access to freeroute
+ Solved a bug in plot postscript format when drawing oblong pads:
+ Bad oblong pad size after drawing a round pad
+
+
+2008-Mar-13 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Dirty rect used in footprint rotation, flip and delete.
+ Better calculation of the footprint dirty rect.
+
+
+2008-Mar-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all
+ Added bool EDA_Rect::Intersects().
++eeschema
+ Added provisionary calls to eeschema/eeredraw.cpp for
+ if( panel->m_ClipBox.Intersects( item->GetBoundingBox() ) )
+
+
+2008-Mar-11 UPDATE Per Uddén <p.udden@telia.com>
+================================================================================
++3d-viewer
+ * Fix TODO: Add S_ARC and S_CIRCLE shape render to board edge and module edge.
+ Ex. Now is a board with arcs at corners showing correctly.
+
+
+2008-Mar-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Improved some comments on new functions dirty area functions
+ * Changed
+ void ConvertPcbUnitsToPixelsUnits( EDA_Rect& aRect ); to
+ void ConvertPcbUnitsToPixelsUnits( EDA_Rect* aRect );
+ which I prefer because it is clearer to the human reader of the calling
+ context that the passed argument is to be modified. References as function
+ arguments are fine, but if they are to be modified, passing by pointer
+ gives human reader a clearer picture when looking at the calling context.
+ * TRACK::GetBoundingBox() now (1) rounds up the radius, and (2) returns a bounding
+ box which is [pos,dim) in nature, [inclusive, exclusive).
+ * Changed from "new wxDCClip()" to use an automatic wxDCClip() variable in
+ drawpanel.cpp
+ * Removed a printf() from "release" build of drawpanel.cpp
+ * Added WinEDA_DrawPanel::PostDirtyRect()
+ * Renamed Supprime_Une_Piste() to Remove_One_Track() and it now uses
+ PostDirtyRect().
+ * void WinEDA_PcbFrame::Delete_net( wxDC* DC, TRACK* Track ) now redraws
+ the screen after a net deletion.
+ * eeschema/dialog_find.cpp: set the initial keyboard focus to the text control
+
+
+2008-Mar-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Pcbnew can import footprints in gpcb format in Nelib format only
+ Pcbnew automatically recognizes pcbnew or gpcb format when importing a footprint.
+ Due to differences between pcbnew and gpcb,
+ only gpcb newlib files containing only one footprint (one element) are useables.
+ Dirty rectangle calculation debugged.
+ WinEDA_DrawPanel::ConvertPcbUnitsToPixelsUnits( EDA_Rect& aRect ) can be used to convert a bouding box to a clip box
+ (see example in deltrack.cpp)
++eeschema:
+ restored: missing lines in schedit.cpp (problems in a lot of commands)
+
+
+2008-Mar-06 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++help
+ Eliminated bug "help files not found!".
+
+
+2008-Mar-5 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew
+ Solved problem in fill zone calculations when using buried or blind vias (like micro vias)
+
+
+2008-Feb-18 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++common
+ Path for the help files changed to doc/help.
++help
+ help moved to the doc/help.
++doc
+ Separated from KiCad source code to the trunk/kicad-doc.
++library
++modules
+ Separated from KiCad source code to the trunk/kicad-library.
+
+
+2008-Mar-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Completed transision to BOARD::GetLayerName() and away from ReturnPcbLayerName().
+ LayerNames and LAYER_T are saved in the *.brd file and may be edited
+ there with a text editor until the UI is in place to edit them in PCBNEW.
+ To understand the strategy, see BOARD::GetLayerName() in class_board.cpp
+ and see WinEDA_BasePcbFrame::ReadSetup(). I will be adding "Board" menu
+ item to Preferences, but there is more to come before the UI gets done:
+ net classes.
+ * Clear_Pcb() now deletes the existing BOARD() and new's a new BOARD() so that
+ the default BOARD::m_Layer[] values can be set in the new BOARD's constructor.
+
+
+2008-mars-03 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+3d display:
+ Added Jonas Diemer's patch (enhanced movings from mouse and tools)
+
+
+2008-Mar-1 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ Changed ioascii.cpp to save and load board specific layer names, for DEBUG
+ build only. I want to add class LAYER, see below. Added
+ BOARD::SetLayerName(), BOARD::SetLayerType(), and BOARD::GetLayerType().
+ Will add a UI for editing those soon as soon class LAYER is stable. The
+ BOARD::SetLayerXXXX( int layerNdx, VALUE ) functions would simply route to
+ LAYER::SetXXXX( VALUE ). Then layer specific global variables would migrate
+ to the BOARD::LAYER[]s.
+
+ Jean-Pierre please have a look at pcbstruct.h's class LAYER which is just a
+ prototype for now. EDA_BoardDesignSettings::m_LayerColor would go away,
+ and then I would add LAYER[] to EDA_BoardDesignSettings or BOARD.
+ Whether EDA_BoardDesignSettings or BOARD I don't have a strong preference.
+ I understand this is a bunch of work, and there are tricks needed to handle
+ adding and deleting the number of layers....
+
+
+2008-Feb-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ controle.cpp: fixed the magnetic track if tracks are parallel.
+
+
+2008-Feb-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Renaming the sheet filename now works in simple and complex hierarchies.
+ Use carefully because this can change the whole schematic structure.
+ Gen Bom List now works in unicode build version
+ (label list generation crashed eeschema in unicode build version)
++all
+ Display filename and full sheet name ("sheet path") in sheet reference
+ the full sheet name has no meanning in pcbnew.
+
+
+2008-Feb-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Fixed: problem which could crash eeschema when a sub schematic file in a hierarchy was not found.
+
+
+2008-Feb-27 UPDATE Wayne Stambaugh <stambaughw{at}verizon{dot}net>
+================================================================================
++ eeschema
+ * fixed escape key handling and add accelerate keys in annotate dialog.
+ * factored out eeschema frame class to prevent rebuild of entire project
+ when making changes to eeschema frames.
+ * refactor main eeschema event loop by factoring out most of the non-drawing
+ events.
++ cmake
+ * small fix to root CMakeList file to prevent GCC flags being used with
+ other compilers.
+
+
+2008-Feb-26 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ changed in class DrawSheetStruct m_s member name to m_AssociatedScreen
+ some others minor problems solved.
+ some files "uncrustified"
+ Major problem in undo/redo when a sheet is deleted not yet solved
+ Only for a complex hierarchy, could lost data.
+ When a sheet is deleted by block delete. it is put in undo list.
+ It is really deleted after 10 changes (when the undo list is full).
+ At this time, the associated data is also deleted.
+ If an other (not deleted) sheet shares the same data, this data is lost.
+ Need work to solve this problem and keep the undo/redo feature.
+
+
+2008-Feb-25 UPDATE Wayne Stambaugh <stambaughw{at}verizon{dot}net>
+================================================================================
++eeschema
+ * converted annotate_dialog layout to Gnome HIG per UIPolicy.txt factor
+ out dialog code from annotate.cpp.
+ * refactor and uncrustify schframe.cpp and schedit.cpp
+ * modify eeschema CMakeList.txt to reflect code changes.
+
+
+2008-Feb-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * specctra_export.cpp: added DSN 'outline' support from EDGE_MODULEs.
+ lines and circles, not arcs.
+ * factored out EDGE_MODULE::ShowShape() from EDGE_MODULE::Show().
+ * drc.cpp changed AsSecondItem to HasSecondItem and test it in generating
+ the file report and when making the popup menu in the dialog_drc and
+ when generating the html list item.
+
+
+2008-Feb-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ added : full text conversion between text, label, global label and hierarchical label
+ some problems fixed:
+ - annotation incorrectly cleared.
+ - reference not copied in component copy.
+ - incorrect redo when changing the chip name in component edition
+
+ bugs not fixed:
+ - incorrect annotation in complex hierarchy with multi parts per package (duplicates created).
+
+
+2008-Feb-20 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Fixed bug in getpart.cpp:
+ eeschema crashed when aborting a new component place command
+ Global Symbols now have their shapes
+ Bad global label shape fixed when reading a schematic file
+
+
+2008-Feb-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ specctra_export.cpp fixed the offset problem with freerouter.net.
+ http://tech.groups.yahoo.com/group/kicad-devel/message/1076
+
+
+2008-Feb-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ Add ZONE_CONTAINER support to the ID_PCB_HIGHLIGHT_BUTT tool and
+ WinEDA_PcbFrame::DrawHightLight(). Added TYPEZONE_CONTAINER to
+ GENERAL_COLLECTOR::AllButZones[] so that containers are editable even
+ when the "Show Zones" toggle is off. This came from using the software
+ and realizing that if something is visible (zone containers remain visible
+ even when Show Zones is off) then it should be selectable. Otherwise it is
+ confusing and frustrating.
+
+
+2008-Feb-18 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Start to use BOARD::GetLayerName() in anticipation of configurable layer
+ names per board.
+ * Comment out a printf() which will lock up pcbnew when
+ it is run under kicad project manager and the interprocess fifo gets filled.
+ * Cross probe was not showing the not found message properly. wxString was
+ being used for two purposes, input and Printf() destination.
++gerbview
+ Now loads all gerber files given on the command line, not just one. The
+ first file is loaded into layer 1 (index 0), the second one is loaded
+ into layer 2 (index 1) etc.
+
+
+2008-Feb-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema
+ Fixed bug in gen bill of material (dialog_build_BOM.cpp):
+ eeschema crashed when created a B.O.M. (i think: unicode version only)
+
+
+2008-Feb-18 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++eeschema
+ Added menu View with all possible elements from the top toolbar.
+ Find item added in to the Edit menu.
++all
+ Translated part of IDs to english.
+
+
+2008-Feb-15 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++eeschema
+ Added item "Delete" in "Edit" menu.
+ Added menu "Place" with all possible elements from the right toolbar.
+
+
+2008-Feb-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ specctra export: now generate unique pin names from module padnames in the
+ case where there are non-unique pad names within a module. Tested with
+ Electra demo, and *.dsn files load OK in there as well as in freerouter.
+ Stopped using reserved layer name "signal" and instead output a full
+ padstack consisting of all pertinent layers for via, pads, and keepouts.
+
+
+2008-Feb-12 UPDATE Tim Hanson sideskate@gmail.com
+================================================================================
++eeschema
+ * commiting my changes to allow multiple instances of a given schematic file within a hierarchy:
+ ** internally, m_currentScreen has been replaced with m_currentSheet,
+ which is a list or 'path' of screens. The path of screens is used to generate
+ a series of timestamps, which is converted to flat component reference via a look-up
+ table in the schematic files.
+ ** this means that m_currentScreen is no longer used -- use GetScreen().
+ ** GetScreen is virtual, as some of the dialogs keep around a WinEDA_BaseScreen pointer.
+ ** all sub-sheets in a given schematic must have different names to generate a meaningful netlist.
+
+
+2008-Feb-12 UPDATE Igor Plyatov <plyatov@mail.ru>
+================================================================================
++eeschema
+ Added item "New" in "File" menu
++all
+ Russian translation update.
+
+
+2008-Feb-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * Added case TYPETRACK, TYPEVIA, and TYPEMODULE support to Board::Add() so
+ that we can over time hide more of the storage architecture of a BOARD and
+ isolate those dependencies in fewer places.
+ * Fixed some pad orientation issues in specctra_export.
+ * Added VIA_MICROVIA & VIA_BLIND_BURIED support to SPECCTRA::makeVIA().
+ * Commented out the specctra design import menu choice for now, don't have
+ time or need for this import.
+ * Specctra export adds 1/2 mil to clearance rules for freerouter so that
+ the routed board clears our DRC checker OK.
+ * Session import seems done now.
+
+
+2008-Feb-7 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ added "const" to SEGVIA::GetDrillValue() const;
+ added GetDrillValue() to DRC instead of accessing SEGVIA::m_Drill directly.
+ changed specctra_export so it aborts if all reference designators are not
+ unique. Unless they are unique we cannot import the routed session. A
+ good example is the xylinx board which now fails to export.
+ first rough work on SEGVIA::makeVIA() but needs much more work. Simple
+ session files with vias at least import. Now encode drill diameter in
+ padstack name for later session import.
+ updated todo.txt file.
+
+
+2008-Feb-7 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ specctra import of *.ses, did tracks and components.
+ renamed copy_track.cpp to copy_track.cpp.notused
+ removed copy_track.cpp from pcbnew/CMakeLists.txt
+ added setlocale() around import and export for float text style.
+
+
+2008-Feb-6 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ started specctra imports of *.ses and *.dsn, by adding menus to File | Import.
+
+
+2008-Feb-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ specctra_export.cpp now supports blind/buried/microvias. Fixed how modules
+ are displayed on back of board. Added a circle keepout for each copper-less
+ through hole.
+
+
+2008-Feb-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew
+ * specctra_export.cpp was not exporting the nets correctly, now fixed.
+ * Had a problem with an isolated pad modification on a single module instance
+ in the context of several unmodified instances of same module, now fixed.
+ * Fixed oval pads to make freerouting.net happy.
+ See: http://www.freerouting.net/usren/viewtopic.php?f=3&t=317#p408
+ Done with specctra export for now, will think about adding controls (by dialog)
+ on the export later.
+ * Beautification of a few modules.
+
+
+2008-Jan-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ remove the old EDGEZONE class.
+ A ZONE_CONTAINER class is used instead to handle the creation of a new zone outline
+
+
+2008-Jan-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ SPECCTRA export does most items now, except existing tracks. Soon will
+ need testing.
+
+
+2008-Jan-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ - Better criteria to find starting poind in zone filling: the filling alg. uses
+ pads, vias and track ends to find where start the filling.
+ - Added a tool + option in popup menu in track mode (select track width):
+ when creating a track, if activated: if we starts on an existing track,
+ the new track takes the width of the existing track
+
+
+2008-Jan-27 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++all:
+ I got a patch from Mr. Wayne Stambaugh which makes it possible to compile
+ infospgm.cpp once and link the same *.o file multiple times.
+ Jean-Pierre, if you not yet using CMake, you should edit your make.include
+ so that infospgm.cpp is only compiled once for everything, not once per
+ program. Wayne is a competent developer who contacted me about contributing.
+ I consider him a welcome addition to the developers, Dick.
+
+
+2008-Jan-25 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ * SPECCTRA export does padstacks ok, except that oval pad's arcs need to be split
+ into quarter circle arcs, and no consideration is given to "layer types".
+ See page bottom of page 74 of the SECCTRA Design Language Reference, May 2000.
+ * HISTORY_NUMBER was spelt with a zero.
+ * Width was spelt as Widht
+
+
+2008-Jan-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ - void Change_Side_Module( MODULE* Module, wxDC* DC ) is now member of class BOARD.
+
+ - Better support for micro vias and buried vias (drill files now are useable for board manufacturers)
+ But not yet tested by a board manufacturer. Be carefull.
+ Todo: tools to conversion between via through and buried via and buried viad optimisation.
+ But must works for micro vias (needed for my next board)
+ (in pcbnew micro vias are blind vias between 2 adjacent layers: micro vias must be enabled
+ in Dimensions/track and via menu, and placed by ctrl v.
+ They are intended to connect small pitch BGA pins to the inner layer, and can be drilled by laser
+ if the hole diameter is small < 0.2mm. A laser can only drill a hole between 2 adjacent layers ).
+
+ ** Currently use buried via for tests only, not for production **.
+
+
+2008-Jan-24 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ * Export a specctra *.dsn file includes some padstacks, not ovals yet.
+ * Many many refinements to specctra.cpp and specctra.h.
+ * added COLLECTOR::BasePtr(), which is used in qsort. Could have used
+ * std::sort() instead.
+ * Wrote D_PAD::Compare()
+ * updated todo.txt
+
+
+2008-Jan-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Bugs about fill zones removed (not all, of course).
+ Fixed an old bug in block delete (could crashes pcbnew after deleting footprints).
+
+2008-Jan-23 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ * Export a *.dsn file includes ZONE_CONTAINERs, was actually able to load
+ a board with zones into the freerouter.net package! No components, traces yet,
+ just zones and layers. Fixed parsers and Format()ers.
+ * Rewrote SPECCTRA_DB::readTIME() to dodge a missing strptime() on windows.
+
+
+2008-Jan-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Plot option in GERBER format Plot (Exclude Edge Pcb layer) modification:
+ - the default is OFF (like odl pcbnew versions)
+ - this setup is now save in config (is persistant)
+
+ In Zone creation, now delete last created corner works.
+
+2008-Jan-22 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ * Actually able now to export a *.dsn file, but the contents of the file
+ is incomplete, not a complete input BOARD.
+ * Added DRAWSEGMENT::Show() for debugging.
+ * Changed specctra.h's POINT to use double for coordinates. Changed format
+ string for Format()ing a double.
+ * Changed specctra_export.cpp to actually output an incomplete file.
+ * Added BOARD::GetCopperLayerCount() and BOARD::GetLayerName().
+
+
+2008-Jan-21 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ Added specctra_export.cpp, specctra.cpp, specctra.h, dsn.cpp, and dsn.h to
+ pcbnew's link requirements. Updated CMakeLists.txt to reflect this. This
+ increased pcbnew's size by 175kb so far. Started the actual export (i.e.
+ BOARD to DSN::PCB copying logic) which is going into specctra_export.cpp's
+ void WinEDA_PcbFrame::ExportToSPECCTRA( wxCommandEvent& event ) so that the
+ huge header file, specctra.h need only be included in one or two *.cpp
+ files. The specctra export menu support was added to id.h, wxPcbStruct.h,
+ menubarpcb.cpp, and pcbframe.cpp. After dsn export, I intend to add an
+ import, and a session file feedback merge. See the revised
+ how-to-build-kicad.txt for the new boost c++ libraries requirement.
+
+
+2008-Jan-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ labels and texts display changed when rotated 180 degres:
+ horizontal text are now right justified insteed of 180 degree rotated, and are readable.
+
++pcbnew:
+ bug 1874663 solved (edit a pad netname does not work very well)
+
+2008-Jan-20 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ On line DRC when creating a zone outline.
+ Needs more work to display errors DRC.
+
+
+2008-Jan-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all:
+ filtering small mouse moves ( < 5 pixels) when clicking.
+ Starting a wire or a track is now more easily because these small moves do not start a block commnad.
+
++pcbnew:
+ rework of drill filles creation (excellon and reports)
+ needed to have a clean implantation of buried vias and mainly microvia
+ which involve a more complex drill files generation
+ This is better to continue work on zones because :
+ hight density boards = use of BGA = microvias + good zones handling
+ When a board has buried or blind vias (microvia are blind vias),
+ pcbnew creates a drill file per layer pair. for a 4 layer board:
+ drill file for layer1 to layer 2
+ drill file for layer2 to layer 3
+ drill file for layer3 to layer 4
+
+
+2008-Jan-18 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+ how-to-build-kicad.txt: added the Boost C++ Libraries installation info
+ and requirement.
+
+
+2008-Jan-16 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Move Zone outlines added
+ Zone outline DRC works (needs improvements)
+ some bugs solved, but polyline.cpp still needs work.
+ gendrill: code cleaning.
+
+2008-Jan-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ code cleaning:
+ DRAWSEGMENT class functions moved in the new files class_drawsegment.cpp et .h
+
+
+2008-Jan-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++eeschema:
+ missing footprints in export netlist (bug 1867321)
+ Affected: PadsPcb converter did not list all footprints
+
++pcbnew:
+ fixed: memory not freeed in block copy (minor bug)
+ Support for micro vias (generation of drill files not finished)
+
+2008-jan-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Block commands now works with zones.
+ Some code cleanning.
+
+
+2008-Jan-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
++pcbnew:
+ * Added pad_shapes.h and blended it into class_pad.h and PolyLine2Kicad.h.
+ Renamed the pad shapes in there to avoid namespace conflicts.
+ RECT became PAD_RECT, CIRCLE became PAD_CIRCLE, etc.
+ * common.cpp's ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
+ has commented out code that I tested as part of a possible new scheme to support
+ custom layer names per project.
+ * More specctra dsn import export work.
+
+
+2008-jan-05 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ Added: Delete cutout outline in zone popup menu
+ the GUI about zones is now working.
+ Some work is needed ( a zone in a zone of the same net is not merged )
+ Currently No DRC for outlines
+
+
+2008-jan-04 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++pcbnew:
+ More about zones:
+ Outlines can be edited. Outlines are merged if needeed.
+ Currently No DRC for outlines
+
+
+2008-jan-01 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
++all
+ wxstruct modified and wxPcbStuct.h added:
+ classes relatives to pcbnew, cvpcb and gerbview are moved in wxPcbStuct.h
+
diff --git a/Documentation/changelogs/CHANGELOG-2009.txt b/Documentation/changelogs/CHANGELOG-2009.txt
new file mode 100644
index 0000000..fbdae4f
--- /dev/null
+++ b/Documentation/changelogs/CHANGELOG-2009.txt
@@ -0,0 +1,1013 @@
+KiCad ChangeLog 2009
+====================
+
+
+2009-Dec-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Added option to use some usual Gerber files extension, depending on the layer
+ Do not allow in plot menu to output files for non enabled layers.
+++Kicad and Gerbview
+ Display Gerber files that use usual files extension (in tree project or dialog files)
+ (See http://en.wikipedia.org/wiki/Gerber_File)
+
+2009-Dec-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Renamed dialog_layers_setup* files.
+ Got rid of the header file since there was only one file including it.
+ Auto-position the column titles based on flexgridsizer column widths.
+ Added m_TitlePanel with contrasting background color (whose color value may not
+ be ideal for all platforms).
+
+
+2009-Dec-11 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Finished the Layer Setup Dialog. I assumed that the new layer order will
+ be in place soon. It works fine now, but the layer order is probably
+ misleading, since it does not reflect the current stackup but rather the
+ future stackup. I dropped support for a single layer board. The minimum
+ is two copper layers. Avoid the side you don't want anything on.
+
+ Within a month I should have the layer visibility and selection widget
+ in place.
+
+
+2009-Dec-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ * Factored out the DSNLEXER class so it can be re-used more generally. The
+ constructor takes a keyword table, so it can be used for arbitrary DSN
+ syntax files of your own chosing. Simply create an enum {} with all your
+ unique tokens in it. Then create a KEYWORD table. See SPECCTRA_DB::keywords[].
+ The reason you want an enum is to give the C++ debugger better type information
+ so it can show symbolic integer symbols.
+ * Factored out common richio.cpp and richio.h
+ which is what DSNLEXER uses.
+ * Fixed some minor issues with reading circuit descriptor from a *.dsn file.
+
+
+2009-Dec-6 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew & gerbview
+ * Moved ReturnLayerName() to static BOARD::GetDefaultLayerName() and migrated
+ to a Specctra DSN compatible default layer naming scheme:
+ Component becomes Front, Copper becomes Back.
+ * set_color.h: Cmp becomes Front, Cu becomes Back.
+ * D_PAD::DisplayInfo() changed to use actual copper layer names.
+ * more layer setup dialog work, moved all programmatic wxControl instantiation
+ into the wxFormbuilder environment, but this is fraught with danger:
+ wxFlexGridSizer used the tallest control to establish the row heights, so
+ be careful about changing control borders in the scroll panel. The vertical
+ size can explode since just a couple of pixels times the number of rows
+ is substantial. Currently I am setting a 5 pixel border only left, top, and right
+ but not bottom.
+ * Set copper layer count is back in place as a hack until I can get the enabled
+ layer bit map fully operational.
+
+
+2009-Dec-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Make the source file to the specctra freerouter help panel be html, not *.h
+ This makes it easier to preview the page in a browser. Then autogenerate
+ the *.h file from the html using a CMake script.
+
+2009-Dec-2 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Compiler warning, object name, bug, and string fixes.
+* Fixed EESchema options dialog focus bug so escape key now works in GTK.
+* Rename schematic objects for improved readability.
+* Fixed GCC compiler warnings in plot code.
+* Added paragraph in UIpolicies.txt about setting dialog box sizes.
+* Lots of message box string clean up.
+
+2009-Nov-05 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ control of masks clearance: Pad Editor Dialog rewritten to handle mask clearances
+ and a locad Net clearance
+
+2009-Nov-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ CMakeLists.txt support for AUI.
+
+
+2009-Nov-04 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Added: control of masks clearance
+ - Solder mask clearance can be now defined at footprint and pad level
+ - Solder paste clearance can be now defined as a global value
+ and also at footprint and pad level.
+ The clearance is defined by a constant value and a value proportional to the pad size.
+ The final value is the sum of the 2 partial values
+ Note: this is a work in progress:
+ currently, the pad dialog is not finished and does not
+ have an option to enter the mask values
+ Planned:
+ option to define a net clearance at pad level and footprint level,
+ as an alternate value to the Netclasses values.
+ this option could be useful to create fiducials, and for very small footprints.
+
+
+2009-Nov-1 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ * Added exporting of netclass vias to specctra_export.
+ * DIALOG_DESIGN_RULES now remembers its last selected TAB and screen position and
+ window size, and its grid columns are automatically expanded to fit the
+ column titles. Remembering screen position and size allows someone with
+ multiple monitors to have a given window always come up on the monitor last chosen
+ for it.
+
+
+2009-oct-30 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Replace library editor pin properties dialog box and minor update.
+* Replaced library pin properties dialog with wxFormBuilder version.
+* Remove DialogBlocks version of pin properties dialog.
+* Add pin properties dialog support code to pin object.
+* Create single event handler for displaying pin properties dialog.
+* Remove left over DialogBlocks project file for annotate dialog.
+* Fixed escape key bug in library editor new component dialog.
+* Add GetUnitsLabel() to get human readable units for dialog labels.
+* Translate French comments in all modified files.
+* Some minor clean up of Doxygen comments.
+
+2009-oct-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Rewrite the GUI relative to the tracks widths and vias diameters and drills selection
+ and edition, for compatibility with new netclass approach.
+ Now vias dimensions are defined by their diameter and drill values
+ (This is also a simpler an better way than the old one that considers
+ via diameters and drill values as independant parmeters)
+ When set a via to a "custom" value, the diameter and the drill values are set.
+ (of course one can use the drill defualt value of the netclass)
+ So the via hole edit options (in popup menu) does not exist no more.
+ The global tracks widths and vias diameters and drills changes are now
+ accessible by a specific dialog frame.
+
+
+2009-oct-27 UPDATE Jerry Jacobs <xor.gate.engineering@gmail.com>
+================================================================================
+++common
+ Doxygen output directory changed to Documentation/doxygen
+ Cleanup of HOTKEY IDs
+ Creation and cleanup of hotkey submenu
+
+++misc
+ Moved pcbcfg.cpp to pcbnew_config.cpp
+ Moved eeconfig.ccp to eeschema_config.cpp
+ Fixed typos
+
+2009-oct-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Rework on print function: fixed the fully broken print function in Modedit
+ and better code.
+ Removed the display vias option tool in Modedit and Gerbview left toolbar,
+ because this option has no sense here.
+
+2009-oct-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ * Work on Net Classes: tracks and vias sizes, vias drill
+ come from netclass netclasses values. Global values removed.
+ * Added for DRC drill vias and microvias min drill value
+
+2009-oct-20 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Replace component library editor draw item dialog box.
+* Created new component library editor draw item dialog box with
+ wxFormBuilder.
+* Removed previous DialogBlocks version of the draw item dialog box.
+* Removed some additional global variables used in component library
+ editor.
+* Add IsFillable() method to draw item base object.
+
+wxWidgets 2.9 string fixes and other minor updates.
+* Replace all known instances of (const wxChar*) casts to GetChars() for
+ wxWidgets 2.9 compatibility.
+* Cleaned up get component dialog so last part gets saved on wild card
+ selections.
+* Remove redundant schematic component drawing code.
+* Added SCH_COMPONENT constructor to create new component from library
+ component object.
+* Add message panel helpers to WinEDA_DrawFrame and update old message
+ panel access code.
+* Using library viewer to add component to schematic now respects unit
+ and body style selection.
+
+2009-oct-14 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Fix save last grid size and other minor updates.
+* Create single event handler for grid size events.
+* Fix all frame windows to use new grid size event handler.
+* Use offset relative to ID instead of ComboBox index to save last grid size.
+* Move last grid size load/save setting into WinEDA_DrawFrame.
+* Add equality and assignment operators the GRID_TYPE.
+* Add current grid helper methods to BASE_SCREEN.
+* Add GetPins helper to LIB_COMPONENT to replace GetNextPin where applicable.
+* Add AppendMsgPanel helper to WinEDA_DrawFrame.
+* Improve rounding for display of coordinates when millimeter units are selected.
+
+2009-oct-01 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+* Component library viewer restores state between uses.
+* Fixed automatic zoom calculations in library viewer.
+* Make library entry list dialog restore previous selection.
+* Fix bounding box calculation for vertical field and text draw objects.
+* Changed library draw object comparison to test for greater and less than.
+* Initial preparation for merging separate library component draw item lists.
+
+
+2009-sept-29 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+* Eliminate external direct manipulation of component draw item pointer.
+* Add draw item remove, add, and locate methods to library component object.
+* Remove redundant locate pin, field, and draw item code.
+* Fix add new pin drawing bug that left initial pin draw in place.
+* Improved best zoom calculations for small components.
+* Library component bounding box calculation now includes fields.
+* Removed unnecessary header file "libcmp.h".
+* Fixed potential locate draw item bug in library editor hot key handler.
+
+2009-sept-27 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ * make pcbnew compatible with last changes
+ (Delete base screen in WinEDA_DrawFrame destructor to prevent potential memory leak.)
+ * Starting complementary work on Net Classes (moving target)
+
+2009-sept-25 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Component library editor improvements and minor bug fixes.
+* Component library objects renamed for improved readability.
+* Fields now move when selected in library editor.
+* Add copy constructor to all library draw and library component objects.
+* Added copy constructor to EDA_BaseStruct.
+* Delete base screen in WinEDA_DrawFrame destructor to prevent potential memory leak.
+* Fixed memory access bug when replacing and adding a component to library.
+* Moved library component block manipulation code into component object.
+* Removed all of the global variables used by the library editor main window object.
+* The usual code cleaning and refactoring.
+
+2009-sept-22:
+Command ID refactoring and other minor improvements.
+* Split out application specific command IDs to prevent unnecessary rebuilding.
+* Eliminate duplicate menu and tool bar command IDs.
+* Split component library editor and viewer definitions to separate header files.
+* More component library and document file merge code.
+* A bunch of minor string readability and consistency fixes.
+
+2009-sept-18:
+Component library object and other minor improvements.
+* Create static component library methods to manage library list.
+* Rename component library, component, and alias objects to more readable name.
+* Use pointer to component instead of root name to prevent redundant library searches.
+* Add append message helper to message panel that calculates string length.
+* Initial ground work for merging library and library document files.
+* Improved component library file load error checking.
+* Minor component library editor improvements.
+
+
+2009-sept-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Speed up ZONE_CONTAINER::Copy method
+ Speed up NETINFO_ITEM* BOARD::FindNet( const wxString& aNetname ) by using afast binary search
+ Switch to kbool V2.1. This version solves others problems in zones calculations.
+ Adding an other way to generate thermal shape; DO NOT USE: this is for kbool tests only
+ (I am thinking some bugs are remaining, so i am always working on kbool tests.
+ Klaas Olwerda is supporting me)
+
+
+2009-sept-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ moved copper layers properties (layers couns anf layers names) from Design rules
+ to a specific dialog.
+ This must be seen as a TEMPORARY work, until a volunteer creates a better dialog box,
+ because there is currently no other way to change copper layers names.
+
+2009-Sep-10 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Finished initial NETCLASS work, along with UI. Put NETCLASS support
+ into DRC. Fixed DRC dialog so progress during DRC is sensible and visible.
+ The specctra_export probably still needs a little work regarding VIAs.
+ I compiled wxformbuilder from source, so you may need to upgrade to
+ load my *.fbp files.
+
+ Jean-Pierre @ todo: pcbnew/zones_test_and_combine_areas.cpp needs to
+ use NETCLASS and not g_DesignSettings.m_TrackClearance
+
+
+2009-sept-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Work on undo/redo in pcbnew finished.
+ Switch to kbool V2.0. This version solves some problems in zones calculations but not all.
+ The Kbool's author, Klaas Holweda, is still working on these problems
+ Thanks to Klaas
+
+
+2009-aug-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Work on undo/redo in pcbnew almost finished.
+
+2009-Aug-16 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ * first of my work on NETCLASSes, more to come.
+ wrote: BOARD* BOARD_ITEM::GetBoard(), int BOARD_CONNECTED_ITEM::GetClearance( BOARD_CONNECTED_ITEM* ),
+ rewrote: classes NETCLASS, NETCLASSES, BOARD::SynchronizeNetsAndNetClasses(),
+ added: NETCLASS::m_ViaDrillSize, NETCLASS::m_Description. Removed netname from
+ EQUIPOTs in *.brd file (were redundant with NETCLASSes in *.brd file). NETCLASSes
+ now follow EQUIPOTs in *.brd file.
+ NETs and NETCLASSes are linked by pointer from class NET.
+ BOARD::SynchronizeNetsAndNetClasses() will validate pointers, NETs and NETCLASSes.
+ * Pay particular attention to the new:
+ int BOARD_CONNECTED_ITEM::GetClearance( BOARD_CONNECTED_ITEM* aItem ) const
+ which considers two netclasses and finds the largest distance from the two
+ involved.
+ * I would love to see class NETINFO_ITEM renamed to NET.
+
+
+2009-Aug-6 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ MsgPanel is dynamically sized based on system gui font. Before this fix
+ the window height was hardcoded and was too small on systems with large
+ fonts. See WinEDA_MsgPanel::GetRequiredHeight();
+
+
+2009-aug-08 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Work on undo/redo in pcbnew in progress.
+ SEG_ZONE is now deprecated.
+ When a zone is fille by segment, the ZONE_CONTAINER handles these segments
+
+2009-july-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Starting work on undo/redo in pcbnew.
+ Currently, undo redo commands are only delete one item (and only for some items)
+
+
+2009-july-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++all
+ Rework on undo/redo and block functions
+ Better and simpler coding of block and undo/redo functions
+ The goal is to have the same functions in eeschema and pcbnew.
+ and have a full undo/redo in pcbnew.
+
+2009-july-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ First work about net classes. This is a work in progress and a moving target.
+ Manual routing and DRC do not use yet this feature
+
+
+2009-Jul-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ added support to specctra import for the <structure_out> descriptor.
+ <route_descriptor> had confused <structure_descriptor> with the <structure_out_descriptor>
+ The fix facillitates round tripping from the TOPO-R router.
+
+
+2009-july-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Eeschema:
+ Enhanced netlist creation and ERC tests for component having multiple parts per package
+ Connecting power pins of all parts is no more needed.
+ Usually, these components have in schematic duplicated power pins.
+ Op amps having 4 parts have also 4 duplicated pins per power input,
+ and therefore the user must place 4 power symboles per physical power pin
+ Now Only one power is needed (now eeschema search for a connected pin
+ between duplicated power pins)
+ Note this is a work in progress because the ERC does not check if these duplicate
+ are connected to the *same* net.
+
+2009-july-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All:
+ Use a common class for markers in pcbnew and eeschema:
+ created a basic class called MARKER_BASE
+ class DRC_ITEM is also common to pcbnew and eeschema
+ class MARKER (in pcbnew) and class MARKER_SCH (eeschema) are derived
+ from this basic class.
+ The main goal is to use a common class for pcbnew and eeschema to handle
+ errors and to have similar dialogs
+ and have more comprehensive ERC messages errors in eeschema
+ This is a work in progress
+
+
+
+2009-july-05 UPDATE Jerry Jacobs <jerkejacobs@gmail.com
+================================================================================
++ Closing bug 2802441, No single error messages any more, 2009-06-07 over2there.
+ Fixed this both in eeschema and cvpcb, for now printing wxstring in a
+ messagebox. Should make a nice textctrl dialog.
++ Added cvpcb directory to Doxyfile
+
+2009-june-19 UPDATE Jerry Jacobs <jerkejacobs@gmail.com>
+================================================================================
+Added Hauptmech patch.
+I Updated doc to match this patch.
+
+++Pcbnew:
+> * Board thickness in the 3D view can be set in *.pcb files (hand edit)
+> * Hotkey files bug: incorrect file extension as default in some open/save dialogs.
+> * Hotkeys made available for pcbnew [add track] and [add module] tools.
+> * Drag and Move hotkeys extended to drag tracks and move nodes/vias when the [add track] tool is active.
+> * Show/Hide Invisible Text button added to lefthand menu
+> * Dropdown list of clearance history available next to trackwidth history.
+
+
+2009-june-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Added: in DRC tests: tests for vias min size and tracks min width.
+ Added: Option to show the via area while creating a new track.
+ Useful in compact designs to know how to place a via during track creation.
+
+2009-june-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Eeschema:
+ Added text justification for graphic texts in libedit
+ Minor bug 2803506 fixed (error when mirroring bus entries)
+ Some code cleaning.
+ Better locating algo for arcs in libedit
+
+2009-may-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Eeschema:
+ Changes about thickness of lines in draw/plot functions.
+ Now there is only one thickness parameter for plot and print.
+ This is now the default thickness value,
+ used for items that have a line thickness = 0,
+ and NOT the minimum thickness.
+ reasons:
+ - Obviously, differents parameters to draw and plot are bad.
+ (what you plot is NOT what you see)
+ - small texts are not readable with an minimum thickness value
+ that could be good for others items.
+
+
+2009-may-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All:
+ Cleaned and optimized code about new hershey fonts and bold texts handling.
+ Bold texts use now the same font as normal texts.
+ Only the pen size used to draw them is bigger.
+ - The max pen size allowed depending on texts sizes is now tested
+ when loading boards and modules, and clamped if too large.
+
+
+
+2009-may-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Finished code cleaning about ratsnets calculations and handling
+ Obscure code removed ( I hope)
+ Better names for some members of BOARD class.
+
+2009-may-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ clean code in ratsnet calculations (work in progress)
+ The old code was very difficukt to understand, and was sometime very ugly.
+ Mainly, the list of nets (RATSNEST_ITEM class, formerly EQUIPOT class)
+ are now handled in a std::vector, and not a linked list.
+ This is better, because nets identifiers for pads and tracks are a number called netcode.
+ now, this is the index of the given net in this list, and the code to find a net given by its netcode
+ is very fast.
+
+
+2009-may-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All:
+ Rework on TEXTE_PCB, SCH_TEXT and EDA_TextStruct classes.
+ Code seriously cleaned, obscure and duplicated code removed,
+ and some oddities removed ( like different .m_Orient values in eeschema and
+ pcbnew, for the same text orientation )
+ Multiline texts (in comments and Pcb texts) are now supported.
+ In pcbnew text justifications could work (but not yet used and tested)
+
+
+2009-may-01 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew:
+ Better dialog options for zones on technical layers.
+ Zones on silk screen filled with segments are now plotted
+ Better support of multiline texts (work in progress)
+
+2009-apr-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ Eeschema:
+ When annotating: tests and repairs bad (duplicated) time stamps.
+ Can be found in old schematics or converted from others tools ...
+
+2009-apr-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Fixed: fully broken netlist import from eeschema when using time stamp.
+ (normal operation worked fine)
+ Added: alawys print diags in dialog window when reading a netlist
+
+2009-apr-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ALL:
+ Code clarification: There were 3 functions to display info:
+ - DisplayInfo (displaying a message info)
+ - class members DisplayInfo and Display_Infos doing the same thing
+ (and sometimes these 2 functions were existing in some classes)
+ This was *very* confusing and created minor bugs
+ (info in eeschema was not always displayed, because the "bad" function was used)
+ Now DisplayInfo is renamed DisplayInfoMessage
+ Ann class member DisplayInfo is used in all classes ( replaces all Display_Infos instances)
+
+2009-apr-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++eeschema:
+ Default libraries path are now differents for pcbnew and eeschema (as it do)
+ Fixed: bad library search path for schematic component docs (docs were not found)
+ Added: display actual lib paths in eeschema lib config dialog.
+
+ These next fix give the same behavior than "old" version
+ Use relative paths in libraries and doc filenames when possible
+ i.e when a file is found in a sub path in a default path
+ (very important for Windows/linux/mac compatibility of projects and their configs)
+
+ TODO: allows user to add paths in list. Currently the user path for lib is broken
+ (but the new code could allow the user to add more than one user path)
+
+ TODO: do the same for pcbnew and cvpcb
+
+2009-apr-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++eeschema:
+ - Viewlib: listboxes for lib or component selection are now resizable
+ - library cache name changed from <root_name>.cache.lib to <root_name>-cache.lib
+ Needed by the new code using wxFileName.
+ When wxFileName calculate the filename, it returns <root_name>,
+ and the old code returns <root_name>.cache
+ So to avoid problems or ugly code, the lib cache name is now <root_name>-cache
+ Old cache is used if the lib cache with the new name is not found.
+
+
+2009-apr-07 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew:
+ fixed: bug 2738052 (Delete tool does not delete zones outlines)
+++eeschema:
+ fixed: void history file list in menu
+++All:
+ made GetAssociatedDocument() compatible with last changes in kicad path handling.
+ Get PDF doc associated with a component now works
+ Some work still needed.
+
+2009-apr-06 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++common:
+ overbar patch merged in drawtxt.cpp and mainly in eechema/class_pin.cpp
+ some cleanup and some compiling problems fixed.
+
+++eeschema:
+ changed dialog_eeschema_config.cpp to use wxFormBuilder to create
+ the corresponding equivalent dialog in dialog_eeschema_config_fbp.cpp
+
+2009-apr-05 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Removed all instances #ifdef eda_global, COMMON_GLOBL, and MAIN in order
+ to unobfuscate global variables.
+ * Moved global variables common to all applications into common.cpp.
+ * Moved global variables common to Pcbnew, Gerbview, and Cvpcb into
+ pcbcommon.cpp.
+ * Create pcbcommon library to prevent compiling shared PCB drawing object
+ files multiple times.
+ * Replaced round() with wxRound and eliminate MSVC specific implementation.
+ * Moved project configuration files into the application class.
+ * Moved editor name global variable into the application class.
+ * Created load and save settings methods for basic frame class and begin
+ putting global variables in the class where they are used.
+ * Start replacing obsolete wxWidgets file functions and redundant Kicad
+ file name manipulation code with wxFileName.
+ * Initial library search path implementation using wxPathList.
+ * Define correct wxFileDialog wild cards.
+ * Apply patch Fix typo in about box to keep MAC folks happy.
+ * Lots of general code clean up, spelling error fixes, and uncrustification.
+ * Renamed Affiche_Status_Box to UpdateStatusBar.
+++EESchema
+ * Defined Load() method so library file drawing objects can load themselves.
+ * Defined GetBoundingBox() method so library file drawing objects can
+ calculate their own bounding box.
+ * Fix arc library drawing object bounding box calculation.
+ * Remember last import and export library path in library editor.
+ * Add new library search path support.
+++Kicad
+ * Eliminate the one giant case statement to rule them all command event
+ handler and create per command event handlers.
+++CvPcb
+ * Add new library search path support.
+ * Add message dialogs to prompt user of library file load errors instead of
+ failing silently.
+ * Fix NULL pointer bug were display frame would crash CvPcb when
+ WinEDA_DisplayFrame::Get_Module() could not find foot print module.
+++PcbNew
+ * Add new library search path support.
+ * Add message dialogs to prompt user of library file load errors instead of
+ failing silently.
+
+
+2009-mar-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew:
+ added BOM generator (in postprocess menu)
+
+
+2009-mar-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All
+ code cleanup in project_config.cpp.
+ Now parameters common to all projects are saved on exit.
+ (they are usally options like colors, draw options ...)
+
+++pcbnew:
+ added option to show or not netnames on pads and tracks
+
+
+2009-mar-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ in DRC: added test pads to holes.
+++Al:
+ minor changes.
+
+
+2009-mar-16 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ Fixed:
+ bug that crashes pcbnew when removing all footprints
+ (in connection calculations, pointers to pads not reset)
+
+ bug that crashes pcbnew when filling a zone
+ if a module has a trapezoidal pad
+ (trapezoidal pads are not yet implemented in zone filling,
+ they are now calculated as rect shape (todo: a better handling) )
+
+
+2009-mar-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++eeschema:
+ Added: option to print ALL users fields in B.O.M.,
+ so if more than 8 fields, they are printed. (issue 2680640)
+
+++pcbnew:
+ Added 5 metric grids (1mm, 0.5mm 0.25mm 0.2mm and 0.1mm) in default grid list.
+ Minor bug in drill map creation (PS format) fixed
+
+2009-mar-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ fixed: a bug that can delete an existing zone after creating a new zone,
+ if the new zone contains this existing zone
+ This is a DRC error, buf can be temporary possible when creating complex zones
+
+2009-mar-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+++gerbview:
+ print,plot: error message displayed when no layer selected.
+
+
+2009-Mar-5 UPDATE Vesa Solonen <vesa.solonen@hut.fi>
+================================================================================
+++pcbnew:
+ bug fix in zones_convert_brd_items_to_polygons.cpp:
+ Fixes "thermal stub bleed" in zone fill. Small (compared to thermal width) pads are handled properly now.
+
+
+2009-mar-05 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ bug fix in move_or_drag_track.cpp:
+ function SortTrackEndPoints() broken: does not handle pointers to pads for start and end and flags relative to these pointers
+ MergeCollinearTracks( ) broken, because it merge segments having different width or without any connectivity test.
+ 2 collinear segments can be merged only in no other segment or vais is connected to the common point
+ and if they have the same width. See cleanup.cpp for merge functions
+ These functions break the connectivity calculations.
+ So they are temporary disabled (see my comments in these functions)
+ bug fix in Marque_Une_Piste(): the last segments created can be see as part of the flagged track:
+ so delete track (or edit track width) deletes the track and some others segments (last created)
+ bug fix 2660689 Unconnected pads in RC4. Also fixed some no deletion of the old track when creating a new track
+
+
+2009-Feb-25 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Fixed hot key bug that caused undo and redo events in the library editor
+ to be passed to the schematic frame. Fixes bug #1896790.
+ * Fixed hot key bug that allowed new wire to be placed during block move
+ causing a manage cursor message box to pop up.
+ * Fixed hot key bug that allows an object in block to be deleted during
+ a move or drag operation.
+
+
+2009-Feb-25 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ * Markers were not shown when on top of a high-lighted pad. Moved highlight
+ drawing function into class BOARD and out of Frame. Call BOARD::DrawHighLight() from
+ within BOARD::Draw() to fix.
+ * Gerbers were not generated if you had EDGE_MODULEs on a copper layer, such as in
+ a MuWaveBasicShape. The line thickness was not being put into the gerber via a DCODE.
+ These gerber files were bad, and geda gerbv would also complain.
+ * A few window titles were not conformant with UIpolicies.txt.
+ * You could not load a *.pro file from another project into PCBNEW if your current
+ project had none. Changed wildcard mask.
+ * Deleted gen_self.h and moved that code into muonde.cpp
+
+
+2009-Feb-24 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ * dialog boxes calling OnInitDialog are flashing because these functions
+ change the size of controls that are already on screen. This leads to
+ an annoying resize operation. So I renamed OnInitDialog(event) to
+ void init() and call it from the constructors. Did this for
+ dialog_general_options.cpp and dialog_display_options.
+ * dialog_general_options was not setting g_MagneticPadOption and g_MagneticTrackOption
+
+
+2009-Feb-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ bug fix:
+ 2628615 Error message after right click into zone
+ 2625434 Crash after trying to edit a line/drawing
+++cvpcb
+ fix: 2625090 CVpcb - language selection
+
+
+2009-Feb-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++gr_basic.cpp
+ Added: Function ClipAndDrawFilledPoly()
+ Used to clip a polygon and display it as Filled Polygon
+ uses the Sutherland and Hodgman algo to clip the given poly against a rectangle.
+ This rectangle is the drawing area
+ this is useful under Linux (2009) because filled polygons are incorrectly drawn
+ if they have too large coordinates (seems due to integer overflows in calculations)
+ Could be removed in some years, if become unnecessary.
+
+
+2009-Feb-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Loading a module into the module editor was changing the layer count
+ of a loaded board. This is because void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event )
+ calls bool WinEDA_BasePcbFrame::Clear_Pcb( bool query )
+ which then sets the global g_DesignSettings.m_CopperLayerCount = 2;
+ This is terrible.
+ We need a layer count in each board, not as a global. For now, comment out the assignment in initpcb.cpp.
+
+
+2009-Feb-17 Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ Dialog track options redesigned with wxFormBuilder
+ Alt via drill renamed Specific via drill in dialog and popup menu.
+ Added tips in dialog.
+
+
+2009-Feb-09 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema
+ Changed dialog_edit_label so that it is UIpolicies.txt compliant. Proper case
+ on window titles, resizeable dialog border, minimum text width handling.
+
+
+2009-Feb-7 Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All:
+ change grid size type from integer to double (using wxRealPoint insteed of wxSize)
+ This is mandatory in Pcbnew to handle metric user grids without error
+ (was unusable before, using integer grid size).
+ A lot of footprints uses not metric grid.
+ refinements for user grid (mainly in read/write config).
+
+
+2009-Feb-06 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ added "cutout" from a ZONE_CONTAINER capability to the SPECCTRA export.
+ added "netless zone" support to SPECCTRA export.
+
+
+2009-Feb-6 Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+ Added a forgotten contributor (Tim Hanson) to kicad contributor list.
+
+++pcbnew:
+ Zoom factors in 1.5 progression, and limited to 18 values
+ (near to to Wayne Stambaugh's changes: 15 values are not enought for pcbnew)
+ removed minor problems in zoom box selection (removed blank line).
+ Added user grid selection in modedit and refinements when user grid is selected.
+
+
+++eeschema:
+ Zoom factors in 1.5 progression, and limited to 15 values according to Wayne Stambaugh's changes.
+
+2009-Feb-05 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Change CMakeList.txt so that all PCB object classes that do not need built
+ separately for pcbnew, gerbview, and cvpcb only get built once and added
+ to the common library.
+ * Override all classes derived from WinEDA_BasePcbFrame so that the source
+ code file basepcbframe.cpp only gets compiled once and added to the common
+ library.
+ * Prevent cursor movement keys from moving outside of client area by
+ automatically scrolling the drawing.
+
+
+2009-Feb-4 UPDATE Vesa Solonen <vesa.solonen@hut.fi>
+================================================================================
+++pcbnew:
+++eeschema:
+ Zoom factors in 3th root series of 2. So two intermediates between half/double scale.
+
+2009-Feb-04 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Refactor header files to reduce the number of files that need recompiled
+ when making changes to base classes.
+ * Move sine and cosine look up tables from trigo.h to trigo.cpp to avoid
+ multiple recompiles.
+
+
+2009-feb-01 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All:
+ change filename drawpanel_wxstruct.h to class_drawpanel.h
+ and move class BASE_SCREEN description from drawpanel_wxstruct.h to a new file: class_base_screen.h
+ minor enhancement for window zoom command.
+ refinements in 3D zones drawing.
+
+2009-jan-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All:
+ Print functions and display zoom level modified to use the new zoom implementation
+ Comments added in some functions.
+ Code cleaning
+ some bugs fixed.
+ Added contributors to list in about Kicad.
+
+2009-Jan-29 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Replace zoom implementation with a more flexible ( and hopefully useful )
+ design.
+ * Removed gr_basic.h from fctsys.h so that the entire project doesn't get
+ rebuilt unnecessarily.
+
+
+2009-Jan-29 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ common.c added EnsureTextCtrlWidth()
+++eeschema
+ * dialog edit component in schematic: make sure chipname text control is wide
+ enough to handle unusually long chip names.
+ * Retain and re-use user's desired dialog edit component window size.
+ Did not have time to look at dialog edit component in library.
+
+
+2009-Jan-27 UPDATE Vesa Solonen <vesa.solonen@hut.fi>
+================================================================================
+++pcbnew:
+ Zone arc approximation starts with half increment offset from v/h for pads and vias
+ to get more fill space between rows.
+
+2009-Jan-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++pcbnew:
+ Found why remove unused thermal stubs fails sometimes:
+ Only the first filled area in a zone was tested.
+ Solved.
+
+2009-Jan-18 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Replace Kicad file history implementation with wxFileHistory.
+ * Laid groundwork for search paths using wxPathList in EDA_Appl.
+ * Made ReCreateMenuBar actually recreate the menu bar. Now language updates
+ to menus can be changed without restarting program.
+ * Lots of general housekeeping, simplification, and code beautifying.
+++EESchema
+ * Fix zoom and pan bug in library viewer panel due to incorrect DrawPanel
+ rectangle.
+ * Add zoom accelerator keys to library viewer (works in GTK, not Windows).
+ * Add Postscript header to new print dialog so Linux build works.
+++PcbNew
+ * Add Postscript header to new print dialog so Linux build works.
+
+
+2009-Jan-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++All:
+ Cleaned code in print dialogs.
+ They are now specific to eeschema and pcbnew.
+ Gerbview uses pcbnew dialog.
+ The code is now a lot more easy to understand.
+
+
+2009-Jan-15 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Pcbnew:
+ Added: patch from Rok Markovic (rok@kanardia.eu) to remove unused stubs in thermal pads
+ Modified: print boards when printing in color mode layers on one sheet:
+ now printed in OR mode like drawings on screen
+ Also in SVG mode, but OR mode seems not work very well in SVG mode (tested with inkscape).
+
+
+
+2009-Jan-11 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Pcbnew:
+ Added: print SVG format.
+ SVG print/plot function uses WRITE modeinsteed of OR mode as graphic mode.
+ todo ? uses OR graphic mode with black background color (wait and see)
+++eeschema:
+ Code cleanup for Print SVG format, and used wxFormBuilder in SVG print dialog
+
+
+2009-Jan-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Pcbnew:
+ Calculations to create filled areas in a zone modified and uses 2 pass:
+ 1 - filled areas are calculated with pads in zone.
+ 2 - If thermal shapes are wanted, they are added (i.e. copper removed after ).
+ Seen comments in zones_convert_brd_items_to_polygons.cpp
+ The initial method was calculate filled areas in one pass.
+ With the 2 pass calculation, the calculation time is more expensive but:
+ - Kbool seems now works correctly in cases where the one pass way does not work
+ - Thermal reliefs can have a better shape (todo..) because when calculating them, the filled
+ areas are known (this was not the case in one pass way)
+
+
+2009-Jan-08 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ Print and plot functions now properly prints all sheets in a complex hierarchy
+ plot files created have now a new filename in order to be compatible with complex hierarchies
+
+
+2009-Jan-07 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ Print function now properly prints all sheets in a complex hierarchy
+ Note: plot functions are not updated and do not plot all sheets.
+
+
+2009-Jan-07 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Don't pan or zoom on mouse wheel events when the cursor is not in the
+ drawing area.
+ * Reduce all zoom code to a single zoom command handler.
+ * Eliminate redundant zoom command identifiers.
+ * Move pop up zoom command handler from DrawPanel to DrawFrame.
+ * Change hot key zoom handlers to use command events.
+ * Added DrawFrame event table to replace COMMON_EVENTS_DRAWFRAME macro.
+ * Added locale path relative to binary path for development purposes.
+ * Minor code clean ups and duplicate header removal in files that were
+ updated.
+
+
+2009-Jan-04 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ wxPcbStruct.h: made m_Pcb private, added GetBoard(). Am considering
+ putting each gerber layer into its own BOARD.
+
+
+2009-Jan-02 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
+================================================================================
+++Eeschema:
+ Code cleaning.
+ LibDrawPolyline uses now std::vector<wxPoint> to handle corners.
+ DrawPolylineStruct uses now std::vector<wxPoint> to handle corners.
+
diff --git a/Documentation/changelogs/CHANGELOG-2010.txt b/Documentation/changelogs/CHANGELOG-2010.txt
new file mode 100644
index 0000000..40f5d1b
--- /dev/null
+++ b/Documentation/changelogs/CHANGELOG-2010.txt
@@ -0,0 +1,1010 @@
+KiCad ChangeLog 2010
+====================
+
+2010-dec-31 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Exclude boost header include path from Doxygen files.
+ * Coding guide line and doxygen warning fixes.
+++EESchema
+ * Rename OBJ_CMP_TO_LIST to SCH_REFERENCE.
+ * Move code related to SCH_REFERENCE into the object where it belongs in hope
+ that some day the object members can be made private instead of public.
+ * Add GetComponent method to sheet path and sheet path list objects.
+ * Move screen list code into screen list object.
+
+
+2010-Dec-28 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++richio:
+ * Deleted kicad_exceptions, because it required the big #include <wx/wx.h> and
+ that was slowing down compiling. Moved that stuff back into richio.h where
+ it came from.
+ * Enhanced IO_ERROR to format an errorText.
+ * Added THROW_IO_ERROR() and THROW_PARSE_ERROR() macros to capture the
+ the call site of the thrower. If you have problems compiling, it is probably
+ due to the definition of __LOC__ in richio.h. Some compilers may not support
+ __func__ in C++ yet. Find a macro that identifies your compiler, and we can
+ work out something in the #define of __LOC__.
+
+2010-Dec-28 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++new:
+ Completed most of /new class LIB_TABLE.
+ Completed all of /new class LPID.
+++common:
+ Tricked xnode.h into not issuing deprecation warnings.
+++richio:
+ * Added support of DSNLEXER( LINE_READER* ) to TokenList2DsnLexer.cmake, which
+ allows the chaining of different grammars on top of a common LINE_READER.
+ * Changed OUTPUT_FORMATTER::Quoted() to return a std::string and not modify
+ its input parameter.
+
+
+2010-dec-21 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++all
+ * Doxygen comment warning fixes.
+ * Coding policy fixes.
+++common
+ * Add clone method to EDA_ITEM object.
+++EESchema
+ * Replace GenCopy() method with Clone() in all items derived from SCH_ITEM.
+ * Simplify repeat last schematic item with new Clone() method.
+ * Simplify duplicate schematic item method with new Clone() method.
+ * Separate objects in sch_items.h/cpp into separate files per object.
+
+
+2010-dec-20, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+common:
+ Rename EDA_Rect::Inside to EDA_Rect::Contains
+ ( EDA_Rect::Inside( const EDA_Rect& aRect ) was very ambiguous )
+ Fix some Doxygen warnings and erroneous comments
+
+
+2010-Dec-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++new:
+ Completed a good portion of /new class DIR_LIB_SOURCE.
+ Added an autonomous CMakeLists.txt file to /new, with new-docs target and
+ test program target.
+
+2010-dec-15, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Gerbview:
+ Added: in file dialog, multiple file selection.
+ Added: Draw mode selector (in left toolbar):
+ Raw mode:
+ a Gerber image is drawn on screen without buffering.
+ Artifacts happen if there are negative items drawn, if more than one
+ Gerber file is shown.
+ Stacked mode:
+ each Geber image is drawn in a buffer and after drawn on screen
+ No artifact with negative items.
+ Each Gerber image covers previous images.
+ OR mode (transparency mode):
+ each Geber image is drawn in a buffer and after drawn on screen
+ No artifact with negative items.
+ Each Gerber image is "ORed" with previous images, like in Pcbnew.
+ Try to optimize Draw function in buffered modes.
+ (Useful for PC that have problems with "blit" graphic function)
+ Fix minor issues.
+
+2010-dec-13 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ * Remove deprecated options and quoted project name option in Doxygen file.
+ * Make Bazaar ignore the files generated by Doxygen in the new folder.
+++EESchema
+ * More schematic component encapsulation work.
+ * Doxygen comment fixes.
+
+
+2010-Dec-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema:
+ Committed a new design for a "Distributed Library System".
+ To make the html docs, run doxygen in <kicad_base>/new with that as your
+ current working directory, or run the shell script in there. You need
+ Doxygen installed.
+
+
+2010-dec-13 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++common
+ * Make base marker hit test method const.
+++EESchema
+ * Improve hit testing for schematic components.
+ * Add initial support for hit test filtering.
+ * Moved static function CountConnectedItems() into SCH_SCREEN object.
+ * Add IsConnected() method to SCH_ITEM object.
+
+
+2010-dec-10 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Make a whole bunch of object methods const in order to make HitTest() const.
+ * Lots of coding policy fixes.
+++common
+ * Add Inside override to EDA_Rect to test if another EDA_Rect is inside.
+ * Add additional parameter to EDA_TextStruct GetTextBox method to support
+ Y axis inversion and non-default thickness.
+ * Add accuracy parameter to EDA_TextStruct TextHitTest method.
+++EESchema
+ * Refactor schematic object hit testing to provide coherent object interface.
+ * Remove redundant GetBoundaryBox from schematic component object.
+ * Remove redundant layer member from schematic text object.
+ * Create hit test override to check for rectangle intersection and
+ containment.
+ * Simplify schematic block selection hit testing.
+ * Make schematic and component library object enum naming consistent.
+
+
+2010-dec-08 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++All
+ * Coding policy object naming and formating fixes.
+++GerbView
+ * Fix compiler warnings.
+++Common
+ * Change item list type from SCH_ITEM to EDA_BaseStruct in BASE_SCREEN
+ object.
+ * Encapsulate BASE_SCREEN drawing item list member.
+ * Change grid container from wxWidgets to standard C++ container.
+
+
+2010-dec-07 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Finish encapsulating LIB_FIELD object.
+ * Encapsulated all members currently in use in LIB_PIN object.
+++Common
+ * Add SetModified() helper to EDA_BaseStruct object that checks for a parent
+ object and sets it's modified status as well.
+
+
+2010-dec-02 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Move color configuration dialog to dialogs folder.
+ * Simplify color configuration dialog design, remove enable grid checkbox( I
+ think we have enough places to do this), and remove abbreviated labels.
+ * Restore changing value field behavior to create new component from the
+ current one and handle all of the potential library naming conflict issues.
+ * Create a toolbar button perform the same function as renaming the value
+ field for improved usability.
+ * Add new copy component bitmap contributed by Jean-Pierre Charras.
+
+
+2010-dec-02, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Pcbnew:
+ For zone filling algo, change the default polygon library from Kbool to Boost::polygon.
+
+
+2010-dec-01, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Gerbview:
+ Added support for complex definitions of parameters in aperture macros and primitives macro
+ (a complex definition in a parameter that is calculated by an arithmetical expression)
+ Gerbview should now have a decent support of Gerber language.
+ Currently only the obscure knockout command is not supported (I have no motivation to do that)
+ Other "bug":
+ scale in A and B axis is poorly supported: coordinates are scaled, but shapes can have problem:
+ fro instance, a circle is drawn as a circle when A and B scales are different,
+ and perhaps should be an ellipse.
+ On the other hand, Gerber doc is not clear about the meaning of A and B scale.
+ (Alas! Gerber doc is not clear about most of advanced commands)
+
+
+2010-nov-19 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Move library new component and schematic edit sheet dialogs to dialogs
+ folder.
+ * Set library new component and schematic edit sheet dialogs default button.
+ * Create wxFormBuilder version of edit sheet label dialog and remove hand
+ coded version.
+ * More coding policy fixes.
+
+
+2010-nov-19 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Move library dimension, schematic configuration, and schematic options
+ dialogs to dialogs folder.
+ * Set library dimension, schematic configuration, and schematic options
+ dialogs default button to OK button.
+ * Kicad coding policy clean ups.
+
+
+2010-nov-17 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Move library text edit, library draw item edit, SVG print, and BOM dialogs
+ to dialogs folder.
+ * Rename library text edit dialog file and object names to comply with
+ coding policy.
+ * Set default button in library text edit, library draw item edit, SVG print,
+ and BOM dialogs.
+ * Move BOM dialog code into BOM dialog object source file.
+
+
+2010-nov-11 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Make schematic object file naming consistent.
+ * Move annotate dialog to dialogs subdirectory and set the "Annotation"
+ button as the default.
+ * Move ERC dialog to dialogs subdirectory and set the "Test Erc" button
+ as the default.
+ * Move the print dialog to dialogs subdirectory and set the "Print" button
+ as the default.
+ * Create print dialog header and move the OnPrint() method into
+ schframe.cpp.
+
+
+2010-nov-10 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Header file rationalization.
+ * Move schematic object load code into the appropriate schematic object.
+
+
+2010-nov-3 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++common
+ * Initial ground work for using Boost container for storing draw items
+ instead of internal linked list.
+++EESchema
+ * Move tests for dangling end code back into schematic objects.
+ * Add clear draw object state helper to SCH_SCREEN object.
+ * Add support for schematic objects to keep temporary list of connection
+ objects for dangling end and other connection related tests.
+ * Rearrange schematic label object code.
+ * Remove duplicate error message boxes when loading schematic items.
+
+
+2010-oct-28, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+PolyLine.cpp:
+ remove unused method CPolyLine::TestPointInsideContour() which was a duplicate of
+ TestPointInsidePolygon().
+ In CPolyLine::TestPointInside(); replace curious algo (which have a problem)
+ to test a point inside a polygon by TestPointInsidePolygon()
+++Pcbnew:
+ fix a bug in Drc and clearance calculations when using a dummy pad
+ ( in zones calcualtions and to test holes ot tracks and holes to pads DRC).
+
+2010-oct-26 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Change screen list object array type from wxARRAY to std::vector.
+ * Move all SCH_SCREEN methods into file class_sch_screen.cpp.
+ * Move find dialog files to dialogs sub-directory.
+ * Remove hallucinatory save and restore methods I wrote from component
+ library draw objects.
+ * Merge external TstAlignSegment function to SCH_LINE::MergeOverlap method.
+ * Move save schematic method to files-io.cpp and remove empty file
+ save_schemas.cpp.
+++include
+ * Remove unused internal link list next and back methods from base screen
+ object.
+
+
+2010-oct-25 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema
+ * Remove common library component and alias base class CMP_LIB_ENTRY.
+ * Derive LIB_COMPONENT and LIB_ALIAS directly from EDA_BaseStruct.
+ * Encapsulate most library draw item object members.
+ * Make most library draw item get methods constant.
+ * Merge two edit component properties methods into a single method.
+ * Update double click left mouse button to use merged edit component
+ properties method.
+ * Set schematic find dialog find button as default button.
+++include
+ * Add in-line flag state helpers to EDA_BaseStruct.
+
+
+2010-oct-22 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ Component library editor bug fixes and other minor fixes.
+ * Fix bug that prevented component from being replaced in library when
+ the component root name was changed.
+ * Fix drawing bug when changing text or field item string while move in
+ progress.
+ * Fix drawing bug when rotating text item while move in progress.
+ * Prevent undo or redo when editing a component draw item.
+ * Fix assert bug when replacing component in library when the component
+ root name was changed.
+ * Fix bug in field editor caused by new root alias implementation that
+ prevented any field from being changed.
+ * Fix minor spacing issues with EESchema find dialog.
+ * Deprecate remaining internal linked list code from component library
+ objects.
+ * Rename pin object files to match new library object file naming
+ scheme.
+ * Move LIB_TEXT object definition into it's own header file.
+
+2010-Oct-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++richio:
+ LINE_READERs will now allocate a smaller initial size buffer, say 5000 bytes,
+ and then resize their buffers up to some provided maximum, after which an
+ exception is thrown should a line exceed that maximum line length.
+
+
+2010-oct-15, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++gerbview:
+ Added support for gerber commands:
+ SR (Step and Repeat)
+ multiple MOIN and/or MOMM in file (switch units from inch to mm and mm to inch)
+
+2010-oct-09, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++gerbview:
+ Fixed some issues:
+ Now aperture macro with parameters works.
+ Note: complex parameters (like $1 + 4) are not supported
+
+ other commands not yet supported:
+ SF (scale factors)
+ Offsets (image and layer)
+ Rotations (image and layer)
+ Axis definition
+ Mirroring
+ SR (Step and repeat)
+ KO
+
+2010-Oct-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++richio:
+ * LINE_READER now has a GetSource() function which is used in error
+ reporting. This is typically the name of the file which is supplying the
+ lines of text, or string "clipboard" if the text is coming from the clipboard.
+ Derived classes FILE_LINE_READER and STRING_LINE_READER's constructors both
+ need an additional parameter which identifies the source.
+ * FILE_LINE_READER now owns the source FILE and will close it in its destructor.
+ This resulted in the removal of several fclose() statements that had been
+ there to close a file associated with a FILE_LINE_READER.
+ * DSNLEXER now supports an internal LINE_READER* stack which is used to handle
+ nested s-expression files, with the ability to resume from the proper place
+ in the containing file. There is now PushReader() and PopReader() functions
+ in DSNLEXER to handle this. No protection is provided against circular
+ inclusions, but this could be done by searching the stack and comparing
+ GetSource() values for anything already on the stack before pushing.
+ Each s-expression grammar is free to define one or more keywords that cause
+ nesting to occur. That policy choice is not part of DSNLEXER's job.
+ One example might be:
+ (inherit (footprint library_uri ftprintname))
+
+2010-oct-04 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ Initial work on new component library stucture.
+ * Use C++ map in component library instead of boost::ptr_vector.
+ * Drop Boost pointer containers for standard C++ containers.
+ * Moved duplicate name user interface elements from library object to
+ library editor.
+ * Added code to support direct addition and replacement of component
+ alias objects into libraries.
+ * Removed temporary strings used to add and remove alias objects.
+ * Libraries only store alias objects, components now accessed thru alias.
+ * Simplify library API for adding, removing, and replacing components.
+ * Updated edit component in library dialog and library editor to reflect
+ component library object changes.
+ * Fixed bug in library viewer when displaying alias name.
+ * Made a few header files compile stand alone per the new coding policy.
+ * Remove some dead code and the usual code formatting fixes.
+
+
+2010-oct-03, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++gerbview:
+ finished Draw functions for aperture macros.
+ Now aperture macros are draww correctly.
+ Known bug: aperture macros having parameters are incorrect: parameters are not transmited correctly.
+ Work still in progress.
+
+2010-sept-28, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++gerbview:
+ Important changes:
+ graphic functions rewritten.
+ graphics items are now specific to gerbview (added a GERBER_DRAW_ITEM class)
+ and do not use tracks from pcbnew.
+ The way used to draw them is also new.
+ Apertures are now correctly drawn for round, oval, rectangular and regular polygon shapes
+ (with or without holes)
+ Aperture definition type Polygon is not yet handle.
+ Polygons are correctly drawn.
+ TODO:
+ Draw functions for aperture macros.
+ Work in progress.
+
+
+2010-Aug-9 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++CMakeModules:
+ Revise TokenList2DsnLexer.cmake to take outCppFile and outHeaderFile optinally
+ and enum mandatorily. Standardize the script's invocation technique within
+ all the CMakeLists.txt files.
+
+2010-Aug-8 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++CMakeModules:
+ Revise TokenList2DsnLexer.cmake to make an entire derived lexer class that
+ returns the proper enum type for superior debugging.
+++eeschema
+ * netform.cpp now outputs the allowed footprint filters for a given library
+ component.
+ * There is an auto-generated class called NETLIST_LEXER which is defined in
+ from netlist.keywords by TokenList2DsnLexer.cmake into netlist_lexer.h, that
+ may be the basis of loading a S-expression form of the generic netlist format
+ which is written from netform.cpp.
+
+
+2010-Aug-7 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++common
+ * add xnode.cpp and xnode.h which can be used to output either an XML or
+ S-expression document file.
+ * Add class STREAM_OUTPUTFORMATTER which is a richio class which can write
+ to any of the wxOutputStream derivatives, such as file, socket, zip, tar.
+ * Added netlist.keywords
+++eeschema
+ * netform.cpp can now output S-expression OK, although I have it commented out
+ pending the addition of a UI for it.
+
+
+2010-Aug-4 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema netform.cpp:
+ * Finish up first working version of the XML export.
+
+2010-Aug-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema netlist.cpp and netform.cpp:
+ * Found several speed optimizations in the netlist export code.
+ * Now sort the pins properly if they have pin numbers like A1 and A10,
+ i.e. alphanumerics in them.
+
+
+2010-Jul-30 & 31 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema:
+ * Now link with XML support within wxWidgets.
+ * Export the generic netlist in XML. Only the libpart elements are missing now.
+ Still need to rework the chain loaded netlist plugin, but may do that in XSL.
+ * OBJ_CMP_TO_LIST class now uses a std::string to hold the 8 bit string m_Ref,
+ but hides this behind accessors which provide for both Unicode and 8 bit
+ set and get functions.
+ * build_BOM.cpp retains the selected filename on subsequent runs as a default.
+ * Code cleaning, especially in build_BOM.cpp.
+
+
+2010-jul-27, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++all:
+ Updated boost to version 1.44
+ Added boost::polygon (experimental)
+++pcbnew:
+ Added experimental zone fill calculations with boost::polygon
+ old file zones_convert_brd_items_to_polygons.cpp has now 2 versions:
+ zones_convert_brd_items_to_polygons_with_Boost.cpp use boost::polygon to calculate filled areas
+ zones_convert_brd_items_to_polygons_with_BKbool.cpp use kbool (code cleaned).
+
+ >>> to use boost polygon version:
+ call cmake with option: -DUSE_BOOST_POLYGON_LIBRARY=ON
+
+2010-jul-12, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew:
+ Added grid origin patch from Lorenzo Marcantonio.
+ Converted set grid dialog from DialogBlocks to wxFormBuilder,
+ and added in this dialog the grid origin parameters settings.
+
+2010-jun-24 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+++EESchema component library and hierarchical sheet label object improvements.
+ * Continue component library class clean up and encapsulation work.
+ * Change hierarchical sheet label container to boost::vector_ptr.
+ * Encapsulate hierarchical label handling in hierarchical sheet class.
+ * Convert some missed occurrences of wxString::GetData() to GetChars( wxString ).
+ * Fix some minor code formatting issues.
+
+2010-jun-23, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++eeschema:
+ In netlist generation, changed the rule to calculate netnames of nets with labels:
+ Previously, named nets (i.e. nets with local, hierarchical or global labels) have their name
+ defined by the first label found in list.
+ So net names could be changed without really changing the schematic.
+ Now the names are calculated from the rules (by priority order) :
+ 1 - use the most top level labels in hierarchies.
+ 2 - use global labels first, local labels next (hidden power pins names are global labels).
+ 3 - use alphabetic sort (so, if GND and AGND are connected, the net will be always named AGND,
+ and adding a VSS connection cannot change the net name)
+ So power nets and nets that have more than one label cannot have their netname changed
+ if there is no actual change relative to these nets names in schematic
+
+
+2010-Jun-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++eeschema:
+ Added "template fieldnames" to eeschema. Thanks to
+ Brian Sidebotham <brian.sidebotham@gmail.com> for the origins of this patch.
+ https://lists.launchpad.net/kicad-developers/msg04828.html
+
+ A template fieldnames are a list of template elements
+ consisting of {name, value, visibility} which you want shown in the eeschema
+ component fieldname (property) editors (both schematic and library versions
+ of the editors). Template fieldnames are forced into the editors'
+ presentation of the fields even though those fields may not exist in the
+ component. Entering a non-blank value while in a field editor will cause the
+ field & value to be retained in the component. Therefore it is unusual to
+ provide a non-blank '.value' in a template, because a trip through the field
+ editor will invariably add that field to the component since the template
+ being applied has initially a non blank 'value'. The current template editor
+ is only going to last about a week and it does not support adding non-blank
+ template values yet, nor visibility control, only field '.name'. But the
+ template fieldnames configuration storage and component field editors do
+ know how to handle template.visible and template.value already, in addition
+ to template.name. See the file .eeschema in your home directory for the
+ configuration storage, keyword: FieldNames. e.g. only field Manufacturer has
+ a '.value':
+
+ FieldNames=(templatefields (field (name "Manufacturer")(value "IBM 12")) (field (name "Vendor")) (field (name "Installed")) (field (name "Ralphy") visible))
+
+ DSNLEXER is used to parse the FieldNames record, & OUTPUTFORMATTER to generate it.
+
+
+2010-jun-15, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+bitmap2component:
+ Use wxWidgets.
+ Better user interface
+ More bitmaps file format import (from wxWidgets)
+ This tool does not use Kicad classes. So it can be hacked by guys who do not know kicad sources.
+
+2010-jun-10, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Added an experimental tool (bitmap2component) to create logos from .bmp bitmaps. Added Potrace library to convert bitmaps to polygons
+ This tool uses potarce library that converts a bitmap picture (.bmp or .pgm format) to a set of polygons.
+ bitmap2component converts a bitmap to a .emp footprint (that can be imported by modedit) or a .lib component that can be
+ imported by libedit.
+ Note: imported bitmaps logos are vectored by potrace, so there is no pixelation effect.
+ Scale is 1:1 for 300ppi pictures.
+ bitmap2component currently runs only is command line mode
+ run
+ bitmap2component bitmapfile.bmp bitmapfile.lib 1 to create a schematic component logo
+ (import this file using libedit)
+ or
+ bitmap2component bitmapfile.bmp bitmapfile.emp 1 to create a footprint logo
+ (import this file using modedit)
+
+
+2010-may-18, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All:
+ Set minimum cmake version requirement to 2.6.4
+ (does not works with 2.6.1)
+++Pcbnew, Module Editor:
+ Added footprint name edition in the module properties dialog.
+ Until now, the footprint name used to retrieve a footprint in lib was
+ set only when saving the footprint in lib, and could not be edited without saving
+ the footprint in lib.
+
+2010-may-01, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Board and footprint editors:
+ Auto update 3D display after footprint or board edition.
+ (board or footprint is reloaded only when the 3D frame is reactivated, so
+ no extra time is needed during edition)
+
+2010-apr-29, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Fixed a crash that happens sometimes when opening the design rule dialog.
+ (due to the sorting function by netclass then by netname)
+ The sorting by netclass then by netname is now working well.
+
+
+2010-apr-23, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Fixed minor problems.
+ Changed French word COTATION to DIMENSION in class COTATION (now class DIMENSION)
+
+2010-apr-22, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew+Gerbview:
+ Fixed minor problems in printing.
+
+2010-apr-19, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ * Added VRML export, from the patch sent by Lorenzo Marcantonio ( october 2009, 11)
+ * Fixed :
+ options to control vrml export.
+ flipped footprints
+ * Tested using Cortona and Blender.
+
+ Needs more testing and refinements
+
+2010-apr-16, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Cvpcb:
+ Fixed a bug in footprint display frame (coordinates not displayed). Windows only.
+ Added right toolbar to select display options
+ Can now read netlists using UTF8 encoding.
+ Convert dialog_display_option from DialogBlocks to wxFormBuilder
+++Pcbnew:
+ Fixed a very minor bug.
+Cvpcb+Pcbnew:
+ Code cleanup in read netlist functions: use now FILE_LINE_READER.
+
+2010-Apr-12 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all:
+ Switched the source code repository from subversion at sourceforge.net to
+ launchpad using bazaar.
+
+
+2010-apr-08, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Drc: take in account the clearance "local parameters" for pads that have local parameters.
+ Until now, only NETCLASS clearance values were used.
+ (local parameters are used in zone filling)
+ But because a pad (or a footprint) can have a specific clearance value
+ Drc used now this value, and NETCLASS value only if no local value specified.
+
+2010-mar-31, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew
+ Fixed an issue in GERBER file creation, under Vista and W7 only for non administrator users
+ Plot files were 0 byte length.
+ This was due to use of function tmpfile() in a GERBER function
+ to create a temporary file that seems not working using mingw.
+ Replaced by more usual files functions.
+
+2010-mar-29, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew
+ enhancements in printing or plot in SVG format:
+ When printing technical layers, pads on solder mask or solder paste layers
+ where printed in sketch mode.
+ Now they are printed as solid shapes, with dimensions according to
+ solder paste or solder mask clearances.
+
+
+2010-mar-18 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Eeschema
+ Some bugs fixed
+ Starting enhancements in Libedit: menubar and commands to "plot"
+ current component in PNG or SVF file (SVG file not fully working, must be refined)
+
+2010-mar-13 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ All:
+ Stable verion for kicad release
+
+2010-mar-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Pcbnew:
+ Added (see dialog_layers_setup.cpp) compilation options to
+ -hide non active copper layers
+ -show inner layers in same order than the layer manager
+ Currently these options are 2 define
+ HIDE_INACTIVE_LAYERS
+ // if defined, displays only active copper layers
+ // if not displays always 1=the full set (16 layers)
+ USE_LAYER_MANAGER_COPPER_LAYERS_ORDER
+ //if defined, used the layer manager copper layers order
+ // (from FRONT to BACK) to display inner layers.
+ // if not, use the default order (from BACK to FRONT)
+
+ Currently not active, can be changed if the correponding lines are uncommented in dialog_layers_setup.cpp
+
+2010-Mar-3 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++common
+ * DSNLEXER now owns an abstract LINE_READER by pointer so that polymorphism
+ can be used in alternative LINE_READERS.
+ * Write FILE_LINE_READER and STRING_LINE_READER. The latter can be used
+ to parse text coming from the clipboard or other string source.
+
+
+2010-Feb-20 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++common
+ DSNLEXER now supports:
+ 1) nested quotes. This is in anticipation of broader usage of the
+ file type/syntax. A string like this in the file:
+ "my ""favorate"" string"
+ can be returned as
+ my "favorite" string
+ 2) CommentsAsTokens is implemented, so you can ask the lexer to return
+ comments as tokens, so they can be preserved. The default is to ignore
+ them. A comment is defined as any line that has # as its first
+ non-blank character. (This means comments cannot follow anything else
+ on a line.)
+
+
+2010-Feb-19 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+kicad: fixing an annoying problem:
+ * Building the tree project can be *very* long if there are a lot of subdirectories
+ * in the working directory.
+ * Unfornately, this happens easily if the project file *.pro is in the home directory
+ * So the tree project is built "on demand":
+ * First the tree is built from the current directory and shows files and subdirs.
+ * > First level subdirs trees are built (i.e subdirs contents are not read)
+ * > When expanding a subdir, each subdir content is read,
+ * and the corresponding sub tree is populated on the fly.
+
+
+2010-Feb-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+kicad:
+ * Building the tree project can be *very* long if there are a lot of
+ * subdirectories in the working directory.
+ * Unfornately, this happens easily if the project file *.pro
+ * is in the home directory
+ * when subdirs are not loaded, double click on a directory to load its files and subdirs
+ * #define ADD_FILES_IN_SUBDIRS was used until now.
+ * It is now commented, so one must double click on a subdir name to load its files
+ * See treeprj_frme.cpp for more info
+
+2010-Feb-17 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Eeschema, libedit: fixed last problems when editing alias info.
+ Now alias changes can be undone, and are correctly updated in lib
+ when updating the current edited component in memory
+ New code could be a good starting point to store all aliases info in the
+ root component,
+ and also easily store it to the *.lib files and remove the .dcm associated files
+ (most of code is done)
+
+
+2010-Feb-14 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Eeschema, libedit: fixed add/remove alias functions, broken
+All: added in popup menus hotkeys info for zoom commands
+
+
+2010-Feb-14 UPDATE Jerry Jacobs <xor.gate.engineering[at]gmail[dot]com>
+================================================================================
+++ KiCad
+ Check if project is noname.pro so we don't get a error if kicad is first run.
+ Removed double separator in file menu.
+ Moved recent project to submenu in Open recent.
+
+++ Common
+ Added CTest/CDash support file
+ Moved helper tool to helper subdirectory
+
+++ OSX
+ Update compiling doc
+
+2010-Feb-07 UPDATE Vesa Solonen <vesa.solonen@hut.fi>
+================================================================================
+++ all:
+ Finnish translation, take one.
+
+2010-Feb-04 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ gerbview:
+ Use layer_widget to manage gerber layers colors and visibility.
+
+2010-Jan-31 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ pcbnew:
+ More about work on color selection and items visibility:
+ removed global variables and a lot of redundancies
+ Now Modedit does not uses the visiblity options of the board editor
+ (That can create a problem if hide modules is activated)
+ work in progress but almost finished
+
+
+2010-Jan-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ pcbnew:
+ More about work on color selection and items visibility
+ work in progress
+
+2010-Jan-29 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+ ++ All:
+ added a test to solve a problem when cross compiling Kicad under Linux for Windows
+ Specific to countries that use a comma as separators in floating point numbers notation:
+ Depending on wxWideget version:
+ printed as 0,5 and read as 0.5
+ or
+ printed as 0.5 and read as 0,5
+ So float values are always broken in dialogs (many are seen as 0)
+ Now a test is made, and if there are problems relative to floats
+ (write/read conversion error),
+ use the C convention (always a point as separator)
+
+ ++ eeschema:
+ Removed metrics grid values, that cannot be handled in schematic.
+ (because 2 items are seen as connected if they have the same coordinates
+ mixing mm and mils with internal units = 1 mil break netlist
+ and ERC calculations
+ So grid value *must* be an integer (in 1/1000 inch).
+ And metric grid is not very useful in schematic.
+ (Also 1 mil and 0.025 mm can be seen as the same value for a schematic that do not
+ needs precision in dimensions, so no need to have mils and mm in grid values)
+
+++ pcbnew:
+ Starting work on color selection and items visibility
+ * code cleaning and removing global values.
+ * Separe visibility options for board editor and module editor
+ (work in progress, just starting)
+
+
+2010-Jan-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+ *fixed eeschema crash when using the hotkey m (move) command.
+* Pcbnew :added option to show/hide footprints values and/or references
+ See if show/hide footprints texts option is now always useful.
+
+2010-Jan-27 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ Pcbnew:
+ Code cleaning about visibility variables (duplicates) in draw functions.
+ Removed old color and visiblity dialog
+ work in progress
+
+2010-Jan-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ Pcbnew:
+ in variable names, change non existent word Hight to High
+ Remove redundant tool in left toolbar (option toolbar)
+ (this option is now in layers manager)
+ Show layers in horizontal combo box in same order as in layer manager.
+
+++all:
+ minor code cleaning.
+
+2010-Jan-23 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew's PCB_LAYER_WIDGET
+ Removed wxformbuilder dependency from LAYER_WIDGET, thus killing off
+ layer_widget_base.* and panel_layer_select.fbp.
+ Added aPointSize to LAYER_WIDGET constructor so it uses that font size.
+ Removed layer_widget.h from wxPcbStruct.h for faster compiles with less
+ dependencies, and this meant moving the class LYRS out of
+ class WinEDA_PcbFrame. While doing that I renamed it to PCB_LAYER_WIDGET.
+ Integration of PCB_LAYER_WIDGET into WinEDA_PcbFrame to fully support
+ the layer change logic. Added syncLayerWidget(),
+ * WinEDA_PcbFrame:
+ Added syncLayerWidget(), syncLayerBox() (via a rename), setActiveLayer(),
+ and getActiveLayer().
+ Use a font size in PCB_LAYER_WIDGET 80% of the system font size for systems
+ with screen resolution height <= 900, or 100% if not. See WinEDA_PcbFrame
+ constructor.
+ * See TODO.txt for more things that need to be done.
+
+
+2010-Jan-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++ Pcbnew:
+ Update Layer manager display when changing active layer (from hotkey or menus)
+ fixed minor problems and fixed Layer Alignment Target bug.
+
+2010-Jan-22 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Minor fixes and code cleaning.
+
+* Remove redundant background redrawing RedrawActiveWindow.
+* Remove redundant managed cursor callback in RedrawActiveWindow.
+* Use refresh to redraw instead of directly calling RedrawActiveWindow.
+* Remove unused SetDrawBgColor for drawframe.cpp.
+* Fix compiler warning in cvpcb/cvframe.cpp.
+* Fix menu spelling and syntax errors in pcbnew.
+* Rename Trace_Curseur to DrawCursor in common/drawpanel.cpp.
+
+2010-Jan-21 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++pcbnew
+ Integration of LAYER_WIDGET into WinEDA_PcbFrame. See
+ TODO.txt for more things that need to be done.
+
+
+2010-Jan-17 UPDATE Jerry Jacobs <xor.gate.engineering[at]gmail[dot]com>
+================================================================================
+More work to make kicad more Mac OS X compliant.
+* Workaround for wxAboutDialog bug.
+* WXMAC needs wxID_EXIT to make closing the application function properly.
+* Workaround for hotkeys, on Mac OS X we can't use Fx keys.
+ This needs to be further implemented and is a work in progress.
+ We need to modify the hotkey code to display Mac OS X the
+ special modifier keys in the hotkey list.
+
+
+2010-Jan-18 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++any
+ Finished up complete implementation of class LAYER_WIDGET and am now ready to
+ integrate it into PCBNEW. This class was kept as general as possible by
+ omitting as many Kicad document structures as possible, and so can be used
+ in GERBVIEW. For GERBVIEW it could benefit from some minor additional
+ work such as a "move up" function for layer order changes. This is a matter
+ of rearranging wxWindows within the m_LayersFlexGridSizer.
+ Integration into PCBNEW should be done in just a few days.
+
+
+2010-Jan-17 UPDATE Jerry Jacobs <xor.gate.engineering[at]gmail[dot]com>
+================================================================================
++ EESchema
+ + Added Torsten Huter's patch for hotkeys
+ + Moved recent opened documents to submenu
+
++ Pcbnew
+ + Big (re)organisation of pcbframe menubar and cleanup
+
+2010-Jan-13 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+Minor bug fixes, compiler warning fixes and code cleaning.
+
+* Fix debug asserts when passing NULL pointers to wxAuiPaneInfo.
+* Fix Kicad main window sash sizer bug when using wxAui.
+* Remove specctra_test from Visual Studio builds to prevent build errors.
+* Add WIN32 to layer widget test so it will build properly on Visual Studio.
+* Fixed compiler conversion warnings in PCBNew.
+* Fixed worksheet print scaling in PCBNew.
+* Minor code renaming.
+
+2010-Jan-12 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++All
+ Use wxAutoBufferedPaintDC in OnPaint event
+ Seems solves slow grid redraw on some PC (tested under Window 7)
+ and is faster than use wxPaintDC, not buffered
+ (note MACOSX has natively a double buffer, so no change for MACOSX)
+
+2010-Jan-08 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++Gerbview
+ Added support of arcs in polygons outlines.
+ Needed to show copper areas in some gerber files
+ Not fully tested but works better than without this support...
+
+
+2010-Jan-03 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ - fixed a potential bug in a fill zone function: AddClearanceAreasPolygonsToPolysList()
+ - Try to fix a problem with AddClearanceAreasPolygonsToPolysList() under Window Vista and Window 7
+ This is perhaps a problem in kbool library
+ (a bug in Bool_Engine destructor ?)
+ It happens when:
+ - a lot of polygon corners are added in group A
+ - nothing in group B
+ - No operation asked in kbool engine ( that also has a bug if an operation is asked
+ with no polygon in group B)
+ - and call the Bool_Engine destructor.
+ Could be a stack error or overflow, very hard to locate and debug.
+ - Under Vista seems create always a crash.
+ - Under Window 7 sometimes create a crash.
+ - No problem under XP and Linux.
+ -Workaround:
+ Leave the group A void if group B is void.
+ I am not sure this change fix the problem.
+ Just it solves this problem with 2 samples boards that crash Pcbnew without this change.
+
+2010-Jan-01 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+++pcbnew
+ Rewrite plot dialog using wxDialogBlocks.
+ Display layers list according to the Setup layers dialog order.
+++Gerbview
+ Write Gerbview plot dialog using wxDialogBlocks.
+ Do not use anymore the Pcbnew one.
+
diff --git a/Documentation/changelogs/CHANGELOG-2011.txt b/Documentation/changelogs/CHANGELOG-2011.txt
new file mode 100644
index 0000000..fc3e1e6
--- /dev/null
+++ b/Documentation/changelogs/CHANGELOG-2011.txt
@@ -0,0 +1,297 @@
+KiCad ChangeLog 2011
+====================
+
+Please add newer entries at the top, list the date and your name with
+email address.
+
+
+2011-Dec-19, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Pcbnew:
+ Enhanced algorithms to calculate board connections:
+ - A track is seen connected to a pad if the track end is inside the pad shape.
+ - Pads inside pads are now seen connected, if the center of the pad is
+ *inside* the other pad.
+ (this is made to be sure a large copper area is shared by the 2 pads,
+ and to keep algorithm fast).
+ Algorithm to calculate pads connections is still very fast.
+ However some other functions (drag pads, track len calculation ...)
+ still need the track end exactly on the pad position.
+
+
+2011-Dec-13 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++common
+ * changed all the RotatePoint() functions in trigo.{h,cpp} to take a double as the
+ angle, which is still in tenths of degrees for now.
+ * EDA_TEXT::m_Orient is now double, still in tenths of degrees (for a short while),
+ but the double means parsing files and saving them use a different format string.
+++pcbnew
+ * DRAWSEGMENT::GetStart() and GetEnd() do not operate for S_ARC like they used to.
+ They are now simply accessors for m_Start and m_End. Use DRAWSEGMENT::GetArcStart()
+ and GetArcEnd() and GetCenter() for arcs. specctra_export.cpp was the only
+ source file dependent on the old behavior.
+ * DIMENSION::m_Text is now contained, not dynamically allocated.
+ * more kicad_plugin work.
+
+
+2011-Dec-9 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++PCBNew
+ * added BOARD::GetPad(int), made BOARD::m_NetInfo private, and contained
+ within the BOARD, not dynamically allocated and owned via pointer.
+ * added BOARD::GetPadCount()
+ * changed NETINFO_LIST::GetCount() to GetNetCount()
+ * added BOARD::GetNetCount()
+ * more kicad_plugin work.
+
+2011-Dec-5 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++PCBNew
+ * Removed Pcb_Frame argument from BOARD() constructor, since it precludes
+ having a BOARD being edited by more than one editor, it was a bad design.
+ And this meant removing m_PcbFrame from BOARD.
+ * removed BOARD::SetWindowFrame(), since BOARD::m_PcbFrame gone.
+ * Removed the global BOARD_DESIGN_SETTINGS which was in class_board.cpp
+ * Added BOARD_DESIGN_SETTINGS to the BOARD class, a full instance
+ * A couple of dialogs now only change BOARD_DESIGN_SETTINGS when OK is pressed,
+ such as dialog_mask_clearance, dialog_drc, etc.
+ * Removed common/pcbcommon.cpp's int g_CurrentVersionPCB = 1 and replaced it
+ with build_version.h's #define BOARD_FILE_VERSION, although there may be a
+ better place for this constant.
+ * Made the public functions in PARAM_CFG_ARRAY be type const.
+ void SaveParam(..) const and void ReadParam(..) const
+ * PARAM_CFG_BASE now has virtual destructor since we have various ways of
+ destroying the derived classes and boost::ptr_vector must be told about this.
+ * Pass const PARAM_CFG_ARRAY& instead of PARAM_CFG_ARRAY so that we can use
+ an automatic PARAM_CFG_ARRAY which is on the stack.
+ * PCB_EDIT_FRAME::GetProjectFileParameters() may no longer cache the array,
+ since it has to access the current BOARD and the BOARD can change.
+ Remember BOARD_DESIGN_SETTINGS are now in the BOARD.
+ * Made the m_BoundingBox member private, this was a brutally hard task,
+ and indicative of the lack of commitment to accessors and object oriented
+ design on the part of KiCad developers. We must do better.
+ Added BOARD::GetBoundingBox, SetBoundingBox(), ComputeBoundingBox().
+ * Added PCB_BASE_FRAME::GetBoardBoundingBox() which calls BOARD::ComputeBoundingBox()
+
+
+2011-Dec-04, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Pcbnew:
+ Enhanced algorithms to calculate board connections:
+ Previously, a track was seen connected to a pad only if the track end is
+ exactly on the pad position.
+ Now a track is seen connected to a pad if the track end is inside the pad shape.
+ Algorithm to calculate pads connections to track is still very fast.
+ However some other functions (drag pads, track len calculation ...)
+ still need the track end exactly on the pad position.
+
+2011-Nov-27 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++PCBNew
+ * Add PLUGIN and IO_MGR classes.
+ * Remove one argument from BOARD constructor,
+ * add BOARD::SetWindowFrame()
+
+2011-sept-13 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ PCBNew locate code refactoring.
+
+ * Move various locate functions into the appropriate board item object.
+ * Unified best zoom for all frames derived from PCB_BASE_FRAME.
+ * Remove track.cpp as it is no longer needed.
+ * Dead code removal.
+ * Remove scary frame window pointer member from board item objects.
+ * Add draw bounding box to gerber draw item for debugging purposes.
+
+2012-Sept-8 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all
+ * Write an automatic bitmap generation script in cmake, PNG2cpp.cmake
+ * Write an infrastructure generate *.png files from inkscape files, and do
+ it maintaing the "as needed" change detection support.
+ * Support an *.SVG maintainer mode, AND an *.SVG user mode.
+ * Engineer a seemless switchover from old style xpm files, with minimal
+ impact to system wide source code.
+
+2011-Sept-07, UPDATE Andrey Fedorushkov <andrf@mail.ru>
+================================================================================
+Pcbnew:
+ Add hotkey "P" - place item
+ Add Roman Bashkov patch for record/play sequence hotkey macros
+ Add record and play macros for sequence hotkey.
+ Macros set to numeric key 0..9:
+ <Ctrl>+<numkey> - start record macros
+ <hotkey> <mouse move> ... <hotkey>|<mouse place>
+ <Ctrl>+<numkey> - end record macros
+ <numkey> - play macros
+ Add menu save/read macros to/from xml-file
+ Add configure rotate angle for rotate module: 45 or 90 deg.
+ Fix segfault when move/drag segment if disconnected to pad
+
+2011-Sept-01, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+ Add Fabrizio Tappero <fabrizio-dot-tappero[at]gmail-dot-com> in contributors list.
+Eeschema:
+ Graphic texts ans labels: fix fully broken undo/redo code relative to the way undo/redo command
+ handles changes (maintly move) for labels
+ Fix minor bug for undo command relative to block rotate
+ Remove dead code.
+ Add new class BITMAP_BASE, and (for Eeschema) SCH_BITMAP to handle bitmap images in schematic.
+ Remember plot Bitmaps in not possble with all plotters.
+
+
+2011-Aug-19, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Pcbnew:
+ Add support for not plated through holes (NPTH) pads
+ * These NPTH pads are used for mechanical purpose only, and cannot be connected to a net.
+ * When these pads have a same size and shape for the hole and the pad, the pad is not plotted
+ in GERBER files.
+
+2011-Apr-12, UPDATE Jerry Jacobs <xor.gate.engineering@gmail.com>
+================================================================================
+Minor UI changes that affect OS X platform.
+ - Fix for opening the help contents
+ - Fix for opening files with the default editor
+ - Fix for opening PDF files
+
+Solved all with the BSD open command, for other OS'es which have X11 and
+utilities they can use the xdg-open command which I added to the pdf viewer tries
+list.
+
+Kicad projectview:
+Remove not-existing files when a empty project is created, this confuses when
+users try to open it. Show a entry that the project is empty instead of these
+void files.
+
+2011-Apr-6, UPDATE Jerry Jacobs <xor.gate.engineering@gmail.com>
+================================================================================
+Cleanup of all the menubar code to have the same style, remove the C comments.
+Make the wxMenu behave native on OSX for KiCad, CvPCB and Gerbview and remove
+unneeded ifdefs when using the wxIDs. Add a OnQuit for the gerber frame.
+Change item->SetBitmap( item ) to use macro SET_BITMAP for menu items.
+
+2011-Apr-4, UPDATE Jerry Jacobs <xor.gate.engineering@gmail.com>
+================================================================================
+More native OSX changes, this removes some WXMAC defines replaced by wxID
+macros. These are handled by wxWidgets itself and reduces in-app platform
+defines. More work needs to be done for CvPCB and Gerbview.
+
+All:
+ Hotkey names in menu's all have tabs, this looks more uniform and pretty.
+
+EESschema & PCBNew:
+ Fix about and preferences wxMenu to be more native (remove unneeded WXMAC )
+ Disable all icons in wxMenu on OSX with macro SETBITMAPS
+
+jp charras:
+ SETBITMAPS is incorrectly used here. change to SET_BITMAP
+
+2011-Mar-25 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ EESchema multiple item hit testing and other minor improvements.
+
+ * Add item clarification context menu to EESchema when multiple unresolved
+ items are found at the current cross hair position.
+ * Add collector class SCH_COLLECTOR for supporting multiple item hit testing.
+ * Removed bit wise masked filtering from schematic item hit testing.
+ * Removed all old hit testing functions and methods scattered about the
+ EESchema source code.
+ * Move terminal point test function into SCH_SCREEN object.
+ * Fixed bug in terminal point test when terminating a bus to a label.
+ * Define the < operator for sorting schematic items.
+ * Add area calculation method to EDA_Rect item.
+ * Add method for returning an item's bitmap for menu display purposes.
+ * Add method for returning an item's menu text for menu display purposes.
+ * Changed EDA_ITEMS container from boost::ptr_vector to std::vector.
+ * Factor coordinate string conversion code from EDA_DRAW_FRAME to function CoordinateToString().
+
+2011-Mar-16, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+Gerbview:
+ Added: read Excellon files created by Pcbnew.
+ The full Excellon command set is not supported, but drill files created by Pcbnew are supported.
+
+2011-Feb-05, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
+================================================================================
+CvPcb:
+ Code cleanup. Rename WinEDA_CvpcbFrame to CVPCB_MAINFRAME,
+ according to coding style policy.
+ Change in CvPcb:
+ CvPcb does not use now .dcm files, only .mod files,
+ to read modules keywords and doc
+
+
+2011-Feb-2 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++common:
+ * macros.h now has TO_UTF8() and FROM_UTF8() which are working converters
+ to and from UTF-8 encoding for any wxWidgets build mode. We can switch to
+ them at any time. I am using them now for specctra conversions and
+ elsewhere where I wanted gauranteed UTF8 encoding.
+ * added OUTPUTFORMATTER::Quoted( const wxString& ) to simplify converting
+ to UTF8 encoded s-expression atoms. The recommended technique is now simply:
+ out->Quoted( wxString ).c_str()
+
+2011-Jan-30 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all:
+ * DSNLEXER::NextTok() now uses two separate modes to parse quoted strings.
+ This gives us the freedom to control our own destiny separate from the
+ constraints put on us by the Specctra DSN spec.
+ * Added Documentation/s-expressions.txt to explain all this.
+ * Enhanced our quoting protocol by moving away from doubling up double quotes
+ to a C like escape mechanism.
+ * Now support multi-line strings, which when properly escaped, can still be
+ read in as a token originating on a single line.
+
+2011-Jan-21 UPDATE Wayne Stambaugh <stambaughw@verizon.net>
+================================================================================
+ EESchema code refactoring and coding policy naming fixes.
+
+ * Move schematic wire and bus break code into schematic screen object.
+ * Move schematic test for dangling ends into schematic screen object.
+ * Remove left over debugging output in schematic screen object.
+ * Remove unused file eeschema/cleanup.cpp.
+ * Fix bug in schematic line object hit test algorithm.
+ * Fix a string concatenation compile error added in r2752.
+ * Rename class WinEDA_BasicFrame to EDA_BASE_FRAME.
+ * Rename class WinEDA_DrawFrame to EDA_DRAW_FRAME.
+ * Rename class WinEDA_DrawPanel to EDA_DRAW_PANEL.
+
+2011-Jan-19 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all:
+ * TokenList2DsnLexer.cmake now supports comments, which start with a leading
+ # character, and may be either on their own line or on a line after a token.
+ * DSNLEXER::PopReader() now pops even the last LINE_READER* and returns it.
+++pcbnew:
+ * SPECCTRA_DB now inherits from new class SPECCTRA_LEXER, which led to a great
+ deal of simplification and code factoring.
+ * Moved specctra keywords into specctra.keywords.
+
+2011-Jan-17 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++all:
+ * TokenList2DsnLexer.cmake now wraps each token enum in its own namespace. It
+ also no longer setup of the "using" directive in the header file, which was
+ bad behavior. C++ enum values will have name collisions unless the enums
+ themselves are different namespaces.
+++new:
+ * Sweet library is now a DSO/DLL.
+ * Brought in SWIG to do a wrap of the Sweet DSO/DLL for unit testing
+ and scripting. The SWIG DSO/DLLs are built separate from the Sweet DSO/DLL
+ and are also optional.
+
+2011-Jan-1 UPDATE Dick Hollenbeck <dick@softplc.com>
+================================================================================
+++new:
+ * Added the basic structure to the Sweet parser in sch_part.cpp.
+ * Got inheritence working off of the 'extends' keyword and PART::inherit()
+ * Tossed the units support out of sweet.keywords, since we agreed to go dimensionless.
+++richio:
+ * Added the problemInputLine support to PARSE_ERROR, so UI can show the
+ offending line of bytes. Yes bytes, not even guaranteed to be characters.
+
+
diff --git a/Documentation/coding_style_policy.pdf b/Documentation/coding_style_policy.pdf
new file mode 100644
index 0000000..e9b1b32
--- /dev/null
+++ b/Documentation/coding_style_policy.pdf
Binary files differ
diff --git a/Documentation/development/Doxyfile b/Documentation/development/Doxyfile
new file mode 100644
index 0000000..37b6522
--- /dev/null
+++ b/Documentation/development/Doxyfile
@@ -0,0 +1,1780 @@
+
+# Doxyfile 1.8.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME = "KiCad Developer's Resource Documentation"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = doxygen
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields will be shown inline in the documentation
+# of the scope in which they are defined (i.e. file, namespace, or group
+# documentation), provided this scope is documented. If set to NO (the default),
+# structs, classes, and unions are shown on a separate page (for HTML and Man
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
+# their name and scope. Since this can be an expensive process and often the
+# same symbol appear multiple times in the code, doxygen keeps a cache of
+# pre-resolved symbols. If the cache is too small doxygen will become slower.
+# If the cache is too large, memory is wasted. The cache size is given by this
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE = 6
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text "
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = coding-style-policy.md \
+ stable-release-policy.md \
+ road-map.md \
+ compiling.md
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+# for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+# will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW = YES
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvantages are that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS = *.h
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# managable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
diff --git a/Documentation/development/coding-style-policy.md b/Documentation/development/coding-style-policy.md
new file mode 100644
index 0000000..2a54dc1
--- /dev/null
+++ b/Documentation/development/coding-style-policy.md
@@ -0,0 +1,800 @@
+# KiCad C++ Source Code Style Guide #
+
+Latest Publishing: February 2013
+
+First Published: September 2010
+
+written by
+
+Wayne Stambaugh \<<stambaughw@verizon.net>\>
+and
+Dick Hollenbeck \<<dick@softplc.com>\>
+
+[TOC]
+
+# 1. Introduction # {#intro}
+The purpose of this document is to provide a reference guide for KiCad
+developers about how source code should be styled and formatted in
+KiCad. It is not a comprehensive programming guide because it does not
+discuss many things such as software engineering strategies, source
+directories, existing classes, or how to internationalize text. The goal
+is to make all of the KiCad source conform to this guide.
+
+## 1.1 Why Coding Style Matters ## {#why}
+You may be thinking to yourself that using the style defined in this
+document will not make you a good programmer and you would be correct.
+Any given coding style is no substitute for experience. However, any
+experienced coder will tell that the only thing worse than looking at
+code that is not in your preferred coding style, is looking at twenty
+different coding styles that are not your preferred coding style.
+Consistency makes a) problems easier to spot, and b) looking at code for
+long periods of time more tolerable.
+
+## 1.2 Enforcement ## {#enforcement}
+The KiCad coding police are not going to break down your door and beat
+you with your keyboard if you don't follow these guidelines (although
+there are those who would argue that they should). However, there are
+some very sound reasons why you should follow them. If you are
+contributing patches, you are much more likely to be taken seriously by
+the primary developers if your patches are formatted correctly. Busy
+developers don't have the time to go back and reformat your code. If you
+have a desire to become a regular KiCad developer with commit access to
+the development branch, you're not likely to get a glowing
+recommendation by the lead developers if you will not follow these
+guidelines. It is just good programming courtesy to follow this policy
+because it is respectful of the investment already made by the existing
+developers. The other KiCad developers will appreciate your effort.
+
+**Warning**
+
+**Do not modify this document without the consent of the project
+leader. All changes to this document require approval.**
+
+
+# 2. Naming Conventions # {#naming_conventions}
+Before delving into anything as esoteric as indentation and formatting,
+naming conventions need to be addressed. This section does not attempt
+to define what names you use for your code. Rather, it defines the style
+for naming. See the references section for links to some excellent
+coding references. When defining multiple word names use the following
+conventions for improved readability:
+
+- Use underscores for all upper and all lower case variables to make
+ multiple word names more readable.
+- Use camel case for mixed case variable names.
+
+Avoid mixing camel case and underscores.
+
+**Examples**
+~~~~~~~~~~~~~{.cpp}
+ CamelCaseName // if camelcase, then no underscores
+ all_lower_case_name
+ ALL_UPPER_CASE_NAME
+~~~~~~~~~~~~~
+
+## 2.1 Class, Type Definitions, Name Space, and Macro Names ## {#definitions}
+Class, typedef, enum, name space, and macro names should be comprised of
+all capital letters.
+
+**Examples**
+~~~~~~~~~~~~~{.cpp}
+ class SIMPLE
+ #define LONG_MACRO_WITH_UNDERSCORES
+ typedef boost::ptr_vector<PIN> PIN_LIST;
+ enum KICAD_T {...};
+~~~~~~~~~~~~~
+
+## 2.2 Local, Private and Automatic Variables ## {#local_variables}
+The first character of automatic, static local, and private variable
+names should be lower case. This indicates that the variable will not be
+“visible” outside of the function, file, or class where they are
+defined, respectively. The limited visibility is being acknowledged with
+the lowercase starting letter, where lowercase is considered to be less
+boisterous than uppercase.
+
+**Examples**
+~~~~~~~~~~~~~{.cpp}
+ int i;
+ double aPrivateVariable;
+ static char* static_variable = NULL;
+~~~~~~~~~~~~~
+
+## 2.3 Public and Global Variables ## {#global_variables}
+The first character of public and global variable names are to be
+uppercase. This indicates that the variable is visible outside the class
+or file in which it was defined. (An exception is the use of prefix `g_`
+which is also sometimes used to indicate a global variable.)
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ char* GlobalVariable;
+~~~~~~~~~~~~~
+
+## 2.4 Local, Private and Static Functions ## {#functions}
+The first character of local, private, and static functions should be
+lower case. This indicates that the function is not visible outside the
+class or file where it is defined.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ bool isModified();
+ static int buildList( int* list );
+~~~~~~~~~~~~~
+
+## 2.5 Function Arguments ## {#function_arguments}
+Function arguments are prefixed with an 'a' to indicate these are
+arguments to a function. The 'a' stands for “argument”, and it also
+enables clever and concise Doxygen comments.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ /*/** */*
+ * Function SetFoo
+ * takes aFoo and copies it into this instance.
+ */
+ void SetFoo( int aFoo );
+~~~~~~~~~~~~~
+
+Notice how the reader can say “a Foo” to himself when reading this.
+
+## 2.6 Pointers ## {#pointers}
+It is not desired to identify a pointer by building a 'p' into the
+variable name. The pointer aspect of the variable pertains to type, not
+purpose.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ MODULE* module;
+~~~~~~~~~~~~~
+
+The purpose of the variable is that it represents a MODULE. Something
+like `p_module` would only make that harder to discern.
+
+## 2.7 Accessing Member Variables and Member Functions ## {#accessing_members}
+We do not use “`this->`” to access either member variables or member
+functions from within the containing class. We let C++ perform this for
+us.
+
+
+# 3. Commenting # {#commenting}
+Comments in KiCad typically fall into two categories: in line code
+comments and Doxygen comments. In line comments have no set formatting
+rules other than they should have the same indent level as the code if
+they do not follow a statement. In line comments that follow statements
+should not exceed 99 columns unless absolutely necessary. The prevents
+word wrapping in an editor when the viewable columns is set to 100. In
+line comments can use either the C++ or the C commenting style, but C++
+comments are preferred for single line comments or comments consisting
+of only a few lines.
+
+## 3.1 Blank Lines Above Comments ## {#blank_lines_above_comments}
+If a comment is the first thing on a line, then that comment should have
+one or more blank lines above them. One blank line is preferred.
+
+## 3.2 Doxygen ## {#doxygen}
+Doxygen is a C++ source code documenting tool used by the project. Descriptive
+*.html files can be generated from the source code by installing Doxygen and
+building the target named **doxygen-docs**.
+
+ $ cd <kicad_build_base>
+ $ make doxygen-docs
+
+The \*.html files will be placed into
+\<kicad\_project\_base\>/Documentation/doxygen/html/
+
+Doxygen comments are used to build developer documentation from the
+source code. They should normally be only placed in header files and not
+in \*.cpp files. This eliminates the obligation to keep two comments in
+agreement with each other. is if the class, function, or enum, etc. is
+only defined in a \*.cpp source file and not present in any header file,
+in which case the Doxygen comments should go into the \*.cpp source file.
+Again, avoid duplicating the Doxygen comments in both the header and
+\*.cpp source files.
+
+KiCad uses the JAVADOC comment style defined in the [“Documenting the
+code”][doccode] section of the Doxygen [manual][manual]. Don't forget
+to use the special Doxygen tags: bug, todo, deprecated, etc., so other
+developers can quickly get useful information about your code. It is
+good practice to actually generate the Doxygen \*.html files by
+building target doxygen-docs, and then to review the quality of your
+Doxygen comments with a web browser before submitting a patch.
+
+[doccode]: http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html
+[manual]: http://www.stack.nl/~dimitri/doxygen/manual.html
+
+### 3.2.1 Function Comments ### {#function_comments}
+These go into a header file, unless the function is a private (i.e.
+static) function known only to a \*.cpp file. The format of a function
+comment is chosen to serve a dual purpose role: delineation of the
+function declaration within the source code and to create a consistent
+leading sentence in the doxygen html output. The chosen format is
+“Function \<name\>” as shown in the example below.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ /*/** */*
+ * Function Print
+ * formats and writes text to the output stream.
+ * @param nestLevel is the multiple of spaces to precede the output with.
+ * @param fmt is a printf() style format string.
+ * @param ... is a variable list of parameters that will get blended into
+ * the output under control of the format string.
+ * @return int - the number of characters output.
+ * @throw IO_ERROR, if there is a problem outputting, such asisk.
+ */
+ int PRINTF_FUNC Print( int nestLevel,
+ const char* fmt, ... ) throw( IO_ERROR );
+~~~~~~~~~~~~~
+
+The “Function \<name\>” text goes on the 2nd line of the comment. The
+\@return keyword if present, should show the type of the return value
+followed by a hiphen. The \@param keyword names a function parameter
+and the text following should flow like a normal English sentence.
+
+### 3.2.2 Class Comments ### {#class_comments}
+A class comment describes a class declaration by giving the purpose and
+use of the class. Its format is similar to a function comment. Doxygen
+can use the html \<p\> (paragraph designation) to begin a new paragraph
+in its output. So if the text of the comment is large, break it put into
+multiple paragraphs.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ /*/** */*
+ * Class OUTPUTFORMATTER
+ * is an important interface (abstract) class used to output UTF8 text in
+ * a convenient way. The primary interface is "printf() - like" but
+ * with support for indentation control. The destination of the 8 bit
+ * wide text is up to the implementer.
+ * <p>
+ * The implementer only has to implement the write() function, but can
+ * also optionally re-implement GetQuoteChar().
+ * <p>
+ * If you want to output a wxString, then use CONV_TO_UTF8() on it
+ * before passing it as an argument to Print().
+ * <p>
+ * Since this is an abstract interface, only classes derived from
+ * this one may actually be used.
+ */
+ class OUTPUTFORMATTER
+ {
+~~~~~~~~~~~~~
+
+
+# 4. Formatting # {#formatting}
+This section defines the formatting style used in the KiCad source.
+
+## 4.1 Indentation ## {#indentation}
+The indentation level for the KiCad source code is defined as four
+spaces. Please do not use tabs.
+
+### 4.1.1 Defines ### {#defines}
+There should be only one space after a \#define statement.
+
+### 4.1.2 Column Alignment ### {#column_alignment}
+Please try to align multiple consecutive similar lines into consistent
+columns when possible, such as \#define lines which can be thought of as
+containing 4 columns: \#define, symbol, value, and comment. Notice how
+all 4 columns are aligned in the example below.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ #define LN_RED 12 // my favorite
+ #define LN_GREEN 13 // eco friendly
+~~~~~~~~~~~~~
+
+Another common case is the declaration of automatic variables. These are
+preferably shown in columns of type and variable name.
+
+## 4.2 Blank Lines ## {#blank_lines}
+
+### 4.2.1 Function Declarations ### {#function_declarations}
+There should be 1 blank line above a function declaration in a class
+file if that function declaration is presented with a Javadoc comment.
+This is consist with the statement above about blank lines above
+comments.
+
+### 4.2.2 Function Definitions ### {#function_definitions}
+Function definitions in *.cpp files will not typically be accompanied by
+any comment, since those are normally only in the header file. It is
+desirable to set off the function definition within the *.cpp file by
+leaving two blank lines above the function definition.
+
+### 4.2.3 If Statements ### {#if_statements}
+There should be one blank line above if statements.
+
+## 4.3 Line Length ### {#line_length}
+The maximum line width is 99 columns. An exception to this is a long
+quoted string such as the internationalized text required to satisfy
+MSVC++, described below.
+
+## 4.4 Strings ## {#strings}
+The KiCad project team no longer supports compiling with Microsoft
+Visual C++. When you need to break long strings into smaller substrings,
+please use the C99 compliant method for improved readability. Using
+any of previously accepted methods defined below for breaking
+long internationalized strings will no longer be accepted.
+
+**Examples**
+~~~~~~~~~~~~~{.cpp}
+ // This works with C99 compliant compilers is the **only** accepted method:
+ wxChar* foo = _( “this is a long string broken ”
+ “into pieces for readability.” );
+
+ // This works with MSVC, breaks POEdit, and is **not** acceptable:
+ wxChar* foo = _( “this is a long string broken ”
+ L“into pieces for readability” );
+
+ // This works with MSVC, is ugly, and is **not** accepted:
+ wxChar* foo = _( “this is a long string \
+ broken into pieces for readability” );
+~~~~~~~~~~~~~
+
+A second acceptable solution is to simply put the text all on one
+line, even if it exceeds the 99 character line length limit. However,
+the preferred method is to break strings within the 99 character limit
+whenever possible to prevent wrapping.
+
+## 4.5 Trailing Whitespace ## {#trailing_whitespace}
+Many programming editors conveniently indent your code for you. Some of
+them do it rather poorly and leave trailing whitespace. Thankfully, most
+editors come with a remove trailing whitespace macro or at least a
+setting to make trailing whitespace visible so you can see it and
+manually remove it. Trailing whitespace is known to break some text
+parsing tools. It also leads to unnecessary diffs in the version control
+system. Please remove trailing whitespace.
+
+## 4.6 Multiple Statements per Line ## {#multiple_statements_per_line}
+It is generally preferred that each statement be placed on its own line.
+This is especially true for statements without keywords.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ x=1; y=2; z=3; // Bad, should be on separate lines.
+~~~~~~~~~~~~~
+
+## 4.7 Braces ## {#braces}
+Braces should be placed on the line proceeding the keyword and indented
+to the same level. It is not necessary to use braces if there is only a
+single line statement after the keyword. In the case of if..else
+if..else, indent all to the same level.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ void function()
+ {
+ if( foo )
+ {
+ statement1;
+ statement2;
+ }
+ else if( bar )
+ {
+ statement3;
+ statement4;
+ }
+ else
+ statement5;
+ }
+~~~~~~~~~~~~~
+
+## 4.8 Parenthesis ## {#parenthesis}
+Parenthesis should be placed immediately after function names and
+keywords. Spaces should be placed after the opening parenthesis, before
+the closing parenthesis, and between the comma and the next argument in
+functions. No space is needed if a function has no arguments.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ void Function( int aArg1, int aArg2 )
+ {
+ while( busy )
+ {
+ if( a || b || c )
+ doSomething();
+ else
+ doSomethingElse();
+ }
+ }
+~~~~~~~~~~~~~
+
+## 4.9 Switch Formatting ## {#switch}
+The case statement is to be indented to the same level as the switch.
+
+**Example**
+~~~~~~~~~~~~~{.cpp}
+ switch( foo )
+ {
+ case 1:
+ doOne();
+ break;
+ case 2:
+ doTwo();
+ // Fall through.
+ default:
+ doDefault();
+ }
+~~~~~~~~~~~~~
+
+
+# 5. License Statement # {#license_statement}
+There is a the file copyright.h which you can copy into the top of
+your new source files and edit the \<author\> field. KiCad depends on
+the copyright enforcement capabilities of copyright law, and this
+means that source files must be copyrighted and not be released into
+the public domain. Each source file has one or more owners.
+
+
+# 6. Header Files # {#header_files}
+Project \*.h source files should:
+
+- contain a license statement
+- contain a nested include \#ifndef
+- be fully self standing and not depend on other headers that are not
+ included within it.
+
+The license statement was described above.
+
+## 6.1 Nested Include #ifndef ## {#nested_include}
+Each header file should include an \#ifndef which is commonly used to
+prevent compiler errors in the case where the header file is seen
+multiple times in the code stream presented to the compiler. Just
+after the license statement, at the top of the file there should be
+lines similar to these (but with a filename specific token other than
+`RICHIO_H_`):
+
+~~~~~~~~~~~~~{.cpp}
+ #ifndef RICHIO_H_
+ #define RICHIO_H_
+~~~~~~~~~~~~~
+
+And at the very bottom of the header file, use a line like this one:
+
+~~~~~~~~~~~~~{.cpp}
+ #endif // RICHIO_H_
+~~~~~~~~~~~~~
+
+The \#ifndef wrapper begins after the license statement, and ends at
+the very bottom of the file. It is important that it wrap any nested
+\#include statements, so that the compiler can skip them if the
+\#ifndef evaluates to false, which will reduce compilation time.
+
+## 6.2 Headers Without Unsatisfied Dependencies ## {#header_depends}
+Any header file should include other headers that it depends on. (Note:
+KiCad is not at this point now, but this section is a goal of the
+project.)
+
+It should be possible to run the compiler on any header file within the
+project, and with proper include paths being passed to the compiler, the
+header file should compile without error.
+
+**Example**
+
+ $ cd /svn/kicad/testing.checkout/include
+ $ g++ wx-config --cxxflags -I . xnode.h -o /tmp/junk
+
+Such structuring of the header files removes the need within a client
+\*.cpp file to include some project header file before some other project
+header file. (A client \*.cpp file is one that intends to **use, not
+implement,** the public API exposed within the header file.)
+
+Client code should not have to piece together things that a header file
+wishes to expose. The exposing header file should be viewed as a fully
+sufficient **ticket to use** the public API of that header file.
+
+This is not saying anything about how much to expose, only that that
+which is exposed needs to be fully usable merely by including the header
+file that exposes it, with no additional includes.
+
+For situations where there is a class header file and an
+implementation \*.cpp file, it is desirable to hide as much of the
+private implementation as is practical and any header file that is not
+needed as part of the public API can and should be included only in
+the implementation \*.cpp file. However, the number one concern of
+this section is that client (using) code can use the public API which
+is exposed in the header file, merely by including that one header
+file.
+
+
+# 7. I Wrote X Lines of Code Before I Read This Document # {#x_lines}
+It's OK. We all make mistakes. Fortunately, KiCad provides a
+configuration file for the code beautifier uncrustify. Uncrustify won't
+fix your naming problems but it does a pretty decent job of formatting
+your source code. There are a few places where uncrustify makes some
+less than ideal indentation choices. It struggles with the string
+declaration macros wxT(“”) and \_(“”) and functions used as arguments to
+other functions. After you uncrustify your source code, please review the
+indentation for any glaring errors and manually fix them. See the
+uncrustify [website][uncrustify] for more information.
+
+[uncrustify]: http://uncrustify.sourceforge.net/
+
+
+# 8. Show Me an Example # {#show_me_an_example}
+Nothing drives the point home like an example. The source file richio.h
+below was taken directly from the KiCad source.
+
+~~~~~~~~~~~~~{.cpp}
+ /*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 2007-2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2007 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+ #ifndef RICHIO_H_
+ #define RICHIO_H_
+
+
+ // This file defines 3 classes useful for working with DSN text files and is named
+ // "richio" after its author, Richard Hollenbeck, aka Dick Hollenbeck.
+
+
+ #include <string>
+ #include <vector>
+
+ // I really did not want to be dependent on wxWidgets in richio
+ // but the errorText needs to be wide char so wxString rules.
+ #include <wx/wx.h>
+ #include <cstdio> // FILE
+
+
+
+ /*/** */*
+ * Struct IOError
+ * is a class used to hold an error message and may be used to throw exceptions
+ * containing meaningful error messages.
+ */
+ struct IOError
+ {
+ wxString errorText;
+
+ IOError( const wxChar* aMsg ) :
+ errorText( aMsg )
+ {
+ }
+
+ IOError( const wxString& aMsg ) :
+ errorText( aMsg )
+ {
+ }
+ };
+
+
+ /*/** */*
+ * Class LINE_READER
+ * reads single lines of text into its buffer and increments a line number counter.
+ * It throws an exception if a line is too long.
+ */
+ class LINE_READER
+ {
+ protected:
+
+ FILE* fp;
+ int lineNum;
+ unsigned maxLineLength;
+ unsigned length;
+ char* line;
+ unsigned capacity;
+
+ public:
+
+ /*/** */*
+ * Constructor LINE_READER
+ * takes an open FILE and the size of the desired line buffer.
+ * @param aFile An open file in "ascii" mode, not binary mode.
+ * @param aMaxLineLength The number of bytes to use in the line buffer.
+ */
+ LINE_READER( FILE* aFile, unsigned aMaxLineLength );
+
+ ~LINE_READER()
+ {
+ delete[] line;
+ }
+
+ /*
+ int CharAt( int aNdx )
+ {
+ if( (unsigned) aNdx < capacity )
+ return (char) (unsigned char) line[aNdx];
+ return -1;
+ }
+ */
+
+ /*/** */*
+ * Function ReadLine
+ * reads a line of text into the buffer and increments the line number
+ * counter. If the line is larger than the buffer size, then an exception
+ * is thrown.
+ * @return int - The number of bytes read, 0 at end of file.
+ * @throw IOError only when a line is too long.
+ */
+ int ReadLine() throw (IOError);
+
+ operator char* ()
+ {
+ return line;
+ }
+
+ int LineNumber()
+ {
+ return lineNum;
+ }
+
+ unsigned Length()
+ {
+ return length;
+ }
+ };
+
+
+
+ /*/** */*
+ * Class OUTPUTFORMATTER
+ * is an interface (abstract class) used to output ASCII text in a convenient
+ * way. The primary interface is printf() like but with support for indentation
+ * control. The destination of the 8 bit wide text is up to the implementer.
+ * If you want to output a wxString, then use CONV_TO_UTF8() on it before passing
+ * it as an argument to Print().
+ * <p>
+ * Since this is an abstract interface, only classes derived from this one
+ * will be the implementations.
+ */
+ class OUTPUTFORMATTER
+ {
+
+ #if defined(__GNUG__) // The GNU C++ compiler defines this
+
+ // When used on a C++ function, we must account for the "this" pointer,
+ // so increase the STRING-INDEX and FIRST-TO_CHECK by one.
+ // See http://docs.freebsd.org/info/gcc/gcc.info.Function_Attributes.html
+ // Then to get format checking during the compile, compile with -Wall or -Wformat
+ #define PRINTF_FUNC __attribute__ ((format (printf, 3, 4)))
+
+ #else
+ #define PRINTF_FUNC // nothing
+ #endif
+
+ public:
+
+ /*/** */*
+ * Function Print
+ * formats and writes text to the output stream.
+ *
+ * @param nestLevel The multiple of spaces to preceed the output with.
+ * @param fmt A printf() style format string.
+ * @param ... a variable list of parameters that will get blended into
+ * the output under control of the format string.
+ * @return int - the number of characters output.
+ * @throw IOError, if there is a problem outputting, such as a full disk.
+ */
+ virtual int PRINTF_FUNC Print( int nestLevel, const char* fmt, ... ) throw( IOError ) = 0;
+
+ /*/** */*
+ * Function GetQuoteChar
+ * performs quote character need determination.
+ * It returns the quote character as a single character string for a given
+ * input wrapee string. If the wrappee does not need to be quoted,
+ * the return value is "" (the null string), such as when there are no
+ * delimiters in the input wrapee string. If you want the quote_char
+ * to be assuredly not "", then pass in "(" as the wrappee.
+ * <p>
+ * Implementations are free to override the default behavior, which is to
+ * call the static function of the same name.
+
+ * @param wrapee A string that might need wrapping on each end.
+ * @return const char* - the quote_char as a single character string, or ""
+ * if the wrapee does not need to be wrapped.
+ */
+ virtual const char* GetQuoteChar( const char* wrapee ) = 0;
+
+ virtual ~OUTPUTFORMATTER() {}
+
+ /*/** */*
+ * Function GetQuoteChar
+ * performs quote character need determination according to the Specctra DSN
+ * specification.
+
+ * @param wrapee A string that might need wrapping on each end.
+ * @param quote_char A single character C string which provides the current
+ * quote character, should it be needed by the wrapee.
+ *
+ * @return const char* - the quote_char as a single character string, or ""
+ * if the wrapee does not need to be wrapped.
+ */
+ static const char* GetQuoteChar( const char* wrapee, const char* quote_char );
+ };
+
+
+ /*/** */*
+ * Class STRINGFORMATTER
+ * implements OUTPUTFORMATTER to a memory buffer. After Print()ing the
+ * string is available through GetString()
+ */
+ class STRINGFORMATTER : public OUTPUTFORMATTER
+ {
+ std::vector<char> buffer;
+ std::string mystring;
+
+ int sprint( const char* fmt, ... );
+ int vprint( const char* fmt, va_list ap );
+
+ public:
+
+ /*/** */*
+ * Constructor STRINGFORMATTER
+ * reserves space in the buffer
+ */
+ STRINGFORMATTER( int aReserve = 300 ) :
+ buffer( aReserve, '\0' )
+ {
+ }
+
+
+ /*/** */*
+ * Function Clear
+ * clears the buffer and empties the internal string.
+ */
+ void Clear()
+ {
+ mystring.clear();
+ }
+
+ /*/** */*
+ * Function StripUseless
+ * removes whitespace, '(', and ')' from the mystring.
+ */
+ void StripUseless();
+
+
+ std::string GetString()
+ {
+ return mystring;
+ }
+
+
+ //-----<OUTPUTFORMATTER>------------------------------------------------
+ int PRINTF_FUNC Print( int nestLevel, const char* fmt, ... ) throw( IOError );
+ const char* GetQuoteChar( const char* wrapee );
+ //-----</OUTPUTFORMATTER>-----------------------------------------------
+ };
+
+
+ #endif // RICHIO_H_
+~~~~~~~~~~~~~
+
+
+# 9. Resources # {#resources}
+There are plenty of excellent resources on the Internet on C++ coding
+styles and coding do's and don'ts. Here are a few useful ones. In most
+cases, the coding styles do not follow the KiCad coding style but there
+is plenty of other good information here. Besides, most of them have
+some great humor in them enjoyable to read. Who knows, you might even
+learn something new.
+
+- [C++ Coding Standard][cppstandard]
+- [Linux Kernel Coding Style][kernel]
+- [C++ Operator Overloading Guidelines][overloading]
+- [Wikipedia's Programming Style Page][style]
+
+[cppstandard]:http://www.possibility.com/Cpp/CppCodingStandard.html
+[kernel]:http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/Documentation/CodingStyle
+[overloading]:http://www.cs.caltech.edu/courses/cs11/material/cpp/donnie/cpp-ops.html
+[style]:http://en.wikipedia.org/wiki/Programming_style
diff --git a/Documentation/development/compiling.md b/Documentation/development/compiling.md
new file mode 100644
index 0000000..6a5ac92
--- /dev/null
+++ b/Documentation/development/compiling.md
@@ -0,0 +1,413 @@
+# Building KiCad from Source #
+If you are a user and not a developer, please consider using one of the prebuilt packages
+of KiCad which can be found at the [download][] page on the [KiCad website][]. Building KiCad
+from source is not for the faint of heart and is not recommended unless you have reasonable
+software development experience. This document contains the instructions on how to build KiCad
+from source on the supported platforms. It is not intended as a guide for installing or building
+[library dependencies](#library_dependencies). Please consult you platforms documentation for
+installing packages or the source code when building the library dependencies. Currently the
+supported platforms are Windows Versions 7-10, just about any version of Linux, and OSX
+10.7-10.10. You may be able to build KiCad on other platforms but it is not supported. On
+Windows and Linux the [GNU GCC][] is the only supported compiler and on OSX [Clang][] is the
+only supported compiler.
+
+[TOC]
+
+# Development Tools # {#development_tools}
+
+Before you begin building KiCad, there are a few tools required in addition to your compiler.
+Some of these tools are required to build from source and some are optional.
+
+## CMake Build Configuration Tool ## {#cmake}
+
+[CMake][] is the build configuration and makefile generation tool used by KiCad. It is required.
+
+
+## Bazaar Version Control System ## {#bazaar}
+
+The official source code repository is hosted on [Launchpad][] and requires the [Bazaar][] version
+control system in order to create a branch of the latest source. Bazaar is not required if you are
+going to build a stable version of KiCad from a source archive.
+
+## GIT Version Control System ## {#git}
+
+If you prefer to use [GIT][] for version control, there is a mirror of the official KiCad
+repository on [Github][]. GIT is not required if you are going to build a stable version of
+KiCad from a source archive. Please note that the Github mirror is read only. Do not submit
+pull requests to Github. Changes should be sent to the KiCad developer's [mailing list][] as
+an attached patch with [PATCH] at the beginning of the subject.
+
+## Doxygen Code Documentation Generator ## {#doxygen_section}
+
+The KiCad source code is documented using [Doxygen][] which parses the KiCad source code files
+and builds a dependency tree along with the source documentation into HTML. Doxygen is only
+required if you are going to build the KiCad documentation.
+
+## SWIG Simplified Wrapper and Interface Generator ## {#swig}
+
+[SWIG][] is used to generate the Python scripting language extensions for KiCad. SWIG is not
+required if you are not going to build the KiCad scripting extension.
+
+
+# Library Dependencies # {#library_dependencies}
+
+This section includes a list of library dependencies required to build KiCad. It does not
+include any dependencies of the libraries. Please consult the library's documentation for any
+additional dependencies. Some of these libraries are optional depending on you build
+configuration. This is not a guide on how to install the library dependencies using you systems
+package management tools or how to build the library from source. Consult the appropriate
+documentation to perform these tasks.
+
+## wxWidgets Cross Platform GUI Library## {#wxwidgets}
+
+[wxWidgets][] is the graphical user interface (GUI) library used by KiCad. The current minimum
+version is 3.0.0. However, 3.0.2 should be used whenever possible as there are some known bugs
+in prior versions that can cause problems on some platforms. Please note that there are also
+some platform specific patches that must be applied before building wxWidgets from source. These
+patches can be found in the [patches folder][] in the KiCad source. These patches are named by
+the wxWidgets version and platform name they should be applied against. wxWidgets must be built
+with the --with-opengl option. If you installed the packaged version of wxWidgets on your system,
+verify that it was built with this option.
+
+## Boost C++ Libraries ## {#boost}
+
+The [Boost][] C++ library is required only if you intend to build KiCad with the system installed
+version of Boost instead of the default internally built version. If you use the system installed
+version of Boost, version 1.56 or greater is required. Please note there are some platform
+specific patches required to build a working Boost library. These patches can be found in the
+[patches folder][] in the KiCad source. These patches are named by the platform name they should
+be applied against.
+
+## GLEW OpenGL Extension Wrangler Library ## {#glew}
+
+The [OpenGL Extension Wrangler][GLEW] is an OpenGL helper library used by the KiCad graphics
+abstraction library [GAL] and is always required to build KiCad.
+
+## GLUT OpenGL Utility Toolkit Library ## {#glut}
+
+The [OpenGL Utility Toolkit][GLUT] is an OpenGL helper library used by the KiCad graphics
+abstraction library [GAL] and is always required to build KiCad.
+
+## Cairo 2D Graphics Library ## {#cairo}
+
+The [Cairo][] 2D graphics library is used as a fallback rendering canvas when OpenGL is no
+available and is always required to build KiCad.
+
+## Python Programming Language ## {#python}
+
+The [Python][] programming language is used to provide scripting support to KiCad. It only needs
+to be install if the [KiCad scripting](#kicad_scripting) build configuration option is enabled.
+
+## wxPython Library ## {#wxpython}
+
+The [wxPython][] library is used to provide a scripting console for Pcbnew. It only needs to be
+installed if the [wxPython scripting](#wxpython_scripting) build configuration option is enabled.
+When building KiCad with wxPython support, make sure the version of the wxWidgets library and
+the version of wxPython installed on your system are the same. Mismatched versions have been
+known to cause runtime issues.
+
+# KiCad Build Configuration Options # {#build_opts}
+
+KiCad has many build options that can be configured to build different options depending on
+the availability of support for each option on a given platform. This section documents
+these options and their default values.
+
+## Case Sensitivity ## {#case_sensitive_opt}
+
+The KICAD_KEEPCASE option allows you to build KiCad so that the string matching for component
+names is case sensitive of case insensitive. This option is enabled by default.
+
+## Advanced Graphics Context ## {#graphics_context_opt}
+
+The USE_WX_GRAPHICS_CONTEXT option replaces wxDC with wxGraphicsContext for graphics rendering.
+This option is disabled by default. Warning: the is experimental and has not been maintained
+so use at your own risk.
+
+## Graphics Context Overlay ## {#overlay_opt}
+
+The USE_WX_OVERLAY option is used to enable the optional wxOverlay class for graphics rendering
+on OSX. This is enabled on OSX by default and disabled on all other platforms.
+
+## Scripting Support ## {#scripting_opt}
+
+The KICAD_SCRIPTING option is used to enable building the Python scripting support into Pcbnew.
+This options is disabled by default.
+
+## Scripting Module Support ## {#scripting_mod_opt}
+
+The KICAD_SCRIPTING_MODULES option is used to enable building and installing the Python modules
+supplied by KiCad. This option is disabled by default.
+
+## wxPython Scripting Support ## {#wxpython_opt}
+
+The KICAD_SCRIPTING_WXPYTHON option is used to enable building the wxPython interface into
+Pcbnew including the wxPython console. This option is disabled by default.
+
+## Github Plugin ## {#github_opt}
+
+The BUILD_GITHUB_PLUGIN option is used to control if the Github plugin is built. This option is
+enabled by default.
+
+## Build with Static Libraries ## {#static_lib_opt}
+
+The KICAD_BUILD_STATIC option is used to build KiCad with static libraries. This option is
+used for OSX builds only and is disabled by default.
+
+## Build with Dynamic Libraries ## {#dynamic_lib_opt}
+
+The KICAD_BUILD_DYNAMIC option is used to build KiCad with dynamic libraries. This option is
+used for OSX only and is disabled by default.
+
+## Build with System Boost ## {#boost_opt}
+
+The KICAD_SKIP_BOOST option allow you to use the Boost libraries installed on your system to
+be used instead of downloading Boost 1.54 and building a custom version specifically for
+building KiCad. It is high recommended that you enable this option on Linux and use Boost
+version 1.56 or greater. On other platforms you mileage may vary. This option is disabled
+by default.
+
+## OSX Dependency Builder ## {#osx_deps_opt}
+
+The USE_OSX_DEPS_BUILDER option forces the build configuration to download and build the
+required dependencies to build KiCad on OSX. This option is not longer maintained and most
+likely is broken. Use it at your own peril.
+
+## Setting the Build Version and Repository Name ## {#build_version_opt}
+
+The KiCad version string is defined by the three CMake variables KICAD_VERSION, KICAD_BRANCH_NAME,
+and KICAD_VERSION_EXTRA. Variables KICAD_BRANCH_NAME and KICAD_VERSION_EXTRA are defined as empty
+strings and can be set at configuration. Unless the source branch is a stable release archive,
+KICAD_VERSION is set to "no-vcs-found". If an optional variable is not define, it is not appended
+to the full version string. If an optional variable is defined it is appended along with a leading
+'-' to the full version string as follows:
+
+ KICAD_VERSION[-KICAD_BRANCH_NAME][-KICAD_VERSION_EXTRA]
+
+When the version string is set to "no-vcs-found", the build script automatically creates the
+version string information from the [git][] repository information as follows:
+
+
+ (2016-08-26 revision 67230ac)-master
+ | | |
+ | | branch name, "HEAD" if not on a branch,
+ | | or "unknown" if no .git present
+ | |
+ | abbreviated commit hash, or no-git if no .git
+ | present
+ |
+ date of commit, or date of build if no .git present
+
+# Getting the KiCad Source Code ## {#getting_src}
+
+There are several ways to get the KiCad source. If you want to build the stable version you
+can down load the source archive from the [KiCad Launchpad][] developers page. Use tar or some
+other archive program to extract the source on your system. If you are using tar, use the
+following command:
+
+ tar -xzf kicad_src_archive.tar.gz
+
+If you are contributing directly to the KiCad project on Launchpad, you can create a local
+branch on your machine by using the following command:
+
+ bzr branch lp:repo_to_branch
+
+If you prefer to use [GIT][] as you version control system, you can clone the KiCad mirror on
+Github using the following command:
+
+ git clone https://github.com/KiCad/kicad-source-mirror
+
+Here is a list of source links:
+
+Stable release archive: https://launchpad.net/kicad/4.0/4.0.0-rc1/+download/kicad-4.0.0-rc1.tar.xz
+
+Development branch: https://code.launchpad.net/~kicad-product-committers/kicad/product
+
+Github mirror: https://github.com/KiCad/kicad-source-mirror
+
+# Building KiCad on Linux # {#build_linux}
+
+To perform a full build on Linux, run the following commands:
+
+ cd kicad_source_tree
+ mkdir -p build/release
+ mkdir build/debug # Optional for debug build.
+ cd build/release
+ cmake -DCMAKE_BUILD_TYPE=Release \
+ -DKICAD_SCRIPTING=ON \
+ -DKICAD_SCRIPTING_MODULES=ON \
+ -DKICAD_SCRIPTING_WXPYTHON=ON \
+ ../../
+ make
+ sudo make install
+
+If the CMake configuration fails, determine the missing dependencies and install them on your
+system. By default, CMake sets the install path on Linux to /usr/local. Use the
+CMAKE_INSTALL_PREFIX option to specify a different install path.
+
+# Building KiCad on Windows # {#build_windows}
+
+The preferred Windows build environment is [MSYS2][]. The [MinGW][] build environment is still
+supported but it is not recommended because the developer is responsible for building *all* of
+the dependencies from source which is a huge and frustrating undertaking. The [MSYS2][] project
+provides packages for all of the require dependencies to build KiCad. To setup the [MSYS2][]
+build environment, depending on your system download and run either the [MSYS2 32-bit Installer][]
+or the [MSYS2 64-bit Installer][]. After the installer is finished, update to the latest
+package versions by running the `msys2_shell.bat` file located in the MSYS2 install path and
+running the command `pacman -Syu`. If the msys2-runtime package is updated, close the shell
+and run `msys2_shell.bat`.
+
+## MSYS2 the Easy Way ## {#msys2_easy}
+
+The easiest way to build KiCad using the [MSYS2][] build environment is to use the KiCad
+[PKGBUILD][] provided by the MSYS2 project to build package using the head of the KiCad
+development branch. To build the KiCad package, run the `msys2_shell.bat` file located in the
+MSYS2 install path and run the following commands:
+
+ pacman -S git
+ mkdir src
+ cd src
+ git clone https://github.com/Alexpux/MINGW-packages
+ cd MinGW-packages/mingw-w64-kicad-git
+ makepkg-mingw -is
+
+This will download and install all of the build dependencies, clone the KiCad source mirror
+from Github, create both 32-bit and 64-bit KiCad packages depending on your MSYS setup, and
+install the newly built KiCad packages. Please note that this build process takes a very
+long time to build even on a fast system.
+
+## MSYS2 the Hard Way ## {#msys2_hard}
+
+If you do not want to create KiCad packages and prefer the traditional `make && make install`
+method of building KiCad, your task is significantly more involved. For 64 bit builds run
+the `mingw64_shell.bat` file located in the MSYS2 install path. At the command prompt run the
+the following commands:
+
+ pacman -S mingw-w64-x86_64-cmake \
+ mingw-w64-x86_64-doxygen \
+ mingw-w64-x86_64-gcc \
+ mingw-w64-x86_64-python2 \
+ mingw-w64-x86_64-pkg-config \
+ mingw-w64-x86_64-swig \
+ mingw-w64-x86_64-boost \
+ mingw-w64-x86_64-cairo \
+ mingw-w64-x86_64-glew \
+ mingw-w64-x86_64-curl \
+ mingw-w64-x86_64-wxPython \
+ mingw-w64-x86_64-wxWidgets
+ cd kicad-source
+ mkdir -p build/release
+ mkdir build/debug # Optional for debug build.
+ cd build/release
+ cmake -DCMAKE_BUILD_TYPE=Release \
+ -G "MSYS Makefiles" \
+ -DCMAKE_PREFIX_PATH=/mingw64 \
+ -DCMAKE_INSTALL_PREFIX=/mingw64 \
+ -DDEFAULT_INSTALL_PATH=/mingw64 \
+ -DKICAD_SKIP_BOOST=ON \
+ -DKICAD_SCRIPTING=ON \
+ -DKICAD_SCRIPTING_MODULES=ON \
+ -DKICAD_SCRIPTING_WXPYTHON=ON \
+ ../../
+ make install
+
+# Building KiCad on OSX # {#build_osx}
+
+Building on OSX is challenging at best. It typically requires building dependency libraries
+that require patching in order to work correctly. For more information on the complexities of
+building KiCad on OSX, see the [OSX bundle build scripts][].
+
+Download the wxPython source and build using the following commands:
+
+ cd path-to-wxwidgets-src
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.0_macosx.patch
+ patch -p0 < path-to-kicad-src/wxwidgets-3.0.0_macosx_bug_15908.patch
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.0_macosx_soname.patch
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.2_macosx_yosemite.patch
+ patch -p0 < path-to-kicad-src/patches/wxwidgets-3.0.0_macosx_scrolledwindow.patch
+ mkdir build
+ cd build
+ export MAC_OS_X_VERSION_MIN_REQUIRED=10.7
+ ../configure \
+ --prefix=`pwd`/../wx-bin \
+ --with-opengl \
+ --enable-aui \
+ --enable-utf8 \
+ --enable-html \
+ --enable-stl \
+ --with-libjpeg=builtin \
+ --with-libpng=builtin \
+ --with-regex=builtin \
+ --with-libtiff=builtin \
+ --with-zlib=builtin \
+ --with-expat=builtin \
+ --without-liblzma \
+ --with-macosx-version-min=10.7 \
+ --enable-universal-binary=i386,x86_64 \
+ CC=clang \
+ CXX=clang++
+
+Build KiCad using the following commands:
+
+ cd kicad-source
+ mkdir -p build/release
+ mkdir build/debug # Optional for debug build.
+ cd build/release
+ cmake -DCMAKE_C_COMPILER=clang \
+ -DCMAKE_CXX_COMPILER=clang++ \
+ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.7 \
+ -DwxWidgets_CONFIG_EXECUTABLE=path-to-wx-install/bin/wx-config \
+ -DKICAD_SCRIPTING=ON \
+ -DKICAD_SCRIPTING_MODULES=ON \
+ -DKICAD_SCRIPTING_WXPYTHON=ON \
+ -DPYTHON_EXECUTABLE=path-to-python-exe/python \
+ -DPYTHON_SITE_PACKAGE_PATH=wx/wx-bin/lib/python2.7/site-packages \
+ -DCMAKE_INSTALL_PREFIX=../bin \
+ -DCMAKE_BUILD_TYPE=Release \
+ ../../
+ make
+ make install
+
+# Known Issues # {#known_issues}
+
+There are some known issues that are platform and/or dependencie specific. This section provides
+a list of the currently known issues when building KiCad.
+
+## Boost C++ Library Issues ## {#boost_issue}
+
+As of version 5 of [GNU GCC][], using the default configuration of downloading, patching, and
+building of Boost 1.54 will cause the KiCad build to fail. Therefore a newer version of Boost
+must be used to build KiCad. If your system has Boost 1.56 or greater installed, you job is
+straight forward. Configure your KiCad build using `-DKICAD_SKIP_BOOST=ON`. If your system
+does not have Boost 1.56 or greater installed, you will have to download and [build Boost][]
+from source. If you are building Boost on windows using [MinGW][] you will have to apply the
+Boost patches in the KiCad source [patch folder][].
+
+
+[download]: http://kicad-pcb.org/download/
+[KiCad website]: http://kicad-pcb.org/
+[KiCad Launchpad]: https://launchpad.net/kicad
+[GNU GCC]: https://gcc.gnu.org/
+[Clang]: http://clang.llvm.org/
+[CMake]: https://cmake.org/
+[Launchpad]: https://code.launchpad.net/~kicad-product-committers/kicad/product
+[Bazaar]: http://bazaar.canonical.com/en/
+[GIT]: https://git-scm.com/
+[Github]: https://github.com/KiCad/kicad-source-mirror
+[Doxygen]: http://www.stack.nl/~dimitri/doxygen/
+[mailing list]: https://launchpad.net/~kicad-developers
+[SWIG]: http://www.swig.org/
+[wxWidgets]: http://wxwidgets.org/
+[patches folder]: http://bazaar.launchpad.net/~kicad-product-committers/kicad/product/files/head:/patches/
+[Boost]: http://www.boost.org/
+[GLEW]: http://glew.sourceforge.net/
+[GLUT]: https://www.opengl.org/resources/libraries/glut/
+[Cairo]: http://cairographics.org/
+[Python]: https://www.python.org/
+[wxPython]: http://wxpython.org/
+[MSYS2]: http://msys2.github.io/
+[MSYS2 32-bit Installer]: http://repo.msys2.org/distrib/i686/msys2-i686-20150916.exe
+[MSYS2 64-bit Installer]: http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20150916.exe
+[PKGBUILD]: https://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-kicad-git/PKGBUILD
+[OSX bundle build scripts]:http://bazaar.launchpad.net/~adamwolf/+junk/kicad-mac-packaging/files
+[MinGW]: http://mingw.org/
+[build Boost]: http://www.boost.org/doc/libs/1_59_0/more/getting_started/index.html
diff --git a/Documentation/development/road-map.md b/Documentation/development/road-map.md
new file mode 100644
index 0000000..c1366da
--- /dev/null
+++ b/Documentation/development/road-map.md
@@ -0,0 +1,834 @@
+# Road Map #
+
+This document is the KiCad Developer's road map document. It is a living
+document that should be maintained as the project progresses. The goal of
+this document is to provide an overview for developers of where the project
+is headed to prevent resource conflicts and endless rehashing of previously
+discussed topics. It is broken into sections for each major component of
+the KiCad source code and documentation. It defines tasks that developers
+an use to contribute to the project and provides updated status information.
+Tasks should define clear objective and avoid vague generalizations so that
+a new developer can complete the task. It is not a place for developers to
+add their own personal wish list It should only be updated with approval
+of the project manager after discussion with the lead developers.
+
+Each entry in the road map is made up of four sections. The goal should
+be a brief description of the what the road map entry will accomplish. The
+task section should be a list of deliverable items that are specific enough
+hat they can be documented as completed. The dependencies sections is a list
+of requirements that must be completed before work can begin on any of the
+tasks. The status section should include a list of completed tasks or marked
+as complete as when the goal is met.
+
+[TOC]
+
+# Project # {#project}
+This section defines the tasks for the project related goals that are not
+related to coding or documentation. It is a catch all for issues such as
+developer and user relations, dissemination of information on websites,
+policies, etc.
+
+## Stable Release ## {#stable_release}
+**Goal:**
+
+Provide a lightweight stable release mechanism that is robust enough to meet
+the requirements of Linux packagers and corporate users but avoid the burden
+of back porting fixes to a maintenance branch to avoid the additional work for
+developers.
+
+**Task:**
+- Devise a process to have some type of reasonably stable release protocol
+ to provide "stable" releases for Linux distribution packagers and corporate
+ users.
+- Document "stable" release procedure.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Initial planning stages.
+
+
+## Website Improvements ## {#website_improvements}
+**Goal:**
+
+Make the website at www.kicad-pcb.org as the definitive resource for both
+users and developers which will provide a single point of reference instead
+of the many separate websites currently in used.
+
+**Task:**
+- Define the content and design of the website.
+- Implement the new design.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+
+# General # {#general}
+This section defines the tasks that affect all or most of KiCad or do not
+fit under as specific part of the code such as the board editor or the
+schematic editor.
+
+## Convert to a Single Process Application. ## {#kiway}
+**Goal:**
+
+Merge common schematic and board code into to separate dynamic objects to allow
+Eeschema and Pcbnew to run under a single process.
+
+**Task:**
+- Convert the majority core code in Eeschema and Pcbnew into dynamic libraries.
+- Provide a robust method for communicating between code running under a single
+ process.
+- Revise the schematic editor and board editor main windows run under a single
+ process instead of multiple stand alone applications.
+- Design a method for passing information between the dynamic libraries running
+ under the same process.
+- Remove inter-process communications between Eeschema and Pcbnew.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Stage 1 code released.
+- Stage 2 in process.
+
+## User Interface Modernization ## {#wxaui}
+**Goal:**
+
+Give KiCad a more modern user interface with dockable tool bars and windows.
+Create perspectives to allow users to arrange dockable windows as they prefer.
+
+**Task:**
+- Take advantage of the advanced UI features in wxAui such as detaching and
+ hiding.
+- Study ergonomics of various commercial/proprietary PCB applications (when
+ in doubt about any particular UI solution, check how it has been done in a
+ certain proprietary app that is very popular among OSHW folks and do exactly
+ opposite).
+- Clean up menu structure. Menus must allow access to all features of the
+ program in a clear and logical way. Currently some functions of Pcbnew are
+ accessible only through tool bars
+- Redesign dialogs, make sure they are following same style rules.
+- Check quality of translations. Either fix or remove bad quality translations.
+- Develop a global shortcut manager that allows the user assign arbitrary
+ shortcuts for any tool or action.
+
+**Dependencies:**
+- [wxWidgets 3](#wxwidgets3)
+
+**Status:**
+- No progress.
+
+
+# Build Tools # {#build_tools}
+This section covers build tools for both the KiCad source as well as the
+custom dependency builds required to build KiCad.
+
+## Create Separate Build Dependency Project ## {#depends_prj}
+**Goal:**
+
+Move the library dependencies and their patches into a separate project to
+developers to build and install them as required instead of requiring them
+at build time. Give developers the flexibility to build and/or install
+library dependencies as they see fit. Remove them from the KiCad source code
+to reduce the build footprint.
+
+**Task:**
+- Create a separate project to build all external dependency libraries that are
+ currently build from source (Boost, OpenSSL, etc).
+- Use CMake to create a package configuration file for each library so the
+ KiCad find package can pull in header paths, library dependencies, compile
+ flags, and link flags to build KiCad.
+- Use CMake find package to pull external dependencies.
+- Remove all build from source dependencies for KiCad source code.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Initial concept discussions.
+
+## Platform Binary Installers ## {#installers}
+**Goal:**
+
+Provide quality installers for all supported platforms.
+
+**Task:**
+- Bring OSX installer up to the level of the Window's and Linux installers.
+- Possible use of CPack to build platform specific installers as long as they
+ are of the same or better quality than the current independent installers.
+
+**Dependencies**
+- None
+
+**Status**
+- No progress
+
+
+# Common Library # {#common_lib}
+This section covers the source code shared between all of the KiCad
+applications
+
+## Unified Rendering Framework ## {#unified_rendering}
+**Goal:**
+
+Provide a single framework for developing new tools. Port existing tools
+to the new framework and remove the legacy framework tools.
+
+**Task:**
+- Port wxDC to GAL or get Cairo rendering to nearly the performance of the
+ current wxDC rendering so that we have a single framework to develop new
+ tools and we can continue to support systems that don't have a complete
+ OpenGL stack.
+
+**Dependencies**
+- [Tool framework](http://www.ohwr.org/projects/cern-kicad/wiki/WorkPackages)
+
+**Status**
+- No progress
+
+## Unified Geometry Library ## {#geometry_lib}
+**Goal:**
+
+Select a single geometry library so that all applications share a common
+base for 2D objects. Remove any redundant geometry libraries and code to
+clean up code base.
+
+**Task:**
+- Select the best geometry library (Boost, etc.) for the task.
+- Port all legacy geometry code to the selected library.
+- Remove any unused geometry library code.
+
+**Dependencies:**
+- None
+
+**Status:**
+- In progress as part of push and shove router.
+
+## Conversion to wxWidgets 3 ## {#wxwidgets3}
+**Goal:**
+
+Stop supporting the version 2 branch of wxWidgets so that newer features
+provided by version 3 can be utilized.
+
+**Task:**
+- Make wxWidgets 3 a build requirement.
+- Remove all wxWidgets 2 specific code.
+
+**Dependencies:**
+- wxWidgets 3 is widely available on Linux distributions.
+
+**Status:**
+- Build now requires 3.0.0 or greater.
+
+## Linux Printing Improvements ## {#linux_print}
+**Goal:**
+
+Bring printing on Linux up to par with printing on Windows.
+
+**Task:**
+- Resolve Linux printing issues.
+
+**Dependencies**
+- [wxWidgets 3](#wxwidgets3)
+
+**Status**
+- No progress.
+
+## Object Properties and Introspection ## {#object_props}
+**Goal:**
+
+Provide an object introspection system using properties.
+
+**Task:**
+- Select existing or develop property system.
+- Add definable properties to base objects.
+- Create introspection framework for manipulating object properties.
+- Serialization of properties to and from files and/or other I/O structures.
+- Create tool to edit property name/type/value table.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Dynamic Library Plugin ## {#plugin_base}
+**Goal:**
+
+Create a base library plugin for handling external file I/O. This will allow
+plugins to be provided that are external to the project such as providing solid
+model file support (STEP, IGES, etc.) using OpenCascade without making it a
+project dependency.
+
+**Task:**
+- Create a plugin to handle dynamically registered plugins for loading and
+ saving file formats.
+- This object should be flexible enough to be extended for handling all file
+ plugin types including schematic, board, footprint library, component
+ library, etc.
+- See [blueprint](https://blueprints.launchpad.net/kicad/+spec/pluggable-file-io)
+ on Launchpad for more information.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+
+# KiCad: Application Launcher # {#kicad}
+This section applies to the source code for the KiCad application launcher.
+
+
+# Eeschema: Schematic Editor # {#eeschema}
+This section applies to the source code for the Eeschema schematic editor.
+
+## Coherent SCHEMATIC Object ## {#sch_object}
+**Goal:**
+
+Clean up the code related to the schematic object(s) into a coherent object for
+managing and manipulating the schematic.
+
+**Task:**
+- Move most if not all of the code from SCH_SCREEN to the new SCHEMATIC object.
+- Add any missing functionality to the SCHEMATIC object.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Hierarchical Sheet Design ## {#hierarchy_fix}
+**Goal:**
+
+Create a more robust sheet instance design rather than recreating them on the
+fly every time sheet information is required.
+
+**Task:**
+- Choose a data structure to contain the sheet hierarchy.
+- Create helper class to manipulate the hierarchy data structure.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Schematic and Component Library Plugin ## {#sch_plugin}
+**Goal:**
+Create a plugin manager for loading and saving schematics and component
+libraries similar to the board plugin manager.
+
+**Task:**
+- Design plugin manager for schematics and component libraries.
+- Port the current schematic and component library file formats to use the
+ plugin.
+
+**Dependencies:**
+- [Dynamic library plugin](#plugin_base)
+
+**Status:**
+- No progress.
+
+## Graphics Abstraction Layer Conversion ## {#sch_gal}
+**Goal:**
+
+Take advantage of advanced graphics rendering in Eeschema.
+
+**Task:**
+- Port graphics rendering to GAL.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Port Editing Tools ## {#sch_tool_framework}
+**Goal:**
+
+Use standard tool framework across all applications.
+
+**Task:**
+- Rewrite editing tools using the new tool framework.
+
+**Dependencies:**
+- [GAL port](#sch_gal).
+
+**Status:**
+- No progress.
+
+## S-Expression File Format ## {#sch_sexpr}
+**Goal:**
+
+Make schematic file format more readable, add new features, and take advantage
+of the s-expression capability used in Pcbnew.
+
+**Task:**
+- Finalize feature set and file format.
+- Discuss the possibility of dropping the unit-less proposal temporarily to get
+ the s-expression file format and SWEET library format implemented without
+ completely rewriting Eeschema.
+- Add new s-expression file format to plugin.
+
+**Dependencies:**
+- [Dynamic library plugin](#plugin_base).
+
+**Status:**
+- File format document nearly complete.
+
+## Implement Sweet Component Libraries ## {#sch_sweet}
+**Goal:**
+
+Make component library design more robust and feature rich. Use s-expressions
+to make component library files more readable.
+
+**Task:**
+- Use sweet component file format for component libraries.
+
+**Dependencies:**
+- [S-expression file format](#sch_sexpr).
+
+**Status:**
+- Initial SWEET library written.
+
+## Component Library Editor Improvements ## {#lib_editor_usability}
+**Goal:**
+
+Make editing components with multiple units and/or alternate graphical
+representations easier.
+
+**Task:**
+- Determine usability improvements in the library editor for components with
+ multiple units and/or alternate graphical representations.
+- Implement said useability improvements.
+
+**Dependencies:**
+- None.
+
+**Status:**
+- No progress.
+
+## Component and Netlist Attributes ## {#netlist_attributes}
+**Goal:**
+Provide a method of passing information to other tools via the net list.
+
+**Task:**
+- Add virtual components and attributes to netlist to define properties that
+ can be used by other tools besides the board editor.
+
+**Dependencies:**
+- [S-expression schematic file format](#sch_sexpr).
+
+**Status:**
+- No progress.
+
+## Net Highlighting ## {#sch_net_highlight}
+**Goal:**
+Highlight wires, buses, and junctions when corresponding net in Pcbnew is selected.
+
+**Task:**
+- Add communications link to handle net selection from Pcbnew.
+- Implement highlight algorithm for net objects.
+- Highlight objects connected to net selected in Pcbnew.
+
+**Dependencies:**
+- [GAL port, maybe](#sch_gal).
+
+**Status:**
+- No progress.
+
+# CvPcb: Footprint Association Tool # {#cvpcb}
+This section covers the source code of the footprint assignment tool CvPcb.
+
+## Footprint Assignment Tool ##
+**Goal:**
+
+Merge the footprint assignment functionality of CvPcb into Eeschema so
+footprints can be assigned inside the schematic editor eliminating the need
+to launch an separate program.
+
+**Task:**
+- Merge footprint assignment capability into Pcbnew shared library.
+- Remove CvPcb as a stand alone tool.
+- Add functionality to both the schematic and board editors so users can assign
+ footprints as they prefer.
+
+**Dependencies:**
+- [Convert to a single process application](#kiway).
+
+**Status:**
+- Initial library conversion committed to product branch.
+
+
+# Pcbnew: Circuit Board Editor # {#pcbnew}
+This section covers the source code of the board editing application Pcbnew.
+
+## Tool Framework ## {#pcb_tool_framework}
+**Goal:**
+
+Unify all board editing tools under a single framework.
+
+**Task:**
+- Complete porting of all board editing tools to new tool framework so they
+ are available in the OpenGL and Cairo canvases.
+- Remove all duplicate legacy editing tools.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Initial porting work in progress.
+
+## Linked Objects ## {#pcb_linked_objects}
+**Goal:**
+
+Provide a way to allow external objects such as footprints to be externally
+linked in the board file so that changes in the footprint are automatically
+updated. This will all a one to many object relationship which can pave the
+way for real board modules.
+
+**Task:**
+- Add externally and internally linked objects to the file format to allow for
+ footprints and/or other board objects to be shared (one to many relationship)
+ instead of only supporting embedded objects (one to one relationship) that
+ can only be edited in place.
+
+**Dependencies:**
+- None.
+
+**Status:**
+- No progress.
+
+## Modeling ## {#modeling}
+**Goal:**
+
+Provide improved solid modeling support for KiCad including the file formats
+available in OpenCascade.
+
+**Task:**
+- Design plugin architecture to handle loading and saving 3D models.
+- Back port existing 3D formats (IDF and S3D) to plugin
+- Add STEP 3D modeling capability.
+- Add IGES 3D modeling capability.
+
+**Dependencies:**
+- [Dynamic library plugin](#plugin_base).
+
+**Status:**
+- No progress.
+
+## Push and Shove Router Improvements ## {#ps_router_improvements}
+**Goal:**
+Add features such as matched length and microwave tools to the P&S router.
+
+**Task:**
+- Determine which features are feasible.
+- Look at the recently opened FreeRouter code at
+ http://www.freerouting.net/fen/download/file.php?id=146 for inspiration.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Match trace length work in progress.
+
+## Layer Improvements ## {#pcb_layers}
+**Goal:**
+
+Increase the number of usable technical and user defined layers in Pcbnew.
+
+**Task:**
+- Extend the number of copper and mechanical layers.
+- Develop a type safe flag set template or adapt something already available.
+- Refactor Pcbnew code to use new flag and remove the 32 layer limitation.
+- Extend the board file format to handle the additional layers.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Work complete on 32 copper and 32 technical layers is complete.
+
+## Pin and Part Swapping ## {#pcb_drc}
+**Goal:**
+
+Allow Pcbnew to perform pin and/or part swapping during layout so the user
+does not have to do it in Eeschema and re-import the net list.
+
+**Task:**
+- Provide forward and back annotation between the schematic and board editors.
+- Define netlist file format changes required to handle pin/part swapping.
+- Update netlist file formatter and parser to handle file format changes.
+- Develop a netlist comparison engine that will produce a netlist diff that
+ can be passed between the schematic and board editors.
+- Create pin/part swap dialog to manipulate swappable pins and parts.
+- Add support to handle net label back annotation changes.
+
+**Dependencies:**
+- [S-expression schematic file format](#sch_sexpr).
+- [Convert to a single process application](#kiway).
+
+**Status:**
+- No progress.
+
+## Intelligent Selection Tool ## {#pcb_selection_tool}
+**Goal:**
+
+Make the selection tool easier for the user to determine which object(s) are
+being selected.
+
+**Task:**
+- Determine and define the actual desired behavior.
+- Improve ambiguous selections when multiple items are under the cursor or in
+ the selection bounding box.
+
+**Dependencies:**
+- Tool framework.
+- Unified geometry library.
+
+**Status:**
+- Initial design committed to product branch.
+
+## Clipboard Support ## {#fp_edit_clipboard}
+**Goal:**
+
+Provide clipboard cut and paste for footprints..
+
+**Task:**
+- Clipboard cut and paste to and from clipboard of footprints in footprint
+ editor.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Design Rule Check (DRC) Improvements. ## {#drc_improvements}
+**Goal:**
+
+Create additional DRC tests for improved error checking.
+
+**Task:**
+- Replace geometry code with [unified geometry library](#geometry_lib).
+- Remove floating point code from clearance calculations to prevent rounding
+ errors.
+- Add checks for component, silk screen, and mask clearances.
+- Add checks for keep out zones.
+- Remove DRC related limitations such as no arc or text on copper layers.
+- Add option for saving and loading DRC options.
+
+**Dependencies:**
+- [Unified geometry library.](#geometry_lib)
+
+**Progress:**
+- Planning
+
+## Segment End Point Snapping. ## {#segment_snapping}
+**Goal:**
+
+It is not uncommon for board edge segment end points to inadvertently not
+be closed causing issues for the 3D viewer and exporting to different file
+formats due the board outline not being a fully enclosed polygon. This
+feature would add segment end snapping support to allow the board outline
+to be fully enclosed. This feature would only need to be supported by the
+GAL rendering.
+
+**Tasks**
+- Mark board edge segment ends with a drag indicator to make it visible to the
+ user that the segment end does not have an endpoint with any other board edge
+ segment.
+- Allow the user to smap the unconnected segment end to the nearest segment end
+ point.
+- Automatically connect unconnected segments with and additional segment when
+ opening the 3D viewer or exporting the board to another format. Warn the
+ user that an addition segment has be added and should be verified.
+
+**Dependencies:**
+- None
+
+**Progress:**
+- Initial discussion.
+
+## Keepout Zones. ## {#keepout_zones}
+**Goal:**
+
+Add support for keepout zones on boards and footprints.
+
+**Task:**
+- Add keepout support to zone classes.
+- Add keepout zone support to board editor.
+- Add keepout zone support to library editor.
+
+**Dependencies:**
+- [DRC Improvements.](#drc_improvements)
+
+**Progress:**
+- Planning
+
+
+## Gerber File Attributes ## {#gerber_attributes}
+**Goal:**
+
+Add file attributes to gerber files for defining layer stacks. See
+[this](http://www.ucamco.com/files/downloads/file/5/Extending_the_Gerber_Format_with_Attributes.pdf)
+document and [this](http://www.ucamco.com/files/downloads/file/22/Kick_Starting_a_Revolution_IPC-2581_Meets_Gerber.pdf)
+document for more information.
+
+**Task:**
+- Implement gerber file attributes as an optional setting when plotting gerber
+ files.
+
+**Dependencies:**
+- None
+
+**Progress:**
+- Done both in Pcbnew and Gerbview.
+
+## Net Highlighting ## {#pcb_net_highlight}
+**Goal:**
+Highlight rats nest links and/or traces when corresponding net in Eeschema is selected.
+
+**Task:**
+- Add communications link to handle net selection from Eeschema.
+- Implement highlight algorithm for objects connected to the selected net.
+- Highlight objects connected to net selected in Eeschema
+
+**Dependencies:**
+- None.
+
+**Status:**
+- No progress.
+
+
+# GerbView: Gerber File Viewer # {#gerbview}
+
+This section covers the source code for the GerbView gerber file viewer.
+
+## Graphics Abstraction Layer ## {#gerbview_gal}
+**Goal:**
+
+Graphics rendering unification.
+
+**Task:**
+- Port graphics rendering layer to GAL.
+
+**Dependencies:**
+- None.
+
+**Status**
+- No progress.
+
+# Documentation # {#documentation}
+This section defines the tasks for both the user and developer documentation.
+
+## Conversion to Markup/down Format ## {#doc_format}
+**Goal:**
+
+Make documentation more VCS friendly and separate document content and
+formatting for more uniform formatting across all user documentation.
+
+**Task:**
+- Convert the documentation to a mark up/down language to reduce the VCS
+ footprint, to be able to actually use the VCS to see what changed, and
+ improve the formatting consistency.
+
+**Dependencies:**
+- None
+
+**Status:**
+- Started with this document.
+
+## Grammar Check ## {#doc_grammar}
+**Goal:**
+
+Improve user documentation readability and make life easier to for translators.
+
+**Task:**
+- Review and revise all of the English documentation so that it is update with
+ the current functionality of the code.
+- Translate the update documentation into other languages.
+
+**Dependencies:**
+- None
+
+**Status:**
+- No progress.
+
+## Maintenance ## {#doc_maintenance}
+**Task:**
+- Keep screen shots current with the source changes.
+
+**Dependencies:**
+- None.
+
+**Status:**
+- No progress.
+
+## Convert Developer Documentation to Markup/down Format ## {#dev_doc_format}
+**Goal:**
+
+Improve developers documentation to make life easier for new developers to get
+involved with the project.
+
+**Task:**
+- Convert platform build instructions from plain text to new format to be
+ merged with the developer documentation.
+- Convert how to contribute to KiCad instructions from plain text to the new
+ format to merged with the developer documentation.
+
+**Dependencies:**
+- None.
+
+**Status:**
+- No progress.
+
+
+# Unit Testing # {#unittest}
+**Goal:**
+
+Improve the quality of KiCad and ensure changes do no break existing
+capabilities.
+
+**Task:**
+- Explore the possibility of including a C++ unit test framework in addition
+ to the existing Python framework.
+- Create robust enough test coverage to determine if code changes break any
+ core functionality.
+
+**Dependencies:**
+- Completion of the initial release of this document.
+
+**Status:**
+- In progress.
+
+
+# Circuit Simulation # {#simulation}
+**Goal:**
+
+Provide quality circuit simulation capabilities similar to commercial products.
+
+**Task:**
+- Evaluate and select simulation library (spice, gnucap, qucs, etc).
+- Evaluate and select plotting library with wxWidgets support.
+- Confirm current spice netlist export is up to the task and add missing
+ support for simulations.
+- Use plotting library to handle simulator output in a consistent manor similar
+ to LTSpice.
+- Develop a tool that allows fine tuning of components on the fly.
+- Use plugin for the simulation code to allow support of different simulation
+ libraries.
+- Create a library of simulation components such as voltage source, current
+ source, current probe, etc.
+
+**Dependencies:**
+- [Dynamic library plugin](#plugin_base).
+
+**Status:**
+- No progress.
diff --git a/Documentation/development/stable-release-policy.md b/Documentation/development/stable-release-policy.md
new file mode 100644
index 0000000..556b20e
--- /dev/null
+++ b/Documentation/development/stable-release-policy.md
@@ -0,0 +1,80 @@
+# Stable Release Policy #
+
+This document defines the project requirements that must be satisfied in order to create a new
+stable release of the KiCad project. It is designed to be a reference for developers and user's
+so that both groups expectations are understood. This document is only to be modified by the
+project leader or at the request of the project leader. It should be noted that this policy is
+not cast in stone and at any time in the future, should the decision be made by the project at
+large that it can be revised to suit the ongoing needs of the project and it's users.
+
+The current release policy is to support the concept of a lightweight stable release. The goal
+is to provide regular stable releases of KiCad without the burden of trying to provide long term
+support of a full stable release branch. Therefore, once a new release is created, the only
+patches that will be made to the stable release branch will be for bugs that cause KiCad to crash
+or possible corruption and/or loss of data. No other changes from the current development branch
+will be backported to the last stable release by the project.
+
+[TOC]
+
+# Stable Release Interval # {#stable_release_interval}
+
+The criteria required for new stable releases is based on the developers decision that enough
+new features and/or improvements have been made to the current development branch to justify a
+new stable release. This decision is completely discretionary and can be proposed at any time
+by any developer on the KiCad developers mailing list. Once a request for a new stable release
+is made, a consensus must be reached by the primary developers to proceed with the release with
+the final decision and announcement being made by the project leader.
+
+
+# Feature Freeze # {#feature_freeze}
+
+Once the announcement has been made that a new stable release is in effect, the current
+development branch is frozen. No new features or potentially disruptive core code changes can
+be committed with out approval of the primary developers and/or the project leader.
+
+# Bug Fixing # {#bug_fixing}
+
+After the development branch has been frozen, work will continue to fix bugs reported against
+the development branch. Bugs will be prioritized based on their severity. All bugs that cause
+KiCad to crash or cause loss and/or corruption of data must be fixed. All other bugs must be
+evaluated to see if they fit into the scope of the stable release. All bugs that fit into the
+scope of the stable release will be tagged and must be fixed. All other bugs will be tagged for
+the next stable release and fixed when it is convenient. Once the stable release is officially
+announced, the bugs tagged as "Fix Committed" that are relevant to the stable release will be
+changed to "Fix Released".
+
+# User Documentation # {#user_docs}
+
+The user documentation will be updated to reflect the current changes in the code. This includes
+all new features, any behavioral changes to existing features, and all screen shots as required.
+Completion of the English version of the user documentation is minimum that is required for
+release. Foreign language translations can be released at any time as the become available.
+
+# Stable Release Series Branch # {#stable_branch}
+
+Once the primary developers decide that the stable release criteria has been met, a new series
+branch will be created from the current product branch on Launchpad. At this time the freeze
+will be removed from the product branch and normal development can resume. The stable release
+version will be incremented from the previous stable release and tagged in the stable release
+branch build configuration.
+
+# System Installers # {#system_installers}
+
+To proved the best user experience for platforms that do not have package managers, full system
+installers will be provided. Currently this only pertains to Windows and OSX. The full system
+installers will include all KiCad binary files, all binary library dependencies, user
+documentation, component libraries, 3D model libraries, demo project files, and project template
+files. Optionally, the footprint libraries can be included for users who prefer not us use the
+GitHub plugin.
+
+# Source Archives # {#source_archives}
+
+To provide a convenient method for system packagers to build KiCad from known stable sources,
+source archives in the most common formats along with the resulting md5sum checksum will be
+added to either the KiCad developer's site on Launchpad or the main website at www.kicad-pcb.org.
+
+# Stable Release Announcement # {#announcement}
+
+Once all of the above tasks have been completed, the project leader will post an announcement on
+the developers mailing list and the Launchpad site. This announcement should include a list of
+new features and improvements made since the previous stable release.
diff --git a/Documentation/guidelines/UIpolicies.txt b/Documentation/guidelines/UIpolicies.txt
new file mode 100644
index 0000000..98a2c18
--- /dev/null
+++ b/Documentation/guidelines/UIpolicies.txt
@@ -0,0 +1,85 @@
+
+** General UI Guidelines for KiCad Development
+
+
+Capitalization:
+
+ For any visible text used within KiCad, follow recommendations here:
+ http://developer.gnome.org/hig-book/stable/design-text-labels.html.en
+ in the "Capitalization" section. This applies to all Menus, Titles,
+ Labels, Tooltips, Buttons, etc.
+
+ The capitalization for the application names is KiCad, Eeschema, CvPcb,
+ GerbView, and Pcbnew. All strings that have application names that are
+ visible to the user should be capitalized this way. It's also a good
+ idea use this capitalization in source code comments as well to prevent
+ confusion of new contributors.
+
+
+Dialogs:
+
+ Follow the recommendations here:
+
+ http://developer.gnome.org/hig-book/stable/design-window.html.en
+ paying particular attention to "initial focus", "sensible default values",
+ "default buttons", ESC key termination. Please note that the escape key
+ termination only works properly if there is a dialog button defined with
+ an ID of wxID_CANCEL or SetEscapeID( MY_ESCAPE_BUTTON_ID ) is called during
+ dialog initialization. The former is the preferred method for handling
+ escape key dialog termination. There is a checkbox in wxformbuilder for
+ the "default" control, and this is the one fired when the "enter" key
+ is pressed.
+
+ Use wxWidgets "sizers" in all dialogs, no matter how simple they are:
+ http://zetcode.com/tutorials/wxwidgetstutorial/layoutmanagement
+ and keep dialogs resizeable.
+
+ Configure the sizers so that as the dialog window is expanded, the most
+ sensible use of the increased dialog window occurs automatically by the
+ sizers. For example, in the DRC dialog of Pcbnew, sizers should be used to
+ expand the text control to use the full available free window area, so that
+ the user's view of the items in the text control is maximized as he/she
+ expands the dialog window, making it easier to read more DRC error messages.
+ In other dialogs without one component more important than the others, the
+ sizers might be configured to position the controls to sensible positions
+ near the perimeter of the increasingly larger dialog box, not necessarily
+ leaving them all bundled tightly together. The dialog box should look
+ nice at any size large enough to show all the components.
+
+ When using wxFormBuilder, please add the following settings to the
+ "Dialog" node:
+ subclass.name <- DIALOG_SHIM
+ subclass.header <- dialog_shim.h
+
+ This will provide for an override of the Show( bool ) wxWindow() function
+ and provide retentitive size and position for the session.
+
+ Use tooltips to explain the functionality of each non-obvious control.
+ This is important because the help files and the wiki often lag behind
+ the source code.
+
+ Avoid defining initial dialog sizes if possible. Let the sizers do their
+ job. After the dialog is fit to the sizers, set the minimum size to the
+ current size to prevent the dialog controls from being obscured when
+ resizing the dialog. If the labels or text of the dialog controls are,
+ set or changed at run time. Rerun wxWindow::Fit() to allow the dialog to
+ re-size and adjust for the new control widths. This can all be done after
+ the dialog is created but before it is shown or use class methods to
+ re-size the dialog as required. Reset the minimum size to the updated
+ dialog size.
+
+ Dialog windows shall not exceed 1024 x 768 when displayed in a 13 point font.
+ Note that the font used by end users is not something that you control from
+ within the dialog, but for testing purposes please do not exceed this dialog
+ size should the user have selected a font size of 13 points.
+
+Quoting:
+ Filenames, paths or other text should be with single quotes ''. e.g.:
+ 'filename.kicad_pcb'
+ 'longpath/subdir'
+ 'FOOTPRINTNAME'
+ 'anything else'
+
+ Often text strings like this end up in panels which use HTML rendering, and this
+ can happen in the future. Previously used angle brackets only cause grief there.
+
diff --git a/Documentation/interactive_router/build.sh b/Documentation/interactive_router/build.sh
new file mode 100644
index 0000000..4d44c89
--- /dev/null
+++ b/Documentation/interactive_router/build.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+pandoc -f markdown_mmd -t html interactive_router.mmd > interactive_router.html
+pandoc -f markdown_mmd -t latex interactive_router.mmd > tmp.tex
+pdflatex interactive_router.tex \ No newline at end of file
diff --git a/Documentation/interactive_router/interactive_router.mmd b/Documentation/interactive_router/interactive_router.mmd
new file mode 100644
index 0000000..573a481
--- /dev/null
+++ b/Documentation/interactive_router/interactive_router.mmd
@@ -0,0 +1,73 @@
+# Interactive Router #
+
+The Interactive Router lets you quickly and efficient route your PCBs by shoving off or walking around items on the PCB that collide with the trace you are currently drawing.
+
+Following modes are supported:
+
+- **Shove**, attempting to push and shove all items colliding with the currently routed track.
+- **Walk around**, trying to avoid obstacles by hugging/walking around them.
+- **Highlight collisions** which highlights all violating objects with a nice, shiny green color and shows violating clearance regions.
+
+
+## Setting up ##
+
+Before using the Interactive Router, please set up these two things:
+- Clearance settings. To set the clearances, open the *Design Rules* dialog and make sure at least the default clearance
+value looks sensible.
+
+- Enable OpenGL mode by selecting *View->Switch canvas to OpenGL* menu option or pressing **F11**.
+
+![Screenshot](pictures/opengl_menu.png)
+
+## Laying out tracks ##
+
+To activate the router tool press the *Interactive Router* button ![Interactive Router Button](pictures/route_icon.png) or the **X** key.
+The cursor will turn into a cross and the tool name, will appear in the status bar.
+
+To start a track, click on any item (a pad, track or a via) or press the **X** key again hovering the mouse over that item.
+The new track will use the net of the starting item. Clicking or pressing **X** on empty PCB space starts a track with no net assigned.
+
+Move the mouse to define shape of the track. The router will try to follow mouse trail, hugging unmovable obstacles
+(such as pads) and shoving colliding traces/vias, depending on the mode. Retreating mouse cursor will cause the shoved items to spring back
+to their former locations.
+
+Clicking on a pad/track/via in the same net finishes routing. Clicking in empty space fixes the segments routed so far and continues routing the trace.
+
+In order to stop routing and undo all changes (shoved items, etc.), simply press **Esc**.
+
+Pressing **V** or selecting *Place Through Via* from the context menu while routing a track attaches a via at the end of the trace being routed.
+Pressing **V** again disables via placement. Clicking in any spot establishes the via and continues routing.
+
+Pressing **/** or selecting *Switch Track Posture* from the context menu toggles the direction of the initial track segment between straight or diagonal.
+
+**Note**: By default, the router snaps to centers/axes of the items. Snapping can be disabled by holding **Shift** while routing or selecting items.
+
+## Setting track widths and via sizes ##
+
+There are several ways to pre-select a track width/via size or to change it during routing:
+- Use standard Kicad shortcuts.
+- Press **W** or select *Custom Track Width* from the context menu to type in a custom width/via size.
+- Pick a predefined width from the *Select Track Width* sub-menu of the context menu.
+- Select *Use the starting track width* in the *Select Track Width* menu to pick the width from the start item (or the traces already connected to it).
+
+## Dragging ##
+
+The router can drag track segments, corners and vias. To drag an item, click on it with **Ctrl** key pressed, hover the mouse and press **G** or select *Drag Track/Via* from the context menu.
+Finish dragging by clicking again or abort by pressing *Esc*.
+
+## Options ##
+
+The router behavior be configured by pressing *E* or selecting *Routing Options* from the context menu. It opens a window like the one below:
+
+![Screenshot](pictures/router_options.png)
+
+The options are:
+
+- **Mode** - select how the router handles DRC violation (shoving, walking around, etc.)
+- **Shove vias** - when disabled, vias are treated as un-movable objects and hugged instead of shoved.
+- **Jump over obstacles** - when enabled, the router tries to move colliding traces behind solid obstacles (e.g. pads) instead of "reflecting" back the collision
+- **Remove redundant tracks** - removes loops while routing (e.g. if the new track ensures same connectivity as an already existing one, the old track is removed). Loop removal works locally (only between the start and end of the currently routed trace).
+- **Automatic neckdown** - when enabled, the router tries to break out pads/vias in a clean way, avoiding acute angles and jagged breakout traces.
+- **Smooth dragged segments** - when enabled, the router attempts to merge several jagged segments into a single straight one (dragging mode).
+- **Allow DRC violations** (*Highlight collisions* mode only) - allows to establish a track even if is violating the DRC rules.
+- **Optimizer effort** - defines how much time the router shall spend optimizing the routed/shoved traces. More effort means cleaner routing (but slower), less effort means faster routing but somewhat jagged traces.
diff --git a/Documentation/interactive_router/pictures/opengl_menu.png b/Documentation/interactive_router/pictures/opengl_menu.png
new file mode 100644
index 0000000..cd6decb
--- /dev/null
+++ b/Documentation/interactive_router/pictures/opengl_menu.png
Binary files differ
diff --git a/Documentation/interactive_router/pictures/route_icon.png b/Documentation/interactive_router/pictures/route_icon.png
new file mode 100644
index 0000000..c87ac05
--- /dev/null
+++ b/Documentation/interactive_router/pictures/route_icon.png
Binary files differ
diff --git a/Documentation/interactive_router/pictures/router_options.png b/Documentation/interactive_router/pictures/router_options.png
new file mode 100644
index 0000000..9eaecf4
--- /dev/null
+++ b/Documentation/interactive_router/pictures/router_options.png
Binary files differ
diff --git a/Documentation/interactive_router/pictures/rules_editor.png b/Documentation/interactive_router/pictures/rules_editor.png
new file mode 100644
index 0000000..277e7a2
--- /dev/null
+++ b/Documentation/interactive_router/pictures/rules_editor.png
Binary files differ
diff --git a/Documentation/notes_about_pcbnew_new_file_format.odt b/Documentation/notes_about_pcbnew_new_file_format.odt
new file mode 100644
index 0000000..9616f2b
--- /dev/null
+++ b/Documentation/notes_about_pcbnew_new_file_format.odt
Binary files differ
diff --git a/Documentation/rules_for_capitalization_in_Kicad_UI.txt b/Documentation/rules_for_capitalization_in_Kicad_UI.txt
new file mode 100644
index 0000000..f3f1458
--- /dev/null
+++ b/Documentation/rules_for_capitalization_in_Kicad_UI.txt
@@ -0,0 +1,48 @@
+Gnome rules, used in Kicad:
+
+8.3.2. Capitalization
+
+Two styles of capitalization are used in GNOME user interface elements:
+
+Header capitalization
+ Capitalize all words in the element, with the following exceptions:
+ Articles: a, an, the.
+ Conjunctions: and, but, for, not, so, yet ...
+ Prepositions of three or fewer letters: at, for, by, in, to ...
+
+Sentence capitalization
+ Capitalize the first letter of the first word, and any other words normally capitalized in sentences,
+ such as application names.
+
+The following table indicates the capitalization style to use for each type of user interface element.
+Table 8-3 Capitalization Style Guidelines for User Interface Elements
+
+Element Style
+
+Check box labels Sentence
+Command button labels Header
+Column heading labels Header
+Desktop background object labels Header
+Dialog messages Sentence
+Drop-down combination box labels Sentence
+Drop-down list box labels Sentence
+Field labels Sentence
+Filenames Sentence
+Graphic equivalent text:
+for example, Alt text on web pages Sentence
+Group box or frame labels Header
+Items in drop-down combination boxes,
+drop-down list boxes, and list boxes Sentence
+List box labels Sentence
+Menu items Header
+Menu items in applications Header
+Menu titles in applications Header
+Radio button labels Sentence
+Slider labels Sentence
+Spin box labels Sentence
+Tabbed section titles Header
+Text box labels Sentence
+Titlebar labels Header
+Toolbar button labels Header
+Tooltips Sentence
+Webpage titles and navigational elements Header
diff --git a/Documentation/s-expressions.txt b/Documentation/s-expressions.txt
new file mode 100644
index 0000000..35bf29a
--- /dev/null
+++ b/Documentation/s-expressions.txt
@@ -0,0 +1,89 @@
+
+S-Expression Support in Kicad
+============================================================================
+Author: Dick Hollenbeck
+Date: Jan 2011
+
+
+An s-expression is a text stream or string, in the same vain as XML, consisting
+of a sequence of elements. Each element is either an atom or list. An atom
+corresponds to a string, while a list corresponds to an s-expression. The
+following grammar represents our definition of an s-expression:
+
+sexpr ::= ( sx )
+sx ::= atom sxtail | sexpr sxtail | NULL
+sxtail ::= sx | NULL
+atom :: quoted | value
+quoted :: "ws_string"
+value :: nws_string
+
+An atom can either be a quoted string, which is a string containing whitespace
+surrounded by double quotes, or a non-whitespace string that does not require
+surrounding quotes.
+
+The s-expression syntax used in Kicad uses two quoting/syntax strategies, given
+by the needs of the Specctra DSN specification and of our own non-specctra
+needs. The Specctra DSN specification is not very clear with regard to quoting
+and on top of that there is Freerouter's interpretation, which would actually
+supercede anything in the Specctra DSN spec anyway, due to a desire to be
+compatible with Freerouter.
+
+We have our own needs, which go beyond those of the Specctra DSN spec, so we
+support the two syntaxes or quoting protocols for quoted atoms:
+
+1) Specctra quoting protocol (specctraMode)
+2) Kicad quoting protocol (non-specctraMode)
+
+We can control our own destiny better by having a separately defined mode for
+non Specctra DSN files.
+
+To summarize, in specctraMode Freerouter dictates to us what we need to do. In
+non-specctraMode, which can be thought of as Kicad mode, we have our own quoting
+protocol and can make changes without breaking the specctraMode.
+
+There needs to be agreement between how a file is saved, and how a file is read
+back in, in either mode, to fulfill the round-tripping requirements. A file
+written using one mode may not necessarily be readable using the other mode,
+although it might be. Just don't count on it.
+
+
+In Kicad mode:
+
+OUTPUTFORMATTER::Quoted() is the tool to wrap s-expression atoms.
+DSNLEXER::NexTok() is basically the inverse function, and reads tokens back in.
+These two must agree, so that what is written out comes back in un-altered.
+
+The decision to wrap the string or not is left to the Quoted() function. If the
+string is wrapped, it will also escape internal double quotes, \n's and \r's.
+Any null string is wrapped in quotes, and so is any string which starts with
+'#', so that it is not confused with an s-expression comment.
+
+
+Kicad S-expression Syntax and Quoting Protocol (non-specctraMode):
+==================================================================
+
+*) Some atoms are considered keywords, and constitute a grammar superimposed on
+the s-expressions. All keywords are ASCII and lowercase. International characters
+are not to be used here.
+
+*) All Kicad s-expression files are saved using a UTF8 encoding and should
+support any international characters in the atoms which are not keywords.
+
+*) DSNLEXER::NextTok() requires that any token be on a single line of input. If
+you want to save a multi-line string, Quoted() will automatically escape the \n
+or \r for you and put the output on a single line. It should round-trip fine.
+
+*) There can be escape sequences in a quoted string only. Escape sequences allow
+foreign tools to generate byte patterns in the input stream. C style 2 byte hex
+codes are supported, and so are 3 byte octal escape sequences. See
+DSNLEXER::NextTok() for the full list of escape sequences, by searching file
+dsnlexer.cpp for the string "ESCAPE SEQUENCES". Any use of the escape mechanism
+must still produce UTF-8 encoded text after the escape handling is applied.
+
+*) Just because an escape sequence is supported on input, does not mean that
+OUTPUTFORMATTER::Quoted() must generate such an escape sequence for output. For
+example, having true tabs in the s-expression file is OK. So that will not be
+escaped on output. Other similar cases exist.
+
+*) Backslash is the escape byte.
+
diff --git a/Documentation/wxWidgets_patch_notes.txt b/Documentation/wxWidgets_patch_notes.txt
new file mode 100644
index 0000000..9b825de
--- /dev/null
+++ b/Documentation/wxWidgets_patch_notes.txt
@@ -0,0 +1,20 @@
+--== notes about wxWidgets problems ==--
+Last Revised: 02-jul-2015
+
+Kicad needs wxWidgets, the multi platform G.U.I toolkit.
+
+use *only* wxWidgets
+>= 3.0.1 On Windows
+>= 3.0.2 on Linux (prevision versions have bugs which crash Kicad)
+>= 3.0.2 on OSX (which need patches: see patches/wxwidgets-3.0.0_macosx_xxx)
+
+Known bug on Windows:
+Postscript printers print tracks like thin line.
+It happens only for PS drivers, and PDF printer.
+Other drivers (PCL for instance) work fine,
+so it is unlikely a bug inside Kicad/wxWidgets
+
+On 3.0.2 Window version 64 bits:
+The mirror mode gives a blank sheet.
+This is a bug in wxWidgets 3.0.2
+wxWidgets 3.0.2 must be patched (see patches/wxWidgets-3.0.2-msw-dc-orientation-fix.patch) and rebuilt.