← Back to team overview

kicad-developers team mailing list archive

Re: More layer selection options.

 

Yeah, you are right, modified the patch to show edge cuts, it felt better actually.



On 07/21/2017 07:04 PM, Eldar Khayrullin wrote:
Hello.
Maybe it will be good to show Edge Cut always.

В Пятница, 21 июл. 2017 в 6:57 , Kristoffer Ödmark <kristofferodmark90@xxxxxxxxx> написал:
Added a few more layer selections to the layer sidebar. Also included two modified versions of the show all layers icon, for front and back, but I couldnt find out how to make them into the cpp files. link: https://www.youtube.com/watch?v=148ZMCNWqTw&feature=youtu.be _______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx> Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp
>From 0455e103aa757487d84a8bbb7e8743423f8ab4e5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kristoffer=20=C3=96dmark?= <kristoffer.odmark90@xxxxxxxxx>
Date: Wed, 19 Jul 2017 23:37:10 +0200
Subject: [PATCH] added more layer selector features

---
 bitmaps_png/sources/show_all_back_layers.svg  | 302 ++++++++++++++++++++++++++
 bitmaps_png/sources/show_all_front_layers.svg | 302 ++++++++++++++++++++++++++
 pcbnew/class_pcb_layer_widget.cpp             | 206 +++++++++++++-----
 pcbnew/class_pcb_layer_widget.h               |  20 +-
 4 files changed, 769 insertions(+), 61 deletions(-)
 create mode 100644 bitmaps_png/sources/show_all_back_layers.svg
 create mode 100644 bitmaps_png/sources/show_all_front_layers.svg

diff --git a/bitmaps_png/sources/show_all_back_layers.svg b/bitmaps_png/sources/show_all_back_layers.svg
new file mode 100644
index 000000000..efcc3892c
--- /dev/null
+++ b/bitmaps_png/sources/show_all_back_layers.svg
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   height="26"
+   width="26"
+   version="1.1"
+   id="svg2"
+   inkscape:version="0.92.1 r"
+   sodipodi:docname="show_all_back.svg">
+  <metadata
+     id="metadata40">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="2560"
+     inkscape:window-height="1440"
+     id="namedview38"
+     showgrid="true"
+     inkscape:snap-to-guides="false"
+     inkscape:snap-grids="true"
+     inkscape:zoom="20.153846"
+     inkscape:cx="13"
+     inkscape:cy="13"
+     inkscape:window-x="2560"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3017"
+       empspacing="2"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="0.5"
+       spacingy="0.5"
+       originx="0"
+       originy="0" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3784"
+       inkscape:collect="always">
+      <stop
+         id="stop3786"
+         offset="0"
+         style="stop-color:#bebebe;stop-opacity:1" />
+      <stop
+         id="stop3788"
+         offset="1"
+         style="stop-color:#d2d2d2;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3013"
+       inkscape:collect="always">
+      <stop
+         id="stop3015"
+         offset="0"
+         style="stop-color:#6e6e6e;stop-opacity:1" />
+      <stop
+         id="stop3017"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1" />
+    </linearGradient>
+    <filter
+       id="c"
+       height="1.3651"
+       width="1.2097"
+       color-interpolation-filters="sRGB"
+       y="-0.18257"
+       x="-0.10484">
+      <feGaussianBlur
+         stdDeviation="1.5978799"
+         id="feGaussianBlur7" />
+    </filter>
+    <filter
+       id="d"
+       height="1.4696"
+       width="1.4809999"
+       color-interpolation-filters="sRGB"
+       y="-0.23481999"
+       x="-0.24049">
+      <feGaussianBlur
+         stdDeviation="1.5978799"
+         id="feGaussianBlur10" />
+    </filter>
+    <linearGradient
+       id="c-1"
+       y2="6.7758002"
+       gradientUnits="userSpaceOnUse"
+       x2="20.631001"
+       gradientTransform="matrix(0.98748,0,0,1.0024,-5.1519366,34.914162)"
+       y1="42.254002"
+       x1="19.648001">
+      <stop
+         stop-color="#b6b6b6"
+         offset="0"
+         id="stop7" />
+      <stop
+         stop-color="#f2f2f2"
+         offset=".5"
+         id="stop9" />
+      <stop
+         stop-color="#fafafa"
+         offset=".67613"
+         id="stop11" />
+      <stop
+         stop-color="#d8d8d8"
+         offset=".84052"
+         id="stop13" />
+      <stop
+         stop-color="#f2f2f2"
+         offset=".875"
+         id="stop15" />
+      <stop
+         stop-color="#dbdbdb"
+         offset="1"
+         id="stop17" />
+    </linearGradient>
+    <linearGradient
+       id="d-9"
+       y2="-4.3003001"
+       gradientUnits="userSpaceOnUse"
+       x2="25.291"
+       gradientTransform="matrix(0.99518,0,0,0.9948,21.199415,27.899328)"
+       y1="-3.6324"
+       x1="50.153">
+      <stop
+         stop-color="#fff"
+         offset="0"
+         id="stop20" />
+      <stop
+         offset="1"
+         id="stop22" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3846"
+       id="radialGradient3852"
+       cx="13"
+       cy="13"
+       fx="13"
+       fy="13"
+       r="12"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.75,0,0,0.75,3.25,3.25)" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3846">
+      <stop
+         style="stop-color:#a3a3a3;stop-opacity:1"
+         offset="0"
+         id="stop3848" />
+      <stop
+         style="stop-color:#dcdcdc;stop-opacity:1"
+         offset="1"
+         id="stop3850" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3836"
+       id="linearGradient3842"
+       x1="25.5"
+       y1="25.5"
+       x2="25.5"
+       y2="1"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3836">
+      <stop
+         style="stop-color:#505050;stop-opacity:1"
+         offset="0"
+         id="stop3838" />
+      <stop
+         style="stop-color:#969696;stop-opacity:1"
+         offset="1"
+         id="stop3840" />
+    </linearGradient>
+    <radialGradient
+       r="12"
+       fy="15.666667"
+       fx="-10.333331"
+       cy="15.666667"
+       cx="-10.333331"
+       gradientTransform="matrix(0.54166672,1.9742641e-8,-1.9742639e-8,0.54166667,22.097221,8.0138889)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3873"
+       xlink:href="#linearGradient3784"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(20.999999,1.4999999)"
+       y2="6"
+       x2="5.500001"
+       y1="24"
+       x1="5.500001"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3875"
+       xlink:href="#linearGradient3013"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4067"
+       id="linearGradient4065"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.41988577,0,0,0.39843198,7.524294,7.9051743)"
+       x1="8.6861582"
+       y1="9.6206512"
+       x2="37.265358"
+       y2="35.973965" />
+    <linearGradient
+       id="linearGradient4067"
+       y2="39.685001"
+       gradientUnits="userSpaceOnUse"
+       x2="34.534"
+       gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
+       y1="12.285"
+       x1="14.463">
+      <stop
+         stop-color="#c9c9c9"
+         offset="0"
+         id="stop4069" />
+      <stop
+         stop-color="#f8f8f8"
+         offset="0.44999999"
+         id="stop4071" />
+      <stop
+         stop-color="#e2e2e2"
+         offset="0.66666645"
+         id="stop4073" />
+      <stop
+         stop-color="#b0b0b0"
+         offset="0.95000005"
+         id="stop4075" />
+      <stop
+         stop-color="#c9c9c9"
+         offset="1"
+         id="stop4077" />
+    </linearGradient>
+  </defs>
+  <path
+     sodipodi:nodetypes="ccccc"
+     inkscape:connector-curvature="0"
+     id="path3835"
+     d="m 10.5,16.5 15,0 -10,8 -15,0 z"
+     style="fill:#a000a0;fill-opacity:1;stroke:#4d4d4d;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <g
+     transform="matrix(1.6382539,0,0,1.5572263,-0.2427793,0.36314149)"
+     id="g16">
+    <rect
+       height="16"
+       width="16"
+       y="0"
+       x="0"
+       id="rect18"
+       style="fill-opacity:0" />
+  </g>
+  <path
+     style="fill:#00a000;fill-opacity:1;stroke:#4d4d4d;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 11,11.5 14.5,0 -10,8 -15,0 z"
+     id="rect3828"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ccccc" />
+  <path
+     sodipodi:nodetypes="ccccc"
+     inkscape:connector-curvature="0"
+     id="path3831"
+     d="m 10.5,6.5 15,0 -10,8 -15,0 z"
+     style="fill:#ffffff;fill-opacity:1;stroke:#4d4d4d;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     style="fill:#ffffff;fill-opacity:1;stroke:#4d4d4d;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 10.5,1.5 15,0 -10,8 -15,0 z"
+     id="path3833"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ccccc" />
+</svg>
diff --git a/bitmaps_png/sources/show_all_front_layers.svg b/bitmaps_png/sources/show_all_front_layers.svg
new file mode 100644
index 000000000..9eee8e325
--- /dev/null
+++ b/bitmaps_png/sources/show_all_front_layers.svg
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   height="26"
+   width="26"
+   version="1.1"
+   id="svg2"
+   inkscape:version="0.92.1 r"
+   sodipodi:docname="show_all_front.svg">
+  <metadata
+     id="metadata40">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="2560"
+     inkscape:window-height="1440"
+     id="namedview38"
+     showgrid="true"
+     inkscape:snap-to-guides="false"
+     inkscape:snap-grids="true"
+     inkscape:zoom="20.153846"
+     inkscape:cx="13"
+     inkscape:cy="13"
+     inkscape:window-x="2560"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3017"
+       empspacing="2"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="0.5"
+       spacingy="0.5"
+       originx="0"
+       originy="0" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3784"
+       inkscape:collect="always">
+      <stop
+         id="stop3786"
+         offset="0"
+         style="stop-color:#bebebe;stop-opacity:1" />
+      <stop
+         id="stop3788"
+         offset="1"
+         style="stop-color:#d2d2d2;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3013"
+       inkscape:collect="always">
+      <stop
+         id="stop3015"
+         offset="0"
+         style="stop-color:#6e6e6e;stop-opacity:1" />
+      <stop
+         id="stop3017"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1" />
+    </linearGradient>
+    <filter
+       id="c"
+       height="1.3651"
+       width="1.2097"
+       color-interpolation-filters="sRGB"
+       y="-0.18257"
+       x="-0.10484">
+      <feGaussianBlur
+         stdDeviation="1.5978799"
+         id="feGaussianBlur7" />
+    </filter>
+    <filter
+       id="d"
+       height="1.4696"
+       width="1.4809999"
+       color-interpolation-filters="sRGB"
+       y="-0.23481999"
+       x="-0.24049">
+      <feGaussianBlur
+         stdDeviation="1.5978799"
+         id="feGaussianBlur10" />
+    </filter>
+    <linearGradient
+       id="c-1"
+       y2="6.7758002"
+       gradientUnits="userSpaceOnUse"
+       x2="20.631001"
+       gradientTransform="matrix(0.98748,0,0,1.0024,-5.1519366,34.914162)"
+       y1="42.254002"
+       x1="19.648001">
+      <stop
+         stop-color="#b6b6b6"
+         offset="0"
+         id="stop7" />
+      <stop
+         stop-color="#f2f2f2"
+         offset=".5"
+         id="stop9" />
+      <stop
+         stop-color="#fafafa"
+         offset=".67613"
+         id="stop11" />
+      <stop
+         stop-color="#d8d8d8"
+         offset=".84052"
+         id="stop13" />
+      <stop
+         stop-color="#f2f2f2"
+         offset=".875"
+         id="stop15" />
+      <stop
+         stop-color="#dbdbdb"
+         offset="1"
+         id="stop17" />
+    </linearGradient>
+    <linearGradient
+       id="d-9"
+       y2="-4.3003001"
+       gradientUnits="userSpaceOnUse"
+       x2="25.291"
+       gradientTransform="matrix(0.99518,0,0,0.9948,21.199415,27.899328)"
+       y1="-3.6324"
+       x1="50.153">
+      <stop
+         stop-color="#fff"
+         offset="0"
+         id="stop20" />
+      <stop
+         offset="1"
+         id="stop22" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3846"
+       id="radialGradient3852"
+       cx="13"
+       cy="13"
+       fx="13"
+       fy="13"
+       r="12"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.75,0,0,0.75,3.25,3.25)" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3846">
+      <stop
+         style="stop-color:#a3a3a3;stop-opacity:1"
+         offset="0"
+         id="stop3848" />
+      <stop
+         style="stop-color:#dcdcdc;stop-opacity:1"
+         offset="1"
+         id="stop3850" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3836"
+       id="linearGradient3842"
+       x1="25.5"
+       y1="25.5"
+       x2="25.5"
+       y2="1"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3836">
+      <stop
+         style="stop-color:#505050;stop-opacity:1"
+         offset="0"
+         id="stop3838" />
+      <stop
+         style="stop-color:#969696;stop-opacity:1"
+         offset="1"
+         id="stop3840" />
+    </linearGradient>
+    <radialGradient
+       r="12"
+       fy="15.666667"
+       fx="-10.333331"
+       cy="15.666667"
+       cx="-10.333331"
+       gradientTransform="matrix(0.54166672,1.9742641e-8,-1.9742639e-8,0.54166667,22.097221,8.0138889)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3873"
+       xlink:href="#linearGradient3784"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(20.999999,1.4999999)"
+       y2="6"
+       x2="5.500001"
+       y1="24"
+       x1="5.500001"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3875"
+       xlink:href="#linearGradient3013"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4067"
+       id="linearGradient4065"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.41988577,0,0,0.39843198,7.524294,7.9051743)"
+       x1="8.6861582"
+       y1="9.6206512"
+       x2="37.265358"
+       y2="35.973965" />
+    <linearGradient
+       id="linearGradient4067"
+       y2="39.685001"
+       gradientUnits="userSpaceOnUse"
+       x2="34.534"
+       gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
+       y1="12.285"
+       x1="14.463">
+      <stop
+         stop-color="#c9c9c9"
+         offset="0"
+         id="stop4069" />
+      <stop
+         stop-color="#f8f8f8"
+         offset="0.44999999"
+         id="stop4071" />
+      <stop
+         stop-color="#e2e2e2"
+         offset="0.66666645"
+         id="stop4073" />
+      <stop
+         stop-color="#b0b0b0"
+         offset="0.95000005"
+         id="stop4075" />
+      <stop
+         stop-color="#c9c9c9"
+         offset="1"
+         id="stop4077" />
+    </linearGradient>
+  </defs>
+  <path
+     sodipodi:nodetypes="ccccc"
+     inkscape:connector-curvature="0"
+     id="path3835"
+     d="m 10.5,16.5 15,0 -10,8 -15,0 z"
+     style="fill:#ffffff;fill-opacity:1;stroke:#4d4d4d;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <g
+     transform="matrix(1.6382539,0,0,1.5572263,-0.2427793,0.36314149)"
+     id="g16">
+    <rect
+       height="16"
+       width="16"
+       y="0"
+       x="0"
+       id="rect18"
+       style="fill-opacity:0" />
+  </g>
+  <path
+     style="fill:#ffffff;fill-opacity:1;stroke:#4d4d4d;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 11,11.5 14.5,0 -10,8 -15,0 z"
+     id="rect3828"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ccccc" />
+  <path
+     sodipodi:nodetypes="ccccc"
+     inkscape:connector-curvature="0"
+     id="path3831"
+     d="m 10.5,6.5 15,0 -10,8 -15,0 z"
+     style="fill:#e60000;fill-opacity:1;stroke:#4d4d4d;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     style="fill:#00a0a0;fill-opacity:1;stroke:#4d4d4d;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 10.5,1.5 15,0 -10,8 -15,0 z"
+     id="path3833"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="ccccc" />
+</svg>
diff --git a/pcbnew/class_pcb_layer_widget.cpp b/pcbnew/class_pcb_layer_widget.cpp
index 48979829e..97e870e22 100644
--- a/pcbnew/class_pcb_layer_widget.cpp
+++ b/pcbnew/class_pcb_layer_widget.cpp
@@ -107,7 +107,7 @@ PCB_LAYER_WIDGET::PCB_LAYER_WIDGET( PCB_BASE_FRAME* aParent, wxWindow* aFocusOwn
     // since Popupmenu() calls this->ProcessEvent() we must call this->Connect()
     // and not m_LayerScrolledWindow->Connect()
 
-    Connect( ID_SHOW_ALL_COPPER_LAYERS, ID_SHOW_ALL_LAYERS,
+    Connect( ID_SHOW_ALL_COPPER_LAYERS, ID_LAST_VALUE - 1,
         wxEVT_COMMAND_MENU_SELECTED,
         wxCommandEventHandler( PCB_LAYER_WIDGET::onPopupSelection ), NULL, this );
     // install the right click handler into each control at end of ReFill()
@@ -179,11 +179,28 @@ void PCB_LAYER_WIDGET::onRightDownLayers( wxMouseEvent& event )
 
     menu.AppendSeparator();
 
+    AddMenuItem( &menu, ID_SHOW_ALL_NON_COPPER,
+                 _( "Show All Non Copper Layers" ),
+                 KiBitmap( select_w_layer_xpm ) );
+    AddMenuItem( &menu, ID_HIDE_ALL_NON_COPPER,
+                 _( "Hide All Non Copper Layers" ),
+                 KiBitmap( show_no_copper_layers_xpm ) );
+
+    menu.AppendSeparator();
+
     AddMenuItem( &menu, ID_SHOW_NO_LAYERS, _( "Hide All Layers" ),
                  KiBitmap( show_no_layers_xpm ) );
     AddMenuItem( &menu, ID_SHOW_ALL_LAYERS, _( "Show All Layers" ),
                  KiBitmap( show_all_layers_xpm ) );
 
+    menu.AppendSeparator();
+
+    AddMenuItem( &menu, ID_SHOW_ALL_FRONT, _( "Show All Front Layers" ),
+                 KiBitmap( show_no_layers_xpm ) );
+
+    AddMenuItem( &menu, ID_SHOW_ALL_BACK, _( "Show All Back Layers" ),
+                 KiBitmap( show_all_layers_xpm ) );
+
     PopupMenu( &menu );
 
     passOnFocus();
@@ -199,76 +216,155 @@ void PCB_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event )
 
     m_alwaysShowActiveCopperLayer = ( menuId == ID_ALWAYS_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE );
     force_active_layer_visible = ( menuId == ID_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE ||
-                                   menuId == ID_ALWAYS_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE );
+            menuId == ID_ALWAYS_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE );
 
     switch( menuId )
     {
 
-    case ID_SHOW_NO_LAYERS:
-    case ID_SHOW_ALL_LAYERS:
-        visible = menuId == ID_SHOW_ALL_LAYERS;
-        rowCount = GetLayerRowCount();
+        case ID_SHOW_NO_LAYERS:
+        case ID_SHOW_ALL_LAYERS:
+            {
+                visible = ( menuId == ID_SHOW_ALL_LAYERS );
+                rowCount = GetLayerRowCount();
 
-        for( int row=0;  row<rowCount;  ++row )
-        {
-            bool isLast;
-            wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, COLUMN_COLOR_LYR_CB );
-            PCB_LAYER_ID    layer = ToLAYER_ID( getDecodedId( cb->GetId() ) );
-            cb->SetValue( visible );
+                for( int row=0;  row<rowCount;  ++row )
+                {
+                    bool isLast;
+                    wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, COLUMN_COLOR_LYR_CB );
+                    PCB_LAYER_ID    layer = ToLAYER_ID( getDecodedId( cb->GetId() ) );
+                    cb->SetValue( visible );
 
-            isLast = row == rowCount-1;
+                    isLast = row == rowCount-1;
 
-            OnLayerVisible( layer, visible, isLast );
+                    OnLayerVisible( layer, visible, isLast );
 
-            if( isLast )
+                    if( isLast )
+                        break;
+                }
                 break;
-         }
-        break;
-
-    case ID_SHOW_ALL_COPPER_LAYERS:
-    case ID_ALWAYS_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE:
-    case ID_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE:
-    case ID_SHOW_NO_COPPER_LAYERS:
-
-        // Search the last copper layer row index:
-        int lastCu = -1;
-        rowCount = GetLayerRowCount();
-        for( int row = rowCount-1; row>=0; --row )
-        {
-            wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, COLUMN_COLOR_LYR_CB );
-            PCB_LAYER_ID    layer = ToLAYER_ID( getDecodedId( cb->GetId() ) );
+            }
 
-            if( IsCopperLayer( layer ) )
+        case ID_SHOW_ALL_COPPER_LAYERS:
+        case ID_ALWAYS_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE:
+        case ID_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE:
+        case ID_SHOW_NO_COPPER_LAYERS:
+        case ID_HIDE_ALL_NON_COPPER:
+        case ID_SHOW_ALL_NON_COPPER:
             {
-                lastCu = row;
+
+                // Search the last copper layer row index:
+                int lastCu = -1;
+                rowCount = GetLayerRowCount();
+                for( int row = rowCount-1; row>=0; --row )
+                {
+                    wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, COLUMN_COLOR_LYR_CB );
+                    PCB_LAYER_ID    layer = ToLAYER_ID( getDecodedId( cb->GetId() ) );
+
+                    if( IsCopperLayer( layer ) )
+                    {
+                        lastCu = row;
+                        break;
+                    }
+                }
+
+                // Enable/disable the copper layers visibility:
+                int startrow = 0;
+
+                if(     ( menuId == ID_SHOW_ALL_NON_COPPER ) ||
+                        ( menuId == ID_HIDE_ALL_NON_COPPER ) )
+                {
+                    startrow = lastCu + 1;
+                }
+
+                for( int row = startrow;  row<rowCount;  ++row )
+                {
+                    wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, COLUMN_COLOR_LYR_CB );
+                    PCB_LAYER_ID    layer = ToLAYER_ID( getDecodedId( cb->GetId() ) );
+
+                    visible = ( ( menuId == ID_SHOW_ALL_COPPER_LAYERS ) || ( menuId == ID_SHOW_ALL_NON_COPPER ) );
+
+                    if( force_active_layer_visible && (layer == myframe->GetActiveLayer() ) )
+                        visible = true;
+
+                    cb->SetValue( visible );
+
+                    bool isLastLayer = (row == lastCu);
+
+                    if(     ( menuId == ID_SHOW_ALL_NON_COPPER ) ||
+                            ( menuId == ID_HIDE_ALL_NON_COPPER ) )
+                    {
+                        isLastLayer = false;
+                    }
+                    OnLayerVisible( layer, visible, isLastLayer );
+
+                    if( isLastLayer )
+                        break;
+                }
                 break;
             }
-        }
-
-        // Enable/disable the copper layers visibility:
-        for( int row=0;  row<rowCount;  ++row )
-        {
-            wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, COLUMN_COLOR_LYR_CB );
-            PCB_LAYER_ID    layer = ToLAYER_ID( getDecodedId( cb->GetId() ) );
 
-            if( IsCopperLayer( layer ) )
+        case ID_SHOW_ALL_FRONT:
             {
-                visible = menuId == ID_SHOW_ALL_COPPER_LAYERS;
-
-                if( force_active_layer_visible && (layer == myframe->GetActiveLayer() ) )
-                    visible = true;
-
-                cb->SetValue( visible );
-
-                bool isLastCopperLayer = (row == lastCu);
-                OnLayerVisible( layer, visible, isLastCopperLayer );
-
-                if( isLastCopperLayer )
-                    break;
+                visible = false;
+                rowCount = GetLayerRowCount();
+
+                for( int row=0;  row<rowCount;  ++row )
+                {
+                    bool isLast;
+                    wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, COLUMN_COLOR_LYR_CB );
+                    PCB_LAYER_ID    layer = ToLAYER_ID( getDecodedId( cb->GetId() ) );
+                    isLast = ( row == rowCount-1 );
+
+                    if(  layer == F_Paste || layer == F_SilkS ||
+                         layer == F_Mask  || layer == F_Cu ||
+                         layer == F_Fab || layer == F_CrtYd  || layer == Edge_Cuts )
+                    {
+                        visible = true;
+                    }
+                    else
+                    {
+                        visible = false;
+                    }
+
+                    cb->SetValue( visible );
+                    OnLayerVisible( layer, visible, isLast );
+
+                    if( isLast )
+                        break;
+                }
+                break;
+            }
+        case ID_SHOW_ALL_BACK:
+            {
+                visible = false;
+                rowCount = GetLayerRowCount();
+
+                for( int row=0;  row<rowCount;  ++row )
+                {
+                    bool isLast;
+                    wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, COLUMN_COLOR_LYR_CB );
+                    PCB_LAYER_ID    layer = ToLAYER_ID( getDecodedId( cb->GetId() ) );
+                    isLast = ( row == rowCount-1 );
+
+                    if( layer == B_Paste || layer == B_SilkS ||
+                        layer == B_Mask  || layer == B_Cu ||
+                        layer == B_Fab || layer == B_CrtYd || layer == Edge_Cuts )
+                    {
+                        visible = true;
+                    }
+                    else
+                    {
+                        visible = false;
+                    }
+
+                    cb->SetValue( visible );
+                    OnLayerVisible( layer, visible, isLast );
+
+                    if( isLast )
+                        break;
+                }
+                break;
             }
-        }
-        break;
-
     }
 }
 
diff --git a/pcbnew/class_pcb_layer_widget.h b/pcbnew/class_pcb_layer_widget.h
index 5c623de39..dae4062d3 100644
--- a/pcbnew/class_pcb_layer_widget.h
+++ b/pcbnew/class_pcb_layer_widget.h
@@ -118,12 +118,20 @@ protected:
     PCB_BASE_FRAME* myframe;
 
     // popup menu ids.
-#define ID_SHOW_ALL_COPPER_LAYERS                   wxID_HIGHEST
-#define ID_SHOW_NO_COPPER_LAYERS                    (wxID_HIGHEST+1)
-#define ID_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE         (wxID_HIGHEST+2)
-#define ID_ALWAYS_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE  (wxID_HIGHEST+3)
-#define ID_SHOW_NO_LAYERS                           (wxID_HIGHEST+4)
-#define ID_SHOW_ALL_LAYERS                          (wxID_HIGHEST+5)
+    enum POPUP_ID
+    {
+        ID_SHOW_ALL_COPPER_LAYERS                    = wxID_HIGHEST,
+        ID_SHOW_NO_COPPER_LAYERS,
+        ID_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE,
+        ID_ALWAYS_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE,
+        ID_SHOW_NO_LAYERS,
+        ID_SHOW_ALL_LAYERS,
+        ID_SHOW_ALL_FRONT,
+        ID_SHOW_ALL_BACK,
+        ID_HIDE_ALL_NON_COPPER,
+        ID_SHOW_ALL_NON_COPPER,
+        ID_LAST_VALUE
+    };
 
     virtual bool AreArbitraryColorsAllowed() override;
 
-- 
2.13.2


Follow ups

References