46#include <wx/settings.h>
60#define DEFAULT_FONT_NAME _( "Default Font" )
77 const std::unique_ptr< LIB_SYMBOL >& lib_symbol = aSymbol->
GetLibSymbolRef();
84 std::vector<wxString> expanded =
pin->GetStackedPinNumbers( &valid );
86 if( valid && !expanded.empty() )
88 for(
const wxString& num : expanded )
89 pins.push_back( num +
' ' +
pin->GetShownName() );
93 pins.push_back(
pin->GetNumber() +
' ' +
pin->GetShownName() );
100 wxString dbg = wxJoin( pins,
'\t' );
101 wxLogTrace(
"FOOTPRINT_CHOOSER", wxS(
"Chooser payload pins: %s" ), dbg );
111 if( !fpFilters.IsEmpty() )
134 std::vector<wxString> expanded =
pin->GetStackedPinNumbers( &valid );
136 if( valid && !expanded.empty() )
138 for(
const wxString& num : expanded )
139 pins.push_back( num +
' ' +
pin->GetShownName() );
143 pins.push_back(
pin->GetNumber() +
' ' +
pin->GetShownName() );
147 if( !pins.IsEmpty() )
149 wxString dbg = wxJoin( pins,
'\t' );
150 wxLogTrace(
"FOOTPRINT_CHOOSER", wxS(
"Chooser payload pins: %s" ), dbg );
158 if( !fpFilters.IsEmpty() )
168 LIB_SYMBOL* aSymbol, std::vector<EMBEDDED_FILES*> aFilesStack ) :
191 m_part( aSymbol->GetLibSymbolRef().get() ),
249 int mandatoryRows = 0;
257 return mandatoryRows;
263 std::vector<SCH_FIELD>::push_back( aField );
329 wxString wildCard(
_(
"Schematic Files" ) );
330 std::vector<std::string> exts;
339 m_boolAttr->SetRenderer(
new wxGridCellBoolRenderer() );
340 m_boolAttr->SetEditor(
new wxGridCellBoolEditor() );
341 m_boolAttr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
343 wxArrayString vAlignNames;
344 vAlignNames.Add(
_(
"Top" ) );
345 vAlignNames.Add(
_(
"Center" ) );
346 vAlignNames.Add(
_(
"Bottom" ) );
348 m_vAlignAttr->SetEditor(
new wxGridCellChoiceEditor( vAlignNames ) );
349 m_vAlignAttr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
351 wxArrayString hAlignNames;
352 hAlignNames.Add(
_(
"Left" ) );
353 hAlignNames.Add(
_(
"Center" ) );
354 hAlignNames.Add(
_(
"Right" ) );
356 m_hAlignAttr->SetEditor(
new wxGridCellChoiceEditor( hAlignNames ) );
357 m_hAlignAttr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
359 wxArrayString orientationNames;
360 orientationNames.Add(
_(
"Horizontal" ) );
361 orientationNames.Add(
_(
"Vertical" ) );
367 wxArrayString existingNetclasses;
370 std::vector<std::string> fontNames;
376 const std::shared_ptr<NET_SETTINGS>& settings = projectFile.
NetSettings();
378 existingNetclasses.push_back( settings->GetDefaultNetclass()->GetName() );
380 for(
const auto& [
name, netclass] : settings->GetNetclasses() )
381 existingNetclasses.push_back(
name );
385 const std::vector<wxString>* fontFiles =
nullptr;
388 fontFiles =
m_frame->GetScreen()->Schematic()->GetEmbeddedFiles()->GetFontFiles();
390 Fontconfig()->ListFonts( fontNames, std::string(
Pgm().GetLanguageTag().utf8_str() ),
395 const std::vector<wxString>* fontFiles =
m_part->GetEmbeddedFiles()->UpdateFontFiles();
399 Fontconfig()->ListFonts( fontNames, std::string(
Pgm().GetLanguageTag().utf8_str() ),
400 fontFiles, !fontFiles->empty() );
406 for(
const std::string&
name : fontNames )
420 m_eval = std::make_unique<NUMERIC_EVALUATOR>(
m_frame->GetUserUnits() );
447 field.SetParent(
nullptr );
456 GetView()->ForceRefresh();
492 return (
int) this->size();
508 if( visibleRow == aRow )
514 wxFAIL_MSG( wxT(
"Row index off end of visible row count" ) );
517 return this->at( aRow );
541 default: wxFAIL;
return wxEmptyString;
560 return aTypeName == wxGRID_VALUE_STRING;
568 return aTypeName == wxGRID_VALUE_BOOL;
588 wxGridCellAttr* attr =
nullptr;
596 attr->SetReadOnly(
true );
729 wxGridCellAttr* text_attr = attr ? attr->Clone() :
new wxGridCellAttr;
732 if( !text_attr->HasFont() )
733 font = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
735 font = text_attr->GetFont();
738 text_attr->SetFont( font );
739 text_attr->SetTextColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
755 wxGrid*
grid = GetView();
758 if(
grid->GetGridCursorRow() == aRow &&
grid->GetGridCursorCol() == aCol
759 &&
grid->IsCellEditControlShown() )
826 return _(
"Horizontal" );
828 return _(
"Vertical" );
857 return wxT(
"bad wxWidgets!" );
875 wxFAIL_MSG( wxString::Format( wxT(
"column %d doesn't hold a bool value" ), aCol ) );
886 wxString value = aValue;
889 value.Trim(
true ).Trim(
false );
895 if(
m_eval->Process( value ) )
933 if( value ==
_(
"Left" ) )
935 else if( value ==
_(
"Center" ) )
937 else if( value ==
_(
"Right" ) )
955 if( value ==
_(
"Top" ) )
957 else if( value ==
_(
"Center" ) )
959 else if( value ==
_(
"Bottom" ) )
986 if( value ==
_(
"Horizontal" ) )
988 else if( value ==
_(
"Vertical" ) )
991 wxFAIL_MSG( wxT(
"unknown orientation: " ) + value );
1000 pos.
x =
m_frame->ValueFromString( value );
1002 pos.
y =
m_frame->ValueFromString( value );
1030 wxFAIL_MSG( wxString::Format( wxT(
"column %d doesn't hold a string value" ), aCol ) );
1036 GetView()->Refresh();
1072 wxFAIL_MSG( wxString::Format( wxT(
"column %d doesn't hold a bool value" ), aCol ) );
1091 if( aValue == wxS(
"1" ) )
1095 else if( aValue == wxS(
"0" ) )
1101 wxFAIL_MSG( wxString::Format(
"string '%s' can't be converted to boolean correctly and "
1102 "will be perceived as FALSE", aValue ) );
1112 if( field.
GetId() == aFieldId )
1122 for(
int ii = 0; ii < (int) this->size(); ++ii )
1124 if( this->at( ii ).GetId() == aFieldId )
1134 back().SetParent(
m_part );
1156 std::vector<SCH_FIELD>::erase( begin() + aRow );
1162 wxCHECK( a < this->size() && b < this->size(), );
1164 std::swap( at( a ), at( b ) );
1197 _(
"Browse for footprint" ) );
1198 menu.AppendSeparator();
1205 _(
"Show datasheet in browser" ) );
1206 menu.AppendSeparator();
1222 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
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 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)
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.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
Define a library symbol object.
wxArrayString GetFPFilters() const
std::vector< SCH_PIN * > GetGraphicalPins(int aUnit=0, int aBodyStyle=0) const
Graphical pins: Return schematic pin objects as drawn (unexpanded), filtered by unit/body.
The backing store for a PROJECT, in JSON format.
std::shared_ptr< NET_SETTINGS > & NetSettings()
static SEARCH_STACK * SchSearchS(PROJECT *aProject)
Accessor for Eeschema search stack.
virtual PROJECT_FILE & GetProjectFile() const
These are loaded from Eeschema settings but then overwritten by the project settings.
TEMPLATES m_TemplateFieldNames
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
Schematic editor (Eeschema) main window.
GR_TEXT_V_ALIGN_T GetEffectiveVertJustify() const
bool HasHypertext() const override
Indicates that the item has at least one hypertext action.
bool IsHorizJustifyFlipped() const
Return whether the field will be rendered with the horizontal justification inverted due to rotation ...
bool IsVertJustifyFlipped() const
virtual const wxString & GetText() const override
Return the string associated with the text object.
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)
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.
wxGridCellAttr * enhanceAttr(wxGridCellAttr *aInputAttr, int aRow, int aCol, wxGridCellAttr::wxAttrKind aKind)
void SetupColumnAutosizer(int aFlexibleCol)
Set autosize behaviour using wxFormBuilder column widths as minimums, with a single specified growabl...
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.
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...
@ FOOTPRINT
Field Name Module PCB, i.e. "16DIP300".
@ DATASHEET
name of datasheet
@ 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.