47#include <wx/settings.h>
61#define DEFAULT_FONT_NAME _( "Default Font" )
78 const std::unique_ptr< LIB_SYMBOL >& lib_symbol = aSymbol->
GetLibSymbolRef();
82 for(
SCH_PIN*
pin : lib_symbol->GetPins( 0 , 1 ) )
83 pins.push_back(
pin->GetNumber() +
' ' +
pin->GetShownName() );
93 wxArrayString fpFilters = lib_symbol->GetFPFilters();
95 if( !fpFilters.IsEmpty() )
116 pins.push_back(
pin->GetNumber() +
' ' +
pin->GetShownName() );
118 if( !pins.IsEmpty() )
125 if( !fpFilters.IsEmpty() )
135 LIB_SYMBOL* aSymbol, std::vector<EMBEDDED_FILES*> aFilesStack ) :
140 m_filesStack( aFilesStack ),
141 m_symbolNetlist(
netList( aSymbol ) ),
158 m_part( aSymbol->GetLibSymbolRef().get() ),
159 m_symbolNetlist(
netList( aSymbol, aFrame->GetCurrentSheet() ) ),
216 int mandatoryRows = 0;
224 return mandatoryRows;
230 std::vector<SCH_FIELD>::push_back( aField );
296 wxString wildCard(
_(
"Schematic Files" ) );
297 std::vector<std::string> exts;
306 m_boolAttr->SetRenderer(
new wxGridCellBoolRenderer() );
307 m_boolAttr->SetEditor(
new wxGridCellBoolEditor() );
308 m_boolAttr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
310 wxArrayString vAlignNames;
311 vAlignNames.Add(
_(
"Top" ) );
312 vAlignNames.Add(
_(
"Center" ) );
313 vAlignNames.Add(
_(
"Bottom" ) );
315 m_vAlignAttr->SetEditor(
new wxGridCellChoiceEditor( vAlignNames ) );
316 m_vAlignAttr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
318 wxArrayString hAlignNames;
319 hAlignNames.Add(
_(
"Left" ) );
320 hAlignNames.Add(
_(
"Center" ) );
321 hAlignNames.Add(
_(
"Right" ) );
323 m_hAlignAttr->SetEditor(
new wxGridCellChoiceEditor( hAlignNames ) );
324 m_hAlignAttr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
326 wxArrayString orientationNames;
327 orientationNames.Add(
_(
"Horizontal" ) );
328 orientationNames.Add(
_(
"Vertical" ) );
334 wxArrayString existingNetclasses;
337 std::vector<std::string> fontNames;
343 const std::shared_ptr<NET_SETTINGS>& settings = projectFile.
NetSettings();
345 existingNetclasses.push_back( settings->GetDefaultNetclass()->GetName() );
347 for(
const auto& [
name, netclass] : settings->GetNetclasses() )
348 existingNetclasses.push_back(
name );
352 const std::vector<wxString>* fontFiles =
nullptr;
357 Fontconfig()->ListFonts( fontNames, std::string(
Pgm().GetLanguageTag().utf8_str() ),
366 Fontconfig()->ListFonts( fontNames, std::string(
Pgm().GetLanguageTag().utf8_str() ),
367 fontFiles, !fontFiles->empty() );
373 for(
const std::string&
name : fontNames )
412 field.SetParent(
nullptr );
421 GetView()->ForceRefresh();
457 return (
int) this->size();
473 if( visibleRow == aRow )
479 wxFAIL_MSG( wxT(
"Row index off end of visible row count" ) );
482 return this->at( aRow );
506 default: wxFAIL;
return wxEmptyString;
525 return aTypeName == wxGRID_VALUE_STRING;
533 return aTypeName == wxGRID_VALUE_BOOL;
553 wxGridCellAttr* attr =
nullptr;
561 attr->SetReadOnly(
true );
572 if( field.
GetId() == FIELD_T::REFERENCE )
577 else if( field.
GetId() == FIELD_T::VALUE )
582 else if( field.
GetId() == FIELD_T::FOOTPRINT )
598 else if( field.
GetId() == FIELD_T::DATASHEET )
603 else if( field.
GetId() == FIELD_T::SHEET_NAME )
608 else if( field.
GetId() == FIELD_T::SHEET_FILENAME )
694 wxGridCellAttr* text_attr = attr ? attr->Clone() :
new wxGridCellAttr;
697 if( !text_attr->HasFont() )
698 font = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
700 font = text_attr->GetFont();
703 text_attr->SetFont( font );
704 text_attr->SetTextColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
720 wxGrid*
grid = GetView();
723 if(
grid->GetGridCursorRow() == aRow &&
grid->GetGridCursorCol() == aCol
724 &&
grid->IsCellEditControlShown() )
791 return _(
"Horizontal" );
793 return _(
"Vertical" );
822 return wxT(
"bad wxWidgets!" );
840 wxFAIL_MSG( wxString::Format( wxT(
"column %d doesn't hold a bool value" ), aCol ) );
851 wxString value = aValue;
860 if(
m_eval->Process( value ) )
905 if( value ==
_(
"Left" ) )
907 else if( value ==
_(
"Center" ) )
909 else if( value ==
_(
"Right" ) )
927 if( value ==
_(
"Top" ) )
929 else if( value ==
_(
"Center" ) )
931 else if( value ==
_(
"Bottom" ) )
959 if( value ==
_(
"Horizontal" ) )
961 else if( value ==
_(
"Vertical" ) )
964 wxFAIL_MSG( wxT(
"unknown orientation: " ) + value );
1003 wxFAIL_MSG( wxString::Format( wxT(
"column %d doesn't hold a string value" ), aCol ) );
1009 GetView()->Refresh();
1045 wxFAIL_MSG( wxString::Format( wxT(
"column %d doesn't hold a bool value" ), aCol ) );
1064 if( aValue == wxS(
"1" ) )
1068 else if( aValue == wxS(
"0" ) )
1074 wxFAIL_MSG( wxString::Format(
"string '%s' can't be converted to boolean correctly and "
1075 "will be perceived as FALSE", aValue ) );
1085 if( field.
GetId() == aFieldId )
1095 for(
int ii = 0; ii < (int) this->size(); ++ii )
1097 if( this->at( ii ).GetId() == aFieldId )
1107 back().SetParent(
m_part );
1129 std::vector<SCH_FIELD>::erase( begin() + aRow );
1135 wxCHECK( a < this->size() && b < this->size(), );
1137 std::swap( at( a ), at( b ) );
1170 _(
"Browse for footprint" ) );
1171 menu.AppendSeparator();
1178 _(
"Show datasheet in browser" ) );
1179 menu.AppendSeparator();
1195 if( frame->ShowModal( &fpid,
m_dlg ) )
Dialog helper object to sit in the inheritance tree between wxDialog and any class written by wxFormB...
bool IsHorizontal() const
FRAME_T GetFrameType() const
virtual void SetParent(EDA_ITEM *aParent)
int GetTextHeight() const
void SetTextColor(const COLOR4D &aColor)
const VECTOR2I & GetTextPos() const
COLOR4D GetTextColor() const
const EDA_ANGLE & GetTextAngle() const
void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
virtual const wxString & GetText() const
Return the string associated with the text object.
virtual bool IsVisible() const
void SetTextPos(const VECTOR2I &aPoint)
KIFONT::FONT * GetFont() const
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
virtual void SetVisible(bool aVisible)
static GR_TEXT_H_ALIGN_T MapHorizJustify(int aHorizJustify)
void SetBold(bool aBold)
Set the text to be bold - this will also update the font if needed.
static GR_TEXT_V_ALIGN_T MapVertJustify(int aVertJustify)
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
void SetItalic(bool aItalic)
Set the text to be italic - this will also update the font if needed.
void SetFont(KIFONT::FONT *aFont)
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
const std::vector< wxString > * UpdateFontFiles()
Helper function to get a list of fonts for fontconfig to add to the library.
const std::vector< wxString > * GetFontFiles() const
If we just need the cached version of the font files, we can use this function which is const and wil...
wxGridCellAttr * GetAttr(int aRow, int aCol, wxGridCellAttr::wxAttrKind aKind) override
std::vector< bool > m_isInherited
bool IsInherited(size_t aRow) const
SCH_FIELD * GetField(FIELD_T aFieldId)
wxString StringFromBool(bool aValue) const
bool GetValueAsBool(int aRow, int aCol) override
FIELD_VALIDATOR m_fieldNameValidator
bool CanSetValueAs(int aRow, int aCol, const wxString &aTypeName) override
void initGrid(WX_GRID *aGrid)
wxGridCellAttr * m_fieldNameAttr
int getColumnCount() const
int GetNumberRows() override
void push_back(const SCH_FIELD &field)
wxGridCellAttr * m_readOnlyAttr
int GetMandatoryRowCount() const
FIELDS_GRID_TABLE(DIALOG_SHIM *aDialog, SCH_BASE_FRAME *aFrame, WX_GRID *aGrid, LIB_SYMBOL *aSymbol, std::vector< EMBEDDED_FILES * > aFilesStack={})
FIELD_VALIDATOR m_urlValidator
~FIELDS_GRID_TABLE() override
bool CanGetValueAs(int aRow, int aCol, const wxString &aTypeName) override
wxGridCellAttr * m_colorAttr
wxGridCellAttr * m_nonUrlAttr
bool EraseRow(size_t row)
wxGridCellAttr * m_referenceAttr
FIELD_VALIDATOR m_referenceValidator
FIELD_VALIDATOR m_valueValidator
std::map< std::pair< int, int >, wxString > m_evalOriginal
int getVisibleRowCount() const
wxGridCellAttr * m_footprintAttr
wxGridCellAttr * m_boolAttr
std::vector< EMBEDDED_FILES * > m_filesStack
int GetFieldRow(FIELD_T aFieldId)
bool BoolFromString(const wxString &aValue) const
wxGridCellAttr * m_fontAttr
wxGridCellAttr * m_urlAttr
wxGridCellAttr * m_valueAttr
wxGridCellAttr * m_hAlignAttr
void AddInheritedField(const SCH_FIELD &aParent)
wxGridCellAttr * m_orientationAttr
void SetValue(int aRow, int aCol, const wxString &aValue) override
wxGridCellAttr * m_vAlignAttr
wxGridCellAttr * m_filepathAttr
SCH_FIELD & getField(int aRow)
wxGridCellAttr * m_netclassAttr
void SetValueAsBool(int aRow, int aCol, bool aValue) override
wxString GetValue(int aRow, int aCol) override
void SwapRows(size_t a, size_t b)
void onUnitsChanged(wxCommandEvent &aEvent)
std::unique_ptr< NUMERIC_EVALUATOR > m_eval
std::vector< SCH_FIELD > m_parentFields
FIELD_VALIDATOR m_nonUrlValidator
FIELD_VALIDATOR m_filepathValidator
wxString GetColLabelValue(int aCol) override
void showPopupMenu(wxMenu &menu, wxGridEvent &aEvent) override
int getFieldRow(FIELD_T aFieldId)
std::vector< EMBEDDED_FILES * > m_filesStack
void doPopupSelection(wxCommandEvent &event) override
Editor for wxGrid cells that adds a file/folder browser to the grid input field.
This class works around a bug in wxGrid where the first keystroke doesn't get sent through the valida...
virtual void SetValidator(const wxValidator &validator) override
virtual void doPopupSelection(wxCommandEvent &event)
virtual void showPopupMenu(wxMenu &menu, wxGridEvent &aEvent)
WX_GRID * m_grid
I don't own the grid, but he owns me.
static FONT * GetFont(const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false, const std::vector< wxString > *aEmbeddedFiles=nullptr, bool aForDrawingSheet=false)
const wxString & GetName() const
wxString ToCSSString() const
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
Define a library symbol object.
std::vector< SCH_PIN * > GetPins(int aUnit, int aBodyStyle) const
Return a list of pin object pointers from the draw item list.
bool IsPower() const override
wxArrayString GetFPFilters() const
EMBEDDED_FILES * GetEmbeddedFiles() override
The backing store for a PROJECT, in JSON format.
SCHEMATIC_SETTINGS * m_SchematicSettings
std::shared_ptr< NET_SETTINGS > & NetSettings()
static SEARCH_STACK * SchSearchS(PROJECT *aProject)
Accessor for Eeschema search stack.
virtual const wxString GetProjectPath() const
Return the full path of the project.
virtual PROJECT_FILE & GetProjectFile() const
These are loaded from Eeschema settings but then overwritten by the project settings.
TEMPLATES m_TemplateFieldNames
EMBEDDED_FILES * GetEmbeddedFiles() override
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
Schematic editor (Eeschema) main window.
GR_TEXT_V_ALIGN_T GetEffectiveVertJustify() const
bool IsHypertext() const override
Allow items to support hypertext actions when hovered/clicked.
bool IsHorizJustifyFlipped() const
Return whether the field will be rendered with the horizontal justification inverted due to rotation ...
bool IsVertJustifyFlipped() const
void SetCanAutoplace(bool aCanPlace)
wxString GetCanonicalName() const
Get a non-language-specific name for a field which can be used for storage, variable look-up,...
GR_TEXT_H_ALIGN_T GetEffectiveHorizJustify() const
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
void SetName(const wxString &aName)
bool CanAutoplace() const
void SetText(const wxString &aText) override
void OnScintillaCharAdded(SCINTILLA_TRICKS *aScintillaTricks, wxStyledTextEvent &aEvent) const
void SetNameShown(bool aShown=true)
void SetPrivate(bool aPrivate)
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
static const wxString GetDefaultFieldName(const wxString &aName, bool aUseDefaultName)
SCHEMATIC * Schematic() const
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
Add cut/copy/paste, dark theme, autocomplete and brace highlighting to a wxStyleTextCtrl instance.
Look for files in a number of paths.
const TEMPLATE_FIELDNAME * GetFieldName(const wxString &aName)
Search for aName in the template field name list.
EDA_UNITS GetUserUnits() const
wxString StringFromValue(double aValue, bool aAddUnitLabel=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
Converts aValue in internal units into a united string.
int ValueFromString(const wxString &aTextValue, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
Converts aTextValue in aUnits to internal units used by the frame.
wxGridCellAttr * enhanceAttr(wxGridCellAttr *aInputAttr, int aRow, int aCol, wxGridCellAttr::wxAttrKind aKind)
wxString EnsureFileExtension(const wxString &aFilename, const wxString &aExtension)
It's annoying to throw up nag dialogs when the extension isn't right.
static constexpr EDA_ANGLE ANGLE_VERTICAL
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
bool GetAssociatedDocument(wxWindow *aParent, const wxString &aDocName, PROJECT *aProject, SEARCH_STACK *aPaths, std::vector< EMBEDDED_FILES * > aFilesStack)
Open a document (file) with the suitable browser.
This file is part of the common library.
#define DEFAULT_FONT_NAME
static wxString netList(SCH_SYMBOL *aSymbol, SCH_SHEET_PATH &aSheetPath)
@ FDC_SYMBOL_EDITOR_COUNT
FONTCONFIG * Fontconfig()
@ FRAME_FOOTPRINT_CHOOSER
@ GRIDTRICKS_FIRST_CLIENT_ID
static const std::string KiCadSchematicFileExtension
@ USER
The main config directory (e.g. ~/.config/kicad/)
PGM_BASE & Pgm()
The global program "get" accessor.
Definitions of control validators for schematic dialogs.
wxString UnescapeString(const wxString &aSource)
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
Hold a name of a symbol's field, field value, and default visibility.
Definition for symbol library class.
wxString GetDefaultFieldName(FIELD_T aFieldId, bool aTranslateForHI)
Return a default symbol field name for a mandatory field type.
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
@ REFERENCE
Field Reference of part, i.e. "IC21".
@ VALUE
Field Value of part, i.e. "3.3K".
GR_TEXT_H_ALIGN_T
This is API surface mapped to common.types.HorizontalAlignment.
@ GR_TEXT_H_ALIGN_INDETERMINATE
GR_TEXT_V_ALIGN_T
This is API surface mapped to common.types.VertialAlignment.
@ GR_TEXT_V_ALIGN_INDETERMINATE
#define INDETERMINATE_STATE
Used for holding indeterminate values, such as with multiple selections holding different values or c...
Custom text control validator definitions.
VECTOR2< int32_t > VECTOR2I
wxString AddFileExtListToFilter(const std::vector< std::string > &aExts)
Build the wildcard extension file dialog wildcard filter to add to the base message dialog.
Definition of file extensions used in Kicad.