From 7c0b6c1e874c537b8fe4bd6d4681054ae65d8827 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Wed, 4 Jan 2023 18:31:41 +0000 Subject: [PATCH] Restore old pin-conflicts-map algo for MSW and GTK. --- eeschema/dialogs/panel_setup_pinmap.cpp | 85 ++++++++++++++++++++++--- eeschema/dialogs/panel_setup_pinmap.h | 10 +-- 2 files changed, 80 insertions(+), 15 deletions(-) diff --git a/eeschema/dialogs/panel_setup_pinmap.cpp b/eeschema/dialogs/panel_setup_pinmap.cpp index a82c1d66d3..7b0924b86e 100644 --- a/eeschema/dialogs/panel_setup_pinmap.cpp +++ b/eeschema/dialogs/panel_setup_pinmap.cpp @@ -78,15 +78,11 @@ void PANEL_SETUP_PINMAP::reBuildMatrixPanel() wxSize charSize = KIUI::GetTextSize( "X", m_matrixPanel ); wxPoint pos( 0, charSize.y * 2 ); wxStaticText* text; + +#ifdef __WXMAC__ wxPoint offset( 2, 3 ); -#if defined( __WXMAC__ ) bitmapSize += { 4, 2 }; -#elif defined( __WXMSW__ ) - bitmapSize += { 3, 2 }; -#else - bitmapSize += { -charSize.x / 4, 0 }; -#endif if( !m_initialized ) { @@ -119,9 +115,7 @@ void PANEL_SETUP_PINMAP::reBuildMatrixPanel() pos = m_buttonList[0][0]->GetPosition(); } -#if defined( __WXMAC__ ) charSize += { 0, 2 }; -#endif for( int ii = 0; ii < ELECTRICAL_PINTYPES_TOTAL; ii++ ) { @@ -162,11 +156,78 @@ void PANEL_SETUP_PINMAP::reBuildMatrixPanel() } } +#else + if( !m_initialized ) + { + std::vector labels; + + // Print row labels + for( int ii = 0; ii < ELECTRICAL_PINTYPES_TOTAL; ii++ ) + { + int y = pos.y + (ii * bitmapSize.y); + text = new wxStaticText( m_matrixPanel, -1, CommentERC_H[ii], + wxPoint( 5, y + ( bitmapSize.y / 2 ) - ( 12 / 2 ) ) ); + labels.push_back( text ); + + int x = text->GetRect().GetRight(); + pos.x = std::max( pos.x, x ); + } + + // Right-align + for( int ii = 0; ii < ELECTRICAL_PINTYPES_TOTAL; ii++ ) + { + wxPoint labelPos = labels[ ii ]->GetPosition(); + labelPos.x = pos.x - labels[ ii ]->GetRect().GetWidth(); + labels[ ii ]->SetPosition( labelPos ); + } + + pos.x += 5; + } + else + { + pos = m_buttonList[0][0]->GetPosition(); + } + + for( int ii = 0; ii < ELECTRICAL_PINTYPES_TOTAL; ii++ ) + { + int y = pos.y + (ii * bitmapSize.y); + + for( int jj = 0; jj <= ii; jj++ ) + { + // Add column labels (only once) + PIN_ERROR diag = m_schematic->ErcSettings().GetPinMapValue( ii, jj ); + + int x = pos.x + ( jj * ( bitmapSize.x + 2 ) ); + + if( ( ii == jj ) && !m_initialized ) + { + wxPoint textPos( x + KiROUND( bitmapSize.x / 2 ) - KiROUND( charSize.x ), + y - charSize.y * 2 ); + new wxStaticText( m_matrixPanel, wxID_ANY, CommentERC_V[ii], textPos ); + + wxPoint calloutPos( x + KiROUND( bitmapSize.x / 2 ) - KiROUND( charSize.x / 2 ), + y - charSize.y ); + new wxStaticText( m_matrixPanel, wxID_ANY, "|", calloutPos ); + } + + int event_id = ID_MATRIX_0 + ii + ( jj * ELECTRICAL_PINTYPES_TOTAL ); + BITMAPS bitmap_butt = BITMAPS::erc_green; + + delete m_buttonList[ii][jj]; + wxBitmapButton* btn = new wxBitmapButton( m_matrixPanel, event_id, + KiBitmap( bitmap_butt ), wxPoint( x, y ) ); + btn->SetSize( btn->GetSize().x + 4, btn->GetSize().y ); + m_buttonList[ii][jj] = btn; + setDRCMatrixButtonState( m_buttonList[ii][jj], diag ); + } + } +#endif + m_initialized = true; } -void PANEL_SETUP_PINMAP::setDRCMatrixButtonState( BITMAP_BUTTON *aButton, PIN_ERROR aState ) +void PANEL_SETUP_PINMAP::setDRCMatrixButtonState( wxWindow *aButton, PIN_ERROR aState ) { BITMAPS bitmap_butt = BITMAPS::INVALID_BITMAP; wxString tooltip; @@ -194,7 +255,11 @@ void PANEL_SETUP_PINMAP::setDRCMatrixButtonState( BITMAP_BUTTON *aButton, PIN_ER if( !!bitmap_butt ) { - aButton->SetBitmap( KiBitmap( bitmap_butt ) ); + if( wxBitmapButton* wxBtn = dynamic_cast( aButton ) ) + wxBtn->SetBitmap( KiBitmap( bitmap_butt ) ); + else if( BITMAP_BUTTON* kiBtn = dynamic_cast( aButton ) ) + kiBtn->SetBitmap( KiBitmap( bitmap_butt ) ); + aButton->SetToolTip( tooltip ); } } diff --git a/eeschema/dialogs/panel_setup_pinmap.h b/eeschema/dialogs/panel_setup_pinmap.h index af5a627654..160c8a37c7 100644 --- a/eeschema/dialogs/panel_setup_pinmap.h +++ b/eeschema/dialogs/panel_setup_pinmap.h @@ -48,14 +48,14 @@ public: private: void changeErrorLevel( wxCommandEvent& event ); void reBuildMatrixPanel(); - void setDRCMatrixButtonState( BITMAP_BUTTON *aButton, PIN_ERROR aState ); + void setDRCMatrixButtonState( wxWindow *aButton, PIN_ERROR aState ); DECLARE_EVENT_TABLE() - SCH_EDIT_FRAME* m_parent; - SCHEMATIC* m_schematic; - BITMAP_BUTTON* m_buttonList[ELECTRICAL_PINTYPES_TOTAL][ELECTRICAL_PINTYPES_TOTAL]; - bool m_initialized; + SCH_EDIT_FRAME* m_parent; + SCHEMATIC* m_schematic; + wxWindow* m_buttonList[ELECTRICAL_PINTYPES_TOTAL][ELECTRICAL_PINTYPES_TOTAL]; + bool m_initialized; };