KiCad PCB EDA Suite
footprint_edit_frame.h
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) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation, either version 3 of the License, or (at your
9 * option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef FOOTPRINT_EDIT_FRAME_H
21#define FOOTPRINT_EDIT_FRAME_H
22
23#include <pcb_base_frame.h>
24#include <pcb_base_edit_frame.h>
25#include <io_mgr.h>
26#include <config_params.h>
28
30class FP_LIB_TABLE;
34class EDA_LIST_DIALOG;
35
36namespace PCB { struct IFACE; } // A KIFACE coded in pcbnew.cpp
37
38
40{
41public:
43
48 static const wxChar* GetFootprintEditorFrameName();
49
51 BOARD_ITEM_CONTAINER* GetModel() const override;
53
59 bool IsContentModified() const override;
60
61 bool IsCurrentFPFromBoard() const;
62
63 bool CanCloseFPFromBoard( bool doClose );
64
66
70 EDA_ANGLE GetRotationAngle() const override;
71
72 APP_SETTINGS_BASE* config() const override;
73
75
76 const PCB_PLOT_PARAMS& GetPlotSettings() const override;
77 void SetPlotSettings( const PCB_PLOT_PARAMS& aSettings ) override;
78
80
81 void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
82 void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
83
84 COLOR_SETTINGS* GetColorSettings( bool aForceRefresh = false ) const override;
85
86 const BOX2I GetDocumentExtents( bool aIncludeAllVisible = true ) const override;
87
88 bool canCloseWindow( wxCloseEvent& Event ) override;
89 void doCloseWindow() override;
90 void CloseFootprintEditor( wxCommandEvent& Event );
91 void OnExitKiCad( wxCommandEvent& aEvent );
92
98 void SwitchCanvas( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType ) override;
99
104 void UpdateUserInterface();
105
109 void HardRedraw() override;
110
114 void ReCreateHToolbar() override;
115
116 void ReCreateVToolbar() override;
117 void ReCreateOptToolbar() override;
118 void UpdateToolbarControlSizes() override;
119
123 void ReCreateMenuBar() override;
124
133 void ReCreateLayerBox( bool aForceResizeToolbar = true );
134
135 void OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent );
136
137 void SelectLayer( wxCommandEvent& event );
138
139 // The Tool Framework initialization, for GAL mode
140 void setupTools();
141
142 void OnSaveFootprintAsPng( wxCommandEvent& event );
143
144 bool IsSearchTreeShown() const;
145 void ToggleSearchTree();
146 void ToggleLayersManager();
147
155 bool SaveLibraryAs( const wxString& aLibraryPath );
156
157 void OnUpdateLoadFootprintFromBoard( wxUpdateUIEvent& aEvent );
158 void OnUpdateSaveFootprintToBoard( wxUpdateUIEvent& aEvent );
159
161 void OnEditItemRequest( BOARD_ITEM* aItem ) override;
162
166 void OnLoadFootprintFromBoard( wxCommandEvent& event );
167
168 void OnSaveFootprintToBoard( wxCommandEvent& event );
169
170 void LoadFootprintFromLibrary( LIB_ID aFPID );
171
175 wxObjectDataPtr<LIB_TREE_MODEL_ADAPTER>& GetLibTreeAdapter() { return m_adapter; }
176
183 bool SaveFootprint( FOOTPRINT* aFootprint );
184 bool DuplicateFootprint( FOOTPRINT* aFootprint );
185 bool SaveFootprintAs( FOOTPRINT* aFootprint );
186 bool SaveFootprintToBoard( bool aAddNew );
187 bool SaveFootprintInLibrary( FOOTPRINT* aFootprint, const wxString& aLibraryName );
188 bool RevertFootprint();
189
196 void OnModify() override;
197
203 bool Clear_Pcb( bool aQuery );
204
206 LIB_ID GetTreeFPID() const;
207
209
211 LIB_ID GetLoadedFPID() const;
212
215 LIB_ID GetTargetFPID() const;
216
217 void ClearModify();
218
222 void ExportFootprint( FOOTPRINT* aFootprint );
223
230 FOOTPRINT* ImportFootprint( const wxString& aName = wxT( "" ) );
231
239 bool LoadFootprintFromBoard( FOOTPRINT* aFootprint );
240
247
251 bool DeleteFootprintFromLibrary( const LIB_ID& aFPID, bool aConfirm );
252
256 COLOR4D GetGridColor() override;
257
259 void SetActiveLayer( PCB_LAYER_ID aLayer ) override;
260
261 void OnDisplayOptionsChanged() override;
262
264 void ActivateGalCanvas() override;
265
275 bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl = 0 ) override;
276
281 void AddFootprintToBoard( FOOTPRINT* aFootprint ) override;
282
286 void ShowChangedLanguage() override;
287
291 void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged ) override;
292
297 void SyncLibraryTree( bool aProgress );
298
304
308 void RefreshLibraryTree();
309
313 void UpdateLibraryTree( const wxDataViewItem& treeItem, FOOTPRINT* aFootprint );
314
316 void UpdateView();
317
318 void UpdateTitle();
319
320 void FocusOnLibID( const LIB_ID& aLibID );
321
322 void KiwayMailIn( KIWAY_EXPRESS& mail ) override;
323
324 DECLARE_EVENT_TABLE()
325
326protected:
328 FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent );
329
330 EDA_LIST_DIALOG* buildSaveAsDialog( const wxString& aFootprintName,
331 const wxString& aLibraryPreselect );
332
337 void initLibraryTree();
338
340 void retainLastFootprint();
341
345 void editFootprintProperties( FOOTPRINT* aFootprint );
346
347 void setupUIConditions() override;
348
349 void centerItemIdleHandler( wxIdleEvent& aEvent );
350
351protected:
352 PCB_LAYER_BOX_SELECTOR* m_selLayerBox; // a combo box to display and select active layer
354
355private:
356 friend struct PCB::IFACE;
357
360
362
364
368};
369
370#endif // FOOTPRINT_EDIT_FRAME_H
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:110
Container for design settings for a BOARD object.
Abstract interface for BOARD_ITEMs capable of storing other items inside.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:58
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:265
Color settings are a bit different than most of the settings objects in that there can be more than o...
A dialog which shows:
void CloseFootprintEditor(wxCommandEvent &Event)
BOARD_DESIGN_SETTINGS & GetDesignSettings() const override
Returns the BOARD_DESIGN_SETTINGS for the open project.
void setupUIConditions() override
Setup the UI conditions for the various actions and their controls in this frame.
void ActivateGalCanvas() override
Use to start up the GAL drawing canvas.
void editFootprintProperties(FOOTPRINT *aFootprint)
Run the Footprint Properties dialog and handle changes made in it.
void HardRedraw() override
Refresh the library tree and redraw the window.
void UpdateLibraryTree(const wxDataViewItem &treeItem, FOOTPRINT *aFootprint)
Update a single node in the library tree.
static const wxChar * GetFootprintEditorFrameName()
void SyncLibraryTree(bool aProgress)
Synchronize the footprint library tree to the current state of the footprint library table.
EDA_LIST_DIALOG * buildSaveAsDialog(const wxString &aFootprintName, const wxString &aLibraryPreselect)
bool SaveFootprintInLibrary(FOOTPRINT *aFootprint, const wxString &aLibraryName)
bool SaveLibraryAs(const wxString &aLibraryPath)
Save a library to a new name and/or library type.
void OnSaveFootprintAsPng(wxCommandEvent &event)
bool SaveFootprintAs(FOOTPRINT *aFootprint)
bool DuplicateFootprint(FOOTPRINT *aFootprint)
BOARD_ITEM_CONTAINER * GetModel() const override
void ReCreateLayerBox(bool aForceResizeToolbar=true)
Re create the layer Box by clearing the old list, and building a new one from the new layers names an...
void OnUpdateLayerSelectBox(wxUpdateUIEvent &aEvent)
bool canCloseWindow(wxCloseEvent &Event) override
void ExportFootprint(FOOTPRINT *aFootprint)
Create a file containing only one footprint.
void KiwayMailIn(KIWAY_EXPRESS &mail) override
Receive KIWAY_EXPRESS messages from other players.
void ReCreateMenuBar() override
(Re)Create the menubar for the Footprint Editor frame
LIB_ID GetTargetFPID() const
Return the LIB_ID of the part selected in the footprint tree, or the loaded part if there is no selec...
LIB_ID GetLoadedFPID() const
Return the LIB_ID of the part being edited.
APP_SETTINGS_BASE * config() const override
Returns the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
void SelectLayer(wxCommandEvent &event)
LIB_TREE_NODE * GetCurrentTreeNode() const
bool SaveFootprintToBoard(bool aAddNew)
void SetPlotSettings(const PCB_PLOT_PARAMS &aSettings) override
bool SaveFootprint(FOOTPRINT *aFootprint)
Save in an existing library a given footprint.
LIB_ID GetTreeFPID() const
Return the LIB_ID of the part or library selected in the footprint tree.
void initLibraryTree()
Make sure the footprint info list is loaded (with a progress dialog) and then initialize the footprin...
void LoadFootprintFromLibrary(LIB_ID aFPID)
void OnLoadFootprintFromBoard(wxCommandEvent &event)
Called from the main toolbar to load a footprint from board mainly to edit it.
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Called after the preferences dialog is run.
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > & GetLibTreeAdapter()
Return the adapter object that provides the stored data.
void UpdateToolbarControlSizes() override
Update the sizes of any controls in the toolbars of the frame.
FOOTPRINT * ImportFootprint(const wxString &aName=wxT(""))
Read a file containing only one footprint.
std::map< KIID, KIID > m_boardFootprintUuids
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
FOOTPRINT * SelectFootprintFromBoard(BOARD *aPcb)
Display the list of footprints currently existing on the BOARD.
void ReCreateHToolbar() override
Create the main horizontal toolbar for the footprint editor.
void ShowChangedLanguage() override
Update visible items after a language change.
void OnSaveFootprintToBoard(wxCommandEvent &event)
bool IsContentModified() const override
Get if any footprints or libraries have been modified but not saved.
void UpdateUserInterface()
Update the layer manager and other widgets from the board setup (layer and items visibility,...
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
FOOTPRINT_EDITOR_SETTINGS * m_editorSettings
void centerItemIdleHandler(wxIdleEvent &aEvent)
const BOX2I GetDocumentExtents(bool aIncludeAllVisible=true) const override
Returns bbox of document with option to not include some items.
void OnUpdateLoadFootprintFromBoard(wxUpdateUIEvent &aEvent)
void OnUpdateSaveFootprintToBoard(wxUpdateUIEvent &aEvent)
Install the corresponding dialog editor for the given item.
void OnEditItemRequest(BOARD_ITEM *aItem) override
Install the corresponding dialog editor for the given item.
SELECTION & GetCurrentSelection() override
Get the current selection from the canvas area.
bool CanCloseFPFromBoard(bool doClose)
void RegenerateLibraryTree()
Filter, sort, and redisplay the library tree.
void SetActiveLayer(PCB_LAYER_ID aLayer) override
void AddFootprintToBoard(FOOTPRINT *aFootprint) override
Override from PCB_BASE_EDIT_FRAME which adds a footprint to the editor's dummy board,...
bool DeleteFootprintFromLibrary(const LIB_ID &aFPID, bool aConfirm)
Delete the given footprint from its library.
void OnModify() override
Must be called after a footprint change in order to set the "modify" flag of the current screen and p...
FOOTPRINT_TREE_PANE * m_treePane
COLOR4D GetGridColor() override
bool Clear_Pcb(bool aQuery)
Delete all and reinitialize the current board.
Definition: initpcb.cpp:97
void OnDisplayOptionsChanged() override
void FocusOnLibID(const LIB_ID &aLibID)
const PCB_PLOT_PARAMS & GetPlotSettings() const override
Return the PCB_PLOT_PARAMS for the BOARD owned by this frame.
PCB_LAYER_BOX_SELECTOR * m_selLayerBox
std::unique_ptr< FOOTPRINT > m_originalFootprintCopy
EDA_ANGLE GetRotationAngle() const override
Return the angle used for rotate operations.
void RefreshLibraryTree()
Redisplay the library tree.
void OnExitKiCad(wxCommandEvent &aEvent)
bool OpenProjectFiles(const std::vector< wxString > &aFileSet, int aCtl=0) override
Load a KiCad board (.kicad_pcb) from aFileName.
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
MAGNETIC_SETTINGS * GetMagneticItemsSettings() override
FOOTPRINT_EDITOR_SETTINGS * GetSettings()
void SwitchCanvas(EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType) override
Switch the currently used canvas (Cairo / OpenGL).
bool LoadFootprintFromBoard(FOOTPRINT *aFootprint)
Load a footprint from the main board into the Footprint Editor.
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Helper to retrieve the current color settings.
Footprint Editor pane with footprint library tree.
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
Definition: kiid.h:48
Carry a payload from one KIWAY_PLAYER to another within a PROJECT.
Definition: kiway_express.h:39
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition: kiway.h:273
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:49
Model class in the component selector Model-View-Adapter (mediated MVC) architecture.
Common, abstract interface for edit frames.
Class to display a pcb layer list in a wxBitmapComboBox.
Parameters and options when plotting/printing a board.
Class to handle modifications to the symbol libraries.
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:59
Definition: bitmap.cpp:64