Add unresolved variable testing for worksheet items.
This commit is contained in:
parent
e9e72bd8e4
commit
9f2be3714f
|
@ -72,8 +72,8 @@ COLOR_SETTINGS::COLOR_SETTINGS( std::string aFilename ) :
|
||||||
CLR( "schematic.component_body", LAYER_DEVICE_BACKGROUND, COLOR4D( LIGHTYELLOW ) );
|
CLR( "schematic.component_body", LAYER_DEVICE_BACKGROUND, COLOR4D( LIGHTYELLOW ) );
|
||||||
CLR( "schematic.component_outline", LAYER_DEVICE, COLOR4D( RED ) );
|
CLR( "schematic.component_outline", LAYER_DEVICE, COLOR4D( RED ) );
|
||||||
CLR( "schematic.cursor", LAYER_SCHEMATIC_CURSOR, COLOR4D( BLACK ) );
|
CLR( "schematic.cursor", LAYER_SCHEMATIC_CURSOR, COLOR4D( BLACK ) );
|
||||||
CLR( "schematic.erc_error", LAYER_ERC_ERR, COLOR4D( RED ).WithAlpha( 0.8 ) );
|
CLR( "schematic.erc_error", LAYER_ERC_ERR, COLOR4D( PURERED ).WithAlpha( 0.8 ) );
|
||||||
CLR( "schematic.erc_warning", LAYER_ERC_WARN, COLOR4D( GREEN ).WithAlpha( 0.8 ) );
|
CLR( "schematic.erc_warning", LAYER_ERC_WARN, COLOR4D( PUREGREEN ).WithAlpha( 0.8 ) );
|
||||||
CLR( "schematic.fields", LAYER_FIELDS, COLOR4D( MAGENTA ) );
|
CLR( "schematic.fields", LAYER_FIELDS, COLOR4D( MAGENTA ) );
|
||||||
CLR( "schematic.grid", LAYER_SCHEMATIC_GRID, COLOR4D( DARKGRAY ) );
|
CLR( "schematic.grid", LAYER_SCHEMATIC_GRID, COLOR4D( DARKGRAY ) );
|
||||||
CLR( "schematic.grid_axes", LAYER_SCHEMATIC_GRID_AXES, COLOR4D( BLUE ) );
|
CLR( "schematic.grid_axes", LAYER_SCHEMATIC_GRID_AXES, COLOR4D( BLUE ) );
|
||||||
|
|
|
@ -323,7 +323,7 @@ void DIALOG_ERC::TestErc( REPORTER& aReporter )
|
||||||
}
|
}
|
||||||
|
|
||||||
if( settings->IsTestEnabled( ERCE_UNRESOLVED_VARIABLE ) )
|
if( settings->IsTestEnabled( ERCE_UNRESOLVED_VARIABLE ) )
|
||||||
TestTextVars( sch );
|
TestTextVars( sch, m_parent->GetCanvas()->GetView()->GetWorksheet() );
|
||||||
|
|
||||||
// Display diags:
|
// Display diags:
|
||||||
m_markerTreeModel->SetProvider( m_markerProvider );
|
m_markerTreeModel->SetProvider( m_markerProvider );
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fctsys.h>
|
#include <fctsys.h>
|
||||||
#include <sch_draw_panel.h>
|
|
||||||
#include <kicad_string.h>
|
#include <kicad_string.h>
|
||||||
#include <sch_edit_frame.h>
|
#include <sch_edit_frame.h>
|
||||||
#include <netlist_object.h>
|
#include <netlist_object.h>
|
||||||
|
@ -40,6 +39,8 @@
|
||||||
#include <sch_reference_list.h>
|
#include <sch_reference_list.h>
|
||||||
#include <schematic.h>
|
#include <schematic.h>
|
||||||
#include <wx/ffile.h>
|
#include <wx/ffile.h>
|
||||||
|
#include <ws_draw_item.h>
|
||||||
|
#include <ws_proxy_view_item.h>
|
||||||
|
|
||||||
|
|
||||||
/* ERC tests :
|
/* ERC tests :
|
||||||
|
@ -171,7 +172,7 @@ int TestDuplicateSheetNames( SCHEMATIC* aSchematic, bool aCreateMarker )
|
||||||
|
|
||||||
for( size_t i = 0; i < list.size(); i++ )
|
for( size_t i = 0; i < list.size(); i++ )
|
||||||
{
|
{
|
||||||
SCH_SHEET* item = list[i];
|
SCH_SHEET* sheet = list[i];
|
||||||
|
|
||||||
for( size_t j = i + 1; j < list.size(); j++ )
|
for( size_t j = i + 1; j < list.size(); j++ )
|
||||||
{
|
{
|
||||||
|
@ -180,14 +181,14 @@ int TestDuplicateSheetNames( SCHEMATIC* aSchematic, bool aCreateMarker )
|
||||||
// We have found a second sheet: compare names
|
// We have found a second sheet: compare names
|
||||||
// we are using case insensitive comparison to avoid mistakes between
|
// we are using case insensitive comparison to avoid mistakes between
|
||||||
// similar names like Mysheet and mysheet
|
// similar names like Mysheet and mysheet
|
||||||
if( item->GetName().CmpNoCase( test_item->GetName() ) == 0 )
|
if( sheet->GetName().CmpNoCase( test_item->GetName() ) == 0 )
|
||||||
{
|
{
|
||||||
if( aCreateMarker )
|
if( aCreateMarker )
|
||||||
{
|
{
|
||||||
ERC_ITEM* ercItem = new ERC_ITEM( ERCE_DUPLICATE_SHEET_NAME );
|
ERC_ITEM* ercItem = new ERC_ITEM( ERCE_DUPLICATE_SHEET_NAME );
|
||||||
ercItem->SetItems( item, test_item );
|
ercItem->SetItems( sheet, test_item );
|
||||||
|
|
||||||
SCH_MARKER* marker = new SCH_MARKER( ercItem, item->GetPosition() );
|
SCH_MARKER* marker = new SCH_MARKER( ercItem, sheet->GetPosition() );
|
||||||
screen->Append( marker );
|
screen->Append( marker );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,8 +202,16 @@ int TestDuplicateSheetNames( SCHEMATIC* aSchematic, bool aCreateMarker )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TestTextVars( SCHEMATIC* aSchematic )
|
void TestTextVars( SCHEMATIC* aSchematic, KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet )
|
||||||
{
|
{
|
||||||
|
WS_DRAW_ITEM_LIST wsItems;
|
||||||
|
|
||||||
|
if( aWorksheet )
|
||||||
|
{
|
||||||
|
wsItems.SetMilsToIUfactor( IU_PER_MILS );
|
||||||
|
wsItems.BuildWorkSheetGraphicList( aWorksheet->GetPageInfo(), aWorksheet->GetTitleBlock() );
|
||||||
|
}
|
||||||
|
|
||||||
SCH_SCREENS screens( aSchematic->Root() );
|
SCH_SCREENS screens( aSchematic->Root() );
|
||||||
|
|
||||||
for( SCH_SCREEN* screen = screens.GetFirst(); screen != NULL; screen = screens.GetNext() )
|
for( SCH_SCREEN* screen = screens.GetFirst(); screen != NULL; screen = screens.GetNext() )
|
||||||
|
@ -269,6 +278,21 @@ void TestTextVars( SCHEMATIC* aSchematic )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for( WS_DRAW_ITEM_BASE* item = wsItems.GetFirst(); item; item = wsItems.GetNext() )
|
||||||
|
{
|
||||||
|
if( WS_DRAW_ITEM_TEXT* text = dynamic_cast<WS_DRAW_ITEM_TEXT*>( item ) )
|
||||||
|
{
|
||||||
|
if( text->GetShownText().Matches( wxT( "*${*}*" ) ) )
|
||||||
|
{
|
||||||
|
ERC_ITEM* ercItem = new ERC_ITEM( ERCE_UNRESOLVED_VARIABLE );
|
||||||
|
ercItem->SetErrorMessage( _( "Unresolved text variable in worksheet." ) );
|
||||||
|
|
||||||
|
SCH_MARKER* marker = new SCH_MARKER( ercItem, text->GetPosition() );
|
||||||
|
screen->Append( marker );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,11 @@ class NETLIST_OBJECT_LIST;
|
||||||
class SCH_SHEET_LIST;
|
class SCH_SHEET_LIST;
|
||||||
class SCHEMATIC;
|
class SCHEMATIC;
|
||||||
|
|
||||||
|
namespace KIGFX
|
||||||
|
{
|
||||||
|
class WS_PROXY_VIEW_ITEM;
|
||||||
|
}
|
||||||
|
|
||||||
/* For ERC markers: error types (used in diags, and to set the color):
|
/* For ERC markers: error types (used in diags, and to set the color):
|
||||||
*/
|
*/
|
||||||
enum errortype
|
enum errortype
|
||||||
|
@ -122,7 +127,7 @@ int TestDuplicateSheetNames( SCHEMATIC* aSchematic, bool aCreateMarker );
|
||||||
* Function TestTextVars()
|
* Function TestTextVars()
|
||||||
* Checks for any unresolved text variable references.
|
* Checks for any unresolved text variable references.
|
||||||
*/
|
*/
|
||||||
void TestTextVars( SCHEMATIC* aSchematic );
|
void TestTextVars( SCHEMATIC* aSchematic, KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks that there are not conflicting bus alias definitions in the schematic
|
* Checks that there are not conflicting bus alias definitions in the schematic
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
#include <erc_item.h>
|
#include <erc_item.h>
|
||||||
|
|
||||||
/// Factor to convert the maker unit shape to internal units:
|
/// Factor to convert the maker unit shape to internal units:
|
||||||
#define SCALING_FACTOR Millimeter2iu( 0.1 )
|
#define SCALING_FACTOR Millimeter2iu( 0.15 )
|
||||||
|
|
||||||
|
|
||||||
SCH_MARKER::SCH_MARKER( ERC_ITEM* aItem, const wxPoint& aPos ) :
|
SCH_MARKER::SCH_MARKER( ERC_ITEM* aItem, const wxPoint& aPos ) :
|
||||||
|
|
|
@ -80,6 +80,9 @@ public:
|
||||||
m_colorLayer = aLayerId;
|
m_colorLayer = aLayerId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const PAGE_INFO& GetPageInfo() { return *m_pageInfo; }
|
||||||
|
const TITLE_BLOCK& GetTitleBlock() { return *m_titleBlock; }
|
||||||
|
|
||||||
/// @copydoc VIEW_ITEM::ViewBBox()
|
/// @copydoc VIEW_ITEM::ViewBBox()
|
||||||
const BOX2I ViewBBox() const override;
|
const BOX2I ViewBBox() const override;
|
||||||
|
|
||||||
|
|
|
@ -633,7 +633,8 @@ void DRC::RunTests( wxTextCtrl* aMessages )
|
||||||
DRC_TEXTVAR_TESTER tester( [&]( MARKER_PCB* aMarker )
|
DRC_TEXTVAR_TESTER tester( [&]( MARKER_PCB* aMarker )
|
||||||
{
|
{
|
||||||
addMarkerToPcb( commit, aMarker );
|
addMarkerToPcb( commit, aMarker );
|
||||||
} );
|
},
|
||||||
|
m_editFrame->GetCanvas()->GetWorksheet() );
|
||||||
|
|
||||||
tester.RunDRC( userUnits(), *m_pcb );
|
tester.RunDRC( userUnits(), *m_pcb );
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,12 +26,15 @@
|
||||||
|
|
||||||
#include <class_module.h>
|
#include <class_module.h>
|
||||||
#include <class_pcb_text.h>
|
#include <class_pcb_text.h>
|
||||||
|
#include <ws_draw_item.h>
|
||||||
|
#include <ws_proxy_view_item.h>
|
||||||
|
|
||||||
|
DRC_TEXTVAR_TESTER::DRC_TEXTVAR_TESTER( MARKER_HANDLER aMarkerHandler,
|
||||||
DRC_TEXTVAR_TESTER::DRC_TEXTVAR_TESTER( MARKER_HANDLER aMarkerHandler ) :
|
KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet ) :
|
||||||
DRC_TEST_PROVIDER( std::move( aMarkerHandler ) ),
|
DRC_TEST_PROVIDER( std::move( aMarkerHandler ) ),
|
||||||
m_units( EDA_UNITS::MILLIMETRES ),
|
m_units( EDA_UNITS::MILLIMETRES ),
|
||||||
m_board( nullptr )
|
m_board( nullptr ),
|
||||||
|
m_worksheet( aWorksheet )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,6 +84,32 @@ bool DRC_TEXTVAR_TESTER::RunDRC( EDA_UNITS aUnits, BOARD& aBoard )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WS_DRAW_ITEM_LIST wsItems;
|
||||||
|
|
||||||
|
if( m_worksheet )
|
||||||
|
{
|
||||||
|
wsItems.SetMilsToIUfactor( IU_PER_MILS );
|
||||||
|
wsItems.BuildWorkSheetGraphicList( m_worksheet->GetPageInfo(),
|
||||||
|
m_worksheet->GetTitleBlock() );
|
||||||
|
|
||||||
|
for( WS_DRAW_ITEM_BASE* item = wsItems.GetFirst(); item; item = wsItems.GetNext() )
|
||||||
|
{
|
||||||
|
if( WS_DRAW_ITEM_TEXT* text = dynamic_cast<WS_DRAW_ITEM_TEXT*>( item ) )
|
||||||
|
{
|
||||||
|
if( text->GetShownText().Matches( wxT( "*${*}*" ) ) )
|
||||||
|
{
|
||||||
|
DRC_ITEM* drcItem = new DRC_ITEM( DRCE_UNRESOLVED_VARIABLE );
|
||||||
|
drcItem->SetErrorMessage( _( "Unresolved text variable in worksheet." ) );
|
||||||
|
|
||||||
|
HandleMarker( new MARKER_PCB( drcItem, text->GetPosition() ) );
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// JEY TODO: Test text vars in worksheet...
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,15 +34,16 @@ class BOARD;
|
||||||
class DRC_TEXTVAR_TESTER : public DRC_TEST_PROVIDER
|
class DRC_TEXTVAR_TESTER : public DRC_TEST_PROVIDER
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DRC_TEXTVAR_TESTER( MARKER_HANDLER aMarkerHandler );
|
DRC_TEXTVAR_TESTER( MARKER_HANDLER aMarkerHandler, KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet );
|
||||||
|
|
||||||
virtual ~DRC_TEXTVAR_TESTER() {};
|
virtual ~DRC_TEXTVAR_TESTER() {};
|
||||||
|
|
||||||
bool RunDRC( EDA_UNITS aUnits, BOARD& aBoard ) override;
|
bool RunDRC( EDA_UNITS aUnits, BOARD& aBoard ) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EDA_UNITS m_units;
|
EDA_UNITS m_units;
|
||||||
BOARD* m_board;
|
BOARD* m_board;
|
||||||
|
KIGFX::WS_PROXY_VIEW_ITEM* m_worksheet;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DRC_TEXTVAR_TESTER__H
|
#endif // DRC_TEXTVAR_TESTER__H
|
||||||
|
|
Loading…
Reference in New Issue