added more layer selector features

This commit is contained in:
Kristoffer Ödmark 2017-07-19 23:37:10 +02:00 committed by Wayne Stambaugh
parent 34abef3f5a
commit 42b70b86f2
4 changed files with 770 additions and 62 deletions

View File

@ -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>

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -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>

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -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() // since Popupmenu() calls this->ProcessEvent() we must call this->Connect()
// and not m_LayerScrolledWindow->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, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler( PCB_LAYER_WIDGET::onPopupSelection ), NULL, this ); wxCommandEventHandler( PCB_LAYER_WIDGET::onPopupSelection ), NULL, this );
// install the right click handler into each control at end of ReFill() // 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(); 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" ), AddMenuItem( &menu, ID_SHOW_NO_LAYERS, _( "Hide All Layers" ),
KiBitmap( show_no_layers_xpm ) ); KiBitmap( show_no_layers_xpm ) );
AddMenuItem( &menu, ID_SHOW_ALL_LAYERS, _( "Show All Layers" ), AddMenuItem( &menu, ID_SHOW_ALL_LAYERS, _( "Show All Layers" ),
KiBitmap( show_all_layers_xpm ) ); 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 ); PopupMenu( &menu );
passOnFocus(); passOnFocus();
@ -199,76 +216,155 @@ void PCB_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event )
m_alwaysShowActiveCopperLayer = ( menuId == ID_ALWAYS_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE ); m_alwaysShowActiveCopperLayer = ( menuId == ID_ALWAYS_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE );
force_active_layer_visible = ( menuId == ID_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 ) switch( menuId )
{ {
case ID_SHOW_NO_LAYERS: case ID_SHOW_NO_LAYERS:
case ID_SHOW_ALL_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 );
isLast = row == rowCount-1;
OnLayerVisible( layer, visible, isLast );
if( isLast )
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 ) )
{ {
lastCu = row; 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 );
isLast = row == rowCount-1;
OnLayerVisible( layer, visible, isLast );
if( isLast )
break;
}
break; break;
} }
}
// Enable/disable the copper layers visibility: case ID_SHOW_ALL_COPPER_LAYERS:
for( int row=0; row<rowCount; ++row ) case ID_ALWAYS_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE:
{ case ID_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE:
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, COLUMN_COLOR_LYR_CB ); case ID_SHOW_NO_COPPER_LAYERS:
PCB_LAYER_ID layer = ToLAYER_ID( getDecodedId( cb->GetId() ) ); case ID_HIDE_ALL_NON_COPPER:
case ID_SHOW_ALL_NON_COPPER:
if( IsCopperLayer( layer ) )
{ {
visible = menuId == ID_SHOW_ALL_COPPER_LAYERS;
if( force_active_layer_visible && (layer == myframe->GetActiveLayer() ) ) // Search the last copper layer row index:
visible = true; 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() ) );
cb->SetValue( visible ); if( IsCopperLayer( layer ) )
{
lastCu = row;
break;
}
}
bool isLastCopperLayer = (row == lastCu); // Enable/disable the copper layers visibility:
OnLayerVisible( layer, visible, isLastCopperLayer ); int startrow = 0;
if( isLastCopperLayer ) if( ( menuId == ID_SHOW_ALL_NON_COPPER ) ||
break; ( 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;
} }
}
break;
case ID_SHOW_ALL_FRONT:
{
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;
}
} }
} }

View File

@ -118,12 +118,20 @@ protected:
PCB_BASE_FRAME* myframe; PCB_BASE_FRAME* myframe;
// popup menu ids. // popup menu ids.
#define ID_SHOW_ALL_COPPER_LAYERS wxID_HIGHEST enum POPUP_ID
#define ID_SHOW_NO_COPPER_LAYERS (wxID_HIGHEST+1) {
#define ID_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE (wxID_HIGHEST+2) ID_SHOW_ALL_COPPER_LAYERS = wxID_HIGHEST,
#define ID_ALWAYS_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE (wxID_HIGHEST+3) ID_SHOW_NO_COPPER_LAYERS,
#define ID_SHOW_NO_LAYERS (wxID_HIGHEST+4) ID_SHOW_NO_COPPER_LAYERS_BUT_ACTIVE,
#define ID_SHOW_ALL_LAYERS (wxID_HIGHEST+5) 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; virtual bool AreArbitraryColorsAllowed() override;