Loading eeschema/dialogs/dialog_edit_label.cpp +25 −0 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,7 @@ #include <drawtxt.h> #include <drawtxt.h> #include <confirm.h> #include <confirm.h> #include <sch_text.h> #include <sch_text.h> #include <typeinfo> #include <dialog_edit_label_base.h> #include <dialog_edit_label_base.h> Loading @@ -50,6 +51,30 @@ class DIALOG_LABEL_EDITOR : public DIALOG_LABEL_EDITOR_BASE public: public: DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* parent, SCH_TEXT* aTextItem ); DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* parent, SCH_TEXT* aTextItem ); void SetTitle( const wxString& aTitle ) // OVERRIDE wxTopLevelWindow::SetTitle { // This class is shared for numerous tasks: a couple of // single line labels and multi-line text fields. // Often the desired size of the multi-line text field editor // is larger than is needed for the single line label. // Therefore the session retained sizes of these dialogs needs // to be class independent, make them title dependent. switch( m_CurrentText->Type() ) { case SCH_GLOBAL_LABEL_T: case SCH_HIERARCHICAL_LABEL_T: case SCH_LABEL_T: // labels can share retained settings probably. break; default: m_hash_key = TO_UTF8( aTitle ); m_hash_key += typeid(*this).name(); } DIALOG_LABEL_EDITOR_BASE::SetTitle( aTitle ); } private: private: void InitDialog( ); void InitDialog( ); virtual void OnEnterKey( wxCommandEvent& aEvent ); virtual void OnEnterKey( wxCommandEvent& aEvent ); Loading eeschema/load_one_schematic_file.cpp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -269,7 +269,9 @@ again." ); aScreen->Show( 0, std::cout ); aScreen->Show( 0, std::cout ); #endif #endif aScreen->BuildSchCmpLinksToLibCmp(); // Build links between each components and its part lib LIB_PART // Build links between each components and its part lib LIB_PART aScreen->CheckComponentsToPartsLinks(); aScreen->TestDanglingEnds(); aScreen->TestDanglingEnds(); msgDiag.Printf( _( "Done Loading <%s>" ), GetChars( aScreen->GetFileName() ) ); msgDiag.Printf( _( "Done Loading <%s>" ), GetChars( aScreen->GetFileName() ) ); Loading eeschema/sch_screen.cpp +8 −5 Original line number Original line Diff line number Diff line Loading @@ -540,7 +540,8 @@ bool SCH_SCREEN::Save( FILE* aFile ) const return true; return true; } } void SCH_SCREEN::BuildSchCmpLinksToLibCmp() void SCH_SCREEN::CheckComponentsToPartsLinks() { { // Initialize or reinitialize the pointer to the LIB_PART for each component // Initialize or reinitialize the pointer to the LIB_PART for each component // found in m_drawList, but only if needed (change in lib or schematic) // found in m_drawList, but only if needed (change in lib or schematic) Loading @@ -561,12 +562,14 @@ void SCH_SCREEN::BuildSchCmpLinksToLibCmp() SCH_COMPONENT::ResolveAll( c, libs ); SCH_COMPONENT::ResolveAll( c, libs ); m_modification_sync = mod_hash; // note the last mod_hash m_modification_sync = mod_hash; // note the last mod_hash // guard against unneeded runs through this code path by printing trace DBG(printf("%s: resync-ing %s\n", __func__, TO_UTF8( GetFileName() ) );) } } } } } } void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor ) void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor ) { { /* note: SCH_SCREEN::Draw is useful only for schematic. /* note: SCH_SCREEN::Draw is useful only for schematic. Loading @@ -574,7 +577,7 @@ void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode * their SCH_SCREEN::Draw() draws nothing * their SCH_SCREEN::Draw() draws nothing */ */ BuildSchCmpLinksToLibCmp(); CheckComponentsToPartsLinks(); for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() ) for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() ) { { Loading @@ -596,7 +599,7 @@ void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode */ */ void SCH_SCREEN::Plot( PLOTTER* aPlotter ) void SCH_SCREEN::Plot( PLOTTER* aPlotter ) { { BuildSchCmpLinksToLibCmp(); CheckComponentsToPartsLinks(); for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() ) for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() ) { { Loading Loading @@ -1406,7 +1409,7 @@ void SCH_SCREENS::BuildScreenList( EDA_ITEM* aItem ) // up to date (the cost is low if this is the case) // up to date (the cost is low if this is the case) // We do this update here, because most of time this function is called // We do this update here, because most of time this function is called // to create a netlist, or an ERC, which need this update // to create a netlist, or an ERC, which need this update screen->BuildSchCmpLinksToLibCmp(); screen->CheckComponentsToPartsLinks(); AddScreenToList( screen ); AddScreenToList( screen ); EDA_ITEM* strct = screen->GetDrawItems(); EDA_ITEM* strct = screen->GetDrawItems(); Loading include/class_sch_screen.h +9 −8 Original line number Original line Diff line number Diff line Loading @@ -195,14 +195,15 @@ public: void Place( SCH_EDIT_FRAME* frame, wxDC* DC ) { }; void Place( SCH_EDIT_FRAME* frame, wxDC* DC ) { }; /** /** * Initialize or reinitialize the pointer * Function CheckComponentsToPartsLink * to the LIB_PART for each component found in m_drawList * initializes or reinitializes the weak reference * must be called: * to the LIB_PART for each SCH_COMPONENT found in m_drawList. * in Draw function * It must be called from: * when loading a schematic file * - Draw function * before creating a netlist (in case a library is modified) * - when loading a schematic file */ * - before creating a netlist (in case a library is modified) void BuildSchCmpLinksToLibCmp(); */ void CheckComponentsToPartsLinks(); /** /** * Function Draw * Function Draw Loading Loading
eeschema/dialogs/dialog_edit_label.cpp +25 −0 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,7 @@ #include <drawtxt.h> #include <drawtxt.h> #include <confirm.h> #include <confirm.h> #include <sch_text.h> #include <sch_text.h> #include <typeinfo> #include <dialog_edit_label_base.h> #include <dialog_edit_label_base.h> Loading @@ -50,6 +51,30 @@ class DIALOG_LABEL_EDITOR : public DIALOG_LABEL_EDITOR_BASE public: public: DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* parent, SCH_TEXT* aTextItem ); DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* parent, SCH_TEXT* aTextItem ); void SetTitle( const wxString& aTitle ) // OVERRIDE wxTopLevelWindow::SetTitle { // This class is shared for numerous tasks: a couple of // single line labels and multi-line text fields. // Often the desired size of the multi-line text field editor // is larger than is needed for the single line label. // Therefore the session retained sizes of these dialogs needs // to be class independent, make them title dependent. switch( m_CurrentText->Type() ) { case SCH_GLOBAL_LABEL_T: case SCH_HIERARCHICAL_LABEL_T: case SCH_LABEL_T: // labels can share retained settings probably. break; default: m_hash_key = TO_UTF8( aTitle ); m_hash_key += typeid(*this).name(); } DIALOG_LABEL_EDITOR_BASE::SetTitle( aTitle ); } private: private: void InitDialog( ); void InitDialog( ); virtual void OnEnterKey( wxCommandEvent& aEvent ); virtual void OnEnterKey( wxCommandEvent& aEvent ); Loading
eeschema/load_one_schematic_file.cpp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -269,7 +269,9 @@ again." ); aScreen->Show( 0, std::cout ); aScreen->Show( 0, std::cout ); #endif #endif aScreen->BuildSchCmpLinksToLibCmp(); // Build links between each components and its part lib LIB_PART // Build links between each components and its part lib LIB_PART aScreen->CheckComponentsToPartsLinks(); aScreen->TestDanglingEnds(); aScreen->TestDanglingEnds(); msgDiag.Printf( _( "Done Loading <%s>" ), GetChars( aScreen->GetFileName() ) ); msgDiag.Printf( _( "Done Loading <%s>" ), GetChars( aScreen->GetFileName() ) ); Loading
eeschema/sch_screen.cpp +8 −5 Original line number Original line Diff line number Diff line Loading @@ -540,7 +540,8 @@ bool SCH_SCREEN::Save( FILE* aFile ) const return true; return true; } } void SCH_SCREEN::BuildSchCmpLinksToLibCmp() void SCH_SCREEN::CheckComponentsToPartsLinks() { { // Initialize or reinitialize the pointer to the LIB_PART for each component // Initialize or reinitialize the pointer to the LIB_PART for each component // found in m_drawList, but only if needed (change in lib or schematic) // found in m_drawList, but only if needed (change in lib or schematic) Loading @@ -561,12 +562,14 @@ void SCH_SCREEN::BuildSchCmpLinksToLibCmp() SCH_COMPONENT::ResolveAll( c, libs ); SCH_COMPONENT::ResolveAll( c, libs ); m_modification_sync = mod_hash; // note the last mod_hash m_modification_sync = mod_hash; // note the last mod_hash // guard against unneeded runs through this code path by printing trace DBG(printf("%s: resync-ing %s\n", __func__, TO_UTF8( GetFileName() ) );) } } } } } } void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor ) void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode, EDA_COLOR_T aColor ) { { /* note: SCH_SCREEN::Draw is useful only for schematic. /* note: SCH_SCREEN::Draw is useful only for schematic. Loading @@ -574,7 +577,7 @@ void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode * their SCH_SCREEN::Draw() draws nothing * their SCH_SCREEN::Draw() draws nothing */ */ BuildSchCmpLinksToLibCmp(); CheckComponentsToPartsLinks(); for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() ) for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() ) { { Loading @@ -596,7 +599,7 @@ void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, GR_DRAWMODE aDrawMode */ */ void SCH_SCREEN::Plot( PLOTTER* aPlotter ) void SCH_SCREEN::Plot( PLOTTER* aPlotter ) { { BuildSchCmpLinksToLibCmp(); CheckComponentsToPartsLinks(); for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() ) for( SCH_ITEM* item = m_drawList.begin(); item; item = item->Next() ) { { Loading Loading @@ -1406,7 +1409,7 @@ void SCH_SCREENS::BuildScreenList( EDA_ITEM* aItem ) // up to date (the cost is low if this is the case) // up to date (the cost is low if this is the case) // We do this update here, because most of time this function is called // We do this update here, because most of time this function is called // to create a netlist, or an ERC, which need this update // to create a netlist, or an ERC, which need this update screen->BuildSchCmpLinksToLibCmp(); screen->CheckComponentsToPartsLinks(); AddScreenToList( screen ); AddScreenToList( screen ); EDA_ITEM* strct = screen->GetDrawItems(); EDA_ITEM* strct = screen->GetDrawItems(); Loading
include/class_sch_screen.h +9 −8 Original line number Original line Diff line number Diff line Loading @@ -195,14 +195,15 @@ public: void Place( SCH_EDIT_FRAME* frame, wxDC* DC ) { }; void Place( SCH_EDIT_FRAME* frame, wxDC* DC ) { }; /** /** * Initialize or reinitialize the pointer * Function CheckComponentsToPartsLink * to the LIB_PART for each component found in m_drawList * initializes or reinitializes the weak reference * must be called: * to the LIB_PART for each SCH_COMPONENT found in m_drawList. * in Draw function * It must be called from: * when loading a schematic file * - Draw function * before creating a netlist (in case a library is modified) * - when loading a schematic file */ * - before creating a netlist (in case a library is modified) void BuildSchCmpLinksToLibCmp(); */ void CheckComponentsToPartsLinks(); /** /** * Function Draw * Function Draw Loading