diff --git a/eeschema/dialogs/dialog_edit_label.cpp b/eeschema/dialogs/dialog_edit_label.cpp index 37ab9b7833..2bdbb43d51 100644 --- a/eeschema/dialogs/dialog_edit_label.cpp +++ b/eeschema/dialogs/dialog_edit_label.cpp @@ -56,12 +56,9 @@ public: void SetTitle( const wxString& aTitle ) override { - // 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. + // This class is shared for numerous tasks: a couple of single line labels and + // multi-line text fields. Since the desired size of the multi-line text field editor + // is often larger, we retain separate sizes based on the dialog titles. switch( m_CurrentText->Type() ) { case SCH_GLOBAL_LABEL_T: @@ -87,15 +84,12 @@ private: SCH_EDIT_FRAME* m_Parent; SCH_TEXT* m_CurrentText; - wxTextCtrl* m_activeTextCtrl; + wxWindow* m_activeTextCtrl; + wxTextEntry* m_activeTextEntry; UNIT_BINDER m_textSize; }; - -/* Edit the properties of the text (Label, Global label, graphic text).. ) - * pointed by "aTextStruct" - */ void SCH_EDIT_FRAME::EditSchematicText( SCH_TEXT* aTextItem ) { if( aTextItem == NULL ) @@ -114,7 +108,7 @@ const int maxSize = (int)( 250 * IU_PER_MM ); DIALOG_LABEL_EDITOR::DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* aParent, SCH_TEXT* aTextItem ) : DIALOG_LABEL_EDITOR_BASE( aParent ), - m_textSize( aParent, m_SizeTitle, m_TextSizeCtrl, m_staticSizeUnits, false, minSize, maxSize ) + m_textSize( aParent, m_textSizeLabel, m_textSizeCtrl, m_textSizeLabel, false, minSize, maxSize ) { m_Parent = aParent; m_CurrentText = aTextItem; @@ -134,24 +128,40 @@ DIALOG_LABEL_EDITOR::DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* aParent, SCH_TEXT* aTe break; case SCH_SHEET_PIN_T: - SetTitle( _( "Hierarchical Sheet Pin Properties." ) ); + SetTitle( _( "Hierarchical Sheet Pin Properties" ) ); break; default: + m_Label->SetLabel( _( "Text:" ) ); SetTitle( _( "Text Properties" ) ); break; } if( m_CurrentText->IsMultilineAllowed() ) { - m_activeTextCtrl = m_textLabelMultiLine; - m_textLabelSingleLine->Show( false ); + m_activeTextCtrl = m_valueMultiLine; + m_activeTextEntry = m_valueMultiLine; + m_textControlSizer->AddGrowableRow( 0 ); + + m_valueSingleLine->Show( false ); + m_valueCombo->Show( false ); + } + else if( m_CurrentText->Type() == SCH_GLOBAL_LABEL_T || m_CurrentText->Type() == SCH_LABEL_T ) + { + m_activeTextCtrl = m_valueCombo; + m_activeTextEntry = m_valueCombo; + + m_valueSingleLine->Show( false ); + m_valueMultiLine->Show( false ); } else { - m_activeTextCtrl = m_textLabelSingleLine; - m_textLabelMultiLine->Show( false ); + m_activeTextCtrl = m_valueSingleLine; + m_activeTextEntry = m_valueSingleLine; + + m_valueCombo->Show( false ); + m_valueMultiLine->Show( false ); } SetInitialFocus( m_activeTextCtrl ); @@ -167,9 +177,7 @@ DIALOG_LABEL_EDITOR::DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* aParent, SCH_TEXT* aTe // wxTextCtrls fail to generate wxEVT_CHAR events when the wxTE_MULTILINE flag is set, // so we have to listen to wxEVT_CHAR_HOOK events instead. - m_textLabelMultiLine->Connect( wxEVT_CHAR_HOOK, - wxKeyEventHandler( DIALOG_LABEL_EDITOR::OnCharHook ), - NULL, this ); + m_valueMultiLine->Connect( wxEVT_CHAR_HOOK, wxKeyEventHandler( DIALOG_LABEL_EDITOR::OnCharHook ), nullptr, this ); // Now all widgets have the size fixed, call FinishDialogSettings FinishDialogSettings(); @@ -178,9 +186,7 @@ DIALOG_LABEL_EDITOR::DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* aParent, SCH_TEXT* aTe DIALOG_LABEL_EDITOR::~DIALOG_LABEL_EDITOR() { - m_textLabelMultiLine->Disconnect( wxEVT_CHAR_HOOK, - wxKeyEventHandler( DIALOG_LABEL_EDITOR::OnCharHook ), - NULL, this ); + m_valueMultiLine->Disconnect( wxEVT_CHAR_HOOK, wxKeyEventHandler( DIALOG_LABEL_EDITOR::OnCharHook ), nullptr, this ); } @@ -210,7 +216,22 @@ bool DIALOG_LABEL_EDITOR::TransferDataToWindow() if( !wxDialog::TransferDataToWindow() ) return false; - m_activeTextCtrl->SetValue( m_CurrentText->GetText() ); + m_activeTextEntry->SetValue( m_CurrentText->GetText() ); + + if( m_valueCombo->IsShown() ) + { + // Load the combobox with the existing labels of the same type + wxArrayString existingLabels; + SCH_SCREENS allScreens; + + for( SCH_SCREEN* screen = allScreens.GetFirst(); screen; screen = allScreens.GetNext() ) + for( SCH_ITEM* item = screen->GetDrawItems(); item; item = item->Next() ) + if( item->Type() == m_CurrentText->Type() ) + existingLabels.push_back( static_cast( item )->GetText() ); + + existingLabels.Sort(); + m_valueCombo->Append( existingLabels ); + } // Set text options: int orientation = mapOrientation( m_CurrentText->Type(), m_CurrentText->GetLabelSpinStyle() ); @@ -285,7 +306,7 @@ bool DIALOG_LABEL_EDITOR::TransferDataFromWindow() m_Parent->GetCanvas()->RefreshDrawingRect( m_CurrentText->GetBoundingBox() ); - text = m_activeTextCtrl->GetValue(); + text = m_activeTextEntry->GetValue(); if( !text.IsEmpty() ) m_CurrentText->SetText( text ); @@ -301,7 +322,6 @@ bool DIALOG_LABEL_EDITOR::TransferDataFromWindow() m_CurrentText->SetTextSize( wxSize( m_textSize.GetValue(), m_textSize.GetValue() ) ); if( m_TextShape ) - /// @todo move cast to widget m_CurrentText->SetShape( static_cast( m_TextShape->GetSelection() ) ); int style = m_TextStyle->GetSelection(); diff --git a/eeschema/dialogs/dialog_edit_label_base.cpp b/eeschema/dialogs/dialog_edit_label_base.cpp index bd0f6ff6d1..b3f610b0f5 100644 --- a/eeschema/dialogs/dialog_edit_label_base.cpp +++ b/eeschema/dialogs/dialog_edit_label_base.cpp @@ -18,47 +18,51 @@ DIALOG_LABEL_EDITOR_BASE::DIALOG_LABEL_EDITOR_BASE( wxWindow* parent, wxWindowID m_textControlSizer = new wxFlexGridSizer( 2, 2, 3, 3 ); m_textControlSizer->AddGrowableCol( 1 ); - m_textControlSizer->AddGrowableRow( 0 ); m_textControlSizer->SetFlexibleDirection( wxBOTH ); m_textControlSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticText1 = new wxStaticText( this, wxID_ANY, _("&Text:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText1->Wrap( -1 ); - m_staticText1->SetToolTip( _("Enter the text to be used within the schematic") ); + m_Label = new wxStaticText( this, wxID_ANY, _("Label:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Label->Wrap( -1 ); + m_Label->SetToolTip( _("Enter the text to be used within the schematic") ); - m_textControlSizer->Add( m_staticText1, 0, wxALIGN_TOP|wxRIGHT|wxTOP, 3 ); + m_textControlSizer->Add( m_Label, 0, wxALIGN_TOP|wxRIGHT|wxTOP, 3 ); wxBoxSizer* bSizeText; bSizeText = new wxBoxSizer( wxVERTICAL ); - m_textLabelSingleLine = new wxTextCtrl( this, wxID_VALUESINGLE, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER|wxTE_RICH ); - m_textLabelSingleLine->SetMinSize( wxSize( 360,-1 ) ); + m_valueSingleLine = new wxTextCtrl( this, wxID_VALUESINGLE, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER|wxTE_RICH ); + m_valueSingleLine->SetMinSize( wxSize( 360,-1 ) ); - m_textLabelSingleLine->SetValidator( wxTextValidator( wxFILTER_EXCLUDE_CHAR_LIST, &m_labelText ) ); + m_valueSingleLine->SetValidator( wxTextValidator( wxFILTER_EXCLUDE_CHAR_LIST, &m_labelText ) ); - bSizeText->Add( m_textLabelSingleLine, 0, wxBOTTOM|wxEXPAND|wxLEFT, 3 ); + bSizeText->Add( m_valueSingleLine, 0, wxBOTTOM|wxEXPAND|wxLEFT, 3 ); - m_textLabelMultiLine = new wxTextCtrl( this, wxID_VALUEMULTI, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ); - m_textLabelMultiLine->SetMinSize( wxSize( 480,72 ) ); + m_valueMultiLine = new wxTextCtrl( this, wxID_VALUEMULTI, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ); + m_valueMultiLine->SetMinSize( wxSize( 480,72 ) ); - bSizeText->Add( m_textLabelMultiLine, 1, wxBOTTOM|wxEXPAND|wxLEFT, 3 ); + bSizeText->Add( m_valueMultiLine, 1, wxBOTTOM|wxEXPAND|wxLEFT, 3 ); + + m_valueCombo = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxTE_PROCESS_ENTER ); + m_valueCombo->SetValidator( wxTextValidator( wxFILTER_EXCLUDE_CHAR_LIST, &m_comboText ) ); + + bSizeText->Add( m_valueCombo, 0, wxEXPAND|wxBOTTOM|wxLEFT, 5 ); m_textControlSizer->Add( bSizeText, 1, wxEXPAND, 3 ); - m_SizeTitle = new wxStaticText( this, wxID_ANY, _("&Size:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_SizeTitle->Wrap( -1 ); - m_textControlSizer->Add( m_SizeTitle, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT, 3 ); + m_textSizeLabel = new wxStaticText( this, wxID_ANY, _("Text Size:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_textSizeLabel->Wrap( -1 ); + m_textControlSizer->Add( m_textSizeLabel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT, 3 ); wxBoxSizer* bSizeCtrlSizer; bSizeCtrlSizer = new wxBoxSizer( wxHORIZONTAL ); - m_TextSizeCtrl = new wxTextCtrl( this, wxID_SIZE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizeCtrlSizer->Add( m_TextSizeCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxTOP, 3 ); + m_textSizeCtrl = new wxTextCtrl( this, wxID_SIZE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizeCtrlSizer->Add( m_textSizeCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxTOP, 3 ); - m_staticSizeUnits = new wxStaticText( this, wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticSizeUnits->Wrap( -1 ); - bSizeCtrlSizer->Add( m_staticSizeUnits, 0, wxALIGN_CENTER_VERTICAL|wxTOP, 2 ); + m_textSizeUnits = new wxStaticText( this, wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 ); + m_textSizeUnits->Wrap( -1 ); + bSizeCtrlSizer->Add( m_textSizeUnits, 0, wxALIGN_CENTER_VERTICAL|wxTOP, 2 ); m_textControlSizer->Add( bSizeCtrlSizer, 1, wxEXPAND, 3 ); @@ -105,12 +109,14 @@ DIALOG_LABEL_EDITOR_BASE::DIALOG_LABEL_EDITOR_BASE( wxWindow* parent, wxWindowID bMainSizer->Fit( this ); // Connect Events - m_textLabelSingleLine->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnEnterKey ), NULL, this ); + 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 ); } DIALOG_LABEL_EDITOR_BASE::~DIALOG_LABEL_EDITOR_BASE() { // Disconnect Events - m_textLabelSingleLine->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnEnterKey ), NULL, this ); + 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 d65230e7da..ec8a4777ad 100644 --- a/eeschema/dialogs/dialog_edit_label_base.fbp +++ b/eeschema/dialogs/dialog_edit_label_base.fbp @@ -141,7 +141,7 @@ 0 0 wxID_ANY - &Text: + Label: 0 @@ -149,7 +149,7 @@ 0 1 - m_staticText1 + m_Label 1 @@ -241,7 +241,7 @@ 0 360,-1 1 - m_textLabelSingleLine + m_valueSingleLine 1 @@ -332,7 +332,7 @@ 0 480,72 1 - m_textLabelMultiLine + m_valueMultiLine 1 @@ -383,6 +383,99 @@ + + 5 + wxEXPAND|wxBOTTOM|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_valueCombo + 1 + + + protected + 1 + + Resizable + -1 + 1 + + wxTE_PROCESS_ENTER + ; forward_declare + 0 + + wxString + wxFILTER_EXCLUDE_CHAR_LIST + wxTextValidator + m_comboText + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnEnterKey + + + @@ -417,7 +510,7 @@ 0 0 wxID_ANY - &Size: + Text Size: 0 @@ -425,7 +518,7 @@ 0 1 - m_SizeTitle + m_textSizeLabel 1 @@ -517,7 +610,7 @@ 0 1 - m_TextSizeCtrl + m_textSizeCtrl 1 @@ -608,7 +701,7 @@ 0 1 - m_staticSizeUnits + m_textSizeUnits 1 diff --git a/eeschema/dialogs/dialog_edit_label_base.h b/eeschema/dialogs/dialog_edit_label_base.h index db66cf4823..878e104e11 100644 --- a/eeschema/dialogs/dialog_edit_label_base.h +++ b/eeschema/dialogs/dialog_edit_label_base.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -43,12 +44,13 @@ class DIALOG_LABEL_EDITOR_BASE : public DIALOG_SHIM }; wxFlexGridSizer* m_textControlSizer; - wxStaticText* m_staticText1; - wxTextCtrl* m_textLabelSingleLine; - wxTextCtrl* m_textLabelMultiLine; - wxStaticText* m_SizeTitle; - wxTextCtrl* m_TextSizeCtrl; - wxStaticText* m_staticSizeUnits; + wxStaticText* m_Label; + wxTextCtrl* m_valueSingleLine; + wxTextCtrl* m_valueMultiLine; + wxComboBox* m_valueCombo; + wxStaticText* m_textSizeLabel; + wxTextCtrl* m_textSizeCtrl; + wxStaticText* m_textSizeUnits; wxRadioBox* m_TextOrient; wxRadioBox* m_TextStyle; wxRadioBox* m_TextShape; @@ -62,6 +64,7 @@ class DIALOG_LABEL_EDITOR_BASE : public DIALOG_SHIM public: wxString m_labelText; + wxString m_comboText; 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();