From 08295c795bba09e268c3f2ee56dda40b757ba700 Mon Sep 17 00:00:00 2001 From: Felix Schneider Date: Sun, 8 Jan 2023 13:13:06 +0100 Subject: [PATCH] Add vertical justification buttons to pcbnew text dialog kicad 6 default behaviour was not achievable through the UI. Addresses #13423 and #2375 --- pcbnew/dialogs/dialog_text_properties.cpp | 37 ++- pcbnew/dialogs/dialog_text_properties.h | 1 + .../dialogs/dialog_text_properties_base.cpp | 24 +- .../dialogs/dialog_text_properties_base.fbp | 305 +++++++++++++----- pcbnew/dialogs/dialog_text_properties_base.h | 7 +- 5 files changed, 283 insertions(+), 91 deletions(-) diff --git a/pcbnew/dialogs/dialog_text_properties.cpp b/pcbnew/dialogs/dialog_text_properties.cpp index 24fc2a16cc..697632836e 100644 --- a/pcbnew/dialogs/dialog_text_properties.cpp +++ b/pcbnew/dialogs/dialog_text_properties.cpp @@ -117,8 +117,6 @@ DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES( PCB_BASE_EDIT_FRAME* aParent, BO m_statusLine->Show( false ); } - m_separator0->SetIsSeparator(); - m_bold->SetIsCheckButton(); m_bold->SetBitmap( KiBitmap( BITMAPS::text_bold ) ); m_italic->SetIsCheckButton(); @@ -135,11 +133,18 @@ DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES( PCB_BASE_EDIT_FRAME* aParent, BO m_separator2->SetIsSeparator(); - m_mirrored->SetIsCheckButton(); - m_mirrored->SetBitmap( KiBitmap( BITMAPS::text_mirrored ) ); + m_valignBottom->SetIsRadioButton(); + m_valignBottom->SetBitmap( KiBitmap( BITMAPS::text_valign_bottom ) ); + m_valignCenter->SetIsRadioButton(); + m_valignCenter->SetBitmap( KiBitmap( BITMAPS::text_valign_center ) ); + m_valignTop->SetIsRadioButton(); + m_valignTop->SetBitmap( KiBitmap( BITMAPS::text_valign_top ) ); m_separator3->SetIsSeparator(); + m_mirrored->SetIsCheckButton(); + m_mirrored->SetBitmap( KiBitmap( BITMAPS::text_mirrored ) ); + SetTitle( title ); m_hash_key = title; @@ -285,6 +290,13 @@ bool DIALOG_TEXT_PROPERTIES::TransferDataToWindow() case GR_TEXT_H_ALIGN_RIGHT: m_alignRight->Check( true ); break; } + switch ( m_edaText->GetVertJustify() ) + { + case GR_TEXT_V_ALIGN_BOTTOM: m_valignBottom->Check( true ); break; + case GR_TEXT_V_ALIGN_CENTER: m_valignCenter->Check( true ); break; + case GR_TEXT_V_ALIGN_TOP: m_valignTop->Check( true ); break; + } + m_mirrored->Check( m_edaText->IsMirrored() ); EDA_ANGLE orientation = m_edaText->GetTextAngle(); @@ -336,6 +348,16 @@ void DIALOG_TEXT_PROPERTIES::onAlignButton( wxCommandEvent& aEvent ) } +void DIALOG_TEXT_PROPERTIES::onValignButton( wxCommandEvent& aEvent ) +{ + for( BITMAP_BUTTON* btn : { m_valignBottom, m_valignCenter, m_valignTop } ) + { + if( btn->IsChecked() && btn != aEvent.GetEventObject() ) + btn->Check( false ); + } +} + + void DIALOG_TEXT_PROPERTIES::onThickness( wxCommandEvent& event ) { int textSize = std::min( m_textWidth.GetValue(), m_textHeight.GetValue() ); @@ -440,6 +462,13 @@ bool DIALOG_TEXT_PROPERTIES::TransferDataFromWindow() else m_edaText->SetHorizJustify( GR_TEXT_H_ALIGN_RIGHT ); + if( m_valignBottom->IsChecked() ) + m_edaText->SetVertJustify ( GR_TEXT_V_ALIGN_BOTTOM ); + else if( m_valignCenter->IsChecked() ) + m_edaText->SetVertJustify( GR_TEXT_V_ALIGN_CENTER ); + else + m_edaText->SetVertJustify( GR_TEXT_V_ALIGN_TOP ); + m_edaText->SetMirrored( m_mirrored->IsChecked() ); if( pushCommit ) diff --git a/pcbnew/dialogs/dialog_text_properties.h b/pcbnew/dialogs/dialog_text_properties.h index 83cdb874a3..ea042335a9 100644 --- a/pcbnew/dialogs/dialog_text_properties.h +++ b/pcbnew/dialogs/dialog_text_properties.h @@ -55,6 +55,7 @@ private: void onFontSelected( wxCommandEvent &aEvent ) override; void onBoldToggle( wxCommandEvent &aEvent ) override; void onAlignButton( wxCommandEvent &aEvent ) override; + void onValignButton( wxCommandEvent &aEvent ) override; void onThickness( wxCommandEvent &aEvent ) override; bool TransferDataToWindow() override; diff --git a/pcbnew/dialogs/dialog_text_properties_base.cpp b/pcbnew/dialogs/dialog_text_properties_base.cpp index 6e832b6b81..d82681f18f 100644 --- a/pcbnew/dialogs/dialog_text_properties_base.cpp +++ b/pcbnew/dialogs/dialog_text_properties_base.cpp @@ -122,11 +122,6 @@ DIALOG_TEXT_PROPERTIES_BASE::DIALOG_TEXT_PROPERTIES_BASE( wxWindow* parent, wxWi wxBoxSizer* bSizerButtonBar; bSizerButtonBar = new wxBoxSizer( wxHORIZONTAL ); - m_separator0 = new BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 21,21 ), wxBU_AUTODRAW|wxBORDER_NONE ); - m_separator0->Enable( false ); - - bSizerButtonBar->Add( m_separator0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_bold = new BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 21,21 ), wxBU_AUTODRAW|wxBORDER_NONE ); bSizerButtonBar->Add( m_bold, 0, wxALIGN_CENTER_VERTICAL, 5 ); @@ -152,14 +147,23 @@ DIALOG_TEXT_PROPERTIES_BASE::DIALOG_TEXT_PROPERTIES_BASE( wxWindow* parent, wxWi bSizerButtonBar->Add( m_separator2, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_mirrored = new BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 21,21 ), wxBU_AUTODRAW|wxBORDER_NONE ); - bSizerButtonBar->Add( m_mirrored, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_valignTop = new BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 21,21 ), wxBU_AUTODRAW|wxBORDER_NONE ); + bSizerButtonBar->Add( m_valignTop, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_valignCenter = new BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 21,21 ), wxBU_AUTODRAW|wxBORDER_NONE ); + bSizerButtonBar->Add( m_valignCenter, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_valignBottom = new BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 21,21 ), wxBU_AUTODRAW|wxBORDER_NONE ); + bSizerButtonBar->Add( m_valignBottom, 0, wxALIGN_CENTER_VERTICAL, 5 ); m_separator3 = new BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 21,21 ), wxBU_AUTODRAW|wxBORDER_NONE ); m_separator3->Enable( false ); bSizerButtonBar->Add( m_separator3, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_mirrored = new BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 21,21 ), wxBU_AUTODRAW|wxBORDER_NONE ); + bSizerButtonBar->Add( m_mirrored, 0, wxALIGN_CENTER_VERTICAL, 5 ); + gbSizer1->Add( bSizerButtonBar, wxGBPosition( 2, 4 ), wxGBSpan( 1, 3 ), wxEXPAND|wxTOP|wxBOTTOM, 3 ); @@ -283,6 +287,9 @@ DIALOG_TEXT_PROPERTIES_BASE::DIALOG_TEXT_PROPERTIES_BASE( wxWindow* parent, wxWi m_alignLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onAlignButton ), NULL, this ); m_alignCenter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onAlignButton ), NULL, this ); m_alignRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onAlignButton ), NULL, this ); + m_valignTop->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onValignButton ), NULL, this ); + m_valignCenter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onValignButton ), NULL, this ); + m_valignBottom->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onValignButton ), NULL, this ); m_SizeXCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::OnOkClick ), NULL, this ); m_SizeYCtrl->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::OnOkClick ), NULL, this ); m_ThicknessCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onThickness ), NULL, this ); @@ -304,6 +311,9 @@ DIALOG_TEXT_PROPERTIES_BASE::~DIALOG_TEXT_PROPERTIES_BASE() m_alignLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onAlignButton ), NULL, this ); m_alignCenter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onAlignButton ), NULL, this ); m_alignRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onAlignButton ), NULL, this ); + m_valignTop->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onValignButton ), NULL, this ); + m_valignCenter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onValignButton ), NULL, this ); + m_valignBottom->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onValignButton ), NULL, this ); m_SizeXCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::OnOkClick ), NULL, this ); m_SizeYCtrl->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::OnOkClick ), NULL, this ); m_ThicknessCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_TEXT_PROPERTIES_BASE::onThickness ), NULL, this ); diff --git a/pcbnew/dialogs/dialog_text_properties_base.fbp b/pcbnew/dialogs/dialog_text_properties_base.fbp index 98ed65b43e..e69616dfd3 100644 --- a/pcbnew/dialogs/dialog_text_properties_base.fbp +++ b/pcbnew/dialogs/dialog_text_properties_base.fbp @@ -907,79 +907,6 @@ bSizerButtonBar wxHORIZONTAL none - - 5 - wxALIGN_CENTER_VERTICAL - 0 - - 1 - 1 - 1 - 1 - - - - - 0 - - - - - 1 - 0 - 1 - - 1 - - 0 - 0 - - Dock - 0 - Left - 0 - - 1 - - - 0 - 0 - wxID_ANY - - - 0 - - 0 - - - 0 - - 1 - m_separator0 - 1 - - - protected - 1 - - - - Resizable - 1 - 21,21 - wxBORDER_NONE - BITMAP_BUTTON; widgets/bitmap_button.h; forward_declare - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - 5 wxALIGN_CENTER_VERTICAL @@ -1533,7 +1460,7 @@ 0 0 wxID_ANY - Mirrored + Left 0 @@ -1543,7 +1470,229 @@ 0 1 - m_mirrored + m_valignTop + 1 + + + protected + 1 + + + + Resizable + 1 + 21,21 + wxBORDER_NONE + BITMAP_BUTTON; widgets/bitmap_button.h; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + onValignButton + + + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 0 + + + + + 1 + 0 + 1 + + 1 + + 0 + 0 + + Dock + 0 + Left + 1 + + 1 + + + 0 + 0 + wxID_ANY + Center + + 0 + + 0 + + + 0 + + 1 + m_valignCenter + 1 + + + protected + 1 + + + + Resizable + 1 + 21,21 + wxBORDER_NONE + BITMAP_BUTTON; widgets/bitmap_button.h; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + onValignButton + + + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 0 + + + + + 1 + 0 + 1 + + 1 + + 0 + 0 + + Dock + 0 + Left + 1 + + 1 + + + 0 + 0 + wxID_ANY + Top + + 0 + + 0 + + + 0 + + 1 + m_valignBottom + 1 + + + protected + 1 + + + + Resizable + 1 + 21,21 + wxBORDER_NONE + BITMAP_BUTTON; widgets/bitmap_button.h; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + onValignButton + + + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 0 + + + + + 1 + 0 + 1 + + 1 + + 0 + 0 + + Dock + 0 + Left + 0 + + 1 + + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + + 0 + + 1 + m_separator3 1 @@ -1598,7 +1747,7 @@ Dock 0 Left - 0 + 1 1 @@ -1606,7 +1755,7 @@ 0 0 wxID_ANY - + Mirrored 0 @@ -1616,7 +1765,7 @@ 0 1 - m_separator3 + m_mirrored 1 diff --git a/pcbnew/dialogs/dialog_text_properties_base.h b/pcbnew/dialogs/dialog_text_properties_base.h index 6dea529e53..fba7a6f5f3 100644 --- a/pcbnew/dialogs/dialog_text_properties_base.h +++ b/pcbnew/dialogs/dialog_text_properties_base.h @@ -60,7 +60,6 @@ class DIALOG_TEXT_PROPERTIES_BASE : public DIALOG_SHIM wxCheckBox* m_KeepUpright; wxStaticText* m_fontLabel; FONT_CHOICE* m_fontCtrl; - BITMAP_BUTTON* m_separator0; BITMAP_BUTTON* m_bold; BITMAP_BUTTON* m_italic; BITMAP_BUTTON* m_separator1; @@ -68,8 +67,11 @@ class DIALOG_TEXT_PROPERTIES_BASE : public DIALOG_SHIM BITMAP_BUTTON* m_alignCenter; BITMAP_BUTTON* m_alignRight; BITMAP_BUTTON* m_separator2; - BITMAP_BUTTON* m_mirrored; + BITMAP_BUTTON* m_valignTop; + BITMAP_BUTTON* m_valignCenter; + BITMAP_BUTTON* m_valignBottom; BITMAP_BUTTON* m_separator3; + BITMAP_BUTTON* m_mirrored; wxStaticText* m_SizeXLabel; wxTextCtrl* m_SizeXCtrl; wxStaticText* m_SizeXUnits; @@ -100,6 +102,7 @@ class DIALOG_TEXT_PROPERTIES_BASE : public DIALOG_SHIM virtual void onFontSelected( wxCommandEvent& event ) { event.Skip(); } virtual void onBoldToggle( wxCommandEvent& event ) { event.Skip(); } virtual void onAlignButton( wxCommandEvent& event ) { event.Skip(); } + virtual void onValignButton( wxCommandEvent& event ) { event.Skip(); } virtual void onThickness( wxCommandEvent& event ) { event.Skip(); }