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
@@ -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(); }