KiCad PCB EDA Suite
Loading...
Searching...
No Matches
initpcb.cpp
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) 2007-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright The 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
25#include <confirm.h>
26#include <lset.h>
27#include <pcb_edit_frame.h>
28#include <project.h>
29#include <tool/tool_manager.h>
32
33#include <board.h>
36
39#include <drc/drc_item.h>
40
41
42bool PCB_EDIT_FRAME::Clear_Pcb( bool doAskAboutUnsavedChanges, bool aFinal )
43{
44 if( GetBoard() == nullptr )
45 return false;
46
47 if( doAskAboutUnsavedChanges && !GetBoard()->IsEmpty() )
48 {
49 if( !IsOK( this, _( "Current Board will be lost and this operation cannot be undone. "
50 "Continue?" ) ) )
51 {
52 return false;
53 }
54 }
55
56 // Release the lock file, if exists
58
59 // Clear undo and redo lists because we want a full deletion
61 GetScreen()->SetContentModified( false );
62
63 if( !aFinal )
64 {
65 // delete the old BOARD and create a new BOARD so that the default
66 // layer names are put into the BOARD.
67 SetBoard( new BOARD() );
68
69 // clear filename, to avoid overwriting an old file
70 GetBoard()->SetFileName( wxEmptyString );
71
73
75
76 // Enable all layers (SetCopperLayerCount() will adjust the copper layers enabled)
77 GetBoard()->SetEnabledLayers( LSET().set() );
78
79 // Default copper layers count set to 2: double layer board
81
82 // Default user defined layers count set to 4
84
85 // Update display (some options depend on the board setup)
86 GetBoard()->SetVisibleLayers( LSET().set() );
89 m_appearancePanel->OnBoardChanged();
91
92 Zoom_Automatique( false );
93 }
94 else if( m_isClosing )
95 {
96 if( m_toolManager )
98
99 // Clear the view so we don't attempt redraws (particularly of the RATSNEST_VIEW_ITEM,
100 // which causes all manner of grief).
101 GetCanvas()->GetView()->Clear();
102 }
103
104 return true;
105}
106
107
108bool FOOTPRINT_EDIT_FRAME::Clear_Pcb( bool doAskAboutUnsavedChanges )
109{
110 if( GetBoard() == nullptr )
111 return false;
112
113 bool is_last_fp_from_brd = IsCurrentFPFromBoard();
114
115 if( doAskAboutUnsavedChanges && IsContentModified() )
116 {
117 wxSafeYield( this, true ); // Allow frame to come to front before showing warning.
118
120 this, _( "The current footprint has been modified. Save changes?" ),
121 [&]() -> bool
122 {
123 return SaveFootprint( GetBoard()->Footprints().front() );
124 } ) )
125 {
126 return false;
127 }
128 }
129
130 if( is_last_fp_from_brd )
131 m_boardFootprintUuids.clear();
132
133 // Clear undo and redo lists because we want a full deletion
135 GetScreen()->SetContentModified( false );
136
137 // Clear the view so we don't attempt redraws
138 GetCanvas()->GetView()->Clear();
139
140 if( !m_isClosing )
141 {
142 SetBoard( new BOARD );
143
145 GetBoard()->GetDesignSettings() = cfg->m_DesignSettings;
146
148
149 // This board will only be used to hold a footprint for editing
151
152 // Setup our own severities for the Footprint Checker.
153 // These are not (at present) user-editable.
154 std::map<int, SEVERITY>& drcSeverities = GetBoard()->GetDesignSettings().m_DRCSeverities;
155
156 for( int errorCode = DRCE_FIRST; errorCode <= DRCE_LAST; ++errorCode )
157 drcSeverities[ errorCode ] = RPT_SEVERITY_ERROR;
158
161
162 drcSeverities[ DRCE_PADSTACK ] = RPT_SEVERITY_WARNING;
163
165
166 // clear filename, to avoid overwriting an old file
167 GetBoard()->SetFileName( wxEmptyString );
168
170 }
171 else
172 {
173 if( m_toolManager )
175 }
176
177
178 return true;
179}
@ FPHOLDER
Definition board.h:309
void SetContentModified(bool aModified=true)
Definition base_screen.h:59
void InitDataPoints(const VECTOR2I &aPageSizeInternalUnits)
std::map< int, SEVERITY > m_DRCSeverities
Information pertinent to a Pcbnew printed circuit board.
Definition board.h:317
void SetVisibleLayers(const LSET &aLayerMask)
A proxy function that calls the correspondent function in m_BoardSettings changes the bit-mask of vis...
Definition board.cpp:955
void SetBoardUse(BOARD_USE aUse)
Set what the board is going to be used for.
Definition board.h:329
void SetFileName(const wxString &aFileName)
Definition board.h:352
void SynchronizeNetsAndNetClasses(bool aResetTrackAndViaSizes)
Copy NETCLASS info to each NET, based on NET membership in a NETCLASS.
Definition board.cpp:2287
void ResetNetHighLight()
Reset all high light data to the init state.
Definition board.cpp:2886
void SetCopperLayerCount(int aCount)
Definition board.cpp:881
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition board.cpp:1040
void SetEnabledLayers(const LSET &aLayerMask)
A proxy function that calls the correspondent function in m_BoardSettings.
Definition board.cpp:943
void SetUserDefinedLayerCount(int aCount)
Definition board.cpp:893
virtual void ClearUndoRedoList()
Clear the undo and redo list using ClearUndoORRedoList()
bool m_isClosing
Set by the close window event handler after frames are asked if they can close.
void ReleaseFile()
Release the current file marked in use.
virtual void ReCreateAuxiliaryToolbar()
virtual void Zoom_Automatique(bool aWarpPointer)
Redraw the screen with best zoom level and the best centering that shows all the page or the board.
bool SaveFootprint(FOOTPRINT *aFootprint)
Save in an existing library a given footprint.
std::map< KIID, KIID > m_boardFootprintUuids
bool IsContentModified() const override
Get if any footprints or libraries have been modified but not saved.
bool Clear_Pcb(bool doAskAboutUnsavedChanges)
Delete all and reinitialize the current board.
Definition initpcb.cpp:108
FOOTPRINT_EDITOR_SETTINGS * GetSettings()
void Clear()
Remove all items from the view.
Definition view.cpp:1143
LSET is a set of PCB_LAYER_IDs.
Definition lset.h:37
virtual void SetBoard(BOARD *aBoard, PROGRESS_REPORTER *aReporter=nullptr) override
Set the #m_Pcb member in such as way as to ensure deleting any previous BOARD.
APPEARANCE_CONTROLS * m_appearancePanel
const VECTOR2I GetPageSizeIU() const override
Works off of GetPageSettings() to return the size of the paper page in the internal units of this par...
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
BOARD * GetBoard() const
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void SetBoard(BOARD *aBoard, PROGRESS_REPORTER *aReporter=nullptr) override
Set the #m_Pcb member in such as way as to ensure deleting any previous BOARD.
void ReCreateLayerBox(bool aForceResizeToolbar=true)
Recreate the layer box by clearing the old list and building a new one from the new layer names and c...
bool Clear_Pcb(bool doAskAboutUnsavedChanges, bool aFinal=false)
Delete all and reinitialize the current board.
Definition initpcb.cpp:42
void UpdateTitle()
Set the main window title bar text.
TOOL_MANAGER * m_toolManager
@ SHUTDOWN
Tool is being shut down.
Definition tool_base.h:84
@ MODEL_RELOAD
Model changes (the sheet for a schematic)
Definition tool_base.h:80
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
Definition confirm.cpp:251
bool HandleUnsavedChanges(wxWindow *aParent, const wxString &aMessage, const std::function< bool()> &aSaveFunction)
Display a dialog with Save, Cancel and Discard Changes buttons.
Definition confirm.cpp:129
This file is part of the common library.
@ DRCE_PADSTACK
Definition drc_item.h:62
@ DRCE_DRILLED_HOLES_TOO_CLOSE
Definition drc_item.h:52
@ DRCE_FIRST
Definition drc_item.h:38
@ DRCE_FOOTPRINT_TYPE_MISMATCH
Definition drc_item.h:81
@ DRCE_DRILLED_HOLES_COLOCATED
Definition drc_item.h:53
@ DRCE_LAST
Definition drc_item.h:112
#define _(s)
@ RPT_SEVERITY_WARNING
@ RPT_SEVERITY_ERROR