← Back to team overview

kicad-developers team mailing list archive

Re: [FEATURE] Add keepout areas in footprints

 

JP,

Thanks for that patch, it seems to work very well.

I have applied it to my patch-set and verified that undo/redo now works in
both modedit and pcbnew!

I have now also made the following change:

1. In modedit, a keepout zone is placed on ALL copper layers (no choice
available for user).
2. Once inserted into a board, user can select and edit the zone, and
remove it from layers as they wish
3. User can also adjust zone boundaries in pcbnew
4. If footprint is "locked" you cannot select or edit the zone

You can  find entire patch-set reattached to this email.

Please let me know if you find any further issues with this feature.

Regards,
Oliver


On Fri, Oct 20, 2017 at 4:00 AM, jp charras <jp.charras@xxxxxxxxxx> wrote:

> Le 19/10/2017 à 17:26, Maciej Sumiński a écrit :
> > On 10/19/2017 05:20 PM, jp charras wrote:
> >> Le 19/10/2017 à 16:59, Maciej Sumiński a écrit :
> >>> On 10/19/2017 04:32 PM, jp charras wrote:
> >>> [snip]
> >>>> Hi Orson,
> >>>>
> >>>> Could you have a look into this patch?
> >>>> It fixes the issue when a change is committed with a item belonging a
> footprint.
> >>>>
> >>>> But I do not have very good knowledge of COMMIT classes.
> >>>
> >>> Hi Jean-Pierre,
> >>>
> >>> Thank you for looking into the problem. In the proposed patch
> >>> BOARD_COMMIT will try to save the item parent even for items that do
> not
> >>> belong to modules (e.g. tracks, vias), ending up with the whole board
> >>> stored in the undo buffer.
> >>
> >> In fact no: the parent is used only if it is a MODULE (due to the
> dynamic_cast)
> >
> > You are right, I realized it a bit too late.
> >
> >> However the patch can save many times the same MODULE, in
> >> COMMIT& BOARD_COMMIT::Stage( std::vector<EDA_ITEM*>& container,
> CHANGE_TYPE aChangeType )
> >> if the container contains many items of the same MODULE (perhaps no a
> major issue, but...).
> >
> > It should not be a problem, there is a countermeasure for such case in
> > COMMIT::createModified(), which normally is invoked by COMMIT::Stage().
> >
> >> The patch is not really finished, in fact.
> >
> > Now I see it is quite possible the patch might be complete. The only
> > thing I would suggest is to change dynamic_cast to checking
> > EDA_ITEM::Type() return value.
> >
>
> OK.
> This patch should work better, but need more tests.
>
> @Oliver
> Could you test this patch and fix other pending issues about keepout in
> footprints
>
> Thanks.
>
>
> --
> Jean-Pierre CHARRAS
>
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help   : https://help.launchpad.net/ListHelp
>
>
From a21ba62ea82f2fc83e3993eb17f0f207161e9255 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Mon, 9 Oct 2017 08:42:18 +1100
Subject: [PATCH 01/12] Add menu and toolbar icons

---
 pcbnew/menubar_modedit.cpp | 8 ++++++++
 pcbnew/pcbnew_id.h         | 1 +
 pcbnew/tool_modedit.cpp    | 6 ++++++
 3 files changed, 15 insertions(+)

diff --git a/pcbnew/menubar_modedit.cpp b/pcbnew/menubar_modedit.cpp
index 9b6be27..c48065a 100644
--- a/pcbnew/menubar_modedit.cpp
+++ b/pcbnew/menubar_modedit.cpp
@@ -311,6 +311,14 @@ void FOOTPRINT_EDIT_FRAME::ReCreateMenuBar()
 
     placeMenu->AppendSeparator();
 
+    // Keepout zone
+    AddMenuItem( placeMenu, ID_MODEDIT_KEEPOUT_TOOL,
+                _( "&Keepout" ), _( "Add keepout zone" ),
+                KiBitmap( add_keepout_area_xpm ) );
+
+
+    placeMenu->AppendSeparator();
+
     // Anchor
     AddMenuItem( placeMenu, ID_MODEDIT_ANCHOR_TOOL,
                  _( "A&nchor" ),
diff --git a/pcbnew/pcbnew_id.h b/pcbnew/pcbnew_id.h
index b4c25ff..bd86718 100644
--- a/pcbnew/pcbnew_id.h
+++ b/pcbnew/pcbnew_id.h
@@ -345,6 +345,7 @@ enum pcbnew_ids
     ID_MODEDIT_ARC_TOOL,
     ID_MODEDIT_POLYGON_TOOL,
     ID_MODEDIT_TEXT_TOOL,
+    ID_MODEDIT_KEEPOUT_TOOL,
     ID_MODEDIT_ANCHOR_TOOL,
     ID_MODEDIT_DELETE_TOOL,
     ID_MODEDIT_PLACE_GRID_COORD,
diff --git a/pcbnew/tool_modedit.cpp b/pcbnew/tool_modedit.cpp
index 7cea7be..f641905 100644
--- a/pcbnew/tool_modedit.cpp
+++ b/pcbnew/tool_modedit.cpp
@@ -186,6 +186,12 @@ void FOOTPRINT_EDIT_FRAME::ReCreateVToolbar()
                             _( "Add Text" ), wxITEM_CHECK );
 
     m_drawToolBar->AddSeparator();
+
+    m_drawToolBar->AddTool( ID_MODEDIT_KEEPOUT_TOOL, wxEmptyString, KiBitmap( add_keepout_area_xpm ),
+                            _( "Add keepout" ), wxITEM_CHECK );
+
+    m_drawToolBar->AddSeparator();
+
     m_drawToolBar->AddTool( ID_MODEDIT_ANCHOR_TOOL, wxEmptyString, KiBitmap( anchor_xpm ),
                             _( "Place footprint reference anchor" ),
                             wxITEM_CHECK );
-- 
2.7.4

From ca948a3a04e11706d40e6401f6203ba851393927 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Tue, 10 Oct 2017 22:58:31 +1100
Subject: [PATCH 02/12] Add zones to footprint

- Can draw keepout zone on F/B/Inner
- Invalid tool msg in Legacy view
- Save / Load zones in footprint (module) files
- Can add a footprint with a zone to a board
---
 pcbnew/board_item_container.h                     |   7 ++
 pcbnew/class_board.cpp                            |   5 -
 pcbnew/class_board.h                              |   5 +-
 pcbnew/class_module.cpp                           |  97 ++++++++++++++++++-
 pcbnew/class_module.h                             |  10 +-
 pcbnew/class_zone.cpp                             |   7 +-
 pcbnew/class_zone.h                               |   4 +-
 pcbnew/class_zone_settings.cpp                    |   1 +
 pcbnew/class_zone_settings.h                      |  10 +-
 pcbnew/dialogs/dialog_keepout_area_properties.cpp | 108 ++++++++++++++++++----
 pcbnew/kicad_plugin.cpp                           |  10 ++
 pcbnew/kicad_plugin.h                             |   3 +-
 pcbnew/modedit.cpp                                |   1 +
 pcbnew/modedit_onclick.cpp                        |   1 +
 pcbnew/pcb_parser.cpp                             |  17 +++-
 pcbnew/pcb_parser.h                               |   3 +-
 pcbnew/tools/drawing_tool.cpp                     |   2 +-
 pcbnew/tools/pcb_actions.cpp                      |   1 +
 pcbnew/tools/zone_create_helper.cpp               |  18 +++-
 19 files changed, 265 insertions(+), 45 deletions(-)

diff --git a/pcbnew/board_item_container.h b/pcbnew/board_item_container.h
index 011df4b..ef933de 100644
--- a/pcbnew/board_item_container.h
+++ b/pcbnew/board_item_container.h
@@ -28,6 +28,7 @@
 #define BOARD_ITEM_CONTAINER_H
 
 #include <class_board_item.h>
+#include <class_zone_settings.h>
 
 enum ADD_MODE { ADD_INSERT, ADD_APPEND };
 
@@ -70,6 +71,12 @@ public:
         Remove( aItem );
         delete aItem;
     }
+
+    const ZONE_SETTINGS& GetZoneSettings() const            { return m_zoneSettings; }
+    void SetZoneSettings( const ZONE_SETTINGS& aSettings )  { m_zoneSettings = aSettings; }
+
+protected:
+    ZONE_SETTINGS m_zoneSettings;
 };
 
 #endif /* BOARD_ITEM_CONTAINER_H */
diff --git a/pcbnew/class_board.cpp b/pcbnew/class_board.cpp
index 1b3d155..2c9d76d 100644
--- a/pcbnew/class_board.cpp
+++ b/pcbnew/class_board.cpp
@@ -1,8 +1,3 @@
-/**
- * @file class_board.cpp
- * @brief  BOARD class functions.
- */
-
 /*
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
diff --git a/pcbnew/class_board.h b/pcbnew/class_board.h
index 8160747..248f3bd 100644
--- a/pcbnew/class_board.h
+++ b/pcbnew/class_board.h
@@ -191,7 +191,7 @@ private:
     std::shared_ptr<CONNECTIVITY_DATA>      m_connectivity;
 
     BOARD_DESIGN_SETTINGS   m_designSettings;
-    ZONE_SETTINGS           m_zoneSettings;
+    //ZONE_SETTINGS           m_zoneSettings;
     COLORS_DESIGN_SETTINGS* m_colorsSettings;
     PAGE_INFO               m_paper;
     TITLE_BLOCK             m_titles;               ///< text in lower right of screen and plots
@@ -553,9 +553,6 @@ public:
     TITLE_BLOCK& GetTitleBlock()                            { return m_titles; }
     void SetTitleBlock( const TITLE_BLOCK& aTitleBlock )    { m_titles = aTitleBlock; }
 
-    const ZONE_SETTINGS& GetZoneSettings() const            { return m_zoneSettings; }
-    void SetZoneSettings( const ZONE_SETTINGS& aSettings )  { m_zoneSettings = aSettings; }
-
     /**
      * Function GetColorSettings
      * @return the current COLORS_DESIGN_SETTINGS in use
diff --git a/pcbnew/class_module.cpp b/pcbnew/class_module.cpp
index a23ef28..cc22b2c 100644
--- a/pcbnew/class_module.cpp
+++ b/pcbnew/class_module.cpp
@@ -132,6 +132,12 @@ MODULE::MODULE( const MODULE& aModule ) :
         }
     }
 
+    // Copy auxiliary data: zones
+    for( ZONE_CONTAINER* zone = aModule.m_Zones; zone; zone = zone->Next() )
+    {
+        Add( static_cast<ZONE_CONTAINER*>( zone->Clone() ) );
+    }
+
     // Copy auxiliary data: 3D_Drawings info
     m_3D_Drawings = aModule.m_3D_Drawings;
 
@@ -274,6 +280,10 @@ void MODULE::Add( BOARD_ITEM* aBoardItem, ADD_MODE aMode )
             m_Pads.PushFront( static_cast<D_PAD*>( aBoardItem ) );
         break;
 
+    case PCB_ZONE_AREA_T:
+        m_Zones.PushBack( static_cast<ZONE_CONTAINER*>( aBoardItem ) );
+        break;
+
     default:
     {
         wxString msg;
@@ -302,11 +312,21 @@ void MODULE::Add( BOARD_ITEM* aBoardItem, ADD_MODE aMode )
         static_cast<D_PAD*>( aBoardItem )->SetLocalCoord();
         break;
 
+    case PCB_ZONE_AREA_T:
+        //TODO
+        //static_cast<ZONE_CONTAINER*>( aBoardItem )->SetLocalCoord();
+        break;
+
     default:
+    {
         // Huh? It should have been filtered out by the previous switch
-        assert(false);
+        wxString msg;
+                msg.Printf( wxT( "MODULE::Add() needs work: BOARD_ITEM type (%d) not handled" ),
+                            aBoardItem->Type() );
+        wxFAIL_MSG( msg );
         break;
     }
+    }
 }
 
 
@@ -328,6 +348,10 @@ void MODULE::Remove( BOARD_ITEM* aBoardItem )
         m_Pads.Remove( static_cast<D_PAD*>( aBoardItem ) );
         break;
 
+    case PCB_ZONE_AREA_T:
+        m_Zones.Remove( static_cast<ZONE_CONTAINER*>( aBoardItem ) );
+        break;
+
     default:
     {
         wxString msg;
@@ -435,6 +459,21 @@ void MODULE::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, GR_DRAWMODE aDrawMode,
         }
     }
 
+    for( BOARD_ITEM* item = m_Zones; item; item = item->Next() )
+    {
+        if( item->IsMoving() )
+            continue;
+
+        switch (item->Type() )
+        {
+        case PCB_ZONE_AREA_T:
+            item->Draw( aPanel, aDC, aDrawMode, aOffset );
+            break;
+        default:
+            break;
+        }
+    }
+
     // Enable these line to draw m_BoundaryBox (debug tests purposes only)
 #if 0
     GRRect( aPanel->GetClipBox(), aDC, m_BoundaryBox, 0, BROWN );
@@ -485,7 +524,14 @@ EDA_RECT MODULE::GetFootprintRect() const
     }
 
     for( D_PAD* pad = m_Pads;  pad;  pad = pad->Next() )
+    {
         area.Merge( pad->GetBoundingBox() );
+    }
+
+    for( ZONE_CONTAINER* zone = m_Zones; zone; zone=zone->Next() )
+    {
+        area.Merge( zone->GetBoundingBox() );
+    }
 
     return area;
 }
@@ -634,6 +680,12 @@ bool MODULE::HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy ) co
                 return true;
         }
 
+        for( ZONE_CONTAINER* zone = m_Zones; zone; zone = zone->Next() )
+        {
+            if( zone->HitTest( arect, false, 0 ) )
+                return true;
+        }
+
         // No items were hit
         return false;
     }
@@ -780,6 +832,11 @@ SEARCH_RESULT MODULE::Visit( INSPECTOR inspector, void* testData, const KICAD_T
             ++p;
             break;
 
+        case PCB_ZONE_T:
+            result = IterateForward( m_Zones, inspector, testData, p );
+            ++p;
+            break;
+
         case PCB_MODULE_TEXT_T:
             result = inspector( m_Reference, testData );
 
@@ -860,6 +917,9 @@ void MODULE::RunOnChildren( std::function<void (BOARD_ITEM*)> aFunction )
         for( BOARD_ITEM* drawing = m_Drawings; drawing; drawing = drawing->Next() )
             aFunction( drawing );
 
+        for( ZONE_CONTAINER* zone = m_Zones; zone; zone = zone->Next() )
+            aFunction( zone );
+
         aFunction( static_cast<BOARD_ITEM*>( m_Reference ) );
         aFunction( static_cast<BOARD_ITEM*>( m_Value ) );
     }
@@ -992,6 +1052,11 @@ void MODULE::Flip( const wxPoint& aCentre )
         }
     }
 
+    for( ZONE_CONTAINER* zone = m_Zones; zone; zone = zone->Next() )
+    {
+        zone->Flip( m_Pos );
+    }
+
     CalculateBoundingBox();
 }
 
@@ -1034,6 +1099,11 @@ void MODULE::SetPosition( const wxPoint& newpos )
         }
     }
 
+    for( ZONE_CONTAINER* zone = m_Zones; zone; zone = zone->Next() )
+    {
+        zone->Move( delta );
+    }
+
     CalculateBoundingBox();
 }
 
@@ -1093,6 +1163,11 @@ void MODULE::MoveAnchorPosition( const wxPoint& aMoveVector )
         }
     }
 
+    for( ZONE_CONTAINER* zone = m_Zones; zone; zone = zone->Next() )
+    {
+        zone->Move( moveVector );
+    }
+
     CalculateBoundingBox();
 }
 
@@ -1128,6 +1203,11 @@ void MODULE::SetOrientation( double newangle )
         }
     }
 
+    for( ZONE_CONTAINER* zone = m_Zones; zone; zone = zone->Next() )
+    {
+        zone->Rotate( zone->GetCenter(), angleChange );
+    }
+
     CalculateBoundingBox();
 }
 
@@ -1172,7 +1252,7 @@ BOARD_ITEM* MODULE::Duplicate( const BOARD_ITEM* aItem,
     case PCB_MODULE_EDGE_T:
     {
         EDGE_MODULE* new_edge = new EDGE_MODULE(
-                *static_cast<const EDGE_MODULE*>(aItem) );
+                *static_cast<const EDGE_MODULE*>( aItem ) );
 
         if( aAddToModule )
             GraphicalItemsList().PushBack( new_edge );
@@ -1181,6 +1261,19 @@ BOARD_ITEM* MODULE::Duplicate( const BOARD_ITEM* aItem,
         break;
     }
 
+    case PCB_ZONE_AREA_T:
+    {
+        ZONE_CONTAINER* new_zone = new ZONE_CONTAINER(
+                *static_cast<const ZONE_CONTAINER*>( aItem ) );
+
+        if( aAddToModule )
+        {
+            m_Zones.PushBack( new_zone );
+        }
+
+        new_item = new_zone;
+        break;
+    }
     case PCB_MODULE_T:
         // Ignore the module itself
         break;
diff --git a/pcbnew/class_module.h b/pcbnew/class_module.h
index 79431d4..286e953 100644
--- a/pcbnew/class_module.h
+++ b/pcbnew/class_module.h
@@ -36,6 +36,7 @@
 #include <dlist.h>
 #include <layers_id_colors_and_visibility.h>       // ALL_LAYERS definition.
 #include <class_board_item.h>
+#include <class_zone.h>
 #include <board_item_container.h>
 #include <lib_id.h>
 
@@ -131,12 +132,15 @@ public:
     // Virtual function
     const EDA_RECT GetBoundingBox() const override;
 
-    DLIST<D_PAD>& PadsList()                        { return m_Pads; }
+    DLIST<D_PAD>& PadsList() { return m_Pads; }
     const DLIST<D_PAD>& PadsList() const { return m_Pads; }
 
-    DLIST<BOARD_ITEM>& GraphicalItemsList()         { return m_Drawings; }
+    DLIST<BOARD_ITEM>& GraphicalItemsList() { return m_Drawings; }
     const DLIST<BOARD_ITEM>& GraphicalItemsList() const { return m_Drawings; }
 
+    DLIST<ZONE_CONTAINER>& ZonesList() { return m_Zones; }
+    const DLIST<ZONE_CONTAINER>& ZonesList() const { return m_Zones; }
+
     DLIST_ITERATOR_WRAPPER<D_PAD> Pads()
     {
          return DLIST_ITERATOR_WRAPPER<D_PAD>( m_Pads );
@@ -679,6 +683,8 @@ private:
     int m_ModuleStatus;                 ///< For autoplace: flags (LOCKED, AUTOPLACED)
     EDA_RECT m_BoundaryBox;             ///< Bounding box : coordinates on board, real orientation.
 
+    DLIST<ZONE_CONTAINER> m_Zones;      ///< Linked list of zones
+
     // The final margin is the sum of these 2 values
     int m_ThermalWidth;
     int m_ThermalGap;
diff --git a/pcbnew/class_zone.cpp b/pcbnew/class_zone.cpp
index 6029d93..644fdc8 100644
--- a/pcbnew/class_zone.cpp
+++ b/pcbnew/class_zone.cpp
@@ -50,8 +50,8 @@
 #include <polygon_test_point_inside.h>
 
 
-ZONE_CONTAINER::ZONE_CONTAINER( BOARD* aBoard ) :
-    BOARD_CONNECTED_ITEM( aBoard, PCB_ZONE_AREA_T )
+ZONE_CONTAINER::ZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent ) :
+    BOARD_CONNECTED_ITEM( aParent, PCB_ZONE_AREA_T )
 {
     m_CornerSelection = nullptr;                // no corner is selected
     m_IsFilled = false;                         // fill status : true when the zone is filled
@@ -66,7 +66,8 @@ ZONE_CONTAINER::ZONE_CONTAINER( BOARD* aBoard ) :
     m_cornerRadius = 0;
     SetLocalFlags( 0 );                         // flags tempoarry used in zone calculations
     m_Poly = new SHAPE_POLY_SET();              // Outlines
-    aBoard->GetZoneSettings().ExportSetting( *this );
+
+    aParent->GetZoneSettings().ExportSetting( *this );
 }
 
 
diff --git a/pcbnew/class_zone.h b/pcbnew/class_zone.h
index a99359c..7c7fb82 100644
--- a/pcbnew/class_zone.h
+++ b/pcbnew/class_zone.h
@@ -84,13 +84,15 @@ public:
      */
     typedef enum HATCH_STYLE { NO_HATCH, DIAGONAL_FULL, DIAGONAL_EDGE } HATCH_STYLE;
 
-    ZONE_CONTAINER( BOARD* parent );
+    ZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent );
 
     ZONE_CONTAINER( const ZONE_CONTAINER& aZone );
     ZONE_CONTAINER& operator=( const ZONE_CONTAINER &aOther );
 
     ~ZONE_CONTAINER();
 
+    ZONE_CONTAINER* Next() const { return static_cast<ZONE_CONTAINER*>( Pnext ); }
+
     /**
      * Function GetPosition
      *
diff --git a/pcbnew/class_zone_settings.cpp b/pcbnew/class_zone_settings.cpp
index d9a3f6b..4b00bf7 100644
--- a/pcbnew/class_zone_settings.cpp
+++ b/pcbnew/class_zone_settings.cpp
@@ -64,6 +64,7 @@ ZONE_SETTINGS::ZONE_SETTINGS()
     m_cornerRadius = 0;
 
     SetIsKeepout( false );
+    SetIsInFootprint( false );
     SetDoNotAllowCopperPour( false );
     SetDoNotAllowVias( true );
     SetDoNotAllowTracks( true );
diff --git a/pcbnew/class_zone_settings.h b/pcbnew/class_zone_settings.h
index 73d6452..821f127 100644
--- a/pcbnew/class_zone_settings.h
+++ b/pcbnew/class_zone_settings.h
@@ -64,7 +64,7 @@ public:
     int  m_ZoneMinThickness;            ///< Min thickness value in filled areas
     int  m_NetcodeSelection;            ///< Net code selection for the current zone
 
-    LSET m_Layers;
+    LSET m_Layers;                      ///< Set of layers on which this zone exists
 
     PCB_LAYER_ID    m_CurrentZone_Layer;    ///< Layer used to create the current zone
 
@@ -87,7 +87,11 @@ private:
     /* A zone outline can be a keepout zone.
      * It will be never filled, and DRC should test for pads, tracks and vias
      */
-    bool                  m_isKeepout;
+    bool    m_isKeepout;
+
+    /* A zone outline can be drawn inside a footprint
+     */
+    bool    m_isInFootprint;
 
     /* For keepout zones only:
      * what is not allowed inside the keepout ( pads, tracks and vias )
@@ -134,11 +138,13 @@ public:
      * Accessors to parameters used in Keepout zones:
      */
     const bool GetIsKeepout() const { return m_isKeepout; }
+    const bool GetIsInFootprint() const { return m_isInFootprint; }
     const bool GetDoNotAllowCopperPour() const { return m_keepoutDoNotAllowCopperPour; }
     const bool GetDoNotAllowVias() const { return m_keepoutDoNotAllowVias; }
     const bool GetDoNotAllowTracks() const { return m_keepoutDoNotAllowTracks; }
 
     void SetIsKeepout( bool aEnable ) { m_isKeepout = aEnable; }
+    void SetIsInFootprint( bool aIsInFootprint ) { m_isInFootprint = aIsInFootprint; }
     void SetDoNotAllowCopperPour( bool aEnable ) { m_keepoutDoNotAllowCopperPour = aEnable; }
     void SetDoNotAllowVias( bool aEnable ) { m_keepoutDoNotAllowVias = aEnable; }
     void SetDoNotAllowTracks( bool aEnable ) { m_keepoutDoNotAllowTracks = aEnable; }
diff --git a/pcbnew/dialogs/dialog_keepout_area_properties.cpp b/pcbnew/dialogs/dialog_keepout_area_properties.cpp
index 60e1093..273dd53 100644
--- a/pcbnew/dialogs/dialog_keepout_area_properties.cpp
+++ b/pcbnew/dialogs/dialog_keepout_area_properties.cpp
@@ -87,7 +87,7 @@ private:
      * creates the colored rectangle icons used in the layer selection widget.
      * @param aColor is the color to fill the rectangle with.
      */
-    wxIcon makeLayerIcon( COLOR4D aColor );
+    wxDataViewIconText makeLayerIcon( const wxString aTitle, COLOR4D aColor );
 };
 
 
@@ -154,26 +154,70 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::initDialog()
     auto* checkColumn = m_layers->AppendToggleColumn( wxEmptyString );
     auto* layerColumn = m_layers->AppendIconTextColumn( wxEmptyString );
 
+    COLOR4D layerColor;
     wxVector<wxVariant> row;
 
     int imgIdx = 0;
 
-    for( LSEQ cu_stack = show.UIOrder();  cu_stack;  ++cu_stack, imgIdx++ )
-    {
-        PCB_LAYER_ID layer = *cu_stack;
+    /*
+     * Layer considerations for zones drawn in footprint or in PCB
+     *
+     * Zones drawn in footprint cannot select individual internal layers.
+     * Layer selection is limited to:
+     * - F.Cu
+     * - B.Cu
+     * - Inner.Cu
+     *
+     * If Inner.Cu is selected, then the zone is on ALL internal layers when
+     * the footprint is placed on the PCB
+     */
 
-        msg = board->GetLayerName( layer );
+    if( m_zonesettings.GetIsInFootprint() )
+    {
+        // Add F.Cu layer entry
+        layerColor = m_parent->Settings().Colors().GetLayerColor( F_Cu );
 
-        COLOR4D layerColor = m_parent->Settings().Colors().GetLayerColor( layer );
+        row.clear();
+        row.push_back( m_zonesettings.m_Layers.test( F_Cu ) );
+        row.push_back( wxVariant( makeLayerIcon( board->GetLayerName( F_Cu ), layerColor ) ) );
+        m_layers->AppendItem( row );
 
+        // Add Inner.Cu layer entry
         row.clear();
-        row.push_back( m_zonesettings.m_Layers.test( layer ) );
-        auto iconItem = wxDataViewIconText( msg, makeLayerIcon( layerColor ) );
-        row.push_back( wxVariant( iconItem ) );
 
+        // Test if any layers are set
+        LSET internal = m_zonesettings.m_Layers & LSET::InternalCuMask();
+        row.push_back( m_zonesettings.m_Layers.test( internal.count() > 0 ) );
+        layerColor = m_parent->Settings().Colors().GetLayerColor( In1_Cu );
+        row.push_back( wxVariant( makeLayerIcon( _( "Internal layers" ), layerColor ) ) );
+        m_layers->AppendItem( row );
+
+        // Add B.Cu layer entry
+        row.clear();
+        layerColor = m_parent->Settings().Colors().GetLayerColor( B_Cu );
+        row.push_back( m_zonesettings.m_Layers.test( B_Cu ) );
+        layerColor = m_parent->Settings().Colors().GetLayerColor( B_Cu );
+        row.push_back( wxVariant( makeLayerIcon( board->GetLayerName( B_Cu ), layerColor ) ) );
         m_layers->AppendItem( row );
 
     }
+    else
+    {
+        for( LSEQ cu_stack = show.UIOrder();  cu_stack;  ++cu_stack, imgIdx++ )
+        {
+            PCB_LAYER_ID layer = *cu_stack;
+
+            msg = board->GetLayerName( layer );
+
+            layerColor = m_parent->Settings().Colors().GetLayerColor( layer );
+
+            row.clear();
+            row.push_back( m_zonesettings.m_Layers.test( layer ) );
+            row.push_back( wxVariant( makeLayerIcon( msg, layerColor ) ) );
+
+            m_layers->AppendItem( row );
+        }
+    }
 
     // Init keepout parameters:
     m_cbTracksCtrl->SetValue( m_zonesettings.GetDoNotAllowTracks() );
@@ -218,14 +262,43 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::OnLayerSelection( wxDataViewEvent& event )
     int row = m_layers->ItemToRow( item );
     bool selected = m_layers->GetToggleValue( row, 0 );
 
-    BOARD* board = m_parent->GetBoard();
-    LSEQ cu_stack = LSET::AllCuMask( board->GetCopperLayerCount() ).UIOrder();
-
-    if( row < (int)cu_stack.size() )
+    // If the zone is defined in a footprint
+    if( m_zonesettings.GetIsInFootprint() )
     {
-        m_zonesettings.m_Layers.set( cu_stack[ row ], selected );
+        switch( row )
+        {
+        case 0: // F.Cu
+            m_zonesettings.m_Layers.set( F_Cu, selected );
+            break;
+        case 1: // Inner layers
+            if( selected )
+            {
+                m_zonesettings.m_Layers |= LSET::InternalCuMask();
+            }
+            else
+            {
+                m_zonesettings.m_Layers &= ~( LSET::InternalCuMask() );
+            }
+            break;
+        case 2: // B.Cu
+            m_zonesettings.m_Layers.set( B_Cu, selected );
+            break;
+        default:
+            break;
+        }
+    }
+    else
+    {
+        BOARD* board = m_parent->GetBoard();
+        LSEQ cu_stack = LSET::AllCuMask( board->GetCopperLayerCount() ).UIOrder();
+
+        if( row < (int)cu_stack.size() )
+        {
+            m_zonesettings.m_Layers.set( cu_stack[ row ], selected );
+        }
     }
 
+    // Disable 'OK' button if there are no copper layers selected
     m_sdbSizerButtonsOK->Enable( m_zonesettings.m_Layers.count() > 0 );
 }
 
@@ -286,7 +359,7 @@ bool DIALOG_KEEPOUT_AREA_PROPERTIES::AcceptOptionsForKeepOut()
 }
 
 
-wxIcon DIALOG_KEEPOUT_AREA_PROPERTIES::makeLayerIcon( COLOR4D aColor )
+wxDataViewIconText DIALOG_KEEPOUT_AREA_PROPERTIES::makeLayerIcon( const wxString aTitle, COLOR4D aColor )
 {
     wxBitmap    bitmap( LAYER_BITMAP_SIZE_X, LAYER_BITMAP_SIZE_Y );
     wxBrush     brush;
@@ -302,5 +375,8 @@ wxIcon DIALOG_KEEPOUT_AREA_PROPERTIES::makeLayerIcon( COLOR4D aColor )
     iconDC.SelectObject( wxNullBitmap );    // mandatory before using bitmap data
     wxIcon icon;
     icon.CopyFromBitmap( bitmap );
-    return icon;
+
+    wxDataViewIconText iconText( aTitle, icon );
+
+    return iconText;
 }
diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp
index ad1a5a0..067a632 100644
--- a/pcbnew/kicad_plugin.cpp
+++ b/pcbnew/kicad_plugin.cpp
@@ -1126,11 +1126,21 @@ void PCB_IO::format( MODULE* aModule, int aNestLevel ) const
 
     // Save drawing elements.
     for( BOARD_ITEM* gr = aModule->GraphicalItemsList();  gr;  gr = gr->Next() )
+    {
         Format( gr, aNestLevel+1 );
+    }
 
     // Save pads.
     for( D_PAD* pad = aModule->PadsList();  pad;  pad = pad->Next() )
+    {
         format( pad, aNestLevel+1 );
+    }
+
+    // Save zones
+    for( ZONE_CONTAINER* zone = aModule->ZonesList(); zone; zone = zone->Next() )
+    {
+        format( zone, aNestLevel + 1 );
+    }
 
     // Save 3D info.
     std::list<S3D_INFO>::const_iterator bs3D = aModule->Models().begin();
diff --git a/pcbnew/kicad_plugin.h b/pcbnew/kicad_plugin.h
index eff7590..fc48ae3 100644
--- a/pcbnew/kicad_plugin.h
+++ b/pcbnew/kicad_plugin.h
@@ -44,7 +44,8 @@ class NETINFO_MAPPING;
 //#define SEXPR_BOARD_FILE_VERSION    20160815  // differential pair settings per net class
 //#define SEXPR_BOARD_FILE_VERSION    20170123  // EDA_TEXT refactor, moved 'hide'
 //#define SEXPR_BOARD_FILE_VERSION    20170920  // long pad names and custom pad shape
-#define SEXPR_BOARD_FILE_VERSION      20170922  // Keepout zones can exist on multiple layers
+//#define SEXPR_BOARD_FILE_VERSION    20170922  // Keepout zones can exist on multiple layers
+#define SEXPR_BOARD_FILE_VERSION      20171010  // Keepzones can be defined inside footprints
 
 #define CTL_STD_LAYER_NAMES         (1 << 0)    ///< Use English Standard layer names
 #define CTL_OMIT_NETS               (1 << 1)    ///< Omit pads net names (useless in library)
diff --git a/pcbnew/modedit.cpp b/pcbnew/modedit.cpp
index f637862..8c6f040 100644
--- a/pcbnew/modedit.cpp
+++ b/pcbnew/modedit.cpp
@@ -977,6 +977,7 @@ void FOOTPRINT_EDIT_FRAME::OnVerticalToolbar( wxCommandEvent& aEvent )
         SetToolID( id, wxCURSOR_BULLSEYE, _( "Delete item" ) );
         break;
 
+    case ID_MODEDIT_KEEPOUT_TOOL:
     case ID_MODEDIT_MEASUREMENT_TOOL:
         DisplayError( this, wxT( "Unsupported tool in legacy canvas" ) );
         SetNoToolSelected();
diff --git a/pcbnew/modedit_onclick.cpp b/pcbnew/modedit_onclick.cpp
index 5a98642..d5bf357 100644
--- a/pcbnew/modedit_onclick.cpp
+++ b/pcbnew/modedit_onclick.cpp
@@ -200,6 +200,7 @@ void FOOTPRINT_EDIT_FRAME::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
 
         break;
 
+    case ID_MODEDIT_KEEPOUT_TOOL:
     case ID_MODEDIT_MEASUREMENT_TOOL:
         DisplayError( this, wxT( "Unsupported tool in legacy canvas" ) );
         SetNoToolSelected();
diff --git a/pcbnew/pcb_parser.cpp b/pcbnew/pcb_parser.cpp
index dfcc790..170c150 100644
--- a/pcbnew/pcb_parser.cpp
+++ b/pcbnew/pcb_parser.cpp
@@ -71,7 +71,9 @@ void PCB_PARSER::init()
         m_layerMasks[ untranslated ]   = LSET( PCB_LAYER_ID( layer ) );
     }
 
+    // Shortcuts for layer combinations
     m_layerMasks[ "*.Cu" ]      = LSET::AllCuMask();
+    m_layerMasks[ "*.In.Cu" ]   = LSET::InternalCuMask();
     m_layerMasks[ "F&B.Cu" ]    = LSET( 2, F_Cu, B_Cu );
     m_layerMasks[ "*.Adhes" ]   = LSET( 2, B_Adhes, F_Adhes );
     m_layerMasks[ "*.Paste" ]   = LSET( 2, B_Paste, F_Paste );
@@ -529,7 +531,7 @@ BOARD* PCB_PARSER::parseBOARD_unchecked()
             break;
 
         case T_zone:
-            m_board->Add( parseZONE_CONTAINER(), ADD_APPEND );
+            m_board->Add( parseZONE_CONTAINER( m_board ), ADD_APPEND );
             break;
 
         case T_target:
@@ -1963,6 +1965,13 @@ MODULE* PCB_PARSER::parseMODULE_unchecked( wxArrayString* aInitialComments )
             }
             break;
 
+        case T_zone:
+            {
+                ZONE_CONTAINER* zone = parseZONE_CONTAINER( module.get() );
+                module->Add( zone, ADD_APPEND );
+            }
+            break;
+
         case T_model:
             module->Add3DModel( parse3DModel() );
             break;
@@ -1972,7 +1981,7 @@ MODULE* PCB_PARSER::parseMODULE_unchecked( wxArrayString* aInitialComments )
                        "autoplace_cost90, autoplace_cost180, solder_mask_margin, "
                        "solder_paste_margin, solder_paste_ratio, clearance, "
                        "zone_connect, thermal_width, thermal_gap, attr, fp_text, "
-                       "fp_arc, fp_circle, fp_curve, fp_line, fp_poly, pad, or model" );
+                       "fp_arc, fp_circle, fp_curve, fp_line, fp_poly, pad, zone, or model" );
         }
     }
 
@@ -2768,7 +2777,7 @@ VIA* PCB_PARSER::parseVIA()
 }
 
 
-ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER()
+ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent )
 {
     wxCHECK_MSG( CurTok() == T_zone, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
@@ -2785,7 +2794,7 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER()
     // bigger scope since each filled_polygon is concatenated in here
     SHAPE_POLY_SET pts;
 
-    std::unique_ptr< ZONE_CONTAINER > zone( new ZONE_CONTAINER( m_board ) );
+    std::unique_ptr< ZONE_CONTAINER > zone( new ZONE_CONTAINER( aParent ) );
 
     zone->SetPriority( 0 );
 
diff --git a/pcbnew/pcb_parser.h b/pcbnew/pcb_parser.h
index a92f2ab..3f14721 100644
--- a/pcbnew/pcb_parser.h
+++ b/pcbnew/pcb_parser.h
@@ -43,6 +43,7 @@
 
 class BOARD;
 class BOARD_ITEM;
+class BOARD_ITEM_CONTAINER;
 class D_PAD;
 class DIMENSION;
 class DRAWSEGMENT;
@@ -130,7 +131,7 @@ class PCB_PARSER : public PCB_LEXER
     bool            parseD_PAD_option( D_PAD* aPad );
     TRACK*          parseTRACK();
     VIA*            parseVIA();
-    ZONE_CONTAINER* parseZONE_CONTAINER();
+    ZONE_CONTAINER* parseZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent );
     PCB_TARGET*     parsePCB_TARGET();
     BOARD*          parseBOARD();
 
diff --git a/pcbnew/tools/drawing_tool.cpp b/pcbnew/tools/drawing_tool.cpp
index 4987cc7..6fb4b8d 100644
--- a/pcbnew/tools/drawing_tool.cpp
+++ b/pcbnew/tools/drawing_tool.cpp
@@ -657,7 +657,7 @@ int DRAWING_TOOL::DrawZoneKeepout( const TOOL_EVENT& aEvent )
 {
     SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::KEEPOUT );
 
-    m_frame->SetToolID( ID_PCB_KEEPOUT_AREA_BUTT, wxCURSOR_PENCIL, _( "Add keepout" ) );
+    m_frame->SetToolID( m_editModules ? ID_MODEDIT_KEEPOUT_TOOL : ID_PCB_KEEPOUT_AREA_BUTT, wxCURSOR_PENCIL, _( "Add keepout" ) );
 
     return drawZone( true, ZONE_MODE::ADD );
 }
diff --git a/pcbnew/tools/pcb_actions.cpp b/pcbnew/tools/pcb_actions.cpp
index 842b99d..0b7c28f 100644
--- a/pcbnew/tools/pcb_actions.cpp
+++ b/pcbnew/tools/pcb_actions.cpp
@@ -62,6 +62,7 @@ boost::optional<TOOL_EVENT> PCB_ACTIONS::TranslateLegacyId( int aId )
         return PCB_ACTIONS::drawVia.MakeEvent();
 
     case ID_PCB_KEEPOUT_AREA_BUTT:
+    case ID_MODEDIT_KEEPOUT_TOOL:
         return PCB_ACTIONS::drawZoneKeepout.MakeEvent();
 
     case ID_PCB_ADD_LINE_BUTT:
diff --git a/pcbnew/tools/zone_create_helper.cpp b/pcbnew/tools/zone_create_helper.cpp
index 131f2d3..d165cc4 100644
--- a/pcbnew/tools/zone_create_helper.cpp
+++ b/pcbnew/tools/zone_create_helper.cpp
@@ -30,6 +30,7 @@
 #include <class_pad.h>
 #include <board_commit.h>
 #include <pcb_painter.h>
+#include <pcbnew_id.h>
 
 #include <tools/pcb_actions.h>
 #include <tools/selection_tool.h>
@@ -56,15 +57,19 @@ ZONE_CREATE_HELPER::~ZONE_CREATE_HELPER()
 std::unique_ptr<ZONE_CONTAINER> ZONE_CREATE_HELPER::createNewZone( bool aKeepout )
 {
     auto& frame = *m_tool.getEditFrame<PCB_BASE_EDIT_FRAME>();
+
     auto& board = *m_tool.getModel<BOARD>();
 
+    BOARD_ITEM_CONTAINER* parent = frame.GetModel();
+
     // Get the current default settings for zones
     ZONE_SETTINGS zoneInfo = frame.GetZoneSettings();
     zoneInfo.m_CurrentZone_Layer = frame.GetScreen()->m_Active_Layer;
     zoneInfo.m_NetcodeSelection = board.GetHighLightNetCode();
     zoneInfo.SetIsKeepout( m_params.m_keepout );
+    zoneInfo.SetIsInFootprint( aKeepout && ( frame.GetToolId() == ID_MODEDIT_KEEPOUT_TOOL ) );
 
-    if ( m_params.m_mode != DRAWING_TOOL::ZONE_MODE::GRAPHIC_POLYGON  )
+    if ( m_params.m_mode != DRAWING_TOOL::ZONE_MODE::GRAPHIC_POLYGON )
     {
         // Get the current default settings for zones
 
@@ -72,13 +77,19 @@ std::unique_ptr<ZONE_CONTAINER> ZONE_CREATE_HELPER::createNewZone( bool aKeepout
         ZONE_EDIT_T dialogResult;
 
         if( m_params.m_keepout )
+        {
             dialogResult = InvokeKeepoutAreaEditor( &frame, &zoneInfo );
+        }
         else
         {
             if( IsCopperLayer( zoneInfo.m_CurrentZone_Layer ) )
+            {
                 dialogResult = InvokeCopperZonesEditor( &frame, &zoneInfo );
+            }
             else
+            {
                 dialogResult = InvokeNonCopperZonesEditor( &frame, nullptr, &zoneInfo );
+            }
         }
 
         if( dialogResult == ZONE_ABORT )
@@ -87,7 +98,8 @@ std::unique_ptr<ZONE_CONTAINER> ZONE_CREATE_HELPER::createNewZone( bool aKeepout
         }
     }
 
-    auto newZone = std::make_unique<ZONE_CONTAINER>( &board );
+    auto newZone = std::make_unique<ZONE_CONTAINER>( parent );
+
 
     // Apply the selected settings
     zoneInfo.ExportSetting( *newZone );
@@ -198,7 +210,7 @@ bool ZONE_CREATE_HELPER::OnFirstPoint()
 
         if( m_zone )
         {
-            // set up poperties from zone
+            // Set up properties from zone
             const auto& settings = *m_parentView.GetPainter()->GetSettings();
             COLOR4D color = settings.GetColor( nullptr, m_zone->GetLayer() );
 
-- 
2.7.4

From dd96bb5637c656efc54757ed44eb5dc1d4674181 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Wed, 11 Oct 2017 08:53:56 +1100
Subject: [PATCH 03/12] Allow editing of keepout zone in modedit

- Also checks for DRC in keepout zones defined in a footprint
---
 pcbnew/board_commit.cpp                           |  3 ++
 pcbnew/class_module.cpp                           |  9 +++++-
 pcbnew/class_zone.cpp                             |  2 +-
 pcbnew/collectors.cpp                             |  2 ++
 pcbnew/dialogs/dialog_keepout_area_properties.cpp |  7 ++++-
 pcbnew/drc.cpp                                    | 29 +++++++++++++++--
 pcbnew/hotkeys_module_editor.cpp                  |  6 ++++
 pcbnew/modedit_onclick.cpp                        | 38 +++++++++++++++++++++++
 8 files changed, 91 insertions(+), 5 deletions(-)

diff --git a/pcbnew/board_commit.cpp b/pcbnew/board_commit.cpp
index df2a192..bf23715 100644
--- a/pcbnew/board_commit.cpp
+++ b/pcbnew/board_commit.cpp
@@ -82,6 +82,9 @@ void BOARD_COMMIT::Push( const wxString& aMessage, bool aCreateUndoEntry )
             if( ent.m_item->Type() != PCB_MODULE_T )
                 ent.m_item = ent.m_item->GetParent();
 
+            //if( ent.m_copy->Type() != PCB_MODULE_T )
+            //    ent.m_copy = ent.m_copy->GetParent();
+
             // We have not saved the module yet, so let's create an entry
             if( savedModules.count( ent.m_item ) == 0 )
             {
diff --git a/pcbnew/class_module.cpp b/pcbnew/class_module.cpp
index cc22b2c..684cc51 100644
--- a/pcbnew/class_module.cpp
+++ b/pcbnew/class_module.cpp
@@ -218,6 +218,11 @@ MODULE& MODULE::operator=( const MODULE& aOther )
         }
     }
 
+    for( ZONE_CONTAINER* zone = aOther.m_Zones; zone; zone = zone->Next() )
+    {
+        Add( new ZONE_CONTAINER( *zone ) );
+    }
+
     // Copy auxiliary data: 3D_Drawings info
     m_3D_Drawings.clear();
     m_3D_Drawings = aOther.m_3D_Drawings;
@@ -236,7 +241,9 @@ void MODULE::ClearAllNets()
     // Force the ORPHANED dummy net info for all pads.
     // ORPHANED dummy net does not depend on a board
     for( D_PAD* pad = PadsList(); pad; pad = pad->Next() )
+    {
         pad->SetNetCode( NETINFO_LIST::ORPHANED );
+    }
 }
 
 
@@ -832,7 +839,7 @@ SEARCH_RESULT MODULE::Visit( INSPECTOR inspector, void* testData, const KICAD_T
             ++p;
             break;
 
-        case PCB_ZONE_T:
+        case PCB_ZONE_AREA_T:
             result = IterateForward( m_Zones, inspector, testData, p );
             ++p;
             break;
diff --git a/pcbnew/class_zone.cpp b/pcbnew/class_zone.cpp
index 644fdc8..f184826 100644
--- a/pcbnew/class_zone.cpp
+++ b/pcbnew/class_zone.cpp
@@ -72,7 +72,7 @@ ZONE_CONTAINER::ZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent ) :
 
 
 ZONE_CONTAINER::ZONE_CONTAINER( const ZONE_CONTAINER& aZone ) :
-    BOARD_CONNECTED_ITEM( aZone )
+    BOARD_CONNECTED_ITEM( aZone.GetParent(), PCB_ZONE_AREA_T )
 {
     m_smoothedPoly = NULL;
 
diff --git a/pcbnew/collectors.cpp b/pcbnew/collectors.cpp
index e3dcb54..176d2ab 100644
--- a/pcbnew/collectors.cpp
+++ b/pcbnew/collectors.cpp
@@ -115,6 +115,7 @@ const KICAD_T GENERAL_COLLECTOR::ModulesAndTheirItems[] = {
     PCB_MODULE_EDGE_T,
     PCB_PAD_T,
     PCB_MODULE_T,
+    PCB_ZONE_AREA_T,
     EOT
 };
 
@@ -123,6 +124,7 @@ const KICAD_T GENERAL_COLLECTOR::ModuleItems[] = {
     PCB_MODULE_TEXT_T,
     PCB_MODULE_EDGE_T,
     PCB_PAD_T,
+    PCB_ZONE_AREA_T,
     EOT
 };
 
diff --git a/pcbnew/dialogs/dialog_keepout_area_properties.cpp b/pcbnew/dialogs/dialog_keepout_area_properties.cpp
index 273dd53..a07810b 100644
--- a/pcbnew/dialogs/dialog_keepout_area_properties.cpp
+++ b/pcbnew/dialogs/dialog_keepout_area_properties.cpp
@@ -182,6 +182,7 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::initDialog()
         row.push_back( wxVariant( makeLayerIcon( board->GetLayerName( F_Cu ), layerColor ) ) );
         m_layers->AppendItem( row );
 
+        /*
         // Add Inner.Cu layer entry
         row.clear();
 
@@ -192,6 +193,8 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::initDialog()
         row.push_back( wxVariant( makeLayerIcon( _( "Internal layers" ), layerColor ) ) );
         m_layers->AppendItem( row );
 
+        */
+
         // Add B.Cu layer entry
         row.clear();
         layerColor = m_parent->Settings().Colors().GetLayerColor( B_Cu );
@@ -270,6 +273,7 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::OnLayerSelection( wxDataViewEvent& event )
         case 0: // F.Cu
             m_zonesettings.m_Layers.set( F_Cu, selected );
             break;
+        /*
         case 1: // Inner layers
             if( selected )
             {
@@ -280,7 +284,8 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::OnLayerSelection( wxDataViewEvent& event )
                 m_zonesettings.m_Layers &= ~( LSET::InternalCuMask() );
             }
             break;
-        case 2: // B.Cu
+        */
+        case 1: // B.Cu
             m_zonesettings.m_Layers.set( B_Cu, selected );
             break;
         default:
diff --git a/pcbnew/drc.cpp b/pcbnew/drc.cpp
index 6abcbd0..e34b5a1 100644
--- a/pcbnew/drc.cpp
+++ b/pcbnew/drc.cpp
@@ -615,12 +615,36 @@ void DRC::testZones()
 
 void DRC::testKeepoutAreas()
 {
-    // Test keepout areas for vias, tracks and pads inside keepout areas
+    // Construct a list of areas to inspect
+    std::list<ZONE_CONTAINER*> areasToTest;
+
+    // Add board zones
     for( int ii = 0; ii < m_pcb->GetAreaCount(); ii++ )
     {
         ZONE_CONTAINER* area = m_pcb->GetArea( ii );
 
-        if( !area->GetIsKeepout() )
+        if( area && area->GetIsKeepout() )
+        {
+            areasToTest.push_back( area );
+        }
+    }
+
+    // Add zones in footprints
+    for( auto mod : m_pcb->Modules() )
+    {
+        for( ZONE_CONTAINER* zone = mod->ZonesList(); zone; zone = zone->Next() )
+        {
+            if( zone->GetIsKeepout() )
+            {
+                areasToTest.push_back( zone );
+            }
+        }
+    }
+
+
+    for( auto* area : areasToTest )
+    {
+        if( !area || !area->GetIsKeepout() )
         {
             continue;
         }
@@ -662,6 +686,7 @@ void DRC::testKeepoutAreas()
                 }
             }
         }
+
         // Test pads: TODO
     }
 }
diff --git a/pcbnew/hotkeys_module_editor.cpp b/pcbnew/hotkeys_module_editor.cpp
index a7a7305..9e42bcd 100644
--- a/pcbnew/hotkeys_module_editor.cpp
+++ b/pcbnew/hotkeys_module_editor.cpp
@@ -261,6 +261,12 @@ bool FOOTPRINT_EDIT_FRAME::OnHotkeyEditItem( int aIdCommand )
 
         break;
 
+    case PCB_ZONE_AREA_T:
+        if( aIdCommand == HK_EDIT_ITEM )
+            evt_type = ID_POPUP_PCB_EDIT_ZONE_PARAMS;
+
+        break;
+
     default:
         break;
     }
diff --git a/pcbnew/modedit_onclick.cpp b/pcbnew/modedit_onclick.cpp
index d5bf357..b3f9a4f 100644
--- a/pcbnew/modedit_onclick.cpp
+++ b/pcbnew/modedit_onclick.cpp
@@ -550,6 +550,44 @@ void FOOTPRINT_EDIT_FRAME::OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem )
         m_canvas->Refresh();
         break;
 
+    case PCB_ZONE_AREA_T:
+    {
+        ZONE_CONTAINER* zone = static_cast<ZONE_CONTAINER*>( aItem );
+
+        ZONE_SETTINGS zoneSettings;
+
+        zoneSettings << *zone;
+
+        bool success = false;
+
+        if( zone )
+        {
+            if( zone->GetIsKeepout() )
+            {
+                success = InvokeKeepoutAreaEditor( this, &zoneSettings );
+            }
+            else if( zone->IsOnCopperLayer() )
+            {
+                success = InvokeCopperZonesEditor( this, &zoneSettings );
+            }
+            else
+            {
+                success = InvokeNonCopperZonesEditor( this, zone, &zoneSettings );
+            }
+
+            if( success )
+            {
+                //BOARD_COMMIT commit( this );
+                zoneSettings.ExportSetting( *zone );
+
+                //commit.Add( zone.release() );
+                //commit.Push( _( "Edit zone" ) );
+            }
+        }
+
+        break;
+    }
+
     default:
         break;
     }
-- 
2.7.4

From 9cd15821986d783584e3baeee108e214d785fdee Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Wed, 11 Oct 2017 19:55:08 +1100
Subject: [PATCH 04/12] Zone cutouts now work for keepouts defined in
 footprints

- Refactored code to extract all zones
---
 pcbnew/class_board.cpp                             | 24 +++++++++++++
 pcbnew/class_board.h                               | 11 +++++-
 pcbnew/drc.cpp                                     | 39 ++++------------------
 ...es_convert_brd_items_to_polygons_with_Boost.cpp |  9 +++--
 4 files changed, 47 insertions(+), 36 deletions(-)

diff --git a/pcbnew/class_board.cpp b/pcbnew/class_board.cpp
index 2c9d76d..a3b928b 100644
--- a/pcbnew/class_board.cpp
+++ b/pcbnew/class_board.cpp
@@ -2273,6 +2273,30 @@ TRACK* BOARD::CreateLockPoint( wxPoint& aPosition, TRACK* aSegment, PICKED_ITEMS
 }
 
 
+std::list<ZONE_CONTAINER*> BOARD::GetZoneList( bool aIncludeZonesInFootprints )
+{
+    std::list<ZONE_CONTAINER*> zones;
+
+    for( int ii = 0; ii < GetAreaCount(); ii++ )
+    {
+        zones.push_back( GetArea( ii ) );
+    }
+
+    if( aIncludeZonesInFootprints )
+    {
+        for( MODULE* mod = m_Modules; mod; mod = mod->Next() )
+        {
+            for( ZONE_CONTAINER* zone = mod->ZonesList(); zone; zone = zone->Next() )
+            {
+                zones.push_back( zone );
+            }
+        }
+    }
+
+    return zones;
+}
+
+
 ZONE_CONTAINER* BOARD::AddArea( PICKED_ITEMS_LIST* aNewZonesList, int aNetcode,
                                 PCB_LAYER_ID aLayer, wxPoint aStartPointPosition, int aHatch )
 {
diff --git a/pcbnew/class_board.h b/pcbnew/class_board.h
index 248f3bd..f2fd10a 100644
--- a/pcbnew/class_board.h
+++ b/pcbnew/class_board.h
@@ -958,6 +958,7 @@ public:
     void RedrawFilledAreas( EDA_DRAW_PANEL* aPanel, wxDC* aDC, GR_DRAWMODE aDrawMode,
                             PCB_LAYER_ID aLayer );
 
+
     /**
      * Function SetAreasNetCodesFromNetNames
      * Set the .m_NetCode member of all copper areas, according to the area Net Name
@@ -1001,11 +1002,19 @@ public:
         return -1;
     }
 
+
+    /**
+     * Function GetZoneList
+     * @return a std::list of pointers to all board zones (possibly including zones in footprints)
+     */
+    std::list<ZONE_CONTAINER*> GetZoneList( bool aIncludeZonesInFootprints = false );
+
+
     /**
      * Function GetAreaCount
      * @return int - The number of Areas or ZONE_CONTAINER.
      */
-    int GetAreaCount() const
+    int GetAreaCount( bool aIncludeAreasInFootprints = false ) const
     {
         return (int) m_ZoneDescriptorList.size();
     }
diff --git a/pcbnew/drc.cpp b/pcbnew/drc.cpp
index e34b5a1..00a09e1 100644
--- a/pcbnew/drc.cpp
+++ b/pcbnew/drc.cpp
@@ -616,31 +616,8 @@ void DRC::testZones()
 void DRC::testKeepoutAreas()
 {
     // Construct a list of areas to inspect
-    std::list<ZONE_CONTAINER*> areasToTest;
-
-    // Add board zones
-    for( int ii = 0; ii < m_pcb->GetAreaCount(); ii++ )
-    {
-        ZONE_CONTAINER* area = m_pcb->GetArea( ii );
-
-        if( area && area->GetIsKeepout() )
-        {
-            areasToTest.push_back( area );
-        }
-    }
-
-    // Add zones in footprints
-    for( auto mod : m_pcb->Modules() )
-    {
-        for( ZONE_CONTAINER* zone = mod->ZonesList(); zone; zone = zone->Next() )
-        {
-            if( zone->GetIsKeepout() )
-            {
-                areasToTest.push_back( zone );
-            }
-        }
-    }
-
+    // (include zones found in footprints)
+    auto areasToTest = m_pcb->GetZoneList( true );
 
     for( auto* area : areasToTest )
     {
@@ -818,14 +795,12 @@ void DRC::testTexts()
 
 bool DRC::doTrackKeepoutDrc( TRACK* aRefSeg )
 {
-    // Test keepout areas for vias, tracks and pads inside keepout areas
-    for( int ii = 0; ii < m_pcb->GetAreaCount(); ii++ )
-    {
-        ZONE_CONTAINER* area = m_pcb->GetArea( ii );
-
-        if( !area->GetIsKeepout() )
-            continue;
+    // Construct list of areas to inspect
+    // (include areas found in footprints)
+    auto areasToTest = m_pcb->GetZoneList( true );
 
+    for( auto* area : areasToTest )
+    {
         if( aRefSeg->Type() == PCB_TRACE_T )
         {
             if( ! area->GetDoNotAllowTracks()  )
diff --git a/pcbnew/zones_convert_brd_items_to_polygons_with_Boost.cpp b/pcbnew/zones_convert_brd_items_to_polygons_with_Boost.cpp
index 3c0ea70..0b19c12 100644
--- a/pcbnew/zones_convert_brd_items_to_polygons_with_Boost.cpp
+++ b/pcbnew/zones_convert_brd_items_to_polygons_with_Boost.cpp
@@ -358,11 +358,14 @@ void ZONE_CONTAINER::buildFeatureHoleList( BOARD* aPcb, SHAPE_POLY_SET& aFeature
         }
     }
 
+    // Build a list of zones to test
+
+    // Zones drawn on the board, and in footprints
+    auto areasToTest = GetBoard()->GetZoneList( true );
+
     // Add zones outlines having an higher priority and keepout
-    for( int ii = 0; ii < GetBoard()->GetAreaCount(); ii++ )
+    for( auto* zone : areasToTest )
     {
-        ZONE_CONTAINER* zone = GetBoard()->GetArea( ii );
-
         // If the zones share no common layers
         if( !CommonLayerExists( zone->GetLayerSet() ) )
             continue;
-- 
2.7.4

From 3739ae26d5bba089fc76f4283b18854f3e7b3439 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Wed, 11 Oct 2017 21:01:58 +1100
Subject: [PATCH 05/12] Added layer-set shortcut for internal layers

- If all internal layers are set, write *.In.Cu
---
 pcbnew/kicad_plugin.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp
index 067a632..c3f8340 100644
--- a/pcbnew/kicad_plugin.cpp
+++ b/pcbnew/kicad_plugin.cpp
@@ -1198,7 +1198,11 @@ void PCB_IO::formatLayers( LSET aLayerMask, int aNestLevel ) const
     LSET cu_mask = cu_all;
 
     if( m_board )
+    {
         cu_mask &= m_board->GetEnabledLayers();
+    }
+
+    LSET cu_internal = cu_mask & LSET::InternalCuMask();
 
     // output copper layers first, then non copper
 
@@ -1213,6 +1217,13 @@ void PCB_IO::formatLayers( LSET aLayerMask, int aNestLevel ) const
         aLayerMask &= ~fr_bk;
     }
 
+    // All inner copper layers are selected
+    if( ( aLayerMask & cu_internal) == cu_internal )
+    {
+        output += " *.In.Cu";
+        aLayerMask &= ~cu_internal;
+    }
+
     if( ( aLayerMask & adhes ) == adhes )
     {
         output += " *.Adhes";
-- 
2.7.4

From 358bf06cf048a6d153ba60fc0b63d083ea78ad1f Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Wed, 11 Oct 2017 23:21:46 +1100
Subject: [PATCH 06/12] Fixed keepout zone editor in modedit

- Bug fix
- Added internal copper layers
---
 pcbnew/class_drawsegment.cpp                      |  2 +-
 pcbnew/dialogs/dialog_keepout_area_properties.cpp | 16 +++++-----------
 pcbnew/modedit_onclick.cpp                        |  2 ++
 pcbnew/tool_pcb.cpp                               |  1 +
 4 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/pcbnew/class_drawsegment.cpp b/pcbnew/class_drawsegment.cpp
index d3fbdbf..9f51e4b 100644
--- a/pcbnew/class_drawsegment.cpp
+++ b/pcbnew/class_drawsegment.cpp
@@ -636,7 +636,7 @@ wxString DRAWSEGMENT::GetSelectMenuText() const
 
 BITMAP_DEF DRAWSEGMENT::GetMenuImage() const
 {
-    return add_dashed_line_xpm;
+    return add_polygon_xpm;
 }
 
 
diff --git a/pcbnew/dialogs/dialog_keepout_area_properties.cpp b/pcbnew/dialogs/dialog_keepout_area_properties.cpp
index a07810b..b8121a7 100644
--- a/pcbnew/dialogs/dialog_keepout_area_properties.cpp
+++ b/pcbnew/dialogs/dialog_keepout_area_properties.cpp
@@ -179,28 +179,24 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::initDialog()
 
         row.clear();
         row.push_back( m_zonesettings.m_Layers.test( F_Cu ) );
-        row.push_back( wxVariant( makeLayerIcon( board->GetLayerName( F_Cu ), layerColor ) ) );
+        row.push_back( wxVariant( makeLayerIcon( _( "Front copper layer" ), layerColor ) ) );
         m_layers->AppendItem( row );
 
-        /*
         // Add Inner.Cu layer entry
         row.clear();
-
         // Test if any layers are set
         LSET internal = m_zonesettings.m_Layers & LSET::InternalCuMask();
-        row.push_back( m_zonesettings.m_Layers.test( internal.count() > 0 ) );
+        row.push_back( internal.count() > 0 );
         layerColor = m_parent->Settings().Colors().GetLayerColor( In1_Cu );
-        row.push_back( wxVariant( makeLayerIcon( _( "Internal layers" ), layerColor ) ) );
+        row.push_back( wxVariant( makeLayerIcon( _( "Internal copper layers" ), layerColor ) ) );
         m_layers->AppendItem( row );
 
-        */
-
         // Add B.Cu layer entry
         row.clear();
         layerColor = m_parent->Settings().Colors().GetLayerColor( B_Cu );
         row.push_back( m_zonesettings.m_Layers.test( B_Cu ) );
         layerColor = m_parent->Settings().Colors().GetLayerColor( B_Cu );
-        row.push_back( wxVariant( makeLayerIcon( board->GetLayerName( B_Cu ), layerColor ) ) );
+        row.push_back( wxVariant( makeLayerIcon( _( "Back copper layer" ), layerColor ) ) );
         m_layers->AppendItem( row );
 
     }
@@ -273,7 +269,6 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::OnLayerSelection( wxDataViewEvent& event )
         case 0: // F.Cu
             m_zonesettings.m_Layers.set( F_Cu, selected );
             break;
-        /*
         case 1: // Inner layers
             if( selected )
             {
@@ -284,8 +279,7 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::OnLayerSelection( wxDataViewEvent& event )
                 m_zonesettings.m_Layers &= ~( LSET::InternalCuMask() );
             }
             break;
-        */
-        case 1: // B.Cu
+        case 2: // B.Cu
             m_zonesettings.m_Layers.set( B_Cu, selected );
             break;
         default:
diff --git a/pcbnew/modedit_onclick.cpp b/pcbnew/modedit_onclick.cpp
index b3f9a4f..521075f 100644
--- a/pcbnew/modedit_onclick.cpp
+++ b/pcbnew/modedit_onclick.cpp
@@ -558,6 +558,8 @@ void FOOTPRINT_EDIT_FRAME::OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem )
 
         zoneSettings << *zone;
 
+        zoneSettings.SetIsInFootprint( true );
+
         bool success = false;
 
         if( zone )
diff --git a/pcbnew/tool_pcb.cpp b/pcbnew/tool_pcb.cpp
index a7a25e8..a64af68 100644
--- a/pcbnew/tool_pcb.cpp
+++ b/pcbnew/tool_pcb.cpp
@@ -456,6 +456,7 @@ void PCB_EDIT_FRAME::ReCreateVToolbar()
     m_drawToolBar->AddTool( ID_PCB_ADD_LINE_BUTT, wxEmptyString, KiBitmap( add_graphical_segments_xpm ),
                             _( "Add graphic lines" ), wxITEM_CHECK );
 
+
     m_drawToolBar->AddTool( ID_PCB_CIRCLE_BUTT, wxEmptyString, KiBitmap( add_circle_xpm ),
                             _( "Add graphic circle" ), wxITEM_CHECK );
 
-- 
2.7.4

From 36f1a78380eef19b275f5b7b6d250793d1ca722e Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Thu, 12 Oct 2017 00:19:11 +1100
Subject: [PATCH 07/12] Selection fixes for ZONE_CONTAINER

---
 pcbnew/tools/selection_tool.cpp | 44 +++++++++++++++++++++++++++++++++++++----
 1 file changed, 40 insertions(+), 4 deletions(-)

diff --git a/pcbnew/tools/selection_tool.cpp b/pcbnew/tools/selection_tool.cpp
index d31ac66..9e4292a 100644
--- a/pcbnew/tools/selection_tool.cpp
+++ b/pcbnew/tools/selection_tool.cpp
@@ -1428,6 +1428,17 @@ bool SELECTION_TOOL::selectable( const BOARD_ITEM* aItem ) const
     case PCB_ZONE_AREA_T:
         // Keepout zones can exist on multiple layers!
         {
+            // In PCB editor, don't allow zone selection if parent is locked
+            if( !m_editModules )
+            {
+                MODULE* mod = static_cast<MODULE*>( static_cast<const ZONE_CONTAINER*>( aItem )->GetParent() );
+
+                if( mod && mod->IsLocked() )
+                {
+                    return false;
+                }
+            }
+
             auto* zone = static_cast<const ZONE_CONTAINER*>( aItem );
 
             if( zone && zone->GetIsKeepout() )
@@ -1501,7 +1512,9 @@ bool SELECTION_TOOL::selectable( const BOARD_ITEM* aItem ) const
         {
             MODULE* mod = static_cast<const D_PAD*>( aItem )->GetParent();
             if( mod && mod->IsLocked() )
+            {
                 return false;
+            }
         }
 
         break;
@@ -1954,10 +1967,14 @@ bool SELECTION_TOOL::SanitizeSelection()
         for( auto i : m_selection )
         {
             auto item = static_cast<BOARD_ITEM*>( i );
-            if( item->Type() == PCB_PAD_T )
-            {
-                MODULE* mod = static_cast<MODULE*>( item->GetParent() );
 
+            MODULE* mod = static_cast<MODULE*>( item->GetParent() );
+
+            bool parentSelected = mod && m_selection.Contains( mod );
+
+            switch( item->Type() )
+            {
+            case PCB_PAD_T:
                 // case 1: module (or its pads) are locked
                 if( mod && ( mod->PadsLocked() || mod->IsLocked() ) )
                 {
@@ -1968,8 +1985,23 @@ bool SELECTION_TOOL::SanitizeSelection()
                 }
 
                 // case 2: multi-item selection contains both the module and its pads - remove the pads
-                if( mod && m_selection.Contains( mod ) )
+                if( parentSelected )
+                {
                     rejected.insert( item );
+                }
+
+                break;
+
+            case PCB_ZONE_AREA_T:
+                // Don't select a zone if its parent is selected
+                if( !m_editModules && parentSelected )
+                {
+                    rejected.insert( item );
+                }
+                break;
+
+            default:
+                break;
             }
         }
     }
@@ -1977,7 +2009,9 @@ bool SELECTION_TOOL::SanitizeSelection()
     if( !rejected.empty() )
     {
         for( BOARD_ITEM* item : rejected )
+        {
             unselect( item );
+        }
 
         // Inform other potentially interested tools
         m_toolMgr->ProcessEvent( UnselectedEvent );
@@ -1986,7 +2020,9 @@ bool SELECTION_TOOL::SanitizeSelection()
     if( !added.empty() )
     {
         for( BOARD_ITEM* item : added )
+        {
             select( item );
+        }
 
         // Inform other potentially interested tools
         m_toolMgr->ProcessEvent( SelectedEvent );
-- 
2.7.4

From 2596aa604f2212ff80709a3b5e4057a6c63deb2c Mon Sep 17 00:00:00 2001
From: Oliver Walters <oliver.henry.walters@xxxxxxxxx>
Date: Mon, 16 Oct 2017 23:01:18 +1100
Subject: [PATCH 08/12] Fixed zone rotation bug

- Zone with MODULE as parent was rotating around its own center, rather than module center
---
 pcbnew/class_module.cpp | 7 ++++---
 pcbnew/class_module.h   | 4 ++--
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/pcbnew/class_module.cpp b/pcbnew/class_module.cpp
index 684cc51..b5349dc 100644
--- a/pcbnew/class_module.cpp
+++ b/pcbnew/class_module.cpp
@@ -2,6 +2,7 @@
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
  * Copyright (C) 2017 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2017 Oliver Walters, oliver.henry.walters at gmail.com
  * Copyright (C) 2015 SoftPLC Corporation, Dick Hollenbeck <dick@xxxxxxxxxxx>
  * Copyright (C) 2015 Wayne Stambaugh <stambaughw@xxxxxxxxxxx>
  * Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
@@ -247,7 +248,7 @@ void MODULE::ClearAllNets()
 }
 
 
-void MODULE::DrawAncre( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
+void MODULE::DrawAnchor( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset,
                         int dim_ancre, GR_DRAWMODE draw_mode )
 {
     auto frame = (PCB_EDIT_FRAME*) panel->GetParent();
@@ -434,7 +435,7 @@ void MODULE::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, GR_DRAWMODE aDrawMode,
     BOARD* brd = GetBoard();
 
     // Draws footprint anchor
-    DrawAncre( aPanel, aDC, aOffset, DIM_ANCRE_MODULE, aDrawMode );
+    DrawAnchor( aPanel, aDC, aOffset, DIM_ANCRE_MODULE, aDrawMode );
 
     // Draw graphic items
     if( brd->IsElementVisible( LAYER_MOD_REFERENCES ) )
@@ -1212,7 +1213,7 @@ void MODULE::SetOrientation( double newangle )
 
     for( ZONE_CONTAINER* zone = m_Zones; zone; zone = zone->Next() )
     {
-        zone->Rotate( zone->GetCenter(), angleChange );
+    	zone->Rotate( GetPosition(), angleChange );
     }
 
     CalculateBoundingBox();
diff --git a/pcbnew/class_module.h b/pcbnew/class_module.h
index 286e953..c8e02f8 100644
--- a/pcbnew/class_module.h
+++ b/pcbnew/class_module.h
@@ -401,12 +401,12 @@ public:
             GR_DRAWMODE draw_mode );
 
     /**
-     * Function DrawAncre
+     * Function DrawAnchor
      * Draw the anchor cross (vertical)
      * Must be done after the pads, because drawing the hole will erase overwrite
      * every thing already drawn.
      */
-    void DrawAncre( EDA_DRAW_PANEL* panel, wxDC* DC,
+    void DrawAnchor( EDA_DRAW_PANEL* panel, wxDC* DC,
             const wxPoint& offset, int dim_ancre, GR_DRAWMODE draw_mode );
 
     ///> @copydoc EDA_ITEM::GetMsgPanelInfo
-- 
2.7.4

From 6900c69c0e47b6ae84651f9fcdfbecd9aaf226b7 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Thu, 19 Oct 2017 08:30:04 +1100
Subject: [PATCH 09/12] Fixes for undo/redo in pcbnew

(Thanks JP!)
---
 pcbnew/board_commit.cpp | 3 ---
 pcbnew/class_module.cpp | 2 ++
 pcbnew/kicad_plugin.cpp | 4 ++--
 3 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/pcbnew/board_commit.cpp b/pcbnew/board_commit.cpp
index bf23715..df2a192 100644
--- a/pcbnew/board_commit.cpp
+++ b/pcbnew/board_commit.cpp
@@ -82,9 +82,6 @@ void BOARD_COMMIT::Push( const wxString& aMessage, bool aCreateUndoEntry )
             if( ent.m_item->Type() != PCB_MODULE_T )
                 ent.m_item = ent.m_item->GetParent();
 
-            //if( ent.m_copy->Type() != PCB_MODULE_T )
-            //    ent.m_copy = ent.m_copy->GetParent();
-
             // We have not saved the module yet, so let's create an entry
             if( savedModules.count( ent.m_item ) == 0 )
             {
diff --git a/pcbnew/class_module.cpp b/pcbnew/class_module.cpp
index b5349dc..2518766 100644
--- a/pcbnew/class_module.cpp
+++ b/pcbnew/class_module.cpp
@@ -219,6 +219,8 @@ MODULE& MODULE::operator=( const MODULE& aOther )
         }
     }
 
+    m_Zones.DeleteAll();
+
     for( ZONE_CONTAINER* zone = aOther.m_Zones; zone; zone = zone->Next() )
     {
         Add( new ZONE_CONTAINER( *zone ) );
diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp
index c3f8340..89fe216 100644
--- a/pcbnew/kicad_plugin.cpp
+++ b/pcbnew/kicad_plugin.cpp
@@ -1217,8 +1217,8 @@ void PCB_IO::formatLayers( LSET aLayerMask, int aNestLevel ) const
         aLayerMask &= ~fr_bk;
     }
 
-    // All inner copper layers are selected
-    if( ( aLayerMask & cu_internal) == cu_internal )
+    // All inner copper layers are selected (when inner layers exist)
+    if( cu_internal.any() && ( aLayerMask & cu_internal) == cu_internal )
     {
         output += " *.In.Cu";
         aLayerMask &= ~cu_internal;
-- 
2.7.4

From 5ba3245df38cffb3834a59e298b9fcf086b25299 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Mon, 23 Oct 2017 00:56:34 +1100
Subject: [PATCH 10/12] Fix undo/redo issues in BOARD_COMMIT

- Fix supplied by JP @ https://lists.launchpad.net/kicad-developers/msg31188.html
---
 include/commit.h        |  6 +++---
 pcbnew/board_commit.cpp | 38 ++++++++++++++++++++++++++++++++++++--
 pcbnew/board_commit.h   |  6 +++++-
 3 files changed, 44 insertions(+), 6 deletions(-)

diff --git a/include/commit.h b/include/commit.h
index d883bba..f2a436a 100644
--- a/include/commit.h
+++ b/include/commit.h
@@ -123,11 +123,11 @@ public:
 
 
     ///> Adds a change of the item aItem of type aChangeType to the change list.
-    COMMIT& Stage( EDA_ITEM* aItem, CHANGE_TYPE aChangeType );
+    virtual COMMIT& Stage( EDA_ITEM* aItem, CHANGE_TYPE aChangeType );
 
-    COMMIT& Stage( std::vector<EDA_ITEM*>& container, CHANGE_TYPE aChangeType );
+    virtual COMMIT& Stage( std::vector<EDA_ITEM*>& container, CHANGE_TYPE aChangeType );
 
-    COMMIT& Stage( const PICKED_ITEMS_LIST& aItems, UNDO_REDO_T aModFlag = UR_UNSPECIFIED );
+    virtual COMMIT& Stage( const PICKED_ITEMS_LIST& aItems, UNDO_REDO_T aModFlag = UR_UNSPECIFIED );
 
     ///> Executes the changes.
     virtual void Push( const wxString& aMessage = wxT( "A commit" ), bool aCreateUndoEntry = true ) = 0;
diff --git a/pcbnew/board_commit.cpp b/pcbnew/board_commit.cpp
index df2a192..785ffe8 100644
--- a/pcbnew/board_commit.cpp
+++ b/pcbnew/board_commit.cpp
@@ -1,7 +1,7 @@
 /*
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
- * Copyright (C) 2016 CERN
+ * Copyright (C) 2017 CERN
  * @author Tomasz Wlostowski <tomasz.wlostowski@xxxxxxx>
  *
  * This program is free software; you can redistribute it and/or
@@ -56,6 +56,33 @@ BOARD_COMMIT::~BOARD_COMMIT()
 }
 
 
+COMMIT& BOARD_COMMIT::Stage( EDA_ITEM* aItem, CHANGE_TYPE aChangeType )
+{
+    // if aItem belongs a footprint, the full footprint will be saved
+    // because undo/redo does not handle "sub items" modifications
+    if( aItem && aItem->Type() != PCB_MODULE_T && aChangeType == CHT_MODIFY)
+    {
+        EDA_ITEM* item = aItem->GetParent();
+
+        if( item && item->Type() == PCB_MODULE_T )  // means aItem belongs a footprint
+            aItem = item;
+    }
+
+    return COMMIT::Stage( aItem, aChangeType );
+}
+
+
+COMMIT& BOARD_COMMIT::Stage( std::vector<EDA_ITEM*>& container, CHANGE_TYPE aChangeType )
+{
+    return COMMIT::Stage( container, aChangeType );
+}
+
+COMMIT& BOARD_COMMIT::Stage( const PICKED_ITEMS_LIST& aItems, UNDO_REDO_T aModFlag )
+{
+    return COMMIT::Stage( aItems, aModFlag );
+}
+
+
 void BOARD_COMMIT::Push( const wxString& aMessage, bool aCreateUndoEntry )
 {
     // Objects potentially interested in changes:
@@ -205,6 +232,14 @@ void BOARD_COMMIT::Push( const wxString& aMessage, bool aCreateUndoEntry )
                     break;
                 }
 
+                // Don't allow zone removal if not editing module
+                case PCB_ZONE_AREA_T:
+                    if( !m_editModules )
+                    {
+                        break;
+                    }
+                    // Fall-through
+
                 // Board items
                 case PCB_LINE_T:                // a segment not on copper layers
                 case PCB_TEXT_T:                // a text on a layer
@@ -214,7 +249,6 @@ void BOARD_COMMIT::Push( const wxString& aMessage, bool aCreateUndoEntry )
                 case PCB_TARGET_T:              // a target (graphic item)
                 case PCB_MARKER_T:              // a marker used to show something
                 case PCB_ZONE_T:                // SEG_ZONE items are now deprecated
-                case PCB_ZONE_AREA_T:
                     view->Remove( boardItem );
 
                     if( !( changeFlags & CHT_DONE ) )
diff --git a/pcbnew/board_commit.h b/pcbnew/board_commit.h
index 197bbfb..8164e9c 100644
--- a/pcbnew/board_commit.h
+++ b/pcbnew/board_commit.h
@@ -1,7 +1,7 @@
 /*
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
- * Copyright (C) 2016 CERN
+ * Copyright (C) 2017 CERN
  * @author Tomasz Wlostowski <tomasz.wlostowski@xxxxxxx>
  *
  * This program is free software; you can redistribute it and/or
@@ -43,6 +43,10 @@ public:
     virtual void Push( const wxString& aMessage = wxT( "A commit" ), bool aCreateUndoEntry = true ) override;
     virtual void Revert() override;
 
+    virtual COMMIT& Stage( EDA_ITEM* aItem, CHANGE_TYPE aChangeType ) override;
+    virtual COMMIT& Stage( std::vector<EDA_ITEM*>& container, CHANGE_TYPE aChangeType ) override;
+    virtual COMMIT& Stage( const PICKED_ITEMS_LIST& aItems, UNDO_REDO_T aModFlag = UR_UNSPECIFIED ) override;
+
 private:
     TOOL_MANAGER* m_toolMgr;
     bool m_editModules;
-- 
2.7.4

From d35b9976e660e903e89f628dc5ddd0af2282943a Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Thu, 26 Oct 2017 16:40:15 +1100
Subject: [PATCH 11/12] Force all copper layers for keepout zones in footprint

- Don't give user the option
- Can edit it once placed in PCB
---
 pcbnew/dialogs/dialog_keepout_area_properties.cpp  |   24 +-
 .../dialog_keepout_area_properties_base.cpp        |  199 ++-
 .../dialog_keepout_area_properties_base.fbp        | 1864 ++++++++++----------
 .../dialogs/dialog_keepout_area_properties_base.h  |  145 +-
 4 files changed, 1127 insertions(+), 1105 deletions(-)

diff --git a/pcbnew/dialogs/dialog_keepout_area_properties.cpp b/pcbnew/dialogs/dialog_keepout_area_properties.cpp
index b8121a7..e4e39bf 100644
--- a/pcbnew/dialogs/dialog_keepout_area_properties.cpp
+++ b/pcbnew/dialogs/dialog_keepout_area_properties.cpp
@@ -120,6 +120,12 @@ DIALOG_KEEPOUT_AREA_PROPERTIES::DIALOG_KEEPOUT_AREA_PROPERTIES( PCB_BASE_FRAME*
     initDialog();
     m_sdbSizerButtonsOK->SetDefault();
 
+    if( aSettings->GetIsInFootprint() )
+    {
+        m_layersListSizer->Show( false );
+        m_sdbSizerButtonsOK->Enable( true );
+    }
+
     FinishDialogSettings();
 }
 
@@ -174,6 +180,14 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::initDialog()
 
     if( m_zonesettings.GetIsInFootprint() )
     {
+        /* TODO
+         * Currently, if a zone is defined inside a footprint,
+         * it exists on ALL copper layers.
+         * If this (in future) ever changes, this code can be re-implemented.
+         *
+         * Oliver Walters - Oct 2017
+         *
+
         // Add F.Cu layer entry
         layerColor = m_parent->Settings().Colors().GetLayerColor( F_Cu );
 
@@ -198,7 +212,7 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::initDialog()
         layerColor = m_parent->Settings().Colors().GetLayerColor( B_Cu );
         row.push_back( wxVariant( makeLayerIcon( _( "Back copper layer" ), layerColor ) ) );
         m_layers->AppendItem( row );
-
+        */
     }
     else
     {
@@ -264,6 +278,7 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::OnLayerSelection( wxDataViewEvent& event )
     // If the zone is defined in a footprint
     if( m_zonesettings.GetIsInFootprint() )
     {
+        /*
         switch( row )
         {
         case 0: // F.Cu
@@ -285,6 +300,7 @@ void DIALOG_KEEPOUT_AREA_PROPERTIES::OnLayerSelection( wxDataViewEvent& event )
         default:
             break;
         }
+        */
     }
     else
     {
@@ -320,6 +336,12 @@ bool DIALOG_KEEPOUT_AREA_PROPERTIES::AcceptOptionsForKeepOut()
         return false;
     }
 
+    if( m_zonesettings.GetIsInFootprint() )
+    {
+        // If defined in a footprint, keepout zones are defined on ALL copper layers
+        m_zonesettings.m_Layers = LSET::AllCuMask();
+    }
+
     if( m_zonesettings.m_Layers.count() == 0 )
     {
         DisplayError( NULL, _( "No layers selected." ) );
diff --git a/pcbnew/dialogs/dialog_keepout_area_properties_base.cpp b/pcbnew/dialogs/dialog_keepout_area_properties_base.cpp
index a55f209..3fef34b 100644
--- a/pcbnew/dialogs/dialog_keepout_area_properties_base.cpp
+++ b/pcbnew/dialogs/dialog_keepout_area_properties_base.cpp
@@ -1,100 +1,99 @@
-///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Aug  4 2017)
-// http://www.wxformbuilder.org/
-//
-// PLEASE DO "NOT" EDIT THIS FILE!
-///////////////////////////////////////////////////////////////////////////
-
-#include "dialog_keepout_area_properties_base.h"
-
-///////////////////////////////////////////////////////////////////////////
-
-BEGIN_EVENT_TABLE( DIALOG_KEEPOUT_AREA_PROPERTIES_BASE, DIALOG_SHIM )
-	EVT_DATAVIEW_ITEM_VALUE_CHANGED( wxID_ANY, DIALOG_KEEPOUT_AREA_PROPERTIES_BASE::_wxFB_OnLayerSelection )
-END_EVENT_TABLE()
-
-DIALOG_KEEPOUT_AREA_PROPERTIES_BASE::DIALOG_KEEPOUT_AREA_PROPERTIES_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
-{
-	this->SetSizeHints( wxSize( 500,-1 ), wxDefaultSize );
-	
-	wxBoxSizer* m_MainSizer;
-	m_MainSizer = new wxBoxSizer( wxVERTICAL );
-	
-	wxBoxSizer* m_UpperSizer;
-	m_UpperSizer = new wxBoxSizer( wxHORIZONTAL );
-	
-	wxBoxSizer* m_layersListSizer;
-	m_layersListSizer = new wxBoxSizer( wxVERTICAL );
-	
-	m_staticTextLayerSelection = new wxStaticText( this, wxID_ANY, _("Keepout Area Layers:"), wxDefaultPosition, wxDefaultSize, 0 );
-	m_staticTextLayerSelection->Wrap( -1 );
-	m_layersListSizer->Add( m_staticTextLayerSelection, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-	
-	m_layers = new wxDataViewListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDV_HORIZ_RULES|wxDV_NO_HEADER );
-	m_layersListSizer->Add( m_layers, 1, wxALL|wxEXPAND, 5 );
-	
-	
-	m_UpperSizer->Add( m_layersListSizer, 1, wxEXPAND, 5 );
-	
-	wxBoxSizer* bSizerRight;
-	bSizerRight = new wxBoxSizer( wxVERTICAL );
-	
-	m_staticTextprops = new wxStaticText( this, wxID_ANY, _("Properties:"), wxDefaultPosition, wxDefaultSize, 0 );
-	m_staticTextprops->Wrap( -1 );
-	bSizerRight->Add( m_staticTextprops, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-	
-	wxString m_OrientEdgesOptChoices[] = { _("Any orientation"), _("180, 90, and 45 degrees") };
-	int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
-	m_OrientEdgesOpt = new wxRadioBox( this, wxID_ANY, _("Zone Edge Orientation:"), wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 1, wxRA_SPECIFY_COLS );
-	m_OrientEdgesOpt->SetSelection( 1 );
-	bSizerRight->Add( m_OrientEdgesOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-	
-	wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched Outline"), _("Full Hatched") };
-	int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
-	m_OutlineAppearanceCtrl = new wxRadioBox( this, wxID_ANY, _("Outline Appearence:"), wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 1, wxRA_SPECIFY_COLS );
-	m_OutlineAppearanceCtrl->SetSelection( 1 );
-	bSizerRight->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxEXPAND, 5 );
-	
-	wxStaticBoxSizer* sbSizerCutoutOpts;
-	sbSizerCutoutOpts = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Keepout Options:") ), wxVERTICAL );
-	
-	m_cbTracksCtrl = new wxCheckBox( sbSizerCutoutOpts->GetStaticBox(), wxID_ANY, _("No tracks"), wxDefaultPosition, wxDefaultSize, 0 );
-	sbSizerCutoutOpts->Add( m_cbTracksCtrl, 0, wxTOP|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-	
-	m_cbViasCtrl = new wxCheckBox( sbSizerCutoutOpts->GetStaticBox(), wxID_ANY, _("No vias"), wxDefaultPosition, wxDefaultSize, 0 );
-	sbSizerCutoutOpts->Add( m_cbViasCtrl, 0, wxTOP|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-	
-	m_cbCopperPourCtrl = new wxCheckBox( sbSizerCutoutOpts->GetStaticBox(), wxID_ANY, _("No copper pour"), wxDefaultPosition, wxDefaultSize, 0 );
-	sbSizerCutoutOpts->Add( m_cbCopperPourCtrl, 0, wxALL|wxEXPAND, 5 );
-	
-	
-	bSizerRight->Add( sbSizerCutoutOpts, 0, wxEXPAND|wxALL, 5 );
-	
-	
-	m_UpperSizer->Add( bSizerRight, 0, wxEXPAND, 5 );
-	
-	
-	m_MainSizer->Add( m_UpperSizer, 1, wxEXPAND, 5 );
-	
-	m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
-	m_MainSizer->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
-	
-	m_sdbSizerButtons = new wxStdDialogButtonSizer();
-	m_sdbSizerButtonsOK = new wxButton( this, wxID_OK );
-	m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK );
-	m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL );
-	m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel );
-	m_sdbSizerButtons->Realize();
-	
-	m_MainSizer->Add( m_sdbSizerButtons, 0, wxEXPAND|wxALL, 5 );
-	
-	
-	this->SetSizer( m_MainSizer );
-	this->Layout();
-	
-	this->Centre( wxBOTH );
-}
-
-DIALOG_KEEPOUT_AREA_PROPERTIES_BASE::~DIALOG_KEEPOUT_AREA_PROPERTIES_BASE()
-{
-}
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Mar 22 2017)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_keepout_area_properties_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+BEGIN_EVENT_TABLE( DIALOG_KEEPOUT_AREA_PROPERTIES_BASE, DIALOG_SHIM )
+	EVT_DATAVIEW_ITEM_VALUE_CHANGED( wxID_ANY, DIALOG_KEEPOUT_AREA_PROPERTIES_BASE::_wxFB_OnLayerSelection )
+END_EVENT_TABLE()
+
+DIALOG_KEEPOUT_AREA_PROPERTIES_BASE::DIALOG_KEEPOUT_AREA_PROPERTIES_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
+{
+	this->SetSizeHints( wxSize( 500,-1 ), wxDefaultSize );
+	
+	wxBoxSizer* m_MainSizer;
+	m_MainSizer = new wxBoxSizer( wxVERTICAL );
+	
+	wxBoxSizer* m_UpperSizer;
+	m_UpperSizer = new wxBoxSizer( wxHORIZONTAL );
+	
+	m_layersListSizer = new wxBoxSizer( wxVERTICAL );
+	
+	m_staticTextLayerSelection = new wxStaticText( this, wxID_ANY, _("Keepout Area Layers:"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_staticTextLayerSelection->Wrap( -1 );
+	m_layersListSizer->Add( m_staticTextLayerSelection, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+	
+	m_layers = new wxDataViewListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDV_HORIZ_RULES|wxDV_NO_HEADER );
+	m_layersListSizer->Add( m_layers, 1, wxALL|wxEXPAND, 5 );
+	
+	
+	m_UpperSizer->Add( m_layersListSizer, 1, wxEXPAND, 5 );
+	
+	wxBoxSizer* bSizerRight;
+	bSizerRight = new wxBoxSizer( wxVERTICAL );
+	
+	m_staticTextprops = new wxStaticText( this, wxID_ANY, _("Properties:"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_staticTextprops->Wrap( -1 );
+	bSizerRight->Add( m_staticTextprops, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+	
+	wxString m_OrientEdgesOptChoices[] = { _("Any orientation"), _("180, 90, and 45 degrees") };
+	int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
+	m_OrientEdgesOpt = new wxRadioBox( this, wxID_ANY, _("Zone Edge Orientation:"), wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 1, wxRA_SPECIFY_COLS );
+	m_OrientEdgesOpt->SetSelection( 1 );
+	bSizerRight->Add( m_OrientEdgesOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+	
+	wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched Outline"), _("Full Hatched") };
+	int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
+	m_OutlineAppearanceCtrl = new wxRadioBox( this, wxID_ANY, _("Outline Appearence:"), wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 1, wxRA_SPECIFY_COLS );
+	m_OutlineAppearanceCtrl->SetSelection( 1 );
+	bSizerRight->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxEXPAND, 5 );
+	
+	wxStaticBoxSizer* sbSizerCutoutOpts;
+	sbSizerCutoutOpts = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Keepout Options:") ), wxVERTICAL );
+	
+	m_cbTracksCtrl = new wxCheckBox( sbSizerCutoutOpts->GetStaticBox(), wxID_ANY, _("No tracks"), wxDefaultPosition, wxDefaultSize, 0 );
+	sbSizerCutoutOpts->Add( m_cbTracksCtrl, 0, wxTOP|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+	
+	m_cbViasCtrl = new wxCheckBox( sbSizerCutoutOpts->GetStaticBox(), wxID_ANY, _("No vias"), wxDefaultPosition, wxDefaultSize, 0 );
+	sbSizerCutoutOpts->Add( m_cbViasCtrl, 0, wxTOP|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+	
+	m_cbCopperPourCtrl = new wxCheckBox( sbSizerCutoutOpts->GetStaticBox(), wxID_ANY, _("No copper pour"), wxDefaultPosition, wxDefaultSize, 0 );
+	sbSizerCutoutOpts->Add( m_cbCopperPourCtrl, 0, wxALL|wxEXPAND, 5 );
+	
+	
+	bSizerRight->Add( sbSizerCutoutOpts, 0, wxEXPAND|wxALL, 5 );
+	
+	
+	m_UpperSizer->Add( bSizerRight, 0, wxEXPAND, 5 );
+	
+	
+	m_MainSizer->Add( m_UpperSizer, 1, wxEXPAND, 5 );
+	
+	m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+	m_MainSizer->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
+	
+	m_sdbSizerButtons = new wxStdDialogButtonSizer();
+	m_sdbSizerButtonsOK = new wxButton( this, wxID_OK );
+	m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK );
+	m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL );
+	m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel );
+	m_sdbSizerButtons->Realize();
+	
+	m_MainSizer->Add( m_sdbSizerButtons, 0, wxEXPAND|wxALL, 5 );
+	
+	
+	this->SetSizer( m_MainSizer );
+	this->Layout();
+	
+	this->Centre( wxBOTH );
+}
+
+DIALOG_KEEPOUT_AREA_PROPERTIES_BASE::~DIALOG_KEEPOUT_AREA_PROPERTIES_BASE()
+{
+}
diff --git a/pcbnew/dialogs/dialog_keepout_area_properties_base.fbp b/pcbnew/dialogs/dialog_keepout_area_properties_base.fbp
index d550aa1..0992822 100644
--- a/pcbnew/dialogs/dialog_keepout_area_properties_base.fbp
+++ b/pcbnew/dialogs/dialog_keepout_area_properties_base.fbp
@@ -1,932 +1,932 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<wxFormBuilder_Project>
-    <FileVersion major="1" minor="13" />
-    <object class="Project" expanded="1">
-        <property name="class_decoration"></property>
-        <property name="code_generation">C++</property>
-        <property name="disconnect_events">1</property>
-        <property name="disconnect_mode">source_name</property>
-        <property name="disconnect_php_events">0</property>
-        <property name="disconnect_python_events">0</property>
-        <property name="embedded_files_path">res</property>
-        <property name="encoding">UTF-8</property>
-        <property name="event_generation">table</property>
-        <property name="file">dialog_keepout_area_properties_base</property>
-        <property name="first_id">1000</property>
-        <property name="help_provider">none</property>
-        <property name="internationalize">1</property>
-        <property name="name">dialog_keepout_areas_properties_base</property>
-        <property name="namespace"></property>
-        <property name="path">.</property>
-        <property name="precompiled_header"></property>
-        <property name="relative_path">1</property>
-        <property name="skip_lua_events">1</property>
-        <property name="skip_php_events">1</property>
-        <property name="skip_python_events">1</property>
-        <property name="ui_table">UI</property>
-        <property name="use_enum">0</property>
-        <property name="use_microsoft_bom">0</property>
-        <object class="Dialog" expanded="1">
-            <property name="aui_managed">0</property>
-            <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
-            <property name="bg"></property>
-            <property name="center">wxBOTH</property>
-            <property name="context_help"></property>
-            <property name="context_menu">1</property>
-            <property name="enabled">1</property>
-            <property name="event_handler">impl_virtual</property>
-            <property name="extra_style"></property>
-            <property name="fg"></property>
-            <property name="font"></property>
-            <property name="hidden">0</property>
-            <property name="id">wxID_ANY</property>
-            <property name="maximum_size"></property>
-            <property name="minimum_size">500,-1</property>
-            <property name="name">DIALOG_KEEPOUT_AREA_PROPERTIES_BASE</property>
-            <property name="pos"></property>
-            <property name="size">650,402</property>
-            <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
-            <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
-            <property name="title">Keepout Area Properties</property>
-            <property name="tooltip"></property>
-            <property name="window_extra_style"></property>
-            <property name="window_name"></property>
-            <property name="window_style">wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER</property>
-            <event name="OnActivate"></event>
-            <event name="OnActivateApp"></event>
-            <event name="OnAuiFindManager"></event>
-            <event name="OnAuiPaneButton"></event>
-            <event name="OnAuiPaneClose"></event>
-            <event name="OnAuiPaneMaximize"></event>
-            <event name="OnAuiPaneRestore"></event>
-            <event name="OnAuiRender"></event>
-            <event name="OnChar"></event>
-            <event name="OnClose"></event>
-            <event name="OnEnterWindow"></event>
-            <event name="OnEraseBackground"></event>
-            <event name="OnHibernate"></event>
-            <event name="OnIconize"></event>
-            <event name="OnIdle"></event>
-            <event name="OnInitDialog"></event>
-            <event name="OnKeyDown"></event>
-            <event name="OnKeyUp"></event>
-            <event name="OnKillFocus"></event>
-            <event name="OnLeaveWindow"></event>
-            <event name="OnLeftDClick"></event>
-            <event name="OnLeftDown"></event>
-            <event name="OnLeftUp"></event>
-            <event name="OnMiddleDClick"></event>
-            <event name="OnMiddleDown"></event>
-            <event name="OnMiddleUp"></event>
-            <event name="OnMotion"></event>
-            <event name="OnMouseEvents"></event>
-            <event name="OnMouseWheel"></event>
-            <event name="OnPaint"></event>
-            <event name="OnRightDClick"></event>
-            <event name="OnRightDown"></event>
-            <event name="OnRightUp"></event>
-            <event name="OnSetFocus"></event>
-            <event name="OnSize"></event>
-            <event name="OnUpdateUI"></event>
-            <object class="wxBoxSizer" expanded="1">
-                <property name="minimum_size"></property>
-                <property name="name">m_MainSizer</property>
-                <property name="orient">wxVERTICAL</property>
-                <property name="permission">none</property>
-                <object class="sizeritem" expanded="1">
-                    <property name="border">5</property>
-                    <property name="flag">wxEXPAND</property>
-                    <property name="proportion">1</property>
-                    <object class="wxBoxSizer" expanded="1">
-                        <property name="minimum_size"></property>
-                        <property name="name">m_UpperSizer</property>
-                        <property name="orient">wxHORIZONTAL</property>
-                        <property name="permission">none</property>
-                        <object class="sizeritem" expanded="1">
-                            <property name="border">5</property>
-                            <property name="flag">wxEXPAND</property>
-                            <property name="proportion">1</property>
-                            <object class="wxBoxSizer" expanded="1">
-                                <property name="minimum_size"></property>
-                                <property name="name">m_layersListSizer</property>
-                                <property name="orient">wxVERTICAL</property>
-                                <property name="permission">none</property>
-                                <object class="sizeritem" expanded="0">
-                                    <property name="border">5</property>
-                                    <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
-                                    <property name="proportion">0</property>
-                                    <object class="wxStaticText" expanded="0">
-                                        <property name="BottomDockable">1</property>
-                                        <property name="LeftDockable">1</property>
-                                        <property name="RightDockable">1</property>
-                                        <property name="TopDockable">1</property>
-                                        <property name="aui_layer"></property>
-                                        <property name="aui_name"></property>
-                                        <property name="aui_position"></property>
-                                        <property name="aui_row"></property>
-                                        <property name="best_size"></property>
-                                        <property name="bg"></property>
-                                        <property name="caption"></property>
-                                        <property name="caption_visible">1</property>
-                                        <property name="center_pane">0</property>
-                                        <property name="close_button">1</property>
-                                        <property name="context_help"></property>
-                                        <property name="context_menu">1</property>
-                                        <property name="default_pane">0</property>
-                                        <property name="dock">Dock</property>
-                                        <property name="dock_fixed">0</property>
-                                        <property name="docking">Left</property>
-                                        <property name="enabled">1</property>
-                                        <property name="fg"></property>
-                                        <property name="floatable">1</property>
-                                        <property name="font"></property>
-                                        <property name="gripper">0</property>
-                                        <property name="hidden">0</property>
-                                        <property name="id">wxID_ANY</property>
-                                        <property name="label">Keepout Area Layers:</property>
-                                        <property name="max_size"></property>
-                                        <property name="maximize_button">0</property>
-                                        <property name="maximum_size"></property>
-                                        <property name="min_size"></property>
-                                        <property name="minimize_button">0</property>
-                                        <property name="minimum_size"></property>
-                                        <property name="moveable">1</property>
-                                        <property name="name">m_staticTextLayerSelection</property>
-                                        <property name="pane_border">1</property>
-                                        <property name="pane_position"></property>
-                                        <property name="pane_size"></property>
-                                        <property name="permission">protected</property>
-                                        <property name="pin_button">1</property>
-                                        <property name="pos"></property>
-                                        <property name="resize">Resizable</property>
-                                        <property name="show">1</property>
-                                        <property name="size"></property>
-                                        <property name="style"></property>
-                                        <property name="subclass"></property>
-                                        <property name="toolbar_pane">0</property>
-                                        <property name="tooltip"></property>
-                                        <property name="window_extra_style"></property>
-                                        <property name="window_name"></property>
-                                        <property name="window_style"></property>
-                                        <property name="wrap">-1</property>
-                                        <event name="OnChar"></event>
-                                        <event name="OnEnterWindow"></event>
-                                        <event name="OnEraseBackground"></event>
-                                        <event name="OnKeyDown"></event>
-                                        <event name="OnKeyUp"></event>
-                                        <event name="OnKillFocus"></event>
-                                        <event name="OnLeaveWindow"></event>
-                                        <event name="OnLeftDClick"></event>
-                                        <event name="OnLeftDown"></event>
-                                        <event name="OnLeftUp"></event>
-                                        <event name="OnMiddleDClick"></event>
-                                        <event name="OnMiddleDown"></event>
-                                        <event name="OnMiddleUp"></event>
-                                        <event name="OnMotion"></event>
-                                        <event name="OnMouseEvents"></event>
-                                        <event name="OnMouseWheel"></event>
-                                        <event name="OnPaint"></event>
-                                        <event name="OnRightDClick"></event>
-                                        <event name="OnRightDown"></event>
-                                        <event name="OnRightUp"></event>
-                                        <event name="OnSetFocus"></event>
-                                        <event name="OnSize"></event>
-                                        <event name="OnUpdateUI"></event>
-                                    </object>
-                                </object>
-                                <object class="sizeritem" expanded="0">
-                                    <property name="border">5</property>
-                                    <property name="flag">wxALL|wxEXPAND</property>
-                                    <property name="proportion">1</property>
-                                    <object class="wxDataViewListCtrl" expanded="0">
-                                        <property name="bg"></property>
-                                        <property name="context_help"></property>
-                                        <property name="context_menu">1</property>
-                                        <property name="enabled">1</property>
-                                        <property name="fg"></property>
-                                        <property name="font"></property>
-                                        <property name="hidden">0</property>
-                                        <property name="id">wxID_ANY</property>
-                                        <property name="maximum_size"></property>
-                                        <property name="minimum_size"></property>
-                                        <property name="name">m_layers</property>
-                                        <property name="permission">protected</property>
-                                        <property name="pos"></property>
-                                        <property name="size"></property>
-                                        <property name="style">wxDV_HORIZ_RULES|wxDV_NO_HEADER</property>
-                                        <property name="subclass"></property>
-                                        <property name="tooltip"></property>
-                                        <property name="window_extra_style"></property>
-                                        <property name="window_name"></property>
-                                        <property name="window_style"></property>
-                                        <event name="OnChar"></event>
-                                        <event name="OnDataViewListCtrlColumnHeaderClick"></event>
-                                        <event name="OnDataViewListCtrlColumnHeaderRightClick"></event>
-                                        <event name="OnDataViewListCtrlColumnReordered"></event>
-                                        <event name="OnDataViewListCtrlColumnSorted"></event>
-                                        <event name="OnDataViewListCtrlItemActivated"></event>
-                                        <event name="OnDataViewListCtrlItemBeginDrag"></event>
-                                        <event name="OnDataViewListCtrlItemCollapsed"></event>
-                                        <event name="OnDataViewListCtrlItemCollapsing"></event>
-                                        <event name="OnDataViewListCtrlItemContextMenu"></event>
-                                        <event name="OnDataViewListCtrlItemDrop"></event>
-                                        <event name="OnDataViewListCtrlItemDropPossible"></event>
-                                        <event name="OnDataViewListCtrlItemEditingDone"></event>
-                                        <event name="OnDataViewListCtrlItemEditingStarted"></event>
-                                        <event name="OnDataViewListCtrlItemExpanded"></event>
-                                        <event name="OnDataViewListCtrlItemExpanding"></event>
-                                        <event name="OnDataViewListCtrlItemStartEditing"></event>
-                                        <event name="OnDataViewListCtrlItemValueChanged">OnLayerSelection</event>
-                                        <event name="OnDataViewListCtrlSelectionChanged"></event>
-                                        <event name="OnEnterWindow"></event>
-                                        <event name="OnEraseBackground"></event>
-                                        <event name="OnKeyDown"></event>
-                                        <event name="OnKeyUp"></event>
-                                        <event name="OnKillFocus"></event>
-                                        <event name="OnLeaveWindow"></event>
-                                        <event name="OnLeftDClick"></event>
-                                        <event name="OnLeftDown"></event>
-                                        <event name="OnLeftUp"></event>
-                                        <event name="OnMiddleDClick"></event>
-                                        <event name="OnMiddleDown"></event>
-                                        <event name="OnMiddleUp"></event>
-                                        <event name="OnMotion"></event>
-                                        <event name="OnMouseEvents"></event>
-                                        <event name="OnMouseWheel"></event>
-                                        <event name="OnPaint"></event>
-                                        <event name="OnRightDClick"></event>
-                                        <event name="OnRightDown"></event>
-                                        <event name="OnRightUp"></event>
-                                        <event name="OnSetFocus"></event>
-                                        <event name="OnSize"></event>
-                                        <event name="OnUpdateUI"></event>
-                                    </object>
-                                </object>
-                            </object>
-                        </object>
-                        <object class="sizeritem" expanded="1">
-                            <property name="border">5</property>
-                            <property name="flag">wxEXPAND</property>
-                            <property name="proportion">0</property>
-                            <object class="wxBoxSizer" expanded="1">
-                                <property name="minimum_size"></property>
-                                <property name="name">bSizerRight</property>
-                                <property name="orient">wxVERTICAL</property>
-                                <property name="permission">none</property>
-                                <object class="sizeritem" expanded="0">
-                                    <property name="border">5</property>
-                                    <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
-                                    <property name="proportion">0</property>
-                                    <object class="wxStaticText" expanded="0">
-                                        <property name="BottomDockable">1</property>
-                                        <property name="LeftDockable">1</property>
-                                        <property name="RightDockable">1</property>
-                                        <property name="TopDockable">1</property>
-                                        <property name="aui_layer"></property>
-                                        <property name="aui_name"></property>
-                                        <property name="aui_position"></property>
-                                        <property name="aui_row"></property>
-                                        <property name="best_size"></property>
-                                        <property name="bg"></property>
-                                        <property name="caption"></property>
-                                        <property name="caption_visible">1</property>
-                                        <property name="center_pane">0</property>
-                                        <property name="close_button">1</property>
-                                        <property name="context_help"></property>
-                                        <property name="context_menu">1</property>
-                                        <property name="default_pane">0</property>
-                                        <property name="dock">Dock</property>
-                                        <property name="dock_fixed">0</property>
-                                        <property name="docking">Left</property>
-                                        <property name="enabled">1</property>
-                                        <property name="fg"></property>
-                                        <property name="floatable">1</property>
-                                        <property name="font"></property>
-                                        <property name="gripper">0</property>
-                                        <property name="hidden">0</property>
-                                        <property name="id">wxID_ANY</property>
-                                        <property name="label">Properties:</property>
-                                        <property name="max_size"></property>
-                                        <property name="maximize_button">0</property>
-                                        <property name="maximum_size"></property>
-                                        <property name="min_size"></property>
-                                        <property name="minimize_button">0</property>
-                                        <property name="minimum_size"></property>
-                                        <property name="moveable">1</property>
-                                        <property name="name">m_staticTextprops</property>
-                                        <property name="pane_border">1</property>
-                                        <property name="pane_position"></property>
-                                        <property name="pane_size"></property>
-                                        <property name="permission">protected</property>
-                                        <property name="pin_button">1</property>
-                                        <property name="pos"></property>
-                                        <property name="resize">Resizable</property>
-                                        <property name="show">1</property>
-                                        <property name="size"></property>
-                                        <property name="style"></property>
-                                        <property name="subclass"></property>
-                                        <property name="toolbar_pane">0</property>
-                                        <property name="tooltip"></property>
-                                        <property name="window_extra_style"></property>
-                                        <property name="window_name"></property>
-                                        <property name="window_style"></property>
-                                        <property name="wrap">-1</property>
-                                        <event name="OnChar"></event>
-                                        <event name="OnEnterWindow"></event>
-                                        <event name="OnEraseBackground"></event>
-                                        <event name="OnKeyDown"></event>
-                                        <event name="OnKeyUp"></event>
-                                        <event name="OnKillFocus"></event>
-                                        <event name="OnLeaveWindow"></event>
-                                        <event name="OnLeftDClick"></event>
-                                        <event name="OnLeftDown"></event>
-                                        <event name="OnLeftUp"></event>
-                                        <event name="OnMiddleDClick"></event>
-                                        <event name="OnMiddleDown"></event>
-                                        <event name="OnMiddleUp"></event>
-                                        <event name="OnMotion"></event>
-                                        <event name="OnMouseEvents"></event>
-                                        <event name="OnMouseWheel"></event>
-                                        <event name="OnPaint"></event>
-                                        <event name="OnRightDClick"></event>
-                                        <event name="OnRightDown"></event>
-                                        <event name="OnRightUp"></event>
-                                        <event name="OnSetFocus"></event>
-                                        <event name="OnSize"></event>
-                                        <event name="OnUpdateUI"></event>
-                                    </object>
-                                </object>
-                                <object class="sizeritem" expanded="0">
-                                    <property name="border">5</property>
-                                    <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
-                                    <property name="proportion">0</property>
-                                    <object class="wxRadioBox" expanded="0">
-                                        <property name="BottomDockable">1</property>
-                                        <property name="LeftDockable">1</property>
-                                        <property name="RightDockable">1</property>
-                                        <property name="TopDockable">1</property>
-                                        <property name="aui_layer"></property>
-                                        <property name="aui_name"></property>
-                                        <property name="aui_position"></property>
-                                        <property name="aui_row"></property>
-                                        <property name="best_size"></property>
-                                        <property name="bg"></property>
-                                        <property name="caption"></property>
-                                        <property name="caption_visible">1</property>
-                                        <property name="center_pane">0</property>
-                                        <property name="choices">&quot;Any orientation&quot; &quot;180, 90, and 45 degrees&quot;</property>
-                                        <property name="close_button">1</property>
-                                        <property name="context_help"></property>
-                                        <property name="context_menu">1</property>
-                                        <property name="default_pane">0</property>
-                                        <property name="dock">Dock</property>
-                                        <property name="dock_fixed">0</property>
-                                        <property name="docking">Left</property>
-                                        <property name="enabled">1</property>
-                                        <property name="fg"></property>
-                                        <property name="floatable">1</property>
-                                        <property name="font"></property>
-                                        <property name="gripper">0</property>
-                                        <property name="hidden">0</property>
-                                        <property name="id">wxID_ANY</property>
-                                        <property name="label">Zone Edge Orientation:</property>
-                                        <property name="majorDimension">1</property>
-                                        <property name="max_size"></property>
-                                        <property name="maximize_button">0</property>
-                                        <property name="maximum_size"></property>
-                                        <property name="min_size"></property>
-                                        <property name="minimize_button">0</property>
-                                        <property name="minimum_size"></property>
-                                        <property name="moveable">1</property>
-                                        <property name="name">m_OrientEdgesOpt</property>
-                                        <property name="pane_border">1</property>
-                                        <property name="pane_position"></property>
-                                        <property name="pane_size"></property>
-                                        <property name="permission">protected</property>
-                                        <property name="pin_button">1</property>
-                                        <property name="pos"></property>
-                                        <property name="resize">Resizable</property>
-                                        <property name="selection">1</property>
-                                        <property name="show">1</property>
-                                        <property name="size"></property>
-                                        <property name="style">wxRA_SPECIFY_COLS</property>
-                                        <property name="subclass"></property>
-                                        <property name="toolbar_pane">0</property>
-                                        <property name="tooltip"></property>
-                                        <property name="validator_data_type"></property>
-                                        <property name="validator_style">wxFILTER_NONE</property>
-                                        <property name="validator_type">wxDefaultValidator</property>
-                                        <property name="validator_variable"></property>
-                                        <property name="window_extra_style"></property>
-                                        <property name="window_name"></property>
-                                        <property name="window_style"></property>
-                                        <event name="OnChar"></event>
-                                        <event name="OnEnterWindow"></event>
-                                        <event name="OnEraseBackground"></event>
-                                        <event name="OnKeyDown"></event>
-                                        <event name="OnKeyUp"></event>
-                                        <event name="OnKillFocus"></event>
-                                        <event name="OnLeaveWindow"></event>
-                                        <event name="OnLeftDClick"></event>
-                                        <event name="OnLeftDown"></event>
-                                        <event name="OnLeftUp"></event>
-                                        <event name="OnMiddleDClick"></event>
-                                        <event name="OnMiddleDown"></event>
-                                        <event name="OnMiddleUp"></event>
-                                        <event name="OnMotion"></event>
-                                        <event name="OnMouseEvents"></event>
-                                        <event name="OnMouseWheel"></event>
-                                        <event name="OnPaint"></event>
-                                        <event name="OnRadioBox"></event>
-                                        <event name="OnRightDClick"></event>
-                                        <event name="OnRightDown"></event>
-                                        <event name="OnRightUp"></event>
-                                        <event name="OnSetFocus"></event>
-                                        <event name="OnSize"></event>
-                                        <event name="OnUpdateUI"></event>
-                                    </object>
-                                </object>
-                                <object class="sizeritem" expanded="0">
-                                    <property name="border">5</property>
-                                    <property name="flag">wxALL|wxEXPAND</property>
-                                    <property name="proportion">0</property>
-                                    <object class="wxRadioBox" expanded="0">
-                                        <property name="BottomDockable">1</property>
-                                        <property name="LeftDockable">1</property>
-                                        <property name="RightDockable">1</property>
-                                        <property name="TopDockable">1</property>
-                                        <property name="aui_layer"></property>
-                                        <property name="aui_name"></property>
-                                        <property name="aui_position"></property>
-                                        <property name="aui_row"></property>
-                                        <property name="best_size"></property>
-                                        <property name="bg"></property>
-                                        <property name="caption"></property>
-                                        <property name="caption_visible">1</property>
-                                        <property name="center_pane">0</property>
-                                        <property name="choices">&quot;Line&quot; &quot;Hatched Outline&quot; &quot;Full Hatched&quot;</property>
-                                        <property name="close_button">1</property>
-                                        <property name="context_help"></property>
-                                        <property name="context_menu">1</property>
-                                        <property name="default_pane">0</property>
-                                        <property name="dock">Dock</property>
-                                        <property name="dock_fixed">0</property>
-                                        <property name="docking">Left</property>
-                                        <property name="enabled">1</property>
-                                        <property name="fg"></property>
-                                        <property name="floatable">1</property>
-                                        <property name="font"></property>
-                                        <property name="gripper">0</property>
-                                        <property name="hidden">0</property>
-                                        <property name="id">wxID_ANY</property>
-                                        <property name="label">Outline Appearence:</property>
-                                        <property name="majorDimension">1</property>
-                                        <property name="max_size"></property>
-                                        <property name="maximize_button">0</property>
-                                        <property name="maximum_size"></property>
-                                        <property name="min_size"></property>
-                                        <property name="minimize_button">0</property>
-                                        <property name="minimum_size"></property>
-                                        <property name="moveable">1</property>
-                                        <property name="name">m_OutlineAppearanceCtrl</property>
-                                        <property name="pane_border">1</property>
-                                        <property name="pane_position"></property>
-                                        <property name="pane_size"></property>
-                                        <property name="permission">protected</property>
-                                        <property name="pin_button">1</property>
-                                        <property name="pos"></property>
-                                        <property name="resize">Resizable</property>
-                                        <property name="selection">1</property>
-                                        <property name="show">1</property>
-                                        <property name="size"></property>
-                                        <property name="style">wxRA_SPECIFY_COLS</property>
-                                        <property name="subclass"></property>
-                                        <property name="toolbar_pane">0</property>
-                                        <property name="tooltip"></property>
-                                        <property name="validator_data_type"></property>
-                                        <property name="validator_style">wxFILTER_NONE</property>
-                                        <property name="validator_type">wxDefaultValidator</property>
-                                        <property name="validator_variable"></property>
-                                        <property name="window_extra_style"></property>
-                                        <property name="window_name"></property>
-                                        <property name="window_style"></property>
-                                        <event name="OnChar"></event>
-                                        <event name="OnEnterWindow"></event>
-                                        <event name="OnEraseBackground"></event>
-                                        <event name="OnKeyDown"></event>
-                                        <event name="OnKeyUp"></event>
-                                        <event name="OnKillFocus"></event>
-                                        <event name="OnLeaveWindow"></event>
-                                        <event name="OnLeftDClick"></event>
-                                        <event name="OnLeftDown"></event>
-                                        <event name="OnLeftUp"></event>
-                                        <event name="OnMiddleDClick"></event>
-                                        <event name="OnMiddleDown"></event>
-                                        <event name="OnMiddleUp"></event>
-                                        <event name="OnMotion"></event>
-                                        <event name="OnMouseEvents"></event>
-                                        <event name="OnMouseWheel"></event>
-                                        <event name="OnPaint"></event>
-                                        <event name="OnRadioBox"></event>
-                                        <event name="OnRightDClick"></event>
-                                        <event name="OnRightDown"></event>
-                                        <event name="OnRightUp"></event>
-                                        <event name="OnSetFocus"></event>
-                                        <event name="OnSize"></event>
-                                        <event name="OnUpdateUI"></event>
-                                    </object>
-                                </object>
-                                <object class="sizeritem" expanded="0">
-                                    <property name="border">5</property>
-                                    <property name="flag">wxEXPAND|wxALL</property>
-                                    <property name="proportion">0</property>
-                                    <object class="wxStaticBoxSizer" expanded="0">
-                                        <property name="id">wxID_ANY</property>
-                                        <property name="label">Keepout Options:</property>
-                                        <property name="minimum_size"></property>
-                                        <property name="name">sbSizerCutoutOpts</property>
-                                        <property name="orient">wxVERTICAL</property>
-                                        <property name="parent">1</property>
-                                        <property name="permission">none</property>
-                                        <event name="OnUpdateUI"></event>
-                                        <object class="sizeritem" expanded="0">
-                                            <property name="border">5</property>
-                                            <property name="flag">wxTOP|wxRIGHT|wxLEFT|wxEXPAND</property>
-                                            <property name="proportion">0</property>
-                                            <object class="wxCheckBox" expanded="0">
-                                                <property name="BottomDockable">1</property>
-                                                <property name="LeftDockable">1</property>
-                                                <property name="RightDockable">1</property>
-                                                <property name="TopDockable">1</property>
-                                                <property name="aui_layer"></property>
-                                                <property name="aui_name"></property>
-                                                <property name="aui_position"></property>
-                                                <property name="aui_row"></property>
-                                                <property name="best_size"></property>
-                                                <property name="bg"></property>
-                                                <property name="caption"></property>
-                                                <property name="caption_visible">1</property>
-                                                <property name="center_pane">0</property>
-                                                <property name="checked">0</property>
-                                                <property name="close_button">1</property>
-                                                <property name="context_help"></property>
-                                                <property name="context_menu">1</property>
-                                                <property name="default_pane">0</property>
-                                                <property name="dock">Dock</property>
-                                                <property name="dock_fixed">0</property>
-                                                <property name="docking">Left</property>
-                                                <property name="enabled">1</property>
-                                                <property name="fg"></property>
-                                                <property name="floatable">1</property>
-                                                <property name="font"></property>
-                                                <property name="gripper">0</property>
-                                                <property name="hidden">0</property>
-                                                <property name="id">wxID_ANY</property>
-                                                <property name="label">No tracks</property>
-                                                <property name="max_size"></property>
-                                                <property name="maximize_button">0</property>
-                                                <property name="maximum_size"></property>
-                                                <property name="min_size"></property>
-                                                <property name="minimize_button">0</property>
-                                                <property name="minimum_size"></property>
-                                                <property name="moveable">1</property>
-                                                <property name="name">m_cbTracksCtrl</property>
-                                                <property name="pane_border">1</property>
-                                                <property name="pane_position"></property>
-                                                <property name="pane_size"></property>
-                                                <property name="permission">protected</property>
-                                                <property name="pin_button">1</property>
-                                                <property name="pos"></property>
-                                                <property name="resize">Resizable</property>
-                                                <property name="show">1</property>
-                                                <property name="size"></property>
-                                                <property name="style"></property>
-                                                <property name="subclass"></property>
-                                                <property name="toolbar_pane">0</property>
-                                                <property name="tooltip"></property>
-                                                <property name="validator_data_type"></property>
-                                                <property name="validator_style">wxFILTER_NONE</property>
-                                                <property name="validator_type">wxDefaultValidator</property>
-                                                <property name="validator_variable"></property>
-                                                <property name="window_extra_style"></property>
-                                                <property name="window_name"></property>
-                                                <property name="window_style"></property>
-                                                <event name="OnChar"></event>
-                                                <event name="OnCheckBox"></event>
-                                                <event name="OnEnterWindow"></event>
-                                                <event name="OnEraseBackground"></event>
-                                                <event name="OnKeyDown"></event>
-                                                <event name="OnKeyUp"></event>
-                                                <event name="OnKillFocus"></event>
-                                                <event name="OnLeaveWindow"></event>
-                                                <event name="OnLeftDClick"></event>
-                                                <event name="OnLeftDown"></event>
-                                                <event name="OnLeftUp"></event>
-                                                <event name="OnMiddleDClick"></event>
-                                                <event name="OnMiddleDown"></event>
-                                                <event name="OnMiddleUp"></event>
-                                                <event name="OnMotion"></event>
-                                                <event name="OnMouseEvents"></event>
-                                                <event name="OnMouseWheel"></event>
-                                                <event name="OnPaint"></event>
-                                                <event name="OnRightDClick"></event>
-                                                <event name="OnRightDown"></event>
-                                                <event name="OnRightUp"></event>
-                                                <event name="OnSetFocus"></event>
-                                                <event name="OnSize"></event>
-                                                <event name="OnUpdateUI"></event>
-                                            </object>
-                                        </object>
-                                        <object class="sizeritem" expanded="0">
-                                            <property name="border">5</property>
-                                            <property name="flag">wxTOP|wxRIGHT|wxLEFT|wxEXPAND</property>
-                                            <property name="proportion">0</property>
-                                            <object class="wxCheckBox" expanded="0">
-                                                <property name="BottomDockable">1</property>
-                                                <property name="LeftDockable">1</property>
-                                                <property name="RightDockable">1</property>
-                                                <property name="TopDockable">1</property>
-                                                <property name="aui_layer"></property>
-                                                <property name="aui_name"></property>
-                                                <property name="aui_position"></property>
-                                                <property name="aui_row"></property>
-                                                <property name="best_size"></property>
-                                                <property name="bg"></property>
-                                                <property name="caption"></property>
-                                                <property name="caption_visible">1</property>
-                                                <property name="center_pane">0</property>
-                                                <property name="checked">0</property>
-                                                <property name="close_button">1</property>
-                                                <property name="context_help"></property>
-                                                <property name="context_menu">1</property>
-                                                <property name="default_pane">0</property>
-                                                <property name="dock">Dock</property>
-                                                <property name="dock_fixed">0</property>
-                                                <property name="docking">Left</property>
-                                                <property name="enabled">1</property>
-                                                <property name="fg"></property>
-                                                <property name="floatable">1</property>
-                                                <property name="font"></property>
-                                                <property name="gripper">0</property>
-                                                <property name="hidden">0</property>
-                                                <property name="id">wxID_ANY</property>
-                                                <property name="label">No vias</property>
-                                                <property name="max_size"></property>
-                                                <property name="maximize_button">0</property>
-                                                <property name="maximum_size"></property>
-                                                <property name="min_size"></property>
-                                                <property name="minimize_button">0</property>
-                                                <property name="minimum_size"></property>
-                                                <property name="moveable">1</property>
-                                                <property name="name">m_cbViasCtrl</property>
-                                                <property name="pane_border">1</property>
-                                                <property name="pane_position"></property>
-                                                <property name="pane_size"></property>
-                                                <property name="permission">protected</property>
-                                                <property name="pin_button">1</property>
-                                                <property name="pos"></property>
-                                                <property name="resize">Resizable</property>
-                                                <property name="show">1</property>
-                                                <property name="size"></property>
-                                                <property name="style"></property>
-                                                <property name="subclass"></property>
-                                                <property name="toolbar_pane">0</property>
-                                                <property name="tooltip"></property>
-                                                <property name="validator_data_type"></property>
-                                                <property name="validator_style">wxFILTER_NONE</property>
-                                                <property name="validator_type">wxDefaultValidator</property>
-                                                <property name="validator_variable"></property>
-                                                <property name="window_extra_style"></property>
-                                                <property name="window_name"></property>
-                                                <property name="window_style"></property>
-                                                <event name="OnChar"></event>
-                                                <event name="OnCheckBox"></event>
-                                                <event name="OnEnterWindow"></event>
-                                                <event name="OnEraseBackground"></event>
-                                                <event name="OnKeyDown"></event>
-                                                <event name="OnKeyUp"></event>
-                                                <event name="OnKillFocus"></event>
-                                                <event name="OnLeaveWindow"></event>
-                                                <event name="OnLeftDClick"></event>
-                                                <event name="OnLeftDown"></event>
-                                                <event name="OnLeftUp"></event>
-                                                <event name="OnMiddleDClick"></event>
-                                                <event name="OnMiddleDown"></event>
-                                                <event name="OnMiddleUp"></event>
-                                                <event name="OnMotion"></event>
-                                                <event name="OnMouseEvents"></event>
-                                                <event name="OnMouseWheel"></event>
-                                                <event name="OnPaint"></event>
-                                                <event name="OnRightDClick"></event>
-                                                <event name="OnRightDown"></event>
-                                                <event name="OnRightUp"></event>
-                                                <event name="OnSetFocus"></event>
-                                                <event name="OnSize"></event>
-                                                <event name="OnUpdateUI"></event>
-                                            </object>
-                                        </object>
-                                        <object class="sizeritem" expanded="0">
-                                            <property name="border">5</property>
-                                            <property name="flag">wxALL|wxEXPAND</property>
-                                            <property name="proportion">0</property>
-                                            <object class="wxCheckBox" expanded="0">
-                                                <property name="BottomDockable">1</property>
-                                                <property name="LeftDockable">1</property>
-                                                <property name="RightDockable">1</property>
-                                                <property name="TopDockable">1</property>
-                                                <property name="aui_layer"></property>
-                                                <property name="aui_name"></property>
-                                                <property name="aui_position"></property>
-                                                <property name="aui_row"></property>
-                                                <property name="best_size"></property>
-                                                <property name="bg"></property>
-                                                <property name="caption"></property>
-                                                <property name="caption_visible">1</property>
-                                                <property name="center_pane">0</property>
-                                                <property name="checked">0</property>
-                                                <property name="close_button">1</property>
-                                                <property name="context_help"></property>
-                                                <property name="context_menu">1</property>
-                                                <property name="default_pane">0</property>
-                                                <property name="dock">Dock</property>
-                                                <property name="dock_fixed">0</property>
-                                                <property name="docking">Left</property>
-                                                <property name="enabled">1</property>
-                                                <property name="fg"></property>
-                                                <property name="floatable">1</property>
-                                                <property name="font"></property>
-                                                <property name="gripper">0</property>
-                                                <property name="hidden">0</property>
-                                                <property name="id">wxID_ANY</property>
-                                                <property name="label">No copper pour</property>
-                                                <property name="max_size"></property>
-                                                <property name="maximize_button">0</property>
-                                                <property name="maximum_size"></property>
-                                                <property name="min_size"></property>
-                                                <property name="minimize_button">0</property>
-                                                <property name="minimum_size"></property>
-                                                <property name="moveable">1</property>
-                                                <property name="name">m_cbCopperPourCtrl</property>
-                                                <property name="pane_border">1</property>
-                                                <property name="pane_position"></property>
-                                                <property name="pane_size"></property>
-                                                <property name="permission">protected</property>
-                                                <property name="pin_button">1</property>
-                                                <property name="pos"></property>
-                                                <property name="resize">Resizable</property>
-                                                <property name="show">1</property>
-                                                <property name="size"></property>
-                                                <property name="style"></property>
-                                                <property name="subclass"></property>
-                                                <property name="toolbar_pane">0</property>
-                                                <property name="tooltip"></property>
-                                                <property name="validator_data_type"></property>
-                                                <property name="validator_style">wxFILTER_NONE</property>
-                                                <property name="validator_type">wxDefaultValidator</property>
-                                                <property name="validator_variable"></property>
-                                                <property name="window_extra_style"></property>
-                                                <property name="window_name"></property>
-                                                <property name="window_style"></property>
-                                                <event name="OnChar"></event>
-                                                <event name="OnCheckBox"></event>
-                                                <event name="OnEnterWindow"></event>
-                                                <event name="OnEraseBackground"></event>
-                                                <event name="OnKeyDown"></event>
-                                                <event name="OnKeyUp"></event>
-                                                <event name="OnKillFocus"></event>
-                                                <event name="OnLeaveWindow"></event>
-                                                <event name="OnLeftDClick"></event>
-                                                <event name="OnLeftDown"></event>
-                                                <event name="OnLeftUp"></event>
-                                                <event name="OnMiddleDClick"></event>
-                                                <event name="OnMiddleDown"></event>
-                                                <event name="OnMiddleUp"></event>
-                                                <event name="OnMotion"></event>
-                                                <event name="OnMouseEvents"></event>
-                                                <event name="OnMouseWheel"></event>
-                                                <event name="OnPaint"></event>
-                                                <event name="OnRightDClick"></event>
-                                                <event name="OnRightDown"></event>
-                                                <event name="OnRightUp"></event>
-                                                <event name="OnSetFocus"></event>
-                                                <event name="OnSize"></event>
-                                                <event name="OnUpdateUI"></event>
-                                            </object>
-                                        </object>
-                                    </object>
-                                </object>
-                            </object>
-                        </object>
-                    </object>
-                </object>
-                <object class="sizeritem" expanded="0">
-                    <property name="border">5</property>
-                    <property name="flag">wxEXPAND | wxALL</property>
-                    <property name="proportion">0</property>
-                    <object class="wxStaticLine" expanded="0">
-                        <property name="BottomDockable">1</property>
-                        <property name="LeftDockable">1</property>
-                        <property name="RightDockable">1</property>
-                        <property name="TopDockable">1</property>
-                        <property name="aui_layer"></property>
-                        <property name="aui_name"></property>
-                        <property name="aui_position"></property>
-                        <property name="aui_row"></property>
-                        <property name="best_size"></property>
-                        <property name="bg"></property>
-                        <property name="caption"></property>
-                        <property name="caption_visible">1</property>
-                        <property name="center_pane">0</property>
-                        <property name="close_button">1</property>
-                        <property name="context_help"></property>
-                        <property name="context_menu">1</property>
-                        <property name="default_pane">0</property>
-                        <property name="dock">Dock</property>
-                        <property name="dock_fixed">0</property>
-                        <property name="docking">Left</property>
-                        <property name="enabled">1</property>
-                        <property name="fg"></property>
-                        <property name="floatable">1</property>
-                        <property name="font"></property>
-                        <property name="gripper">0</property>
-                        <property name="hidden">0</property>
-                        <property name="id">wxID_ANY</property>
-                        <property name="max_size"></property>
-                        <property name="maximize_button">0</property>
-                        <property name="maximum_size"></property>
-                        <property name="min_size"></property>
-                        <property name="minimize_button">0</property>
-                        <property name="minimum_size"></property>
-                        <property name="moveable">1</property>
-                        <property name="name">m_staticline1</property>
-                        <property name="pane_border">1</property>
-                        <property name="pane_position"></property>
-                        <property name="pane_size"></property>
-                        <property name="permission">protected</property>
-                        <property name="pin_button">1</property>
-                        <property name="pos"></property>
-                        <property name="resize">Resizable</property>
-                        <property name="show">1</property>
-                        <property name="size"></property>
-                        <property name="style">wxLI_HORIZONTAL</property>
-                        <property name="subclass"></property>
-                        <property name="toolbar_pane">0</property>
-                        <property name="tooltip"></property>
-                        <property name="window_extra_style"></property>
-                        <property name="window_name"></property>
-                        <property name="window_style"></property>
-                        <event name="OnChar"></event>
-                        <event name="OnEnterWindow"></event>
-                        <event name="OnEraseBackground"></event>
-                        <event name="OnKeyDown"></event>
-                        <event name="OnKeyUp"></event>
-                        <event name="OnKillFocus"></event>
-                        <event name="OnLeaveWindow"></event>
-                        <event name="OnLeftDClick"></event>
-                        <event name="OnLeftDown"></event>
-                        <event name="OnLeftUp"></event>
-                        <event name="OnMiddleDClick"></event>
-                        <event name="OnMiddleDown"></event>
-                        <event name="OnMiddleUp"></event>
-                        <event name="OnMotion"></event>
-                        <event name="OnMouseEvents"></event>
-                        <event name="OnMouseWheel"></event>
-                        <event name="OnPaint"></event>
-                        <event name="OnRightDClick"></event>
-                        <event name="OnRightDown"></event>
-                        <event name="OnRightUp"></event>
-                        <event name="OnSetFocus"></event>
-                        <event name="OnSize"></event>
-                        <event name="OnUpdateUI"></event>
-                    </object>
-                </object>
-                <object class="sizeritem" expanded="0">
-                    <property name="border">5</property>
-                    <property name="flag">wxEXPAND|wxALL</property>
-                    <property name="proportion">0</property>
-                    <object class="wxStdDialogButtonSizer" expanded="0">
-                        <property name="Apply">0</property>
-                        <property name="Cancel">1</property>
-                        <property name="ContextHelp">0</property>
-                        <property name="Help">0</property>
-                        <property name="No">0</property>
-                        <property name="OK">1</property>
-                        <property name="Save">0</property>
-                        <property name="Yes">0</property>
-                        <property name="minimum_size"></property>
-                        <property name="name">m_sdbSizerButtons</property>
-                        <property name="permission">protected</property>
-                        <event name="OnApplyButtonClick"></event>
-                        <event name="OnCancelButtonClick"></event>
-                        <event name="OnContextHelpButtonClick"></event>
-                        <event name="OnHelpButtonClick"></event>
-                        <event name="OnNoButtonClick"></event>
-                        <event name="OnOKButtonClick"></event>
-                        <event name="OnSaveButtonClick"></event>
-                        <event name="OnYesButtonClick"></event>
-                    </object>
-                </object>
-            </object>
-        </object>
-    </object>
-</wxFormBuilder_Project>
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+    <FileVersion major="1" minor="13" />
+    <object class="Project" expanded="1">
+        <property name="class_decoration"></property>
+        <property name="code_generation">C++</property>
+        <property name="disconnect_events">1</property>
+        <property name="disconnect_mode">source_name</property>
+        <property name="disconnect_php_events">0</property>
+        <property name="disconnect_python_events">0</property>
+        <property name="embedded_files_path">res</property>
+        <property name="encoding">UTF-8</property>
+        <property name="event_generation">table</property>
+        <property name="file">dialog_keepout_area_properties_base</property>
+        <property name="first_id">1000</property>
+        <property name="help_provider">none</property>
+        <property name="internationalize">1</property>
+        <property name="name">dialog_keepout_areas_properties_base</property>
+        <property name="namespace"></property>
+        <property name="path">.</property>
+        <property name="precompiled_header"></property>
+        <property name="relative_path">1</property>
+        <property name="skip_lua_events">1</property>
+        <property name="skip_php_events">1</property>
+        <property name="skip_python_events">1</property>
+        <property name="ui_table">UI</property>
+        <property name="use_enum">0</property>
+        <property name="use_microsoft_bom">0</property>
+        <object class="Dialog" expanded="1">
+            <property name="aui_managed">0</property>
+            <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+            <property name="bg"></property>
+            <property name="center">wxBOTH</property>
+            <property name="context_help"></property>
+            <property name="context_menu">1</property>
+            <property name="enabled">1</property>
+            <property name="event_handler">impl_virtual</property>
+            <property name="extra_style"></property>
+            <property name="fg"></property>
+            <property name="font"></property>
+            <property name="hidden">0</property>
+            <property name="id">wxID_ANY</property>
+            <property name="maximum_size"></property>
+            <property name="minimum_size">500,-1</property>
+            <property name="name">DIALOG_KEEPOUT_AREA_PROPERTIES_BASE</property>
+            <property name="pos"></property>
+            <property name="size">650,402</property>
+            <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
+            <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
+            <property name="title">Keepout Area Properties</property>
+            <property name="tooltip"></property>
+            <property name="window_extra_style"></property>
+            <property name="window_name"></property>
+            <property name="window_style">wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER</property>
+            <event name="OnActivate"></event>
+            <event name="OnActivateApp"></event>
+            <event name="OnAuiFindManager"></event>
+            <event name="OnAuiPaneButton"></event>
+            <event name="OnAuiPaneClose"></event>
+            <event name="OnAuiPaneMaximize"></event>
+            <event name="OnAuiPaneRestore"></event>
+            <event name="OnAuiRender"></event>
+            <event name="OnChar"></event>
+            <event name="OnClose"></event>
+            <event name="OnEnterWindow"></event>
+            <event name="OnEraseBackground"></event>
+            <event name="OnHibernate"></event>
+            <event name="OnIconize"></event>
+            <event name="OnIdle"></event>
+            <event name="OnInitDialog"></event>
+            <event name="OnKeyDown"></event>
+            <event name="OnKeyUp"></event>
+            <event name="OnKillFocus"></event>
+            <event name="OnLeaveWindow"></event>
+            <event name="OnLeftDClick"></event>
+            <event name="OnLeftDown"></event>
+            <event name="OnLeftUp"></event>
+            <event name="OnMiddleDClick"></event>
+            <event name="OnMiddleDown"></event>
+            <event name="OnMiddleUp"></event>
+            <event name="OnMotion"></event>
+            <event name="OnMouseEvents"></event>
+            <event name="OnMouseWheel"></event>
+            <event name="OnPaint"></event>
+            <event name="OnRightDClick"></event>
+            <event name="OnRightDown"></event>
+            <event name="OnRightUp"></event>
+            <event name="OnSetFocus"></event>
+            <event name="OnSize"></event>
+            <event name="OnUpdateUI"></event>
+            <object class="wxBoxSizer" expanded="1">
+                <property name="minimum_size"></property>
+                <property name="name">m_MainSizer</property>
+                <property name="orient">wxVERTICAL</property>
+                <property name="permission">none</property>
+                <object class="sizeritem" expanded="1">
+                    <property name="border">5</property>
+                    <property name="flag">wxEXPAND</property>
+                    <property name="proportion">1</property>
+                    <object class="wxBoxSizer" expanded="1">
+                        <property name="minimum_size"></property>
+                        <property name="name">m_UpperSizer</property>
+                        <property name="orient">wxHORIZONTAL</property>
+                        <property name="permission">none</property>
+                        <object class="sizeritem" expanded="1">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND</property>
+                            <property name="proportion">1</property>
+                            <object class="wxBoxSizer" expanded="1">
+                                <property name="minimum_size"></property>
+                                <property name="name">m_layersListSizer</property>
+                                <property name="orient">wxVERTICAL</property>
+                                <property name="permission">protected</property>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Keepout Area Layers:</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticTextLayerSelection</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALL|wxEXPAND</property>
+                                    <property name="proportion">1</property>
+                                    <object class="wxDataViewListCtrl" expanded="0">
+                                        <property name="bg"></property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="font"></property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="minimum_size"></property>
+                                        <property name="name">m_layers</property>
+                                        <property name="permission">protected</property>
+                                        <property name="pos"></property>
+                                        <property name="size"></property>
+                                        <property name="style">wxDV_HORIZ_RULES|wxDV_NO_HEADER</property>
+                                        <property name="subclass"></property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnDataViewListCtrlColumnHeaderClick"></event>
+                                        <event name="OnDataViewListCtrlColumnHeaderRightClick"></event>
+                                        <event name="OnDataViewListCtrlColumnReordered"></event>
+                                        <event name="OnDataViewListCtrlColumnSorted"></event>
+                                        <event name="OnDataViewListCtrlItemActivated"></event>
+                                        <event name="OnDataViewListCtrlItemBeginDrag"></event>
+                                        <event name="OnDataViewListCtrlItemCollapsed"></event>
+                                        <event name="OnDataViewListCtrlItemCollapsing"></event>
+                                        <event name="OnDataViewListCtrlItemContextMenu"></event>
+                                        <event name="OnDataViewListCtrlItemDrop"></event>
+                                        <event name="OnDataViewListCtrlItemDropPossible"></event>
+                                        <event name="OnDataViewListCtrlItemEditingDone"></event>
+                                        <event name="OnDataViewListCtrlItemEditingStarted"></event>
+                                        <event name="OnDataViewListCtrlItemExpanded"></event>
+                                        <event name="OnDataViewListCtrlItemExpanding"></event>
+                                        <event name="OnDataViewListCtrlItemStartEditing"></event>
+                                        <event name="OnDataViewListCtrlItemValueChanged">OnLayerSelection</event>
+                                        <event name="OnDataViewListCtrlSelectionChanged"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                        <object class="sizeritem" expanded="1">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND</property>
+                            <property name="proportion">0</property>
+                            <object class="wxBoxSizer" expanded="1">
+                                <property name="minimum_size"></property>
+                                <property name="name">bSizerRight</property>
+                                <property name="orient">wxVERTICAL</property>
+                                <property name="permission">none</property>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Properties:</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticTextprops</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxRadioBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="choices">&quot;Any orientation&quot; &quot;180, 90, and 45 degrees&quot;</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Zone Edge Orientation:</property>
+                                        <property name="majorDimension">1</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_OrientEdgesOpt</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="selection">1</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style">wxRA_SPECIFY_COLS</property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRadioBox"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALL|wxEXPAND</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxRadioBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="choices">&quot;Line&quot; &quot;Hatched Outline&quot; &quot;Full Hatched&quot;</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Outline Appearence:</property>
+                                        <property name="majorDimension">1</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_OutlineAppearanceCtrl</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="selection">1</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style">wxRA_SPECIFY_COLS</property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRadioBox"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxEXPAND|wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticBoxSizer" expanded="0">
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Keepout Options:</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="name">sbSizerCutoutOpts</property>
+                                        <property name="orient">wxVERTICAL</property>
+                                        <property name="parent">1</property>
+                                        <property name="permission">none</property>
+                                        <event name="OnUpdateUI"></event>
+                                        <object class="sizeritem" expanded="0">
+                                            <property name="border">5</property>
+                                            <property name="flag">wxTOP|wxRIGHT|wxLEFT|wxEXPAND</property>
+                                            <property name="proportion">0</property>
+                                            <object class="wxCheckBox" expanded="0">
+                                                <property name="BottomDockable">1</property>
+                                                <property name="LeftDockable">1</property>
+                                                <property name="RightDockable">1</property>
+                                                <property name="TopDockable">1</property>
+                                                <property name="aui_layer"></property>
+                                                <property name="aui_name"></property>
+                                                <property name="aui_position"></property>
+                                                <property name="aui_row"></property>
+                                                <property name="best_size"></property>
+                                                <property name="bg"></property>
+                                                <property name="caption"></property>
+                                                <property name="caption_visible">1</property>
+                                                <property name="center_pane">0</property>
+                                                <property name="checked">0</property>
+                                                <property name="close_button">1</property>
+                                                <property name="context_help"></property>
+                                                <property name="context_menu">1</property>
+                                                <property name="default_pane">0</property>
+                                                <property name="dock">Dock</property>
+                                                <property name="dock_fixed">0</property>
+                                                <property name="docking">Left</property>
+                                                <property name="enabled">1</property>
+                                                <property name="fg"></property>
+                                                <property name="floatable">1</property>
+                                                <property name="font"></property>
+                                                <property name="gripper">0</property>
+                                                <property name="hidden">0</property>
+                                                <property name="id">wxID_ANY</property>
+                                                <property name="label">No tracks</property>
+                                                <property name="max_size"></property>
+                                                <property name="maximize_button">0</property>
+                                                <property name="maximum_size"></property>
+                                                <property name="min_size"></property>
+                                                <property name="minimize_button">0</property>
+                                                <property name="minimum_size"></property>
+                                                <property name="moveable">1</property>
+                                                <property name="name">m_cbTracksCtrl</property>
+                                                <property name="pane_border">1</property>
+                                                <property name="pane_position"></property>
+                                                <property name="pane_size"></property>
+                                                <property name="permission">protected</property>
+                                                <property name="pin_button">1</property>
+                                                <property name="pos"></property>
+                                                <property name="resize">Resizable</property>
+                                                <property name="show">1</property>
+                                                <property name="size"></property>
+                                                <property name="style"></property>
+                                                <property name="subclass"></property>
+                                                <property name="toolbar_pane">0</property>
+                                                <property name="tooltip"></property>
+                                                <property name="validator_data_type"></property>
+                                                <property name="validator_style">wxFILTER_NONE</property>
+                                                <property name="validator_type">wxDefaultValidator</property>
+                                                <property name="validator_variable"></property>
+                                                <property name="window_extra_style"></property>
+                                                <property name="window_name"></property>
+                                                <property name="window_style"></property>
+                                                <event name="OnChar"></event>
+                                                <event name="OnCheckBox"></event>
+                                                <event name="OnEnterWindow"></event>
+                                                <event name="OnEraseBackground"></event>
+                                                <event name="OnKeyDown"></event>
+                                                <event name="OnKeyUp"></event>
+                                                <event name="OnKillFocus"></event>
+                                                <event name="OnLeaveWindow"></event>
+                                                <event name="OnLeftDClick"></event>
+                                                <event name="OnLeftDown"></event>
+                                                <event name="OnLeftUp"></event>
+                                                <event name="OnMiddleDClick"></event>
+                                                <event name="OnMiddleDown"></event>
+                                                <event name="OnMiddleUp"></event>
+                                                <event name="OnMotion"></event>
+                                                <event name="OnMouseEvents"></event>
+                                                <event name="OnMouseWheel"></event>
+                                                <event name="OnPaint"></event>
+                                                <event name="OnRightDClick"></event>
+                                                <event name="OnRightDown"></event>
+                                                <event name="OnRightUp"></event>
+                                                <event name="OnSetFocus"></event>
+                                                <event name="OnSize"></event>
+                                                <event name="OnUpdateUI"></event>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem" expanded="0">
+                                            <property name="border">5</property>
+                                            <property name="flag">wxTOP|wxRIGHT|wxLEFT|wxEXPAND</property>
+                                            <property name="proportion">0</property>
+                                            <object class="wxCheckBox" expanded="0">
+                                                <property name="BottomDockable">1</property>
+                                                <property name="LeftDockable">1</property>
+                                                <property name="RightDockable">1</property>
+                                                <property name="TopDockable">1</property>
+                                                <property name="aui_layer"></property>
+                                                <property name="aui_name"></property>
+                                                <property name="aui_position"></property>
+                                                <property name="aui_row"></property>
+                                                <property name="best_size"></property>
+                                                <property name="bg"></property>
+                                                <property name="caption"></property>
+                                                <property name="caption_visible">1</property>
+                                                <property name="center_pane">0</property>
+                                                <property name="checked">0</property>
+                                                <property name="close_button">1</property>
+                                                <property name="context_help"></property>
+                                                <property name="context_menu">1</property>
+                                                <property name="default_pane">0</property>
+                                                <property name="dock">Dock</property>
+                                                <property name="dock_fixed">0</property>
+                                                <property name="docking">Left</property>
+                                                <property name="enabled">1</property>
+                                                <property name="fg"></property>
+                                                <property name="floatable">1</property>
+                                                <property name="font"></property>
+                                                <property name="gripper">0</property>
+                                                <property name="hidden">0</property>
+                                                <property name="id">wxID_ANY</property>
+                                                <property name="label">No vias</property>
+                                                <property name="max_size"></property>
+                                                <property name="maximize_button">0</property>
+                                                <property name="maximum_size"></property>
+                                                <property name="min_size"></property>
+                                                <property name="minimize_button">0</property>
+                                                <property name="minimum_size"></property>
+                                                <property name="moveable">1</property>
+                                                <property name="name">m_cbViasCtrl</property>
+                                                <property name="pane_border">1</property>
+                                                <property name="pane_position"></property>
+                                                <property name="pane_size"></property>
+                                                <property name="permission">protected</property>
+                                                <property name="pin_button">1</property>
+                                                <property name="pos"></property>
+                                                <property name="resize">Resizable</property>
+                                                <property name="show">1</property>
+                                                <property name="size"></property>
+                                                <property name="style"></property>
+                                                <property name="subclass"></property>
+                                                <property name="toolbar_pane">0</property>
+                                                <property name="tooltip"></property>
+                                                <property name="validator_data_type"></property>
+                                                <property name="validator_style">wxFILTER_NONE</property>
+                                                <property name="validator_type">wxDefaultValidator</property>
+                                                <property name="validator_variable"></property>
+                                                <property name="window_extra_style"></property>
+                                                <property name="window_name"></property>
+                                                <property name="window_style"></property>
+                                                <event name="OnChar"></event>
+                                                <event name="OnCheckBox"></event>
+                                                <event name="OnEnterWindow"></event>
+                                                <event name="OnEraseBackground"></event>
+                                                <event name="OnKeyDown"></event>
+                                                <event name="OnKeyUp"></event>
+                                                <event name="OnKillFocus"></event>
+                                                <event name="OnLeaveWindow"></event>
+                                                <event name="OnLeftDClick"></event>
+                                                <event name="OnLeftDown"></event>
+                                                <event name="OnLeftUp"></event>
+                                                <event name="OnMiddleDClick"></event>
+                                                <event name="OnMiddleDown"></event>
+                                                <event name="OnMiddleUp"></event>
+                                                <event name="OnMotion"></event>
+                                                <event name="OnMouseEvents"></event>
+                                                <event name="OnMouseWheel"></event>
+                                                <event name="OnPaint"></event>
+                                                <event name="OnRightDClick"></event>
+                                                <event name="OnRightDown"></event>
+                                                <event name="OnRightUp"></event>
+                                                <event name="OnSetFocus"></event>
+                                                <event name="OnSize"></event>
+                                                <event name="OnUpdateUI"></event>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem" expanded="0">
+                                            <property name="border">5</property>
+                                            <property name="flag">wxALL|wxEXPAND</property>
+                                            <property name="proportion">0</property>
+                                            <object class="wxCheckBox" expanded="0">
+                                                <property name="BottomDockable">1</property>
+                                                <property name="LeftDockable">1</property>
+                                                <property name="RightDockable">1</property>
+                                                <property name="TopDockable">1</property>
+                                                <property name="aui_layer"></property>
+                                                <property name="aui_name"></property>
+                                                <property name="aui_position"></property>
+                                                <property name="aui_row"></property>
+                                                <property name="best_size"></property>
+                                                <property name="bg"></property>
+                                                <property name="caption"></property>
+                                                <property name="caption_visible">1</property>
+                                                <property name="center_pane">0</property>
+                                                <property name="checked">0</property>
+                                                <property name="close_button">1</property>
+                                                <property name="context_help"></property>
+                                                <property name="context_menu">1</property>
+                                                <property name="default_pane">0</property>
+                                                <property name="dock">Dock</property>
+                                                <property name="dock_fixed">0</property>
+                                                <property name="docking">Left</property>
+                                                <property name="enabled">1</property>
+                                                <property name="fg"></property>
+                                                <property name="floatable">1</property>
+                                                <property name="font"></property>
+                                                <property name="gripper">0</property>
+                                                <property name="hidden">0</property>
+                                                <property name="id">wxID_ANY</property>
+                                                <property name="label">No copper pour</property>
+                                                <property name="max_size"></property>
+                                                <property name="maximize_button">0</property>
+                                                <property name="maximum_size"></property>
+                                                <property name="min_size"></property>
+                                                <property name="minimize_button">0</property>
+                                                <property name="minimum_size"></property>
+                                                <property name="moveable">1</property>
+                                                <property name="name">m_cbCopperPourCtrl</property>
+                                                <property name="pane_border">1</property>
+                                                <property name="pane_position"></property>
+                                                <property name="pane_size"></property>
+                                                <property name="permission">protected</property>
+                                                <property name="pin_button">1</property>
+                                                <property name="pos"></property>
+                                                <property name="resize">Resizable</property>
+                                                <property name="show">1</property>
+                                                <property name="size"></property>
+                                                <property name="style"></property>
+                                                <property name="subclass"></property>
+                                                <property name="toolbar_pane">0</property>
+                                                <property name="tooltip"></property>
+                                                <property name="validator_data_type"></property>
+                                                <property name="validator_style">wxFILTER_NONE</property>
+                                                <property name="validator_type">wxDefaultValidator</property>
+                                                <property name="validator_variable"></property>
+                                                <property name="window_extra_style"></property>
+                                                <property name="window_name"></property>
+                                                <property name="window_style"></property>
+                                                <event name="OnChar"></event>
+                                                <event name="OnCheckBox"></event>
+                                                <event name="OnEnterWindow"></event>
+                                                <event name="OnEraseBackground"></event>
+                                                <event name="OnKeyDown"></event>
+                                                <event name="OnKeyUp"></event>
+                                                <event name="OnKillFocus"></event>
+                                                <event name="OnLeaveWindow"></event>
+                                                <event name="OnLeftDClick"></event>
+                                                <event name="OnLeftDown"></event>
+                                                <event name="OnLeftUp"></event>
+                                                <event name="OnMiddleDClick"></event>
+                                                <event name="OnMiddleDown"></event>
+                                                <event name="OnMiddleUp"></event>
+                                                <event name="OnMotion"></event>
+                                                <event name="OnMouseEvents"></event>
+                                                <event name="OnMouseWheel"></event>
+                                                <event name="OnPaint"></event>
+                                                <event name="OnRightDClick"></event>
+                                                <event name="OnRightDown"></event>
+                                                <event name="OnRightUp"></event>
+                                                <event name="OnSetFocus"></event>
+                                                <event name="OnSize"></event>
+                                                <event name="OnUpdateUI"></event>
+                                            </object>
+                                        </object>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                    </object>
+                </object>
+                <object class="sizeritem" expanded="0">
+                    <property name="border">5</property>
+                    <property name="flag">wxEXPAND | wxALL</property>
+                    <property name="proportion">0</property>
+                    <object class="wxStaticLine" expanded="0">
+                        <property name="BottomDockable">1</property>
+                        <property name="LeftDockable">1</property>
+                        <property name="RightDockable">1</property>
+                        <property name="TopDockable">1</property>
+                        <property name="aui_layer"></property>
+                        <property name="aui_name"></property>
+                        <property name="aui_position"></property>
+                        <property name="aui_row"></property>
+                        <property name="best_size"></property>
+                        <property name="bg"></property>
+                        <property name="caption"></property>
+                        <property name="caption_visible">1</property>
+                        <property name="center_pane">0</property>
+                        <property name="close_button">1</property>
+                        <property name="context_help"></property>
+                        <property name="context_menu">1</property>
+                        <property name="default_pane">0</property>
+                        <property name="dock">Dock</property>
+                        <property name="dock_fixed">0</property>
+                        <property name="docking">Left</property>
+                        <property name="enabled">1</property>
+                        <property name="fg"></property>
+                        <property name="floatable">1</property>
+                        <property name="font"></property>
+                        <property name="gripper">0</property>
+                        <property name="hidden">0</property>
+                        <property name="id">wxID_ANY</property>
+                        <property name="max_size"></property>
+                        <property name="maximize_button">0</property>
+                        <property name="maximum_size"></property>
+                        <property name="min_size"></property>
+                        <property name="minimize_button">0</property>
+                        <property name="minimum_size"></property>
+                        <property name="moveable">1</property>
+                        <property name="name">m_staticline1</property>
+                        <property name="pane_border">1</property>
+                        <property name="pane_position"></property>
+                        <property name="pane_size"></property>
+                        <property name="permission">protected</property>
+                        <property name="pin_button">1</property>
+                        <property name="pos"></property>
+                        <property name="resize">Resizable</property>
+                        <property name="show">1</property>
+                        <property name="size"></property>
+                        <property name="style">wxLI_HORIZONTAL</property>
+                        <property name="subclass"></property>
+                        <property name="toolbar_pane">0</property>
+                        <property name="tooltip"></property>
+                        <property name="window_extra_style"></property>
+                        <property name="window_name"></property>
+                        <property name="window_style"></property>
+                        <event name="OnChar"></event>
+                        <event name="OnEnterWindow"></event>
+                        <event name="OnEraseBackground"></event>
+                        <event name="OnKeyDown"></event>
+                        <event name="OnKeyUp"></event>
+                        <event name="OnKillFocus"></event>
+                        <event name="OnLeaveWindow"></event>
+                        <event name="OnLeftDClick"></event>
+                        <event name="OnLeftDown"></event>
+                        <event name="OnLeftUp"></event>
+                        <event name="OnMiddleDClick"></event>
+                        <event name="OnMiddleDown"></event>
+                        <event name="OnMiddleUp"></event>
+                        <event name="OnMotion"></event>
+                        <event name="OnMouseEvents"></event>
+                        <event name="OnMouseWheel"></event>
+                        <event name="OnPaint"></event>
+                        <event name="OnRightDClick"></event>
+                        <event name="OnRightDown"></event>
+                        <event name="OnRightUp"></event>
+                        <event name="OnSetFocus"></event>
+                        <event name="OnSize"></event>
+                        <event name="OnUpdateUI"></event>
+                    </object>
+                </object>
+                <object class="sizeritem" expanded="0">
+                    <property name="border">5</property>
+                    <property name="flag">wxEXPAND|wxALL</property>
+                    <property name="proportion">0</property>
+                    <object class="wxStdDialogButtonSizer" expanded="0">
+                        <property name="Apply">0</property>
+                        <property name="Cancel">1</property>
+                        <property name="ContextHelp">0</property>
+                        <property name="Help">0</property>
+                        <property name="No">0</property>
+                        <property name="OK">1</property>
+                        <property name="Save">0</property>
+                        <property name="Yes">0</property>
+                        <property name="minimum_size"></property>
+                        <property name="name">m_sdbSizerButtons</property>
+                        <property name="permission">protected</property>
+                        <event name="OnApplyButtonClick"></event>
+                        <event name="OnCancelButtonClick"></event>
+                        <event name="OnContextHelpButtonClick"></event>
+                        <event name="OnHelpButtonClick"></event>
+                        <event name="OnNoButtonClick"></event>
+                        <event name="OnOKButtonClick"></event>
+                        <event name="OnSaveButtonClick"></event>
+                        <event name="OnYesButtonClick"></event>
+                    </object>
+                </object>
+            </object>
+        </object>
+    </object>
+</wxFormBuilder_Project>
diff --git a/pcbnew/dialogs/dialog_keepout_area_properties_base.h b/pcbnew/dialogs/dialog_keepout_area_properties_base.h
index 0bb9235..98290cc 100644
--- a/pcbnew/dialogs/dialog_keepout_area_properties_base.h
+++ b/pcbnew/dialogs/dialog_keepout_area_properties_base.h
@@ -1,72 +1,73 @@
-///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Aug  4 2017)
-// http://www.wxformbuilder.org/
-//
-// PLEASE DO "NOT" EDIT THIS FILE!
-///////////////////////////////////////////////////////////////////////////
-
-#ifndef __DIALOG_KEEPOUT_AREA_PROPERTIES_BASE_H__
-#define __DIALOG_KEEPOUT_AREA_PROPERTIES_BASE_H__
-
-#include <wx/artprov.h>
-#include <wx/xrc/xmlres.h>
-#include <wx/intl.h>
-class DIALOG_SHIM;
-
-#include "dialog_shim.h"
-#include <wx/string.h>
-#include <wx/stattext.h>
-#include <wx/gdicmn.h>
-#include <wx/font.h>
-#include <wx/colour.h>
-#include <wx/settings.h>
-#include <wx/dataview.h>
-#include <wx/sizer.h>
-#include <wx/radiobox.h>
-#include <wx/checkbox.h>
-#include <wx/statbox.h>
-#include <wx/statline.h>
-#include <wx/button.h>
-#include <wx/dialog.h>
-
-///////////////////////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class DIALOG_KEEPOUT_AREA_PROPERTIES_BASE
-///////////////////////////////////////////////////////////////////////////////
-class DIALOG_KEEPOUT_AREA_PROPERTIES_BASE : public DIALOG_SHIM
-{
-	DECLARE_EVENT_TABLE()
-	private:
-		
-		// Private event handlers
-		void _wxFB_OnLayerSelection( wxDataViewEvent& event ){ OnLayerSelection( event ); }
-		
-	
-	protected:
-		wxStaticText* m_staticTextLayerSelection;
-		wxDataViewListCtrl* m_layers;
-		wxStaticText* m_staticTextprops;
-		wxRadioBox* m_OrientEdgesOpt;
-		wxRadioBox* m_OutlineAppearanceCtrl;
-		wxCheckBox* m_cbTracksCtrl;
-		wxCheckBox* m_cbViasCtrl;
-		wxCheckBox* m_cbCopperPourCtrl;
-		wxStaticLine* m_staticline1;
-		wxStdDialogButtonSizer* m_sdbSizerButtons;
-		wxButton* m_sdbSizerButtonsOK;
-		wxButton* m_sdbSizerButtonsCancel;
-		
-		// Virtual event handlers, overide them in your derived class
-		virtual void OnLayerSelection( wxDataViewEvent& event ) { event.Skip(); }
-		
-	
-	public:
-		
-		DIALOG_KEEPOUT_AREA_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Keepout Area Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 650,402 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER ); 
-		~DIALOG_KEEPOUT_AREA_PROPERTIES_BASE();
-	
-};
-
-#endif //__DIALOG_KEEPOUT_AREA_PROPERTIES_BASE_H__
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Mar 22 2017)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_KEEPOUT_AREA_PROPERTIES_BASE_H__
+#define __DIALOG_KEEPOUT_AREA_PROPERTIES_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+class DIALOG_SHIM;
+
+#include "dialog_shim.h"
+#include <wx/string.h>
+#include <wx/stattext.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/dataview.h>
+#include <wx/sizer.h>
+#include <wx/radiobox.h>
+#include <wx/checkbox.h>
+#include <wx/statbox.h>
+#include <wx/statline.h>
+#include <wx/button.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DIALOG_KEEPOUT_AREA_PROPERTIES_BASE
+///////////////////////////////////////////////////////////////////////////////
+class DIALOG_KEEPOUT_AREA_PROPERTIES_BASE : public DIALOG_SHIM
+{
+	DECLARE_EVENT_TABLE()
+	private:
+		
+		// Private event handlers
+		void _wxFB_OnLayerSelection( wxDataViewEvent& event ){ OnLayerSelection( event ); }
+		
+	
+	protected:
+		wxBoxSizer* m_layersListSizer;
+		wxStaticText* m_staticTextLayerSelection;
+		wxDataViewListCtrl* m_layers;
+		wxStaticText* m_staticTextprops;
+		wxRadioBox* m_OrientEdgesOpt;
+		wxRadioBox* m_OutlineAppearanceCtrl;
+		wxCheckBox* m_cbTracksCtrl;
+		wxCheckBox* m_cbViasCtrl;
+		wxCheckBox* m_cbCopperPourCtrl;
+		wxStaticLine* m_staticline1;
+		wxStdDialogButtonSizer* m_sdbSizerButtons;
+		wxButton* m_sdbSizerButtonsOK;
+		wxButton* m_sdbSizerButtonsCancel;
+		
+		// Virtual event handlers, overide them in your derived class
+		virtual void OnLayerSelection( wxDataViewEvent& event ) { event.Skip(); }
+		
+	
+	public:
+		
+		DIALOG_KEEPOUT_AREA_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Keepout Area Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 650,402 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER ); 
+		~DIALOG_KEEPOUT_AREA_PROPERTIES_BASE();
+	
+};
+
+#endif //__DIALOG_KEEPOUT_AREA_PROPERTIES_BASE_H__
-- 
2.7.4

From e52a8d38828587ca0199ab3a5e805884baf46c84 Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Thu, 26 Oct 2017 17:38:09 +1100
Subject: [PATCH 12/12] Allow selection of footprint zone in PCBNEW

- Select zone and edit zone parameters
- Move zone vertices
---
 pcbnew/class_board.cpp          | 30 ++++++++++++++++--------------
 pcbnew/collectors.cpp           |  7 ++++---
 pcbnew/tools/selection_tool.cpp | 13 ++++++++++++-
 3 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/pcbnew/class_board.cpp b/pcbnew/class_board.cpp
index a3b928b..2010a82 100644
--- a/pcbnew/class_board.cpp
+++ b/pcbnew/class_board.cpp
@@ -1174,7 +1174,23 @@ SEARCH_RESULT BOARD::Visit( INSPECTOR inspector, void* testData, const KICAD_T s
 
                 break;
             }
+            break;
+
+        case PCB_ZONE_AREA_T:
+
+            // Zones can also live inside footprints (modules)
+            result = IterateForward( m_Modules, inspector, testData, p );
 
+            // PCB_ZONE_AREA_T are in the m_ZoneDescriptorList std::vector
+            for( unsigned i = 0; i< m_ZoneDescriptorList.size(); ++i )
+            {
+                result = m_ZoneDescriptorList[i]->Visit( inspector, testData, p );
+
+                if( result == SEARCH_QUIT )
+                    break;
+            }
+
+            ++p;
             break;
 
         case PCB_LINE_T:
@@ -1269,20 +1285,6 @@ SEARCH_RESULT BOARD::Visit( INSPECTOR inspector, void* testData, const KICAD_T s
             ++p;
             break;
 
-        case PCB_ZONE_AREA_T:
-
-            // PCB_ZONE_AREA_T are in the m_ZoneDescriptorList std::vector
-            for( unsigned i = 0; i< m_ZoneDescriptorList.size(); ++i )
-            {
-                result = m_ZoneDescriptorList[i]->Visit( inspector, testData, p );
-
-                if( result == SEARCH_QUIT )
-                    break;
-            }
-
-            ++p;
-            break;
-
         case PCB_ZONE_T:
             result = IterateForward( m_Zone, inspector, testData, p );
             ++p;
diff --git a/pcbnew/collectors.cpp b/pcbnew/collectors.cpp
index 176d2ab..a8cc5b5 100644
--- a/pcbnew/collectors.cpp
+++ b/pcbnew/collectors.cpp
@@ -47,11 +47,11 @@ const KICAD_T GENERAL_COLLECTOR::AllBoardItems[] = {
     PCB_TARGET_T,                // in m_Drawings
     PCB_VIA_T,                   // in m_Tracks
     PCB_TRACE_T,                 // in m_Tracks
+    PCB_ZONE_AREA_T,             // in m_ZoneDescriptorList
     PCB_PAD_T,                   // in modules
     PCB_MODULE_TEXT_T,           // in modules
     PCB_MODULE_T,                // in m_Modules
     PCB_ZONE_T,                  // in m_Zones
-    PCB_ZONE_AREA_T,             // in m_ZoneDescriptorList
     EOT
 };
 
@@ -81,8 +81,8 @@ const KICAD_T GENERAL_COLLECTOR::AllButZones[] = {
     PCB_TRACE_T,
     PCB_PAD_T,
     PCB_MODULE_TEXT_T,
-    PCB_MODULE_T,
     PCB_ZONE_AREA_T,         // if it is visible on screen, it should be selectable
+    PCB_MODULE_T,
     EOT
 };
 
@@ -95,6 +95,7 @@ const KICAD_T GENERAL_COLLECTOR::Modules[] = {
 
 const KICAD_T GENERAL_COLLECTOR::PadsOrModules[] = {
     PCB_PAD_T,
+    PCB_ZONE_AREA_T,    // Zones defined within footprints should be selectable
     PCB_MODULE_T,
     EOT
 };
@@ -114,8 +115,8 @@ const KICAD_T GENERAL_COLLECTOR::ModulesAndTheirItems[] = {
     PCB_MODULE_TEXT_T,
     PCB_MODULE_EDGE_T,
     PCB_PAD_T,
-    PCB_MODULE_T,
     PCB_ZONE_AREA_T,
+    PCB_MODULE_T,
     EOT
 };
 
diff --git a/pcbnew/tools/selection_tool.cpp b/pcbnew/tools/selection_tool.cpp
index 9e4292a..aedbae8 100644
--- a/pcbnew/tools/selection_tool.cpp
+++ b/pcbnew/tools/selection_tool.cpp
@@ -1988,16 +1988,27 @@ bool SELECTION_TOOL::SanitizeSelection()
                 if( parentSelected )
                 {
                     rejected.insert( item );
+
+                    if( !mod->IsSelected() )
+                    {
+                        added.insert( mod );
+                    }
                 }
 
                 break;
 
             case PCB_ZONE_AREA_T:
                 // Don't select a zone if its parent is selected
-                if( !m_editModules && parentSelected )
+                if( mod && ( mod->IsLocked() ) )
+                {
+                    rejected.insert( item );
+                }
+
+                if( parentSelected )
                 {
                     rejected.insert( item );
                 }
+
                 break;
 
             default:
-- 
2.7.4


References