diff --git a/common/eda_text.cpp b/common/eda_text.cpp index 0d0f818189..3d011621c9 100644 --- a/common/eda_text.cpp +++ b/common/eda_text.cpp @@ -54,38 +54,6 @@ class OUTPUTFORMATTER; class wxFindReplaceData; -// Sadly we store the orientation of hierarchical and global labels using a different -// int encoding than that for local labels: -// Global Local -// Left justified 0 2 -// Up 1 3 -// Right justified 2 0 -// Down 3 1 -int EDA_TEXT::MapOrientation( KICAD_T labelType, int aOrientation ) -{ - if( labelType == SCH_LABEL_T ) - return aOrientation; - - switch( aOrientation ) - { - case 0: return 2; - case 2: return 0; - default: return aOrientation; - } -} - - -int EDA_TEXT::MapOrientation( KICAD_T fromLabelType, KICAD_T toLabelType, int aOrientation ) -{ - bool fromNormal = ( ( fromLabelType == SCH_TEXT_T ) || ( fromLabelType == SCH_LABEL_T ) ); - bool toNormal = ( ( toLabelType == SCH_TEXT_T ) || ( toLabelType == SCH_LABEL_T ) ); - - if( fromNormal != toNormal ) - return MapOrientation( SCH_GLOBAL_LABEL_T, aOrientation ); - else - return aOrientation; -} - EDA_TEXT_HJUSTIFY_T EDA_TEXT::MapHorizJustify( int aHorizJustify ) { diff --git a/eeschema/connection_graph.cpp b/eeschema/connection_graph.cpp index e4b2582b03..dbfe9bcc2b 100644 --- a/eeschema/connection_graph.cpp +++ b/eeschema/connection_graph.cpp @@ -98,7 +98,7 @@ bool CONNECTION_SUBGRAPH::ResolveDrivers( bool aCreateMarkers ) { auto p = static_cast( c ); - if( p->GetShape() == NET_OUTPUT ) + if( p->GetShape() == PINSHEETLABEL_SHAPE::OUTPUT ) { m_driver = c; break; diff --git a/eeschema/dialogs/dialog_edit_label.cpp b/eeschema/dialogs/dialog_edit_label.cpp index 3891fe1d6c..fc9e9cb89e 100644 --- a/eeschema/dialogs/dialog_edit_label.cpp +++ b/eeschema/dialogs/dialog_edit_label.cpp @@ -212,10 +212,9 @@ bool DIALOG_LABEL_EDITOR::TransferDataToWindow() } // Set text options: - int orient = m_CurrentText->GetLabelSpinStyle(); - m_TextOrient->SetSelection( EDA_TEXT::MapOrientation( m_CurrentText->Type(), orient ) ); + m_TextOrient->SetSelection( static_cast( m_CurrentText->GetLabelSpinStyle() ) ); - m_TextShape->SetSelection( m_CurrentText->GetShape() ); + m_TextShape->SetSelection( static_cast( m_CurrentText->GetShape() ) ); int style = 0; @@ -320,8 +319,7 @@ bool DIALOG_LABEL_EDITOR::TransferDataFromWindow() return false; } - int orient = m_TextOrient->GetSelection(); - m_CurrentText->SetLabelSpinStyle( EDA_TEXT::MapOrientation( m_CurrentText->Type(), orient ) ); + m_CurrentText->SetLabelSpinStyle( m_TextOrient->GetSelection() ); m_CurrentText->SetTextSize( wxSize( m_textSize.GetValue(), m_textSize.GetValue() ) ); diff --git a/eeschema/dialogs/dialog_edit_label_base.cpp b/eeschema/dialogs/dialog_edit_label_base.cpp index a40b592111..050b78a704 100644 --- a/eeschema/dialogs/dialog_edit_label_base.cpp +++ b/eeschema/dialogs/dialog_edit_label_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Dec 30 2017) +// C++ code generated with wxFormBuilder (version Oct 26 2018) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -12,31 +12,31 @@ DIALOG_LABEL_EDITOR_BASE::DIALOG_LABEL_EDITOR_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - + wxBoxSizer* bMainSizer; bMainSizer = new wxBoxSizer( wxVERTICAL ); - + m_textEntrySizer = new wxFlexGridSizer( 4, 2, 3, 3 ); m_textEntrySizer->AddGrowableCol( 1 ); m_textEntrySizer->AddGrowableRow( 1 ); m_textEntrySizer->SetFlexibleDirection( wxBOTH ); m_textEntrySizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - + m_labelSingleLine = new wxStaticText( this, wxID_ANY, _("Label:"), wxDefaultPosition, wxDefaultSize, 0 ); m_labelSingleLine->Wrap( -1 ); m_labelSingleLine->SetToolTip( _("Enter the text to be used within the schematic") ); - + m_textEntrySizer->Add( m_labelSingleLine, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 3 ); - + m_valueSingleLine = new wxTextCtrl( this, wxID_VALUESINGLE, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER|wxTE_RICH ); m_valueSingleLine->SetMinSize( wxSize( 360,-1 ) ); - + m_textEntrySizer->Add( m_valueSingleLine, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 3 ); - + m_labelMultiLine = new wxStaticText( this, wxID_ANY, _("Text:"), wxDefaultPosition, wxDefaultSize, 0 ); m_labelMultiLine->Wrap( -1 ); m_textEntrySizer->Add( m_labelMultiLine, 0, wxRIGHT, 5 ); - + m_valueMultiLine = new wxStyledTextCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, wxEmptyString ); m_valueMultiLine->SetUseTabs( true ); m_valueMultiLine->SetTabWidth( 4 ); @@ -67,76 +67,76 @@ DIALOG_LABEL_EDITOR_BASE::DIALOG_LABEL_EDITOR_BASE( wxWindow* parent, wxWindowID m_valueMultiLine->SetSelBackground( true, wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHT ) ); m_valueMultiLine->SetSelForeground( true, wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHTTEXT ) ); m_valueMultiLine->SetMinSize( wxSize( 480,100 ) ); - + m_textEntrySizer->Add( m_valueMultiLine, 1, wxEXPAND | wxALL, 5 ); - + m_labelCombo = new wxStaticText( this, wxID_ANY, _("Label:"), wxDefaultPosition, wxDefaultSize, 0 ); m_labelCombo->Wrap( -1 ); m_textEntrySizer->Add( m_labelCombo, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_valueCombo = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxTE_PROCESS_ENTER ); + + m_valueCombo = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxTE_PROCESS_ENTER ); m_valueCombo->SetMinSize( wxSize( 360,-1 ) ); - + m_textEntrySizer->Add( m_valueCombo, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - + m_textSizeLabel = new wxStaticText( this, wxID_ANY, _("Text Size:"), wxDefaultPosition, wxDefaultSize, 0 ); m_textSizeLabel->Wrap( -1 ); m_textEntrySizer->Add( m_textSizeLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 ); - + wxBoxSizer* bSizeCtrlSizer; bSizeCtrlSizer = new wxBoxSizer( wxHORIZONTAL ); - + m_textSizeCtrl = new wxTextCtrl( this, wxID_SIZE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); bSizeCtrlSizer->Add( m_textSizeCtrl, 0, wxEXPAND|wxLEFT|wxRIGHT, 3 ); - + m_textSizeUnits = new wxStaticText( this, wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 ); m_textSizeUnits->Wrap( -1 ); bSizeCtrlSizer->Add( m_textSizeUnits, 0, wxALIGN_CENTER_VERTICAL, 2 ); - - + + m_textEntrySizer->Add( bSizeCtrlSizer, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 3 ); - - + + bMainSizer->Add( m_textEntrySizer, 1, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 12 ); - + wxBoxSizer* m_OptionsSizer; m_OptionsSizer = new wxBoxSizer( wxHORIZONTAL ); - - wxString m_TextOrientChoices[] = { _("Right"), _("Up"), _("Left"), _("Down") }; + + wxString m_TextOrientChoices[] = { _("Left"), _("Up"), _("Right"), _("Down") }; int m_TextOrientNChoices = sizeof( m_TextOrientChoices ) / sizeof( wxString ); m_TextOrient = new wxRadioBox( this, wxID_ANY, _("Orientation"), wxDefaultPosition, wxDefaultSize, m_TextOrientNChoices, m_TextOrientChoices, 1, wxRA_SPECIFY_COLS ); m_TextOrient->SetSelection( 0 ); m_OptionsSizer->Add( m_TextOrient, 1, wxRIGHT|wxTOP|wxEXPAND, 3 ); - + wxString m_TextStyleChoices[] = { _("Normal"), _("Italic"), _("Bold"), _("Bold and italic") }; int m_TextStyleNChoices = sizeof( m_TextStyleChoices ) / sizeof( wxString ); m_TextStyle = new wxRadioBox( this, wxID_ANY, _("Style"), wxDefaultPosition, wxDefaultSize, m_TextStyleNChoices, m_TextStyleChoices, 1, wxRA_SPECIFY_COLS ); m_TextStyle->SetSelection( 3 ); m_OptionsSizer->Add( m_TextStyle, 1, wxLEFT|wxRIGHT|wxTOP|wxEXPAND, 3 ); - + wxString m_TextShapeChoices[] = { _("Input"), _("Output"), _("Bidirectional"), _("Tri-state"), _("Passive") }; int m_TextShapeNChoices = sizeof( m_TextShapeChoices ) / sizeof( wxString ); m_TextShape = new wxRadioBox( this, wxID_ANY, _("Shape"), wxDefaultPosition, wxDefaultSize, m_TextShapeNChoices, m_TextShapeChoices, 1, wxRA_SPECIFY_COLS ); m_TextShape->SetSelection( 3 ); m_OptionsSizer->Add( m_TextShape, 1, wxEXPAND|wxTOP|wxLEFT, 3 ); - - + + bMainSizer->Add( m_OptionsSizer, 0, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 10 ); - + m_sdbSizer1 = new wxStdDialogButtonSizer(); m_sdbSizer1OK = new wxButton( this, wxID_OK ); m_sdbSizer1->AddButton( m_sdbSizer1OK ); m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL ); m_sdbSizer1->AddButton( m_sdbSizer1Cancel ); m_sdbSizer1->Realize(); - + bMainSizer->Add( m_sdbSizer1, 0, wxALL|wxEXPAND, 5 ); - - + + this->SetSizer( bMainSizer ); this->Layout(); bMainSizer->Fit( this ); - + // Connect Events m_valueSingleLine->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnEnterKey ), NULL, this ); m_valueCombo->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnEnterKey ), NULL, this ); @@ -147,5 +147,5 @@ DIALOG_LABEL_EDITOR_BASE::~DIALOG_LABEL_EDITOR_BASE() // Disconnect Events m_valueSingleLine->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnEnterKey ), NULL, this ); m_valueCombo->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnEnterKey ), NULL, this ); - + } diff --git a/eeschema/dialogs/dialog_edit_label_base.fbp b/eeschema/dialogs/dialog_edit_label_base.fbp index 13e1e72910..f77f7cc5f9 100644 --- a/eeschema/dialogs/dialog_edit_label_base.fbp +++ b/eeschema/dialogs/dialog_edit_label_base.fbp @@ -2,7 +2,7 @@ - + C++ 1 source_name @@ -14,11 +14,12 @@ dialog_edit_label_base 1000 none + 1 dialog_edit_label_base - + . - + 1 1 1 @@ -29,67 +30,31 @@ 0 wxAUI_MGR_DEFAULT - - - + + + 1 1 impl_virtual - - - + + + 0 wxID_ANY - - + + DIALOG_LABEL_EDITOR_BASE - + -1,-1 wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER DIALOG_SHIM; dialog_shim.h Text Editor - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + bMainSizer wxVERTICAL none @@ -103,7 +68,7 @@ 1 1 3 - + m_textEntrySizer wxFLEX_GROWMODE_SPECIFIED protected @@ -118,78 +83,56 @@ 1 1 1 - - - - - - - + + + + + + + 1 0 1 - + 1 0 Dock 0 Left 1 - + 1 - + 0 0 wxID_ANY Label: - + 0 + 0 - - + + 0 - + 1 m_labelSingleLine 1 - - + + protected 1 - + Resizable 1 - - - + + + 0 Enter the text to be used within the schematic - - - + + + -1 - - - - - - - - - - - - - - - - - - - - - - - @@ -201,86 +144,60 @@ 1 1 1 - - - - - - - + + + + + + + 1 0 1 - + 1 0 Dock 0 Left 1 - + 1 - + 0 0 wxID_VALUESINGLE - + 0 - - - + + + 0 360,-1 1 m_valueSingleLine 1 - - + + protected 1 - + Resizable 1 - + wxTE_PROCESS_ENTER|wxTE_RICH - + 0 - - + + wxFILTER_NONE wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + OnEnterKey - - - @@ -292,78 +209,56 @@ 1 1 1 - - - - - - - + + + + + + + 1 0 1 - + 1 0 Dock 0 Left 1 - + 1 - + 0 0 wxID_ANY Text: - + 0 + 0 - - + + 0 - + 1 m_labelMultiLine 1 - - + + protected 1 - + Resizable 1 - - + + ; forward_declare 0 - - - - + + + + -1 - - - - - - - - - - - - - - - - - - - - - - - @@ -375,84 +270,61 @@ 1 1 1 - - - - + + + + 0 - - - + + + 1 0 1 - + 1 0 Dock 0 Left 1 - + 1 0 - + 0 0 wxID_ANY 0 0 - + 0 - - + + 0 480,100 1 m_valueMultiLine 1 - - + + protected 1 - + Resizable 1 - + ; forward_declare 0 4 0 - + 1 0 0 - - - - - - - - - - - - - - - - - - - - - - - - - - + + + @@ -464,78 +336,56 @@ 1 1 1 - - - - - - - + + + + + + + 1 0 1 - + 1 0 Dock 0 Left 1 - + 1 - + 0 0 wxID_ANY Label: - + 0 + 0 - - + + 0 - + 1 m_labelCombo 1 - - + + protected 1 - + Resizable 1 - - + + ; forward_declare 0 - - - - + + + + -1 - - - - - - - - - - - - - - - - - - - - - - - @@ -547,88 +397,61 @@ 1 1 1 - - - - - - - + + + + + + + 1 0 - + 1 - + 1 0 Dock 0 Left 1 - + 1 - + 0 0 wxID_ANY - + 0 - - + + 0 360,-1 1 m_valueCombo 1 - - + + protected 1 - + Resizable -1 1 - + wxTE_PROCESS_ENTER ; forward_declare 0 - - + + wxFILTER_NONE wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + OnEnterKey - @@ -640,78 +463,56 @@ 1 1 1 - - - - - - - + + + + + + + 1 0 1 - + 1 0 Dock 0 Left 1 - + 1 - + 0 0 wxID_ANY Text Size: - + 0 + 0 - - + + 0 - + 1 m_textSizeLabel 1 - - + + protected 1 - + Resizable 1 - - - + + + 0 - - - - + + + + -1 - - - - - - - - - - - - - - - - - - - - - - - @@ -719,7 +520,7 @@ wxEXPAND|wxALIGN_CENTER_VERTICAL 1 - + bSizeCtrlSizer wxHORIZONTAL none @@ -732,86 +533,59 @@ 1 1 1 - - - - - - - + + + + + + + 1 0 1 - + 1 0 Dock 0 Left 1 - + 1 - + 0 0 wxID_SIZE - + 0 - - - + + + 0 - + 1 m_textSizeCtrl 1 - - + + protected 1 - + Resizable 1 - - - + + + 0 - - + + wxFILTER_NONE wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + @@ -823,78 +597,56 @@ 1 1 1 - - - - - - - + + + + + + + 1 0 1 - + 1 0 Dock 0 Left 1 - + 1 - + 0 0 wxID_ANY units - + 0 + 0 - - + + 0 - + 1 m_textSizeUnits 1 - - + + protected 1 - + Resizable 1 - - - + + + 0 - - - - + + + + -1 - - - - - - - - - - - - - - - - - - - - - - - @@ -906,7 +658,7 @@ wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 - + m_OptionsSizer wxHORIZONTAL none @@ -919,85 +671,61 @@ 1 1 1 - - - - - - - + + + + + + + 1 0 - "Right" "Up" "Left" "Down" + "Left" "Up" "Right" "Down" 1 - + 1 0 Dock 0 Left 1 - + 1 - + 0 0 wxID_ANY Orientation 1 - + 0 - - + + 0 - + 1 m_TextOrient 1 - - + + protected 1 - + Resizable 0 1 - + wxRA_SPECIFY_COLS - + 0 - - + + wxFILTER_NONE wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -1009,85 +737,61 @@ 1 1 1 - - - - - - - + + + + + + + 1 0 "Normal" "Italic" "Bold" "Bold and italic" 1 - + 1 0 Dock 0 Left 1 - + 1 - + 0 0 wxID_ANY Style 1 - + 0 - - + + 0 - + 1 m_TextStyle 1 - - + + protected 1 - + Resizable 3 1 - + wxRA_SPECIFY_COLS - + 0 - - + + wxFILTER_NONE wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -1099,85 +803,61 @@ 1 1 1 - - - - - - - + + + + + + + 1 0 "Input" "Output" "Bidirectional" "Tri-state" "Passive" 1 - + 1 0 Dock 0 Left 1 - + 1 - + 0 0 wxID_ANY Shape 1 - + 0 - - + + 0 - + 1 m_TextShape 1 - - + + protected 1 - + Resizable 3 1 - + wxRA_SPECIFY_COLS - + 0 - - + + wxFILTER_NONE wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -1195,17 +875,9 @@ 1 0 0 - + m_sdbSizer1 protected - - - - - - - - diff --git a/eeschema/dialogs/dialog_edit_label_base.h b/eeschema/dialogs/dialog_edit_label_base.h index 49a3929842..09871ec3db 100644 --- a/eeschema/dialogs/dialog_edit_label_base.h +++ b/eeschema/dialogs/dialog_edit_label_base.h @@ -1,12 +1,11 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Dec 30 2017) +// C++ code generated with wxFormBuilder (version Oct 26 2018) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// -#ifndef __DIALOG_EDIT_LABEL_BASE_H__ -#define __DIALOG_EDIT_LABEL_BASE_H__ +#pragma once #include #include @@ -34,14 +33,14 @@ class DIALOG_LABEL_EDITOR_BASE : public DIALOG_SHIM { private: - + protected: enum { wxID_VALUESINGLE = 1000, wxID_SIZE }; - + wxFlexGridSizer* m_textEntrySizer; wxStaticText* m_labelSingleLine; wxTextCtrl* m_valueSingleLine; @@ -58,16 +57,15 @@ class DIALOG_LABEL_EDITOR_BASE : public DIALOG_SHIM wxStdDialogButtonSizer* m_sdbSizer1; wxButton* m_sdbSizer1OK; wxButton* m_sdbSizer1Cancel; - + // Virtual event handlers, overide them in your derived class virtual void OnEnterKey( wxCommandEvent& event ) { event.Skip(); } - - + + public: - - DIALOG_LABEL_EDITOR_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Text Editor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + + DIALOG_LABEL_EDITOR_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Text Editor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); ~DIALOG_LABEL_EDITOR_BASE(); - + }; -#endif //__DIALOG_EDIT_LABEL_BASE_H__ diff --git a/eeschema/dialogs/dialog_edit_sheet_pin.cpp b/eeschema/dialogs/dialog_edit_sheet_pin.cpp index d52c827c15..fd5d2e6905 100644 --- a/eeschema/dialogs/dialog_edit_sheet_pin.cpp +++ b/eeschema/dialogs/dialog_edit_sheet_pin.cpp @@ -81,7 +81,7 @@ bool DIALOG_EDIT_SHEET_PIN::TransferDataToWindow() m_textName->SelectAll(); m_textWidth.SetValue( m_sheetPin->GetTextWidth() ); m_textHeight.SetValue( m_sheetPin->GetTextHeight() ); - m_choiceConnectionType->SetSelection( m_sheetPin->GetShape() ); + m_choiceConnectionType->SetSelection( static_cast( m_sheetPin->GetShape() ) ); return true; } diff --git a/eeschema/dialogs/dialog_global_edit_text_and_graphics.cpp b/eeschema/dialogs/dialog_global_edit_text_and_graphics.cpp index 5a02e5d6d7..aba7a07cfd 100644 --- a/eeschema/dialogs/dialog_global_edit_text_and_graphics.cpp +++ b/eeschema/dialogs/dialog_global_edit_text_and_graphics.cpp @@ -225,8 +225,7 @@ void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem( const SCH_SHEET_PATH& aS { if( m_orientation->GetStringSelection() != INDETERMINATE ) { - int orient = m_orientation->GetSelection(); - sch_text->SetLabelSpinStyle( EDA_TEXT::MapOrientation( sch_text->Type(), orient ) ); + sch_text->SetLabelSpinStyle( m_orientation->GetSelection() ); } } diff --git a/eeschema/edit_label.cpp b/eeschema/edit_label.cpp index f0de1b9731..5fb3f36fed 100644 --- a/eeschema/edit_label.cpp +++ b/eeschema/edit_label.cpp @@ -39,8 +39,8 @@ #include "invoke_sch_dialog.h" -static PINSHEETLABEL_SHAPE lastGlobalLabelShape = NET_INPUT; -static int lastTextOrientation = 0; +static PINSHEETLABEL_SHAPE lastGlobalLabelShape = PINSHEETLABEL_SHAPE::INPUT; +static LABEL_SPIN_STYLE lastTextOrientation = LABEL_SPIN_STYLE::LEFT; static bool lastTextBold = false; static bool lastTextItalic = false; @@ -197,10 +197,10 @@ void SCH_EDIT_FRAME::ConvertTextType( SCH_TEXT* aText, KICAD_T aNewType ) if( oldType == aNewType ) return; - SCH_TEXT* newtext = nullptr; - const wxPoint& position = aText->GetPosition(); - int orientation = aText->GetLabelSpinStyle(); - wxString txt = UnescapeString( aText->GetText() ); + SCH_TEXT* newtext = nullptr; + const wxPoint& position = aText->GetPosition(); + LABEL_SPIN_STYLE orientation = aText->GetLabelSpinStyle(); + wxString txt = UnescapeString( aText->GetText() ); // There can be characters in a SCH_TEXT object that can break labels so we have to // fix them here. @@ -234,7 +234,7 @@ void SCH_EDIT_FRAME::ConvertTextType( SCH_TEXT* aText, KICAD_T aNewType ) // newtext->SetFlags( aText->GetEditFlags() ); newtext->SetShape( aText->GetShape() ); - newtext->SetLabelSpinStyle( EDA_TEXT::MapOrientation( oldType, aNewType, orientation ) ); + newtext->SetLabelSpinStyle( orientation ); newtext->SetTextSize( aText->GetTextSize() ); newtext->SetThickness( aText->GetThickness() ); newtext->SetItalic( aText->IsItalic() ); diff --git a/eeschema/sch_eagle_plugin.cpp b/eeschema/sch_eagle_plugin.cpp index b26a511050..56d7621ff2 100644 --- a/eeschema/sch_eagle_plugin.cpp +++ b/eeschema/sch_eagle_plugin.cpp @@ -930,7 +930,7 @@ void SCH_EAGLE_PLUGIN::loadSegments( label->SetPosition( firstWire->GetStartPoint() ); label->SetText( escapeName( netName ) ); label->SetTextSize( wxSize( Mils2iu( 10 ), Mils2iu( 10 ) ) ); - label->SetLabelSpinStyle( 0 ); + label->SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT ); screen->Append( label.release() ); } } @@ -996,16 +996,16 @@ SCH_TEXT* SCH_EAGLE_PLUGIN::loadLabel( wxXmlNode* aLabelNode, const wxString& aN label->SetPosition( elabelpos ); label->SetText( escapeName( elabel.netname ) ); label->SetTextSize( wxSize( elabel.size.ToSchUnits(), elabel.size.ToSchUnits() ) ); - label->SetLabelSpinStyle( global ? 2 : 0 ); + label->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT ); if( elabel.rot ) { - int offset = global ? 2 : 0; - label->SetLabelSpinStyle( int( elabel.rot->degrees / 90 + offset ) % 4 ); + label->SetLabelSpinStyle( KiROUND( elabel.rot->degrees / 90 ) % 4 ); - if( elabel.rot->mirror - && ( label->GetLabelSpinStyle() == 0 || label->GetLabelSpinStyle() == 2 ) ) - label->SetLabelSpinStyle( ( label->GetLabelSpinStyle() + 2 ) % 4 ); + if( elabel.rot->mirror ) + { + label->SetLabelSpinStyle( label->GetLabelSpinStyle().MirrorY() ); + } } return label.release(); @@ -2580,7 +2580,7 @@ void SCH_EAGLE_PLUGIN::addImplicitConnections( netLabel->SetPosition( aComponent->GetPinPhysicalPosition( pin ) ); netLabel->SetText( extractNetName( pin->GetName() ) ); netLabel->SetTextSize( wxSize( Mils2iu( 10 ), Mils2iu( 10 ) ) ); - netLabel->SetLabelSpinStyle( 0 ); + netLabel->SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT ); aScreen->Append( netLabel ); } diff --git a/eeschema/sch_legacy_plugin.cpp b/eeschema/sch_legacy_plugin.cpp index e9d6981c8c..a31361f5c5 100644 --- a/eeschema/sch_legacy_plugin.cpp +++ b/eeschema/sch_legacy_plugin.cpp @@ -1033,23 +1033,23 @@ SCH_SHEET* SCH_LEGACY_PLUGIN::loadSheet( LINE_READER& aReader ) switch( parseChar( aReader, line, &line ) ) { case 'I': - sheetPin->SetShape( NET_INPUT ); + sheetPin->SetShape( PINSHEETLABEL_SHAPE::INPUT ); break; case 'O': - sheetPin->SetShape( NET_OUTPUT ); + sheetPin->SetShape( PINSHEETLABEL_SHAPE::OUTPUT ); break; case 'B': - sheetPin->SetShape( NET_BIDI ); + sheetPin->SetShape( PINSHEETLABEL_SHAPE::BIDI ); break; case 'T': - sheetPin->SetShape( NET_TRISTATE ); + sheetPin->SetShape( PINSHEETLABEL_SHAPE::TRISTATE ); break; case 'U': - sheetPin->SetShape( NET_UNSPECIFIED ); + sheetPin->SetShape( PINSHEETLABEL_SHAPE::UNSPECIFIED ); break; default: SCH_PARSE_ERROR( "invalid sheet pin type", aReader, line ); @@ -1361,6 +1361,17 @@ SCH_BUS_ENTRY_BASE* SCH_LEGACY_PLUGIN::loadBusEntry( LINE_READER& aReader ) return busEntry.release(); } +// clang-format off +const std::map sheetLabelNames +{ + { PINSHEETLABEL_SHAPE::INPUT, "Input" }, + { PINSHEETLABEL_SHAPE::OUTPUT, "Output" }, + { PINSHEETLABEL_SHAPE::BIDI, "BiDi" }, + { PINSHEETLABEL_SHAPE::TRISTATE, "3State" }, + { PINSHEETLABEL_SHAPE::UNSPECIFIED, "UnSpc" }, +}; +// clang-format on + SCH_TEXT* SCH_LEGACY_PLUGIN::loadText( LINE_READER& aReader ) { @@ -1393,7 +1404,26 @@ SCH_TEXT* SCH_LEGACY_PLUGIN::loadText( LINE_READER& aReader ) position.x = Mils2Iu( parseInt( aReader, line, &line ) ); position.y = Mils2Iu( parseInt( aReader, line, &line ) ); text->SetPosition( position ); - text->SetLabelSpinStyle( parseInt( aReader, line, &line ) ); + + int spinStyle = parseInt( aReader, line, &line ); + + // Sadly we store the orientation of hierarchical and global labels using a different + // int encoding than that for local labels: + // Global Local + // Left justified 0 2 + // Up 1 3 + // Right justified 2 0 + // Down 3 1 + // So we must flip it as the enum is setup with the "global" numbering + if( text->Type() != SCH_GLOBAL_LABEL_T && text->Type() != SCH_HIER_LABEL_T ) + { + if( spinStyle == 0 ) + spinStyle = 2; + else if( spinStyle == 2 ) + spinStyle = 0; + } + + text->SetLabelSpinStyle( spinStyle ); int size = Mils2Iu( parseInt( aReader, line, &line ) ); @@ -1402,16 +1432,14 @@ SCH_TEXT* SCH_LEGACY_PLUGIN::loadText( LINE_READER& aReader ) // Parse the global and hierarchical label type. if( text->Type() == SCH_HIER_LABEL_T || text->Type() == SCH_GLOBAL_LABEL_T ) { - if( strCompare( SheetLabelType[NET_INPUT], line, &line ) ) - text->SetShape( NET_INPUT ); - else if( strCompare( SheetLabelType[NET_OUTPUT], line, &line ) ) - text->SetShape( NET_OUTPUT ); - else if( strCompare( SheetLabelType[NET_BIDI], line, &line ) ) - text->SetShape( NET_BIDI ); - else if( strCompare( SheetLabelType[NET_TRISTATE], line, &line ) ) - text->SetShape( NET_TRISTATE ); - else if( strCompare( SheetLabelType[NET_UNSPECIFIED], line, &line ) ) - text->SetShape( NET_UNSPECIFIED ); + auto resultIt = std::find_if( sheetLabelNames.begin(), sheetLabelNames.end(), + [ &line ]( const auto& it ) + { + return strCompare( it.second, line, &line ); + } ); + + if( resultIt != sheetLabelNames.end() ) + text->SetShape( resultIt->first ); else SCH_PARSE_ERROR( "invalid label type", aReader, line ); } @@ -2159,12 +2187,22 @@ void SCH_LEGACY_PLUGIN::saveSheet( SCH_SHEET* aSheet ) switch( pin.GetShape() ) { - case NET_INPUT: type = 'I'; break; - case NET_OUTPUT: type = 'O'; break; - case NET_BIDI: type = 'B'; break; - case NET_TRISTATE: type = 'T'; break; + case PINSHEETLABEL_SHAPE::INPUT: + type = 'I'; + break; + case PINSHEETLABEL_SHAPE::OUTPUT: + type = 'O'; + break; + case PINSHEETLABEL_SHAPE::BIDI: + type = 'B'; + break; + case PINSHEETLABEL_SHAPE::TRISTATE: + type = 'T'; + break; default: - case NET_UNSPECIFIED: type = 'U'; break; + case PINSHEETLABEL_SHAPE::UNSPECIFIED: + type = 'U'; + break; } m_out->Print( 0, "F%d %s %c %c %-3d %-3d %-3d\n", pin.GetNumber(), @@ -2293,9 +2331,17 @@ void SCH_LEGACY_PLUGIN::saveText( SCH_TEXT* aText ) textType = "Label"; } + // Local labels must have their spin style inverted for left and right + int spinStyle = static_cast( aText->GetLabelSpinStyle() ); + + if( spinStyle == 0 ) + spinStyle = 2; + else if( spinStyle == 2 ) + spinStyle = 0; + m_out->Print( 0, "Text %s %-4d %-4d %-4d %-4d %s %d\n%s\n", textType, Iu2Mils( aText->GetPosition().x ), Iu2Mils( aText->GetPosition().y ), - aText->GetLabelSpinStyle(), + spinStyle, Iu2Mils( aText->GetTextWidth() ), italics, Iu2Mils( aText->GetThickness() ), TO_UTF8( text ) ); } @@ -2303,11 +2349,14 @@ void SCH_LEGACY_PLUGIN::saveText( SCH_TEXT* aText ) { textType = ( layer == LAYER_GLOBLABEL ) ? "GLabel" : "HLabel"; + auto shapeLabelIt = sheetLabelNames.find( aText->GetShape() ); + wxCHECK_RET( shapeLabelIt != sheetLabelNames.end(), "Shape not found in names list" ); + m_out->Print( 0, "Text %s %-4d %-4d %-4d %-4d %s %s %d\n%s\n", textType, Iu2Mils( aText->GetPosition().x ), Iu2Mils( aText->GetPosition().y ), - aText->GetLabelSpinStyle(), + static_cast( aText->GetLabelSpinStyle() ), Iu2Mils( aText->GetTextWidth() ), - SheetLabelType[aText->GetShape()], + shapeLabelIt->second, italics, Iu2Mils( aText->GetThickness() ), TO_UTF8( text ) ); } diff --git a/eeschema/sch_painter.cpp b/eeschema/sch_painter.cpp index b816c3d368..cf491cb9d7 100644 --- a/eeschema/sch_painter.cpp +++ b/eeschema/sch_painter.cpp @@ -1234,22 +1234,16 @@ void SCH_PAINTER::draw( SCH_TEXT *aText, int aLayer ) switch( aText->GetLabelSpinStyle() ) { - case 0: - if( aText->Type() == SCH_LABEL_T || aText->Type() == SCH_TEXT_T ) - text_offset.x -= getShadowWidth() / 2; - else - text_offset.x += getShadowWidth() / 2; + case LABEL_SPIN_STYLE::LEFT: + text_offset.x += getShadowWidth() / 2; break; - case 1: + case LABEL_SPIN_STYLE::UP: text_offset.y += getShadowWidth() / 2; break; - case 2: - if( aText->Type() == SCH_LABEL_T || aText->Type() == SCH_TEXT_T ) - text_offset.x += getShadowWidth() / 2; - else - text_offset.x -= getShadowWidth() / 2; + case LABEL_SPIN_STYLE::RIGHT: + text_offset.x -= getShadowWidth() / 2; break; - case 3: + case LABEL_SPIN_STYLE::BOTTOM: text_offset.y -= getShadowWidth() / 2; break; } diff --git a/eeschema/sch_sheet_pin.cpp b/eeschema/sch_sheet_pin.cpp index 24351b2257..674c8275cc 100644 --- a/eeschema/sch_sheet_pin.cpp +++ b/eeschema/sch_sheet_pin.cpp @@ -50,7 +50,7 @@ SCH_SHEET_PIN::SCH_SHEET_PIN( SCH_SHEET* parent, const wxPoint& pos, const wxStr else SetEdge( SHEET_LEFT_SIDE ); - m_shape = NET_INPUT; + m_shape = PINSHEETLABEL_SHAPE::INPUT; m_isDangling = true; m_number = 2; } @@ -117,25 +117,25 @@ void SCH_SHEET_PIN::SetEdge( SHEET_SIDE aEdge ) case SHEET_LEFT_SIDE: m_edge = aEdge; SetTextX( Sheet->m_pos.x ); - SetLabelSpinStyle( 2 ); // Orientation horiz inverse + SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT ); // Orientation horiz inverse break; case SHEET_RIGHT_SIDE: m_edge = aEdge; SetTextX( Sheet->m_pos.x + Sheet->m_size.x ); - SetLabelSpinStyle( 0 ); // Orientation horiz normal + SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT ); // Orientation horiz normal break; case SHEET_TOP_SIDE: m_edge = aEdge; SetTextY( Sheet->m_pos.y ); - SetLabelSpinStyle( 3 ); // Orientation vert BOTTOM + SetLabelSpinStyle( LABEL_SPIN_STYLE::BOTTOM ); // Orientation vert BOTTOM break; case SHEET_BOTTOM_SIDE: m_edge = aEdge; SetTextY( Sheet->m_pos.y + Sheet->m_size.y ); - SetLabelSpinStyle( 1 ); // Orientation vert UP + SetLabelSpinStyle( LABEL_SPIN_STYLE::UP ); // Orientation vert UP break; default: @@ -252,9 +252,14 @@ void SCH_SHEET_PIN::CreateGraphicShape( std::vector & aPoints, const wx switch( m_shape ) { - case NET_INPUT: m_shape = NET_OUTPUT; break; - case NET_OUTPUT: m_shape = NET_INPUT; break; - default: break; + case PINSHEETLABEL_SHAPE::INPUT: + m_shape = PINSHEETLABEL_SHAPE::OUTPUT; + break; + case PINSHEETLABEL_SHAPE::OUTPUT: + m_shape = PINSHEETLABEL_SHAPE::INPUT; + break; + default: + break; } SCH_HIERLABEL::CreateGraphicShape( aPoints, aPos ); diff --git a/eeschema/sch_text.cpp b/eeschema/sch_text.cpp index 69f84674ff..ea896fcc1f 100644 --- a/eeschema/sch_text.cpp +++ b/eeschema/sch_text.cpp @@ -56,17 +56,6 @@ extern void IncrementLabelMember( wxString& name, int aIncrement ); // Margin in internal units (mils) between labels and wires #define TXT_MARGIN 4 -// Names of sheet label types. -const char* SheetLabelType[] = -{ - "Input", - "Output", - "BiDi", - "3State", - "UnSpc", - "???" -}; - /* Coding polygons for global symbol graphic shapes. * the first parml is the number of corners * others are the corners coordinates in reduced units @@ -107,17 +96,15 @@ static int* TemplateShape[5][4] = }; -SCH_TEXT::SCH_TEXT( const wxPoint& pos, const wxString& text, KICAD_T aType ) : - SCH_ITEM( NULL, aType ), - EDA_TEXT( text ), - m_shape( NET_INPUT ) +SCH_TEXT::SCH_TEXT( const wxPoint& pos, const wxString& text, KICAD_T aType ) + : SCH_ITEM( NULL, aType ), EDA_TEXT( text ), m_shape( PINSHEETLABEL_SHAPE::INPUT ) { - m_Layer = LAYER_NOTES; - SetTextPos( pos ); - m_isDangling = false; + m_Layer = LAYER_NOTES; + m_isDangling = false; m_connectionType = CONNECTION_NONE; - m_spin_style = 0; + m_spin_style = LABEL_SPIN_STYLE::LEFT; + SetTextPos( pos ); SetMultilineAllowed( true ); } @@ -156,11 +143,15 @@ wxPoint SCH_TEXT::GetSchematicTextOffset() const switch( GetLabelSpinStyle() ) { + case LABEL_SPIN_STYLE::UP: + case LABEL_SPIN_STYLE::BOTTOM: + text_offset.x = -thick_offset; + break; // Vert Orientation default: - case 0: text_offset.y = -thick_offset; break; // Horiz Normal Orientation (left justified) - case 1: text_offset.x = -thick_offset; break; // Vert Orientation UP - case 2: text_offset.y = -thick_offset; break; // Horiz Orientation - Right justified - case 3: text_offset.x = -thick_offset; break; // Vert Orientation BOTTOM + case LABEL_SPIN_STYLE::LEFT: + case LABEL_SPIN_STYLE::RIGHT: + text_offset.y = -thick_offset; + break; // Horiz Orientation } return text_offset; @@ -170,14 +161,7 @@ wxPoint SCH_TEXT::GetSchematicTextOffset() const void SCH_TEXT::MirrorY( int aYaxis_position ) { // Text is NOT really mirrored; it is moved to a suitable horizontal position - switch( GetLabelSpinStyle() ) - { - default: - case 0: SetLabelSpinStyle( 2 ); break; // horizontal text - case 1: break; // Vert Orientation UP - case 2: SetLabelSpinStyle( 0 ); break; // invert horizontal text - case 3: break; // Vert Orientation BOTTOM - } + SetLabelSpinStyle( GetLabelSpinStyle().MirrorY() ); SetTextX( Mirror( GetTextPos().x, aYaxis_position ) ); } @@ -186,14 +170,7 @@ void SCH_TEXT::MirrorY( int aYaxis_position ) void SCH_TEXT::MirrorX( int aXaxis_position ) { // Text is NOT really mirrored; it is moved to a suitable vertical position - switch( GetLabelSpinStyle() ) - { - default: - case 0: break; // horizontal text - case 1: SetLabelSpinStyle( 3 ); break; // Vert Orientation UP - case 2: break; // invert horizontal text - case 3: SetLabelSpinStyle( 1 ); break; // Vert Orientation BOTTOM - } + SetLabelSpinStyle( GetLabelSpinStyle().MirrorX() ); SetTextY( Mirror( GetTextPos().y, aXaxis_position ) ); } @@ -201,30 +178,28 @@ void SCH_TEXT::MirrorX( int aXaxis_position ) void SCH_TEXT::Rotate( wxPoint aPosition ) { - int dy; + int dy = 0; wxPoint pt = GetTextPos(); RotatePoint( &pt, aPosition, 900 ); SetTextPos( pt ); - int spin = GetLabelSpinStyle(); - - // Global and hierarchical labels spin backwards. Fix here because - // changing SetLabelSpinStyle would break existing designs. - if( this->Type() == SCH_GLOBAL_LABEL_T || this->Type() == SCH_HIER_LABEL_T ) - SetLabelSpinStyle( ( spin - 1 >= 0 ? ( spin - 1 ) : 3 ) ); - else - SetLabelSpinStyle( ( spin + 1 ) % 4 ); + SetLabelSpinStyle( GetLabelSpinStyle().RotateCW() ); if( this->Type() == SCH_TEXT_T ) { switch( GetLabelSpinStyle() ) { - case 0: dy = GetTextHeight(); break; // horizontal text - case 1: dy = 0; break; // Vert Orientation UP - case 2: dy = GetTextHeight(); break; // invert horizontal text - case 3: dy = 0; break; // Vert Orientation BOTTOM - default: dy = 0; break; + case LABEL_SPIN_STYLE::LEFT: + case LABEL_SPIN_STYLE::RIGHT: + dy = GetTextHeight(); + break; + case LABEL_SPIN_STYLE::UP: + case LABEL_SPIN_STYLE::BOTTOM: + default: + dy = 0; + dy = 0; + break; } SetTextY( GetTextPos().y + dy ); @@ -232,35 +207,37 @@ void SCH_TEXT::Rotate( wxPoint aPosition ) } -void SCH_TEXT::SetLabelSpinStyle( int aSpinStyle ) +void SCH_TEXT::SetLabelSpinStyle( LABEL_SPIN_STYLE aSpinStyle ) { m_spin_style = aSpinStyle; + // Assume "Right" and Left" mean which side of the anchor the text will be on + // Thus we want to left justify text up agaisnt the anchor if we are on the right switch( aSpinStyle ) { default: wxASSERT_MSG( 1, "Bad spin style" ); - case 0: // Horiz Normal Orientation + case LABEL_SPIN_STYLE::RIGHT: // Horiz Normal Orientation // - m_spin_style = 0; // Handle the error spin style by resetting + m_spin_style = LABEL_SPIN_STYLE::RIGHT; // Handle the error spin style by resetting SetTextAngle( TEXT_ANGLE_HORIZ ); SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM ); break; - case 1: // Vert Orientation UP + case LABEL_SPIN_STYLE::UP: // Vert Orientation UP SetTextAngle( TEXT_ANGLE_VERT ); SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM ); break; - case 2: // Horiz Orientation - Right justified + case LABEL_SPIN_STYLE::LEFT: // Horiz Orientation - Right justified SetTextAngle( TEXT_ANGLE_HORIZ ); SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT ); SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM ); break; - case 3: // Vert Orientation BOTTOM + case LABEL_SPIN_STYLE::BOTTOM: // Vert Orientation BOTTOM SetTextAngle( TEXT_ANGLE_VERT ); SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT ); SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM ); @@ -575,11 +552,21 @@ void SCH_TEXT::GetMsgPanelInfo( EDA_UNITS aUnits, MSG_PANEL_ITEMS& aList ) switch( GetLabelSpinStyle() ) { - case 0: msg = _( "Horizontal" ); break; - case 1: msg = _( "Vertical up" ); break; - case 2: msg = _( "Horizontal invert" ); break; - case 3: msg = _( "Vertical down" ); break; - default: msg = wxT( "???" ); break; + case LABEL_SPIN_STYLE::LEFT: + msg = _( "Horizontal left" ); + break; + case LABEL_SPIN_STYLE::UP: + msg = _( "Vertical up" ); + break; + case LABEL_SPIN_STYLE::RIGHT: + msg = _( "Horizontal right" ); + break; + case LABEL_SPIN_STYLE::BOTTOM: + msg = _( "Vertical down" ); + break; + default: + msg = wxT( "???" ); + break; } aList.push_back( MSG_PANEL_ITEM( _( "Orientation" ), msg, BROWN ) ); @@ -600,12 +587,24 @@ void SCH_TEXT::GetMsgPanelInfo( EDA_UNITS aUnits, MSG_PANEL_ITEMS& aList ) { switch( GetShape() ) { - case NET_INPUT: msg = _( "Input" ); break; - case NET_OUTPUT: msg = _( "Output" ); break; - case NET_BIDI: msg = _( "Bidirectional" ); break; - case NET_TRISTATE: msg = _( "Tri-State" ); break; - case NET_UNSPECIFIED: msg = _( "Passive" ); break; - default: msg = wxT( "???" ); break; + case PINSHEETLABEL_SHAPE::INPUT: + msg = _( "Input" ); + break; + case PINSHEETLABEL_SHAPE::OUTPUT: + msg = _( "Output" ); + break; + case PINSHEETLABEL_SHAPE::BIDI: + msg = _( "Bidirectional" ); + break; + case PINSHEETLABEL_SHAPE::TRISTATE: + msg = _( "Tri-State" ); + break; + case PINSHEETLABEL_SHAPE::UNSPECIFIED: + msg = _( "Passive" ); + break; + default: + msg = wxT( "???" ); + break; } aList.push_back( MSG_PANEL_ITEM( _( "Type" ), msg, BLUE ) ); @@ -634,7 +633,7 @@ void SCH_TEXT::Show( int nestLevel, std::ostream& os ) const NestedSpace( nestLevel, os ) << '<' << s.Lower().mb_str() << " layer=\"" << m_Layer << '"' - << " shape=\"" << m_shape << '"' + << " shape=\"" << static_cast( m_shape ) << '"' << " dangling=\"" << m_isDangling << '"' << '>' << TO_UTF8( GetText() ) @@ -644,11 +643,11 @@ void SCH_TEXT::Show( int nestLevel, std::ostream& os ) const #endif -SCH_LABEL::SCH_LABEL( const wxPoint& pos, const wxString& text ) : - SCH_TEXT( pos, text, SCH_LABEL_T ) +SCH_LABEL::SCH_LABEL( const wxPoint& pos, const wxString& text ) + : SCH_TEXT( pos, text, SCH_LABEL_T ) { - m_Layer = LAYER_LOCLABEL; - m_shape = NET_INPUT; + m_Layer = LAYER_LOCLABEL; + m_shape = PINSHEETLABEL_SHAPE::INPUT; m_isDangling = true; SetMultilineAllowed( false ); } @@ -728,11 +727,11 @@ BITMAP_DEF SCH_LABEL::GetMenuImage() const } -SCH_GLOBALLABEL::SCH_GLOBALLABEL( const wxPoint& pos, const wxString& text ) : - SCH_TEXT( pos, text, SCH_GLOBAL_LABEL_T ) +SCH_GLOBALLABEL::SCH_GLOBALLABEL( const wxPoint& pos, const wxString& text ) + : SCH_TEXT( pos, text, SCH_GLOBAL_LABEL_T ) { - m_Layer = LAYER_GLOBLABEL; - m_shape = NET_BIDI; + m_Layer = LAYER_GLOBLABEL; + m_shape = PINSHEETLABEL_SHAPE::BIDI; m_isDangling = true; SetMultilineAllowed( false ); } @@ -755,14 +754,14 @@ wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset() const switch( m_shape ) { - case NET_INPUT: - case NET_BIDI: - case NET_TRISTATE: + case PINSHEETLABEL_SHAPE::INPUT: + case PINSHEETLABEL_SHAPE::BIDI: + case PINSHEETLABEL_SHAPE::TRISTATE: offset += halfSize; break; - case NET_OUTPUT: - case NET_UNSPECIFIED: + case PINSHEETLABEL_SHAPE::OUTPUT: + case PINSHEETLABEL_SHAPE::UNSPECIFIED: offset += TXT_MARGIN; break; @@ -773,17 +772,25 @@ wxPoint SCH_GLOBALLABEL::GetSchematicTextOffset() const switch( GetLabelSpinStyle() ) { default: - case 0: text_offset.x -= offset; break; // Orientation horiz normal - case 1: text_offset.y -= offset; break; // Orientation vert UP - case 2: text_offset.x += offset; break; // Orientation horiz inverse - case 3: text_offset.y += offset; break; // Orientation vert BOTTOM + case LABEL_SPIN_STYLE::LEFT: + text_offset.x -= offset; + break; // Orientation horiz normal + case LABEL_SPIN_STYLE::UP: + text_offset.y -= offset; + break; // Orientation vert UP + case LABEL_SPIN_STYLE::RIGHT: + text_offset.x += offset; + break; // Orientation horiz inverse + case LABEL_SPIN_STYLE::BOTTOM: + text_offset.y += offset; + break; // Orientation vert BOTTOM } return text_offset; } -void SCH_GLOBALLABEL::SetLabelSpinStyle( int aSpinStyle ) +void SCH_GLOBALLABEL::SetLabelSpinStyle( LABEL_SPIN_STYLE aSpinStyle ) { m_spin_style = aSpinStyle; @@ -791,27 +798,27 @@ void SCH_GLOBALLABEL::SetLabelSpinStyle( int aSpinStyle ) { default: wxASSERT_MSG( 1, "Bad spin style" ); - case 0: // Horiz Normal Orientation + case LABEL_SPIN_STYLE::RIGHT: // Horiz Normal Orientation // - m_spin_style = 0; // Handle the error spin style by resetting + m_spin_style = LABEL_SPIN_STYLE::RIGHT; // Handle the error spin style by resetting SetTextAngle( TEXT_ANGLE_HORIZ ); - SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT ); + SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; - case 1: // Vert Orientation UP + case LABEL_SPIN_STYLE::UP: // Vert Orientation UP SetTextAngle( TEXT_ANGLE_VERT ); SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; - case 2: // Horiz Orientation + case LABEL_SPIN_STYLE::LEFT: // Horiz Orientation SetTextAngle( TEXT_ANGLE_HORIZ ); - SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); + SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT ); SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; - case 3: // Vert Orientation BOTTOM + case LABEL_SPIN_STYLE::BOTTOM: // Vert Orientation BOTTOM SetTextAngle( TEXT_ANGLE_VERT ); SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT ); SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); @@ -888,23 +895,23 @@ void SCH_GLOBALLABEL::CreateGraphicShape( std::vector & aPoints, const switch( m_shape ) { - case NET_INPUT: + case PINSHEETLABEL_SHAPE::INPUT: x_offset = -halfSize; aPoints[0].x += halfSize; break; - case NET_OUTPUT: + case PINSHEETLABEL_SHAPE::OUTPUT: aPoints[3].x -= halfSize; break; - case NET_BIDI: - case NET_TRISTATE: + case PINSHEETLABEL_SHAPE::BIDI: + case PINSHEETLABEL_SHAPE::TRISTATE: x_offset = -halfSize; aPoints[0].x += halfSize; aPoints[3].x -= halfSize; break; - case NET_UNSPECIFIED: + case PINSHEETLABEL_SHAPE::UNSPECIFIED: default: break; } @@ -914,10 +921,17 @@ void SCH_GLOBALLABEL::CreateGraphicShape( std::vector & aPoints, const switch( GetLabelSpinStyle() ) { default: - case 0: break; // Orientation horiz normal - case 1: angle = -900; break; // Orientation vert UP - case 2: angle = 1800; break; // Orientation horiz inverse - case 3: angle = 900; break; // Orientation vert BOTTOM + case LABEL_SPIN_STYLE::LEFT: + break; // Orientation horiz normal + case LABEL_SPIN_STYLE::UP: + angle = -900; + break; // Orientation vert UP + case LABEL_SPIN_STYLE::RIGHT: + angle = 1800; + break; // Orientation horiz inverse + case LABEL_SPIN_STYLE::BOTTOM: + angle = 900; + break; // Orientation vert BOTTOM } // Rotate outlines and move corners in real position @@ -954,28 +968,28 @@ const EDA_RECT SCH_GLOBALLABEL::GetBoundingBox() const switch( GetLabelSpinStyle() ) // respect orientation { default: - case 0: // Horiz Normal Orientation (left justified) + case LABEL_SPIN_STYLE::LEFT: dx = -length; dy = height; x += Mils2iu( DANGLING_SYMBOL_SIZE ); y -= height / 2; break; - case 1: // Vert Orientation UP + case LABEL_SPIN_STYLE::UP: dx = height; dy = -length; x -= height / 2; y += Mils2iu( DANGLING_SYMBOL_SIZE ); break; - case 2: // Horiz Orientation - Right justified + case LABEL_SPIN_STYLE::RIGHT: dx = length; dy = height; x -= Mils2iu( DANGLING_SYMBOL_SIZE ); y -= height / 2; break; - case 3: // Vert Orientation BOTTOM + case LABEL_SPIN_STYLE::BOTTOM: dx = height; dy = length; x -= height / 2; @@ -1001,12 +1015,11 @@ BITMAP_DEF SCH_GLOBALLABEL::GetMenuImage() const } - -SCH_HIERLABEL::SCH_HIERLABEL( const wxPoint& pos, const wxString& text, KICAD_T aType ) : - SCH_TEXT( pos, text, aType ) +SCH_HIERLABEL::SCH_HIERLABEL( const wxPoint& pos, const wxString& text, KICAD_T aType ) + : SCH_TEXT( pos, text, aType ) { - m_Layer = LAYER_HIERLABEL; - m_shape = NET_INPUT; + m_Layer = LAYER_HIERLABEL; + m_shape = PINSHEETLABEL_SHAPE::INPUT; m_isDangling = true; SetMultilineAllowed( false ); } @@ -1018,35 +1031,37 @@ EDA_ITEM* SCH_HIERLABEL::Clone() const } -void SCH_HIERLABEL::SetLabelSpinStyle( int aSpinStyle ) +void SCH_HIERLABEL::SetLabelSpinStyle( LABEL_SPIN_STYLE aSpinStyle ) { m_spin_style = aSpinStyle; + // Assume "Right" and Left" mean which side of the port symbol the text will be on + // If we are left of the symbol, we want to right justify to line up with the symbol switch( aSpinStyle ) { default: - wxASSERT_MSG( 1, "Bad spin style" ); - case 0: // Horiz Normal Orientation + wxLogWarning( "SetLabelSpinStyle bad spin style" ); + case LABEL_SPIN_STYLE::LEFT: // - m_spin_style = 0; // Handle the error spin style by resetting + m_spin_style = LABEL_SPIN_STYLE::LEFT; // Handle the error spin style by resetting SetTextAngle( TEXT_ANGLE_HORIZ ); SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT ); SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; - case 1: // Vert Orientation UP + case LABEL_SPIN_STYLE::UP: SetTextAngle( TEXT_ANGLE_VERT ); SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; - case 2: // Horiz Orientation + case LABEL_SPIN_STYLE::RIGHT: SetTextAngle( TEXT_ANGLE_HORIZ ); SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; - case 3: // Vert Orientation BOTTOM + case LABEL_SPIN_STYLE::BOTTOM: SetTextAngle( TEXT_ANGLE_VERT ); SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT ); SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); @@ -1080,7 +1095,7 @@ void SCH_HIERLABEL::Print( wxDC* DC, const wxPoint& offset ) void SCH_HIERLABEL::CreateGraphicShape( std::vector & aPoints, const wxPoint& Pos ) { - int* Template = TemplateShape[m_shape][m_spin_style]; + int* Template = TemplateShape[static_cast( m_shape )][static_cast( m_spin_style )]; int halfSize = GetTextWidth() / 2; int imax = *Template; Template++; @@ -1118,28 +1133,28 @@ const EDA_RECT SCH_HIERLABEL::GetBoundingBox() const switch( GetLabelSpinStyle() ) { default: - case 0: // Horiz Normal Orientation (left justified) + case LABEL_SPIN_STYLE::LEFT: dx = -length; dy = height; x += Mils2iu( DANGLING_SYMBOL_SIZE ); y -= height / 2; break; - case 1: // Vert Orientation UP + case LABEL_SPIN_STYLE::UP: dx = height; dy = -length; x -= height / 2; y += Mils2iu( DANGLING_SYMBOL_SIZE ); break; - case 2: // Horiz Orientation - Right justified + case LABEL_SPIN_STYLE::RIGHT: dx = length; dy = height; x -= Mils2iu( DANGLING_SYMBOL_SIZE ); y -= height / 2; break; - case 3: // Vert Orientation BOTTOM + case LABEL_SPIN_STYLE::BOTTOM: dx = height; dy = length; x -= height / 2; @@ -1162,10 +1177,18 @@ wxPoint SCH_HIERLABEL::GetSchematicTextOffset() const switch( GetLabelSpinStyle() ) { default: - case 0: text_offset.x = -ii; break; // Orientation horiz normale - case 1: text_offset.y = -ii; break; // Orientation vert UP - case 2: text_offset.x = ii; break; // Orientation horiz inverse - case 3: text_offset.y = ii; break; // Orientation vert BOTTOM + case LABEL_SPIN_STYLE::LEFT: + text_offset.x = -ii; + break; // Orientation horiz normale + case LABEL_SPIN_STYLE::UP: + text_offset.y = -ii; + break; // Orientation vert UP + case LABEL_SPIN_STYLE::RIGHT: + text_offset.x = ii; + break; // Orientation horiz inverse + case LABEL_SPIN_STYLE::BOTTOM: + text_offset.y = ii; + break; // Orientation vert BOTTOM } return text_offset; diff --git a/eeschema/sch_text.h b/eeschema/sch_text.h index 00644ceb8c..6205606d73 100644 --- a/eeschema/sch_text.h +++ b/eeschema/sch_text.h @@ -40,16 +40,167 @@ class LINE_READER; class NETLIST_OBJECT_LIST; +/* + * Spin style for text items of all kinds on schematics + * Basically a higher level abstraction of rotation and justification of text + */ +class LABEL_SPIN_STYLE +{ +public: + enum SPIN : int + { + LEFT = 0, + UP = 1, + RIGHT = 2, + BOTTOM = 3 + }; + + + LABEL_SPIN_STYLE() = default; + constexpr LABEL_SPIN_STYLE( SPIN aSpin ) : m_spin( aSpin ) + { + } + + + LABEL_SPIN_STYLE( int aSpin ) + { + m_spin = static_cast( aSpin ); + } + + + constexpr bool operator==( SPIN a ) const + { + return m_spin == a; + } + + + constexpr bool operator!=( SPIN a ) const + { + return m_spin != a; + } + + + operator int() const + { + return static_cast( m_spin ); + } + + + LABEL_SPIN_STYLE RotateCW() + { + SPIN newSpin = m_spin; + switch( m_spin ) + { + default: + wxLogWarning( "RotateCCW encountered unknown current spin style" ); + case LABEL_SPIN_STYLE::LEFT: + newSpin = LABEL_SPIN_STYLE::UP; + break; + case LABEL_SPIN_STYLE::UP: + newSpin = LABEL_SPIN_STYLE::RIGHT; + break; + case LABEL_SPIN_STYLE::RIGHT: + newSpin = LABEL_SPIN_STYLE::BOTTOM; + break; + case LABEL_SPIN_STYLE::BOTTOM: + newSpin = LABEL_SPIN_STYLE::LEFT; + break; + } + + return LABEL_SPIN_STYLE( newSpin ); + } + + + LABEL_SPIN_STYLE RotateCCW() + { + SPIN newSpin = m_spin; + switch( m_spin ) + { + default: + wxLogWarning( "RotateCCW encountered unknown current spin style" ); + case LABEL_SPIN_STYLE::LEFT: + newSpin = LABEL_SPIN_STYLE::BOTTOM; + break; + case LABEL_SPIN_STYLE::BOTTOM: + newSpin = LABEL_SPIN_STYLE::RIGHT; + break; + case LABEL_SPIN_STYLE::RIGHT: + newSpin = LABEL_SPIN_STYLE::UP; + break; + case LABEL_SPIN_STYLE::UP: + newSpin = LABEL_SPIN_STYLE::LEFT; + break; + } + + return LABEL_SPIN_STYLE( newSpin ); + } + + + /* + * Mirrors the label spin style across the X axis or simply swaps up and bottom + */ + LABEL_SPIN_STYLE MirrorX() + { + SPIN newSpin = m_spin; + switch( m_spin ) + { + default: + wxLogWarning( "MirrorX encountered unknown current spin style" ); + case LABEL_SPIN_STYLE::UP: + newSpin = LABEL_SPIN_STYLE::BOTTOM; + break; + case LABEL_SPIN_STYLE::BOTTOM: + newSpin = LABEL_SPIN_STYLE::UP; + break; + case LABEL_SPIN_STYLE::LEFT: + break; + case LABEL_SPIN_STYLE::RIGHT: + break; + } + + return LABEL_SPIN_STYLE( newSpin ); + } + + + /* + * Mirrors the label spin style across the Y axis or simply swaps left and right + */ + LABEL_SPIN_STYLE MirrorY() + { + SPIN newSpin = m_spin; + switch( m_spin ) + { + default: + wxLogWarning( "MirrorY encountered unknown current spin style" ); + case LABEL_SPIN_STYLE::LEFT: + newSpin = LABEL_SPIN_STYLE::RIGHT; + break; + case LABEL_SPIN_STYLE::RIGHT: + newSpin = LABEL_SPIN_STYLE::LEFT; + break; + case LABEL_SPIN_STYLE::UP: + break; + case LABEL_SPIN_STYLE::BOTTOM: + break; + } + + return LABEL_SPIN_STYLE( newSpin ); + } + +private: + SPIN m_spin; +}; /* Shape/Type of SCH_HIERLABEL and SCH_GLOBALLABEL * mainly used to handle the graphic associated shape */ -enum PINSHEETLABEL_SHAPE { - NET_INPUT, - NET_OUTPUT, - NET_BIDI, - NET_TRISTATE, - NET_UNSPECIFIED +enum class PINSHEETLABEL_SHAPE +{ + INPUT, + OUTPUT, + BIDI, + TRISTATE, + UNSPECIFIED }; @@ -76,7 +227,7 @@ protected: * This is a duplicattion of m_Orient, m_HJustified, and m_VJustified in #EDA_TEXT but is * easier to handle than 3 parameters when editing and reading and saving files. */ - int m_spin_style; + LABEL_SPIN_STYLE m_spin_style; public: SCH_TEXT( const wxPoint& pos = wxPoint( 0, 0 ), @@ -114,14 +265,13 @@ public: * Set a spin or rotation angle, along with specific horizontal and vertical justification * styles with each angle. * - * @param aSpinStyle = - * 0 = normal (horizontal, left justified). - * 1 = up (vertical) - * 2 = (horizontal, right justified). This can be seen as the mirrored position of 0 - * 3 = bottom . This can be seen as the mirrored position of up + * @param aSpinStyle Spin style as per LABEL_SPIN_STYLE storage class, may be the enum values or int value */ - virtual void SetLabelSpinStyle( int aSpinStyle ); - int GetLabelSpinStyle() const { return m_spin_style; } + virtual void SetLabelSpinStyle( LABEL_SPIN_STYLE aSpinStyle ); + LABEL_SPIN_STYLE GetLabelSpinStyle() const + { + return m_spin_style; + } PINSHEETLABEL_SHAPE GetShape() const { return m_shape; } @@ -278,7 +428,7 @@ public: return wxT( "SCH_GLOBALLABEL" ); } - void SetLabelSpinStyle( int aSpinStyle ) override; + void SetLabelSpinStyle( LABEL_SPIN_STYLE aSpinStyle ) override; wxPoint GetSchematicTextOffset() const override; @@ -328,7 +478,7 @@ public: return wxT( "SCH_HIERLABEL" ); } - void SetLabelSpinStyle( int aSpinStyle ) override; + void SetLabelSpinStyle( LABEL_SPIN_STYLE aSpinStyle ) override; wxPoint GetSchematicTextOffset() const override; diff --git a/eeschema/sheet.cpp b/eeschema/sheet.cpp index b12ac9c346..68540ac264 100644 --- a/eeschema/sheet.cpp +++ b/eeschema/sheet.cpp @@ -766,7 +766,7 @@ bool SCH_EDIT_FRAME::EditSheet( SCH_SHEET* aSheet, SCH_SHEET_PATH* aHierarchy, } -PINSHEETLABEL_SHAPE SCH_EDIT_FRAME::m_lastSheetPinType = NET_INPUT; +PINSHEETLABEL_SHAPE SCH_EDIT_FRAME::m_lastSheetPinType = PINSHEETLABEL_SHAPE::INPUT; wxSize SCH_EDIT_FRAME::m_lastSheetPinTextSize( -1, -1 ); wxPoint SCH_EDIT_FRAME::m_lastSheetPinPosition; diff --git a/eeschema/tools/sch_edit_tool.cpp b/eeschema/tools/sch_edit_tool.cpp index 1e3e137b7f..77464c807d 100644 --- a/eeschema/tools/sch_edit_tool.cpp +++ b/eeschema/tools/sch_edit_tool.cpp @@ -383,87 +383,101 @@ int SCH_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent ) if( !moving ) saveCopyInUndoList( item, UR_CHANGED ); - for( int i = 0; clockwise ? i < 1 : i < 3; ++i ) + switch( item->Type() ) { - switch( item->Type() ) + case SCH_COMPONENT_T: + { + SCH_COMPONENT* component = static_cast( item ); + + if( clockwise ) + component->SetOrientation( CMP_ROTATE_CLOCKWISE ); + else + component->SetOrientation( CMP_ROTATE_COUNTERCLOCKWISE ); + + if( m_frame->GetAutoplaceFields() ) + component->AutoAutoplaceFields( m_frame->GetScreen() ); + + break; + } + + case SCH_TEXT_T: + case SCH_LABEL_T: + case SCH_GLOBAL_LABEL_T: + case SCH_HIER_LABEL_T: + { + SCH_TEXT* textItem = static_cast( item ); + + if( clockwise ) + textItem->SetLabelSpinStyle( textItem->GetLabelSpinStyle().RotateCW() ); + else + textItem->SetLabelSpinStyle( textItem->GetLabelSpinStyle().RotateCCW() ); + + break; + } + + case SCH_SHEET_PIN_T: + { + // Rotate pin within parent sheet + SCH_SHEET_PIN* pin = static_cast( item ); + SCH_SHEET* sheet = pin->GetParent(); + for( int i = 0; clockwise ? i < 1 : i < 3; ++i ) { - case SCH_COMPONENT_T: - { - SCH_COMPONENT* component = static_cast( item ); - - if( clockwise ) - component->SetOrientation( CMP_ROTATE_CLOCKWISE ); - else - component->SetOrientation( CMP_ROTATE_COUNTERCLOCKWISE ); - - if( m_frame->GetAutoplaceFields() ) - component->AutoAutoplaceFields( m_frame->GetScreen() ); - - break; - } - - case SCH_TEXT_T: - case SCH_LABEL_T: - case SCH_GLOBAL_LABEL_T: - case SCH_HIER_LABEL_T: - { - SCH_TEXT* textItem = static_cast( item ); - textItem->SetLabelSpinStyle( ( textItem->GetLabelSpinStyle() + 1 ) & 3 ); - break; - } - - case SCH_SHEET_PIN_T: - { - // Rotate pin within parent sheet - SCH_SHEET_PIN* pin = static_cast( item ); - SCH_SHEET* sheet = pin->GetParent(); pin->Rotate( sheet->GetBoundingBox().GetCenter() ); - break; + } + break; + } + + case SCH_BUS_BUS_ENTRY_T: + case SCH_BUS_WIRE_ENTRY_T: + for( int i = 0; clockwise ? i < 1 : i < 3; ++i ) + { + item->Rotate( item->GetPosition() ); + } + break; + + case SCH_FIELD_T: + { + SCH_FIELD* field = static_cast( item ); + + if( field->GetTextAngle() == TEXT_ANGLE_HORIZ ) + field->SetTextAngle( TEXT_ANGLE_VERT ); + else + field->SetTextAngle( TEXT_ANGLE_HORIZ ); + + // Now that we're moving a field, they're no longer autoplaced. + if( item->GetParent()->Type() == SCH_COMPONENT_T ) + { + SCH_COMPONENT* parent = static_cast( item->GetParent() ); + parent->ClearFieldsAutoplaced(); } - case SCH_BUS_BUS_ENTRY_T: - case SCH_BUS_WIRE_ENTRY_T: - item->Rotate( item->GetPosition() ); - break; + break; + } - case SCH_FIELD_T: + case SCH_BITMAP_T: + for( int i = 0; clockwise ? i < 1 : i < 3; ++i ) { - SCH_FIELD* field = static_cast( item ); - - if( field->GetTextAngle() == TEXT_ANGLE_HORIZ ) - field->SetTextAngle( TEXT_ANGLE_VERT ); - else - field->SetTextAngle( TEXT_ANGLE_HORIZ ); - - // Now that we're moving a field, they're no longer autoplaced. - if( item->GetParent()->Type() == SCH_COMPONENT_T ) - { - SCH_COMPONENT *parent = static_cast( item->GetParent() ); - parent->ClearFieldsAutoplaced(); - } - - break; + item->Rotate( item->GetPosition() ); } + // The bitmap is cached in Opengl: clear the cache to redraw + getView()->RecacheAllItems(); + break; - case SCH_BITMAP_T: - item->Rotate( item->GetPosition() ); - // The bitmap is cached in Opengl: clear the cache to redraw - getView()->RecacheAllItems(); - break; + case SCH_SHEET_T: + { + SCH_SHEET* sheet = static_cast( item ); - case SCH_SHEET_T: + // Rotate the sheet on itself. Sheets do not have an anchor point. + for( int i = 0; clockwise ? i < 1 : i < 3; ++i ) { - SCH_SHEET* sheet = static_cast( item ); - - // Rotate the sheet on itself. Sheets do not have an anchor point. rotPoint = m_frame->GetNearestGridPosition( sheet->GetRotationCenter() ); sheet->Rotate( rotPoint ); - break; } + break; + } - default: - break; - } + default: + break; } connections = item->IsConnectable(); @@ -580,12 +594,11 @@ int SCH_EDIT_TOOL::Mirror( const TOOL_EVENT& aEvent ) case SCH_HIER_LABEL_T: { SCH_TEXT* textItem = static_cast( item ); - int spin = textItem->GetLabelSpinStyle(); - if( xAxis && spin % 2 ) - textItem->SetLabelSpinStyle( ( spin + 2 ) % 4 ); - else if ( !xAxis && !( spin % 2 ) ) - textItem->SetLabelSpinStyle( ( spin + 2 ) % 4 ); + if( xAxis ) + textItem->SetLabelSpinStyle( textItem->GetLabelSpinStyle().MirrorX() ); + else + textItem->SetLabelSpinStyle( textItem->GetLabelSpinStyle().MirrorY() ); break; } diff --git a/eeschema/tools/sch_line_wire_bus_tool.cpp b/eeschema/tools/sch_line_wire_bus_tool.cpp index 2e36996cb1..836118d7e0 100644 --- a/eeschema/tools/sch_line_wire_bus_tool.cpp +++ b/eeschema/tools/sch_line_wire_bus_tool.cpp @@ -365,7 +365,7 @@ SCH_LINE* SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus( const wxString& aNet ) m_busUnfold.label = new SCH_LABEL( m_busUnfold.entry->m_End(), aNet ); m_busUnfold.label->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) ); - m_busUnfold.label->SetLabelSpinStyle( 0 ); + m_busUnfold.label->SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT ); m_busUnfold.label->SetParent( m_frame->GetScreen() ); m_busUnfold.label->SetFlags( IS_NEW | IS_MOVED ); diff --git a/include/eda_text.h b/include/eda_text.h index 20e0bd5025..82d46b005d 100644 --- a/include/eda_text.h +++ b/include/eda_text.h @@ -238,9 +238,6 @@ public: void Empty() { m_text.Empty(); } - static int MapOrientation( KICAD_T labelType, int aOrientation ); - static int MapOrientation( KICAD_T fromLabelType, KICAD_T toLabelType, int aOrientation ); - static EDA_TEXT_HJUSTIFY_T MapHorizJustify( int aHorizJustify ); static EDA_TEXT_VJUSTIFY_T MapVertJustify( int aVertJustify );