Preload eeschema find with selection when appropriate.

Fixes https://gitlab.com/kicad/code/kicad/issues/11148
This commit is contained in:
Jeff Young 2022-03-18 23:30:45 +00:00
parent ba4b8bfa69
commit 7b82c2ba85
3 changed files with 47 additions and 4 deletions

View File

@ -292,7 +292,7 @@ wxArrayString DIALOG_SCH_FIND::GetFindEntries() const
} }
void DIALOG_SCH_FIND::SetFindEntries( const wxArrayString& aEntries ) void DIALOG_SCH_FIND::SetFindEntries( const wxArrayString& aEntries, const wxString& aFindString )
{ {
m_comboFind->Append( aEntries ); m_comboFind->Append( aEntries );
@ -302,7 +302,12 @@ void DIALOG_SCH_FIND::SetFindEntries( const wxArrayString& aEntries )
m_comboFind->Delete( 9 ); m_comboFind->Delete( 9 );
} }
if( m_comboFind->GetCount() ) if( !aFindString.IsEmpty() )
{
m_comboFind->SetValue( aFindString );
m_comboFind->SelectAll();
}
else if( m_comboFind->GetCount() )
{ {
m_comboFind->SetSelection( 0 ); m_comboFind->SetSelection( 0 );
m_comboFind->SelectAll(); m_comboFind->SelectAll();

View File

@ -51,7 +51,7 @@ public:
const wxPoint& aPosition = wxDefaultPosition, const wxPoint& aPosition = wxDefaultPosition,
const wxSize& aSize = wxDefaultSize, int aStyle = 0 ); const wxSize& aSize = wxDefaultSize, int aStyle = 0 );
void SetFindEntries( const wxArrayString& aEntries ); void SetFindEntries( const wxArrayString& aEntries, const wxString& aFindString );
wxArrayString GetFindEntries() const; wxArrayString GetFindEntries() const;
void SetReplaceEntries( const wxArrayString& aEntries ); void SetReplaceEntries( const wxArrayString& aEntries );

View File

@ -963,13 +963,51 @@ void SCH_EDIT_FRAME::UpdateHierarchyNavigator( bool aForceUpdate )
void SCH_EDIT_FRAME::ShowFindReplaceDialog( bool aReplace ) void SCH_EDIT_FRAME::ShowFindReplaceDialog( bool aReplace )
{ {
wxString findString;
EE_SELECTION& selection = m_toolManager->GetTool<EE_SELECTION_TOOL>()->GetSelection();
if( selection.Size() == 1 )
{
EDA_ITEM* front = selection.Front();
switch( front->Type() )
{
case SCH_SYMBOL_T:
findString = static_cast<SCH_SYMBOL*>( front )->GetValue( &GetCurrentSheet(), true );
break;
case SCH_FIELD_T:
findString = static_cast<SCH_FIELD*>( front )->GetShownText();
break;
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_SHEET_PIN_T:
findString = static_cast<SCH_LABEL_BASE*>( front )->GetShownText();
break;
case SCH_TEXT_T:
findString = static_cast<SCH_TEXT*>( front )->GetShownText();
if( findString.Contains( wxT( "\n" ) ) )
findString = findString.Before( '\n' );
break;
default:
break;
}
}
if( m_findReplaceDialog ) if( m_findReplaceDialog )
m_findReplaceDialog->Destroy(); m_findReplaceDialog->Destroy();
m_findReplaceDialog= new DIALOG_SCH_FIND( this, m_findReplaceData, wxDefaultPosition, m_findReplaceDialog= new DIALOG_SCH_FIND( this, m_findReplaceData, wxDefaultPosition,
wxDefaultSize, aReplace ? wxFR_REPLACEDIALOG : 0 ); wxDefaultSize, aReplace ? wxFR_REPLACEDIALOG : 0 );
m_findReplaceDialog->SetFindEntries( m_findStringHistoryList ); m_findReplaceDialog->SetFindEntries( m_findStringHistoryList, findString );
m_findReplaceDialog->SetReplaceEntries( m_replaceStringHistoryList ); m_findReplaceDialog->SetReplaceEntries( m_replaceStringHistoryList );
m_findReplaceDialog->Show( true ); m_findReplaceDialog->Show( true );
} }