51#include <wx/textdlg.h>
52#include <wx/filedlg.h>
62#define COLUMN_MARGIN 3
64#define COLUMN_MARGIN 15
80 wxDataViewListCtrl* aFieldsCtrl,
94 _(
"Browse for footprint" ) );
95 menu.AppendSeparator();
100 _(
"Show datasheet in browser" ) );
101 menu.AppendSeparator();
112 wxString fpid =
m_grid->GetCellValue(
m_grid->GetGridCursorRow(),
123 wxString datasheet_uri =
m_grid->GetCellValue(
m_grid->GetGridCursorRow(),
145 for(
int row = 0; row <
m_fieldsCtrl->GetItemCount(); row++ )
167 m_lastSelectedBomPreset( nullptr ), m_parent( parent ),
168 m_schSettings( parent->Schematic().Settings() )
187 m_fieldsCtrl->AppendTextColumn(
_(
"Field" ), wxDATAVIEW_CELL_INERT, 0, wxALIGN_LEFT, 0 );
188 m_fieldsCtrl->AppendTextColumn(
_(
"Label" ), wxDATAVIEW_CELL_EDITABLE, 0, wxALIGN_LEFT, 0 );
189 m_fieldsCtrl->AppendToggleColumn(
_(
"Show" ), wxDATAVIEW_CELL_ACTIVATABLE, 0,
191 m_fieldsCtrl->AppendToggleColumn(
_(
"Group By" ), wxDATAVIEW_CELL_ACTIVATABLE, 0,
196 m_fieldsCtrl->AppendTextColumn(
_(
"Name" ), wxDATAVIEW_CELL_INERT, 0, wxALIGN_LEFT, 0 );
212 m_filter->SetDescriptiveText(
_(
"Filter" ) );
228 for(
int row = 0; row <
m_fieldsCtrl->GetItemCount(); ++row )
251 m_grid->UseNativeColHeader(
true );
255 m_grid->SetSelectionMode( wxGrid::wxGridSelectCells );
262 m_grid->SetDefaultRowSize(
m_grid->GetDefaultRowSize() + 4 );
301 case SCOPE::SCOPE_SHEET_RECURSIVE:
m_radioRecursive->SetValue(
true );
break;
309 m_grid->Connect( wxEVT_GRID_COL_SORT,
311 m_grid->Connect( wxEVT_GRID_COL_MOVE,
325 wxGridCellAttr* attr =
new wxGridCellAttr;
326 attr->SetReadOnly(
false );
332 m_grid->SetColAttr( aCol, attr );
337 m_grid->SetColAttr( aCol, attr );
344 m_grid->SetColAttr( aCol, attr );
349 m_grid->SetColAttr( aCol, attr );
350 m_grid->SetColFormatNumber( aCol );
354 attr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
355 m_grid->SetColAttr( aCol, attr );
356 m_grid->SetColFormatBool( aCol );
361 m_grid->SetColAttr( aCol, attr );
365 attr->SetEditor(
m_grid->GetDefaultEditor() );
366 m_grid->SetColAttr( aCol, attr );
367 m_grid->SetColFormatCustom( aCol, wxGRID_VALUE_STRING );
375 wxSize defaultDlgSize = ConvertDialogToPixels( wxSize( 600, 300 ) );
378 m_grid->AutoSizeColumns(
false );
380 bool sortAscending =
true;
382 for(
int col = 0; col <
m_grid->GetNumberCols(); ++col )
418 int maxWidth = defaultDlgSize.x / 3;
420 m_grid->SetColSize( col,
Clamp( 100, textWidth, maxWidth ) );
430 m_grid->SetSortingColumn( sortCol, sortAscending );
437 m_grid->Disconnect( wxEVT_GRID_COL_SORT,
440 m_grid->Disconnect( wxEVT_GRID_COL_SORT,
445 m_grid->PopEventHandler(
true );
453 if( !wxDialog::TransferDataFromWindow() )
463 if( selection.GetSize() == 1 )
482 if( ref.GetSymbol() == symbol )
507 m_grid->GoToCell( row, valueCol );
509 m_grid->GoToCell( row, refCol );
510 else if( anyCol != -1 )
511 m_grid->GoToCell( row, anyCol );
532 if( !wxDialog::TransferDataFromWindow() )
546 commit.
Push( wxS(
"Symbol Fields Table Edit" ) );
560 bool show,
bool groupBy,
bool addedByUser )
572 wxVector<wxVariant> fieldsCtrlRow;
574 std::string key( aFieldName.ToUTF8() );
577 fieldsCtrlRow.push_back( wxVariant( aFieldName ) );
578 fieldsCtrlRow.push_back( wxVariant( aLabelValue ) );
579 fieldsCtrlRow.push_back( wxVariant( show ) );
580 fieldsCtrlRow.push_back( wxVariant( groupBy ) );
581 fieldsCtrlRow.push_back( wxVariant( aFieldName ) );
585 wxGridTableMessage msg(
m_dataModel, wxGRIDTABLE_NOTIFY_COLS_APPENDED, 1 );
586 m_grid->ProcessTableMessage( msg );
596 bool groupBy =
false;
621 std::set<wxString> userFieldNames;
628 userFieldNames.insert( symbol->
GetFields()[j].GetName() );
631 for(
const wxString& fieldName : userFieldNames )
638 if( userFieldNames.count( templateFieldname.m_Name ) == 0 )
647 wxTextEntryDialog dlg(
this,
_(
"New field name:" ),
_(
"Add Field" ) );
649 if( dlg.ShowModal() != wxID_OK )
652 wxString fieldName = dlg.GetValue();
654 if( fieldName.IsEmpty() )
664 DisplayError(
this, wxString::Format(
_(
"Field name '%s' already in use." ),
685 wxCHECK_RET( row != -1, wxS(
"Some user defined field must be selected first" ) );
686 wxCHECK_RET( row >=
MANDATORY_FIELDS, wxS(
"Mandatory fields cannot be removed" ) );
691 wxString confirm_msg =
692 wxString::Format(
_(
"Are you sure you want to remove the field '%s'?" ), displayName );
694 if( !
IsOK(
this, confirm_msg ) )
716 wxGridTableMessage msg(
m_dataModel, wxGRIDTABLE_NOTIFY_COLS_DELETED, col, 1 );
718 m_grid->ProcessTableMessage( msg );
731 wxCHECK_RET( row != -1, wxS(
"Some user defined field must be selected first" ) );
732 wxCHECK_RET( row >=
MANDATORY_FIELDS, wxS(
"Mandatory fields cannot be renamed" ) );
733 wxCHECK_RET( !fieldName.IsEmpty(), wxS(
"Field must have a name" ) );
736 wxCHECK_RET( col != -1, wxS(
"Existing field name missing from data model" ) );
738 wxTextEntryDialog dlg(
this,
_(
"New field name:" ),
_(
"Rename Field" ) );
740 if( dlg.ShowModal() != wxID_OK )
743 wxString newFieldName = dlg.GetValue();
746 if( newFieldName == fieldName )
752 wxString confirm_msg = wxString::Format(
753 _(
"Field name %s already exists. Cannot rename over existing field." ),
780 wxPoint pos = aEvent.GetPosition();
781 wxRect ctrlRect =
m_filter->GetScreenRect();
782 int buttonWidth = ctrlRect.GetHeight();
785 if(
m_filter->IsSearchButtonVisible() && pos.x < buttonWidth )
786 SetCursor( wxCURSOR_ARROW );
787 else if(
m_filter->IsCancelButtonVisible() && pos.x > ctrlRect.GetWidth() - buttonWidth )
788 SetCursor( wxCURSOR_ARROW );
790 SetCursor( wxCURSOR_IBEAM );
812 wxDataViewItem item =
event.GetItem();
814 int col =
event.GetColumn();
829 m_grid->ShowCol( dataCol );
831 m_grid->HideCol( dataCol );
845 DisplayError(
this,
_(
"The Quantity column cannot be grouped by." ) );
853 DisplayError(
this,
_(
"The Item Number column cannot be grouped by." ) );
897 int sortCol = aEvent.GetCol();
910 if(
m_grid->IsSortingBy( sortCol ) )
913 ascending = !
m_grid->IsSortOrderAscending();
931 int origPos = aEvent.GetCol();
936 for(
int i = 0; i <
m_grid->GetNumberCols(); i++ )
938 if(
m_grid->IsColShown( i ) )
948 int newPos =
m_grid->GetColPos( origPos );
967 wxDataViewItem item = aEvent.GetItem();
991 int col = aEvent.GetRowOrCol();
1029 m_grid->ClearSelection();
1032 m_grid->SetGridCursor( event.GetRow(), event.GetCol() );
1044 std::set<SCH_REFERENCE> refs;
1045 std::set<SCH_ITEM*> symbols;
1048 if( aEvent.Selecting() )
1050 for(
int i = aEvent.GetTopRow(); i <= aEvent.GetBottomRow(); i++ )
1057 symbols.insert( ref.GetSymbol() );
1064 if( refs.size() > 0 )
1067 wxString symbol_path = refs.begin()->GetFullPath();
1082 std::vector<SCH_ITEM*> items( symbols.begin(), symbols.end() );
1084 if( refs.size() > 0 )
1085 selTool->
SyncSelection( refs.begin()->GetSheetPath(),
nullptr, items );
1200 wxFileDialog saveDlg(
this,
_(
"Bill of Materials Output File" ),
path, fn.GetFullName(),
1203 if( saveDlg.ShowModal() == wxID_CANCEL )
1207 wxFileName file = wxFileName( saveDlg.GetPath() );
1208 wxString defaultPath = fn.GetPathWithSep();
1210 msg.Printf(
_(
"Do you want to use a path relative to\n'%s'?" ), defaultPath );
1212 wxMessageDialog dialog(
this, msg,
_(
"BOM Output File" ),
1213 wxYES_NO | wxICON_QUESTION | wxYES_DEFAULT );
1215 if( dialog.ShowModal() == wxID_YES )
1217 if( !file.MakeRelativeTo( defaultPath ) )
1219 wxMessageBox(
_(
"Cannot make path relative (target volume different from schematic "
1221 _(
"BOM Output File" ), wxOK | wxICON_ERROR );
1233 _(
"Changes are unsaved. Export unsaved data?" ),
"",
_(
"OK" ),
1241 std::function<bool( wxString* )> textResolver =
1242 [&]( wxString* token ) ->
bool
1252 if(
path.IsEmpty() )
1254 DisplayError(
this,
_(
"No filename specified in exporter" ) );
1261 wxFileName outputFile = wxFileName::FileName(
path );
1268 msg.Printf(
_(
"Could not open/create path '%s'." ), outputFile.GetPath() );
1273 wxFFile out( outputFile.GetFullPath(),
"wb" );
1275 if( !out.IsOpened() )
1277 msg.Printf(
_(
"Could not create BOM output '%s'." ), outputFile.GetFullPath() );
1286 msg.Printf(
_(
"Could not write BOM output '%s'." ), outputFile.GetFullPath() );
1291 msg.Printf(
_(
"Wrote BOM output to '%s'" ), outputFile.GetFullPath() );
1353 for(
int i = 0; i <
m_grid->GetNumberCols(); i++ )
1355 if(
m_grid->IsColShown( i ) )
1364 wxCommandEvent* evt =
new wxCommandEvent( EDA_EVT_CLOSE_DIALOG_SYMBOL_FIELDS_TABLE, wxID_ANY );
1366 wxWindow* parent = GetParent();
1369 wxQueueEvent( parent, evt );
1375 std::vector<BOM_PRESET> ret;
1377 for(
const std::pair<const wxString, BOM_PRESET>& pair :
m_bomPresets )
1379 if( !pair.second.readOnly )
1380 ret.emplace_back( pair.second );
1392 for(
const BOM_PRESET& preset : aPresetList )
1410 wxCommandEvent
dummy;
1455 int default_idx = 0;
1457 for( std::pair<const wxString, BOM_PRESET>& pair :
m_bomPresets )
1460 static_cast<void*
>( &pair.second ) );
1486 [&](
const std::pair<const wxString, BOM_PRESET>& aPair )
1488 const BOM_PRESET& preset = aPair.second;
1491 if( !( preset.sortField == current.sortField
1492 && preset.sortAsc == current.sortAsc
1493 && preset.filterString == current.filterString
1494 && preset.groupSymbols == current.groupSymbols
1495 && preset.excludeDNP == current.excludeDNP ) )
1501 std::vector<BOM_FIELD>
A,
B;
1503 for(
const BOM_FIELD& field : preset.fieldsOrdered )
1505 if( field.show || field.groupBy )
1506 A.emplace_back( field );
1511 if( field.show || field.groupBy )
1512 B.emplace_back( field );
1518 if( it != m_bomPresets.end() )
1522 bool do_translate = it->second.
readOnly;
1523 wxString
text = do_translate ? wxGetTranslation( it->first ) : it->first;
1525 m_cbBomPresets->SetStringSelection(
text );
1529 m_cbBomPresets->SetSelection( m_cbBomPresets->GetCount() - 3 );
1532 m_currentBomPreset =
static_cast<BOM_PRESET*
>(
1533 m_cbBomPresets->GetClientData( m_cbBomPresets->GetSelection() ) );
1543 wxString ui_label = aName;
1545 for( std::pair<const wxString, BOM_PRESET>& pair :
m_bomPresets )
1547 if( pair.first != aName )
1550 if( pair.second.readOnly ==
true )
1551 ui_label = wxGetTranslation( aName );
1575 auto resetSelection =
1584 if( index == count - 3 )
1590 else if( index == count - 2 )
1598 wxTextEntryDialog dlg(
this,
_(
"BOM preset name:" ),
_(
"Save BOM Preset" ),
name );
1600 if( dlg.ShowModal() != wxID_OK )
1606 name = dlg.GetValue();
1624 wxMessageBox(
_(
"Default presets cannot be modified.\nPlease use a different name." ),
1625 _(
"Error" ), wxOK | wxICON_ERROR,
this );
1632 if( !
IsOK(
this,
_(
"Overwrite existing preset?" ) ) )
1651 else if( index == count - 1 )
1654 wxArrayString headers;
1655 std::vector<wxArrayString> items;
1657 headers.Add(
_(
"Presets" ) );
1659 for( std::pair<const wxString, BOM_PRESET>& pair :
m_bomPresets )
1661 if( !pair.second.readOnly )
1664 item.Add( pair.first );
1665 items.emplace_back( item );
1672 if( dlg.ShowModal() == wxID_OK )
1677 if( idx != wxNOT_FOUND )
1724 for(
int i = 0; i <
m_dataModel->GetColsCount(); i++ )
1729 for(
int j = 0; j <
m_fieldsCtrl->GetItemCount(); j++ )
1744 for(
int i = 0; i <
m_fieldsCtrl->GetItemCount(); i++ )
1751 wxASSERT_MSG(
true,
"Fields control has a field not found in the data model." );
1756 std::string fieldNameStr( fieldName.ToUTF8() );
1761 m_grid->SetColLabelValue( col, label );
1797 std::vector<BOM_FMT_PRESET> ret;
1799 for(
const std::pair<const wxString, BOM_FMT_PRESET>& pair :
m_bomFmtPresets )
1801 if( !pair.second.readOnly )
1802 ret.emplace_back( pair.second );
1832 wxCommandEvent
dummy;
1876 int default_idx = 0;
1878 for( std::pair<const wxString, BOM_FMT_PRESET>& pair :
m_bomFmtPresets )
1881 static_cast<void*
>( &pair.second ) );
1908 [&](
const std::pair<const wxString, BOM_FMT_PRESET>& aPair )
1910 return ( aPair.second.fieldDelimiter == current.fieldDelimiter
1911 && aPair.second.stringDelimiter == current.stringDelimiter
1912 && aPair.second.refDelimiter == current.refDelimiter
1913 && aPair.second.refRangeDelimiter == current.refRangeDelimiter
1914 && aPair.second.keepTabs == current.keepTabs
1915 && aPair.second.keepLineBreaks == current.keepLineBreaks );
1922 bool do_translate = it->second.readOnly;
1923 wxString
text = do_translate ? wxGetTranslation( it->first ) : it->first;
1943 wxString ui_label = aName;
1945 for( std::pair<const wxString, BOM_FMT_PRESET>& pair :
m_bomFmtPresets )
1947 if( pair.first != aName )
1950 if( pair.second.readOnly ==
true )
1951 ui_label = wxGetTranslation( aName );
1976 auto resetSelection =
1985 if( index == count - 3 )
1991 else if( index == count - 2 )
1999 wxTextEntryDialog dlg(
this,
_(
"BOM preset name:" ),
_(
"Save BOM Preset" ),
name );
2001 if( dlg.ShowModal() != wxID_OK )
2007 name = dlg.GetValue();
2025 wxMessageBox(
_(
"Default presets cannot be modified.\nPlease use a different name." ),
2026 _(
"Error" ), wxOK | wxICON_ERROR,
this );
2033 if( !
IsOK(
this,
_(
"Overwrite existing preset?" ) ) )
2052 else if( index == count - 1 )
2055 wxArrayString headers;
2056 std::vector<wxArrayString> items;
2058 headers.Add(
_(
"Presets" ) );
2060 for( std::pair<const wxString, BOM_FMT_PRESET>& pair :
m_bomFmtPresets )
2062 if( !pair.second.readOnly )
2065 item.Add( pair.first );
2066 items.emplace_back( item );
2073 if( dlg.ShowModal() == wxID_OK )
2078 if( idx != wxNOT_FOUND )
2132 bool modified =
false;
2135 std::vector<BOM_PRESET> presets;
2137 for(
const std::pair<const wxString, BOM_PRESET>& pair :
m_bomPresets )
2139 if( !pair.second.readOnly )
2140 presets.emplace_back( pair.second );
2157 std::vector<BOM_FMT_PRESET> fmts;
2159 for(
const std::pair<const wxString, BOM_FMT_PRESET>& pair :
m_bomFmtPresets )
2161 if( !pair.second.readOnly )
2162 fmts.emplace_back( pair.second );
2183 std::vector<SCH_ITEM*>& aSchItem )
2198 AddField( field.GetCanonicalName(), field.GetName(),
true,
false, true );
2204 std::set<SCH_SYMBOL*> symbols;
2208 symbols.insert( ref.GetSymbol() );
2213 for(
SCH_FIELD& field : symbol->GetFields() )
2214 AddField( field.GetCanonicalName(), field.GetName(),
true,
false,
true );
2228 std::vector<SCH_ITEM*>& aSchItem )
2246 std::vector<SCH_ITEM*>& aSchItem )
2261 AddField( field.GetCanonicalName(), field.GetName(),
true,
false, true );
2267 std::set<SCH_SYMBOL*> symbols;
2271 symbols.insert( ref.GetSymbol() );
2276 for(
SCH_FIELD& field : symbol->GetFields() )
2277 AddField( field.GetCanonicalName(), field.GetName(),
true,
false,
true );
2306 wxEVT_GRID_RANGE_SELECTED,
2315 wxEVT_GRID_RANGE_SELECTED,
2328 for(
size_t i = 0; i < aCachedRefs.
GetCount(); i++ )
2355 if( basePath.Path() == instance.m_Path )
2363 subSheets.push_back( sheetPath );
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap)
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Create an undo entry for an item that has been already modified.
Dialog helper object to sit in the inheritance tree between wxDialog and any class written by wxFormB...
int vertPixelsFromDU(int y) const
Convert an integer number of dialog units to pixels, vertically.
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
void SetupStandardButtons(std::map< int, wxString > aLabels={})
int horizPixelsFromDU(int x) const
Convert an integer number of dialog units to pixels, horizontally.
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
Class DIALOG_SYMBOL_FIELDS_TABLE_BASE.
wxRadioButton * m_radioRecursive
wxCheckBox * m_checkKeepLineBreaks
STD_BITMAP_BUTTON * m_bRefreshPreview
wxRadioButton * m_radioOff
wxStaticText * m_bomPresetsLabel
wxCheckBox * m_checkKeepTabs
STD_BITMAP_BUTTON * m_removeFieldButton
STD_BITMAP_BUTTON * m_browseButton
wxRadioButton * m_radioSelect
wxTextCtrl * m_textOutput
STD_BITMAP_BUTTON * m_bRefresh
STD_BITMAP_BUTTON * m_renameFieldButton
STD_BITMAP_BUTTON * m_addFieldButton
wxTextCtrl * m_textStringDelimiter
wxChoice * m_cbBomPresets
wxTextCtrl * m_outputFileName
wxSplitterWindow * m_splitterMainWindow
wxDataViewListCtrl * m_fieldsCtrl
wxCheckBox * m_checkExcludeDNP
wxRadioButton * m_radioCurrentSheet
wxTextCtrl * m_textFieldDelimiter
wxCheckBox * m_groupSymbolsBox
wxRadioButton * m_radioHighlight
wxStaticText * m_labelBomExportPresets
wxTextCtrl * m_textRefRangeDelimiter
wxRadioButton * m_radioProject
wxChoice * m_cbBomFmtPresets
wxTextCtrl * m_textRefDelimiter
void OnTableColSize(wxGridSizeEvent &event) override
void OnSaveAndContinue(wxCommandEvent &aEvent) override
void OnSchItemsRemoved(SCHEMATIC &aSch, std::vector< SCH_ITEM * > &aSchItem) override
BOM_FMT_PRESET * m_currentBomFmtPreset
void OnPreviewRefresh(wxCommandEvent &event) override
void OnAddField(wxCommandEvent &event) override
SCH_REFERENCE_LIST getSheetSymbolReferences(SCH_SHEET &aSheet)
void SetUserBomPresets(std::vector< BOM_PRESET > &aPresetList)
void OnOk(wxCommandEvent &aEvent) override
void OnGroupSymbolsToggled(wxCommandEvent &event) override
void OnColumnItemToggled(wxDataViewEvent &event) override
void OnColMove(wxGridEvent &aEvent)
void OnSchItemsAdded(SCHEMATIC &aSch, std::vector< SCH_ITEM * > &aSchItem) override
void loadDefaultBomFmtPresets()
std::map< wxString, BOM_PRESET > m_bomPresets
void OnSchItemsChanged(SCHEMATIC &aSch, std::vector< SCH_ITEM * > &aSchItem) override
void ApplyBomFmtPreset(const wxString &aPresetName)
SCH_EDIT_FRAME * m_parent
bool TransferDataFromWindow() override
SCH_REFERENCE_LIST m_symbolsList
void SetupColumnProperties(int aCol)
FIELDS_EDITOR_GRID_DATA_MODEL * m_dataModel
void updateBomPresetSelection(const wxString &aName)
void OnTableItemContextMenu(wxGridEvent &event) override
void updateBomFmtPresetSelection(const wxString &aName)
void OnFilterText(wxCommandEvent &aEvent) override
void OnScopeChanged(wxCommandEvent &aEvent) override
void OnRemoveField(wxCommandEvent &event) override
void OnTableCellClick(wxGridEvent &event) override
DIALOG_SYMBOL_FIELDS_TABLE(SCH_EDIT_FRAME *parent)
wxArrayString m_bomPresetMRU
void OnColLabelChange(wxDataViewEvent &aEvent)
void doApplyBomFmtPreset(const BOM_FMT_PRESET &aPreset)
void loadDefaultBomPresets()
void onBomPresetChanged(wxCommandEvent &aEvent)
void OnTableValueChanged(wxGridEvent &event) override
void OnExport(wxCommandEvent &aEvent) override
void OnClose(wxCloseEvent &aEvent) override
void OnSchSheetChanged(SCHEMATIC &aSch) override
void syncBomFmtPresetSelection()
void OnFieldsCtrlSelectionChanged(wxDataViewEvent &event) override
void DisableSelectionEvents()
bool TransferDataToWindow() override
void OnTableRangeSelected(wxGridRangeSelectEvent &aEvent)
void EnableSelectionEvents()
std::vector< BOM_FMT_PRESET > GetUserBomFmtPresets() const
wxArrayString m_bomFmtPresetMRU
void OnCancel(wxCommandEvent &aEvent) override
void OnFilterMouseMoved(wxMouseEvent &event) override
std::map< wxString, BOM_FMT_PRESET > m_bomFmtPresets
BOM_FMT_PRESET GetCurrentBomFmtSettings()
Returns a formatting configuration corresponding to the values in the UI controls of the dialog.
void savePresetsToSchematic()
void SetupAllColumnProperties()
void AddField(const wxString &displayName, const wxString &aCanonicalName, bool show, bool groupBy, bool addedByUser=false)
SCH_REFERENCE_LIST getSymbolReferences(SCH_SYMBOL *aSymbol, SCH_REFERENCE_LIST &aCachedRefs)
SCHEMATIC_SETTINGS & m_schSettings
void syncBomPresetSelection()
void OnSizeFieldList(wxSizeEvent &event) override
void doApplyBomPreset(const BOM_PRESET &aPreset)
void OnPageChanged(wxNotebookEvent &event) override
void SetUserBomFmtPresets(std::vector< BOM_FMT_PRESET > &aPresetList)
void OnRegroupSymbols(wxCommandEvent &aEvent) override
void OnColSort(wxGridEvent &aEvent)
virtual ~DIALOG_SYMBOL_FIELDS_TABLE()
std::vector< BOM_PRESET > GetUserBomPresets() const
void OnOutputFileBrowseClicked(wxCommandEvent &event) override
void LoadFieldNames()
Construct the rows of m_fieldsCtrl and the columns of m_dataModel from a union of all field names in ...
void onBomFmtPresetChanged(wxCommandEvent &aEvent)
void ApplyBomPreset(const wxString &aPresetName)
void OnExcludeDNPToggled(wxCommandEvent &event) override
void rebuildBomFmtPresetsWidget()
BOM_PRESET * m_lastSelectedBomPreset
void rebuildBomPresetsWidget()
BOM_PRESET * m_currentBomPreset
BOM_FMT_PRESET * m_lastSelectedBomFmtPreset
void OnRenameField(wxCommandEvent &event) override
A base class for most all the KiCad significant classes used in schematics and boards.
KICAD_T Type() const
Returns the type of object.
EDA_ITEM * GetParent() const
wxString GetTextSelection(int aColumn=0)
Return the selected text from aColumn in the wxListCtrl in the dialog.
void SetListLabel(const wxString &aLabel)
PANEL_FIELD_EDITOR m_FieldEditorPanel
wxString GetColFieldName(int aCol)
int GetFieldNameCol(wxString aFieldName)
void ApplyBomPreset(const BOM_PRESET &preset)
std::vector< SCH_REFERENCE > GetRowReferences(int aRow) const
void SetGroupingEnabled(bool group)
bool ColIsItemNumber(int aCol)
int GetNumberCols() override
bool ColIsQuantity(int aCol)
bool GetGroupColumn(int aCol)
wxString GetColLabelValue(int aCol) override
BOM_PRESET GetBomSettings()
void SetScope(SCOPE aScope)
bool ColIsReference(int aCol)
bool GetGroupingEnabled()
void SetPath(const SCH_SHEET_PATH &aPath)
int GetNumberRows() override
void RenameColumn(int aCol, const wxString &newName)
wxString Export(const BOM_FMT_PRESET &settings)
void AddColumn(const wxString &aFieldName, const wxString &aLabel, bool aAddedByUser)
void SetSorting(int aCol, bool ascending)
void ExpandCollapseRow(int aRow)
void SetFilter(const wxString &aFilter)
static const wxString ITEM_NUMBER_VARIABLE
void SetIncludeExcludedFromBOM(bool include)
int GetDataWidth(int aCol)
void UpdateReferences(const SCH_REFERENCE_LIST &aRefs)
void ApplyData(std::function< void(SCH_SYMBOL &, SCH_SHEET_PATH &)> symbolChangeHandler)
void RemoveColumn(int aCol)
const wxString & GetFilter()
static const wxString QUANTITY_VARIABLE
bool ColIsValue(int aCol)
void SetGroupColumn(int aCol, bool group)
void SetExcludeDNP(bool exclude)
void RemoveSymbol(const SCH_SYMBOL &aSymbol)
bool ColIsAttribute(int aCol)
bool GetShowColumn(int aCol)
void SetColLabelValue(int aCol, const wxString &aLabel) override
void MoveColumn(int aCol, int aNewPos)
void RemoveReferences(const SCH_REFERENCE_LIST &aRefs)
void SetShowColumn(int aCol, bool show)
void AddReferences(const SCH_REFERENCE_LIST &aRefs)
wxDataViewListCtrl * m_fieldsCtrl
void showPopupMenu(wxMenu &menu, wxGridEvent &aEvent) override
FIELDS_EDITOR_GRID_TRICKS(DIALOG_SHIM *aParent, WX_GRID *aGrid, wxDataViewListCtrl *aFieldsCtrl, FIELDS_EDITOR_GRID_DATA_MODEL *aDataModel)
void doPopupSelection(wxCommandEvent &event) override
FIELDS_EDITOR_GRID_DATA_MODEL * m_dataModel
Add mouse and command handling (such as cut, copy, and paste) to a WX_GRID instance.
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.
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 bool ShowModal(wxString *aResult=nullptr, wxWindow *aResultantFocusWindow=nullptr)
Show this wxFrame as if it were a modal dialog, with all other instantiated wxFrames disabled until t...
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
static REPORTER & GetInstance()
static SEARCH_STACK * SchSearchS(PROJECT *aProject)
Accessor for Eeschema search stack.
virtual const wxString AbsolutePath(const wxString &aFileName) const
Fix up aFileName if it is relative to the project's directory to be an absolute path and filename.
BOM_FMT_PRESET m_BomFmtSettings
List of stored BOM format presets.
TEMPLATES m_TemplateFieldNames
std::vector< BOM_PRESET > m_BomPresets
std::vector< BOM_FMT_PRESET > m_BomFmtPresets
BOM_PRESET m_BomSettings
List of stored BOM presets.
Holds all the data relating to one schematic.
SCH_SHEET_PATH & CurrentSheet() const override
void RemoveListener(SCHEMATIC_LISTENER *aListener)
Remove the specified listener.
wxString GetFileName() const override
Helper to retrieve the filename from the root sheet screen.
SCH_SHEET_LIST GetSheets() const override
Builds and returns an updated schematic hierarchy TODO: can this be cached?
void AddListener(SCHEMATIC_LISTENER *aListener)
Add a listener to the schematic to receive calls whenever something on the schematic has been modifie...
bool ResolveTextVar(const SCH_SHEET_PATH *aSheetPath, wxString *token, int aDepth) const
void SyncView()
Mark all items for refresh.
EESCHEMA_SETTINGS * eeconfig() const
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Revert the commit by restoring the modified items state.
Handle actions specific to the schematic editor.
Schematic editor (Eeschema) main window.
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag and update other data struc...
SCH_SHEET_PATH & GetCurrentSheet() const
SCHEMATIC & Schematic() const
void SetCurrentSheet(const SCH_SHEET_PATH &aSheet)
bool SaveProject(bool aSaveAs=false)
Save the currently-open schematic (including its hierarchy) and associated project.
void FocusOnItem(SCH_ITEM *aItem)
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
Base class for any item which can be embedded within the SCHEMATIC container class,...
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
void AddItem(const SCH_REFERENCE &aItem)
A helper to define a symbol's reference designator in a schematic.
void Split()
Attempt to split the reference designator into a name (U) and number (1).
SCH_SYMBOL * GetSymbol() const
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
void GetSymbolsWithinPath(SCH_REFERENCE_LIST &aReferences, const SCH_SHEET_PATH &aSheetPath, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets that are contained wi...
void GetSheetsWithinPath(SCH_SHEET_PATHS &aSheets, const SCH_SHEET_PATH &aSheetPath) const
Add a SCH_SHEET_PATH object to aSheets for each sheet in the list that are contained within aSheetPat...
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
SCH_SCREEN * LastScreen()
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
const std::vector< SCH_SHEET_INSTANCE > & GetInstances() const
int GetFieldCount() const
Return the number of fields in this symbol.
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly)
Populate a std::vector with SCH_FIELDs.
const TEMPLATE_FIELDNAMES & GetTemplateFieldNames()
Return a template field name list for read only access.
void SetTable(wxGridTableBase *table, bool aTakeOwnership=false)
Hide wxGrid's SetTable() method with one which doesn't mess up the grid column widths when setting th...
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
const wxString ExpandEnvVarSubstitutions(const wxString &aString, const PROJECT *aProject)
Replace any environment variable & text variable references with their values.
bool EnsureFileDirectoryExists(wxFileName *aTargetFullFileName, const wxString &aBaseFilename, REPORTER *aReporter)
Make aTargetFullFileName absolute and create the path of this file if it doesn't yet exist.
bool IsTextVar(const wxString &aSource)
Returns true if the string is a text var, e.g starts with ${.
wxString ExpandTextVars(const wxString &aSource, const PROJECT *aProject)
wxString GetTextVars(const wxString &aSource)
Returns any variables unexpanded, e.g.
int OKOrCancelDialog(wxWindow *aParent, const wxString &aWarning, const wxString &aMessage, const wxString &aDetailedMessage, const wxString &aOKLabel, const wxString &aCancelLabel, bool *aApplyToAll)
Display a warning dialog with aMessage and returns the user response.
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
bool HandleUnsavedChanges(wxWindow *aParent, const wxString &aMessage, const std::function< bool()> &aSaveFunction)
Display a dialog with Save, Cancel and Discard Changes buttons.
This file is part of the common library.
wxDEFINE_EVENT(EDA_EVT_CLOSE_DIALOG_SYMBOL_FIELDS_TABLE, wxCommandEvent)
bool GetAssociatedDocument(wxWindow *aParent, const wxString &aDocName, PROJECT *aProject, SEARCH_STACK *aPaths)
Open a document (file) with the suitable browser.
This file is part of the common library.
#define DISPLAY_NAME_COLUMN
#define FIELD_NAME_COLUMN
#define SHOW_FIELD_COLUMN
@ FRAME_FOOTPRINT_CHOOSER
@ GRIDTRICKS_FIRST_SHOWHIDE
@ GRIDTRICKS_FIRST_CLIENT_ID
static const std::string CsvFileExtension
static wxString CsvFileWildcard()
wxFont GetInfoFont(wxWindow *aWindow)
wxSize GetTextSize(const wxString &aSingleLine, wxWindow *aWindow)
Return the size of aSingleLine of text when it is rendered in aWindow using whatever font is currentl...
std::vector< FAB_LAYER_COLOR > dummy
static BOM_FMT_PRESET CSV()
static std::vector< BOM_FMT_PRESET > BuiltInPresets()
wxString refRangeDelimiter
std::vector< BOM_FIELD > fieldsOrdered
static BOM_PRESET GroupedByValue()
static std::vector< BOM_PRESET > BuiltInPresets()
std::map< std::string, int > field_widths
A simple container for sheet instance information.
Hold a name of a symbol's field, field value, and default visibility.
static const wxString GetDefaultFieldName(int aFieldNdx, bool aTranslateForHI=false)
Return a default symbol field name for field aFieldNdx for all components.
Definition for symbol library class.
wxString GetCanonicalFieldName(int idx)
@ DATASHEET_FIELD
name of datasheet
@ FOOTPRINT_FIELD
Field Name Module PCB, i.e. "16DIP300".
@ VALUE_FIELD
Field Value of part, i.e. "3.3K".
@ MANDATORY_FIELDS
The first 5 are mandatory, and must be instantiated in SCH_COMPONENT and LIB_PART constructors.
@ REFERENCE_FIELD
Field Reference of part, i.e. "IC21".
constexpr T Clamp(const T &lower, const T &value, const T &upper)
Limit value within the range lower <= value <= upper.
Definition of file extensions used in Kicad.