You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

165 lines
6.8 KiB

2 years ago
2 years ago
2 years ago
2 years ago
  1. /*
  2. * This program source code file is part of KiCad, a free EDA CAD application.
  3. *
  4. * Copyright (C) 2017 Oliver Walters
  5. * Copyright (C) 2017-2023 KiCad Developers, see AUTHORS.txt for contributors.
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License
  9. * as published by the Free Software Foundation; either version 2
  10. * of the License, or (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, you may find one here:
  19. * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
  20. * or you may search the http://www.gnu.org website for the version 2 license,
  21. * or you may write to the Free Software Foundation, Inc.,
  22. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
  23. */
  24. #ifndef DIALOG_SYMBOL_FIELDS_TABLE_H
  25. #define DIALOG_SYMBOL_FIELDS_TABLE_H
  26. #include <dialog_symbol_fields_table_base.h>
  27. #include <sch_reference_list.h>
  28. #include <schematic.h>
  29. wxDECLARE_EVENT( EDA_EVT_CLOSE_DIALOG_SYMBOL_FIELDS_TABLE, wxCommandEvent );
  30. class SCHEMATIC_SETTINGS;
  31. struct BOM_PRESET;
  32. struct BOM_FMT_PRESET;
  33. class SCH_EDIT_FRAME;
  34. class FIELDS_EDITOR_GRID_DATA_MODEL;
  35. class DIALOG_SYMBOL_FIELDS_TABLE : public DIALOG_SYMBOL_FIELDS_TABLE_BASE, public SCHEMATIC_LISTENER
  36. {
  37. public:
  38. DIALOG_SYMBOL_FIELDS_TABLE( SCH_EDIT_FRAME* parent );
  39. virtual ~DIALOG_SYMBOL_FIELDS_TABLE();
  40. bool TransferDataToWindow() override;
  41. bool TransferDataFromWindow() override;
  42. void ShowEditTab();
  43. void ShowExportTab();
  44. private:
  45. void SetupColumnProperties( int aCol );
  46. void SetupAllColumnProperties();
  47. void AddField( const wxString& displayName, const wxString& aCanonicalName, bool show,
  48. bool groupBy, bool addedByUser = false );
  49. /**
  50. * Construct the rows of m_fieldsCtrl and the columns of m_dataModel from a union of all
  51. * field names in use.
  52. */
  53. void LoadFieldNames();
  54. void OnColSort( wxGridEvent& aEvent );
  55. void OnColMove( wxGridEvent& aEvent );
  56. void OnColLabelChange( wxDataViewEvent& aEvent );
  57. void OnTableRangeSelected( wxGridRangeSelectEvent& aEvent );
  58. void OnColumnItemToggled( wxDataViewEvent& event ) override;
  59. void OnGroupSymbolsToggled( wxCommandEvent& event ) override;
  60. void OnExcludeDNPToggled( wxCommandEvent& event ) override;
  61. void OnShowExcludedToggled( wxCommandEvent& event ) override;
  62. void OnRegroupSymbols( wxCommandEvent& aEvent ) override;
  63. void OnScopeChanged( wxCommandEvent& aEvent ) override;
  64. void UpdateScope();
  65. void OnTableValueChanged( wxGridEvent& event ) override;
  66. void OnTableCellClick( wxGridEvent& event ) override;
  67. void OnTableItemContextMenu( wxGridEvent& event ) override;
  68. void OnTableColSize( wxGridSizeEvent& event ) override;
  69. void OnSizeFieldList( wxSizeEvent& event ) override;
  70. void OnAddField( wxCommandEvent& event ) override;
  71. void OnRemoveField( wxCommandEvent& event ) override;
  72. void OnRenameField( wxCommandEvent& event ) override;
  73. void OnExport( wxCommandEvent& aEvent ) override;
  74. void OnSaveAndContinue( wxCommandEvent& aEvent ) override;
  75. void OnCancel( wxCommandEvent& aEvent ) override;
  76. void OnClose( wxCloseEvent& aEvent ) override;
  77. void OnOk( wxCommandEvent& aEvent ) override;
  78. void OnFilterText( wxCommandEvent& aEvent ) override;
  79. void OnFilterMouseMoved( wxMouseEvent& event ) override;
  80. void OnFieldsCtrlSelectionChanged( wxDataViewEvent& event ) override;
  81. void OnOutputFileBrowseClicked( wxCommandEvent& event ) override;
  82. void OnPageChanged( wxNotebookEvent& event ) override;
  83. void OnPreviewRefresh( wxCommandEvent& event ) override;
  84. void PreviewRefresh();
  85. std::vector<BOM_PRESET> GetUserBomPresets() const;
  86. void SetUserBomPresets( std::vector<BOM_PRESET>& aPresetList );
  87. void ApplyBomPreset( const wxString& aPresetName );
  88. void ApplyBomPreset( const BOM_PRESET& aPreset );
  89. /// Returns a formatting configuration corresponding to the values in the UI controls
  90. /// of the dialog.
  91. BOM_FMT_PRESET GetCurrentBomFmtSettings();
  92. std::vector<BOM_FMT_PRESET> GetUserBomFmtPresets() const;
  93. void SetUserBomFmtPresets( std::vector<BOM_FMT_PRESET>& aPresetList );
  94. void ApplyBomFmtPreset( const wxString& aPresetName );
  95. void ApplyBomFmtPreset( const BOM_FMT_PRESET& aPreset );
  96. // Schematic listener event handlers
  97. void OnSchItemsAdded( SCHEMATIC& aSch, std::vector<SCH_ITEM*>& aSchItem ) override;
  98. void OnSchItemsRemoved( SCHEMATIC& aSch, std::vector<SCH_ITEM*>& aSchItem ) override;
  99. void OnSchItemsChanged( SCHEMATIC& aSch, std::vector<SCH_ITEM*>& aSchItem ) override;
  100. void OnSchSheetChanged( SCHEMATIC& aSch ) override;
  101. void EnableSelectionEvents();
  102. void DisableSelectionEvents();
  103. private:
  104. SCH_REFERENCE_LIST getSymbolReferences( SCH_SYMBOL* aSymbol, SCH_REFERENCE_LIST& aCachedRefs );
  105. SCH_REFERENCE_LIST getSheetSymbolReferences( SCH_SHEET& aSheet );
  106. void syncBomPresetSelection();
  107. void rebuildBomPresetsWidget();
  108. void updateBomPresetSelection( const wxString& aName );
  109. void onBomPresetChanged( wxCommandEvent& aEvent );
  110. void doApplyBomPreset( const BOM_PRESET& aPreset );
  111. void loadDefaultBomPresets();
  112. void syncBomFmtPresetSelection();
  113. void rebuildBomFmtPresetsWidget();
  114. void updateBomFmtPresetSelection( const wxString& aName );
  115. void onBomFmtPresetChanged( wxCommandEvent& aEvent );
  116. void doApplyBomFmtPreset( const BOM_FMT_PRESET& aPreset );
  117. void loadDefaultBomFmtPresets();
  118. void savePresetsToSchematic();
  119. private:
  120. std::map<wxString, BOM_PRESET> m_bomPresets;
  121. BOM_PRESET* m_currentBomPreset;
  122. BOM_PRESET* m_lastSelectedBomPreset;
  123. wxArrayString m_bomPresetMRU;
  124. std::map<wxString, BOM_FMT_PRESET> m_bomFmtPresets;
  125. BOM_FMT_PRESET* m_currentBomFmtPreset;
  126. BOM_FMT_PRESET* m_lastSelectedBomFmtPreset;
  127. wxArrayString m_bomFmtPresetMRU;
  128. SCH_EDIT_FRAME* m_parent;
  129. int m_fieldNameColWidth;
  130. int m_labelColWidth;
  131. int m_showColWidth;
  132. int m_groupByColWidth;
  133. SCH_REFERENCE_LIST m_symbolsList;
  134. FIELDS_EDITOR_GRID_DATA_MODEL* m_dataModel;
  135. SCHEMATIC_SETTINGS& m_schSettings;
  136. };
  137. #endif /* DIALOG_SYMBOL_FIELDS_TABLE_H */