mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 02:03:12 +02:00
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
This commit is contained in:
parent
0659290417
commit
3def4afaec
@ -193,6 +193,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
|
||||
|
||||
|
@ -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,
|
||||
|
@ -173,8 +173,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.)
|
||||
@ -255,8 +257,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.)
|
||||
@ -327,8 +331,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.)
|
||||
@ -412,8 +418,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.)
|
||||
|
@ -39,13 +39,14 @@ enum class EDA_SEARCH_MATCH_MODE
|
||||
|
||||
struct EDA_SEARCH_DATA
|
||||
{
|
||||
wxString findString;
|
||||
wxString replaceString;
|
||||
wxString findString;
|
||||
wxString replaceString;
|
||||
|
||||
mutable wxRegEx regex;
|
||||
mutable wxString regex_string;
|
||||
|
||||
bool searchAndReplace;
|
||||
bool searchAndReplace;
|
||||
bool searchAllFields;
|
||||
|
||||
bool matchCase;
|
||||
bool markersOnly;
|
||||
@ -55,6 +56,7 @@ struct EDA_SEARCH_DATA
|
||||
findString(),
|
||||
replaceString(),
|
||||
searchAndReplace( false ),
|
||||
searchAllFields( false ),
|
||||
matchCase( false ),
|
||||
markersOnly( false ),
|
||||
matchMode( EDA_SEARCH_MATCH_MODE::PLAIN )
|
||||
@ -83,7 +85,6 @@ struct EDA_SEARCH_DATA
|
||||
|
||||
struct SCH_SEARCH_DATA : public EDA_SEARCH_DATA
|
||||
{
|
||||
bool searchAllFields;
|
||||
bool searchAllPins;
|
||||
bool searchCurrentSheetOnly;
|
||||
bool searchSelectedOnly;
|
||||
@ -93,7 +94,6 @@ struct SCH_SEARCH_DATA : public EDA_SEARCH_DATA
|
||||
|
||||
SCH_SEARCH_DATA() :
|
||||
EDA_SEARCH_DATA(),
|
||||
searchAllFields( false ),
|
||||
searchAllPins( false ),
|
||||
searchCurrentSheetOnly( false ),
|
||||
searchSelectedOnly( false ),
|
||||
|
@ -114,6 +114,7 @@ public:
|
||||
};
|
||||
|
||||
SELECTION_ZOOM selection_zoom;
|
||||
bool search_hidden_fields;
|
||||
};
|
||||
|
||||
struct GRAPHICS
|
||||
|
@ -138,6 +138,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() );
|
||||
|
@ -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;
|
||||
|
@ -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…
x
Reference in New Issue
Block a user