From cf22d5b99b67890bb9242766ff132e9b1fc822bc Mon Sep 17 00:00:00 2001 From: Jeff Young <jeff@rokeby.ie> Date: Sun, 20 Aug 2023 17:08:51 +0100 Subject: [PATCH] Preferences setting for force-show-fields-when-fp-selected. Fixes https://gitlab.com/kicad/code/kicad/-/issues/15215 --- common/widgets/gal_options_panel.cpp | 2 +- pcbnew/dialogs/panel_display_options.cpp | 2 + pcbnew/dialogs/panel_display_options_base.cpp | 70 ++- pcbnew/dialogs/panel_display_options_base.fbp | 428 ++++++++++++++++-- pcbnew/dialogs/panel_display_options_base.h | 17 +- pcbnew/pcb_base_frame.cpp | 13 +- pcbnew/pcb_draw_panel_gal.cpp | 7 +- pcbnew/pcb_edit_frame.cpp | 6 - pcbnew/pcb_field.cpp | 10 + pcbnew/pcb_painter.cpp | 2 + pcbnew/pcb_painter.h | 1 + pcbnew/pcb_view.cpp | 4 +- pcbnew/pcbnew_settings.cpp | 3 + pcbnew/pcbnew_settings.h | 1 + 14 files changed, 483 insertions(+), 83 deletions(-) diff --git a/common/widgets/gal_options_panel.cpp b/common/widgets/gal_options_panel.cpp index a5e3e0ceae..4e3e3e75e2 100644 --- a/common/widgets/gal_options_panel.cpp +++ b/common/widgets/gal_options_panel.cpp @@ -157,7 +157,7 @@ GAL_OPTIONS_PANEL::GAL_OPTIONS_PANEL( wxWindow* aParent, APP_SETTINGS_BASE* aApp l_gridMinSpacingUnits->Wrap( -1 ); sGridSettingsGrid->Add( l_gridMinSpacingUnits, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT | wxTOP, 5 ); - l_gridSnapOptions = new wxStaticText( this, wxID_ANY, _( "Snap to Grid:" ) ); + l_gridSnapOptions = new wxStaticText( this, wxID_ANY, _( "Snap to grid:" ) ); l_gridSnapOptions->Wrap( -1 ); sGridSettingsGrid->Add( l_gridSnapOptions, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxTOP, 5 ); diff --git a/pcbnew/dialogs/panel_display_options.cpp b/pcbnew/dialogs/panel_display_options.cpp index 9f19abaf82..e9225b6bb5 100644 --- a/pcbnew/dialogs/panel_display_options.cpp +++ b/pcbnew/dialogs/panel_display_options.cpp @@ -55,6 +55,7 @@ void PANEL_DISPLAY_OPTIONS::loadPCBSettings( PCBNEW_SETTINGS* aCfg ) m_OptDisplayPadClearence->SetValue( aCfg->m_Display.m_PadClearance ); m_OptDisplayPadNumber->SetValue( aCfg->m_ViewersDisplay.m_DisplayPadNumbers ); m_ShowNetNamesOption->SetSelection( aCfg->m_Display.m_NetNames ); + m_checkForceShowFieldsWhenFPSelected->SetValue( aCfg->m_Display.m_ForceShowFieldsWhenFPSelected ); m_live3Drefresh->SetValue( aCfg->m_Display.m_Live3DRefresh ); m_checkCrossProbeOnSelection->SetValue( aCfg->m_CrossProbing.on_selection ); m_checkCrossProbeCenter->SetValue( aCfg->m_CrossProbing.center_on_items ); @@ -96,6 +97,7 @@ bool PANEL_DISPLAY_OPTIONS::TransferDataFromWindow() cfg->m_Display.m_PadClearance = m_OptDisplayPadClearence->GetValue(); cfg->m_ViewersDisplay.m_DisplayPadNumbers = m_OptDisplayPadNumber->GetValue(); cfg->m_Display.m_NetNames = m_ShowNetNamesOption->GetSelection(); + cfg->m_Display.m_ForceShowFieldsWhenFPSelected = m_checkForceShowFieldsWhenFPSelected->GetValue(); cfg->m_Display.m_Live3DRefresh = m_live3Drefresh->GetValue(); cfg->m_CrossProbing.on_selection = m_checkCrossProbeOnSelection->GetValue(); cfg->m_CrossProbing.center_on_items = m_checkCrossProbeCenter->GetValue(); diff --git a/pcbnew/dialogs/panel_display_options_base.cpp b/pcbnew/dialogs/panel_display_options_base.cpp index 5317ea086b..e58f363d82 100644 --- a/pcbnew/dialogs/panel_display_options_base.cpp +++ b/pcbnew/dialogs/panel_display_options_base.cpp @@ -41,23 +41,27 @@ PANEL_DISPLAY_OPTIONS_BASE::PANEL_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWind m_staticline1 = new wxStaticLine( pcbPage, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); bMargins->Add( m_staticline1, 0, wxEXPAND|wxBOTTOM, 5 ); - wxBoxSizer* bSizer6; - bSizer6 = new wxBoxSizer( wxVERTICAL ); + wxGridBagSizer* gbSizer1; + gbSizer1 = new wxGridBagSizer( 2, 0 ); + gbSizer1->SetFlexibleDirection( wxBOTH ); + gbSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxString m_ShowNetNamesOptionChoices[] = { _("Do not show"), _("Show on pads"), _("Show on tracks"), _("Show on pads and tracks") }; + m_netNamesLabel = new wxStaticText( pcbPage, wxID_ANY, _("Net names:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_netNamesLabel->Wrap( -1 ); + gbSizer1->Add( m_netNamesLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + + wxString m_ShowNetNamesOptionChoices[] = { _("Do not show"), _("Show on pads"), _("Show on tracks"), _("Show on pads & tracks") }; int m_ShowNetNamesOptionNChoices = sizeof( m_ShowNetNamesOptionChoices ) / sizeof( wxString ); - m_ShowNetNamesOption = new wxRadioBox( pcbPage, wxID_ANY, _("Net Names"), wxDefaultPosition, wxDefaultSize, m_ShowNetNamesOptionNChoices, m_ShowNetNamesOptionChoices, 1, wxRA_SPECIFY_COLS ); + m_ShowNetNamesOption = new wxChoice( pcbPage, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ShowNetNamesOptionNChoices, m_ShowNetNamesOptionChoices, 0 ); m_ShowNetNamesOption->SetSelection( 0 ); - m_ShowNetNamesOption->SetToolTip( _("Show or hide net names on pads and/or tracks.") ); - - bSizer6->Add( m_ShowNetNamesOption, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + gbSizer1->Add( m_ShowNetNamesOption, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); m_OptDisplayPadNumber = new wxCheckBox( pcbPage, wxID_ANY, _("Show pad numbers"), wxDefaultPosition, wxDefaultSize, 0 ); m_OptDisplayPadNumber->SetValue(true); - bSizer6->Add( m_OptDisplayPadNumber, 0, wxALL, 6 ); + gbSizer1->Add( m_OptDisplayPadNumber, wxGBPosition( 1, 0 ), wxGBSpan( 1, 2 ), wxALL, 5 ); - bMargins->Add( bSizer6, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + bMargins->Add( gbSizer1, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); bMargins->Add( 0, 10, 0, wxEXPAND, 5 ); @@ -69,22 +73,46 @@ PANEL_DISPLAY_OPTIONS_BASE::PANEL_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWind m_staticline2 = new wxStaticLine( pcbPage, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); bMargins->Add( m_staticline2, 0, wxEXPAND|wxBOTTOM, 5 ); - wxBoxSizer* bSizer7; - bSizer7 = new wxBoxSizer( wxVERTICAL ); + wxGridBagSizer* gbSizer2; + gbSizer2 = new wxGridBagSizer( 2, 0 ); + gbSizer2->SetFlexibleDirection( wxBOTH ); + gbSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxString m_OptDisplayTracksClearanceChoices[] = { _("Do not show"), _("Show when routing"), _("Show when routing w/ via clearance at end"), _("Show when routing and editing"), _("Show always") }; + m_trackClearancesLabel = new wxStaticText( pcbPage, wxID_ANY, _("Tracks:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_trackClearancesLabel->Wrap( -1 ); + gbSizer2->Add( m_trackClearancesLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + + wxString m_OptDisplayTracksClearanceChoices[] = { _("Do not show clearances"), _("Show when routing"), _("Show when routing w/ via clearance at end"), _("Show when routing and editing"), _("Show always") }; int m_OptDisplayTracksClearanceNChoices = sizeof( m_OptDisplayTracksClearanceChoices ) / sizeof( wxString ); - m_OptDisplayTracksClearance = new wxRadioBox( pcbPage, ID_SHOW_CLEARANCE, _("Track && Via Clearances"), wxDefaultPosition, wxDefaultSize, m_OptDisplayTracksClearanceNChoices, m_OptDisplayTracksClearanceChoices, 1, wxRA_SPECIFY_COLS ); - m_OptDisplayTracksClearance->SetSelection( 3 ); - m_OptDisplayTracksClearance->SetToolTip( _("Show clearance outlines around tracks, and optionally the via clearance around the end of the track while routing.") ); - - bSizer7->Add( m_OptDisplayTracksClearance, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + m_OptDisplayTracksClearance = new wxChoice( pcbPage, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_OptDisplayTracksClearanceNChoices, m_OptDisplayTracksClearanceChoices, 0 ); + m_OptDisplayTracksClearance->SetSelection( 0 ); + gbSizer2->Add( m_OptDisplayTracksClearance, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); m_OptDisplayPadClearence = new wxCheckBox( pcbPage, wxID_ANY, _("Show pad clearance"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer7->Add( m_OptDisplayPadClearence, 0, wxALL, 6 ); + gbSizer2->Add( m_OptDisplayPadClearence, wxGBPosition( 1, 0 ), wxGBSpan( 1, 2 ), wxALL, 5 ); - bMargins->Add( bSizer7, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + bMargins->Add( gbSizer2, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + + bMargins->Add( 0, 10, 0, wxEXPAND, 5 ); + + m_staticText4 = new wxStaticText( pcbPage, wxID_ANY, _("Selection && Highlighting"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText4->Wrap( -1 ); + bMargins->Add( m_staticText4, 0, wxTOP|wxRIGHT|wxLEFT, 13 ); + + m_staticline4 = new wxStaticLine( pcbPage, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bMargins->Add( m_staticline4, 0, wxEXPAND|wxBOTTOM, 5 ); + + wxBoxSizer* bSizer9; + bSizer9 = new wxBoxSizer( wxVERTICAL ); + + m_checkForceShowFieldsWhenFPSelected = new wxCheckBox( pcbPage, wxID_ANY, _("Show all fields when parent footprint is selected"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkForceShowFieldsWhenFPSelected->SetValue(true); + bSizer9->Add( m_checkForceShowFieldsWhenFPSelected, 0, wxALL, 5 ); + + + bMargins->Add( bSizer9, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); bMargins->Add( 0, 10, 0, wxEXPAND, 5 ); @@ -103,7 +131,7 @@ PANEL_DISPLAY_OPTIONS_BASE::PANEL_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWind m_checkCrossProbeOnSelection->SetValue(true); m_checkCrossProbeOnSelection->SetToolTip( _("Highlight footprints corresponding to selected symbols") ); - bSizer8->Add( m_checkCrossProbeOnSelection, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer8->Add( m_checkCrossProbeOnSelection, 0, wxALL, 5 ); m_checkCrossProbeCenter = new wxCheckBox( pcbPage, wxID_ANY, _("Center view on cross-probed items"), wxDefaultPosition, wxDefaultSize, 0 ); m_checkCrossProbeCenter->SetValue(true); @@ -127,7 +155,7 @@ PANEL_DISPLAY_OPTIONS_BASE::PANEL_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWind bSizer8->Add( m_live3Drefresh, 0, wxBOTTOM|wxLEFT|wxRIGHT, 5 ); - bMargins->Add( bSizer8, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + bMargins->Add( bSizer8, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); pcbOptionsSizer->Add( bMargins, 1, wxEXPAND, 5 ); diff --git a/pcbnew/dialogs/panel_display_options_base.fbp b/pcbnew/dialogs/panel_display_options_base.fbp index 50be1224a9..30b176f115 100644 --- a/pcbnew/dialogs/panel_display_options_base.fbp +++ b/pcbnew/dialogs/panel_display_options_base.fbp @@ -378,17 +378,26 @@ <object class="sizeritem" expanded="1"> <property name="border">5</property> <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxBoxSizer" expanded="1"> + <property name="proportion">1</property> + <object class="wxGridBagSizer" expanded="1"> + <property name="empty_cell_size"></property> + <property name="flexible_direction">wxBOTH</property> + <property name="growablecols"></property> + <property name="growablerows"></property> + <property name="hgap">0</property> <property name="minimum_size"></property> - <property name="name">bSizer6</property> - <property name="orient">wxVERTICAL</property> + <property name="name">gbSizer1</property> + <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property> <property name="permission">none</property> - <object class="sizeritem" expanded="0"> + <property name="vgap">2</property> + <object class="gbsizeritem" expanded="1"> <property name="border">5</property> - <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxRadioBox" expanded="0"> + <property name="colspan">1</property> + <property name="column">0</property> + <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property> + <property name="row">0</property> + <property name="rowspan">1</property> + <object class="wxStaticText" expanded="1"> <property name="BottomDockable">1</property> <property name="LeftDockable">1</property> <property name="RightDockable">1</property> @@ -402,7 +411,6 @@ <property name="caption"></property> <property name="caption_visible">1</property> <property name="center_pane">0</property> - <property name="choices">"Do not show" "Show on pads" "Show on tracks" "Show on pads and tracks"</property> <property name="close_button">1</property> <property name="context_help"></property> <property name="context_menu">1</property> @@ -417,8 +425,71 @@ <property name="gripper">0</property> <property name="hidden">0</property> <property name="id">wxID_ANY</property> - <property name="label">Net Names</property> - <property name="majorDimension">1</property> + <property name="label">Net names:</property> + <property name="markup">0</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_netNamesLabel</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">; ; forward_declare</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> + </object> + </object> + <object class="gbsizeritem" expanded="1"> + <property name="border">5</property> + <property name="colspan">1</property> + <property name="column">1</property> + <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property> + <property name="row">0</property> + <property name="rowspan">1</property> + <object class="wxChoice" expanded="1"> + <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">"Do not show" "Show on pads" "Show on tracks" "Show on pads & tracks"</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> @@ -437,10 +508,10 @@ <property name="selection">0</property> <property name="show">1</property> <property name="size"></property> - <property name="style">wxRA_SPECIFY_COLS</property> - <property name="subclass"></property> + <property name="style"></property> + <property name="subclass">; ; forward_declare</property> <property name="toolbar_pane">0</property> - <property name="tooltip">Show or hide net names on pads and/or tracks.</property> + <property name="tooltip"></property> <property name="validator_data_type"></property> <property name="validator_style">wxFILTER_NONE</property> <property name="validator_type">wxDefaultValidator</property> @@ -450,10 +521,13 @@ <property name="window_style"></property> </object> </object> - <object class="sizeritem" expanded="0"> - <property name="border">6</property> + <object class="gbsizeritem" expanded="1"> + <property name="border">5</property> + <property name="colspan">2</property> + <property name="column">0</property> <property name="flag">wxALL</property> - <property name="proportion">0</property> + <property name="row">1</property> + <property name="rowspan">1</property> <object class="wxCheckBox" expanded="0"> <property name="BottomDockable">1</property> <property name="LeftDockable">1</property> @@ -648,17 +722,26 @@ <object class="sizeritem" expanded="1"> <property name="border">5</property> <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxBoxSizer" expanded="1"> + <property name="proportion">1</property> + <object class="wxGridBagSizer" expanded="1"> + <property name="empty_cell_size"></property> + <property name="flexible_direction">wxBOTH</property> + <property name="growablecols"></property> + <property name="growablerows"></property> + <property name="hgap">0</property> <property name="minimum_size"></property> - <property name="name">bSizer7</property> - <property name="orient">wxVERTICAL</property> + <property name="name">gbSizer2</property> + <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property> <property name="permission">none</property> - <object class="sizeritem" expanded="0"> + <property name="vgap">2</property> + <object class="gbsizeritem" expanded="1"> <property name="border">5</property> - <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxRadioBox" expanded="0"> + <property name="colspan">1</property> + <property name="column">0</property> + <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property> + <property name="row">0</property> + <property name="rowspan">1</property> + <object class="wxStaticText" expanded="1"> <property name="BottomDockable">1</property> <property name="LeftDockable">1</property> <property name="RightDockable">1</property> @@ -672,7 +755,6 @@ <property name="caption"></property> <property name="caption_visible">1</property> <property name="center_pane">0</property> - <property name="choices">"Do not show" "Show when routing" "Show when routing w/ via clearance at end" "Show when routing and editing" "Show always"</property> <property name="close_button">1</property> <property name="context_help"></property> <property name="context_menu">1</property> @@ -686,9 +768,72 @@ <property name="font"></property> <property name="gripper">0</property> <property name="hidden">0</property> - <property name="id">ID_SHOW_CLEARANCE</property> - <property name="label">Track && Via Clearances</property> - <property name="majorDimension">1</property> + <property name="id">wxID_ANY</property> + <property name="label">Tracks:</property> + <property name="markup">0</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_trackClearancesLabel</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">; ; forward_declare</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> + </object> + </object> + <object class="gbsizeritem" expanded="1"> + <property name="border">5</property> + <property name="colspan">1</property> + <property name="column">1</property> + <property name="flag">wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property> + <property name="row">0</property> + <property name="rowspan">1</property> + <object class="wxChoice" expanded="1"> + <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">"Do not show clearances" "Show when routing" "Show when routing w/ via clearance at end" "Show when routing and editing" "Show always"</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> @@ -704,13 +849,13 @@ <property name="pin_button">1</property> <property name="pos"></property> <property name="resize">Resizable</property> - <property name="selection">3</property> + <property name="selection">0</property> <property name="show">1</property> <property name="size"></property> - <property name="style">wxRA_SPECIFY_COLS</property> - <property name="subclass"></property> + <property name="style"></property> + <property name="subclass">; ; forward_declare</property> <property name="toolbar_pane">0</property> - <property name="tooltip">Show clearance outlines around tracks, and optionally the via clearance around the end of the track while routing.</property> + <property name="tooltip"></property> <property name="validator_data_type"></property> <property name="validator_style">wxFILTER_NONE</property> <property name="validator_type">wxDefaultValidator</property> @@ -720,10 +865,13 @@ <property name="window_style"></property> </object> </object> - <object class="sizeritem" expanded="0"> - <property name="border">6</property> + <object class="gbsizeritem" expanded="1"> + <property name="border">5</property> + <property name="colspan">2</property> + <property name="column">0</property> <property name="flag">wxALL</property> - <property name="proportion">0</property> + <property name="row">1</property> + <property name="rowspan">1</property> <object class="wxCheckBox" expanded="0"> <property name="BottomDockable">1</property> <property name="LeftDockable">1</property> @@ -796,6 +944,210 @@ <property name="width">0</property> </object> </object> + <object class="sizeritem" expanded="1"> + <property name="border">13</property> + <property name="flag">wxTOP|wxRIGHT|wxLEFT</property> + <property name="proportion">0</property> + <object class="wxStaticText" expanded="1"> + <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">Selection && Highlighting</property> + <property name="markup">0</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_staticText4</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">; ; forward_declare</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> + </object> + </object> + <object class="sizeritem" expanded="1"> + <property name="border">5</property> + <property name="flag">wxEXPAND|wxBOTTOM</property> + <property name="proportion">0</property> + <object class="wxStaticLine" expanded="1"> + <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_staticline4</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">; ; forward_declare</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> + </object> + </object> + <object class="sizeritem" expanded="1"> + <property name="border">5</property> + <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property> + <property name="proportion">0</property> + <object class="wxBoxSizer" expanded="1"> + <property name="minimum_size"></property> + <property name="name">bSizer9</property> + <property name="orient">wxVERTICAL</property> + <property name="permission">none</property> + <object class="sizeritem" expanded="1"> + <property name="border">5</property> + <property name="flag">wxALL</property> + <property name="proportion">0</property> + <object class="wxCheckBox" expanded="1"> + <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">1</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">Show all fields when parent footprint is selected</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_checkForceShowFieldsWhenFPSelected</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">; ; forward_declare</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> + </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="spacer" expanded="1"> + <property name="height">10</property> + <property name="permission">protected</property> + <property name="width">0</property> + </object> + </object> <object class="sizeritem" expanded="1"> <property name="border">13</property> <property name="flag">wxTOP|wxRIGHT|wxLEFT|wxEXPAND</property> @@ -917,7 +1269,7 @@ </object> <object class="sizeritem" expanded="1"> <property name="border">5</property> - <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property> + <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property> <property name="proportion">0</property> <object class="wxBoxSizer" expanded="1"> <property name="minimum_size"></property> @@ -926,7 +1278,7 @@ <property name="permission">none</property> <object class="sizeritem" expanded="1"> <property name="border">5</property> - <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property> + <property name="flag">wxALL</property> <property name="proportion">0</property> <object class="wxCheckBox" expanded="1"> <property name="BottomDockable">1</property> diff --git a/pcbnew/dialogs/panel_display_options_base.h b/pcbnew/dialogs/panel_display_options_base.h index 637946d4bf..d0da7c1834 100644 --- a/pcbnew/dialogs/panel_display_options_base.h +++ b/pcbnew/dialogs/panel_display_options_base.h @@ -20,8 +20,9 @@ #include <wx/string.h> #include <wx/stattext.h> #include <wx/statline.h> -#include <wx/radiobox.h> +#include <wx/choice.h> #include <wx/checkbox.h> +#include <wx/gbsizer.h> #include <wx/simplebook.h> /////////////////////////////////////////////////////////////////////////// @@ -34,21 +35,21 @@ class PANEL_DISPLAY_OPTIONS_BASE : public RESETTABLE_PANEL private: protected: - enum - { - ID_SHOW_CLEARANCE = 1000 - }; - wxBoxSizer* m_galOptionsSizer; wxSimplebook* m_optionsBook; wxStaticText* m_annotationsLabel; wxStaticLine* m_staticline1; - wxRadioBox* m_ShowNetNamesOption; + wxStaticText* m_netNamesLabel; + wxChoice* m_ShowNetNamesOption; wxCheckBox* m_OptDisplayPadNumber; wxStaticText* m_clearanceLabel; wxStaticLine* m_staticline2; - wxRadioBox* m_OptDisplayTracksClearance; + wxStaticText* m_trackClearancesLabel; + wxChoice* m_OptDisplayTracksClearance; wxCheckBox* m_OptDisplayPadClearence; + wxStaticText* m_staticText4; + wxStaticLine* m_staticline4; + wxCheckBox* m_checkForceShowFieldsWhenFPSelected; wxStaticText* m_crossProbingLabel; wxStaticLine* m_staticline3; wxCheckBox* m_checkCrossProbeOnSelection; diff --git a/pcbnew/pcb_base_frame.cpp b/pcbnew/pcb_base_frame.cpp index 1f29f6a17c..ffcd35ec87 100644 --- a/pcbnew/pcb_base_frame.cpp +++ b/pcbnew/pcb_base_frame.cpp @@ -989,11 +989,13 @@ void PCB_BASE_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVars { EDA_DRAW_FRAME::CommonSettingsChanged( aEnvVarsChanged, aTextVarsChanged ); - RENDER_SETTINGS* settings = GetCanvas()->GetView()->GetPainter()->GetSettings(); - PCB_RENDER_SETTINGS* renderSettings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( settings ); + KIGFX::VIEW* view = GetCanvas()->GetView(); + KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*>( view->GetPainter() ); + PCB_RENDER_SETTINGS* settings = painter->GetSettings(); - renderSettings->LoadColors( GetColorSettings( true ) ); - renderSettings->LoadDisplayOptions( GetDisplayOptions() ); + settings->LoadColors( GetColorSettings( true ) ); + settings->LoadDisplayOptions( GetDisplayOptions() ); + settings->m_ForceShowFieldsWhenFPSelected = GetPcbNewSettings()->m_Display.m_ForceShowFieldsWhenFPSelected; // Note: KIGFX::REPAINT isn't enough for things that go from invisible to visible as // they won't be found in the view layer's itemset for re-painting. @@ -1016,7 +1018,7 @@ void PCB_BASE_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVars return 0; } ); - GetCanvas()->GetView()->UpdateAllItems( KIGFX::COLOR ); + view->UpdateAllItems( KIGFX::COLOR ); RecreateToolbars(); @@ -1076,6 +1078,7 @@ void PCB_BASE_FRAME::ActivateGalCanvas() settings->LoadDisplayOptions( displ_opts ); settings->LoadColors( GetColorSettings() ); + settings->m_ForceShowFieldsWhenFPSelected = GetPcbNewSettings()->m_Display.m_ForceShowFieldsWhenFPSelected; view->RecacheAllItems(); canvas->SetEventDispatcher( m_toolDispatcher ); diff --git a/pcbnew/pcb_draw_panel_gal.cpp b/pcbnew/pcb_draw_panel_gal.cpp index 0524f57677..f63ff161f7 100644 --- a/pcbnew/pcb_draw_panel_gal.cpp +++ b/pcbnew/pcb_draw_panel_gal.cpp @@ -564,9 +564,12 @@ void PCB_DRAW_PANEL_GAL::OnShow() if( frame ) { SetTopLayer( frame->GetActiveLayer() ); - KIGFX::PAINTER* painter = m_view->GetPainter(); - auto settings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( painter->GetSettings() ); + + KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*>( m_view->GetPainter() ); + KIGFX::PCB_RENDER_SETTINGS* settings = painter->GetSettings(); + settings->LoadDisplayOptions( frame->GetDisplayOptions() ); + settings->m_ForceShowFieldsWhenFPSelected = frame->GetPcbNewSettings()->m_Display.m_ForceShowFieldsWhenFPSelected; } } diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp index 1fb59532cf..a5a07c61f0 100644 --- a/pcbnew/pcb_edit_frame.cpp +++ b/pcbnew/pcb_edit_frame.cpp @@ -2350,12 +2350,6 @@ void PCB_EDIT_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVars GetAppearancePanel()->OnColorThemeChanged(); - KIGFX::PCB_VIEW* view = GetCanvas()->GetView(); - KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*>( view->GetPainter() ); - KIGFX::PCB_RENDER_SETTINGS* renderSettings = painter->GetSettings(); - - renderSettings->LoadDisplayOptions( GetDisplayOptions() ); - SetElementVisibility( LAYER_RATSNEST, GetPcbNewSettings()->m_Display.m_ShowGlobalRatsnest ); GetGalDisplayOptions().ReadWindowSettings( GetPcbNewSettings()->m_Window ); diff --git a/pcbnew/pcb_field.cpp b/pcbnew/pcb_field.cpp index 4a48636333..6203a3bd54 100644 --- a/pcbnew/pcb_field.cpp +++ b/pcbnew/pcb_field.cpp @@ -26,6 +26,7 @@ #include <footprint.h> #include <board_design_settings.h> #include <i18n_utility.h> +#include <pcb_painter.h> PCB_FIELD::PCB_FIELD( FOOTPRINT* aParent, int aFieldId, const wxString& aName ) : PCB_TEXT( aParent, PCB_FIELD_T ), @@ -131,6 +132,15 @@ double PCB_FIELD::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const if( !aView ) return 0.0; + KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*>( aView->GetPainter() ); + KIGFX::PCB_RENDER_SETTINGS* renderSettings = painter->GetSettings(); + + if( GetParentFootprint() && GetParentFootprint()->IsSelected() + && renderSettings->m_ForceShowFieldsWhenFPSelected ) + { + return 0.0; + } + // Handle Render tab switches if( IsValue() && !aView->IsLayerVisible( LAYER_FP_VALUES ) ) return HIDE; diff --git a/pcbnew/pcb_painter.cpp b/pcbnew/pcb_painter.cpp index 2a6182027b..fb927f7207 100644 --- a/pcbnew/pcb_painter.cpp +++ b/pcbnew/pcb_painter.cpp @@ -117,6 +117,8 @@ PCB_RENDER_SETTINGS::PCB_RENDER_SETTINGS() SetDashLengthRatio( 12 ); // From ISO 128-2 SetGapLengthRatio( 3 ); // From ISO 128-2 + m_ForceShowFieldsWhenFPSelected = true; + update(); } diff --git a/pcbnew/pcb_painter.h b/pcbnew/pcb_painter.h index c8d772f830..c785f2d804 100644 --- a/pcbnew/pcb_painter.h +++ b/pcbnew/pcb_painter.h @@ -124,6 +124,7 @@ public: public: bool m_ForcePadSketchModeOn; + bool m_ForceShowFieldsWhenFPSelected; ZONE_DISPLAY_MODE m_ZoneDisplayMode; HIGH_CONTRAST_MODE m_ContrastModeDisplay; diff --git a/pcbnew/pcb_view.cpp b/pcbnew/pcb_view.cpp index 7dc83e4505..774e4aeeec 100644 --- a/pcbnew/pcb_view.cpp +++ b/pcbnew/pcb_view.cpp @@ -124,8 +124,8 @@ void PCB_VIEW::Update( const KIGFX::VIEW_ITEM* aItem ) const void PCB_VIEW::UpdateDisplayOptions( const PCB_DISPLAY_OPTIONS& aOptions ) { - auto painter = static_cast<KIGFX::PCB_PAINTER*>( GetPainter() ); - auto settings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( painter->GetSettings() ); + KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*>( GetPainter() ); + KIGFX::PCB_RENDER_SETTINGS* settings = painter->GetSettings(); settings->LoadDisplayOptions( aOptions ); } diff --git a/pcbnew/pcbnew_settings.cpp b/pcbnew/pcbnew_settings.cpp index a6d241d774..b474b06d38 100644 --- a/pcbnew/pcbnew_settings.cpp +++ b/pcbnew/pcbnew_settings.cpp @@ -270,6 +270,9 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS() m_params.emplace_back( new PARAM<bool>( "pcb_display.origin_invert_y_axis", &m_Display.m_DisplayInvertYAxis, false ) ); + m_params.emplace_back( new PARAM<bool>( "pcb_display.force_show_fields_when_fp_selected", + &m_Display.m_ForceShowFieldsWhenFPSelected, true ) ); + m_params.emplace_back( new PARAM<bool>( "pcb_display.live_3d_refresh", &m_Display.m_Live3DRefresh, false ) ); diff --git a/pcbnew/pcbnew_settings.h b/pcbnew/pcbnew_settings.h index 669dac1a27..3e1f1170cc 100644 --- a/pcbnew/pcbnew_settings.h +++ b/pcbnew/pcbnew_settings.h @@ -332,6 +332,7 @@ public: bool m_DisplayInvertXAxis; bool m_DisplayInvertYAxis; + bool m_ForceShowFieldsWhenFPSelected; bool m_Live3DRefresh; };