Pcbnew: fix minor bugs. Fix bug 1091593 and 1091693 . Minor code cleaning
This commit is contained in:
parent
63b884558a
commit
ea603c4deb
|
@ -404,9 +404,18 @@ public:
|
||||||
* 1 - duplicate footprints on board
|
* 1 - duplicate footprints on board
|
||||||
* 2 - missing footprints (found in netlist but not on board)
|
* 2 - missing footprints (found in netlist but not on board)
|
||||||
* 3 - footprints not in netlist but on board
|
* 3 - footprints not in netlist but on board
|
||||||
* @param aNetlistFullFilename = the full filename netlist
|
* @param aFilename = the full filename netlist
|
||||||
|
* @param aDuplicate = the list of duplicate modules to populate
|
||||||
|
* @param aMissing = the list of missing module references and values
|
||||||
|
* to populate. For each missing item, the first string is the ref,
|
||||||
|
* the second is the value.
|
||||||
|
* @param aNotInNetlist = the list of not-in-netlist modules to populate
|
||||||
|
* @return true if the netlist was read, or false
|
||||||
*/
|
*/
|
||||||
void Test_Duplicate_Missing_And_Extra_Footprints( const wxString& aNetlistFullFilename );
|
bool Test_Duplicate_Missing_And_Extra_Footprints( const wxString& aFilename,
|
||||||
|
std::vector <MODULE*>& aDuplicate,
|
||||||
|
wxArrayString& aMissing,
|
||||||
|
std::vector <MODULE*>& aNotInNetlist );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function OnHotKey.
|
* Function OnHotKey.
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
/*
|
/*
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 1992-20112 KiCad Developers, see change_log.txt for contributors.
|
* Copyright (C) 1992-2012 KiCad Developers, see change_log.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -448,7 +448,7 @@ bool DIALOG_COPPER_ZONE::AcceptOptions( bool aPromptForErrors, bool aUseExportab
|
||||||
if( m_settings.m_ThermalReliefCopperBridge <= m_settings.m_ZoneMinThickness )
|
if( m_settings.m_ThermalReliefCopperBridge <= m_settings.m_ZoneMinThickness )
|
||||||
{
|
{
|
||||||
DisplayError( this,
|
DisplayError( this,
|
||||||
_( "Thermal relief spoke width is larger than the minimum width." ) );
|
_( "Thermal relief spoke width is smaller than the minimum width." ) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,43 @@
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/**
|
||||||
// Name: dialog_netlist.cpp
|
* @file dialog_netlist.cpp
|
||||||
// Author: jean-pierre Charras
|
*/
|
||||||
// Licence: GPL
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 1992-2012 KiCad Developers, see change_log.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
|
||||||
|
*/
|
||||||
|
|
||||||
#include <fctsys.h>
|
#include <fctsys.h>
|
||||||
#include <appl_wxstruct.h>
|
#include <appl_wxstruct.h>
|
||||||
#include <confirm.h>
|
#include <confirm.h>
|
||||||
#include <pcbnew.h>
|
#include <dialog_helpers.h>
|
||||||
|
#include <html_messagebox.h>
|
||||||
|
#include <base_units.h>
|
||||||
#include <wxPcbStruct.h>
|
#include <wxPcbStruct.h>
|
||||||
#include <macros.h>
|
|
||||||
#include <pcbcommon.h>
|
#include <pcbcommon.h>
|
||||||
|
|
||||||
#include <pcbnew_config.h>
|
#include <pcbnew_config.h>
|
||||||
#include <class_board_design_settings.h>
|
#include <class_board_design_settings.h>
|
||||||
#include <class_board.h>
|
#include <class_board.h>
|
||||||
|
#include <class_module.h>
|
||||||
#include <wildcards_and_files_ext.h>
|
#include <wildcards_and_files_ext.h>
|
||||||
|
|
||||||
#include <dialog_netlist.h>
|
#include <dialog_netlist.h>
|
||||||
|
@ -53,12 +76,12 @@ void PCB_EDIT_FRAME::InstallNetlistFrame( wxDC* DC )
|
||||||
|
|
||||||
|
|
||||||
DIALOG_NETLIST::DIALOG_NETLIST( PCB_EDIT_FRAME* aParent, wxDC * aDC,
|
DIALOG_NETLIST::DIALOG_NETLIST( PCB_EDIT_FRAME* aParent, wxDC * aDC,
|
||||||
const wxString & aNetlistFull_Filename )
|
const wxString & aNetlistFullFilename )
|
||||||
: DIALOG_NETLIST_FBP( aParent )
|
: DIALOG_NETLIST_FBP( aParent )
|
||||||
{
|
{
|
||||||
m_Parent = aParent;
|
m_parent = aParent;
|
||||||
m_DC = aDC;
|
m_dc = aDC;
|
||||||
m_NetlistFilenameCtrl->SetValue( aNetlistFull_Filename );
|
m_NetlistFilenameCtrl->SetValue( aNetlistFullFilename );
|
||||||
|
|
||||||
Init();
|
Init();
|
||||||
|
|
||||||
|
@ -71,10 +94,10 @@ void DIALOG_NETLIST::Init()
|
||||||
SetFocus();
|
SetFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DIALOG_NETLIST::OnOpenNelistClick( wxCommandEvent& event )
|
void DIALOG_NETLIST::OnOpenNetlistClick( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
wxString lastPath = wxFileName::GetCwd();
|
wxString lastPath = wxFileName::GetCwd();
|
||||||
wxString lastNetlistRead = m_Parent->GetLastNetListRead();
|
wxString lastNetlistRead = m_parent->GetLastNetListRead();
|
||||||
|
|
||||||
if( !lastNetlistRead.IsEmpty() && !wxFileName::FileExists( lastNetlistRead ) )
|
if( !lastNetlistRead.IsEmpty() && !wxFileName::FileExists( lastNetlistRead ) )
|
||||||
{
|
{
|
||||||
|
@ -105,7 +128,7 @@ void DIALOG_NETLIST::OnReadNetlistFileClick( wxCommandEvent& event )
|
||||||
wxFileName fn = m_NetlistFilenameCtrl->GetValue();
|
wxFileName fn = m_NetlistFilenameCtrl->GetValue();
|
||||||
fn.SetExt( ComponentFileExtension );
|
fn.SetExt( ComponentFileExtension );
|
||||||
|
|
||||||
m_Parent->ReadPcbNetlist( m_NetlistFilenameCtrl->GetValue(),
|
m_parent->ReadPcbNetlist( m_NetlistFilenameCtrl->GetValue(),
|
||||||
fn.GetFullPath(), m_MessageWindow,
|
fn.GetFullPath(), m_MessageWindow,
|
||||||
m_ChangeExistingFootprintCtrl->GetSelection() == 1 ? true : false,
|
m_ChangeExistingFootprintCtrl->GetSelection() == 1 ? true : false,
|
||||||
m_DeleteBadTracks->GetSelection() == 1 ? true : false,
|
m_DeleteBadTracks->GetSelection() == 1 ? true : false,
|
||||||
|
@ -116,7 +139,116 @@ void DIALOG_NETLIST::OnReadNetlistFileClick( wxCommandEvent& event )
|
||||||
|
|
||||||
void DIALOG_NETLIST::OnTestFootprintsClick( wxCommandEvent& event )
|
void DIALOG_NETLIST::OnTestFootprintsClick( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
m_Parent->Test_Duplicate_Missing_And_Extra_Footprints( m_NetlistFilenameCtrl->GetValue() );
|
if( m_parent->GetBoard()->m_Modules == NULL )
|
||||||
|
{
|
||||||
|
DisplayInfoMessage( this, _( "No modules" ) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lists of duplicates, missing references and not in netlist footprints:
|
||||||
|
std::vector <MODULE*> duplicate;
|
||||||
|
wxArrayString missing;
|
||||||
|
std::vector <MODULE*> notInNetlist;
|
||||||
|
wxString netlistFilename = m_NetlistFilenameCtrl->GetValue();
|
||||||
|
|
||||||
|
if( ! m_parent->Test_Duplicate_Missing_And_Extra_Footprints(
|
||||||
|
netlistFilename, duplicate, missing, notInNetlist ) )
|
||||||
|
{
|
||||||
|
wxMessageBox( _("Netlist file not found!") );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ERR_CNT_MAX 100 // Max number of errors to output in dialog
|
||||||
|
// to avoid a too long message list
|
||||||
|
|
||||||
|
wxString list; // The messages to display
|
||||||
|
|
||||||
|
m_parent->SetLastNetListRead( netlistFilename );
|
||||||
|
|
||||||
|
int err_cnt = 0;
|
||||||
|
|
||||||
|
// Search for duplicate footprints.
|
||||||
|
if( duplicate.size() == 0 )
|
||||||
|
list << wxT("<p><b>") << _( "No duplicate." ) << wxT("</b></p>");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
list << wxT("<p><b>") << _( "Duplicates:" ) << wxT("</b></p>");
|
||||||
|
|
||||||
|
for( unsigned ii = 0; ii < duplicate.size(); ii++ )
|
||||||
|
{
|
||||||
|
MODULE* module = duplicate[ii];
|
||||||
|
|
||||||
|
if( module->m_Reference->m_Text.IsEmpty() )
|
||||||
|
list << wxT("<br>") << wxT("[noref)");
|
||||||
|
else
|
||||||
|
list << wxT("<br>") << module->m_Reference->m_Text;
|
||||||
|
|
||||||
|
list << wxT(" (<i>") << module->m_Value->m_Text << wxT("</i>)");
|
||||||
|
list << wxT(" @ ");
|
||||||
|
list << CoordinateToString( module->GetPosition().x ),
|
||||||
|
list << wxT(", ") << CoordinateToString( module->GetPosition().y ),
|
||||||
|
err_cnt++;
|
||||||
|
|
||||||
|
if( ERR_CNT_MAX < err_cnt )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search for missing modules on board.
|
||||||
|
if( missing.size() == 0 )
|
||||||
|
list << wxT("<p><b>") << _( "No missing modules." ) << wxT("</b></p>");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
list << wxT("<p><b>") << _( "Missing:" ) << wxT("</b></p>");
|
||||||
|
|
||||||
|
for( unsigned ii = 0; ii < missing.size(); ii += 2 )
|
||||||
|
{
|
||||||
|
list << wxT("<br>") << missing[ii];
|
||||||
|
list << wxT(" (<i>") << missing[ii+1] << wxT("</i>)");
|
||||||
|
err_cnt++;
|
||||||
|
|
||||||
|
if( ERR_CNT_MAX < err_cnt )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Search for modules found on board but not in net list.
|
||||||
|
if( notInNetlist.size() == 0 )
|
||||||
|
list << wxT("<p><b>") << _( "No extra modules." ) << wxT("</b></p>");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
list << wxT("<p><b>") << _( "Not in Netlist:" ) << wxT("</b></p>");
|
||||||
|
|
||||||
|
for( unsigned ii = 0; ii < notInNetlist.size(); ii++ )
|
||||||
|
{
|
||||||
|
MODULE* module = notInNetlist[ii];
|
||||||
|
|
||||||
|
if( module->m_Reference->m_Text.IsEmpty() )
|
||||||
|
list << wxT("<br>") << wxT("[noref)");
|
||||||
|
else
|
||||||
|
list << wxT("<br>") << module->m_Reference->m_Text ;
|
||||||
|
list << wxT(" (<i>") << module->m_Value->m_Text << wxT("</i>)");
|
||||||
|
list << wxT(" @ ");
|
||||||
|
list << CoordinateToString( module->GetPosition().x ),
|
||||||
|
list << wxT(", ") << CoordinateToString( module->GetPosition().y ),
|
||||||
|
err_cnt++;
|
||||||
|
|
||||||
|
if( ERR_CNT_MAX < err_cnt )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ERR_CNT_MAX < err_cnt )
|
||||||
|
{
|
||||||
|
list << wxT("<p><b>")
|
||||||
|
<< _( "Too many errors: some are skipped" )
|
||||||
|
<< wxT("</b></p>");
|
||||||
|
}
|
||||||
|
|
||||||
|
HTML_MESSAGE_BOX dlg( this, _( "Check Modules" ) );
|
||||||
|
dlg.AddHTML_Text(list);
|
||||||
|
dlg.ShowModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -126,7 +258,7 @@ void DIALOG_NETLIST::OnTestFootprintsClick( wxCommandEvent& event )
|
||||||
|
|
||||||
void DIALOG_NETLIST::OnCompileRatsnestClick( wxCommandEvent& event )
|
void DIALOG_NETLIST::OnCompileRatsnestClick( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
m_Parent->Compile_Ratsnest( m_DC, true );
|
m_parent->Compile_Ratsnest( m_dc, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,29 @@
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/**
|
||||||
// Name: dialog_netlist.h
|
* @file dialog_netlist.h
|
||||||
/// Author: jean-pierre Charras
|
*/
|
||||||
// Licence: GPL
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// Generated by DialogBlocks (unregistered), 26/02/2006 17:42:19
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 1992-2012 KiCad Developers, see change_log.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 _DIALOG_NETLIST_H_
|
#ifndef _DIALOG_NETLIST_H_
|
||||||
#define _DIALOG_NETLIST_H_
|
#define _DIALOG_NETLIST_H_
|
||||||
|
@ -14,23 +33,24 @@
|
||||||
|
|
||||||
class DIALOG_NETLIST : public DIALOG_NETLIST_FBP
|
class DIALOG_NETLIST : public DIALOG_NETLIST_FBP
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
PCB_EDIT_FRAME * m_Parent;
|
PCB_EDIT_FRAME * m_parent;
|
||||||
wxDC * m_DC;
|
wxDC * m_dc;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DIALOG_NETLIST( PCB_EDIT_FRAME* aParent, wxDC * aDC,
|
DIALOG_NETLIST( PCB_EDIT_FRAME* aParent, wxDC * aDC,
|
||||||
const wxString & aNetlistFull_Filename );
|
const wxString & aNetlistFullFilename );
|
||||||
~DIALOG_NETLIST() {};
|
~DIALOG_NETLIST() {};
|
||||||
|
|
||||||
void Init();
|
private:
|
||||||
// Virtual event handlers, overide them in your derived class
|
void Init();
|
||||||
void OnOpenNelistClick( wxCommandEvent& event );
|
// Virtual event handlers, overide them in your derived class
|
||||||
void OnReadNetlistFileClick( wxCommandEvent& event );
|
void OnOpenNetlistClick( wxCommandEvent& event );
|
||||||
void OnTestFootprintsClick( wxCommandEvent& event );
|
void OnReadNetlistFileClick( wxCommandEvent& event );
|
||||||
void OnCompileRatsnestClick( wxCommandEvent& event );
|
void OnTestFootprintsClick( wxCommandEvent& event );
|
||||||
void OnCancelClick( wxCommandEvent& event );
|
void OnCompileRatsnestClick( wxCommandEvent& event );
|
||||||
|
void OnCancelClick( wxCommandEvent& event );
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -66,27 +66,27 @@ DIALOG_NETLIST_FBP::DIALOG_NETLIST_FBP( wxWindow* parent, wxWindowID id, const w
|
||||||
wxBoxSizer* bRightSizerButtons;
|
wxBoxSizer* bRightSizerButtons;
|
||||||
bRightSizerButtons = new wxBoxSizer( wxVERTICAL );
|
bRightSizerButtons = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
m_button1 = new wxButton( this, ID_OPEN_NELIST, _("Browse Netlist Files"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_buttonBrowse = new wxButton( this, ID_OPEN_NELIST, _("Browse Netlist Files"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bRightSizerButtons->Add( m_button1, 0, wxALL|wxEXPAND, 5 );
|
bRightSizerButtons->Add( m_buttonBrowse, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_button2 = new wxButton( this, ID_READ_NETLIST_FILE, _("Read Current Netlist"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_buttonRead = new wxButton( this, ID_READ_NETLIST_FILE, _("Read Current Netlist"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_button2->SetDefault();
|
m_buttonRead->SetDefault();
|
||||||
m_button2->SetToolTip( _("Read the current netlist and update connections and connectivity info") );
|
m_buttonRead->SetToolTip( _("Read the current netlist and update connections and connectivity info") );
|
||||||
|
|
||||||
bRightSizerButtons->Add( m_button2, 0, wxALL|wxEXPAND, 5 );
|
bRightSizerButtons->Add( m_buttonRead, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_button3 = new wxButton( this, ID_TEST_NETLIST, _("Footprints Test"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_buttonFPTest = new wxButton( this, ID_TEST_NETLIST, _("Footprints Test"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_button3->SetToolTip( _("Read the current neltist file and list missing and extra footprints") );
|
m_buttonFPTest->SetToolTip( _("Read the current neltist file and list missing and extra footprints") );
|
||||||
|
|
||||||
bRightSizerButtons->Add( m_button3, 0, wxALL|wxEXPAND, 5 );
|
bRightSizerButtons->Add( m_buttonFPTest, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_button4 = new wxButton( this, ID_COMPILE_RATSNEST, _("Rebuild Board Connectivity"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_buttonRebild = new wxButton( this, ID_COMPILE_RATSNEST, _("Rebuild Board Connectivity"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_button4->SetToolTip( _("Rebuild the full ratsnest (usefull after a manual pad netname edition)") );
|
m_buttonRebild->SetToolTip( _("Rebuild the full ratsnest (usefull after a manual pad netname edition)") );
|
||||||
|
|
||||||
bRightSizerButtons->Add( m_button4, 0, wxALL|wxEXPAND, 5 );
|
bRightSizerButtons->Add( m_buttonRebild, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_button5 = new wxButton( this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_buttonClose = new wxButton( this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bRightSizerButtons->Add( m_button5, 0, wxALL|wxEXPAND, 5 );
|
bRightSizerButtons->Add( m_buttonClose, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
bUpperSizer->Add( bRightSizerButtons, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
bUpperSizer->Add( bRightSizerButtons, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
@ -118,20 +118,20 @@ DIALOG_NETLIST_FBP::DIALOG_NETLIST_FBP( wxWindow* parent, wxWindowID id, const w
|
||||||
this->Layout();
|
this->Layout();
|
||||||
|
|
||||||
// Connect Events
|
// Connect Events
|
||||||
m_button1->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnOpenNelistClick ), NULL, this );
|
m_buttonBrowse->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnOpenNetlistClick ), NULL, this );
|
||||||
m_button2->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnReadNetlistFileClick ), NULL, this );
|
m_buttonRead->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnReadNetlistFileClick ), NULL, this );
|
||||||
m_button3->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnTestFootprintsClick ), NULL, this );
|
m_buttonFPTest->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnTestFootprintsClick ), NULL, this );
|
||||||
m_button4->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnCompileRatsnestClick ), NULL, this );
|
m_buttonRebild->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnCompileRatsnestClick ), NULL, this );
|
||||||
m_button5->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnCancelClick ), NULL, this );
|
m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnCancelClick ), NULL, this );
|
||||||
}
|
}
|
||||||
|
|
||||||
DIALOG_NETLIST_FBP::~DIALOG_NETLIST_FBP()
|
DIALOG_NETLIST_FBP::~DIALOG_NETLIST_FBP()
|
||||||
{
|
{
|
||||||
// Disconnect Events
|
// Disconnect Events
|
||||||
m_button1->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnOpenNelistClick ), NULL, this );
|
m_buttonBrowse->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnOpenNetlistClick ), NULL, this );
|
||||||
m_button2->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnReadNetlistFileClick ), NULL, this );
|
m_buttonRead->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnReadNetlistFileClick ), NULL, this );
|
||||||
m_button3->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnTestFootprintsClick ), NULL, this );
|
m_buttonFPTest->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnTestFootprintsClick ), NULL, this );
|
||||||
m_button4->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnCompileRatsnestClick ), NULL, this );
|
m_buttonRebild->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnCompileRatsnestClick ), NULL, this );
|
||||||
m_button5->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnCancelClick ), NULL, this );
|
m_buttonClose->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_NETLIST_FBP::OnCancelClick ), NULL, this );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -493,7 +493,7 @@
|
||||||
<property name="permission">none</property>
|
<property name="permission">none</property>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
<property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxButton" expanded="1">
|
<object class="wxButton" expanded="1">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
|
@ -532,7 +532,7 @@
|
||||||
<property name="minimize_button">0</property>
|
<property name="minimize_button">0</property>
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="moveable">1</property>
|
<property name="moveable">1</property>
|
||||||
<property name="name">m_button1</property>
|
<property name="name">m_buttonBrowse</property>
|
||||||
<property name="pane_border">1</property>
|
<property name="pane_border">1</property>
|
||||||
<property name="pane_position"></property>
|
<property name="pane_position"></property>
|
||||||
<property name="pane_size"></property>
|
<property name="pane_size"></property>
|
||||||
|
@ -553,7 +553,7 @@
|
||||||
<property name="window_extra_style"></property>
|
<property name="window_extra_style"></property>
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style"></property>
|
<property name="window_style"></property>
|
||||||
<event name="OnButtonClick">OnOpenNelistClick</event>
|
<event name="OnButtonClick">OnOpenNetlistClick</event>
|
||||||
<event name="OnChar"></event>
|
<event name="OnChar"></event>
|
||||||
<event name="OnEnterWindow"></event>
|
<event name="OnEnterWindow"></event>
|
||||||
<event name="OnEraseBackground"></event>
|
<event name="OnEraseBackground"></event>
|
||||||
|
@ -581,7 +581,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
<property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxButton" expanded="1">
|
<object class="wxButton" expanded="1">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
|
@ -620,7 +620,7 @@
|
||||||
<property name="minimize_button">0</property>
|
<property name="minimize_button">0</property>
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="moveable">1</property>
|
<property name="moveable">1</property>
|
||||||
<property name="name">m_button2</property>
|
<property name="name">m_buttonRead</property>
|
||||||
<property name="pane_border">1</property>
|
<property name="pane_border">1</property>
|
||||||
<property name="pane_position"></property>
|
<property name="pane_position"></property>
|
||||||
<property name="pane_size"></property>
|
<property name="pane_size"></property>
|
||||||
|
@ -669,7 +669,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
<property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxButton" expanded="1">
|
<object class="wxButton" expanded="1">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
|
@ -708,7 +708,7 @@
|
||||||
<property name="minimize_button">0</property>
|
<property name="minimize_button">0</property>
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="moveable">1</property>
|
<property name="moveable">1</property>
|
||||||
<property name="name">m_button3</property>
|
<property name="name">m_buttonFPTest</property>
|
||||||
<property name="pane_border">1</property>
|
<property name="pane_border">1</property>
|
||||||
<property name="pane_position"></property>
|
<property name="pane_position"></property>
|
||||||
<property name="pane_size"></property>
|
<property name="pane_size"></property>
|
||||||
|
@ -757,7 +757,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
<property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxButton" expanded="1">
|
<object class="wxButton" expanded="1">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
|
@ -796,7 +796,7 @@
|
||||||
<property name="minimize_button">0</property>
|
<property name="minimize_button">0</property>
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="moveable">1</property>
|
<property name="moveable">1</property>
|
||||||
<property name="name">m_button4</property>
|
<property name="name">m_buttonRebild</property>
|
||||||
<property name="pane_border">1</property>
|
<property name="pane_border">1</property>
|
||||||
<property name="pane_position"></property>
|
<property name="pane_position"></property>
|
||||||
<property name="pane_size"></property>
|
<property name="pane_size"></property>
|
||||||
|
@ -884,7 +884,7 @@
|
||||||
<property name="minimize_button">0</property>
|
<property name="minimize_button">0</property>
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="moveable">1</property>
|
<property name="moveable">1</property>
|
||||||
<property name="name">m_button5</property>
|
<property name="name">m_buttonClose</property>
|
||||||
<property name="pane_border">1</property>
|
<property name="pane_border">1</property>
|
||||||
<property name="pane_position"></property>
|
<property name="pane_position"></property>
|
||||||
<property name="pane_size"></property>
|
<property name="pane_size"></property>
|
||||||
|
|
|
@ -47,11 +47,11 @@ class DIALOG_NETLIST_FBP : public DIALOG_SHIM
|
||||||
wxRadioBox* m_ChangeExistingFootprintCtrl;
|
wxRadioBox* m_ChangeExistingFootprintCtrl;
|
||||||
wxRadioBox* m_DeleteBadTracks;
|
wxRadioBox* m_DeleteBadTracks;
|
||||||
wxRadioBox* m_RemoveExtraFootprintsCtrl;
|
wxRadioBox* m_RemoveExtraFootprintsCtrl;
|
||||||
wxButton* m_button1;
|
wxButton* m_buttonBrowse;
|
||||||
wxButton* m_button2;
|
wxButton* m_buttonRead;
|
||||||
wxButton* m_button3;
|
wxButton* m_buttonFPTest;
|
||||||
wxButton* m_button4;
|
wxButton* m_buttonRebild;
|
||||||
wxButton* m_button5;
|
wxButton* m_buttonClose;
|
||||||
wxStaticLine* m_staticline1;
|
wxStaticLine* m_staticline1;
|
||||||
wxStaticText* m_staticTextNetfilename;
|
wxStaticText* m_staticTextNetfilename;
|
||||||
wxTextCtrl* m_NetlistFilenameCtrl;
|
wxTextCtrl* m_NetlistFilenameCtrl;
|
||||||
|
@ -59,7 +59,7 @@ class DIALOG_NETLIST_FBP : public DIALOG_SHIM
|
||||||
wxTextCtrl* m_MessageWindow;
|
wxTextCtrl* m_MessageWindow;
|
||||||
|
|
||||||
// Virtual event handlers, overide them in your derived class
|
// Virtual event handlers, overide them in your derived class
|
||||||
virtual void OnOpenNelistClick( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnOpenNetlistClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnReadNetlistFileClick( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnReadNetlistFileClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnTestFootprintsClick( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnTestFootprintsClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnCompileRatsnestClick( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnCompileRatsnestClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
|
|
@ -65,7 +65,6 @@
|
||||||
#include <class_module.h>
|
#include <class_module.h>
|
||||||
#include <pcbnew.h>
|
#include <pcbnew.h>
|
||||||
#include <dialog_netlist.h>
|
#include <dialog_netlist.h>
|
||||||
#include <html_messagebox.h>
|
|
||||||
|
|
||||||
#include <netlist_reader.h>
|
#include <netlist_reader.h>
|
||||||
|
|
||||||
|
@ -251,46 +250,33 @@ MODULE* PCB_EDIT_FRAME::ListAndSelectModuleName( void )
|
||||||
* 1 - duplicate footprints on board
|
* 1 - duplicate footprints on board
|
||||||
* 2 - missing footprints (found in netlist but not on board)
|
* 2 - missing footprints (found in netlist but not on board)
|
||||||
* 3 - footprints not in netlist but on board
|
* 3 - footprints not in netlist but on board
|
||||||
* @param aNetlistFullFilename = the full filename netlist
|
* param aFilename = the full filename netlist
|
||||||
|
* param aDuplicate = the list of duplicate modules to populate
|
||||||
|
* param aMissing = the list of missing module references and values
|
||||||
|
* to populate. For each missing item, the first string is the ref,
|
||||||
|
* the second is the value.
|
||||||
|
* param aNotInNetlist = the list of not-in-netlist modules to populate
|
||||||
*/
|
*/
|
||||||
void PCB_EDIT_FRAME::Test_Duplicate_Missing_And_Extra_Footprints(
|
bool PCB_EDIT_FRAME::Test_Duplicate_Missing_And_Extra_Footprints(
|
||||||
const wxString& aNetlistFullFilename )
|
const wxString& aFilename,
|
||||||
|
std::vector <MODULE*>& aDuplicate,
|
||||||
|
wxArrayString& aMissing,
|
||||||
|
std::vector <MODULE*>& aNotInNetlist )
|
||||||
{
|
{
|
||||||
#define ERR_CNT_MAX 100 // Max number of errors to output in dialog
|
FILE* netfile = OpenNetlistFile( aFilename );
|
||||||
// to avoid a too long calculation time
|
|
||||||
wxString list; // The messages to display
|
|
||||||
|
|
||||||
if( GetBoard()->m_Modules == NULL )
|
|
||||||
{
|
|
||||||
DisplayInfoMessage( this, _( "No modules" ) );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
FILE* netfile = OpenNetlistFile( aNetlistFullFilename );
|
|
||||||
if( !netfile )
|
if( !netfile )
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
SetLastNetListRead( aNetlistFullFilename );
|
|
||||||
|
|
||||||
// Build the list of references of the net list modules.
|
// Build the list of references of the net list modules.
|
||||||
NETLIST_READER netList_Reader( this );
|
NETLIST_READER netList_Reader( this );
|
||||||
netList_Reader.SetFilesnames( aNetlistFullFilename, wxEmptyString );
|
netList_Reader.SetFilesnames( aFilename, wxEmptyString );
|
||||||
netList_Reader.BuildModuleListOnlySetOpt( true );
|
netList_Reader.BuildModuleListOnlySetOpt( true );
|
||||||
if( ! netList_Reader.ReadNetList( netfile ) )
|
if( ! netList_Reader.ReadNetList( netfile ) )
|
||||||
return; // error
|
return false; // error
|
||||||
|
|
||||||
COMPONENT_INFO_LIST& moduleInfoList = netList_Reader.GetComponentInfoList();
|
COMPONENT_INFO_LIST& moduleInfoList = netList_Reader.GetComponentInfoList();
|
||||||
|
|
||||||
if( moduleInfoList.size() == 0 )
|
|
||||||
{
|
|
||||||
wxMessageBox( _( "No modules in NetList" ) );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Search for duplicate footprints.
|
// Search for duplicate footprints.
|
||||||
list << wxT("<p><b>") << _( "Duplicates:" ) << wxT("</b></p>");
|
|
||||||
|
|
||||||
int err_cnt = 0;
|
|
||||||
MODULE* module = GetBoard()->m_Modules;
|
MODULE* module = GetBoard()->m_Modules;
|
||||||
for( ; module != NULL; module = module->Next() )
|
for( ; module != NULL; module = module->Next() )
|
||||||
{
|
{
|
||||||
|
@ -300,40 +286,25 @@ void PCB_EDIT_FRAME::Test_Duplicate_Missing_And_Extra_Footprints(
|
||||||
{
|
{
|
||||||
if( module->m_Reference->m_Text.CmpNoCase( altmodule->m_Reference->m_Text ) == 0 )
|
if( module->m_Reference->m_Text.CmpNoCase( altmodule->m_Reference->m_Text ) == 0 )
|
||||||
{
|
{
|
||||||
if( module->m_Reference->m_Text.IsEmpty() )
|
aDuplicate.push_back( module );
|
||||||
list << wxT("<br>") << wxT("[noref)");
|
|
||||||
else
|
|
||||||
list << wxT("<br>") << module->m_Reference->m_Text;
|
|
||||||
|
|
||||||
list << wxT(" (<i>") << module->m_Value->m_Text << wxT("</i>)");
|
|
||||||
err_cnt++;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( ERR_CNT_MAX < err_cnt )
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search for missing modules on board.
|
// Search for missing modules on board.
|
||||||
list << wxT("<p><b>") << _( "Missing:" ) << wxT("</b></p>");
|
|
||||||
|
|
||||||
for( unsigned ii = 0; ii < moduleInfoList.size(); ii++ )
|
for( unsigned ii = 0; ii < moduleInfoList.size(); ii++ )
|
||||||
{
|
{
|
||||||
COMPONENT_INFO* cmp_info = moduleInfoList[ii];
|
COMPONENT_INFO* cmp_info = moduleInfoList[ii];
|
||||||
module = GetBoard()->FindModuleByReference( cmp_info->m_Reference );
|
module = GetBoard()->FindModuleByReference( cmp_info->m_Reference );
|
||||||
if( module == NULL ) // Module missing, not found in board
|
if( module == NULL ) // Module missing, not found in board
|
||||||
{
|
{
|
||||||
list << wxT("<br>") << cmp_info->m_Reference;
|
aMissing.Add( cmp_info->m_Reference );
|
||||||
list << wxT(" (<i>") << cmp_info->m_Value << wxT("</i>)");
|
aMissing.Add( cmp_info->m_Value );
|
||||||
err_cnt++;
|
|
||||||
}
|
}
|
||||||
if( ERR_CNT_MAX < err_cnt )
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search for modules found on board but not in net list.
|
// Search for modules found on board but not in net list.
|
||||||
list << wxT("<p><b>") << _( "Not in Netlist:" ) << wxT("</b></p>");
|
|
||||||
|
|
||||||
module = GetBoard()->m_Modules;
|
module = GetBoard()->m_Modules;
|
||||||
for( ; module != NULL; module = module->Next() )
|
for( ; module != NULL; module = module->Next() )
|
||||||
{
|
{
|
||||||
|
@ -346,25 +317,8 @@ void PCB_EDIT_FRAME::Test_Duplicate_Missing_And_Extra_Footprints(
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ii == moduleInfoList.size() ) // Module not found in netlist
|
if( ii == moduleInfoList.size() ) // Module not found in netlist
|
||||||
{
|
aNotInNetlist.push_back( module );
|
||||||
if( module->m_Reference->m_Text.IsEmpty() )
|
|
||||||
list << wxT("<br>") << wxT("[noref)");
|
|
||||||
else
|
|
||||||
list << wxT("<br>") << module->m_Reference->m_Text ;
|
|
||||||
list << wxT(" (<i>") << module->m_Value->m_Text << wxT("</i>)");
|
|
||||||
err_cnt++;
|
|
||||||
}
|
|
||||||
if( ERR_CNT_MAX < err_cnt )
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if( ERR_CNT_MAX < err_cnt )
|
|
||||||
{
|
|
||||||
list << wxT("<p><b>")
|
|
||||||
<< _( "Too many errors: some are skipped" )
|
|
||||||
<< wxT("</b></p>");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HTML_MESSAGE_BOX dlg( this, _( "Check Modules" ) );
|
return true;
|
||||||
dlg.AddHTML_Text(list);
|
|
||||||
dlg.ShowModal();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1406,6 +1406,7 @@ DIMENSION* PCB_PARSER::parseDIMENSION() throw( IO_ERROR, PARSE_ERROR )
|
||||||
{
|
{
|
||||||
TEXTE_PCB* text = parseTEXTE_PCB();
|
TEXTE_PCB* text = parseTEXTE_PCB();
|
||||||
dimension->m_Text = *text;
|
dimension->m_Text = *text;
|
||||||
|
dimension->SetPosition( text->GetPosition() );
|
||||||
delete text;
|
delete text;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -443,8 +443,9 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
|
||||||
cornerBufferPolysToSubstract.clear();
|
cornerBufferPolysToSubstract.clear();
|
||||||
|
|
||||||
// Test thermal stubs connections and add polygons to remove unconnected stubs.
|
// Test thermal stubs connections and add polygons to remove unconnected stubs.
|
||||||
BuildUnconnectedThermalStubsPolygonList( cornerBufferPolysToSubstract, aPcb, this,
|
if( GetNet() > 0 )
|
||||||
s_Correction, s_thermalRot );
|
BuildUnconnectedThermalStubsPolygonList( cornerBufferPolysToSubstract, aPcb, this,
|
||||||
|
s_Correction, s_thermalRot );
|
||||||
|
|
||||||
// remove copper areas
|
// remove copper areas
|
||||||
if( cornerBufferPolysToSubstract.size() )
|
if( cornerBufferPolysToSubstract.size() )
|
||||||
|
|
Loading…
Reference in New Issue