2nd of 3 commits for DrcDialog rework

This commit is contained in:
dickelbeck 2007-12-01 05:37:44 +00:00
parent 128521f0fe
commit 3465bfeb82
6 changed files with 183 additions and 214 deletions

View File

@ -282,6 +282,17 @@ public:
return NULL; return NULL;
} }
/**
* Function GetMARKERCount
* @return int - The number of MARKERS.
*/
int GetMARKERCount() const
{
return (int) m_markers.size();
}
/* Routines de calcul des nombres de segments pistes et zones */ /* Routines de calcul des nombres de segments pistes et zones */
int GetNumSegmTrack(); int GetNumSegmTrack();
int GetNumSegmZone(); int GetNumSegmZone();

View File

@ -9,6 +9,62 @@
#include "bitmaps.h" #include "bitmaps.h"
wxString DRC_ITEM::GetErrorText() const
{
switch( m_ErrorCode )
{
// case DRCE_: not assigned yet
case DRCE_UNCONNECTED_PADS:
return wxString( _("Unconnected pads") );
case DRCE_TRACK_NEAR_THROUGH_HOLE:
return wxString( _("Track near thru-hole") );
case DRCE_TRACK_NEAR_PAD:
return wxString( _("Track near pad") );
case DRCE_TRACK_NEAR_VIA:
return wxString( _("Track near via") );
case DRCE_VIA_NEAR_VIA:
return wxString( _("Via near via") );
case DRCE_VIA_NEAR_TRACK:
return wxString( _("Via near track") );
case DRCE_TRACK_ENDS1:
case DRCE_TRACK_ENDS2:
case DRCE_TRACK_ENDS3:
case DRCE_TRACK_ENDS4:
case DRCE_ENDS_PROBLEM1:
case DRCE_ENDS_PROBLEM2:
case DRCE_ENDS_PROBLEM3:
case DRCE_ENDS_PROBLEM4:
case DRCE_ENDS_PROBLEM5:
return wxString( _("Two track ends") );
case DRCE_TRACK_UNKNOWN1:
return wxString( _("This looks bad") ); ///< @todo check source code and change this comment
case DRCE_TRACKS_CROSSING:
return wxString( _("Tracks crossing") );
case DRCE_PAD_NEAR_PAD1:
return wxString( _("Pad near pad") );
default:
return wxString( wxT("PROGRAM BUG, PLEASE LEAVE THE ROOM.") );
}
}
wxString DRC_ITEM::ShowCoord( const wxPoint& aPos )
{
wxString temp;
wxString ret;
ret << wxT("@(") << valeur_param( aPos.x, temp );
ret << wxT(",") << valeur_param( aPos.y, temp );
ret << wxT(")");
return ret;
}
/*****************/ /*****************/
/* Class BOARD: */ /* Class BOARD: */
/*****************/ /*****************/

View File

@ -18,7 +18,7 @@
/* Default bitmap shape for markers */ /* Default bitmap shape for markers */
static char Default_MarkerBitmap[] = static char Default_MarkerBitmap[] =
{ {
12, 12, /* x and y sise of the bitmap */ 12, 12, /* x and y size of the bitmap */
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, /* bitmap: 1 = color, 0 = notrace */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, /* bitmap: 1 = color, 0 = notrace */
1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0,
1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0,
@ -106,11 +106,26 @@ void MARKER::Display_Infos( WinEDA_DrawFrame* frame )
frame->MsgPanel->EraseMsgBox(); frame->MsgPanel->EraseMsgBox();
const DRC_ITEM& rpt = m_drc;
text_pos = 1; text_pos = 1;
Affiche_1_Parametre( frame, text_pos, _( "Type" ), _("Marker"), DARKCYAN ); Affiche_1_Parametre( frame, text_pos, _( "Type" ), _("Marker"), DARKCYAN );
text_pos = 12; wxString errorTxt;
Affiche_1_Parametre( frame, text_pos, _( "Marker Error Text" ), GetOneLineMessage(), RED );
errorTxt << _("ErrType") << wxT("(") << rpt.GetErrorCode() << wxT(")- ") << rpt.GetErrorText() << wxT(":");
text_pos = 5;
Affiche_1_Parametre( frame, text_pos, errorTxt, wxEmptyString, RED );
wxString txtA;
txtA << DRC_ITEM::ShowCoord( rpt.GetPointA() ) << wxT(": ") << rpt.GetTextA();
wxString txtB;
txtB << DRC_ITEM::ShowCoord( rpt.GetPointB() ) << wxT(": ") << rpt.GetTextB();
text_pos = 20; // @todo pick a better color here
Affiche_1_Parametre( frame, text_pos, txtA, txtB, BLACK );
} }

View File

@ -78,37 +78,19 @@ public:
const wxString& aText, const wxPoint& aPos, const wxString& aText, const wxPoint& aPos,
const wxString& bText, const wxPoint& bPos ); const wxString& bText, const wxPoint& bPos );
/**
* Function GetMessage
* @return const wxString& - the diagnostic message
*/
const wxString GetOneLineMessage()
{
return m_drc.ShowText();
}
/** /**
* Function GetReporter * Function GetReporter
* returns the REPORT_ISSUE held within this MARKER so that its * returns the DRC_ITEM held within this MARKER so that its
* interface may be used. * interface may be used.
* @return const& REPORT_ISSUE * @return const& DRC_ITEM
*/ */
const REPORT_ISSUE& GetReporter() const const DRC_ITEM& GetReporter() const
{ {
return m_drc; return m_drc;
} }
/*
void SetMessage( const wxString& aMsg )
{
m_Diag = aMsg;
}
*/
/** /**
* Function Display_Infos * Function Display_Infos
* has knowledge about the frame and how and where to put status information * has knowledge about the frame and how and where to put status information

View File

@ -41,15 +41,12 @@
#include "drc_stuff.h" #include "drc_stuff.h"
/* variables locales */
class DrcDialog;
#include "dialog_drc.cpp" #include "dialog_drc.cpp"
#define EC_INC // ++m_errorCount don't need this anymore, vector counts
/******************************************************/ /******************************************************/
void WinEDA_PcbFrame::Install_Test_DRC_Frame( wxDC* DC ) void WinEDA_PcbFrame::Install_Test_DRC_Frame( wxDC* DC )
/******************************************************/ /******************************************************/
@ -67,53 +64,14 @@ void DRC::ShowDialog()
if( !m_ui ) if( !m_ui )
{ {
printf("creating new DrcFrame\n");
m_ui = new DrcDialog( this, m_mainWindow ); m_ui = new DrcDialog( this, m_mainWindow );
} }
// @todo enter retentitive member data into the DrcDialog here
// @todo enter retentitive data into the panel.
// m_RptFilenameCtrl->SetValue(s_RptFilename);
m_ui->Show(true); m_ui->Show(true);
// int rval = m_ui->ShowModal();
// @todo capture the UI entered data into this DRC object. BUT in the OK handler
#if defined(DEBUG)
// printf("dialog rval=%d wxID_OK=%d\n", rval, wxID_OK );
#endif
// if( rval == wxID_OK )
{
// @todo capture the UI entered data into the DRC_TESTER here
/*
s_Pad2PadTestOpt = m_Pad2PadTestCtrl->IsChecked();
s_UnconnectedTestOpt = m_UnconnectedTestCtrl->IsChecked();
s_ZonesTestOpt = m_ZonesTestCtrl->IsChecked();
s_CreateRptFileOpt = m_CreateRptCtrl->IsChecked();
wxBoxSizer* m_MainSizer;
wxBoxSizer* m_CommandSizer;
wxStaticText* m_ClearenceTitle;
wxTextCtrl* m_SetClearance;
wxCheckBox* m_CreateRptCtrl;
wxTextCtrl* m_RptFilenameCtrl;
wxButton* m_BrowseButton;
wxCheckBox* m_Pad2PadTestCtrl;
wxCheckBox* m_UnconnectedTestCtrl;
wxCheckBox* m_ZonesTestCtrl;
wxButton* m_DeleteCurrentMarkerButton;
DRCLISTBOX* m_ClearanceListBox;
DRCLISTBOX* m_UnconnectedListBox;
wxStdDialogButtonSizer* StdDialogButtonSizer;
*/
}
// m_ui->Destroy();
// m_ui = 0;
} }
@ -180,7 +138,7 @@ void DrcDialog::CmdDrc()
// @todo set the list counts in the DRCLISTITEMS here. // @todo set the list counts in the DRCLISTITEMS here.
printf("done with tests\n"); // printf("done with tests\n");
} }
@ -194,31 +152,6 @@ void DrcDialog::ListUnconnectedPads( wxCommandEvent& event )
} }
const wxString& DRC_ITEM::GetErrorText() const
{
static const wxString error1( wxT("Items Too Close:") );
switch( m_ErrorCode )
{
default:
case DRCE_: return error1;
}
}
wxString DRC_ITEM::ShowCoord( const wxPoint& aPos )
{
wxString temp;
wxString ret;
ret << wxT("@(") << valeur_param( aPos.x, temp );
ret << wxT(",") << valeur_param( aPos.y, temp );
ret << wxT(")");
return ret;
}
DRC::DRC( WinEDA_PcbFrame* aPcbWindow ) DRC::DRC( WinEDA_PcbFrame* aPcbWindow )
{ {
m_mainWindow = aPcbWindow; m_mainWindow = aPcbWindow;
@ -234,7 +167,7 @@ DRC::DRC( WinEDA_PcbFrame* aPcbWindow )
// m_rptFilename set to empty by its constructor // m_rptFilename set to empty by its constructor
m_errorCount = 0; //m_errorCount = 0;
m_currentMarker = 0; m_currentMarker = 0;
m_spotcx = 0; m_spotcx = 0;
@ -263,9 +196,9 @@ int DRC::Drc( TRACK* aRefSegm, TRACK* aList )
if( !doTrackDrc( aRefSegm, aList ) ) if( !doTrackDrc( aRefSegm, aList ) )
{ {
wxString msg = m_currentMarker->GetReporter().ShowText(); wxASSERT( m_currentMarker );
m_mainWindow->Affiche_Message( msg ); m_currentMarker->Display_Infos( m_mainWindow );
return BAD_DRC; return BAD_DRC;
} }
@ -275,20 +208,24 @@ int DRC::Drc( TRACK* aRefSegm, TRACK* aList )
void DRC::WriteReport( FILE* fp ) void DRC::WriteReport( FILE* fp )
{ {
fprintf( fp, "Drc report for %s\n", fprintf( fp, "** Drc report for %s **\n",
CONV_TO_UTF8( m_mainWindow->GetScreen()->m_FileName ) ); CONV_TO_UTF8( m_mainWindow->GetScreen()->m_FileName ) );
char line[256]; char line[256];
fprintf( fp, "Created on %s\n", DateAndTime( line ) ); fprintf( fp, "** Created on %s **\n", DateAndTime( line ) );
// write report here fprintf( fp, "** Found %d DRC errors **\n", m_pcb->GetMARKERCount() );
int errors = 0;
if( errors ) for( int i=0; i<m_pcb->GetMARKERCount(); ++i )
fprintf( fp, "** End DRC: %d errors **\n", errors ); fprintf( fp, m_pcb->GetMARKER(i)->GetReporter().ShowReport().mb_str() );
else if( m_unconnectedCount == 0 )
fprintf( fp, "** End Drc: No Error **\n" ); // @todo: the unconnected report comes here:
/*
for( int i=0; i<m_pcb->GetOPENNETCount(); ++i )
fprintf( fp, m_pcb->GetOPENNET(i)->GetReporter().ShowReport().mb_str() );
*/
} }
@ -302,7 +239,7 @@ void DRC::RunTests()
if( m_doPad2PadTest ) if( m_doPad2PadTest )
testPad2Pad(); testPad2Pad();
// test track and via clearnces to other tracks, pads, and vias // test track and via clearances to other tracks, pads, and vias
testTracks(); testTracks();
// test zone clearances to other zones, pads, tracks, and vias // test zone clearances to other zones, pads, tracks, and vias
@ -448,7 +385,7 @@ MARKER* DRC::fillMarker( TRACK* aTrack, BOARD_ITEM* aItem, int aErrorCode, MARKE
wxPoint endPos = track->m_End; wxPoint endPos = track->m_End;
// either of aItem's start or end will be used for the marker position // either of aItem's start or end will be used for the marker position
// first assume start, then swith to end if needed. decision made on // first assume start, then switch at end if needed. decision made on
// distance from end of aTrack. // distance from end of aTrack.
position = track->m_Start; position = track->m_Start;
@ -533,7 +470,7 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
/* Phase 1 : test DRC track to pads : */ /* Phase 1 : test DRC track to pads : */
/******************************************/ /******************************************/
D_PAD pseudo_pad( (MODULE*) NULL ); D_PAD pseudo_pad( (MODULE*) NULL ); // construct this once outside following loop
// Compute the min distance to pads // Compute the min distance to pads
w_dist = aRefSeg->m_Width >> 1; w_dist = aRefSeg->m_Width >> 1;
@ -557,7 +494,7 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
pseudo_pad.SetPosition( pad->GetPosition() ); pseudo_pad.SetPosition( pad->GetPosition() );
pseudo_pad.m_PadShape = pad->m_DrillShape; pseudo_pad.m_PadShape = pad->m_DrillShape;
pseudo_pad.m_Orient = pad->m_Orient; pseudo_pad.m_Orient = pad->m_Orient;
pseudo_pad.ComputeRayon(); // compute the ray length pseudo_pad.ComputeRayon(); // compute the radius
m_spotcx = pseudo_pad.GetPosition().x - org_X; m_spotcx = pseudo_pad.GetPosition().x - org_X;
m_spotcy = pseudo_pad.GetPosition().y - org_Y; m_spotcy = pseudo_pad.GetPosition().y - org_Y;
@ -565,7 +502,7 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
if( !checkClearanceSegmToPad( &pseudo_pad, w_dist, if( !checkClearanceSegmToPad( &pseudo_pad, w_dist,
g_DesignSettings.m_TrackClearence ) ) g_DesignSettings.m_TrackClearence ) )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, pad, m_currentMarker = fillMarker( aRefSeg, pad,
DRCE_TRACK_NEAR_THROUGH_HOLE, m_currentMarker ); DRCE_TRACK_NEAR_THROUGH_HOLE, m_currentMarker );
return false; return false;
@ -586,7 +523,7 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
m_spotcy = shape_pos.y - org_Y; m_spotcy = shape_pos.y - org_Y;
if( !checkClearanceSegmToPad( pad, w_dist, g_DesignSettings.m_TrackClearence ) ) if( !checkClearanceSegmToPad( pad, w_dist, g_DesignSettings.m_TrackClearence ) )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, pad, m_currentMarker = fillMarker( aRefSeg, pad,
DRCE_TRACK_NEAR_PAD, m_currentMarker ); DRCE_TRACK_NEAR_PAD, m_currentMarker );
return false; return false;
@ -642,7 +579,7 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
// Test distance between two vias // Test distance between two vias
if( (int) hypot( x0, y0 ) < w_dist ) if( (int) hypot( x0, y0 ) < w_dist )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_VIA_NEAR_VIA, m_currentMarker ); DRCE_VIA_NEAR_VIA, m_currentMarker );
return false; return false;
@ -659,7 +596,7 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
if( !checkMarginToCircle( x0, y0, w_dist, dx ) ) if( !checkMarginToCircle( x0, y0, w_dist, dx ) )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_VIA_NEAR_TRACK, m_currentMarker ); DRCE_VIA_NEAR_TRACK, m_currentMarker );
return false; return false;
@ -686,7 +623,7 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
if( checkMarginToCircle( x0, y0, w_dist, m_segmLength ) ) if( checkMarginToCircle( x0, y0, w_dist, m_segmLength ) )
continue; continue;
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_TRACK_NEAR_VIA, m_currentMarker ); DRCE_TRACK_NEAR_VIA, m_currentMarker );
return false; return false;
@ -710,14 +647,14 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
/* Fine test : we consider the rounded shape of the ends */ /* Fine test : we consider the rounded shape of the ends */
if( x0 >= 0 && x0 <= m_segmLength ) if( x0 >= 0 && x0 <= m_segmLength )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_TRACK_ENDS1, m_currentMarker ); DRCE_TRACK_ENDS1, m_currentMarker );
return false; return false;
} }
if( !checkMarginToCircle( x0, y0, w_dist, m_segmLength ) ) if( !checkMarginToCircle( x0, y0, w_dist, m_segmLength ) )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_TRACK_ENDS2, m_currentMarker ); DRCE_TRACK_ENDS2, m_currentMarker );
return false; return false;
@ -728,14 +665,14 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
/* Fine test : we consider the rounded shape of the ends */ /* Fine test : we consider the rounded shape of the ends */
if( xf >= 0 && xf <= m_segmLength ) if( xf >= 0 && xf <= m_segmLength )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_TRACK_ENDS3, m_currentMarker ); DRCE_TRACK_ENDS3, m_currentMarker );
return false; return false;
} }
if( !checkMarginToCircle( xf, yf, w_dist, m_segmLength ) ) if( !checkMarginToCircle( xf, yf, w_dist, m_segmLength ) )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_TRACK_ENDS4, m_currentMarker ); DRCE_TRACK_ENDS4, m_currentMarker );
return false; return false;
@ -744,7 +681,7 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
if( x0 <=0 && xf >= 0 ) if( x0 <=0 && xf >= 0 )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_TRACK_UNKNOWN1, m_currentMarker ); DRCE_TRACK_UNKNOWN1, m_currentMarker );
return false; return false;
@ -760,7 +697,7 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
EXCHG( y0, yf ); EXCHG( y0, yf );
if( (y0 < 0) && (yf > 0) ) if( (y0 < 0) && (yf > 0) )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_TRACKS_CROSSING, m_currentMarker ); DRCE_TRACKS_CROSSING, m_currentMarker );
return false; return false;
@ -769,14 +706,14 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
// At this point the drc error is due to an end near a reference segm end // At this point the drc error is due to an end near a reference segm end
if( !checkMarginToCircle( x0, y0, w_dist, m_segmLength ) ) if( !checkMarginToCircle( x0, y0, w_dist, m_segmLength ) )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_ENDS_PROBLEM1, m_currentMarker ); DRCE_ENDS_PROBLEM1, m_currentMarker );
return false; return false;
} }
if( !checkMarginToCircle( xf, yf, w_dist, m_segmLength ) ) if( !checkMarginToCircle( xf, yf, w_dist, m_segmLength ) )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_ENDS_PROBLEM2, m_currentMarker ); DRCE_ENDS_PROBLEM2, m_currentMarker );
return false; return false;
@ -805,7 +742,7 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
if( !checkLine( x0, y0, xf, yf ) ) if( !checkLine( x0, y0, xf, yf ) )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_ENDS_PROBLEM3, m_currentMarker ); DRCE_ENDS_PROBLEM3, m_currentMarker );
return false; return false;
@ -841,14 +778,14 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart )
RotatePoint( &rxf, &ryf, angle ); RotatePoint( &rxf, &ryf, angle );
if( !checkMarginToCircle( rx0, ry0, w_dist, dx ) ) if( !checkMarginToCircle( rx0, ry0, w_dist, dx ) )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_ENDS_PROBLEM4, m_currentMarker ); DRCE_ENDS_PROBLEM4, m_currentMarker );
return false; return false;
} }
if( !checkMarginToCircle( rxf, ryf, w_dist, dx ) ) if( !checkMarginToCircle( rxf, ryf, w_dist, dx ) )
{ {
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefSeg, track, m_currentMarker = fillMarker( aRefSeg, track,
DRCE_ENDS_PROBLEM5, m_currentMarker ); DRCE_ENDS_PROBLEM5, m_currentMarker );
return false; return false;
@ -900,7 +837,7 @@ bool DRC::doPadToPadsDrc( D_PAD* aRefPad, LISTE_PAD* aStart, LISTE_PAD* aEnd,
if( !checkClearancePadToPad( aRefPad, pad, g_DesignSettings.m_TrackClearence ) ) if( !checkClearancePadToPad( aRefPad, pad, g_DesignSettings.m_TrackClearence ) )
{ {
// here we have a drc error! // here we have a drc error!
++m_errorCount; EC_INC;
m_currentMarker = fillMarker( aRefPad, pad, m_currentMarker = fillMarker( aRefPad, pad,
DRCE_PAD_NEAR_PAD1, m_currentMarker ); DRCE_PAD_NEAR_PAD1, m_currentMarker );
return false; return false;

View File

@ -34,8 +34,8 @@
/// DRC error codes: /// DRC error codes:
#define DRCE_ 1 #define DRCE_ 1 // not used yet
#define DRCE_UNCONNECTED_PADS 2 #define DRCE_UNCONNECTED_PADS 2 ///< pads are unconnected
#define DRCE_TRACK_NEAR_THROUGH_HOLE 3 ///< thru hole is too close to track #define DRCE_TRACK_NEAR_THROUGH_HOLE 3 ///< thru hole is too close to track
#define DRCE_TRACK_NEAR_PAD 4 ///< pad too close to track #define DRCE_TRACK_NEAR_PAD 4 ///< pad too close to track
#define DRCE_TRACK_NEAR_VIA 5 ///< track too close to via #define DRCE_TRACK_NEAR_VIA 5 ///< track too close to via
@ -55,52 +55,6 @@
#define DRCE_PAD_NEAR_PAD1 19 ///< pad too close to pad #define DRCE_PAD_NEAR_PAD1 19 ///< pad too close to pad
/**
* Class REPORT_ISSUE
* is an abstract interface used by DRCLISTBOX. It has functions to return
* either html text or disk file report text on this item. It also can
* return the drawing coordinate of the report item.
*/
class REPORT_ISSUE
{
public:
/**
* Function ShowHtml
* translates this object into a fragment of HTML suitable for the
* wxWidget's wxHtmlListBox class.
* @return wxString - the html text.
*/
virtual wxString ShowHtml() const = 0;
/**
* Function ShowText
* translates this object into a text string suitable for showing
* in the status panel.
* @return wxString - the simple non-html text.
*/
virtual wxString ShowText() const = 0;
/**
* Function ShowText
* translates this object into a text string suitable for saving
* to disk in a report.
* @return wxString - the simple non-html text.
*/
virtual wxString ShowReport() const = 0;
/**
* Function GetPosition
* @return const wxPoint& - the position of this report item within
* the drawing.
*/
virtual const wxPoint& GetPosition() const = 0;
};
/** /**
* Class DRC_ITEM * Class DRC_ITEM
* is a holder for a DRC error item. It is generated when two objects are * is a holder for a DRC error item. It is generated when two objects are
@ -109,7 +63,7 @@ public:
* Also held is the type of error by number and the location of the MARKER. * Also held is the type of error by number and the location of the MARKER.
* A function is provided to translate that number into text. * A function is provided to translate that number into text.
*/ */
class DRC_ITEM : public REPORT_ISSUE class DRC_ITEM
{ {
protected: protected:
@ -150,8 +104,6 @@ public:
} }
//-----<Interface REPORT_ISSUE>---------------------------------------
/** /**
* Function ShowHtml * Function ShowHtml
* translates this object into a fragment of HTML suitable for the * translates this object into a fragment of HTML suitable for the
@ -162,25 +114,8 @@ public:
{ {
wxString ret; wxString ret;
ret.Printf( wxT("<b>%s</b><ul><li> %s: %s </li><li> %s: %s </li></ul>"), ret.Printf( _("<b>ErrType(%d): %s</b><ul><li> %s: %s </li><li> %s: %s </li></ul>"),
GetErrorText().GetData(), m_ErrorCode,
ShowCoord( m_APos ).GetData(), m_AText.GetData(),
ShowCoord( m_BPos ).GetData(), m_BText.GetData() );
return ret;
}
/**
* Function ShowText
* translates this object into a text string suitable for saving
* to disk in a report. Change this as needed to format the report.
* @return wxString - the simple non-html text.
*/
wxString ShowText() const
{
wxString ret;
ret.Printf( wxT("%s %s: %s AND %s: %s"),
GetErrorText().GetData(), GetErrorText().GetData(),
ShowCoord( m_APos ).GetData(), m_AText.GetData(), ShowCoord( m_APos ).GetData(), m_AText.GetData(),
ShowCoord( m_BPos ).GetData(), m_BText.GetData() ); ShowCoord( m_BPos ).GetData(), m_BText.GetData() );
@ -190,16 +125,17 @@ public:
/** /**
* Function ShowText * Function ShowReport
* translates this object into a text string suitable for saving * translates this object into a text string suitable for saving
* to disk in a report. * to disk in a report.
* @return wxString - the simple non-html text. * @return wxString - the simple multi-line report text.
*/ */
wxString ShowReport() const wxString ShowReport() const
{ {
wxString ret; wxString ret;
ret.Printf( wxT("%s\n %s: %s\n %s: %s\n"), ret.Printf( wxT("ErrType(%d): %s\n %s: %s\n %s: %s\n"),
m_ErrorCode,
GetErrorText().GetData(), GetErrorText().GetData(),
ShowCoord( m_APos ).GetData(), m_AText.GetData(), ShowCoord( m_APos ).GetData(), m_AText.GetData(),
ShowCoord( m_BPos ).GetData(), m_BText.GetData() ); ShowCoord( m_BPos ).GetData(), m_BText.GetData() );
@ -207,6 +143,42 @@ public:
return ret; return ret;
} }
/**
* Function GetErrorCode
* returns the error code.
*/
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_AText;
}
const wxString& GetTextB() const
{
return m_BText;
}
const wxPoint& GetPointA() const
{
return m_APos;
}
const wxPoint& GetPointB() const
{
return m_BPos;
}
/** /**
* Function GetPosition * Function GetPosition
@ -218,16 +190,6 @@ public:
return m_Pos; return m_Pos;
} }
//-----</Interface REPORT_ISSUE>---------------------------------------
/**
* Function GetErrorText
* returns the string form of a drc error code.
*/
const wxString& GetErrorText() const;
/** /**
* Function ShowCoord * Function ShowCoord
* formats a coordinate or position to text. * formats a coordinate or position to text.
@ -268,7 +230,7 @@ private:
wxString m_rptFilename; wxString m_rptFilename;
int m_errorCount; // int m_errorCount;
MARKER* m_currentMarker; MARKER* m_currentMarker;
@ -477,6 +439,12 @@ public:
m_doCreateRptFile = aSaveReport; m_doCreateRptFile = aSaveReport;
} }
/**
* Function RunTests
* will actually run all the tests specified with a previous call to
* SetSettings()
*/
void RunTests(); void RunTests();