Flatten some settings and remove some more globals.

This commit is contained in:
Jeff Young 2020-05-23 16:50:08 +01:00
parent 70fb5cac96
commit d61b6f965e
32 changed files with 424 additions and 654 deletions

View File

@ -405,11 +405,12 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnAddField( wxCommandEvent& event )
if( !m_grid->CommitPendingChanges() ) if( !m_grid->CommitPendingChanges() )
return; return;
int fieldID = m_fields->size(); LIBEDIT_SETTINGS* settings = Pgm().GetSettingsManager().GetAppSettings<LIBEDIT_SETTINGS>();
LIB_FIELD newField( m_libEntry, fieldID ); int fieldID = m_fields->size();
LIB_FIELD newField( m_libEntry, fieldID );
newField.SetTextSize( wxSize( m_Parent->GetDefaultTextSize(), newField.SetTextSize( wxSize( Mils2iu( settings->m_Defaults.text_size ),
m_Parent->GetDefaultTextSize() ) ); Mils2iu( settings->m_Defaults.text_size ) ) );
m_fields->push_back( newField ); m_fields->push_back( newField );

View File

@ -31,7 +31,7 @@
#include <pgm_base.h> #include <pgm_base.h>
#include <widgets/wx_grid.h> #include <widgets/wx_grid.h>
#include <settings/settings_manager.h>
#include <ee_collectors.h> #include <ee_collectors.h>
#include <class_library.h> #include <class_library.h>
#include <eeschema_settings.h> #include <eeschema_settings.h>
@ -230,7 +230,7 @@ bool DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataToWindow()
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnBrowseLibrary( wxCommandEvent& event ) void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnBrowseLibrary( wxCommandEvent& event )
{ {
SCH_BASE_FRAME::HISTORY_LIST dummy; std::vector<COMPONENT_SELECTION> dummy;
LIB_ID id; LIB_ID id;
id.Parse( m_libraryNameTextCtrl->GetValue(), LIB_ID::ID_SCH ); id.Parse( m_libraryNameTextCtrl->GetValue(), LIB_ID::ID_SCH );
@ -562,14 +562,14 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnAddField( wxCommandEvent& event )
if( !m_grid->CommitPendingChanges() ) if( !m_grid->CommitPendingChanges() )
return; return;
int fieldID = m_fields->size(); SCHEMATIC_SETTINGS& settings = m_cmp->Schematic()->Settings();
SCH_FIELD newField( wxPoint( 0, 0 ), fieldID, m_cmp, int fieldID = m_fields->size();
TEMPLATE_FIELDNAME::GetDefaultFieldName( fieldID ) ); SCH_FIELD newField( wxPoint( 0, 0 ), fieldID, m_cmp,
TEMPLATE_FIELDNAME::GetDefaultFieldName( fieldID ) );
newField.SetParent( m_cmp->GetParent() );
newField.SetTextAngle( m_fields->at( REFERENCE ).GetTextAngle() ); newField.SetTextAngle( m_fields->at( REFERENCE ).GetTextAngle() );
newField.SetTextSize( wxSize( settings.m_DefaultTextSize, settings.m_DefaultTextSize ) );
newField.SetTextSize( wxSize( GetParent()->GetDefaultTextSize(),
GetParent()->GetDefaultTextSize() ) );
m_fields->push_back( newField ); m_fields->push_back( newField );

View File

@ -31,76 +31,18 @@
#include <general.h> #include <general.h>
#include <gr_text.h> #include <gr_text.h>
#include <confirm.h> #include <confirm.h>
#include <sch_text.h>
#include <sch_component.h> #include <sch_component.h>
#include <sch_reference_list.h> #include <sch_reference_list.h>
#include <schematic.h> #include <schematic.h>
#include <widgets/unit_binder.h> #include <widgets/unit_binder.h>
#include <dialog_edit_label_base.h> #include <dialog_edit_label.h>
#include <kicad_string.h> #include <kicad_string.h>
#include <tool/actions.h> #include <tool/actions.h>
#include <html_messagebox.h>
class SCH_EDIT_FRAME; class SCH_EDIT_FRAME;
class SCH_TEXT; class SCH_TEXT;
class DIALOG_LABEL_EDITOR : public DIALOG_LABEL_EDITOR_BASE
{
public:
DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* parent, SCH_TEXT* aTextItem );
~DIALOG_LABEL_EDITOR();
void SetTitle( const wxString& aTitle ) override
{
// 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:
case SCH_HIER_LABEL_T:
case SCH_LABEL_T:
// labels can share retained settings probably.
break;
default:
m_hash_key = TO_UTF8( aTitle );
m_hash_key += typeid(*this).name();
}
DIALOG_LABEL_EDITOR_BASE::SetTitle( aTitle );
}
private:
void OnEnterKey( wxCommandEvent& aEvent ) override;
void OnCharHook( wxKeyEvent& aEvent );
void OnFormattingHelp( wxHyperlinkEvent& aEvent ) override;
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
wxString convertKIIDsToReferences( const wxString& aSource ) const;
wxString convertReferencesToKIIDs( const wxString& aSource ) const;
SCH_EDIT_FRAME* m_Parent;
SCH_TEXT* m_CurrentText;
wxWindow* m_activeTextCtrl;
wxTextEntry* m_activeTextEntry;
UNIT_BINDER m_textSize;
SCH_NETNAME_VALIDATOR m_netNameValidator;
};
int InvokeDialogLabelEditor( SCH_EDIT_FRAME* aCaller, SCH_TEXT* aTextItem )
{
DIALOG_LABEL_EDITOR dialog( aCaller, aTextItem );
return dialog.ShowModal();
}
// Don't allow text to disappear; it can be difficult to correct if you can't select it // Don't allow text to disappear; it can be difficult to correct if you can't select it
const int MIN_TEXTSIZE = (int)( 0.01 * IU_PER_MM ); const int MIN_TEXTSIZE = (int)( 0.01 * IU_PER_MM );
const int MAX_TEXTSIZE = INT_MAX; const int MAX_TEXTSIZE = INT_MAX;

View File

@ -0,0 +1,86 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef DIALOG_LABEL_EDITOR_H_
#define DIALOG_LABEL_EDITOR_H_
#include <widgets/unit_binder.h>
#include <sch_text.h>
#include <sch_validators.h>
#include <dialog_edit_label_base.h>
class SCH_EDIT_FRAME;
class SCH_TEXT;
class DIALOG_LABEL_EDITOR : public DIALOG_LABEL_EDITOR_BASE
{
public:
DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* parent, SCH_TEXT* aTextItem );
~DIALOG_LABEL_EDITOR();
void SetTitle( const wxString& aTitle ) override
{
// 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:
case SCH_HIER_LABEL_T:
case SCH_LABEL_T:
// labels can share retained settings probably.
break;
default:
m_hash_key = TO_UTF8( aTitle );
m_hash_key += typeid(*this).name();
}
DIALOG_LABEL_EDITOR_BASE::SetTitle( aTitle );
}
private:
void OnEnterKey( wxCommandEvent& aEvent ) override;
void OnCharHook( wxKeyEvent& aEvent );
void OnFormattingHelp( wxHyperlinkEvent& aEvent ) override;
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
wxString convertKIIDsToReferences( const wxString& aSource ) const;
wxString convertReferencesToKIIDs( const wxString& aSource ) const;
SCH_EDIT_FRAME* m_Parent;
SCH_TEXT* m_CurrentText;
wxWindow* m_activeTextCtrl;
wxTextEntry* m_activeTextEntry;
UNIT_BINDER m_textSize;
SCH_NETNAME_VALIDATOR m_netNameValidator;
};
#endif // DIALOG_LABEL_EDITOR_H_

View File

@ -27,8 +27,11 @@
#include <lib_edit_frame.h> #include <lib_edit_frame.h>
#include <class_libentry.h> #include <class_libentry.h>
#include <lib_text.h> #include <lib_text.h>
#include <settings/settings_manager.h>
#include <dialog_lib_edit_text.h> #include <dialog_lib_edit_text.h>
#include <libedit/libedit_settings.h>
#include <pgm_base.h>
#include <tools/lib_drawing_tools.h>
DIALOG_LIB_EDIT_TEXT::DIALOG_LIB_EDIT_TEXT( LIB_EDIT_FRAME* aParent, LIB_TEXT* aText ) : DIALOG_LIB_EDIT_TEXT::DIALOG_LIB_EDIT_TEXT( LIB_EDIT_FRAME* aParent, LIB_TEXT* aText ) :
@ -89,11 +92,14 @@ bool DIALOG_LIB_EDIT_TEXT::TransferDataToWindow()
} }
else else
{ {
m_textSize.SetValue( m_parent->GetDefaultTextSize() ); LIBEDIT_SETTINGS* cfg = Pgm().GetSettingsManager().GetAppSettings<LIBEDIT_SETTINGS>();
LIB_DRAWING_TOOLS* tools = m_parent->GetToolManager()->GetTool<LIB_DRAWING_TOOLS>();
m_CommonUnit->SetValue( !m_parent->m_DrawSpecificUnit ); m_textSize.SetValue( Mils2iu( cfg->m_Defaults.text_size ) );
m_CommonConvert->SetValue( !m_parent->m_DrawSpecificConvert );
m_orientChoice->SetSelection( m_parent->g_LastTextAngle == TEXT_ANGLE_HORIZ ? 0 : 1 ); m_CommonUnit->SetValue( !tools->GetDrawSpecificUnit() );
m_CommonConvert->SetValue( !tools->GetDrawSpecificConvert() );
m_orientChoice->SetSelection( tools->GetLastTextAngle() == TEXT_ANGLE_HORIZ ? 0 : 1 );
} }
return true; return true;
@ -102,11 +108,6 @@ bool DIALOG_LIB_EDIT_TEXT::TransferDataToWindow()
bool DIALOG_LIB_EDIT_TEXT::TransferDataFromWindow() bool DIALOG_LIB_EDIT_TEXT::TransferDataFromWindow()
{ {
m_parent->g_LastTextAngle = m_orientChoice->GetSelection() ? TEXT_ANGLE_VERT
: TEXT_ANGLE_HORIZ;
m_parent->m_DrawSpecificConvert = !m_CommonConvert->GetValue();
m_parent->m_DrawSpecificUnit = !m_CommonUnit->GetValue();
if( m_graphicText ) if( m_graphicText )
{ {
if( m_TextValue->GetValue().IsEmpty() ) if( m_TextValue->GetValue().IsEmpty() )
@ -116,14 +117,16 @@ bool DIALOG_LIB_EDIT_TEXT::TransferDataFromWindow()
m_graphicText->SetPosition( wxPoint( m_posX.GetValue(), m_posY.GetValue() ) ); m_graphicText->SetPosition( wxPoint( m_posX.GetValue(), m_posY.GetValue() ) );
m_graphicText->SetTextSize( wxSize( m_textSize.GetValue(), m_textSize.GetValue() ) ); m_graphicText->SetTextSize( wxSize( m_textSize.GetValue(), m_textSize.GetValue() ) );
m_graphicText->SetTextAngle( m_parent->g_LastTextAngle );
if( m_parent->m_DrawSpecificUnit ) m_graphicText->SetTextAngle( m_orientChoice->GetSelection() ? TEXT_ANGLE_VERT
: TEXT_ANGLE_HORIZ );
if( !m_CommonUnit->GetValue() )
m_graphicText->SetUnit( m_parent->GetUnit() ); m_graphicText->SetUnit( m_parent->GetUnit() );
else else
m_graphicText->SetUnit( 0 ); m_graphicText->SetUnit( 0 );
if( m_parent->m_DrawSpecificConvert ) if( !m_CommonConvert->GetValue() )
m_graphicText->SetConvert( m_parent->GetConvert() ); m_graphicText->SetConvert( m_parent->GetConvert() );
else else
m_graphicText->SetConvert( 0 ); m_graphicText->SetConvert( 0 );
@ -144,6 +147,12 @@ bool DIALOG_LIB_EDIT_TEXT::TransferDataFromWindow()
case 1: m_graphicText->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break; case 1: m_graphicText->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER ); break;
case 2: m_graphicText->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM ); break; case 2: m_graphicText->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM ); break;
} }
// Record settings used for next time:
LIB_DRAWING_TOOLS* tools = m_parent->GetToolManager()->GetTool<LIB_DRAWING_TOOLS>();
tools->SetLastTextAngle( m_graphicText->GetTextAngle() );
tools->SetDrawSpecificConvert( !m_CommonConvert->GetValue() );
tools->SetDrawSpecificUnit( !m_CommonUnit->GetValue() );
} }
m_parent->SetMsgPanel( m_graphicText ); m_parent->SetMsgPanel( m_graphicText );

View File

@ -116,11 +116,11 @@ void DIALOG_PLOT_SCHEMATIC::initDlg()
if( fmt == PLOT_FORMAT::DXF || fmt == PLOT_FORMAT::HPGL ) if( fmt == PLOT_FORMAT::DXF || fmt == PLOT_FORMAT::HPGL )
m_plotBackgroundColor->Disable(); m_plotBackgroundColor->Disable();
}
// Set the default line width (pen width which should be used for // Set the default line width (pen width which should be used for
// items that do not have a pen size defined (like frame ref) // items that do not have a pen size defined (like frame ref)
m_defaultLineWidth.SetValue( m_parent->GetDefaultLineWidth() ); m_defaultLineWidth.SetValue( cfg->m_Drawing.default_line_thickness );
}
// Initialize HPGL specific widgets // Initialize HPGL specific widgets
m_penWidth.SetValue( m_HPGLPenSize ); m_penWidth.SetValue( m_HPGLPenSize );

View File

@ -35,7 +35,6 @@
PANEL_EESCHEMA_SETTINGS::PANEL_EESCHEMA_SETTINGS( SCH_EDIT_FRAME* aFrame, wxWindow* aWindow ) : PANEL_EESCHEMA_SETTINGS::PANEL_EESCHEMA_SETTINGS( SCH_EDIT_FRAME* aFrame, wxWindow* aWindow ) :
PANEL_EESCHEMA_SETTINGS_BASE( aWindow ), PANEL_EESCHEMA_SETTINGS_BASE( aWindow ),
m_frame( aFrame ), m_frame( aFrame ),
m_defaultTextSize( aFrame, m_textSizeLabel, m_textSizeCtrl, m_textSizeUnits, true ),
m_hPitch( aFrame, m_hPitchLabel, m_hPitchCtrl, m_hPitchUnits, true ), m_hPitch( aFrame, m_hPitchLabel, m_hPitchCtrl, m_hPitchUnits, true ),
m_vPitch( aFrame, m_vPitchLabel, m_vPitchCtrl, m_vPitchUnits, true ) m_vPitch( aFrame, m_vPitchLabel, m_vPitchCtrl, m_vPitchUnits, true )
{} {}
@ -47,7 +46,6 @@ bool PANEL_EESCHEMA_SETTINGS::TransferDataToWindow()
m_choiceUnits->SetSelection( m_frame->GetUserUnits() == EDA_UNITS::INCHES ? 0 : 1 ); m_choiceUnits->SetSelection( m_frame->GetUserUnits() == EDA_UNITS::INCHES ? 0 : 1 );
m_defaultTextSize.SetValue( m_frame->GetDefaultTextSize() );
m_hPitch.SetValue( Mils2iu( cfg->m_Drawing.default_repeat_offset_x ) ); m_hPitch.SetValue( Mils2iu( cfg->m_Drawing.default_repeat_offset_x ) );
m_vPitch.SetValue( Mils2iu( cfg->m_Drawing.default_repeat_offset_y ) ); m_vPitch.SetValue( Mils2iu( cfg->m_Drawing.default_repeat_offset_y ) );
m_spinLabelRepeatStep->SetValue( cfg->m_Drawing.repeat_label_increment ); m_spinLabelRepeatStep->SetValue( cfg->m_Drawing.repeat_label_increment );
@ -83,8 +81,6 @@ bool PANEL_EESCHEMA_SETTINGS::TransferDataFromWindow()
m_frame->SetUserUnits( m_choiceUnits->GetSelection() == 0 ? EDA_UNITS::INCHES m_frame->SetUserUnits( m_choiceUnits->GetSelection() == 0 ? EDA_UNITS::INCHES
: EDA_UNITS::MILLIMETRES ); : EDA_UNITS::MILLIMETRES );
m_frame->SetDefaultTextSize( (int) m_defaultTextSize.GetValue() );
cfg->m_Drawing.default_sheet_border_color = m_borderColorSwatch->GetSwatchColor(); cfg->m_Drawing.default_sheet_border_color = m_borderColorSwatch->GetSwatchColor();
cfg->m_Drawing.default_sheet_background_color = m_backgroundColorSwatch->GetSwatchColor(); cfg->m_Drawing.default_sheet_background_color = m_backgroundColorSwatch->GetSwatchColor();

View File

@ -30,7 +30,6 @@ class PANEL_EESCHEMA_SETTINGS : public PANEL_EESCHEMA_SETTINGS_BASE
{ {
SCH_EDIT_FRAME* m_frame; SCH_EDIT_FRAME* m_frame;
UNIT_BINDER m_defaultTextSize;
UNIT_BINDER m_hPitch; UNIT_BINDER m_hPitch;
UNIT_BINDER m_vPitch; UNIT_BINDER m_vPitch;

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jul 10 2019) // C++ code generated with wxFormBuilder (version Oct 26 2018)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
@ -55,23 +55,6 @@ PANEL_EESCHEMA_SETTINGS_BASE::PANEL_EESCHEMA_SETTINGS_BASE( wxWindow* parent, wx
wxStaticBoxSizer* sbSizer5; wxStaticBoxSizer* sbSizer5;
sbSizer5 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Defaults for New Objects") ), wxVERTICAL ); sbSizer5 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Defaults for New Objects") ), wxVERTICAL );
wxBoxSizer* bSizer5;
bSizer5 = new wxBoxSizer( wxHORIZONTAL );
m_textSizeLabel = new wxStaticText( sbSizer5->GetStaticBox(), wxID_ANY, _("Schematic text size:"), wxDefaultPosition, wxDefaultSize, 0 );
m_textSizeLabel->Wrap( -1 );
bSizer5->Add( m_textSizeLabel, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
m_textSizeCtrl = new wxTextCtrl( sbSizer5->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_WRAP );
bSizer5->Add( m_textSizeCtrl, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
m_textSizeUnits = new wxStaticText( sbSizer5->GetStaticBox(), wxID_ANY, _("mils"), wxDefaultPosition, wxDefaultSize, 0 );
m_textSizeUnits->Wrap( -1 );
bSizer5->Add( m_textSizeUnits, 0, wxALIGN_CENTER_VERTICAL, 5 );
sbSizer5->Add( bSizer5, 0, wxEXPAND, 5 );
wxBoxSizer* bSizer6; wxBoxSizer* bSizer6;
bSizer6 = new wxBoxSizer( wxHORIZONTAL ); bSizer6 = new wxBoxSizer( wxHORIZONTAL );
@ -96,7 +79,7 @@ PANEL_EESCHEMA_SETTINGS_BASE::PANEL_EESCHEMA_SETTINGS_BASE( wxWindow* parent, wx
bSizer6->Add( m_backgroundColorSwatch, 1, wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); bSizer6->Add( m_backgroundColorSwatch, 1, wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
sbSizer5->Add( bSizer6, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 ); sbSizer5->Add( bSizer6, 0, wxEXPAND|wxBOTTOM, 5 );
bLeftColumn->Add( sbSizer5, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 ); bLeftColumn->Add( sbSizer5, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
@ -104,7 +87,7 @@ PANEL_EESCHEMA_SETTINGS_BASE::PANEL_EESCHEMA_SETTINGS_BASE( wxWindow* parent, wx
wxStaticBoxSizer* sbSizerPinSel; wxStaticBoxSizer* sbSizerPinSel;
sbSizerPinSel = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Selection") ), wxVERTICAL ); sbSizerPinSel = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Selection") ), wxVERTICAL );
m_cbPinSelectionOpt = new wxCheckBox( sbSizerPinSel->GetStaticBox(), wxID_ANY, _("Select a pin select the symbol"), wxDefaultPosition, wxDefaultSize, 0 ); m_cbPinSelectionOpt = new wxCheckBox( sbSizerPinSel->GetStaticBox(), wxID_ANY, _("Clicking on a pin selects the symbol"), wxDefaultPosition, wxDefaultSize, 0 );
m_cbPinSelectionOpt->SetToolTip( _("In schematic editor:\nIf enabled, clicking on a pin select the parent symbol.\nIf disabled, clicking on a pin select only the pin.") ); m_cbPinSelectionOpt->SetToolTip( _("In schematic editor:\nIf enabled, clicking on a pin select the parent symbol.\nIf disabled, clicking on a pin select only the pin.") );
sbSizerPinSel->Add( m_cbPinSelectionOpt, 0, wxALL, 5 ); sbSizerPinSel->Add( m_cbPinSelectionOpt, 0, wxALL, 5 );

View File

@ -14,7 +14,6 @@
<property name="file">panel_eeschema_settings_base</property> <property name="file">panel_eeschema_settings_base</property>
<property name="first_id">1000</property> <property name="first_id">1000</property>
<property name="help_provider">none</property> <property name="help_provider">none</property>
<property name="image_path_wrapper_function_name"></property>
<property name="indent_with_spaces"></property> <property name="indent_with_spaces"></property>
<property name="internationalize">1</property> <property name="internationalize">1</property>
<property name="name">PanelEeschemaSettingsBase</property> <property name="name">PanelEeschemaSettingsBase</property>
@ -26,7 +25,6 @@
<property name="skip_php_events">1</property> <property name="skip_php_events">1</property>
<property name="skip_python_events">1</property> <property name="skip_python_events">1</property>
<property name="ui_table">UI</property> <property name="ui_table">UI</property>
<property name="use_array_enum">0</property>
<property name="use_enum">1</property> <property name="use_enum">1</property>
<property name="use_microsoft_bom">0</property> <property name="use_microsoft_bom">0</property>
<object class="Panel" expanded="1"> <object class="Panel" expanded="1">
@ -361,204 +359,7 @@
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND|wxBOTTOM</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer5</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Schematic text size:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_textSizeLabel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
<property name="proportion">1</property>
<object class="wxTextCtrl" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_textSizeCtrl</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxSP_ARROW_KEYS|wxSP_WRAP</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">mils</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_textSizeUnits</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxTOP|wxBOTTOM</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property> <property name="minimum_size"></property>
@ -860,7 +661,7 @@
<property name="gripper">0</property> <property name="gripper">0</property>
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">Select a pin select the symbol</property> <property name="label">Clicking on a pin selects the symbol</property>
<property name="max_size"></property> <property name="max_size"></property>
<property name="maximize_button">0</property> <property name="maximize_button">0</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jul 10 2019) // C++ code generated with wxFormBuilder (version Oct 26 2018)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
@ -44,9 +44,6 @@ class PANEL_EESCHEMA_SETTINGS_BASE : public wxPanel
wxChoice* m_choiceUnits; wxChoice* m_choiceUnits;
wxCheckBox* m_checkHVOrientation; wxCheckBox* m_checkHVOrientation;
wxCheckBox* m_mouseDragIsDrag; wxCheckBox* m_mouseDragIsDrag;
wxStaticText* m_textSizeLabel;
wxTextCtrl* m_textSizeCtrl;
wxStaticText* m_textSizeUnits;
wxStaticText* m_borderColorLabel; wxStaticText* m_borderColorLabel;
COLOR_SWATCH* m_borderColorSwatch; COLOR_SWATCH* m_borderColorSwatch;
wxStaticText* m_backgroundColorLabel; wxStaticText* m_backgroundColorLabel;

View File

@ -49,8 +49,8 @@ bool PANEL_LIBEDIT_SETTINGS::TransferDataToWindow()
{ {
LIBEDIT_SETTINGS* settings = Pgm().GetSettingsManager().GetAppSettings<LIBEDIT_SETTINGS>(); LIBEDIT_SETTINGS* settings = Pgm().GetSettingsManager().GetAppSettings<LIBEDIT_SETTINGS>();
m_lineWidth.SetValue( m_frame->GetDefaultLineWidth() ); m_lineWidth.SetValue( Mils2iu( settings->m_Defaults.line_width ) );
m_textSize.SetValue( m_frame->GetDefaultTextSize() ); m_textSize.SetValue( Mils2iu( settings->m_Defaults.text_size ) );
m_pinLength.SetValue( Mils2iu( settings->m_Defaults.pin_length ) ); m_pinLength.SetValue( Mils2iu( settings->m_Defaults.pin_length ) );
m_pinNumberSize.SetValue( Mils2iu( settings->m_Defaults.pin_num_size ) ); m_pinNumberSize.SetValue( Mils2iu( settings->m_Defaults.pin_num_size ) );
m_pinNameSize.SetValue( Mils2iu( settings->m_Defaults.pin_name_size ) ); m_pinNameSize.SetValue( Mils2iu( settings->m_Defaults.pin_name_size ) );
@ -69,8 +69,8 @@ bool PANEL_LIBEDIT_SETTINGS::TransferDataFromWindow()
{ {
LIBEDIT_SETTINGS* settings = Pgm().GetSettingsManager().GetAppSettings<LIBEDIT_SETTINGS>(); LIBEDIT_SETTINGS* settings = Pgm().GetSettingsManager().GetAppSettings<LIBEDIT_SETTINGS>();
m_frame->SetDefaultLineWidth( (int) m_lineWidth.GetValue() ); settings->m_Defaults.line_width = Iu2Mils( (int) m_lineWidth.GetValue() );
m_frame->SetDefaultTextSize( (int) m_textSize.GetValue() ); settings->m_Defaults.text_size = Iu2Mils( (int) m_textSize.GetValue() );
settings->m_Defaults.pin_length = Iu2Mils( (int) m_pinLength.GetValue() ); settings->m_Defaults.pin_length = Iu2Mils( (int) m_pinLength.GetValue() );
settings->m_Defaults.pin_num_size = Iu2Mils( (int) m_pinNumberSize.GetValue() ); settings->m_Defaults.pin_num_size = Iu2Mils( (int) m_pinNumberSize.GetValue() );
settings->m_Defaults.pin_name_size = Iu2Mils( (int) m_pinNameSize.GetValue() ); settings->m_Defaults.pin_name_size = Iu2Mils( (int) m_pinNameSize.GetValue() );

View File

@ -28,6 +28,7 @@
#include <panel_setup_formatting.h> #include <panel_setup_formatting.h>
#include <sch_junction.h> #include <sch_junction.h>
#include <gr_text.h> #include <gr_text.h>
#include <schematic.h>
#include <schematic_settings.h> #include <schematic_settings.h>
@ -46,6 +47,8 @@ PANEL_SETUP_FORMATTING::PANEL_SETUP_FORMATTING( wxWindow* aWindow, SCH_EDIT_FRAM
bool PANEL_SETUP_FORMATTING::TransferDataToWindow() bool PANEL_SETUP_FORMATTING::TransferDataToWindow()
{ {
SCHEMATIC_SETTINGS& settings = m_frame->Schematic().Settings();
// Reference style one of: "A" ".A" "-A" "_A" ".1" "-1" "_1" // Reference style one of: "A" ".A" "-A" "_A" ".1" "-1" "_1"
int refStyleSelection; int refStyleSelection;
@ -67,14 +70,14 @@ bool PANEL_SETUP_FORMATTING::TransferDataToWindow()
m_pinSymbolSize.SetUnits( EDA_UNITS::INCHES, true ); m_pinSymbolSize.SetUnits( EDA_UNITS::INCHES, true );
m_junctionSize.SetUnits( EDA_UNITS::INCHES, true ); m_junctionSize.SetUnits( EDA_UNITS::INCHES, true );
m_textSize.SetValue( m_frame->GetDefaultTextSize() ); m_textSize.SetValue( settings.m_DefaultTextSize );
m_lineWidth.SetValue( m_frame->GetDefaultLineWidth() ); m_lineWidth.SetValue( settings.m_DefaultLineWidth );
m_busWidth.SetValue( m_frame->GetDefaultBusThickness() ); m_busWidth.SetValue( settings.m_DefaultBusThickness );
m_wireWidth.SetValue( m_frame->GetDefaultWireThickness() ); m_wireWidth.SetValue( settings.m_DefaultWireThickness );
m_pinSymbolSize.SetValue( m_frame->GetPinSymbolSize() ); m_pinSymbolSize.SetValue( settings.m_PinSymbolSize );
m_junctionSize.SetValue( m_frame->GetDefaults().m_JunctionSize ); m_junctionSize.SetValue( settings.m_JunctionSize );
wxString offsetRatio = wxString::Format( "%f", m_frame->GetTextOffsetRatio() * 100.0 ); wxString offsetRatio = wxString::Format( "%f", settings.m_TextOffsetRatio * 100.0 );
m_textOffsetRatioCtrl->SetValue( offsetRatio ); m_textOffsetRatioCtrl->SetValue( offsetRatio );
return true; return true;
@ -83,6 +86,8 @@ bool PANEL_SETUP_FORMATTING::TransferDataToWindow()
bool PANEL_SETUP_FORMATTING::TransferDataFromWindow() bool PANEL_SETUP_FORMATTING::TransferDataFromWindow()
{ {
SCHEMATIC_SETTINGS& settings = m_frame->Schematic().Settings();
// Reference style one of: "A" ".A" "-A" "_A" ".1" "-1" "_1" // Reference style one of: "A" ".A" "-A" "_A" ".1" "-1" "_1"
int firstRefId, refSeparator; int firstRefId, refSeparator;
@ -104,27 +109,26 @@ bool PANEL_SETUP_FORMATTING::TransferDataFromWindow()
LIB_PART::SetSubpartIdNotation( refSeparator, firstRefId ); LIB_PART::SetSubpartIdNotation( refSeparator, firstRefId );
} }
m_frame->SetDefaultTextSize( (int) m_textSize.GetValue() ); settings.m_DefaultTextSize = (int) m_textSize.GetValue();
m_frame->SetDefaultLineWidth( (int) m_lineWidth.GetValue() ); settings.m_DefaultLineWidth = (int) m_lineWidth.GetValue();
m_frame->SetDefaultWireThickness( (int) m_wireWidth.GetValue() ); settings.m_DefaultWireThickness = (int) m_wireWidth.GetValue();
m_frame->SetDefaultBusThickness( (int) m_busWidth.GetValue() ); settings.m_DefaultBusThickness = (int) m_busWidth.GetValue();
m_frame->SetPinSymbolSize( (int) m_pinSymbolSize.GetValue() ); settings.m_PinSymbolSize = (int) m_pinSymbolSize.GetValue();
settings.m_JunctionSize = (int) m_junctionSize.GetValue();
m_frame->GetDefaults().m_JunctionSize = (int) m_junctionSize.GetValue();
m_frame->SaveProjectSettings(); m_frame->SaveProjectSettings();
double dtmp = 0.0; double dtmp = 0.0;
wxString msg = m_textOffsetRatioCtrl->GetValue(); wxString msg = m_textOffsetRatioCtrl->GetValue();
msg.ToDouble( &dtmp ); msg.ToDouble( &dtmp );
m_frame->SetTextOffsetRatio( dtmp / 100.0 ); settings.m_TextOffsetRatio = dtmp / 100.0;
m_frame->GetRenderSettings()->SetDefaultPenWidth( m_frame->GetDefaultLineWidth() ); m_frame->GetRenderSettings()->SetDefaultPenWidth( settings.m_DefaultLineWidth );
m_frame->GetRenderSettings()->m_DefaultWireThickness = m_frame->GetDefaultWireThickness(); m_frame->GetRenderSettings()->m_DefaultWireThickness = settings.m_DefaultWireThickness;
m_frame->GetRenderSettings()->m_DefaultBusThickness = m_frame->GetDefaultBusThickness(); m_frame->GetRenderSettings()->m_DefaultBusThickness = settings.m_DefaultBusThickness;
m_frame->GetRenderSettings()->m_TextOffsetRatio = m_frame->GetTextOffsetRatio(); m_frame->GetRenderSettings()->m_TextOffsetRatio = settings.m_TextOffsetRatio;
m_frame->GetRenderSettings()->m_PinSymbolSize = m_frame->GetPinSymbolSize(); m_frame->GetRenderSettings()->m_PinSymbolSize = settings.m_PinSymbolSize;
m_frame->GetRenderSettings()->m_JunctionSize = m_frame->GetDefaults().m_JunctionSize; m_frame->GetRenderSettings()->m_JunctionSize = settings.m_JunctionSize;
m_frame->GetCanvas()->GetView()->MarkDirty(); m_frame->GetCanvas()->GetView()->MarkDirty();
m_frame->GetCanvas()->GetView()->UpdateAllItems( KIGFX::REPAINT ); m_frame->GetCanvas()->GetView()->UpdateAllItems( KIGFX::REPAINT );

View File

@ -39,154 +39,6 @@
#include "invoke_sch_dialog.h" #include "invoke_sch_dialog.h"
static PINSHEETLABEL_SHAPE lastGlobalLabelShape = PINSHEETLABEL_SHAPE::PS_INPUT;
static LABEL_SPIN_STYLE lastTextOrientation = LABEL_SPIN_STYLE::LEFT;
static bool lastTextBold = false;
static bool lastTextItalic = false;
static std::deque<std::unique_ptr<SCH_TEXT>> s_queuedTexts;
SCH_TEXT* SCH_EDIT_FRAME::GetNextNewText()
{
if( s_queuedTexts.empty() )
return nullptr;
auto next_text = std::move( s_queuedTexts.front() );
s_queuedTexts.pop_front();
return next_text.release();
}
SCH_TEXT* SCH_EDIT_FRAME::CreateNewText( int aType )
{
wxPoint cursorPos = (wxPoint) GetCanvas()->GetViewControls()->GetCursorPosition();
SCH_TEXT* textItem = nullptr;
s_queuedTexts.clear();
switch( aType )
{
case LAYER_NOTES:
textItem = new SCH_TEXT( cursorPos );
break;
case LAYER_LOCLABEL:
textItem = new SCH_LABEL( cursorPos );
break;
case LAYER_HIERLABEL:
textItem = new SCH_HIERLABEL( cursorPos );
textItem->SetShape( lastGlobalLabelShape );
break;
case LAYER_GLOBLABEL:
textItem = new SCH_GLOBALLABEL( cursorPos );
textItem->SetShape( lastGlobalLabelShape );
break;
default:
DisplayError( this, wxT( "SCH_EDIT_FRAME::CreateNewText() Internal error" ) );
return nullptr;
}
textItem->SetBold( lastTextBold );
textItem->SetItalic( lastTextItalic );
textItem->SetLabelSpinStyle( lastTextOrientation );
textItem->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) );
textItem->SetFlags( IS_NEW | IS_MOVED );
if( InvokeDialogLabelEditor( this, textItem ) != wxID_OK || textItem->GetText().IsEmpty() )
{
delete textItem;
return nullptr;
}
if( aType != LAYER_NOTES )
{
UTF8 text( textItem->GetText() );
int brace_count = 0;
int bracket_count = 0;
bool last_space = false;
UTF8 token;
for( auto chIt = text.ubegin(); chIt != text.uend(); chIt++ )
{
switch( *chIt )
{
case '{':
brace_count++;
last_space = false;
break;
case '[':
bracket_count++;
last_space = false;
break;
case '}':
brace_count = std::max( 0, brace_count - 1 );
last_space = false;
break;
case ']':
bracket_count = std::max( 0, bracket_count - 1 );
last_space = false;
break;
case ' ':
case '\n':
case '\r':
case '\t':
if( !token.empty() && bracket_count == 0 && brace_count == 0 )
{
std::unique_ptr<SCH_TEXT> nextitem( static_cast<SCH_TEXT*>( textItem->Clone() ) );
nextitem->SetText( token.wx_str() );
s_queuedTexts.push_back( std::move( nextitem ) );
token.clear();
continue;
}
// Skip leading whitespace
if( token.empty() || last_space )
continue;
last_space = true;
break;
default:
last_space = false;
break;
}
token += *chIt;
}
if( !token.empty() )
{
std::unique_ptr<SCH_TEXT> nextitem( static_cast<SCH_TEXT*>( textItem->Clone() ) );
nextitem->SetText( token.wx_str() );
s_queuedTexts.push_back( std::move( nextitem ) );
}
delete textItem;
textItem = GetNextNewText();
if( !textItem )
return nullptr;
}
lastTextBold = textItem->IsBold();
lastTextItalic = textItem->IsItalic();
lastTextOrientation = textItem->GetLabelSpinStyle();
if( textItem->Type() == SCH_GLOBAL_LABEL_T || textItem->Type() == SCH_HIER_LABEL_T )
lastGlobalLabelShape = textItem->GetShape();
return textItem;
}
void SCH_EDIT_FRAME::ConvertTextType( SCH_TEXT* aText, KICAD_T aNewType ) void SCH_EDIT_FRAME::ConvertTextType( SCH_TEXT* aText, KICAD_T aNewType )
{ {
KICAD_T oldType = aText->Type(); KICAD_T oldType = aText->Type();

View File

@ -322,9 +322,9 @@ bool SCH_EDIT_FRAME::LoadProjectFile()
bool ret = Prj().ConfigLoad( Kiface().KifaceSearch(), GROUP_SCH_EDIT, bool ret = Prj().ConfigLoad( Kiface().KifaceSearch(), GROUP_SCH_EDIT,
GetProjectFileParameters() ); GetProjectFileParameters() );
GetRenderSettings()->SetDefaultPenWidth( GetDefaultLineWidth() ); GetRenderSettings()->SetDefaultPenWidth( m_defaults->m_DefaultLineWidth );
GetRenderSettings()->m_DefaultWireThickness = GetDefaultWireThickness(); GetRenderSettings()->m_DefaultWireThickness = m_defaults->m_DefaultWireThickness;
GetRenderSettings()->m_DefaultBusThickness = GetDefaultBusThickness(); GetRenderSettings()->m_DefaultBusThickness = m_defaults->m_DefaultBusThickness;
GetRenderSettings()->m_TextOffsetRatio = m_defaults->m_TextOffsetRatio; GetRenderSettings()->m_TextOffsetRatio = m_defaults->m_TextOffsetRatio;
GetRenderSettings()->m_PinSymbolSize = m_defaults->m_PinSymbolSize; GetRenderSettings()->m_PinSymbolSize = m_defaults->m_PinSymbolSize;
GetRenderSettings()->m_JunctionSize = m_defaults->m_JunctionSize; GetRenderSettings()->m_JunctionSize = m_defaults->m_JunctionSize;

View File

@ -106,11 +106,6 @@ int InvokeDialogNetList( SCH_EDIT_FRAME* aCaller );
*/ */
bool InvokeDialogEditComponentsLibId( SCH_EDIT_FRAME* aCaller ); bool InvokeDialogEditComponentsLibId( SCH_EDIT_FRAME* aCaller );
/**
* Launches the "Edit Text/Label" dialog
* @return the ShowModal() result (wxID_OK, wxID_CANCEL, etc.)
*/
int InvokeDialogLabelEditor( SCH_EDIT_FRAME* aCaller, SCH_TEXT* aText );
#endif // INVOKE_SCH_DIALOG_H_ #endif // INVOKE_SCH_DIALOG_H_

View File

@ -66,10 +66,6 @@
bool LIB_EDIT_FRAME:: m_showDeMorgan = false; bool LIB_EDIT_FRAME:: m_showDeMorgan = false;
double LIB_EDIT_FRAME:: g_LastTextAngle = TEXT_ANGLE_HORIZ;
FILL_T LIB_EDIT_FRAME:: g_LastFillStyle = NO_FILL;
BEGIN_EVENT_TABLE( LIB_EDIT_FRAME, EDA_DRAW_FRAME ) BEGIN_EVENT_TABLE( LIB_EDIT_FRAME, EDA_DRAW_FRAME )
EVT_CLOSE( LIB_EDIT_FRAME::OnCloseWindow ) EVT_CLOSE( LIB_EDIT_FRAME::OnCloseWindow )
@ -98,9 +94,7 @@ LIB_EDIT_FRAME::LIB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
m_unitSelectBox( nullptr ) m_unitSelectBox( nullptr )
{ {
SetShowDeMorgan( false ); SetShowDeMorgan( false );
m_DrawSpecificConvert = true; m_SyncPinEdit = false;
m_DrawSpecificUnit = false;
m_SyncPinEdit = false;
m_my_part = nullptr; m_my_part = nullptr;
m_treePane = nullptr; m_treePane = nullptr;
@ -225,9 +219,6 @@ void LIB_EDIT_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
SCH_BASE_FRAME::LoadSettings( GetSettings() ); SCH_BASE_FRAME::LoadSettings( GetSettings() );
SetDefaultLineWidth( Mils2iu( m_settings->m_Defaults.line_width ) );
SetDefaultTextSize( Mils2iu( m_settings->m_Defaults.text_size ) );
GetRenderSettings()->m_ShowPinsElectricalType = m_settings->m_ShowPinElectricalType; GetRenderSettings()->m_ShowPinsElectricalType = m_settings->m_ShowPinElectricalType;
// Hidden elements must be editable // Hidden elements must be editable
@ -243,8 +234,6 @@ void LIB_EDIT_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
SCH_BASE_FRAME::SaveSettings( GetSettings() ); SCH_BASE_FRAME::SaveSettings( GetSettings() );
m_settings->m_Defaults.line_width = Iu2Mils( GetDefaultLineWidth() );
m_settings->m_Defaults.text_size = Iu2Mils( GetDefaultTextSize() );
m_settings->m_ShowPinElectricalType = GetRenderSettings()->m_ShowPinsElectricalType; m_settings->m_ShowPinElectricalType = GetRenderSettings()->m_ShowPinsElectricalType;
m_settings->m_LibWidth = m_treePane->GetSize().x; m_settings->m_LibWidth = m_treePane->GetSize().x;
} }

View File

@ -91,20 +91,6 @@ public:
*/ */
bool m_SyncPinEdit; bool m_SyncPinEdit;
/** Convert of the item currently being drawn. */
bool m_DrawSpecificConvert;
/**
* Specify which component parts the current draw item applies to.
*
* If true, the item being drawn or edited applies only to the selected part. Otherwise
* it applies to all parts in the component.
*/
bool m_DrawSpecificUnit;
static double g_LastTextAngle;
static FILL_T g_LastFillStyle;
public: public:
LIB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ); LIB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent );

View File

@ -28,6 +28,7 @@
#include <confirm.h> #include <confirm.h>
#include <gestfich.h> #include <gestfich.h>
#include <tools/ee_actions.h> #include <tools/ee_actions.h>
#include <tools/lib_drawing_tools.h>
#include <lib_edit_frame.h> #include <lib_edit_frame.h>
#include <class_libentry.h> #include <class_libentry.h>
#include <class_library.h> #include <class_library.h>
@ -776,7 +777,8 @@ void LIB_EDIT_FRAME::LoadPart( const wxString& aAlias, const wxString& aLibrary,
// Optimize default edit options for this symbol // Optimize default edit options for this symbol
// Usually if units are locked, graphic items are specific to each unit // Usually if units are locked, graphic items are specific to each unit
// and if units are interchangeable, graphic items are common to units // and if units are interchangeable, graphic items are common to units
m_DrawSpecificUnit = part->UnitsLocked(); LIB_DRAWING_TOOLS* tools = GetToolManager()->GetTool<LIB_DRAWING_TOOLS>();
tools->SetDrawSpecificUnit( part->UnitsLocked() );
LoadOneLibraryPartAux( part, aLibrary, aUnit, 0 ); LoadOneLibraryPartAux( part, aLibrary, aUnit, 0 );
} }

View File

@ -105,18 +105,6 @@ SCH_SCREEN* SCH_BASE_FRAME::GetScreen() const
} }
void SCH_BASE_FRAME::SetScreen( BASE_SCREEN* aScreen )
{
EDA_DRAW_FRAME::SetScreen( aScreen );
if( m_toolManager )
{
m_toolManager->SetEnvironment( aScreen, GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this );
}
}
EESCHEMA_SETTINGS* SCH_BASE_FRAME::eeconfig() const EESCHEMA_SETTINGS* SCH_BASE_FRAME::eeconfig() const
{ {
return dynamic_cast<EESCHEMA_SETTINGS*>( config() ); return dynamic_cast<EESCHEMA_SETTINGS*>( config() );
@ -135,34 +123,6 @@ const wxString SCH_BASE_FRAME::GetZoomLevelIndicator() const
} }
void SCH_BASE_FRAME::SetDefaultLineWidth( int aWidth )
{
m_defaults->m_DefaultLineWidth = aWidth;
GetRenderSettings()->SetDefaultPenWidth( aWidth );
}
void SCH_BASE_FRAME::SetDefaultWireThickness( int aThickness )
{
m_defaults->m_DefaultWireThickness = aThickness;
GetRenderSettings()->m_DefaultWireThickness = aThickness;
}
void SCH_BASE_FRAME::SetDefaultBusThickness( int aThickness )
{
m_defaults->m_DefaultBusThickness = aThickness;
GetRenderSettings()->m_DefaultBusThickness = aThickness;
}
void SCH_BASE_FRAME::SetPinSymbolSize( int aSize )
{
m_defaults->m_PinSymbolSize = aSize;
GetRenderSettings()->m_PinSymbolSize = aSize;
}
void SCH_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings ) void SCH_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
{ {
GetScreen()->SetPageSettings( aPageSettings ); GetScreen()->SetPageSettings( aPageSettings );

View File

@ -110,7 +110,6 @@ public:
SCH_DRAW_PANEL* GetCanvas() const override; SCH_DRAW_PANEL* GetCanvas() const override;
SCH_SCREEN* GetScreen() const override; SCH_SCREEN* GetScreen() const override;
void SetScreen( BASE_SCREEN* aScreen ) override;
EESCHEMA_SETTINGS* eeconfig() const; EESCHEMA_SETTINGS* eeconfig() const;
@ -131,24 +130,6 @@ public:
*/ */
virtual bool GetShowAllPins() const { return true; } virtual bool GetShowAllPins() const { return true; }
virtual int GetDefaultLineWidth() const { return m_defaults->m_DefaultLineWidth; }
virtual void SetDefaultLineWidth( int aWidth );
virtual int GetDefaultWireThickness() const { return m_defaults->m_DefaultWireThickness; }
virtual void SetDefaultWireThickness( int aThickness );
virtual int GetDefaultBusThickness() const { return m_defaults->m_DefaultBusThickness; }
virtual void SetDefaultBusThickness( int aThickness );
virtual int GetPinSymbolSize() const { return m_defaults->m_PinSymbolSize; }
virtual void SetPinSymbolSize( int aSize );
virtual int GetDefaultTextSize() const { return m_defaults->m_DefaultTextSize; }
virtual void SetDefaultTextSize( int aSize ) { m_defaults->m_DefaultTextSize = aSize; }
virtual double GetTextOffsetRatio() const { return m_defaults->m_TextOffsetRatio; }
virtual void SetTextOffsetRatio( double aRatio ) { m_defaults->m_TextOffsetRatio = aRatio; }
/** /**
* Function GetZoomLevelIndicator * Function GetZoomLevelIndicator
* returns a human readable value which can be displayed as zoom * returns a human readable value which can be displayed as zoom
@ -178,8 +159,6 @@ public:
void UpdateStatusBar() override; void UpdateStatusBar() override;
typedef std::vector<COMPONENT_SELECTION> HISTORY_LIST;
/** /**
* Function SelectComponentFromLib * Function SelectComponentFromLib
* Calls the library viewer to select component to import into schematic. * Calls the library viewer to select component to import into schematic.

View File

@ -320,7 +320,7 @@ void SCH_EDIT_FRAME::setupTools()
{ {
// Create the manager and dispatcher & route draw panel events to the dispatcher // Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager = new TOOL_MANAGER; m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( GetScreen(), GetCanvas()->GetView(), m_toolManager->SetEnvironment( &Schematic(), GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this ); GetCanvas()->GetViewControls(), this );
m_actions = new EE_ACTIONS(); m_actions = new EE_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions ); m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );

View File

@ -608,14 +608,6 @@ public:
SCH_JUNCTION* AddJunction( const wxPoint& aPos, bool aAppendToUndo = false, SCH_JUNCTION* AddJunction( const wxPoint& aPos, bool aAppendToUndo = false,
bool aFinal = true ); bool aFinal = true );
/**
* Gets the next queued text item
* @return next SCH_TEXT* or nullptr if empty
*/
SCH_TEXT* GetNextNewText();
SCH_TEXT* CreateNewText( int aType );
/** /**
* Performs routine schematic cleaning including breaking wire and buses and deleting * Performs routine schematic cleaning including breaking wire and buses and deleting
* identical objects superimposed on top of each other. * identical objects superimposed on top of each other.

View File

@ -500,8 +500,9 @@ PINSHEETLABEL_SHAPE SCH_EDIT_FRAME::m_lastSheetPinType = PINSHEETLABEL_SHAPE::PS
SCH_SHEET_PIN* SCH_EDIT_FRAME::CreateSheetPin( SCH_SHEET* aSheet, SCH_HIERLABEL* aLabel ) SCH_SHEET_PIN* SCH_EDIT_FRAME::CreateSheetPin( SCH_SHEET* aSheet, SCH_HIERLABEL* aLabel )
{ {
wxString text; SCHEMATIC_SETTINGS& settings = aSheet->Schematic()->Settings();
SCH_SHEET_PIN* sheetPin; wxString text;
SCH_SHEET_PIN* sheetPin;
if( aLabel ) if( aLabel )
{ {
@ -511,7 +512,7 @@ SCH_SHEET_PIN* SCH_EDIT_FRAME::CreateSheetPin( SCH_SHEET* aSheet, SCH_HIERLABEL*
sheetPin = new SCH_SHEET_PIN( aSheet, wxPoint( 0, 0 ), text ); sheetPin = new SCH_SHEET_PIN( aSheet, wxPoint( 0, 0 ), text );
sheetPin->SetFlags( IS_NEW ); sheetPin->SetFlags( IS_NEW );
sheetPin->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) ); sheetPin->SetTextSize( wxSize( settings.m_DefaultTextSize, settings.m_DefaultTextSize ) );
sheetPin->SetShape( m_lastSheetPinType ); sheetPin->SetShape( m_lastSheetPinType );
if( !aLabel ) if( !aLabel )

View File

@ -32,8 +32,6 @@
class TOOL_EVENT; class TOOL_EVENT;
class TOOL_MANAGER; class TOOL_MANAGER;
extern char g_lastBusEntryShape;
/** /**
* EESCHEMA_ACTIONS * EESCHEMA_ACTIONS
* *

View File

@ -37,13 +37,20 @@
#include <lib_circle.h> #include <lib_circle.h>
#include <lib_polyline.h> #include <lib_polyline.h>
#include <lib_rectangle.h> #include <lib_rectangle.h>
#include <pgm_base.h>
#include <libedit/libedit_settings.h>
#include <settings/settings_manager.h>
#include "ee_point_editor.h" #include "ee_point_editor.h"
static void* g_lastPinWeakPtr; static void* g_lastPinWeakPtr;
LIB_DRAWING_TOOLS::LIB_DRAWING_TOOLS() : LIB_DRAWING_TOOLS::LIB_DRAWING_TOOLS() :
EE_TOOL_BASE<LIB_EDIT_FRAME>( "eeschema.SymbolDrawing" ) EE_TOOL_BASE<LIB_EDIT_FRAME>( "eeschema.SymbolDrawing" ),
m_lastTextAngle( 0.0 ),
m_lastFillStyle( NO_FILL ),
m_drawSpecificConvert( true ),
m_drawSpecificUnit( false )
{ {
} }
@ -65,10 +72,11 @@ bool LIB_DRAWING_TOOLS::Init()
int LIB_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent ) int LIB_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
{ {
KICAD_T type = aEvent.Parameter<KICAD_T>(); KICAD_T type = aEvent.Parameter<KICAD_T>();
LIB_PIN_TOOL* pinTool = type == LIB_PIN_T ? m_toolMgr->GetTool<LIB_PIN_TOOL>() : nullptr; LIBEDIT_SETTINGS* settings = Pgm().GetSettingsManager().GetAppSettings<LIBEDIT_SETTINGS>();
VECTOR2I cursorPos; LIB_PIN_TOOL* pinTool = type == LIB_PIN_T ? m_toolMgr->GetTool<LIB_PIN_TOOL>() : nullptr;
EDA_ITEM* item = nullptr; VECTOR2I cursorPos;
EDA_ITEM* item = nullptr;
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
getViewControls()->ShowCursor( true ); getViewControls()->ShowCursor( true );
@ -144,10 +152,11 @@ int LIB_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
case LIB_TEXT_T: case LIB_TEXT_T:
{ {
LIB_TEXT* text = new LIB_TEXT( part ); LIB_TEXT* text = new LIB_TEXT( part );
text->SetPosition( wxPoint( cursorPos.x, -cursorPos.y ) ); text->SetPosition( wxPoint( cursorPos.x, -cursorPos.y ) );
text->SetTextSize( wxSize( m_frame->GetDefaultTextSize(), text->SetTextSize( wxSize( Mils2iu( settings->m_Defaults.text_size ),
m_frame->GetDefaultTextSize() ) ); Mils2iu( settings->m_Defaults.text_size ) ) );
text->SetTextAngle( m_frame->g_LastTextAngle ); text->SetTextAngle( m_lastTextAngle );
DIALOG_LIB_EDIT_TEXT dlg( m_frame, text ); DIALOG_LIB_EDIT_TEXT dlg( m_frame, text );
@ -231,8 +240,9 @@ int LIB_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
int LIB_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent ) int LIB_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
{ {
KICAD_T type = aEvent.Parameter<KICAD_T>(); LIBEDIT_SETTINGS* settings = Pgm().GetSettingsManager().GetAppSettings<LIBEDIT_SETTINGS>();
EE_POINT_EDITOR* pointEditor = m_toolMgr->GetTool<EE_POINT_EDITOR>(); KICAD_T type = aEvent.Parameter<KICAD_T>();
EE_POINT_EDITOR* pointEditor = m_toolMgr->GetTool<EE_POINT_EDITOR>();
// We might be running as the same shape in another co-routine. Make sure that one // We might be running as the same shape in another co-routine. Make sure that one
// gets whacked. // gets whacked.
@ -317,15 +327,15 @@ int LIB_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
wxASSERT( item ); wxASSERT( item );
item->SetWidth( m_frame->GetDefaultLineWidth() ); item->SetWidth( settings->m_Defaults.line_width );
item->SetFillMode( LIB_EDIT_FRAME::g_LastFillStyle ); item->SetFillMode( m_lastFillStyle );
item->SetFlags( IS_NEW ); item->SetFlags( IS_NEW );
item->BeginEdit( wxPoint( cursorPos.x, -cursorPos.y ) ); item->BeginEdit( wxPoint( cursorPos.x, -cursorPos.y ) );
if( m_frame->m_DrawSpecificUnit ) if( m_drawSpecificUnit )
item->SetUnit( m_frame->GetUnit() ); item->SetUnit( m_frame->GetUnit() );
if( m_frame->m_DrawSpecificConvert ) if( m_drawSpecificConvert )
item->SetConvert( m_frame->GetConvert() ); item->SetConvert( m_frame->GetConvert() );
m_selectionTool->AddItemToSel( item ); m_selectionTool->AddItemToSel( item );

View File

@ -52,12 +52,26 @@ public:
int RepeatDrawItem( const TOOL_EVENT& aEvent ); int RepeatDrawItem( const TOOL_EVENT& aEvent );
private: void SetLastTextAngle( double aAngle ) { m_lastTextAngle = aAngle; }
double GetLastTextAngle() const { return m_lastTextAngle; }
void SetDrawSpecificConvert( bool aSpecific ) { m_drawSpecificConvert = aSpecific; }
bool GetDrawSpecificConvert() const { return m_drawSpecificConvert; }
void SetDrawSpecificUnit( bool aSpecific ) { m_drawSpecificUnit = aSpecific; }
bool GetDrawSpecificUnit() const { return m_drawSpecificUnit; }
private:
int doTwoClickPlace( KICAD_T aType, bool aImmediateMode ); int doTwoClickPlace( KICAD_T aType, bool aImmediateMode );
///> Sets up handlers for various events. ///> Sets up handlers for various events.
void setTransitions() override; void setTransitions() override;
private:
double m_lastTextAngle;
FILL_T m_lastFillStyle;
bool m_drawSpecificConvert;
bool m_drawSpecificUnit;
}; };
#endif /* LIB_DRAWING_TOOLS_H */ #endif /* LIB_DRAWING_TOOLS_H */

View File

@ -442,8 +442,9 @@ void LIB_EDIT_TOOL::editGraphicProperties( LIB_ITEM* aItem )
m_frame->GetCanvas()->Refresh(); m_frame->GetCanvas()->Refresh();
m_frame->OnModify( ); m_frame->OnModify( );
m_frame->m_DrawSpecificConvert = !dialog.GetApplyToAllConversions(); LIB_DRAWING_TOOLS* drawingTools = m_toolMgr->GetTool<LIB_DRAWING_TOOLS>();
m_frame->m_DrawSpecificUnit = !dialog.GetApplyToAllUnits(); drawingTools->SetDrawSpecificConvert( !dialog.GetApplyToAllConversions() );
drawingTools->SetDrawSpecificUnit( !dialog.GetApplyToAllUnits() );
MSG_PANEL_ITEMS items; MSG_PANEL_ITEMS items;
aItem->GetMsgPanelInfo( m_frame, items ); aItem->GetMsgPanelInfo( m_frame, items );
@ -539,12 +540,15 @@ void LIB_EDIT_TOOL::editSymbolProperties()
// to the best value // to the best value
if( partLocked != part->UnitsLocked() ) if( partLocked != part->UnitsLocked() )
{ {
LIB_DRAWING_TOOLS* tools = m_toolMgr->GetTool<LIB_DRAWING_TOOLS>();
// Enable synchronized pin edit mode for symbols with interchangeable units // Enable synchronized pin edit mode for symbols with interchangeable units
m_frame->m_SyncPinEdit = !part->UnitsLocked(); m_frame->m_SyncPinEdit = !part->UnitsLocked();
// also set default edit options to the better value // also set default edit options to the better value
// Usually if units are locked, graphic items are specific to each unit // Usually if units are locked, graphic items are specific to each unit
// and if units are interchangeable, graphic items are common to units // and if units are interchangeable, graphic items are common to units
m_frame->m_DrawSpecificUnit = part->UnitsLocked(); tools->SetDrawSpecificUnit( part->UnitsLocked() );
} }
} }

View File

@ -27,8 +27,6 @@
#include "ee_point_editor.h" #include "ee_point_editor.h"
#include <ee_actions.h> #include <ee_actions.h>
#include <sch_edit_frame.h> #include <sch_edit_frame.h>
#include <sch_view.h>
#include <class_draw_panel_gal.h>
#include <project.h> #include <project.h>
#include <id.h> #include <id.h>
#include <eeschema_id.h> #include <eeschema_id.h>
@ -46,9 +44,15 @@
#include <schematic.h> #include <schematic.h>
#include <class_library.h> #include <class_library.h>
#include <eeschema_settings.h> #include <eeschema_settings.h>
#include <dialogs/dialog_edit_label.h>
SCH_DRAWING_TOOLS::SCH_DRAWING_TOOLS() : SCH_DRAWING_TOOLS::SCH_DRAWING_TOOLS() :
EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.InteractiveDrawing" ) EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.InteractiveDrawing" ),
m_lastBusEntryShape( '/' ),
m_lastGlobalLabelShape( PINSHEETLABEL_SHAPE::PS_INPUT ),
m_lastTextOrientation( LABEL_SPIN_STYLE::LEFT ),
m_lastTextBold( false ),
m_lastTextItalic( false )
{ {
} }
@ -70,22 +74,17 @@ bool SCH_DRAWING_TOOLS::Init()
} }
// History lists for PlaceComponent()
static SCH_BASE_FRAME::HISTORY_LIST s_SymbolHistoryList;
static SCH_BASE_FRAME::HISTORY_LIST s_PowerHistoryList;
int SCH_DRAWING_TOOLS::PlaceComponent( const TOOL_EVENT& aEvent ) int SCH_DRAWING_TOOLS::PlaceComponent( const TOOL_EVENT& aEvent )
{ {
SCH_COMPONENT* component = aEvent.Parameter<SCH_COMPONENT*>(); SCH_COMPONENT* component = aEvent.Parameter<SCH_COMPONENT*>();
SCHLIB_FILTER filter; SCHLIB_FILTER filter;
SCH_BASE_FRAME::HISTORY_LIST* historyList = nullptr; std::vector<COMPONENT_SELECTION>* historyList = nullptr;
if( aEvent.IsAction( &EE_ACTIONS::placeSymbol ) ) if( aEvent.IsAction( &EE_ACTIONS::placeSymbol ) )
historyList = &s_SymbolHistoryList; historyList = &m_symbolHistoryList;
else if (aEvent.IsAction( &EE_ACTIONS::placePower ) ) else if (aEvent.IsAction( &EE_ACTIONS::placePower ) )
{ {
historyList = &s_PowerHistoryList; historyList = &m_powerHistoryList;
filter.FilterPowerParts( true ); filter.FilterPowerParts( true );
} }
else else
@ -463,10 +462,10 @@ int SCH_DRAWING_TOOLS::SingleClickPlace( const TOOL_EVENT& aEvent )
previewItem = new SCH_JUNCTION( cursorPos ); previewItem = new SCH_JUNCTION( cursorPos );
break; break;
case SCH_BUS_WIRE_ENTRY_T: case SCH_BUS_WIRE_ENTRY_T:
previewItem = new SCH_BUS_WIRE_ENTRY( cursorPos, g_lastBusEntryShape ); previewItem = new SCH_BUS_WIRE_ENTRY( cursorPos, m_lastBusEntryShape );
break; break;
case SCH_BUS_BUS_ENTRY_T: case SCH_BUS_BUS_ENTRY_T:
previewItem = new SCH_BUS_BUS_ENTRY( cursorPos, g_lastBusEntryShape ); previewItem = new SCH_BUS_BUS_ENTRY( cursorPos, m_lastBusEntryShape );
break; break;
default: default:
wxASSERT_MSG( false, "Unknown item type in SCH_DRAWING_TOOLS::SingleClickPlace" ); wxASSERT_MSG( false, "Unknown item type in SCH_DRAWING_TOOLS::SingleClickPlace" );
@ -553,9 +552,9 @@ int SCH_DRAWING_TOOLS::SingleClickPlace( const TOOL_EVENT& aEvent )
{ {
// Update the shape of the bus entry // Update the shape of the bus entry
if( evt->IsAction( &EE_ACTIONS::toShapeSlash ) ) if( evt->IsAction( &EE_ACTIONS::toShapeSlash ) )
g_lastBusEntryShape = '/'; m_lastBusEntryShape = '/';
else if( evt->IsAction( &EE_ACTIONS::toShapeBackslash ) ) else if( evt->IsAction( &EE_ACTIONS::toShapeBackslash ) )
g_lastBusEntryShape = '\\'; m_lastBusEntryShape = '\\';
SCH_BUS_ENTRY_BASE* busItem = static_cast<SCH_BUS_ENTRY_BASE*>( previewItem ); SCH_BUS_ENTRY_BASE* busItem = static_cast<SCH_BUS_ENTRY_BASE*>( previewItem );
@ -569,7 +568,7 @@ int SCH_DRAWING_TOOLS::SingleClickPlace( const TOOL_EVENT& aEvent )
busItem->MirrorY( busItem->GetPosition().y ); busItem->MirrorY( busItem->GetPosition().y );
else if( evt->IsAction( &EE_ACTIONS::toShapeBackslash ) else if( evt->IsAction( &EE_ACTIONS::toShapeBackslash )
|| evt->IsAction( &EE_ACTIONS::toShapeSlash ) ) || evt->IsAction( &EE_ACTIONS::toShapeSlash ) )
busItem->SetBusEntryShape( g_lastBusEntryShape ); busItem->SetBusEntryShape( m_lastBusEntryShape );
m_view->ClearPreview(); m_view->ClearPreview();
m_view->AddToPreview( previewItem->Clone() ); m_view->AddToPreview( previewItem->Clone() );
@ -586,6 +585,153 @@ int SCH_DRAWING_TOOLS::SingleClickPlace( const TOOL_EVENT& aEvent )
} }
// History lists for placing labels and text
SCH_TEXT* SCH_DRAWING_TOOLS::getNextNewText()
{
if( m_queuedTexts.empty() )
return nullptr;
auto next_text = std::move( m_queuedTexts.front() );
m_queuedTexts.pop_front();
return next_text.release();
}
SCH_TEXT* SCH_DRAWING_TOOLS::createNewText( const VECTOR2I& aPosition, int aType )
{
SCHEMATIC* schematic = getModel<SCHEMATIC>();
SCHEMATIC_SETTINGS& settings = schematic->Settings();
SCH_TEXT* textItem = nullptr;
m_queuedTexts.clear();
switch( aType )
{
case LAYER_NOTES:
textItem = new SCH_TEXT( (wxPoint) aPosition );
break;
case LAYER_LOCLABEL:
textItem = new SCH_LABEL( (wxPoint) aPosition );
break;
case LAYER_HIERLABEL:
textItem = new SCH_HIERLABEL( (wxPoint) aPosition );
textItem->SetShape( m_lastGlobalLabelShape );
break;
case LAYER_GLOBLABEL:
textItem = new SCH_GLOBALLABEL( (wxPoint) aPosition );
textItem->SetShape( m_lastGlobalLabelShape );
break;
default:
DisplayError( m_frame, wxT( "SCH_EDIT_FRAME::CreateNewText() Internal error" ) );
return nullptr;
}
textItem->SetParent( schematic );
textItem->SetBold( m_lastTextBold );
textItem->SetItalic( m_lastTextItalic );
textItem->SetLabelSpinStyle( m_lastTextOrientation );
textItem->SetTextSize( wxSize( settings.m_DefaultTextSize, settings.m_DefaultTextSize ) );
textItem->SetFlags( IS_NEW | IS_MOVED );
DIALOG_LABEL_EDITOR dlg( m_frame, textItem );
if( dlg.ShowModal() != wxID_OK || textItem->GetText().IsEmpty() )
{
delete textItem;
return nullptr;
}
if( aType != LAYER_NOTES )
{
UTF8 text( textItem->GetText() );
int brace_count = 0;
int bracket_count = 0;
bool last_space = false;
UTF8 token;
for( auto chIt = text.ubegin(); chIt != text.uend(); chIt++ )
{
switch( *chIt )
{
case '{':
brace_count++;
last_space = false;
break;
case '[':
bracket_count++;
last_space = false;
break;
case '}':
brace_count = std::max( 0, brace_count - 1 );
last_space = false;
break;
case ']':
bracket_count = std::max( 0, bracket_count - 1 );
last_space = false;
break;
case ' ':
case '\n':
case '\r':
case '\t':
if( !token.empty() && bracket_count == 0 && brace_count == 0 )
{
std::unique_ptr<SCH_TEXT> nextitem( static_cast<SCH_TEXT*>( textItem->Clone() ) );
nextitem->SetText( token.wx_str() );
m_queuedTexts.push_back( std::move( nextitem ) );
token.clear();
continue;
}
// Skip leading whitespace
if( token.empty() || last_space )
continue;
last_space = true;
break;
default:
last_space = false;
break;
}
token += *chIt;
}
if( !token.empty() )
{
std::unique_ptr<SCH_TEXT> nextitem( static_cast<SCH_TEXT*>( textItem->Clone() ) );
nextitem->SetText( token.wx_str() );
m_queuedTexts.push_back( std::move( nextitem ) );
}
delete textItem;
textItem = getNextNewText();
if( !textItem )
return nullptr;
}
m_lastTextBold = textItem->IsBold();
m_lastTextItalic = textItem->IsItalic();
m_lastTextOrientation = textItem->GetLabelSpinStyle();
if( textItem->Type() == SCH_GLOBAL_LABEL_T || textItem->Type() == SCH_HIER_LABEL_T )
m_lastGlobalLabelShape = textItem->GetShape();
return textItem;
}
int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent ) int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
{ {
EDA_ITEM* item = nullptr; EDA_ITEM* item = nullptr;
@ -656,16 +802,16 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
switch( type ) switch( type )
{ {
case SCH_LABEL_T: case SCH_LABEL_T:
item = m_frame->CreateNewText( LAYER_LOCLABEL ); item = createNewText( cursorPos, LAYER_LOCLABEL );
break; break;
case SCH_HIER_LABEL_T: case SCH_HIER_LABEL_T:
item = m_frame->CreateNewText( LAYER_HIERLABEL ); item = createNewText( cursorPos, LAYER_HIERLABEL );
break; break;
case SCH_GLOBAL_LABEL_T: case SCH_GLOBAL_LABEL_T:
item = m_frame->CreateNewText( LAYER_GLOBLABEL ); item = createNewText( cursorPos, LAYER_GLOBLABEL );
break; break;
case SCH_TEXT_T: case SCH_TEXT_T:
item = m_frame->CreateNewText( LAYER_NOTES ); item = createNewText( cursorPos, LAYER_NOTES );
break; break;
case SCH_SHEET_PIN_T: case SCH_SHEET_PIN_T:
{ {
@ -721,7 +867,7 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
{ {
item->ClearFlags( IS_MOVED ); item->ClearFlags( IS_MOVED );
m_frame->AddItemToScreenAndUndoList( (SCH_ITEM*) item ); m_frame->AddItemToScreenAndUndoList( (SCH_ITEM*) item );
item = m_frame->GetNextNewText(); item = getNextNewText();
if( item ) if( item )
{ {
@ -849,7 +995,7 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
m_frame->GetCurrentSheet().Last(), static_cast<wxPoint>( cursorPos ) ); m_frame->GetCurrentSheet().Last(), static_cast<wxPoint>( cursorPos ) );
sheet->SetFlags( IS_NEW | IS_RESIZED ); sheet->SetFlags( IS_NEW | IS_RESIZED );
sheet->SetScreen( NULL ); sheet->SetScreen( NULL );
sheet->SetBorderWidth( m_frame->GetDefaultLineWidth() ); sheet->SetBorderWidth( cfg->m_Drawing.default_line_thickness );
sheet->SetBorderColor( cfg->m_Drawing.default_sheet_border_color ); sheet->SetBorderColor( cfg->m_Drawing.default_sheet_border_color );
sheet->SetBackgroundColor( cfg->m_Drawing.default_sheet_background_color ); sheet->SetBackgroundColor( cfg->m_Drawing.default_sheet_background_color );
sizeSheet( sheet, cursorPos ); sizeSheet( sheet, cursorPos );

View File

@ -58,7 +58,16 @@ public:
int DrawSheet( const TOOL_EVENT& aEvent ); int DrawSheet( const TOOL_EVENT& aEvent );
int PlaceImage( const TOOL_EVENT& aEvent ); int PlaceImage( const TOOL_EVENT& aEvent );
void SetLastBusEntryShape( char aShape ) { m_lastBusEntryShape = aShape; }
private: private:
/**
* Gets the next queued text item
* @return next SCH_TEXT* or nullptr if empty
*/
SCH_TEXT* getNextNewText();
SCH_TEXT* createNewText( const VECTOR2I& aPosition, int aType );
void sizeSheet( SCH_SHEET* aSheet, VECTOR2I aPos ); void sizeSheet( SCH_SHEET* aSheet, VECTOR2I aPos );
@ -66,7 +75,20 @@ private:
void setTransitions() override; void setTransitions() override;
private: private:
std::unique_ptr<STATUS_TEXT_POPUP> m_statusPopup; // History lists for PlaceComponent()
std::vector<COMPONENT_SELECTION> m_symbolHistoryList;
std::vector<COMPONENT_SELECTION> m_powerHistoryList;
char m_lastBusEntryShape;
PINSHEETLABEL_SHAPE m_lastGlobalLabelShape;
LABEL_SPIN_STYLE m_lastTextOrientation;
bool m_lastTextBold;
bool m_lastTextItalic;
std::deque<std::unique_ptr<SCH_TEXT>> m_queuedTexts;
std::unique_ptr<STATUS_TEXT_POPUP> m_statusPopup;
}; };
#endif /* SCH_DRAWING_TOOLS_H */ #endif /* SCH_DRAWING_TOOLS_H */

View File

@ -56,9 +56,7 @@
#include <pgm_base.h> #include <pgm_base.h>
#include <settings/settings_manager.h> #include <settings/settings_manager.h>
#include <libedit_settings.h> #include <libedit_settings.h>
#include <dialogs/dialog_edit_label.h>
char g_lastBusEntryShape = '/';
class SYMBOL_UNIT_MENU : public ACTION_MENU class SYMBOL_UNIT_MENU : public ACTION_MENU
{ {
@ -1351,12 +1349,15 @@ int SCH_EDIT_TOOL::Properties( const TOOL_EVENT& aEvent )
case SCH_LABEL_T: case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T: case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T: case SCH_HIER_LABEL_T:
if( InvokeDialogLabelEditor( m_frame, (SCH_TEXT*) item ) == wxID_OK ) {
DIALOG_LABEL_EDITOR dlg( m_frame, (SCH_TEXT*) item );
if( dlg.ShowModal() == wxID_OK )
{ {
m_toolMgr->PostEvent( EVENTS::SelectedItemsModified ); m_toolMgr->PostEvent( EVENTS::SelectedItemsModified );
m_frame->OnModify(); m_frame->OnModify();
} }
}
break; break;
case SCH_FIELD_T: case SCH_FIELD_T:
@ -1450,7 +1451,8 @@ int SCH_EDIT_TOOL::ChangeShape( const TOOL_EVENT& aEvent )
} }
} }
g_lastBusEntryShape = shape; SCH_DRAWING_TOOLS* drawingTool = m_toolMgr->GetTool<SCH_DRAWING_TOOLS>();
drawingTool->SetLastBusEntryShape( shape );
return 0; return 0;
} }

View File

@ -369,17 +369,17 @@ int SCH_LINE_WIRE_BUS_TOOL::UnfoldBus( const TOOL_EVENT& aEvent )
SCH_LINE* SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus( const wxString& aNet ) SCH_LINE* SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus( const wxString& aNet )
{ {
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); SCHEMATIC_SETTINGS& cfg = getModel<SCHEMATIC>()->Settings();
wxPoint pos = (wxPoint) getViewControls()->GetCursorPosition();
wxPoint pos = (wxPoint) getViewControls()->GetCursorPosition(); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
m_busUnfold.entry = new SCH_BUS_WIRE_ENTRY( pos, '\\' ); m_busUnfold.entry = new SCH_BUS_WIRE_ENTRY( pos, '\\' );
m_busUnfold.entry->SetParent( m_frame->GetScreen() ); m_busUnfold.entry->SetParent( m_frame->GetScreen() );
m_frame->AddToScreen( m_busUnfold.entry ); m_frame->AddToScreen( m_busUnfold.entry );
m_busUnfold.label = new SCH_LABEL( m_busUnfold.entry->m_End(), aNet ); m_busUnfold.label = new SCH_LABEL( m_busUnfold.entry->m_End(), aNet );
m_busUnfold.label->SetTextSize( wxSize( m_frame->GetDefaultTextSize(), m_busUnfold.label->SetTextSize( wxSize( cfg.m_DefaultTextSize, cfg.m_DefaultTextSize ) );
m_frame->GetDefaultTextSize() ) );
m_busUnfold.label->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT ); m_busUnfold.label->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT );
m_busUnfold.label->SetParent( m_frame->GetScreen() ); m_busUnfold.label->SetParent( m_frame->GetScreen() );
m_busUnfold.label->SetFlags( IS_NEW | IS_MOVED ); m_busUnfold.label->SetFlags( IS_NEW | IS_MOVED );