/* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2007 Dick Hollenbeck, dick@softplc.com * Copyright (C) 2018-2020 KiCad Developers, see AUTHORS.txt for contributors. * * 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 DRC_ITEM_H #define DRC_ITEM_H #include #include class MARKER_BASE; class BOARD; class BOARD_ITEM; /** * DRC_ITEM * is a holder for a DRC (in Pcbnew) or ERC (in Eeschema) error item. * There are holders for information on two EDA_ITEMs. Some errors involve only one item * (item with an incorrect param) so m_hasSecondItem is set to false in this case. */ class DRC_ITEM { protected: int m_ErrorCode; // the error code's numeric value wxString m_MainText; // text for the first EDA_ITEM wxString m_AuxiliaryText; // text for the second EDA_ITEM wxPoint m_MainPosition; // the location of the first EDA_ITEM wxPoint m_AuxiliaryPosition; // the location of the second EDA_ITEM bool m_hasSecondItem; // true when 2 items create a DRC/ERC error bool m_noCoordinate; MARKER_BASE* m_parent; // The marker this item belongs to, if any KIID m_mainItemUuid; KIID m_auxItemUuid; public: DRC_ITEM() { m_ErrorCode = 0; m_hasSecondItem = false; m_noCoordinate = false; m_parent = nullptr; m_mainItemUuid = niluuid; m_auxItemUuid = niluuid; } DRC_ITEM( EDA_UNITS aUnits, int aErrorCode, EDA_ITEM* aMainItem, const wxPoint& aMainPos, EDA_ITEM* bAuxiliaryItem, const wxPoint& bAuxiliaryPos ) { SetData( aUnits, aErrorCode, aMainItem, aMainPos, bAuxiliaryItem, bAuxiliaryPos ); } DRC_ITEM( EDA_UNITS aUnits, int aErrorCode, EDA_ITEM* aMainItem, const wxPoint& aMainPos ) { SetData( aUnits, aErrorCode, aMainItem, aMainPos ); } DRC_ITEM( int aErrorCode, const wxString& aMainText ) { SetData( aErrorCode, aMainText, wxPoint() ); SetShowNoCoordinate(); } /** * Function SetData * initialize all data in item * @param aErrorCode = error code * @param aMainItem = the first (main) schematic or board item * @param bAuxiliaryItem = the second schematic or board item * @param aMainPos = position the first item and therefore of this issue * @param bAuxiliaryPos = position the second item */ void SetData( EDA_UNITS aUnits, int aErrorCode, EDA_ITEM* aMainItem, const wxPoint& aMainPos, EDA_ITEM* bAuxiliaryItem = nullptr, const wxPoint& bAuxiliaryPos = wxPoint() ) { m_ErrorCode = aErrorCode; m_MainText = aMainItem->GetSelectMenuText( aUnits ); m_AuxiliaryText = wxEmptyString; m_MainPosition = aMainPos; m_AuxiliaryPosition = bAuxiliaryPos; m_hasSecondItem = bAuxiliaryItem != nullptr; m_noCoordinate = false; m_parent = nullptr; m_mainItemUuid = aMainItem->m_Uuid; if( m_hasSecondItem ) { m_AuxiliaryText = bAuxiliaryItem->GetSelectMenuText( aUnits ); m_auxItemUuid = bAuxiliaryItem->m_Uuid; } } /** * Function SetData * initialize all data in item * @param aErrorCode = error code * @param aMainItem = the first (main) schematic or board item * @param bAuxiliaryItem = the second schematic or board item * @param aMainPos = position the first item and therefore of this issue * @param bAuxiliaryPos = position the second item */ void SetData( int aErrorCode, const wxString& aMainText, const wxPoint& aMainPos, const wxString& bAuxiliaryText = wxEmptyString, const wxPoint& bAuxiliaryPos = wxPoint() ) { m_ErrorCode = aErrorCode; m_MainText = aMainText; m_AuxiliaryText = bAuxiliaryText; m_MainPosition = aMainPos; m_AuxiliaryPosition = bAuxiliaryPos; m_hasSecondItem = bAuxiliaryText.Length(); m_noCoordinate = false; m_parent = nullptr; m_mainItemUuid = niluuid; m_auxItemUuid = niluuid; } /** * Function SetAuxiliaryData * initialize data for the second (auxiliary) item * @param aAuxiliaryText = the second text (main text) concerning the second schematic or board item * @param aAuxiliaryPos = position the second item */ void SetAuxiliaryData( const wxString& aAuxiliaryText, const wxPoint& aAuxiliaryPos ) { m_AuxiliaryText = aAuxiliaryText; m_AuxiliaryPosition = aAuxiliaryPos; m_hasSecondItem = true; m_auxItemUuid = niluuid; } void SetParent( MARKER_BASE* aMarker ) { m_parent = aMarker; } MARKER_BASE* GetParent() const { return m_parent; } bool HasSecondItem() const { return m_hasSecondItem; } void SetShowNoCoordinate() { m_noCoordinate = true; } /** * Access to A and B texts */ wxString GetMainText() const { return m_MainText; } wxString GetAuxiliaryText() const { return m_AuxiliaryText; } /** * Access to A and B items for BOARDs */ BOARD_ITEM* GetMainItem( BOARD* aBoard ) const; BOARD_ITEM* GetAuxiliaryItem( BOARD* aBoard ) const; /** * Function ShowHtml * translates this object into a fragment of HTML suitable for the wxHtmlListBox class. * @return wxString - the html text. */ wxString ShowHtml( EDA_UNITS aUnits ) const; /** * Function ShowReport * translates this object into a text string suitable for saving to disk in a report. * @return wxString - the simple multi-line report text. */ wxString ShowReport( EDA_UNITS aUnits ) const; int GetErrorCode() const { return m_ErrorCode; } /** * Function GetErrorText * returns the string form of a drc error code. */ wxString GetErrorText() const; const wxString& GetTextA() const { return m_MainText; } const wxString& GetTextB() const { return m_AuxiliaryText; } const wxPoint& GetPointA() const { return m_MainPosition; } const wxPoint& GetPointB() const { return m_AuxiliaryPosition; } /** * Function ShowCoord * formats a coordinate or position to text. */ static wxString ShowCoord( EDA_UNITS aUnits, const wxPoint& aPos ); }; #endif // DRC_ITEM_H