KiCad PCB EDA Suite
Loading...
Searching...
No Matches
dialog_board_reannotate.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) 2020 Brian Piccioni [email protected]
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 * @author Brian Piccioni <[email protected]>
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
26#pragma once
27
29#include <layer_ids.h>
31#include <pcb_base_frame.h>
32#include <pcb_edit_frame.h>
33#include <project.h>
34#include <frame_type.h>
35#include <tool/actions.h>
36#include <tool/tool_manager.h>
38
39#define SORTXFIRST 0b000 // Sort on X
40#define SORTYFIRST 0b100 // Sort on Y
41#define ASCENDINGFIRST 0b000 // Sort low to high
42#define DESCENDINGFIRST 0b010 // Sort high to low
43#define ASCENDINGSECOND 0b000 // Sort low to high
44#define DESCENDINGSECOND 0b001 // Sort high to low
45
46#define MINGRID 1000
47#define MAXERROR 10
48#define VALIDPREFIX "_-+=/\\" // Prefixs can be alpha or these symbols
49
57
59{
61 wxString NewRefDes; // The new reference designation (F_U21)
62 wxString OldRefDesString; // What the old refdes preamble + number was
63 bool Front; // True if on the front of the board
64 ACTION_CODE Action; // Used to skip (if #, etc)
65};
66
68{
70 bool Front; // True if on the front of the board
71 wxString RefDesString; // What its refdes is R1, C2
72 wxString RefDesPrefix; // ie R, C, etc
73 int x, y; // The coordinates
74 int roundedx, roundedy; // The coordinates after rounding.
75 ACTION_CODE Action; // Used to skip (if #, etc)
77};
78
80{
81 wxString RefDesPrefix;
82 unsigned int LastUsedRefDes;
83 std::set<unsigned int> UnavailableRefs;
84};
85
86
88{
89public:
92
93private:
94 std::vector<wxRadioButton*> m_sortButtons = {
101 m_Up_Left,
103 };
104
105 std::vector<wxRadioButton*> m_scopeRadioButtons = {
110 };
111
122
123 bool TransferDataToWindow() override;
124
125 void OnApplyClick( wxCommandEvent& event ) override;
126 void OnCloseClick( wxCommandEvent& event ) override;
127 void FilterFrontPrefix( wxCommandEvent& event ) override;
128 void FilterBackPrefix( wxCommandEvent& event ) override;
129
131 void ShowReport( const wxString& aMessage, SEVERITY aSeverity );
132
134 void LogFootprints( const std::vector<REFDES_INFO>& aFootprints );
135
137 void LogChangePlan( void );
138
141 bool ReannotateBoard( void );
142
145 bool BuildFootprintList( std::vector<REFDES_INFO>& aBadRefDes );
146
149
151 void BuildChangeArray( std::vector<REFDES_INFO>& aFootprints, unsigned int aStartRefDes,
152 const wxString& aPrefix, bool aRemovePrefix,
153 std::vector<REFDES_INFO>& aBadRefDes );
154
156 REFDES_CHANGE* GetNewRefDes( FOOTPRINT* aFootprint );
157
159 int RoundToGrid( int aCoord, int aGrid );
160
163 wxString CoordTowxString( int aX, int aY );
164
166 void FilterPrefix( wxTextCtrl* aPrefix );
167
170 REFDES_PREFIX_INFO* GetOrBuildRefDesInfo( const wxString& aRefDesPrefix, int aStartRefDes = 1 );
171
172private:
174 FOOTPRINTS m_footprints;
175
176 std::vector<REFDES_CHANGE> m_changeArray;
177 std::vector<REFDES_INFO> m_frontFootprints;
178 std::vector<REFDES_INFO> m_backFootprints;
179 std::vector<REFDES_PREFIX_INFO> m_refDesPrefixInfos;
180 std::vector<wxString> m_excludeArray;
181};
DIALOG_BOARD_REANNOTATE_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Geographical Reannotation"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
std::vector< REFDES_CHANGE > m_changeArray
std::vector< wxString > m_excludeArray
bool BuildFootprintList(std::vector< REFDES_INFO > &aBadRefDes)
Build the footprint lists, sort it, filter for excludes, then build the change list.
std::vector< wxRadioButton * > m_scopeRadioButtons
void FilterBackPrefix(wxCommandEvent &event) override
std::vector< wxStaticBitmap * > Bitmaps
std::vector< REFDES_INFO > m_frontFootprints
wxString CoordTowxString(int aX, int aY)
Convert coordinates to wxString.
void FilterPrefix(wxTextCtrl *aPrefix)
Check to make sure the prefix (if there is one) is properly constructed.
void BuildChangeArray(std::vector< REFDES_INFO > &aFootprints, unsigned int aStartRefDes, const wxString &aPrefix, bool aRemovePrefix, std::vector< REFDES_INFO > &aBadRefDes)
Scan through the footprint arrays and create the from -> to array.
void LogFootprints(const std::vector< REFDES_INFO > &aFootprints)
Create a list of the footprints and their coordinates.
int RoundToGrid(int aCoord, int aGrid)
Round an int coordinate to a suitable grid.
REFDES_PREFIX_INFO * GetOrBuildRefDesInfo(const wxString &aRefDesPrefix, int aStartRefDes=1)
Get the structure representing the information currently held for aRefDesPrefix or create one if it d...
void BuildUnavailableRefsList()
Build list of unavailable references. E.g. unselected footprints or locked footprints.
~DIALOG_BOARD_REANNOTATE()=default
void LogChangePlan(void)
Create an audit trail of the changes.
void OnCloseClick(wxCommandEvent &event) override
REFDES_CHANGE * GetNewRefDes(FOOTPRINT *aFootprint)
bool ReannotateBoard(void)
Actually reannotate the board.
void ShowReport(const wxString &aMessage, SEVERITY aSeverity)
Break report into strings separated by and sent to the reporter.
std::vector< REFDES_INFO > m_backFootprints
std::vector< REFDES_PREFIX_INFO > m_refDesPrefixInfos
DIALOG_BOARD_REANNOTATE(PCB_EDIT_FRAME *aParentFrame)
void OnApplyClick(wxCommandEvent &event) override
std::vector< wxRadioButton * > m_sortButtons
void FilterFrontPrefix(wxCommandEvent &event) override
Definition kiid.h:49
A logical library item identifier and consists of various portions much like a URI.
Definition lib_id.h:49
The main frame for Pcbnew.
SEVERITY
std::set< unsigned int > UnavailableRefs