Browse Source

ADDED: menu item to control searching of hidden fields.

Applies to both PCBNew & Eeschema search panels.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/20370

(cherry picked from commit 3def4afaec)
9.0
Jeff Young 6 months ago
parent
commit
312b75291b
  1. 3
      common/settings/app_settings.cpp
  2. 27
      common/widgets/search_pane.cpp
  3. 24
      eeschema/widgets/search_handlers.cpp
  4. 10
      include/eda_search_data.h
  5. 1
      include/settings/app_settings.h
  6. 9
      pcbnew/pcb_field.cpp
  7. 2
      pcbnew/pcb_field.h
  8. 60
      pcbnew/widgets/search_handlers.cpp

3
common/settings/app_settings.cpp

@ -139,6 +139,9 @@ APP_SETTINGS_BASE::APP_SETTINGS_BASE( const std::string& aFilename, int aSchemaV
reinterpret_cast<int*>( &m_SearchPane.selection_zoom ),
static_cast<int>( SEARCH_PANE::SELECTION_ZOOM::PAN ) ) );
m_params.emplace_back( new PARAM<bool>( "search_pane.search_hidden_fields",
&m_SearchPane.search_hidden_fields, true ) );
m_params.emplace_back( new PARAM<bool>( "system.first_run_shown",
&m_System.first_run_shown, false ) ); //@todo RFB remove? - not used

27
common/widgets/search_pane.cpp

@ -29,22 +29,28 @@
#include <widgets/std_bitmap_button.h>
#define ID_TOGGLE_ZOOM_TO_SELECTION 14000
#define ID_TOGGLE_PAN_TO_SELECTION 14001
#define ID_TOGGLE_ZOOM_TO_SELECTION 14000
#define ID_TOGGLE_PAN_TO_SELECTION 14001
#define ID_TOGGLE_SEARCH_HIDDEN_FIELDS 14002
class SEARCH_PANE_MENU : public ACTION_MENU
{
public:
SEARCH_PANE_MENU( EDA_DRAW_FRAME& aFrame ) :
SEARCH_PANE_MENU( SEARCH_PANE* aSearchPane, EDA_DRAW_FRAME& aFrame ) :
ACTION_MENU( true, nullptr ),
m_frame( aFrame )
m_frame( aFrame ),
m_searchPane( aSearchPane )
{
Add( _( "Zoom to Selection" ), _( "Toggle zooming to selections in the search pane" ),
ID_TOGGLE_ZOOM_TO_SELECTION, BITMAPS::zoom_fit_to_objects, true );
Add( _( "Pan to Selection" ), _( "Toggle panning to selections in the search pane" ),
ID_TOGGLE_PAN_TO_SELECTION, BITMAPS::zoom_center_on_screen, true );
AppendSeparator();
Add( _( "Search Hidden Fields" ), wxEmptyString,
ID_TOGGLE_SEARCH_HIDDEN_FIELDS, BITMAPS::invisible_text, true );
updateZoomPanCheckboxes();
}
@ -61,12 +67,20 @@ public:
: APP_SETTINGS_BASE::SEARCH_PANE::SELECTION_ZOOM::NONE;
updateZoomPanCheckboxes();
break;
case ID_TOGGLE_PAN_TO_SELECTION:
settings.selection_zoom = item->IsChecked() ? APP_SETTINGS_BASE::SEARCH_PANE::SELECTION_ZOOM::PAN
: APP_SETTINGS_BASE::SEARCH_PANE::SELECTION_ZOOM::NONE;
updateZoomPanCheckboxes();
break;
case ID_TOGGLE_SEARCH_HIDDEN_FIELDS:
settings.search_hidden_fields = item->IsChecked();
updateZoomPanCheckboxes();
m_searchPane->RefreshSearch();
break;
}
return OPT_TOOL_EVENT();
}
@ -77,13 +91,16 @@ private:
wxMenuItem* zoomCb = FindItem( ID_TOGGLE_ZOOM_TO_SELECTION );
wxMenuItem* panCb = FindItem( ID_TOGGLE_PAN_TO_SELECTION );
wxMenuItem* hiddenFieldsCb = FindItem( ID_TOGGLE_SEARCH_HIDDEN_FIELDS );
zoomCb->Check( settings.selection_zoom == APP_SETTINGS_BASE::SEARCH_PANE::SELECTION_ZOOM::ZOOM );
panCb->Check( settings.selection_zoom == APP_SETTINGS_BASE::SEARCH_PANE::SELECTION_ZOOM::PAN );
hiddenFieldsCb->Check( settings.search_hidden_fields );
}
private:
EDA_DRAW_FRAME& m_frame;
SEARCH_PANE* m_searchPane;
};
@ -93,7 +110,7 @@ SEARCH_PANE::SEARCH_PANE( EDA_DRAW_FRAME* aFrame ) :
{
m_frame->Bind( EDA_LANG_CHANGED, &SEARCH_PANE::OnLanguageChange, this );
m_menu = new SEARCH_PANE_MENU( *m_frame );
m_menu = new SEARCH_PANE_MENU( this, *m_frame );
m_menuButton->SetBitmap( KiBitmapBundle( BITMAPS::config ) );
m_menuButton->Bind( wxEVT_LEFT_DOWN,

24
eeschema/widgets/search_handlers.cpp

@ -174,8 +174,10 @@ int SYMBOL_SEARCH_HANDLER::Search( const wxString& aQuery )
{
m_hitlist.clear();
SCH_SEARCH_DATA frp;
frp.searchAllFields = true;
APP_SETTINGS_BASE::SEARCH_PANE& settings = m_frame->config()->m_SearchPane;
SCH_SEARCH_DATA frp;
frp.searchAllFields = settings.search_hidden_fields;
frp.findString = aQuery;
// Try to handle whatever the user throws at us (substring, wildcards, regex, etc.)
@ -256,8 +258,10 @@ int POWER_SEARCH_HANDLER::Search( const wxString& aQuery )
{
m_hitlist.clear();
SCH_SEARCH_DATA frp;
frp.searchAllFields = true;
APP_SETTINGS_BASE::SEARCH_PANE& settings = m_frame->config()->m_SearchPane;
SCH_SEARCH_DATA frp;
frp.searchAllFields = settings.search_hidden_fields;
frp.findString = aQuery;
// Try to handle whatever the user throws at us (substring, wildcards, regex, etc.)
@ -328,8 +332,10 @@ int TEXT_SEARCH_HANDLER::Search( const wxString& aQuery )
{
m_hitlist.clear();
SCH_SEARCH_DATA frp;
frp.searchAllFields = true;
APP_SETTINGS_BASE::SEARCH_PANE& settings = m_frame->config()->m_SearchPane;
SCH_SEARCH_DATA frp;
frp.searchAllFields = settings.search_hidden_fields;
frp.findString = aQuery;
// Try to handle whatever the user throws at us (substring, wildcards, regex, etc.)
@ -413,8 +419,10 @@ int LABEL_SEARCH_HANDLER::Search( const wxString& aQuery )
{
m_hitlist.clear();
SCH_SEARCH_DATA frp;
frp.searchAllFields = true;
APP_SETTINGS_BASE::SEARCH_PANE& settings = m_frame->config()->m_SearchPane;
SCH_SEARCH_DATA frp;
frp.searchAllFields = settings.search_hidden_fields;
frp.findString = aQuery;
// Try to handle whatever the user throws at us (substring, wildcards, regex, etc.)

10
include/eda_search_data.h

@ -36,10 +36,11 @@ enum class EDA_SEARCH_MATCH_MODE
struct EDA_SEARCH_DATA
{
wxString findString;
wxString replaceString;
wxString findString;
wxString replaceString;
bool searchAndReplace;
bool searchAndReplace;
bool searchAllFields;
bool matchCase;
bool markersOnly;
@ -49,6 +50,7 @@ struct EDA_SEARCH_DATA
findString(),
replaceString(),
searchAndReplace( false ),
searchAllFields( false ),
matchCase( false ),
markersOnly( false ),
matchMode( EDA_SEARCH_MATCH_MODE::PLAIN )
@ -60,7 +62,6 @@ struct EDA_SEARCH_DATA
struct SCH_SEARCH_DATA : public EDA_SEARCH_DATA
{
bool searchAllFields;
bool searchAllPins;
bool searchCurrentSheetOnly;
bool searchSelectedOnly;
@ -69,7 +70,6 @@ struct SCH_SEARCH_DATA : public EDA_SEARCH_DATA
SCH_SEARCH_DATA() :
EDA_SEARCH_DATA(),
searchAllFields( false ),
searchAllPins( false ),
searchCurrentSheetOnly( false ),
searchSelectedOnly( false ),

1
include/settings/app_settings.h

@ -114,6 +114,7 @@ public:
};
SELECTION_ZOOM selection_zoom;
bool search_hidden_fields;
};
struct GRAPHICS

9
pcbnew/pcb_field.cpp

@ -158,6 +158,15 @@ wxString PCB_FIELD::GetTextTypeDescription() const
}
bool PCB_FIELD::Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const
{
if( !IsVisible() && !aSearchData.searchAllFields )
return false;
return PCB_TEXT::Matches( aSearchData, aAuxData );
}
wxString PCB_FIELD::GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const
{
wxString content = aFull ? GetShownText( false ) : KIUI::EllipsizeMenuText( GetText() );

2
pcbnew/pcb_field.h

@ -76,6 +76,8 @@ public:
wxString GetTextTypeDescription() const override;
bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;

60
pcbnew/widgets/search_handlers.cpp

@ -131,7 +131,10 @@ int FOOTPRINT_SEARCH_HANDLER::Search( const wxString& aQuery )
if( board == nullptr )
return 0;
EDA_SEARCH_DATA frp;
APP_SETTINGS_BASE::SEARCH_PANE& settings = m_frame->config()->m_SearchPane;
EDA_SEARCH_DATA frp;
frp.searchAllFields = settings.search_hidden_fields;
frp.findString = aQuery;
// Try to handle whatever the user throws at us (substring, wildcards, regex, etc.)
@ -139,11 +142,19 @@ int FOOTPRINT_SEARCH_HANDLER::Search( const wxString& aQuery )
for( FOOTPRINT* fp : board->Footprints() )
{
if( aQuery.IsEmpty()
|| fp->Reference().Matches( frp, nullptr )
|| fp->Value().Matches( frp, nullptr ) )
if( frp.findString.IsEmpty() )
{
m_hitlist.push_back( fp );
continue;
}
for( PCB_FIELD* field : fp->GetFields() )
{
if( field->Matches( frp, nullptr ) )
{
m_hitlist.push_back( fp );
break;
}
}
}
@ -187,7 +198,10 @@ int ZONE_SEARCH_HANDLER::Search( const wxString& aQuery )
m_hitlist.clear();
BOARD* board = m_frame->GetBoard();
EDA_SEARCH_DATA frp;
APP_SETTINGS_BASE::SEARCH_PANE& settings = m_frame->config()->m_SearchPane;
EDA_SEARCH_DATA frp;
frp.searchAllFields = settings.search_hidden_fields;
frp.findString = aQuery;
// Try to handle whatever the user throws at us (substring, wildcards, regex, etc.)
@ -195,10 +209,8 @@ int ZONE_SEARCH_HANDLER::Search( const wxString& aQuery )
for( BOARD_ITEM* item : board->Zones() )
{
ZONE* zoneItem = dynamic_cast<ZONE*>( item );
if( zoneItem && ( aQuery.IsEmpty() || zoneItem->Matches( frp, nullptr ) ) )
m_hitlist.push_back( zoneItem );
if( frp.findString.IsEmpty() || item->Matches( frp, nullptr ) )
m_hitlist.push_back( item );
}
return (int) m_hitlist.size();
@ -251,7 +263,10 @@ int TEXT_SEARCH_HANDLER::Search( const wxString& aQuery )
m_hitlist.clear();
BOARD* board = m_frame->GetBoard();
EDA_SEARCH_DATA frp;
APP_SETTINGS_BASE::SEARCH_PANE& settings = m_frame->config()->m_SearchPane;
EDA_SEARCH_DATA frp;
frp.searchAllFields = settings.search_hidden_fields;
frp.findString = aQuery;
// Try to handle whatever the user throws at us (substring, wildcards, regex, etc.)
@ -259,13 +274,14 @@ int TEXT_SEARCH_HANDLER::Search( const wxString& aQuery )
for( BOARD_ITEM* item : board->Drawings() )
{
PCB_TEXT* textItem = dynamic_cast<PCB_TEXT*>( item );
PCB_TEXTBOX* textBoxItem = dynamic_cast<PCB_TEXTBOX*>( item );
if( textItem && ( aQuery.IsEmpty() || textItem->Matches( frp, nullptr ) ) )
m_hitlist.push_back( textItem );
else if( textBoxItem && ( aQuery.IsEmpty() || textBoxItem->Matches( frp, nullptr ) ) )
m_hitlist.push_back( textBoxItem );
if( item->Type() == PCB_TEXT_T
|| BaseType( item->Type() ) == PCB_DIMENSION_T
|| item->Type() == PCB_TEXTBOX_T
|| item->Type() == PCB_TABLECELL_T )
{
if( frp.findString.IsEmpty() || item->Matches( frp, nullptr ) )
m_hitlist.push_back( item );
}
}
return (int) m_hitlist.size();
@ -315,7 +331,10 @@ int NETS_SEARCH_HANDLER::Search( const wxString& aQuery )
{
m_hitlist.clear();
EDA_SEARCH_DATA frp;
APP_SETTINGS_BASE::SEARCH_PANE& settings = m_frame->config()->m_SearchPane;
EDA_SEARCH_DATA frp;
frp.searchAllFields = settings.search_hidden_fields;
frp.findString = aQuery;
// Try to handle whatever the user throws at us (substring, wildcards, regex, etc.)
@ -394,7 +413,10 @@ int RATSNEST_SEARCH_HANDLER::Search( const wxString& aQuery )
{
m_hitlist.clear();
EDA_SEARCH_DATA frp;
APP_SETTINGS_BASE::SEARCH_PANE& settings = m_frame->config()->m_SearchPane;
EDA_SEARCH_DATA frp;
frp.searchAllFields = settings.search_hidden_fields;
frp.findString = aQuery;
// Try to handle whatever the user throws at us (substring, wildcards, regex, etc.)

Loading…
Cancel
Save