Improve alias handling in component chooser dialog.

This commit is contained in:
John Beard 2014-10-08 20:49:29 -04:00 committed by Wayne Stambaugh
parent a398d45914
commit ef2337ca16
1 changed files with 60 additions and 11 deletions

View File

@ -49,7 +49,7 @@ DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT( SCH_BASE_FRAME* aParent, const
m_searchBox->SetFocus(); m_searchBox->SetFocus();
m_componentDetails->SetEditable( false ); m_componentDetails->SetEditable( false );
#if wxCHECK_VERSION( 3, 0, 0 ) #if wxCHECK_VERSION( 3, 0, 0 )
m_libraryComponentTree->ScrollTo( m_libraryComponentTree->GetFocusedItem() ); m_libraryComponentTree->ScrollTo( m_libraryComponentTree->GetFocusedItem() );
#endif #endif
@ -76,7 +76,7 @@ LIB_ALIAS* DIALOG_CHOOSE_COMPONENT::GetSelectedAlias( int* aUnit ) const
void DIALOG_CHOOSE_COMPONENT::OnSearchBoxChange( wxCommandEvent& aEvent ) void DIALOG_CHOOSE_COMPONENT::OnSearchBoxChange( wxCommandEvent& aEvent )
{ {
m_search_container->UpdateSearchTerm( m_searchBox->GetLineText(0) ); m_search_container->UpdateSearchTerm( m_searchBox->GetLineText( 0 ) );
updateSelection(); updateSelection();
m_searchBox->SetFocus(); m_searchBox->SetFocus();
} }
@ -114,7 +114,7 @@ void DIALOG_CHOOSE_COMPONENT::OnInterceptSearchBoxKey( wxKeyEvent& aKeyStroke )
selectIfValid( GetNextItem( *m_libraryComponentTree, sel ) ); selectIfValid( GetNextItem( *m_libraryComponentTree, sel ) );
break; break;
// The follwoing keys we can only hijack if they are not needed by the textbox itself. // The following keys we can only hijack if they are not needed by the textbox itself.
case WXK_LEFT: case WXK_LEFT:
if( m_searchBox->GetInsertionPoint() == 0 ) if( m_searchBox->GetInsertionPoint() == 0 )
@ -215,31 +215,58 @@ bool DIALOG_CHOOSE_COMPONENT::updateSelection()
font_bold.SetWeight( wxFONTWEIGHT_BOLD ); font_bold.SetWeight( wxFONTWEIGHT_BOLD );
wxTextAttr headline_attribute; wxTextAttr headline_attribute;
headline_attribute.SetFont(font_bold); headline_attribute.SetFont( font_bold );
wxTextAttr text_attribute; wxTextAttr text_attribute;
text_attribute.SetFont(font_normal); text_attribute.SetFont( font_normal );
const wxString name = selection->GetName();
if ( !name.empty() )
{
m_componentDetails->SetDefaultStyle( headline_attribute );
m_componentDetails->AppendText( name );
}
const wxString description = selection->GetDescription(); const wxString description = selection->GetDescription();
if( !description.empty() ) if( !description.empty() )
{ {
if ( !m_componentDetails->IsEmpty() )
m_componentDetails->AppendText( wxT( "\n\n" ) );
m_componentDetails->SetDefaultStyle( headline_attribute ); m_componentDetails->SetDefaultStyle( headline_attribute );
m_componentDetails->AppendText( _("Description\n") ); m_componentDetails->AppendText( _( "Description\n" ) );
m_componentDetails->SetDefaultStyle( text_attribute ); m_componentDetails->SetDefaultStyle( text_attribute );
m_componentDetails->AppendText( description ); m_componentDetails->AppendText( description );
m_componentDetails->AppendText( wxT("\n\n") );
} }
const wxString keywords = selection->GetKeyWords(); const wxString keywords = selection->GetKeyWords();
if( !keywords.empty() ) if( !keywords.empty() )
{ {
if ( !m_componentDetails->IsEmpty() )
m_componentDetails->AppendText( wxT( "\n\n" ) );
m_componentDetails->SetDefaultStyle( headline_attribute ); m_componentDetails->SetDefaultStyle( headline_attribute );
m_componentDetails->AppendText( _("Keywords\n") ); m_componentDetails->AppendText( _( "Keywords\n" ) );
m_componentDetails->SetDefaultStyle( text_attribute ); m_componentDetails->SetDefaultStyle( text_attribute );
m_componentDetails->AppendText( keywords ); m_componentDetails->AppendText( keywords );
} }
if ( !selection->IsRoot() )
{
LIB_PART* root_part = selection->GetPart();
const wxString root_component_name( root_part ? root_part->GetName() : _( "Unknown" ) );
if ( !m_componentDetails->IsEmpty() )
m_componentDetails->AppendText( wxT( "\n\n" ) );
m_componentDetails->SetDefaultStyle( headline_attribute );
m_componentDetails->AppendText( _( "Alias of " ) );
m_componentDetails->SetDefaultStyle( text_attribute );
m_componentDetails->AppendText( root_component_name );
}
m_componentDetails->SetInsertionPoint( 0 ); // scroll up. m_componentDetails->SetInsertionPoint( 0 ); // scroll up.
m_componentDetails->Thaw(); m_componentDetails->Thaw();
@ -250,18 +277,39 @@ bool DIALOG_CHOOSE_COMPONENT::updateSelection()
void DIALOG_CHOOSE_COMPONENT::OnHandlePreviewRepaint( wxPaintEvent& aRepaintEvent ) void DIALOG_CHOOSE_COMPONENT::OnHandlePreviewRepaint( wxPaintEvent& aRepaintEvent )
{ {
int unit = 0; int unit = 0;
LIB_ALIAS* selection = m_search_container->GetSelectedAlias( &unit ); LIB_ALIAS* selection = m_search_container->GetSelectedAlias( &unit );
LIB_PART* part = selection ? selection->GetPart() : NULL;
renderPreview( selection ? selection->GetPart() : NULL, unit ); // Don't draw anything (not even the background) if we don't have
// a part to show
if( !part )
return;
if( selection->IsRoot() )
{
// just show the part directly
renderPreview( part, unit );
}
else
{
// switch out the name temporarily for the alias name
wxString tmp( part->GetName() );
part->SetName( selection->GetName() );
renderPreview( part, unit );
part->SetName( tmp );
}
} }
// Render the preview in our m_componentView. If this gets more complicated, we should // Render the preview in our m_componentView. If this gets more complicated, we should
// probably have a derived class from wxPanel; but this keeps things local. // probably have a derived class from wxPanel; but this keeps things local.
void DIALOG_CHOOSE_COMPONENT::renderPreview( LIB_PART* aComponent, int aUnit ) void DIALOG_CHOOSE_COMPONENT::renderPreview( LIB_PART* aComponent, int aUnit )
{ {
wxPaintDC dc( m_componentView ); wxPaintDC dc( m_componentView );
EDA_COLOR_T bgcolor = m_parent->GetDrawBgColor(); EDA_COLOR_T bgcolor = m_parent->GetDrawBgColor();
dc.SetBackground( bgcolor == BLACK ? *wxBLACK_BRUSH : *wxWHITE_BRUSH ); dc.SetBackground( bgcolor == BLACK ? *wxBLACK_BRUSH : *wxWHITE_BRUSH );
dc.Clear(); dc.Clear();
@ -323,6 +371,7 @@ static wxTreeItemId GetNextItem( const wxTreeCtrl& tree, const wxTreeItemId& ite
for ( wxTreeItemId walk = item; walk.IsOk(); walk = tree.GetItemParent( walk ) ) for ( wxTreeItemId walk = item; walk.IsOk(); walk = tree.GetItemParent( walk ) )
{ {
nextItem = tree.GetNextSibling( walk ); nextItem = tree.GetNextSibling( walk );
if( nextItem.IsOk() ) if( nextItem.IsOk() )
break; break;
} }