KiCad PCB EDA Suite
dialog_lib_shape_properties.cpp
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2006-2021 KiCad Developers, see AUTHORS.txt for contributors.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, you may find one here:
18  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19  * or you may search the http://www.gnu.org website for the version 2 license,
20  * or you may write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22  */
23 
24 #include <lib_item.h>
26 #include <symbol_edit_frame.h>
27 #include <confirm.h>
28 
29 
31  LIB_ITEM* aItem ) :
33  m_frame( aParent ),
34  m_item( aItem ),
35  m_lineWidth( aParent, m_widthLabel, m_widthCtrl, m_widthUnits, true )
36 {
37  SetTitle( aItem->GetTypeName() + wxT( " " ) + GetTitle() );
38 
40 
41  // Required under wxGTK if we want to dismiss the dialog with the ESC key
42  SetFocus();
43 
44  if( !aParent->IsSymbolEditable() || aParent->IsSymbolAlias() )
45  {
46  m_sdbSizerCancel->SetDefault();
47  m_sdbSizerOK->SetLabel( _( "Read Only" ) );
48  m_sdbSizerOK->Enable( false );
49  }
50  else
51  {
52  m_sdbSizerOK->SetDefault();
53  }
54 
55  // Now all widgets have the size fixed, call FinishDialogSettings
57 }
58 
59 
61 {
62  if( !wxDialog::TransferDataToWindow() )
63  return false;
64 
65  LIB_SYMBOL* symbol = m_item->GetParent();
66  EDA_SHAPE* shape = dynamic_cast<EDA_SHAPE*>( m_item );
67 
68  if( shape )
69  m_lineWidth.SetValue( shape->GetWidth() );
70 
71  m_checkApplyToAllUnits->SetValue( m_item->GetUnit() == 0 );
72  m_checkApplyToAllUnits->Enable( symbol && symbol->GetUnitCount() > 1 );
73  m_checkApplyToAllConversions->SetValue( m_item->GetConvert() == 0 );
74 
75  bool enblConvOptStyle = symbol && symbol->HasConversion();
76 
77  // if a symbol contains no graphic items, symbol->HasConversion() returns false.
78  // but when creating a new symbol, with DeMorgan option set, the ApplyToAllConversions
79  // must be enabled even if symbol->HasConversion() returns false in order to be able
80  // to create graphic items shared by all body styles
81  if( m_frame->GetShowDeMorgan() )
82  enblConvOptStyle = true;
83 
84  m_checkApplyToAllConversions->Enable( enblConvOptStyle );
85 
86  if( shape )
87  m_fillCtrl->SetSelection( static_cast<int>( shape->GetFillType() ) - 1 );
88 
89  m_fillCtrl->Enable( shape != nullptr );
90 
91  return true;
92 }
93 
94 
96 {
97  if( !wxDialog::TransferDataFromWindow() )
98  return false;
99 
100  EDA_SHAPE* shape = dynamic_cast<EDA_SHAPE*>( m_item );
101 
102  if( shape )
103  shape->SetFillMode( static_cast<FILL_T>( std::max( m_fillCtrl->GetSelection() + 1, 1 ) ) );
104 
105  if( shape )
106  shape->SetWidth( m_lineWidth.GetValue() );
107 
109  m_item->SetConvert( 0 );
110  else
112 
113  if( GetApplyToAllUnits() )
114  m_item->SetUnit( 0 );
115  else
116  m_item->SetUnit( m_frame->GetUnit() );
117 
118  return true;
119 }
120 
121 
123 {
124  return m_checkApplyToAllConversions->IsChecked();
125 }
126 
127 
129 {
130  return m_checkApplyToAllUnits->IsChecked();
131 }
132 
Class DIALOG_LIB_SHAPE_PROPERTIES_BASE.
int GetWidth() const
Definition: eda_shape.h:89
This file is part of the common library.
DIALOG_LIB_SHAPE_PROPERTIES(SYMBOL_EDIT_FRAME *parent, LIB_ITEM *aItem)
Constructor.
Define a library symbol object.
Definition: lib_symbol.h:96
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
Definition: dialog_shim.h:97
bool GetShowDeMorgan() const
The base class for drawable items used by schematic library symbols.
Definition: lib_item.h:61
virtual wxString GetTypeName() const =0
Provide a user-consumable name of the object type.
bool HasConversion() const
Test if symbol has more than one body conversion type (DeMorgan).
int GetUnit() const
Definition: lib_item.h:258
bool IsSymbolAlias() const
Restore the empty editor screen, without any symbol or library selected.
int GetUnitCount() const override
For items with units, return the number of units.
#define _(s)
void SetWidth(int aWidth)
Definition: eda_shape.h:88
int GetConvert() const
Definition: lib_item.h:261
void SetConvert(int aConvert)
Definition: lib_item.h:260
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
LIB_SYMBOL * GetParent() const
Definition: lib_item.h:156
void SetUnit(int aUnit)
Definition: lib_item.h:257
bool IsSymbolEditable() const
Test if a symbol is loaded and can be edited.
virtual void SetValue(int aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion.
virtual long long int GetValue()
Return the current value in Internal Units.
void SetFillMode(FILL_T aFill)
Definition: eda_shape.h:78
FILL_T GetFillType() const
Definition: eda_shape.h:79
The symbol library editor main window.