KiCad PCB EDA Suite
pcb_base_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) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
5  * Copyright (C) 2008-2016 Wayne Stambaugh <stambaughw@verizon.net>
6  * Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, you may find one here:
20  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21  * or you may search the http://www.gnu.org website for the version 2 license,
22  * or you may write to the Free Software Foundation, Inc.,
23  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24  */
25 
31 #ifndef PCB_BASE_FRAME_H
32 #define PCB_BASE_FRAME_H
33 
34 
35 #include <eda_item.h>
36 #include <board.h>
37 #include <eda_draw_frame.h>
38 #include <outline_mode.h>
39 #include <lib_id.h>
40 #include <pcb_display_options.h>
41 #include <pcb_draw_panel_gal.h>
42 #include <pcb_origin_transforms.h>
43 #include <pcb_screen.h>
44 #include <richio.h>
45 #include <vector>
46 
47 
48 /* Forward declarations of classes. */
49 class APP_SETTINGS_BASE;
50 class BOARD;
52 class COLOR_SETTINGS;
53 class FOOTPRINT;
54 class TRACK;
55 class PAD;
56 class EDA_3D_VIEWER;
57 class GENERAL_COLLECTOR;
60 class ZONE_SETTINGS;
61 class PCB_PLOT_PARAMS;
62 class FP_LIB_TABLE;
63 class PCBNEW_SETTINGS;
65 struct MAGNETIC_SETTINGS;
66 
67 
68 wxDECLARE_EVENT( BOARD_CHANGED, wxCommandEvent );
69 
75 {
76 protected:
80  PCBNEW_SETTINGS* m_settings; // No ownership, just a shortcut
81 
82  virtual void unitsChangeRefresh() override;
83 
94  FOOTPRINT* loadFootprint( const LIB_ID& aFootprintId );
95 
96 public:
97  PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType,
98  const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize,
99  long aStyle, const wxString& aFrameName );
100 
101  ~PCB_BASE_FRAME();
102 
107 
115  virtual void Update3DView( bool aForceReload, const wxString* aTitle = nullptr );
116 
120  void Redraw3Dview();
121 
130  FOOTPRINT* LoadFootprint( const LIB_ID& aFootprintId );
131 
138  EDA_RECT GetBoardBoundingBox( bool aBoardEdgesOnly = false ) const;
139 
140  const BOX2I GetDocumentExtents( bool aIncludeAllVisible = true ) const override
141  {
142  /* "Zoom to Fit" calls this with "aIncludeAllVisible" as true. Since that
143  * feature always ignored the page and border, this function returns a bbox
144  * without them as well when passed true. This technically is not all things
145  * visible, but it keeps behavior consistent.
146  *
147  * When passed false, this function returns a bbox of just the board edge.
148  * This allows things like fabrication text or anything else outside the board
149  * edge to be ignored, and just zooms up to the board itself.
150  *
151  * Calling "GetBoardBoundingBox(true)" when edge cuts are turned off will return bbox of
152  * entire page and border, so we make sure to do "GetBoardBoundingBox(false)" instead.
153  */
154  if( aIncludeAllVisible || ( !aIncludeAllVisible && !m_pcb->IsLayerVisible( Edge_Cuts ) ) )
155  return GetBoardBoundingBox( false );
156  else
157  return GetBoardBoundingBox( true );
158  }
159 
160  virtual void SetPageSettings( const PAGE_INFO& aPageSettings ) override;
161  const PAGE_INFO& GetPageSettings() const override;
162  const wxSize GetPageSizeIU() const override;
163 
164  const wxPoint& GetGridOrigin() const override;
165  void SetGridOrigin( const wxPoint& aPoint ) override;
166 
167  const wxPoint& GetAuxOrigin() const;
168 
169  const wxPoint GetUserOrigin() const;
170 
175 
176  const TITLE_BLOCK& GetTitleBlock() const override;
177  void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) override;
178 
183  virtual BOARD_DESIGN_SETTINGS& GetDesignSettings() const;
184 
189  virtual COLOR_SETTINGS* GetColorSettings() override
190  {
191  wxFAIL_MSG( "Color settings requested for a PCB_BASE_FRAME that does not override!" );
192  return nullptr;
193  }
194 
196 
197  void SetDrawBgColor( COLOR4D aColor ) override;
198 
205  void SetDisplayOptions( const PCB_DISPLAY_OPTIONS& aOptions );
206 
207  const ZONE_SETTINGS& GetZoneSettings() const;
208  void SetZoneSettings( const ZONE_SETTINGS& aSettings );
209 
215  virtual const PCB_PLOT_PARAMS& GetPlotSettings() const;
216  virtual void SetPlotSettings( const PCB_PLOT_PARAMS& aSettings );
217 
224  virtual void SetBoard( BOARD* aBoard );
225 
226  BOARD* GetBoard() const
227  {
228  wxASSERT( m_pcb );
229  return m_pcb;
230  }
231 
236  virtual BOARD_ITEM_CONTAINER* GetModel() const = 0;
237 
238  EDA_ITEM* GetItem( const KIID& aId ) override;
239 
240  void FocusOnItem( BOARD_ITEM* aItem );
241 
242  // General
243  virtual void ReCreateOptToolbar() override { }
244  virtual void ShowChangedLanguage() override;
245  virtual void ReCreateMenuBar() override;
246  virtual void UpdateStatusBar() override;
247 
248  PCB_SCREEN* GetScreen() const override { return (PCB_SCREEN*) EDA_DRAW_FRAME::GetScreen(); }
249 
256 
262 
270  wxString SelectLibrary( const wxString& aNicknameExisting );
271 
279 
287  virtual void OnModify();
288 
289  // footprints (footprints)
290 
301  FOOTPRINT* CreateNewFootprint( const wxString& aFootprintName );
302 
310  void PlaceFootprint( FOOTPRINT* aFootprint, bool aRecreateRatsnest = true );
311 
312  void ShowPadPropertiesDialog( PAD* aPad );
313 
321 
327  virtual void AddFootprintToBoard( FOOTPRINT* aFootprint );
328 
336 
345  void Compile_Ratsnest( bool aDisplayStatus );
346 
347  /* Functions relative to Undo/redo commands: */
348 
358  virtual void SaveCopyInUndoList( EDA_ITEM* aItemToCopy, UNDO_REDO aTypeCommand,
359  const wxPoint& aTransformPoint = wxPoint( 0, 0 ) ) = 0;
360 
370  virtual void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList, UNDO_REDO aTypeCommand,
371  const wxPoint& aTransformPoint = wxPoint( 0, 0 ) ) = 0;
372 
373 
381  PCB_LAYER_ID SelectLayer( PCB_LAYER_ID aDefaultLayer, LSET aNotAllowedLayersMask = LSET(),
382  wxPoint aDlgPosition = wxDefaultPosition );
383 
384  virtual void SwitchLayer( wxDC* DC, PCB_LAYER_ID layer );
385 
386  virtual void SetActiveLayer( PCB_LAYER_ID aLayer )
387  {
388  GetScreen()->m_Active_Layer = aLayer;
389  }
390 
391  virtual PCB_LAYER_ID GetActiveLayer() const
392  {
393  return GetScreen()->m_Active_Layer;
394  }
395 
396  int GetSeverity( int aErrorCode ) const override;
397 
398  virtual void OnDisplayOptionsChanged() {}
399 
400  void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
401  void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
402 
404 
406 
408 
409  void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged ) override;
410 
411  virtual void OnUpdateLayerAlpha( wxUpdateUIEvent& aEvent ) {}
412 
418  void DisplayGridMsg() override;
419 
420  PCB_DRAW_PANEL_GAL* GetCanvas() const override;
421 
423  virtual void ActivateGalCanvas() override;
424 
428  virtual void SetAutoZoom( bool aAutoZoom ) {}
429 
433  virtual bool GetAutoZoom() { return false; }
434 };
435 
436 #endif // PCB_BASE_FRAME_H
wxString SelectFootprintFromLibBrowser()
Function SelectFootprintFromLibBrowser launches the footprint viewer to select the name of a footprin...
const BOX2I GetDocumentExtents(bool aIncludeAllVisible=true) const override
Returns bbox of document with option to not include some items.
virtual void SetBoard(BOARD *aBoard)
Function SetBoard sets the m_Pcb member in such as way as to ensure deleting any previous BOARD.
virtual void ShowChangedLanguage() override
Redraw the menus and what not in current language.
void DisplayGridMsg() override
Function DisplayGridMsg()
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Returns the BOARD_DESIGN_SETTINGS for the open project Overloaded in FOOTPRINT_EDIT_FRAME.
virtual void unitsChangeRefresh() override
Called when when the units setting has changed to allow for any derived classes to handle refreshing ...
void Redraw3Dview()
Request a redraw of 3D-Viewer canvas.
void SetGridOrigin(const wxPoint &aPoint) override
EDA_ITEM * GetItem(const KIID &aId) override
Fetch an item by KIID.
void Compile_Ratsnest(bool aDisplayStatus)
Function Compile_Ratsnest Create the entire board ratsnest.
virtual void OnDisplayOptionsChanged()
FOOTPRINT * SelectFootprintFromLibTree(LIB_ID aPreselect=LIB_ID())
Function SelectFootprintFromLibTree opens a dialog to select a footprint.
BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class,...
Definition: board_item.h:86
FRAME_T
Enum FRAME_T is the set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition: frame_type.h:34
FOOTPRINT_EDITOR_SETTINGS * GetFootprintEditorSettings()
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
virtual COLOR_SETTINGS * GetColorSettings() override
Helper to retrieve the current color settings.
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
const wxPoint & GetGridOrigin() const override
Return the absolute coordinates of the origin of the snap grid.
const wxPoint GetUserOrigin() const
void SetTitleBlock(const TITLE_BLOCK &aTitleBlock) override
void SetDisplayOptions(const PCB_DISPLAY_OPTIONS &aOptions)
void SetDrawBgColor(COLOR4D aColor) override
virtual MAGNETIC_SETTINGS * GetMagneticItemsSettings()
PCBNEW_SETTINGS * GetPcbNewSettings()
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
PCB_BASE_FRAME(KIWAY *aKiway, wxWindow *aParent, FRAME_T aFrameType, const wxString &aTitle, const wxPoint &aPos, const wxSize &aSize, long aStyle, const wxString &aFrameName)
The base class for create windows for drawing purpose.
virtual const PCB_PLOT_PARAMS & GetPlotSettings() const
Function GetPlotSettings returns the PCB_PLOT_PARAMS for the BOARD owned by this frame.
PCBNEW_SETTINGS * m_settings
PCB_LAYER_ID m_Active_Layer
Definition: pcb_screen.h:37
const PCB_DISPLAY_OPTIONS & GetDisplayOptions() const
Function GetDisplayOptions Display options control the way tracks, vias, outlines and other things ar...
TITLE_BLOCK holds the information shown in the lower right corner of a plot, printout,...
Definition: title_block.h:40
BOARD_CONNECTED_ITEM is a base class derived from BOARD_ITEM for items that can be connected and have...
UNDO_REDO
Undo Redo considerations: Basically we have 3 cases New item Deleted item Modified item there is also...
void PlaceFootprint(FOOTPRINT *aFootprint, bool aRecreateRatsnest=true)
Function PlaceFootprint places aFootprint at the current cursor position and updates footprint coordi...
virtual bool GetAutoZoom()
Always returns false.
virtual PCB_LAYER_ID GetActiveLayer() const
PCB_DISPLAY_OPTIONS m_displayOptions
Definition: kiid.h:44
PCB_DISPLAY_OPTIONS handles display options like enable/disable some optional drawings.
PCB_LAYER_ID
A quick note on layer IDs:
GENERAL_COLLECTORS_GUIDE GetCollectorsGuide()
Function GetCollectorsGuide.
LSET is a set of PCB_LAYER_IDs.
FOOTPRINT * loadFootprint(const LIB_ID &aFootprintId)
Function loadFootprint attempts to load aFootprintId from the footprint library table.
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:99
virtual void ActivateGalCanvas() override
EDA_3D_VIEWER * CreateAndShow3D_Frame()
Shows the 3D view frame.
PAGE_INFO describes the page size and margins of a paper page on which to eventually print or plot.
Definition: page_info.h:54
const ZONE_SETTINGS & GetZoneSettings() const
virtual void OnUpdateLayerAlpha(wxUpdateUIEvent &aEvent)
KIWAY is a minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the s...
Definition: kiway.h:273
virtual void SetPlotSettings(const PCB_PLOT_PARAMS &aSettings)
EDA_RECT GetBoardBoundingBox(bool aBoardEdgesOnly=false) const
Function GetBoardBoundingBox calculates the bounding box containing all board items (or board edge se...
FOOTPRINT * LoadFootprint(const LIB_ID &aFootprintId)
Function LoadFootprint attempts to load aFootprintId from the footprint library table.
virtual void SetActiveLayer(PCB_LAYER_ID aLayer)
PICKED_ITEMS_LIST is a holder to handle information on schematic or board items.
virtual void ReCreateMenuBar() override
Recreates the menu bar.
PCB_PLOT_PARAMS handles plot parameters and options when plotting/printing a board.
int GetSeverity(int aErrorCode) const override
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Saves common frame parameters to a configuration data file.
virtual void SwitchLayer(wxDC *DC, PCB_LAYER_ID layer)
ZONE_SETTINGS handles zones parameters.
Definition: zone_settings.h:67
virtual BOARD_ITEM_CONTAINER * GetModel() const =0
Function GetModel()
FOOTPRINT * CreateNewFootprint(const wxString &aFootprintName)
Function CreateNewFootprint Creates a new footprint, at position 0,0 The new footprint contains only ...
const TITLE_BLOCK & GetTitleBlock() const override
virtual void OnModify()
Function OnModify Must be called after a change in order to set the "modify" flag of the current scre...
virtual void UpdateStatusBar() override
Update the status bar information.
bool IsLayerVisible(PCB_LAYER_ID aLayer) const
A proxy function that calls the correspondent function in m_BoardSettings tests whether a given layer...
Definition: board.cpp:443
wxDECLARE_EVENT(BOARD_CHANGED, wxCommandEvent)
A class to perform either relative or absolute display origin transforms for a single axis of a point...
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:186
ORIGIN_TRANSFORMS & GetOriginTransforms() override
Return a reference to the default ORIGIN_TRANSFORMS object.
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:241
virtual void SetAutoZoom(bool aAutoZoom)
Does nothing.
EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
PCBNEW_SETTINGS & Settings()
const PAGE_INFO & GetPageSettings() const override
virtual void AddFootprintToBoard(FOOTPRINT *aFootprint)
Adds the given footprint to the board.
EDA_ITEM is a base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:148
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
virtual void SetPageSettings(const PAGE_INFO &aPageSettings) override
const wxSize GetPageSizeIU() const override
Works off of GetPageSettings() to return the size of the paper page in the internal units of this par...
Color settings are a bit different than most of the settings objects in that there can be more than o...
void SetZoneSettings(const ZONE_SETTINGS &aSettings)
Create and handle a window for the 3d viewer connected to a Kiway and a pcbboard.
Definition: eda_3d_viewer.h:65
wxString SelectLibrary(const wxString &aNicknameExisting)
Function SelectLibrary puts up a dialog and allows the user to pick a library, for unspecified use.
virtual void SaveCopyInUndoList(EDA_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, const wxPoint &aTransformPoint=wxPoint(0, 0))=0
Function SaveCopyInUndoList (virtual pure) Creates a new entry in undo list of commands.
Abstract interface for BOARD_ITEMs capable of storing other items inside.
BOARD * GetBoard() const
virtual void ReCreateOptToolbar() override
A general implementation of a COLLECTORS_GUIDE.
Definition: collectors.h:376
Definition: pad.h:59
void ShowPadPropertiesDialog(PAD *aPad)
virtual void Update3DView(bool aForceReload, const wxString *aTitle=nullptr)
Update the 3D view, if the viewer is opened by this frame.
EDA_3D_VIEWER * Get3DViewerFrame()
Definition of PCB_DISPLAY_OPTIONS class.
PCB_LAYER_ID SelectLayer(PCB_LAYER_ID aDefaultLayer, LSET aNotAllowedLayersMask=LSET(), wxPoint aDlgPosition=wxDefaultPosition)
Install the dialog box for layer selection.
Definition: sel_layer.cpp:204
virtual BASE_SCREEN * GetScreen() const
Return a pointer to a BASE_SCREEN or one of its derivatives.
void FocusOnItem(BOARD_ITEM *aItem)
PCB_BASE_FRAME basic PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
Definition: track.h:83
FOOTPRINT * GetFootprintFromBoardByReference()
Function GetFootprintFromBoardByReference.
PCB_ORIGIN_TRANSFORMS m_originTransforms
BOARD_DESIGN_SETTINGS contains design settings for a BOARD object.
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:100
const wxPoint & GetAuxOrigin() const