kicad/pcbnew/dialogs/dialog_board_reannotate.h

179 lines
5.6 KiB
C++

/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2020 Brian Piccioni brian@documenteddesigns.com
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
* @author Brian Piccioni <brian@documenteddesigns.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef DIALOG_BOARD_REANNOTATE_H_
#define DIALOG_BOARD_REANNOTATE_H_
#include <class_board.h>
#include <class_module.h>
#include <class_text_mod.h>
#include <dialogs/dialog_board_reannotate_base.h>
#include <layers_id_colors_and_visibility.h>
#include <netlist_reader/pcb_netlist.h>
#include <pcb_base_frame.h>
#include <pcb_edit_frame.h>
#include <project.h>
#include <stdint.h>
#include <wx/wx.h>
#include <wx_html_report_panel.h>
#include <fctsys.h>
#include <frame_type.h>
#include <tool/actions.h>
#include <tool/tool_manager.h>
#include <tools/selection_tool.h>
#define SORTXFIRST 0b000 //Sort on X
#define SORTYFIRST 0b100 //Sort on Y
#define ASCENDINGFIRST 0b000 //Sort low to high
#define DESCENDINGFIRST 0b010 //Sort high to low
#define ASCENDINGSECOND 0b000 //Sort low to high
#define DESCENDINGSECOND 0b001 //Sort high to low
#define MINGRID 1000
#define MAXERROR 10
#define VALIDPREFIX "_-+=/\\" //Prefixs can be alpha or these symbols
enum ActionCode
{
UpdateRefDes,
EmptyRefDes,
InvalidRefDes,
Exclude
};
enum AnnotationChoice
{
AnnotateAll,
AnnotateFront,
AnnotateBack,
AnnotateSelected
};
struct RefDesChange
{
KIID Uuid;
wxString NewRefDes; //The new reference designation (F_U21)
wxString OldRefDesString; //What the old refdes preamble + number was
bool Front; //True if on the front of the board
ActionCode Action; //Used to skip (if #, etc)
};
struct RefDesInfo
{
KIID Uuid;
bool Front; //True if on the front of the board
wxString RefDesString; //What its refdes is R1, C2
wxString RefDesType; //ie R, C, etc
int x, y; //The coordinates
int roundedx, roundedy; //The coordinates after rounding.
ActionCode Action; //Used to skip (if #, etc)
LIB_ID FPID;
};
struct RefDesTypeStr
{
wxString RefDesType;
unsigned int RefDesCount;
};
class DIALOG_BOARD_REANNOTATE : public DIALOG_BOARD_REANNOTATE_BASE
{
public:
DIALOG_BOARD_REANNOTATE( PCB_EDIT_FRAME* aParentFrame );
~DIALOG_BOARD_REANNOTATE();
private:
PCB_EDIT_FRAME* m_frame;
MODULES m_modules;
PCB_SCREEN* m_screen;
PCBNEW_SELECTION m_selection;
std::vector<RefDesChange> m_ChangeArray;
std::vector<RefDesInfo> m_FrontModules;
std::vector<RefDesInfo> m_BackModules;
std::vector<RefDesTypeStr> m_RefDesTypes;
std::vector<wxString> m_ExcludeArray;
EDA_UNITS m_Units;
bool m_Standalone;
int m_SortCode;
int m_GridIndex;
int m_AnnotationChoice;
int m_Severity;
double m_SortGridx;
double m_SortGridy;
wxString m_FrontPrefixString;
wxString m_BackPrefixString;
wxString m_ValidPrefixes;
APP_SETTINGS_BASE* m_Settings;
std::vector<wxRadioButton*> m_sortButtons = { m_Down_Right, m_Right_Down, m_Down_Left,
m_Left_Down, m_Up_Right, m_Right_Up, m_Up_Left, m_Left_Up };
std::vector<wxRadioButton*> AnnotateWhat = { m_AnnotateAll, m_AnnotateFront, m_AnnotateBack,
m_AnnotateSelection };
std::vector<wxStaticBitmap*> Bitmaps = { reannotate_down_right_bitmap, reannotate_right_down_bitmap,
reannotate_down_left_bitmap, reannotate_left_down_bitmap, reannotate_up_right_bitmap,
reannotate_right_up_bitmap, reannotate_up_left_bitmap, reannotate_left_up_bitmap };
APP_SETTINGS_BASE* m_Config;
void GetParameters( void );
void InitValues( void );
void OnApplyClick( wxCommandEvent& event ) override;
void OnCloseClick( wxCommandEvent& event ) override;
void FilterFrontPrefix( wxCommandEvent& event ) override;
void FilterBackPrefix( wxCommandEvent& event ) override;
void ShowReport( wxString aMessage, SEVERITY aSeverity );
void LogModules( wxString& aMessage, std::vector<RefDesInfo>& aModules );
void LogChangePlan( void );
bool ReannotateBoard( void );
bool BuildModuleList( std::vector<RefDesInfo>& aBadRefDes );
void BuildChangeArray( std::vector<RefDesInfo>& aModules, unsigned int aStartRefDes,
wxString aPrefix, bool aRemovePrefix, std::vector<RefDesInfo>& aBadRefDes );
RefDesChange* GetNewRefDes( MODULE* aMod );
int RoundToGrid( int aCoord, int aGrid );
wxString CoordTowxString( int aX, int aY );
void MakeSampleText( wxString& aMessage );
void FilterPrefix( wxTextCtrl* aPrefix );
};
#endif /* DIALOG_BOARD_REANNOTATECLASSES_H_ */