Fixes: https://bugs.launchpad.net/kicad/+bug/1673792
From 3212a211cc04d81eac4fcc2a1ebe0e0383b5a821 Mon Sep 17 00:00:00 2001
From: Jon Evans <j...@craftyjon.com>
Date: Thu, 11 Jan 2018 22:32:14 -0500
Subject: [PATCH] LSET::UIOrder and LSET::Technicals now match layer widget
 order

Fixes: lp:1673792
* https://bugs.launchpad.net/kicad/+bug/1673792
---
 common/lset.cpp                           | 52 ++++++++++++++++++++++---------
 include/layers_id_colors_and_visibility.h |  3 ++
 2 files changed, 40 insertions(+), 15 deletions(-)

diff --git a/common/lset.cpp b/common/lset.cpp
index 8008b0ac4..9ef9de2f5 100644
--- a/common/lset.cpp
+++ b/common/lset.cpp
@@ -190,18 +190,18 @@ LSEQ LSET::Technicals( LSET aSetToOmit ) const
 {
     // desired sequence
     static const PCB_LAYER_ID sequence[] = {
-        B_Adhes,
         F_Adhes,
-        B_Paste,
+        B_Adhes,
         F_Paste,
-        B_SilkS,
+        B_Paste,
         F_SilkS,
-        B_Mask,
+        B_SilkS,
         F_Mask,
-        B_CrtYd,
+        B_Mask,
         F_CrtYd,
-        B_Fab,
+        B_CrtYd,
         F_Fab,
+        B_Fab,
     };
 
     LSET subset = ~aSetToOmit & *this;
@@ -226,6 +226,33 @@ LSEQ LSET::Users() const
 }
 
 
+LSEQ LSET::TechAndUserUIOrder() const
+{
+    static const PCB_LAYER_ID sequence[] = {
+        F_Adhes,
+        B_Adhes,
+        F_Paste,
+        B_Paste,
+        F_SilkS,
+        B_SilkS,
+        F_Mask,
+        B_Mask,
+        Dwgs_User,
+        Cmts_User,
+        Eco1_User,
+        Eco2_User,
+        Edge_Cuts,
+        Margin,
+        F_CrtYd,
+        B_CrtYd,
+        F_Fab,
+        B_Fab,
+   };
+
+   return Seq( sequence, DIM( sequence ) );
+}
+
+
 std::string LSET::FmtBin() const
 {
     std::string ret;
@@ -758,16 +785,11 @@ LSET LSET::BackMask()
 
 LSEQ LSET::UIOrder() const
 {
-    PCB_LAYER_ID order[PCB_LAYER_ID_COUNT];
-
-    // Assmuming that the PCB_LAYER_ID order is according to preferred UI order, as of
-    // today this is true.  When that becomes not true, its easy to change the order
-    // in here to compensate.
-
-    for( unsigned i=0;  i<DIM(order);  ++i )
-        order[i] = PCB_LAYER_ID( i );
+    LSEQ order = CuStack();
+    LSEQ techuser = TechAndUserUIOrder();
+    order.insert( order.end(), techuser.begin(), techuser.end() );
 
-    return Seq( order, DIM( order ) );
+    return order;
 }
 
 
diff --git a/include/layers_id_colors_and_visibility.h b/include/layers_id_colors_and_visibility.h
index a3d70c936..01b5df900 100644
--- a/include/layers_id_colors_and_visibility.h
+++ b/include/layers_id_colors_and_visibility.h
@@ -546,6 +546,9 @@ public:
     /// *_User layers.
     LSEQ Users() const;
 
+    /// Returns the technical and user layers in the order shown in layer widget
+    LSEQ TechAndUserUIOrder() const;
+
     LSEQ UIOrder() const;
 
     /**
-- 
2.14.1

_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to