KiCad PCB EDA Suite
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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() );
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 if( !m_isClosing )
138 {
139 SetBoard( new BOARD );
140
142 GetBoard()->GetDesignSettings() = cfg->m_DesignSettings;
143
145
146 // This board will only be used to hold a footprint for editing
147 GetBoard()->SetBoardUse( BOARD_USE::FPHOLDER );
148
149 // Setup our own severities for the Footprint Checker.
150 // These are not (at present) user-editable.
151 std::map<int, SEVERITY>& drcSeverities = GetBoard()->GetDesignSettings().m_DRCSeverities;
152
153 for( int errorCode = DRCE_FIRST; errorCode <= DRCE_LAST; ++errorCode )
154 drcSeverities[ errorCode ] = RPT_SEVERITY_ERROR;
155
158
159 drcSeverities[ DRCE_PADSTACK ] = RPT_SEVERITY_WARNING;
160
162
163 // clear filename, to avoid overwriting an old file
164 GetBoard()->SetFileName( wxEmptyString );
165
167 }
168 else
169 {
170 if( m_toolManager )
172
173 // Clear the view so we don't attempt redraws
174 GetCanvas()->GetView()->Clear();
175 }
176
177
178 return true;
179}
void SetContentModified(bool aModified=true)
Definition: base_screen.h:59
void InitDataPoints(const VECTOR2I &aPageSizeInternalUnits)
Definition: base_screen.cpp:46
std::map< int, SEVERITY > m_DRCSeverities
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:297
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:861
void SetBoardUse(BOARD_USE aUse)
Set what the board is going to be used for.
Definition: board.h:309
void SetFileName(const wxString &aFileName)
Definition: board.h:332
void SynchronizeNetsAndNetClasses(bool aResetTrackAndViaSizes)
Copy NETCLASS info to each NET, based on NET membership in a NETCLASS.
Definition: board.cpp:2144
void ResetNetHighLight()
Reset all high light data to the init state.
Definition: board.cpp:2763
void SetCopperLayerCount(int aCount)
Definition: board.cpp:787
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition: board.cpp:946
void SetEnabledLayers(const LSET &aLayerMask)
A proxy function that calls the correspondent function in m_BoardSettings.
Definition: board.cpp:849
void SetUserDefinedLayerCount(int aCount)
Definition: board.cpp:799
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:1131
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
Definition: tools_holder.h:171
@ 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
void ResetTools(TOOL_BASE::RESET_REASON aReason)
Reset all tools (i.e.
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
Definition: confirm.cpp:249
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:130
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