Add a checkbox for LIB_SHAPE borders. (We already have them for LIB_TEXTBOXes.)

Fixes https://gitlab.com/kicad/code/kicad/issues/10365
This commit is contained in:
Jeff Young 2022-02-06 18:44:03 +00:00
parent 0ffa1288ee
commit 79c7d55a40
5 changed files with 147 additions and 18 deletions

View File

@ -24,6 +24,7 @@
#include <lib_item.h>
#include <dialog_lib_shape_properties.h>
#include <symbol_edit_frame.h>
#include <symbol_editor_settings.h>
#include <confirm.h>
#include <lib_shape.h>
#include <widgets/color_swatch.h>
@ -71,8 +72,15 @@ bool DIALOG_LIB_SHAPE_PROPERTIES::TransferDataToWindow()
EDA_SHAPE* shape = dynamic_cast<EDA_SHAPE*>( m_item );
if( shape )
m_checkBorder->SetValue( shape->GetWidth() >= 0 );
if( shape && shape->GetWidth() >= 0 )
m_lineWidth.SetValue( shape->GetWidth() );
m_checkBorder->Enable( shape );
m_lineWidth.Enable( shape && shape->GetWidth() >= 0 );
m_helpLabel->Enable( shape && shape->GetWidth() >= 0 );
m_privateCheckbox->SetValue( m_item->IsPrivate() );
m_checkApplyToAllUnits->SetValue( m_item->GetUnit() == 0 );
m_checkApplyToAllUnits->Enable( symbol && symbol->GetUnitCount() > 1 );
@ -168,6 +176,20 @@ bool DIALOG_LIB_SHAPE_PROPERTIES::TransferDataFromWindow()
if( shape )
{
STROKE_PARAMS stroke = shape->GetStroke();
if( m_checkBorder->GetValue() )
{
if( !m_lineWidth.IsIndeterminate() )
stroke.SetWidth( m_lineWidth.GetValue() );
}
else
{
stroke.SetWidth( -1 );
}
shape->SetStroke( stroke );
if( m_rbFillOutline->GetValue() )
shape->SetFillMode( FILL_T::FILLED_SHAPE );
else if( m_rbFillBackground->GetValue() )
@ -178,10 +200,6 @@ bool DIALOG_LIB_SHAPE_PROPERTIES::TransferDataFromWindow()
shape->SetFillMode( FILL_T::NO_FILL );
shape->SetFillColor( m_colorSwatch->GetSwatchColor() );
STROKE_PARAMS stroke = shape->GetStroke();
stroke.SetWidth( m_lineWidth.GetValue() );
shape->SetStroke( stroke );
}
m_item->SetPrivate( m_privateCheckbox->GetValue() );
@ -200,6 +218,18 @@ bool DIALOG_LIB_SHAPE_PROPERTIES::TransferDataFromWindow()
}
void DIALOG_LIB_SHAPE_PROPERTIES::onBorderChecked( wxCommandEvent& event )
{
bool border = m_checkBorder->GetValue();
if( border && m_lineWidth.GetValue() < 0 )
m_lineWidth.SetValue( Mils2iu( m_frame->libeditconfig()->m_Defaults.line_width ) );
m_lineWidth.Enable( border );
m_helpLabel->Enable( border );
}
bool DIALOG_LIB_SHAPE_PROPERTIES::GetApplyToAllConversions()
{
return m_checkApplyToAllConversions->IsChecked();

View File

@ -50,6 +50,7 @@ public:
private:
void onFill(wxCommandEvent &event) override;
void onBorderChecked( wxCommandEvent& event ) override;
void onSwatch( wxCommandEvent& aEvent );
private:

View File

@ -12,6 +12,7 @@
///////////////////////////////////////////////////////////////////////////
BEGIN_EVENT_TABLE( DIALOG_LIB_SHAPE_PROPERTIES_BASE, DIALOG_SHIM )
EVT_CHECKBOX( wxID_ANY, DIALOG_LIB_SHAPE_PROPERTIES_BASE::_wxFB_onBorderChecked )
EVT_RADIOBUTTON( NO_FILL, DIALOG_LIB_SHAPE_PROPERTIES_BASE::_wxFB_onFill )
EVT_RADIOBUTTON( FILLED_SHAPE, DIALOG_LIB_SHAPE_PROPERTIES_BASE::_wxFB_onFill )
EVT_RADIOBUTTON( FILLED_WITH_BG_BODYCOLOR, DIALOG_LIB_SHAPE_PROPERTIES_BASE::_wxFB_onFill )
@ -28,15 +29,18 @@ DIALOG_LIB_SHAPE_PROPERTIES_BASE::DIALOG_LIB_SHAPE_PROPERTIES_BASE( wxWindow* pa
wxBoxSizer* dlgBorderSizer;
dlgBorderSizer = new wxBoxSizer( wxVERTICAL );
m_checkBorder = new wxCheckBox( this, wxID_ANY, _("Border"), wxDefaultPosition, wxDefaultSize, 0 );
dlgBorderSizer->Add( m_checkBorder, 0, wxTOP|wxRIGHT|wxLEFT, 3 );
wxBoxSizer* bSizerLineWidth;
bSizerLineWidth = new wxBoxSizer( wxHORIZONTAL );
m_widthLabel = new wxStaticText( this, wxID_ANY, _("Line width:"), wxDefaultPosition, wxDefaultSize, 0 );
m_widthLabel = new wxStaticText( this, wxID_ANY, _("Border width:"), wxDefaultPosition, wxDefaultSize, 0 );
m_widthLabel->Wrap( -1 );
bSizerLineWidth->Add( m_widthLabel, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3 );
m_widthCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
bSizerLineWidth->Add( m_widthCtrl, 1, wxALIGN_CENTER_VERTICAL|wxALL, 3 );
bSizerLineWidth->Add( m_widthCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3 );
m_widthUnits = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_widthUnits->Wrap( -1 );
@ -45,9 +49,12 @@ DIALOG_LIB_SHAPE_PROPERTIES_BASE::DIALOG_LIB_SHAPE_PROPERTIES_BASE( wxWindow* pa
dlgBorderSizer->Add( bSizerLineWidth, 0, wxEXPAND, 5 );
m_helpLabel = new wxStaticText( this, wxID_ANY, _("Set width to 0 to use Schematic default symbol line width."), wxDefaultPosition, wxDefaultSize, 0 );
m_helpLabel->Wrap( 333 );
dlgBorderSizer->Add( m_helpLabel, 0, wxALL, 5 );
m_helpLabel = new wxStaticText( this, wxID_ANY, _("Set border width to 0 to use Schematic default symbol line width."), wxDefaultPosition, wxDefaultSize, 0 );
m_helpLabel->Wrap( 320 );
dlgBorderSizer->Add( m_helpLabel, 0, wxALL, 3 );
dlgBorderSizer->Add( 0, 3, 0, 0, 5 );
wxStaticBoxSizer* bSizerFill;
bSizerFill = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Fill Style") ), wxVERTICAL );
@ -78,6 +85,9 @@ DIALOG_LIB_SHAPE_PROPERTIES_BASE::DIALOG_LIB_SHAPE_PROPERTIES_BASE( wxWindow* pa
dlgBorderSizer->Add( bSizerFill, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
dlgBorderSizer->Add( 0, 3, 0, 0, 5 );
m_privateCheckbox = new wxCheckBox( this, wxID_ANY, _("Private to Symbol Editor"), wxDefaultPosition, wxDefaultSize, 0 );
dlgBorderSizer->Add( m_privateCheckbox, 0, wxALL, 3 );

View File

@ -67,11 +67,76 @@
<property name="name">dlgBorderSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<object class="sizeritem" expanded="1">
<property name="border">3</property>
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxCheckBox" 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="checked">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">Border</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_checkBorder</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">; ; forward_declare</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="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnCheckBox">onBorderChecked</event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="0">
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizerLineWidth</property>
<property name="orient">wxHORIZONTAL</property>
@ -108,7 +173,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Line width:</property>
<property name="label">Border width:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
@ -140,7 +205,7 @@
<object class="sizeritem" expanded="0">
<property name="border">3</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
<property name="proportion">1</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
@ -265,7 +330,7 @@
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="border">3</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="0">
@ -296,7 +361,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Set width to 0 to use Schematic default symbol line width.</property>
<property name="label">Set border width to 0 to use Schematic default symbol line width.</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
@ -322,7 +387,17 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">333</property>
<property name="wrap">320</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">0</property>
<object class="spacer" expanded="1">
<property name="height">3</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="1">
@ -693,6 +768,16 @@
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">0</property>
<object class="spacer" expanded="1">
<property name="height">3</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">3</property>
<property name="flag">wxALL</property>

View File

@ -14,17 +14,17 @@ class COLOR_SWATCH;
#include "dialog_shim.h"
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/checkbox.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <wx/sizer.h>
#include <wx/radiobut.h>
#include <wx/gbsizer.h>
#include <wx/statbox.h>
#include <wx/checkbox.h>
#include <wx/statline.h>
#include <wx/button.h>
#include <wx/dialog.h>
@ -40,6 +40,7 @@ class DIALOG_LIB_SHAPE_PROPERTIES_BASE : public DIALOG_SHIM
private:
// Private event handlers
void _wxFB_onBorderChecked( wxCommandEvent& event ){ onBorderChecked( event ); }
void _wxFB_onFill( wxCommandEvent& event ){ onFill( event ); }
@ -52,6 +53,7 @@ class DIALOG_LIB_SHAPE_PROPERTIES_BASE : public DIALOG_SHIM
FILLED_WITH_COLOR
};
wxCheckBox* m_checkBorder;
wxStaticText* m_widthLabel;
wxTextCtrl* m_widthCtrl;
wxStaticText* m_widthUnits;
@ -70,6 +72,7 @@ class DIALOG_LIB_SHAPE_PROPERTIES_BASE : public DIALOG_SHIM
wxButton* m_sdbSizerCancel;
// Virtual event handlers, overide them in your derived class
virtual void onBorderChecked( wxCommandEvent& event ) { event.Skip(); }
virtual void onFill( wxCommandEvent& event ) { event.Skip(); }