void LIB_EDIT_FRAME::fixDuplicateAliases( LIB_PART* aPart, const wxString& aLibrary ) { wxString newName; for( unsigned int i = 0; i < aPart->GetAliasCount(); ++i ) { LIB_ALIAS* alias = aPart->GetAlias( i ); int sfx = 0; newName = alias->GetName(); while( m_libMgr->PartExists( newName, aLibrary ) ) { if( sfx == 0 ) newName = wxString::Format( "%s_copy", alias->GetName() ); else newName = wxString::Format( "%s_copy%d", alias->GetName(), sfx ); ++sfx; } if( i == 0 ) aPart->SetName( newName ); else alias->SetName( newName ); } }
void LIB_VIEW_FRAME::ViewOneLibraryContent( CMP_LIBRARY* Lib, int Flag ) { int NumOfParts = 0; LIB_ALIAS* LibEntry; wxString CmpName; if( Lib ) NumOfParts = Lib->GetCount(); if( NumOfParts == 0 ) { DisplayError( this, wxT( "No library or library is empty!" ) ); return; } if( Lib == NULL ) return; if( Flag == NEW_PART ) { DisplayComponentsNamesInLib( this, Lib, CmpName, m_entryName ); } if( Flag == NEXT_PART ) { LibEntry = Lib->GetNextEntry( m_entryName ); if( LibEntry ) CmpName = LibEntry->GetName(); } if( Flag == PREVIOUS_PART ) { LibEntry = Lib->GetPreviousEntry( m_entryName ); if( LibEntry ) CmpName = LibEntry->GetName(); } m_unit = 1; m_convert = 1; LibEntry = Lib->FindEntry( CmpName ); m_entryName = CmpName; DisplayLibInfos(); Zoom_Automatique( false ); m_canvas->Refresh( ); if( m_CmpList ) { int id = m_CmpList->FindString( m_entryName.GetData() ); if( id >= 0 ) m_CmpList->SetSelection( id ); } ReCreateHToolbar(); }
void LIB_VIEW_FRAME::updatePreviewSymbol() { LIB_ALIAS* alias = getSelectedAlias(); KIGFX::SCH_VIEW* view = GetCanvas()->GetView(); if( m_previewItem ) { view->Remove( m_previewItem ); m_previewItem = nullptr; } ClearMsgPanel(); if( alias ) { GetRenderSettings()->m_ShowUnit = m_unit; GetRenderSettings()->m_ShowConvert = m_convert; view->Add( alias ); m_previewItem = alias; AppendMsgPanel( _( "Name" ), alias->GetName(), BLUE, 6 ); AppendMsgPanel( _( "Description" ), alias->GetDescription(), CYAN, 6 ); AppendMsgPanel( _( "Key words" ), alias->GetKeyWords(), DARKDARKGRAY ); } GetCanvas()->ForceRefresh(); }
void DIALOG_CHOOSE_COMPONENT::OnHandlePreviewRepaint( wxPaintEvent& aRepaintEvent ) { int unit = 0; LIB_ALIAS* selection = m_search_container->GetSelectedAlias( &unit ); LIB_PART* part = selection ? selection->GetPart() : NULL; // 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 ); } }
/** * Function RedrawActiveWindow * Display the current selected component. * If the component is an alias, the ROOT component is displayed */ void LIB_VIEW_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg ) { LIB_COMPONENT* component; LIB_ALIAS* entry; CMP_LIBRARY* lib; wxString msg; wxString tmp; lib = CMP_LIBRARY::FindLibrary( m_libraryName ); if( lib == NULL ) return; entry = lib->FindEntry( m_entryName ); if( entry == NULL ) return; component = entry->GetComponent(); m_canvas->DrawBackGround( DC ); if( !entry->IsRoot() ) { if( component == NULL ) // Should not occur return; // Temporarily change the name field text to reflect the alias name. msg = entry->GetName(); tmp = component->GetName(); component->SetName( msg ); if( m_unit < 1 ) m_unit = 1; if( m_convert < 1 ) m_convert = 1; } else { msg = _( "None" ); } component->Draw( m_canvas, DC, wxPoint( 0, 0 ), m_unit, m_convert, GR_DEFAULT_DRAWMODE ); /* Redraw the cursor */ m_canvas->DrawCrossHair( DC ); if( !tmp.IsEmpty() ) component->SetName( tmp ); ClearMsgPanel(); AppendMsgPanel( _( "Part" ), component->GetName(), BLUE, 6 ); AppendMsgPanel( _( "Alias" ), msg, RED, 6 ); AppendMsgPanel( _( "Description" ), entry->GetDescription(), CYAN, 6 ); AppendMsgPanel( _( "Key words" ), entry->GetKeyWords(), DARKDARKGRAY ); }
void LIB_VIEW_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg ) { LIB_ALIAS* entry = Prj().SchLibs()->FindLibraryAlias( m_entryName, m_libraryName ); if( !entry ) return; LIB_PART* part = entry->GetPart(); if( !part ) return; wxString msg; wxString tmp; m_canvas->DrawBackGround( DC ); if( !entry->IsRoot() ) { // Temporarily change the name field text to reflect the alias name. msg = entry->GetName(); tmp = part->GetName(); part->SetName( msg ); if( m_unit < 1 ) m_unit = 1; if( m_convert < 1 ) m_convert = 1; } else msg = _( "None" ); part->Draw( m_canvas, DC, wxPoint( 0, 0 ), m_unit, m_convert, GR_DEFAULT_DRAWMODE ); // Redraw the cursor m_canvas->DrawCrossHair( DC ); if( !tmp.IsEmpty() ) part->SetName( tmp ); ClearMsgPanel(); AppendMsgPanel( _( "Part" ), part->GetName(), BLUE, 6 ); AppendMsgPanel( _( "Alias" ), msg, RED, 6 ); AppendMsgPanel( _( "Description" ), entry->GetDescription(), CYAN, 6 ); AppendMsgPanel( _( "Key words" ), entry->GetKeyWords(), DARKDARKGRAY ); }
void LIB_EDIT_FRAME::DeleteOnePart( wxCommandEvent& event ) { wxString cmp_name; LIB_ALIAS* libEntry; wxArrayString nameList; wxString msg; m_canvas->EndMouseCapture( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor() ); m_lastDrawItem = NULL; m_drawItem = NULL; LIB_PART *part = GetCurPart(); PART_LIB* lib = GetCurLib(); if( !lib ) { SelectActiveLibrary(); lib = GetCurLib(); if( !lib ) { DisplayError( this, _( "Please select a component library." ) ); return; } } auto adapter( CMP_TREE_MODEL_ADAPTER::Create( Prj().SchLibs() ) ); wxString name = part ? part->GetName() : wxString( wxEmptyString ); adapter->SetPreselectNode( name, /* aUnit */ 0 ); adapter->ShowUnits( false ); adapter->AddLibrary( *lib ); wxString dialogTitle; dialogTitle.Printf( _( "Delete Component (%u items loaded)" ), adapter->GetComponentsCount() ); DIALOG_CHOOSE_COMPONENT dlg( this, dialogTitle, adapter, m_convert ); if( dlg.ShowModal() == wxID_CANCEL ) { return; } libEntry = dlg.GetSelectedAlias( NULL ); if( !libEntry ) { msg.Printf( _( "Entry '%s' not found in library '%s'." ), GetChars( libEntry->GetName() ), GetChars( lib->GetName() ) ); DisplayError( this, msg ); return; } msg.Printf( _( "Delete component '%s' from library '%s' ?" ), GetChars( libEntry->GetName() ), GetChars( lib->GetName() ) ); if( !IsOK( this, msg ) ) return; part = GetCurPart(); if( !part || !part->HasAlias( libEntry->GetName() ) ) { lib->RemoveAlias( libEntry ); m_canvas->Refresh(); return; } // If deleting the current entry or removing one of the aliases for // the current entry, sync the changes in the current entry as well. if( GetScreen()->IsModify() && !IsOK( this, _( "The component being deleted has been modified." " All changes will be lost. Discard changes?" ) ) ) { return; } LIB_ALIAS* nextEntry = lib->RemoveAlias( libEntry ); if( nextEntry != NULL ) { if( LoadOneLibraryPartAux( nextEntry, lib ) ) Zoom_Automatique( false ); } else { SetCurPart( NULL ); // delete CurPart m_aliasName.Empty(); } m_canvas->Refresh(); }
void COMPONENT_TREE_SEARCH_CONTAINER::AddAliasList( const wxString& aNodeName, const wxArrayString& aAliasNameList, PART_LIB* aOptionalLib ) { TREE_NODE* const lib_node = new TREE_NODE( TREE_NODE::TYPE_LIB, NULL, NULL, aNodeName, wxEmptyString, wxEmptyString ); m_nodes.push_back( lib_node ); for( const wxString& aName : aAliasNameList ) { LIB_ALIAS* a; if( aOptionalLib ) a = aOptionalLib->FindAlias( aName ); else a = m_libs->FindLibraryAlias( aName, wxEmptyString ); if( a == NULL ) continue; wxString search_text; search_text = ( a->GetKeyWords().empty() ) ? wxT(" ") : a->GetKeyWords(); search_text += a->GetDescription(); wxString display_info; if( !a->GetDescription().empty() ) { // Preformatting. Unfortunately, the tree widget doesn't have columns // and using tabs does not work very well or does not work at all // (depending on OS versions). So indent with spaces in fixed-font width. // The 98%-ile of length of strings found in the standard library is 15 // characters. Use this as a reasonable cut-off point for aligned indentation. // For the few component names longer than that, the description is indented a // bit more. // The max found in the default lib would be 20 characters, but that creates too // much visible whitespace for the less extreme component names. const int COLUMN_DESCR_POS = 15; const int indent_len = COLUMN_DESCR_POS - a->GetName().length(); display_info = wxString::Format( wxT( " %*s [ %s ]" ), indent_len > 0 ? indent_len : 0, wxT( "" ), GetChars( a->GetDescription() ) ); } TREE_NODE* alias_node = new TREE_NODE( TREE_NODE::TYPE_ALIAS, lib_node, a, a->GetName(), display_info, search_text ); m_nodes.push_back( alias_node ); if( a->GetPart()->IsMulti() ) // Add all units as sub-nodes. { for( int u = 1; u <= a->GetPart()->GetUnitCount(); ++u ) { wxString unitName = _("Unit"); unitName += wxT( " " ) + LIB_PART::SubReference( u, false ); TREE_NODE* unit_node = new TREE_NODE( TREE_NODE::TYPE_UNIT, alias_node, a, unitName, wxEmptyString, wxEmptyString ); unit_node->Unit = u; m_nodes.push_back( unit_node ); } } ++m_components_added; } }
void LIB_EDIT_FRAME::DeleteOnePart( wxCommandEvent& event ) { wxString cmp_name; LIB_ALIAS* libEntry; wxArrayString nameList; wxString msg; m_canvas->EndMouseCapture( ID_NO_TOOL_SELECTED, m_canvas->GetDefaultCursor() ); m_lastDrawItem = NULL; m_drawItem = NULL; PART_LIB* lib = GetCurLib(); if( !lib ) { SelectActiveLibrary(); lib = GetCurLib(); if( !lib ) { DisplayError( this, _( "Please select a component library." ) ); return; } } lib->GetAliasNames( nameList ); if( nameList.IsEmpty() ) { msg.Printf( _( "Part library '%s' is empty." ), GetChars( lib->GetName() ) ); wxMessageBox( msg, _( "Delete Entry Error" ), wxID_OK | wxICON_EXCLAMATION, this ); return; } msg.Printf( _( "Select one of %d components to delete\nfrom library '%s'." ), int( nameList.GetCount() ), GetChars( lib->GetName() ) ); wxSingleChoiceDialog dlg( this, msg, _( "Delete Part" ), nameList ); if( dlg.ShowModal() == wxID_CANCEL || dlg.GetStringSelection().IsEmpty() ) return; libEntry = lib->FindAlias( dlg.GetStringSelection() ); if( !libEntry ) { msg.Printf( _( "Entry '%s' not found in library '%s'." ), GetChars( dlg.GetStringSelection() ), GetChars( lib->GetName() ) ); DisplayError( this, msg ); return; } msg.Printf( _( "Delete component '%s' from library '%s' ?" ), GetChars( libEntry->GetName() ), GetChars( lib->GetName() ) ); if( !IsOK( this, msg ) ) return; LIB_PART* part = GetCurPart(); if( !part || !part->HasAlias( libEntry->GetName() ) ) { lib->RemoveAlias( libEntry ); return; } // If deleting the current entry or removing one of the aliases for // the current entry, sync the changes in the current entry as well. if( GetScreen()->IsModify() && !IsOK( this, _( "The component being deleted has been modified." " All changes will be lost. Discard changes?" ) ) ) { return; } LIB_ALIAS* nextEntry = lib->RemoveAlias( libEntry ); if( nextEntry != NULL ) { if( LoadOneLibraryPartAux( nextEntry, lib ) ) Zoom_Automatique( false ); } else { SetCurPart( NULL ); // delete CurPart m_aliasName.Empty(); } m_canvas->Refresh(); }
void SetHtmlName() { m_html.Replace( "__NAME__", EscapedHTML( m_part->GetName() ) ); }
bool DIALOG_CHOOSE_COMPONENT::updateSelection() { int unit = 0; LIB_ALIAS* selection = m_search_container->GetSelectedAlias( &unit ); m_componentView->Refresh(); m_componentDetails->Clear(); if( selection == NULL ) return false; m_componentDetails->Freeze(); wxFont font_normal = m_componentDetails->GetFont(); wxFont font_bold = m_componentDetails->GetFont(); font_bold.SetWeight( wxFONTWEIGHT_BOLD ); wxTextAttr headline_attribute; headline_attribute.SetFont( font_bold ); wxTextAttr text_attribute; 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(); if( !description.empty() ) { if ( !m_componentDetails->IsEmpty() ) m_componentDetails->AppendText( wxT( "\n\n" ) ); m_componentDetails->SetDefaultStyle( headline_attribute ); m_componentDetails->AppendText( _( "Description\n" ) ); m_componentDetails->SetDefaultStyle( text_attribute ); m_componentDetails->AppendText( description ); } const wxString keywords = selection->GetKeyWords(); if( !keywords.empty() ) { if ( !m_componentDetails->IsEmpty() ) m_componentDetails->AppendText( wxT( "\n\n" ) ); m_componentDetails->SetDefaultStyle( headline_attribute ); m_componentDetails->AppendText( _( "Keywords\n" ) ); m_componentDetails->SetDefaultStyle( text_attribute ); 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->Thaw(); return true; }