diff --git a/eeschema/libedit.cpp b/eeschema/libedit.cpp index cf15dccdaa..cd11df02eb 100644 --- a/eeschema/libedit.cpp +++ b/eeschema/libedit.cpp @@ -211,9 +211,7 @@ bool LIB_EDIT_FRAME::LoadOneLibraryPartAux( LIB_ALIAS* aEntry, PART_LIB* aLibrar wxString cmpName = m_aliasName = aEntry->GetName(); - LIB_ALIAS* alias = (LIB_ALIAS*) aEntry; - - LIB_PART* lib_part = alias->GetPart(); + LIB_PART* lib_part = aEntry->GetPart(); wxASSERT( lib_part ); diff --git a/eeschema/libeditframe.cpp b/eeschema/libeditframe.cpp index 77181fdda4..fa7a8d863b 100644 --- a/eeschema/libeditframe.cpp +++ b/eeschema/libeditframe.cpp @@ -181,9 +181,7 @@ END_EVENT_TABLE() LIB_EDIT_FRAME::LIB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) : SCH_BASE_FRAME( aKiway, aParent, FRAME_SCH_LIB_EDITOR, _( "Library Editor" ), - wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, GetLibEditFrameName() ), - m_my_part( 0 ), - m_tempCopyComponent( 0 ) + wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, GetLibEditFrameName() ) { wxASSERT( aParent ); @@ -196,6 +194,9 @@ LIB_EDIT_FRAME::LIB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) : m_editPinsPerPartOrConvert = false; m_repeatPinStep = DEFAULT_REPEAT_OFFSET_PIN; + m_my_part = NULL; + m_tempCopyComponent = NULL; + // Delayed initialization if( m_textSize == -1 ) m_textSize = GetDefaultTextSize(); @@ -231,6 +232,27 @@ LIB_EDIT_FRAME::LIB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) : ReCreateMenuBar(); ReCreateHToolbar(); ReCreateVToolbar(); + + // Ensure the current alias name is valid if a part is loaded + // Sometimes it is not valid. This is the case + // when a part value (the part lib name), or the alias list was modified + // during a previous session and the modifications not saved in lib. + // Reopen libedit in a new session gives a non valid m_aliasName + // because the curr part is reloaded from the library (and this is the unmodified part) + // and the old alias name (from the previous edition) can be invalid + LIB_PART* part = GetCurPart(); + + if( part == NULL ) + m_aliasName.Empty(); + else if( m_aliasName != part->GetName() ) + { + LIB_ALIAS* alias = part->GetAlias( m_aliasName ); + + if( !alias ) + m_aliasName = part->GetName(); + } + + CreateOptionToolbar(); DisplayLibInfos(); DisplayCmpDoc(); @@ -278,6 +300,8 @@ LIB_EDIT_FRAME::~LIB_EDIT_FRAME() delete m_tempCopyComponent; delete m_my_part; + m_my_part = NULL; + m_tempCopyComponent = NULL; } const wxChar* LIB_EDIT_FRAME::GetLibEditFrameName() diff --git a/eeschema/schedit.cpp b/eeschema/schedit.cpp index 29227ce6ed..7cdb1f05a0 100644 --- a/eeschema/schedit.cpp +++ b/eeschema/schedit.cpp @@ -973,7 +973,13 @@ void SCH_EDIT_FRAME::OnEditItem( wxCommandEvent& aEvent ) EditImage( (SCH_BITMAP*) item ); break; - default: + case SCH_LINE_T: // These items have no param to edit + case SCH_MARKER_T: + case SCH_JUNCTION_T: + case SCH_NO_CONNECT_T: + break; + + default: // Unexpected item wxFAIL_MSG( wxString::Format( wxT( "Cannot edit schematic item type %s." ), GetChars( item->GetClass() ) ) ); }