mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-14 19:49:36 +00:00
Pcbnew NETLIST_READER improvements.
* Create separate NETLIST object to hold contents of netlist files. * Read entire netlist and footprint link files before making applying changes to board. * Add BOARD::ReplaceNetlist() function to eliminate the calls between the NETLIST_READER, PCB_EDIT_FRAME, and BOARD objects. * Change placement of new components below the center of the current board or in the center of the page if the BOARD is empty. * Add dry run option to netlist dialog to print changes to message control without making changes. * Add button to netlist dialog to allow saving contents of message control to a file. * Eliminate the need to compile netlist_reader_*.cpp in both CvPcb and Pcbnew. * Add netlist_reader_*.cpp to the pcbcommon library. * Remove redundant load component link file code from CvPcb. * Modify CvPcb new to work with the new NETLIST_READER object. * Add compare() function and < and == operators to FPID object. * Add REPORTER class to hide an underlying string writing implementation for use in low level objects. Thank you Dick for the idea. * Lots of minor coding policy, Doxygen comment, and missing license fixes.
This commit is contained in:
parent
d8ba7b3af8
commit
61b4f8a9eb
3d-viewer
TODO.txtcommon
cvpcb
CMakeLists.txtautosel.cppclass_footprints_listbox.cppcvframe.cppcvpcb.hcvpcb_mainframe.hcvstruct.hlistboxes.cpploadcmp.cppread_write_cmpfile.cppreadschematicnetlist.cppreadwrite_dlgs.cpp
eeschema
include
appl_wxstruct.hdialog_helpers.hfpid.hreporter.hwildcards_and_files_ext.hwxBasePcbFrame.hwxPcbStruct.h
pcbnew
CMakeLists.txtclass_board.cppclass_board.hclass_module.cppclass_module.hclass_netinfo.hclass_netinfo_item.cppclass_pad.cppclass_pad.h
dialogs
dialog_edit_module_text.cppdialog_netlist.cppdialog_netlist.hdialog_netlist_fbp.cppdialog_netlist_fbp.fbpdialog_netlist_fbp.hdialog_orient_footprints.cppdialog_pad_properties.cpp
loadcmp.cppmuonde.cppnetlist.cppnetlist_reader.hnetlist_reader_common.cppnetlist_reader_firstformat.cppnetlist_reader_kicad.cpp@ -112,7 +112,8 @@ public:
|
||||
* Function GetNodeProperties
|
||||
* Collects all node properties to map.
|
||||
*
|
||||
* @param aProps contains map of found properties
|
||||
* @param aNode is an XML node.
|
||||
* @param aProps contains map of found properties.
|
||||
*/
|
||||
static void GetNodeProperties( wxXmlNode* aNode, PROPERTY_MAP& aProps );
|
||||
|
||||
|
9
TODO.txt
9
TODO.txt
@ -10,7 +10,7 @@ WXMAC Platform
|
||||
Common
|
||||
------
|
||||
* Grep for @TODO or TODO for sourcecode tasks
|
||||
* Use doxygen compatible comments on member functions (.h files)
|
||||
* Use Doxygen compatible comments on member functions (.h files)
|
||||
* Add tooltip text to all non-obvious controls in every dialog window.
|
||||
Use wxFormBuilder.
|
||||
* Component and module search displays in which library the
|
||||
@ -113,9 +113,9 @@ const wxString FP_LIB_TABLE::ExpandSubtitutions( const wxString aString )
|
||||
|
||||
|
||||
|
||||
EESchema
|
||||
Eeschema
|
||||
--------
|
||||
* Drag and drop between two EESchema windows.
|
||||
* Drag and drop between two Eeschema windows.
|
||||
|
||||
Wayne:
|
||||
E3) Hook up perform last library search hot key to replace search libraries for
|
||||
@ -159,5 +159,6 @@ PCBNew
|
||||
of PLUGIN::Footprint*() functions. At least LEGACY and KICAD are both needed
|
||||
concurrently.
|
||||
|
||||
|
||||
*) Add a hot key to toggle the 45 degree constraint on and off so that it can be
|
||||
changed when drawing a trace.
|
||||
|
||||
|
@ -72,6 +72,7 @@ set(COMMON_SRCS
|
||||
newstroke_font.cpp
|
||||
projet_config.cpp
|
||||
ptree.cpp
|
||||
reporter.cpp
|
||||
richio.cpp
|
||||
selcolor.cpp
|
||||
string.cpp
|
||||
@ -116,6 +117,9 @@ set(PCB_COMMON_SRCS
|
||||
../pcbnew/class_zone_settings.cpp
|
||||
../pcbnew/classpcb.cpp
|
||||
../pcbnew/collectors.cpp
|
||||
../pcbnew/netlist_reader_common.cpp
|
||||
../pcbnew/netlist_reader_firstformat.cpp
|
||||
../pcbnew/netlist_reader_kicad.cpp
|
||||
../pcbnew/sel_layer.cpp
|
||||
../pcbnew/pcb_plot_params.cpp
|
||||
../pcbnew/io_mgr.cpp
|
||||
|
@ -310,6 +310,26 @@ std::string FPID::Format( const std::string& aLogicalLib, const std::string& aFo
|
||||
}
|
||||
|
||||
|
||||
int FPID::compare( const FPID& aFPID ) const
|
||||
{
|
||||
// Don't bother comparing the same object.
|
||||
if( this == &aFPID )
|
||||
return 0;
|
||||
|
||||
int retv = nickname.compare( aFPID.nickname );
|
||||
|
||||
if( retv != 0 )
|
||||
return retv;
|
||||
|
||||
retv = footprint.compare( aFPID.footprint );
|
||||
|
||||
if( retv != 0 )
|
||||
return retv;
|
||||
|
||||
return revision.compare( aFPID.revision );
|
||||
}
|
||||
|
||||
|
||||
#if 0 && defined(DEBUG)
|
||||
|
||||
// build this with Debug CMAKE_BUILD_TYPE
|
||||
|
46
common/reporter.cpp
Normal file
46
common/reporter.cpp
Normal file
@ -0,0 +1,46 @@
|
||||
/**
|
||||
* @file reporter.h
|
||||
*/
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2013 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 <macros.h>
|
||||
#include <reporter.h>
|
||||
|
||||
|
||||
REPORTER& REPORTER::Report( const char *aText )
|
||||
{
|
||||
Report( FROM_UTF8( aText ) );
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
REPORTER& WX_TEXT_CTRL_REPORTER::Report( const wxString& aText )
|
||||
{
|
||||
wxCHECK_MSG( m_textCtrl != NULL, *this,
|
||||
wxT( "No wxTextCtrl object defined in WX_TEXT_CTRL_REPORTER." ) );
|
||||
|
||||
m_textCtrl->AppendText( aText );
|
||||
return *this;
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 20012 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 2012 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 2008-2012 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
@ -96,3 +96,4 @@ const wxString PSFileWildcard( _( "PostScript files (.ps)|*.ps" ) );
|
||||
const wxString ReportFileWildcard = _( "Report files (*.rpt)|*.rpt" );
|
||||
const wxString FootprintPlaceFileWildcard = _( "Footprint place files (*.pos)|*.pos" );
|
||||
const wxString Shapes3DFileWildcard( _( "Vrml and x3d files (*.wrl *.x3d)|*.wrl;*.x3d" ) );
|
||||
const wxString TextWildcard( _( "Text files (*.txt)|*.txt" ) );
|
||||
|
@ -27,9 +27,6 @@ set(CVPCB_DIALOGS
|
||||
|
||||
set(CVPCB_SRCS
|
||||
../common/base_units.cpp
|
||||
../pcbnew/netlist_reader_common.cpp
|
||||
../pcbnew/netlist_reader_kicad.cpp
|
||||
../pcbnew/netlist_reader_firstformat.cpp
|
||||
../pcbnew/class_drc_item.cpp
|
||||
autosel.cpp
|
||||
cfg.cpp
|
||||
|
@ -1,3 +1,26 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 1992-2012 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
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file autosel.cpp
|
||||
*/
|
||||
@ -39,10 +62,16 @@ typedef boost::ptr_vector< FOOTPRINT_ALIAS > FOOTPRINT_ALIAS_LIST;
|
||||
wxString GetQuotedText( wxString & text )
|
||||
{
|
||||
int i = text.Find( QUOTE );
|
||||
if( wxNOT_FOUND == i ) return wxT( "" );
|
||||
|
||||
if( wxNOT_FOUND == i )
|
||||
return wxT( "" );
|
||||
|
||||
wxString shrt = text.Mid( i + 1 );
|
||||
i = shrt.Find( QUOTE );
|
||||
if( wxNOT_FOUND == i ) return wxT( "" );
|
||||
|
||||
if( wxNOT_FOUND == i )
|
||||
return wxT( "" );
|
||||
|
||||
text = shrt.Mid( i + 1 );
|
||||
return shrt.Mid( 0, i );
|
||||
}
|
||||
@ -52,13 +81,14 @@ void CVPCB_MAINFRAME::AssocieModule( wxCommandEvent& event )
|
||||
{
|
||||
FOOTPRINT_ALIAS_LIST aliases;
|
||||
FOOTPRINT_ALIAS* alias;
|
||||
COMPONENT* component;
|
||||
wxFileName fn;
|
||||
wxString msg, tmp;
|
||||
char Line[1024];
|
||||
FILE* file;
|
||||
size_t ii;
|
||||
|
||||
if( m_components.empty() )
|
||||
if( m_netlist.IsEmpty() )
|
||||
return;
|
||||
|
||||
/* Find equivalents in all available files. */
|
||||
@ -79,8 +109,8 @@ void CVPCB_MAINFRAME::AssocieModule( wxCommandEvent& event )
|
||||
|
||||
if( !tmp )
|
||||
{
|
||||
msg.Printf( _( "Footprint alias library file <%s> could not be \
|
||||
found in the default search paths." ),
|
||||
msg.Printf( _( "Footprint alias library file <%s> could not be found in the "
|
||||
"default search paths." ),
|
||||
GetChars( fn.GetFullName() ) );
|
||||
wxMessageBox( msg, titleLibLoadError, wxOK | wxICON_ERROR );
|
||||
continue;
|
||||
@ -127,18 +157,21 @@ found in the default search paths." ),
|
||||
|
||||
m_skipComponentSelect = true;
|
||||
ii = 0;
|
||||
BOOST_FOREACH( COMPONENT_INFO& component, m_components )
|
||||
|
||||
for( unsigned kk = 0; kk < m_netlist.GetCount(); kk++ )
|
||||
{
|
||||
component = m_netlist.GetComponent( kk );
|
||||
|
||||
bool found = false;
|
||||
m_ListCmp->SetSelection( ii++, true );
|
||||
|
||||
if( !component.m_Footprint.IsEmpty() )
|
||||
if( !component->GetFootprintLibName().IsEmpty() )
|
||||
continue;
|
||||
|
||||
BOOST_FOREACH( FOOTPRINT_ALIAS& alias, aliases )
|
||||
{
|
||||
|
||||
if( alias.m_Name.CmpNoCase( component.m_Value ) != 0 )
|
||||
if( alias.m_Name.CmpNoCase( component->GetValue() ) != 0 )
|
||||
continue;
|
||||
|
||||
/* filter alias so one can use multiple aliases (for polar and nonpolar caps for
|
||||
@ -147,23 +180,23 @@ found in the default search paths." ),
|
||||
|
||||
if( module )
|
||||
{
|
||||
size_t filtercount = component.m_FootprintFilter.GetCount();
|
||||
size_t filtercount = component->GetFootprintFilters().GetCount();
|
||||
found = ( 0 == filtercount ); // if no entries, do not filter
|
||||
|
||||
for( size_t jj = 0; jj < filtercount && !found; jj++ )
|
||||
{
|
||||
found = module->m_Module.Matches( component.m_FootprintFilter[jj] );
|
||||
found = module->m_Module.Matches( component->GetFootprintFilters()[jj] );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msg.Printf( _( "Component %s: footprint %s not found in \
|
||||
any of the project footprint libraries." ),
|
||||
GetChars( component.m_Reference ),
|
||||
msg.Printf( _( "Component %s: footprint %s not found in any of the project "
|
||||
"footprint libraries." ),
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( alias.m_FootprintName ) );
|
||||
wxMessageBox( msg, _( "CvPcb Error" ), wxOK | wxICON_ERROR,
|
||||
this );
|
||||
wxMessageBox( msg, _( "CvPcb Error" ), wxOK | wxICON_ERROR, this );
|
||||
}
|
||||
|
||||
if( found )
|
||||
{
|
||||
SetNewPkg( alias.m_FootprintName );
|
||||
@ -171,15 +204,20 @@ any of the project footprint libraries." ),
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* obviously the last chance: there's only one filter matching one footprint */
|
||||
if( !found && 1 == component.m_FootprintFilter.GetCount() ) {
|
||||
if( !found && 1 == component->GetFootprintFilters().GetCount() )
|
||||
{
|
||||
/* we do not need to analyse wildcards: single footprint do not contain them */
|
||||
/* and if there are wildcards it just will not match any */
|
||||
FOOTPRINT_INFO *module = m_footprints.GetModuleInfo( component.m_FootprintFilter[0] );
|
||||
if( module ) {
|
||||
SetNewPkg( component.m_FootprintFilter[0] );
|
||||
FOOTPRINT_INFO *module = m_footprints.GetModuleInfo( component->GetFootprintFilters()[0] );
|
||||
|
||||
if( module )
|
||||
{
|
||||
SetNewPkg( component->GetFootprintFilters()[0] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_skipComponentSelect = false;
|
||||
}
|
||||
|
@ -1,6 +1,30 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 1992-2012 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
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file class_footprints_listbox.cpp
|
||||
* class to display the list fo available footprints
|
||||
* class to display the list of available footprints
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
@ -132,7 +156,7 @@ void FOOTPRINTS_LISTBOX::SetFootprintFullList( FOOTPRINT_LIST& list )
|
||||
}
|
||||
|
||||
|
||||
void FOOTPRINTS_LISTBOX::SetFootprintFilteredList( COMPONENT_INFO* Component,
|
||||
void FOOTPRINTS_LISTBOX::SetFootprintFilteredList( COMPONENT* aComponent,
|
||||
FOOTPRINT_LIST& list )
|
||||
{
|
||||
wxString msg;
|
||||
@ -149,13 +173,16 @@ void FOOTPRINTS_LISTBOX::SetFootprintFilteredList( COMPONENT_INFO* Component,
|
||||
// The search is case insensitive
|
||||
wxString module = footprint.m_Module.Upper();
|
||||
wxString candidate;
|
||||
for( jj = 0; jj < Component->m_FootprintFilter.GetCount(); jj++ )
|
||||
|
||||
for( jj = 0; jj < aComponent->GetFootprintFilters().GetCount(); jj++ )
|
||||
{
|
||||
candidate = Component->m_FootprintFilter[jj].Upper();
|
||||
candidate = aComponent->GetFootprintFilters()[jj].Upper();
|
||||
|
||||
if( !module.Matches( candidate ) )
|
||||
continue;
|
||||
|
||||
msg.Printf( wxT( "%3zu %s" ), m_FilteredFootprintList.GetCount() + 1,
|
||||
footprint.m_Module.GetData() );
|
||||
footprint.m_Module.GetData() );
|
||||
m_FilteredFootprintList.Add( msg );
|
||||
hasItem = true;
|
||||
}
|
||||
@ -172,8 +199,10 @@ void FOOTPRINTS_LISTBOX::SetFootprintFilteredList( COMPONENT_INFO* Component,
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void FOOTPRINTS_LISTBOX::SetFootprintFilteredByPinCount( COMPONENT_INFO* Component,
|
||||
FOOTPRINT_LIST& list ) {
|
||||
|
||||
void FOOTPRINTS_LISTBOX::SetFootprintFilteredByPinCount( COMPONENT* aComponent,
|
||||
FOOTPRINT_LIST& list )
|
||||
{
|
||||
wxString msg;
|
||||
int oldSelection = GetSelection();
|
||||
bool hasItem = false;
|
||||
@ -184,10 +213,10 @@ void FOOTPRINTS_LISTBOX::SetFootprintFilteredByPinCount( COMPONENT_INFO* Compone
|
||||
{
|
||||
FOOTPRINT_INFO& footprint = list.GetItem(ii);
|
||||
|
||||
if( Component->m_pinCount == footprint.m_padCount )
|
||||
if( aComponent->GetNetCount() == footprint.m_padCount )
|
||||
{
|
||||
msg.Printf( wxT( "%3zu %s" ), m_FilteredFootprintList.GetCount() + 1,
|
||||
footprint.m_Module.GetData() );
|
||||
footprint.m_Module.GetData() );
|
||||
m_FilteredFootprintList.Add( msg );
|
||||
hasItem = true;
|
||||
}
|
||||
@ -204,13 +233,7 @@ void FOOTPRINTS_LISTBOX::SetFootprintFilteredByPinCount( COMPONENT_INFO* Compone
|
||||
Refresh();
|
||||
}
|
||||
|
||||
/** Set the footprint list. We can have 2 footprint list:
|
||||
* The full footprint list
|
||||
* The filtered footprint list (if the current selected component has a
|
||||
* filter for footprints)
|
||||
* @param FullList true = full footprint list, false = filtered footprint list
|
||||
* @param Redraw = true to redraw the window
|
||||
*/
|
||||
|
||||
void FOOTPRINTS_LISTBOX::SetActiveFootprintList( bool FullList, bool Redraw )
|
||||
{
|
||||
bool old_selection = m_UseFootprintFullList;
|
||||
@ -226,10 +249,12 @@ void FOOTPRINTS_LISTBOX::SetActiveFootprintList( bool FullList, bool Redraw )
|
||||
if( m_ActiveFootprintList )
|
||||
{
|
||||
bool new_selection;
|
||||
|
||||
if( FullList )
|
||||
new_selection = true;
|
||||
else
|
||||
new_selection = false;
|
||||
|
||||
if( new_selection != old_selection )
|
||||
SetSelection( 0, true );
|
||||
}
|
||||
@ -264,14 +289,12 @@ void FOOTPRINTS_LISTBOX::SetActiveFootprintList( bool FullList, bool Redraw )
|
||||
/**************************************/
|
||||
|
||||
BEGIN_EVENT_TABLE( FOOTPRINTS_LISTBOX, ITEMS_LISTBOX_BASE )
|
||||
EVT_SIZE( ITEMS_LISTBOX_BASE::OnSize )
|
||||
EVT_CHAR( FOOTPRINTS_LISTBOX::OnChar )
|
||||
EVT_SIZE( ITEMS_LISTBOX_BASE::OnSize )
|
||||
EVT_CHAR( FOOTPRINTS_LISTBOX::OnChar )
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
/********************************************************/
|
||||
void FOOTPRINTS_LISTBOX::OnLeftClick( wxListEvent& event )
|
||||
/********************************************************/
|
||||
{
|
||||
FOOTPRINT_INFO* Module;
|
||||
wxString footprintName = GetSelectedFootprint();
|
||||
@ -297,9 +320,7 @@ void FOOTPRINTS_LISTBOX::OnLeftClick( wxListEvent& event )
|
||||
}
|
||||
|
||||
|
||||
/******************************************************/
|
||||
void FOOTPRINTS_LISTBOX::OnLeftDClick( wxListEvent& event )
|
||||
/******************************************************/
|
||||
{
|
||||
wxString footprintName = GetSelectedFootprint();
|
||||
|
||||
@ -307,21 +328,10 @@ void FOOTPRINTS_LISTBOX::OnLeftDClick( wxListEvent& event )
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function OnChar
|
||||
* called on a key pressed
|
||||
* Call default handler for some special keys,
|
||||
* and for "ascii" keys, select the first footprint
|
||||
* that the name starts by the letter.
|
||||
* This is the defaut behaviour of a listbox, but because we use
|
||||
* virtual lists, the listbox does not know anything to what is displayed,
|
||||
* we must handle this behaviour here.
|
||||
* Furthermore the footprint name is not at the beginning of
|
||||
* displayed lines (the first word is the line number)
|
||||
*/
|
||||
void FOOTPRINTS_LISTBOX::OnChar( wxKeyEvent& event )
|
||||
{
|
||||
int key = event.GetKeyCode();
|
||||
|
||||
switch( key )
|
||||
{
|
||||
case WXK_LEFT:
|
||||
@ -343,16 +353,20 @@ void FOOTPRINTS_LISTBOX::OnChar( wxKeyEvent& event )
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Search for an item name starting by the key code:
|
||||
key = toupper(key);
|
||||
|
||||
for( unsigned ii = 0; ii < m_ActiveFootprintList->GetCount(); ii++ )
|
||||
{
|
||||
wxString text = m_ActiveFootprintList->Item(ii);
|
||||
|
||||
/* search for the start char of the footprint name.
|
||||
* we must skip the line number
|
||||
*/
|
||||
*/
|
||||
text.Trim(false); // Remove leading spaces in line
|
||||
unsigned jj = 0;
|
||||
|
||||
for( ; jj < text.Len(); jj++ )
|
||||
{
|
||||
// skip line number
|
||||
@ -367,6 +381,7 @@ void FOOTPRINTS_LISTBOX::OnChar( wxKeyEvent& event )
|
||||
}
|
||||
|
||||
int start_char = toupper( text[jj] );
|
||||
|
||||
if( key == start_char )
|
||||
{
|
||||
Focus( ii );
|
||||
|
@ -334,7 +334,7 @@ void CVPCB_MAINFRAME::ToFirstNA( wxCommandEvent& event )
|
||||
int ii = 0;
|
||||
int selection;
|
||||
|
||||
if( m_components.empty() )
|
||||
if( m_netlist.IsEmpty() )
|
||||
return;
|
||||
|
||||
selection = m_ListCmp->GetSelection();
|
||||
@ -342,9 +342,9 @@ void CVPCB_MAINFRAME::ToFirstNA( wxCommandEvent& event )
|
||||
if( selection < 0 )
|
||||
selection = 0;
|
||||
|
||||
BOOST_FOREACH( COMPONENT_INFO & component, m_components )
|
||||
for( unsigned jj = 0; jj < m_netlist.GetCount(); jj++ )
|
||||
{
|
||||
if( component.m_Footprint.IsEmpty() && ii > selection )
|
||||
if( m_netlist.GetComponent( jj )->GetFootprintLibName().IsEmpty() && ii > selection )
|
||||
{
|
||||
m_ListCmp->SetSelection( ii );
|
||||
SendMessageToEESCHEMA();
|
||||
@ -363,7 +363,7 @@ void CVPCB_MAINFRAME::ToPreviousNA( wxCommandEvent& event )
|
||||
int ii;
|
||||
int selection;
|
||||
|
||||
if( m_components.empty() )
|
||||
if( m_netlist.IsEmpty() )
|
||||
return;
|
||||
|
||||
ii = m_ListCmp->GetCount() - 1;
|
||||
@ -372,9 +372,9 @@ void CVPCB_MAINFRAME::ToPreviousNA( wxCommandEvent& event )
|
||||
if( selection < 0 )
|
||||
selection = m_ListCmp->GetCount() - 1;
|
||||
|
||||
BOOST_REVERSE_FOREACH( COMPONENT_INFO & component, m_components )
|
||||
for( unsigned kk = m_netlist.GetCount() - 1; kk >= 0; kk-- )
|
||||
{
|
||||
if( component.m_Footprint.IsEmpty() && ii < selection )
|
||||
if( m_netlist.GetComponent( kk )->GetFootprintLibName().IsEmpty() && ii < selection )
|
||||
{
|
||||
m_ListCmp->SetSelection( ii );
|
||||
SendMessageToEESCHEMA();
|
||||
@ -412,15 +412,15 @@ void CVPCB_MAINFRAME::DelAssociations( wxCommandEvent& event )
|
||||
m_skipComponentSelect = true;
|
||||
m_ListCmp->SetSelection( 0 );
|
||||
|
||||
BOOST_FOREACH( COMPONENT_INFO & component, m_components )
|
||||
for( unsigned i = 0; i < m_netlist.GetCount(); i++ )
|
||||
{
|
||||
component.m_Footprint.Empty();
|
||||
m_netlist.GetComponent( i )->SetFootprintLibName( wxEmptyString );
|
||||
SetNewPkg( wxEmptyString );
|
||||
}
|
||||
|
||||
m_skipComponentSelect = false;
|
||||
m_ListCmp->SetSelection( 0 );
|
||||
m_undefinedComponentCnt = m_components.size();
|
||||
m_undefinedComponentCnt = m_netlist.GetCount();
|
||||
}
|
||||
|
||||
DisplayStatus();
|
||||
@ -538,18 +538,18 @@ void CVPCB_MAINFRAME::OnSelectComponent( wxListEvent& event )
|
||||
|
||||
else
|
||||
{
|
||||
if( &m_components[ selection ] == NULL )
|
||||
if( m_netlist.GetComponent( selection ) == NULL )
|
||||
m_FootprintList->SetActiveFootprintList( SELECT_FULL_LIST, REDRAW_LIST );
|
||||
else
|
||||
{
|
||||
if( m_mainToolBar->GetToolToggled( ID_CVPCB_FOOTPRINT_DISPLAY_PIN_FILTERED_LIST ) )
|
||||
{
|
||||
m_FootprintList->SetFootprintFilteredByPinCount( &m_components[ selection ],
|
||||
m_FootprintList->SetFootprintFilteredByPinCount( m_netlist.GetComponent( selection ),
|
||||
m_footprints );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_FootprintList->SetFootprintFilteredList( &m_components[ selection ],
|
||||
m_FootprintList->SetFootprintFilteredList( m_netlist.GetComponent( selection ),
|
||||
m_footprints );
|
||||
}
|
||||
}
|
||||
@ -568,7 +568,7 @@ void CVPCB_MAINFRAME::OnSelectComponent( wxListEvent& event )
|
||||
|
||||
if( FindFocus() == m_ListCmp )
|
||||
{
|
||||
wxString module = *(&m_components[ selection ].m_Footprint);
|
||||
wxString module = m_netlist.GetComponent( selection )->GetFootprintLibName();
|
||||
|
||||
bool found = false;
|
||||
for( int ii = 0; ii < m_FootprintList->GetCount(); ii++ )
|
||||
@ -642,7 +642,8 @@ void CVPCB_MAINFRAME::DisplayStatus()
|
||||
{
|
||||
wxString msg;
|
||||
|
||||
msg.Printf( _( "Components: %d (free: %d)" ), (int) m_components.size(), m_undefinedComponentCnt );
|
||||
msg.Printf( _( "Components: %d (free: %d)" ), (int) m_netlist.GetCount(),
|
||||
m_undefinedComponentCnt );
|
||||
SetStatusText( msg, 0 );
|
||||
|
||||
SetStatusText( wxEmptyString, 1 );
|
||||
@ -733,9 +734,9 @@ void CVPCB_MAINFRAME::SendMessageToEESCHEMA()
|
||||
{
|
||||
char cmd[1024];
|
||||
int selection;
|
||||
COMPONENT_INFO* Component;
|
||||
COMPONENT* Component;
|
||||
|
||||
if( m_components.empty() )
|
||||
if( m_netlist.IsEmpty() )
|
||||
return;
|
||||
|
||||
selection = m_ListCmp->GetSelection();
|
||||
@ -743,12 +744,12 @@ void CVPCB_MAINFRAME::SendMessageToEESCHEMA()
|
||||
if ( selection < 0 )
|
||||
selection = 0;
|
||||
|
||||
if( &m_components[ selection ] == NULL )
|
||||
if( m_netlist.GetComponent( selection ) == NULL )
|
||||
return;
|
||||
|
||||
Component = &m_components[ selection ];
|
||||
Component = m_netlist.GetComponent( selection );
|
||||
|
||||
sprintf( cmd, "$PART: \"%s\"", TO_UTF8( Component->m_Reference ) );
|
||||
sprintf( cmd, "$PART: \"%s\"", TO_UTF8( Component->GetReference() ) );
|
||||
|
||||
SendCommand( MSG_TO_SCH, cmd );
|
||||
|
||||
|
@ -21,10 +21,6 @@
|
||||
|
||||
#define LISTB_STYLE (wxSUNKEN_BORDER | wxLC_NO_HEADER | wxLC_REPORT | wxLC_VIRTUAL)
|
||||
|
||||
#include <netlist_reader.h>
|
||||
|
||||
typedef boost::ptr_vector< COMPONENT_INFO > COMPONENT_LIST;
|
||||
|
||||
extern const wxString FootprintAliasFileExtension;
|
||||
extern const wxString RetroFileExtension;
|
||||
|
||||
|
@ -1,3 +1,27 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2011 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 1992-2012 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
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file cvpcb_mainframe.h
|
||||
*/
|
||||
@ -7,6 +31,7 @@
|
||||
|
||||
#include <wx/listctrl.h>
|
||||
#include <wx/filename.h>
|
||||
#include <netlist_reader.h>
|
||||
|
||||
#include <wxBasePcbFrame.h>
|
||||
#include <param_config.h>
|
||||
@ -28,19 +53,19 @@ class CVPCB_MAINFRAME : public EDA_BASE_FRAME
|
||||
{
|
||||
public:
|
||||
|
||||
bool m_KeepCvpcbOpen;
|
||||
bool m_KeepCvpcbOpen;
|
||||
FOOTPRINTS_LISTBOX* m_FootprintList;
|
||||
COMPONENTS_LISTBOX* m_ListCmp;
|
||||
DISPLAY_FOOTPRINTS_FRAME* m_DisplayFootprintFrame;
|
||||
wxAuiToolBar* m_mainToolBar;
|
||||
wxFileName m_NetlistFileName;
|
||||
wxAuiToolBar* m_mainToolBar;
|
||||
wxFileName m_NetlistFileName;
|
||||
wxArrayString m_ModuleLibNames;
|
||||
wxArrayString m_AliasLibNames;
|
||||
wxString m_UserLibraryPath;
|
||||
wxString m_NetlistFileExtension;
|
||||
wxString m_DocModulesFileName;
|
||||
FOOTPRINT_LIST m_footprints;
|
||||
COMPONENT_LIST m_components;
|
||||
wxString m_UserLibraryPath;
|
||||
wxString m_NetlistFileExtension;
|
||||
wxString m_DocModulesFileName;
|
||||
FOOTPRINT_LIST m_footprints;
|
||||
NETLIST m_netlist;
|
||||
|
||||
protected:
|
||||
int m_undefinedComponentCnt;
|
||||
@ -60,7 +85,7 @@ public:
|
||||
/**
|
||||
* Function OnSelectComponent
|
||||
* Called when clicking on a component in component list window
|
||||
* * Updates the filtered foorprint list, if the filtered list option is selected
|
||||
* * Updates the filtered footprint list, if the filtered list option is selected
|
||||
* * Updates the current selected footprint in footprint list
|
||||
* * Updates the footprint shown in footprint display window (if opened)
|
||||
*/
|
||||
@ -141,22 +166,12 @@ public:
|
||||
* file name of the netlist or cmp file.
|
||||
* If aFullFileName is empty, a file name will be asked to the user
|
||||
* @return 0 if an error occurred saving the link file to \a aFullFileName.
|
||||
* -1 if cancelled
|
||||
* -1 if canceled
|
||||
* 1 if OK
|
||||
*/
|
||||
int SaveCmpLinkFile( const wxString& aFullFileName );
|
||||
|
||||
|
||||
/**
|
||||
* Function LoadComponentFile
|
||||
* loads the .cmp link file \a aCmpFileName which stores
|
||||
* the component/footprint association.
|
||||
*
|
||||
* @param aFileName The full filename of .cmp file to load
|
||||
* If empty, a filename will be asked to the user
|
||||
*/
|
||||
bool LoadComponentLinkFile( const wxString& aFileName );
|
||||
|
||||
/**
|
||||
* Function WriteComponentLinkFile
|
||||
* Writes the component footprint link file \a aFullFileName on disk.
|
||||
@ -166,16 +181,6 @@ public:
|
||||
*/
|
||||
bool WriteComponentLinkFile( const wxString& aFullFileName );
|
||||
|
||||
/**
|
||||
* Function ReadComponentLinkFile
|
||||
* Reads the component footprint link file \a aFullFileName.
|
||||
*
|
||||
* @param aFile = the opened the opened file to read.
|
||||
* ReadComponentLinkFile will close the file
|
||||
* @return true if OK, false if error.
|
||||
*/
|
||||
bool ReadComponentLinkFile( FILE * aFile );
|
||||
|
||||
/**
|
||||
* Function ReadNetList
|
||||
* reads the netlist (.net) file defined by #m_NetlistFileName.
|
||||
|
@ -1,6 +1,29 @@
|
||||
/*********************************************************/
|
||||
/* cvstruct.h */
|
||||
/*********************************************************/
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 1992-2012 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
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file cvstruct.h
|
||||
*/
|
||||
|
||||
#ifndef CVSTRUCT_H
|
||||
#define CVSTRUCT_H
|
||||
@ -10,6 +33,8 @@
|
||||
|
||||
/* Forward declarations of all top-level window classes. */
|
||||
class CVPCB_MAINFRAME;
|
||||
class COMPONENT;
|
||||
|
||||
|
||||
/*********************************************************************/
|
||||
/* ListBox (base class) to display lists of components or footprints */
|
||||
@ -53,10 +78,19 @@ public:
|
||||
void SetString( unsigned linecount, const wxString& text );
|
||||
void AppendLine( const wxString& text );
|
||||
void SetFootprintFullList( FOOTPRINT_LIST& list );
|
||||
void SetFootprintFilteredList( COMPONENT_INFO* Component,
|
||||
FOOTPRINT_LIST& list );
|
||||
void SetFootprintFilteredByPinCount( COMPONENT_INFO* Component,
|
||||
FOOTPRINT_LIST& list );
|
||||
void SetFootprintFilteredList( COMPONENT* aComponent,
|
||||
FOOTPRINT_LIST& aList );
|
||||
void SetFootprintFilteredByPinCount( COMPONENT* aComponent,
|
||||
FOOTPRINT_LIST& aList );
|
||||
|
||||
/**
|
||||
* Set the footprint list. We can have 2 footprint list:
|
||||
* The full footprint list
|
||||
* The filtered footprint list (if the current selected component has a
|
||||
* filter for footprints)
|
||||
* @param FullList true = full footprint list, false = filtered footprint list
|
||||
* @param Redraw = true to redraw the window
|
||||
*/
|
||||
void SetActiveFootprintList( bool FullList, bool Redraw = false );
|
||||
|
||||
wxString GetSelectedFootprint();
|
||||
@ -65,6 +99,19 @@ public:
|
||||
// Events functions:
|
||||
void OnLeftClick( wxListEvent& event );
|
||||
void OnLeftDClick( wxListEvent& event );
|
||||
|
||||
/**
|
||||
* Function OnChar
|
||||
* called on a key pressed
|
||||
* Call default handler for some special keys,
|
||||
* and for "ascii" keys, select the first footprint
|
||||
* that the name starts by the letter.
|
||||
* This is the default behavior of a listbox, but because we use
|
||||
* virtual lists, the listbox does not know anything to what is displayed,
|
||||
* we must handle this behavior here.
|
||||
* Furthermore the footprint name is not at the beginning of
|
||||
* displayed lines (the first word is the line number)
|
||||
*/
|
||||
void OnChar( wxKeyEvent& event );
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
@ -78,7 +125,7 @@ class COMPONENTS_LISTBOX : public ITEMS_LISTBOX_BASE
|
||||
{
|
||||
public:
|
||||
wxArrayString m_ComponentList;
|
||||
CVPCB_MAINFRAME* m_Parent;
|
||||
CVPCB_MAINFRAME* m_Parent;
|
||||
|
||||
public:
|
||||
|
||||
|
@ -1,3 +1,26 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 1992-2012 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
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file listboxes.cpp
|
||||
* @brief Implementation of class for displaying footprint list and component lists.
|
||||
@ -67,9 +90,10 @@ CVPCB_MAINFRAME* ITEMS_LISTBOX_BASE::GetParent()
|
||||
*/
|
||||
void CVPCB_MAINFRAME::BuildCmpListBox()
|
||||
{
|
||||
wxString msg;
|
||||
wxSize size( 10, 10 );
|
||||
wxFont guiFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
|
||||
COMPONENT* component;
|
||||
wxString msg;
|
||||
wxSize size( 10, 10 );
|
||||
wxFont guiFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
|
||||
|
||||
if( m_ListCmp == NULL )
|
||||
{
|
||||
@ -86,11 +110,14 @@ void CVPCB_MAINFRAME::BuildCmpListBox()
|
||||
|
||||
m_ListCmp->m_ComponentList.Clear();
|
||||
|
||||
BOOST_FOREACH( COMPONENT_INFO & component, m_components ) {
|
||||
for( unsigned i = 0; i < m_netlist.GetCount(); i++ )
|
||||
{
|
||||
component = m_netlist.GetComponent( i );
|
||||
|
||||
msg.Printf( CMP_FORMAT, m_ListCmp->GetCount() + 1,
|
||||
GetChars(component.m_Reference),
|
||||
GetChars(component.m_Value),
|
||||
GetChars(component.m_Footprint) );
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( component->GetValue() ),
|
||||
GetChars( component->GetFootprintLibName() ) );
|
||||
m_ListCmp->m_ComponentList.Add( msg );
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
#include <pcbstruct.h>
|
||||
#include <class_module.h>
|
||||
#include <class_board.h>
|
||||
|
||||
#include <cvpcb.h>
|
||||
#include <cvpcb_mainframe.h>
|
||||
@ -45,9 +46,9 @@ MODULE* DISPLAY_FOOTPRINTS_FRAME::Get_Module( const wxString& aFootprintName )
|
||||
|
||||
if( !libPath )
|
||||
{
|
||||
wxString msg = wxString::Format(
|
||||
_("PCB foot print library file <%s> could not be found in the default search paths." ),
|
||||
fn.GetFullName().GetData() );
|
||||
wxString msg = wxString::Format( _( "PCB footprint library file <%s> could not "
|
||||
"be found in the default search paths." ),
|
||||
fn.GetFullName().GetData() );
|
||||
|
||||
// @todo we should not be using wxMessageBox directly.
|
||||
wxMessageBox( msg, titleLibLoadError, wxOK | wxICON_ERROR, this );
|
||||
@ -58,7 +59,7 @@ MODULE* DISPLAY_FOOTPRINTS_FRAME::Get_Module( const wxString& aFootprintName )
|
||||
|
||||
if( footprint )
|
||||
{
|
||||
footprint->SetParent( GetBoard() );
|
||||
footprint->SetParent( (EDA_ITEM*) GetBoard() );
|
||||
footprint->SetPosition( wxPoint( 0, 0 ) );
|
||||
return footprint;
|
||||
}
|
||||
@ -74,4 +75,3 @@ MODULE* DISPLAY_FOOTPRINTS_FRAME::Get_Module( const wxString& aFootprintName )
|
||||
DisplayError( this, msg );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -54,6 +54,7 @@ static char HeaderLinkFile[] = { "Cmp-Mod V01" };
|
||||
|
||||
bool CVPCB_MAINFRAME::WriteComponentLinkFile( const wxString& aFullFileName )
|
||||
{
|
||||
COMPONENT* component;
|
||||
FILE* outputFile;
|
||||
wxFileName fn( aFullFileName );
|
||||
wxString Title = wxGetApp().GetTitle() + wxT( " " ) + GetBuildVersion();
|
||||
@ -69,13 +70,15 @@ bool CVPCB_MAINFRAME::WriteComponentLinkFile( const wxString& aFullFileName )
|
||||
retval |= fprintf( outputFile, " Created by %s", TO_UTF8( Title ) );
|
||||
retval |= fprintf( outputFile, " date = %s\n", TO_UTF8( DateAndTime() ) );
|
||||
|
||||
BOOST_FOREACH( COMPONENT_INFO& component, m_components )
|
||||
for( unsigned i = 0; i < m_netlist.GetCount(); i++ )
|
||||
{
|
||||
component = m_netlist.GetComponent( i );
|
||||
retval |= fprintf( outputFile, "\nBeginCmp\n" );
|
||||
retval |= fprintf( outputFile, "TimeStamp = %s;\n", TO_UTF8( component.m_TimeStamp ) );
|
||||
retval |= fprintf( outputFile, "Reference = %s;\n", TO_UTF8( component.m_Reference ) );
|
||||
retval |= fprintf( outputFile, "ValeurCmp = %s;\n", TO_UTF8( component.m_Value ) );
|
||||
retval |= fprintf( outputFile, "IdModule = %s;\n", TO_UTF8( component.m_Footprint ) );
|
||||
retval |= fprintf( outputFile, "TimeStamp = %s;\n", TO_UTF8( component->GetTimeStamp() ) );
|
||||
retval |= fprintf( outputFile, "Reference = %s;\n", TO_UTF8( component->GetReference() ) );
|
||||
retval |= fprintf( outputFile, "ValeurCmp = %s;\n", TO_UTF8( component->GetValue() ) );
|
||||
retval |= fprintf( outputFile, "IdModule = %s;\n",
|
||||
TO_UTF8( component->GetFootprintLibName() ) );
|
||||
retval |= fprintf( outputFile, "EndCmp\n" );
|
||||
}
|
||||
|
||||
@ -83,98 +86,3 @@ bool CVPCB_MAINFRAME::WriteComponentLinkFile( const wxString& aFullFileName )
|
||||
fclose( outputFile );
|
||||
return retval >= 0;
|
||||
}
|
||||
|
||||
bool CVPCB_MAINFRAME::ReadComponentLinkFile( FILE * aFile )
|
||||
{
|
||||
wxString timestamp, valeur, ilib, namecmp, msg;
|
||||
bool read_cmp_data = false, eof = false;
|
||||
char Line[1024], * ident, * data;
|
||||
|
||||
// Identification of the type of link file
|
||||
if( fgets( Line, sizeof(Line), aFile ) == 0 ||
|
||||
strnicmp( Line, HeaderLinkFile, 11 ) != 0 )
|
||||
{
|
||||
fclose( aFile );
|
||||
return false;
|
||||
}
|
||||
|
||||
while( !eof && fgets( Line, sizeof(Line), aFile ) != 0 )
|
||||
{
|
||||
if( strnicmp( Line, "EndListe", 8 ) == 0 )
|
||||
break;
|
||||
|
||||
/* Search the beginning of the component description. */
|
||||
if( strnicmp( Line, "BeginCmp", 8 ) != 0 )
|
||||
continue;
|
||||
|
||||
timestamp.Empty();
|
||||
valeur.Empty();
|
||||
ilib.Empty();
|
||||
namecmp.Empty();
|
||||
read_cmp_data = true;
|
||||
|
||||
while( !eof && read_cmp_data )
|
||||
{
|
||||
if( fgets( Line, 1024, aFile ) == 0 )
|
||||
{
|
||||
eof = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if( strnicmp( Line, "EndCmp", 6 ) == 0 )
|
||||
{
|
||||
read_cmp_data = true;
|
||||
break;
|
||||
}
|
||||
|
||||
ident = strtok( Line, "=;\n\r" );
|
||||
data = strtok( NULL, ";\n\r" );
|
||||
|
||||
if( strnicmp( ident, "TimeStamp", 9 ) == 0 )
|
||||
{
|
||||
timestamp = FROM_UTF8( data );
|
||||
timestamp.Trim( true );
|
||||
timestamp.Trim( false );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strnicmp( ident, "Reference", 9 ) == 0 )
|
||||
{
|
||||
namecmp = FROM_UTF8( data );
|
||||
namecmp.Trim( true );
|
||||
namecmp.Trim( false );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strnicmp( ident, "ValeurCmp", 9 ) == 0 )
|
||||
{
|
||||
valeur = FROM_UTF8( data );
|
||||
valeur.Trim( true );
|
||||
valeur.Trim( false );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strnicmp( ident, "IdModule", 8 ) == 0 )
|
||||
{
|
||||
ilib = FROM_UTF8( data );
|
||||
ilib.Trim( true );
|
||||
ilib.Trim( false );
|
||||
continue;
|
||||
}
|
||||
} // End reading one component link block.
|
||||
|
||||
// Search corresponding component info in list and update its parameters.
|
||||
BOOST_FOREACH( COMPONENT_INFO& component, m_components )
|
||||
{
|
||||
if( namecmp != component.m_Reference )
|
||||
continue;
|
||||
|
||||
/* Copy the name of the corresponding module. */
|
||||
component.m_Footprint = ilib;
|
||||
}
|
||||
}
|
||||
|
||||
fclose( aFile );
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/* Read a nelist type Eeschema (New and Old format)
|
||||
/* Read a netlist type Eeschema (New and Old format)
|
||||
* or OrcadPCB2 and build the component list
|
||||
*/
|
||||
|
||||
@ -35,82 +35,56 @@
|
||||
#include <confirm.h>
|
||||
#include <kicad_string.h>
|
||||
#include <macros.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
|
||||
#include <cvpcb_mainframe.h>
|
||||
#include <richio.h>
|
||||
|
||||
|
||||
#include <netlist_reader.h>
|
||||
|
||||
// COMPONENT_INFO object list sort function:
|
||||
bool operator < ( const COMPONENT_INFO& item1, const COMPONENT_INFO& item2 )
|
||||
{
|
||||
return StrNumCmp( item1.m_Reference, item2.m_Reference, INT_MAX, true ) < 0;
|
||||
}
|
||||
|
||||
|
||||
int CVPCB_MAINFRAME::ReadSchematicNetlist()
|
||||
{
|
||||
FILE* netfile = wxFopen( m_NetlistFileName.GetFullPath(), wxT( "rt" ) );
|
||||
wxBusyCursor dummy; // Shows an hourglass while loading.
|
||||
NETLIST_READER* netlistReader;
|
||||
wxString msg;
|
||||
wxString compFootprintLinkFileName;
|
||||
wxFileName fn = m_NetlistFileName;
|
||||
|
||||
if( netfile == NULL )
|
||||
// Load the footprint association file if it has already been created.
|
||||
fn.SetExt( ComponentFileExtension );
|
||||
|
||||
if( fn.FileExists() && fn.IsFileReadable() )
|
||||
compFootprintLinkFileName = fn.GetFullPath();
|
||||
|
||||
m_netlist.Clear();
|
||||
|
||||
try
|
||||
{
|
||||
wxString msg;
|
||||
msg.Printf( _( "Could not open file <%>" ),
|
||||
GetChars( m_NetlistFileName.GetFullPath() ) );
|
||||
wxMessageBox( msg );
|
||||
return -1;
|
||||
netlistReader = NETLIST_READER::GetNetlistReader( &m_netlist,
|
||||
m_NetlistFileName.GetFullPath(),
|
||||
compFootprintLinkFileName );
|
||||
std::auto_ptr< NETLIST_READER > nlr( netlistReader );
|
||||
netlistReader->LoadNetlist();
|
||||
}
|
||||
catch( IO_ERROR& ioe )
|
||||
{
|
||||
msg = wxString::Format( _( "Error loading netlist.\n%s" ), ioe.errorText.GetData() );
|
||||
wxMessageBox( msg, _( "Netlist Load Error" ), wxOK | wxICON_ERROR );
|
||||
return 1;
|
||||
}
|
||||
|
||||
NETLIST_READER netList_Reader( NULL, NULL );
|
||||
netList_Reader.m_UseTimeStamp = false;
|
||||
netList_Reader.m_ChangeFootprints = false;
|
||||
netList_Reader.m_UseCmpFile = false;
|
||||
netList_Reader.SetFilesnames( m_NetlistFileName.GetFullPath(), wxEmptyString );
|
||||
|
||||
// True to read footprint filters section: true for CvPcb, false for Pcbnew
|
||||
netList_Reader.ReadLibpartSectionSetOpt( true );
|
||||
|
||||
// on OSX otherwise reloading a file you will see duplicates
|
||||
m_components.clear();
|
||||
|
||||
bool success = netList_Reader.ReadNetList( netfile );
|
||||
if( !success )
|
||||
// We also remove footprint name if it is "$noname" because this is a dummy name,
|
||||
// not the actual name of the footprint.
|
||||
for( unsigned ii = 0; ii < m_netlist.GetCount(); ii++ )
|
||||
{
|
||||
wxMessageBox( _("Netlist read error") );
|
||||
return false;
|
||||
if( m_netlist.GetComponent( ii )->GetFootprintLibName() == wxT( "$noname" ) )
|
||||
m_netlist.GetComponent( ii )->SetFootprintLibName( wxEmptyString );
|
||||
}
|
||||
|
||||
// Now copy footprints info into Cvpcb list:
|
||||
// We also remove footprint name if it is "$noname"
|
||||
// because this is a dummy name,, not an actual name
|
||||
COMPONENT_INFO_LIST& cmpInfo = netList_Reader.GetComponentInfoList();
|
||||
for( unsigned ii = 0; ii < cmpInfo.size(); ii++ )
|
||||
{
|
||||
m_components.push_back( cmpInfo[ii] );
|
||||
if( cmpInfo[ii]->m_Footprint == wxT( "$noname" ) )
|
||||
cmpInfo[ii]->m_Footprint.Empty();
|
||||
}
|
||||
cmpInfo.clear(); // cmpInfo is no more owner of the list.
|
||||
|
||||
// Sort components by reference:
|
||||
sort( m_components.begin(), m_components.end() );
|
||||
|
||||
// Now copy filters in m_components, if netlist type is KICAD
|
||||
// ( when the format is the "old" PCBNEW format, filters are already in
|
||||
// m_component list
|
||||
if( NETLIST_TYPE_KICAD == netList_Reader.GetNetlistType() )
|
||||
{
|
||||
for( unsigned ii = 0; ii < m_components.size(); ii++ )
|
||||
{
|
||||
LIPBART_INFO* libpart = netList_Reader.GetLibpart(m_components[ii].m_Libpart);
|
||||
if( libpart == NULL )
|
||||
continue;
|
||||
|
||||
// now copy filter list
|
||||
m_components[ii].m_FootprintFilter = libpart->m_FootprintFilter;
|
||||
}
|
||||
}
|
||||
m_netlist.SortByReference();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -41,17 +41,17 @@
|
||||
|
||||
void CVPCB_MAINFRAME::SetNewPkg( const wxString& aFootprintName )
|
||||
{
|
||||
COMPONENT_INFO* component;
|
||||
COMPONENT* component;
|
||||
bool hasFootprint = false;
|
||||
int componentIndex;
|
||||
wxString description;
|
||||
|
||||
if( m_components.empty() )
|
||||
if( m_netlist.IsEmpty() )
|
||||
return;
|
||||
|
||||
// if no component is selected, select the first one
|
||||
// If no component is selected, select the first one
|
||||
|
||||
if(m_ListCmp->GetFirstSelected() < 0)
|
||||
if( m_ListCmp->GetFirstSelected() < 0 )
|
||||
{
|
||||
componentIndex = 0;
|
||||
m_ListCmp->SetSelection( componentIndex, true );
|
||||
@ -61,28 +61,28 @@ void CVPCB_MAINFRAME::SetNewPkg( const wxString& aFootprintName )
|
||||
|
||||
while( m_ListCmp->GetFirstSelected() != -1)
|
||||
{
|
||||
// get the component for the current iteration
|
||||
// Get the component for the current iteration
|
||||
|
||||
componentIndex = m_ListCmp->GetFirstSelected();
|
||||
component = &m_components[componentIndex];
|
||||
component = m_netlist.GetComponent( componentIndex );
|
||||
|
||||
if( component == NULL )
|
||||
return;
|
||||
|
||||
// check to see if the component has allready a footprint set.
|
||||
// Check to see if the component has already a footprint set.
|
||||
|
||||
hasFootprint = !(component->m_Footprint.IsEmpty());
|
||||
hasFootprint = !(component->GetFootprintLibName().IsEmpty());
|
||||
|
||||
component->m_Footprint = aFootprintName;
|
||||
component->SetFootprintLibName( aFootprintName );
|
||||
|
||||
// create the new component description
|
||||
|
||||
description.Printf( CMP_FORMAT, componentIndex + 1,
|
||||
GetChars( component->m_Reference ),
|
||||
GetChars( component->m_Value ),
|
||||
GetChars( component->m_Footprint ) );
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( component->GetValue() ),
|
||||
GetChars( component->GetFootprintLibName() ) );
|
||||
|
||||
// if the component hasn't had a footprint associated with it
|
||||
// If the component hasn't had a footprint associated with it
|
||||
// it now has, so we decrement the count of components without
|
||||
// a footprint assigned.
|
||||
|
||||
@ -92,12 +92,12 @@ void CVPCB_MAINFRAME::SetNewPkg( const wxString& aFootprintName )
|
||||
m_undefinedComponentCnt -= 1;
|
||||
}
|
||||
|
||||
// set the new description and deselect the processed component
|
||||
// Set the new description and deselect the processed component
|
||||
m_ListCmp->SetString( componentIndex, description );
|
||||
m_ListCmp->SetSelection( componentIndex, false );
|
||||
}
|
||||
|
||||
// mark this "session" as modified
|
||||
// Mark this "session" as modified
|
||||
m_modified = true;
|
||||
|
||||
// select the next component, if there is one
|
||||
@ -113,22 +113,10 @@ void CVPCB_MAINFRAME::SetNewPkg( const wxString& aFootprintName )
|
||||
|
||||
bool CVPCB_MAINFRAME::ReadNetListAndLinkFiles()
|
||||
{
|
||||
COMPONENT* component;
|
||||
wxString msg;
|
||||
int error_level;
|
||||
|
||||
error_level = ReadSchematicNetlist();
|
||||
|
||||
if( error_level < 0 )
|
||||
{
|
||||
msg.Printf( _( "File <%s> does not appear to be a valid KiCad net list file." ),
|
||||
GetChars( m_NetlistFileName.GetFullPath() ) );
|
||||
wxMessageBox( msg, _( "File Error" ), wxOK | wxICON_ERROR, this );
|
||||
m_NetlistFileName.Clear();
|
||||
UpdateTitle();
|
||||
return false;
|
||||
}
|
||||
|
||||
LoadComponentLinkFile( m_NetlistFileName.GetFullPath() );
|
||||
ReadSchematicNetlist();
|
||||
|
||||
if( m_ListCmp == NULL )
|
||||
return false;
|
||||
@ -140,19 +128,21 @@ bool CVPCB_MAINFRAME::ReadNetListAndLinkFiles()
|
||||
m_ListCmp->Clear();
|
||||
m_undefinedComponentCnt = 0;
|
||||
|
||||
BOOST_FOREACH( COMPONENT_INFO& component, m_components )
|
||||
for( unsigned i = 0; i < m_netlist.GetCount(); i++ )
|
||||
{
|
||||
component = m_netlist.GetComponent( i );
|
||||
|
||||
msg.Printf( CMP_FORMAT, m_ListCmp->GetCount() + 1,
|
||||
GetChars( component.m_Reference ),
|
||||
GetChars( component.m_Value ),
|
||||
GetChars( component.m_Footprint ) );
|
||||
GetChars( component->GetReference() ),
|
||||
GetChars( component->GetValue() ),
|
||||
GetChars( component->GetFootprintLibName() ) );
|
||||
m_ListCmp->AppendLine( msg );
|
||||
|
||||
if( component.m_Footprint.IsEmpty() )
|
||||
if( component->GetFootprintLibName().IsEmpty() )
|
||||
m_undefinedComponentCnt += 1;
|
||||
}
|
||||
|
||||
if( !m_components.empty() )
|
||||
if( !m_netlist.IsEmpty() )
|
||||
m_ListCmp->SetSelection( 0, true );
|
||||
|
||||
DisplayStatus();
|
||||
@ -165,37 +155,6 @@ bool CVPCB_MAINFRAME::ReadNetListAndLinkFiles()
|
||||
}
|
||||
|
||||
|
||||
bool CVPCB_MAINFRAME::LoadComponentLinkFile( const wxString& aFileName )
|
||||
{
|
||||
FILE* linkfile;
|
||||
wxFileName fn = aFileName;
|
||||
|
||||
fn.SetExt( ComponentFileExtension );
|
||||
|
||||
linkfile = wxFopen( fn.GetFullPath(), wxT( "rt" ) );
|
||||
if( linkfile == NULL )
|
||||
{
|
||||
wxString msg;
|
||||
msg.Printf( _( "Cannot open CvPcb component file <%s>." ),
|
||||
GetChars( fn.GetFullPath() ) );
|
||||
msg << wxT( "\n" ) << _( "This is normal if you are opening a new netlist file" );
|
||||
wxMessageBox( msg, titleComponentLibErr, wxOK | wxICON_ERROR );
|
||||
return false;
|
||||
}
|
||||
|
||||
// read and close the file
|
||||
if( ! ReadComponentLinkFile( linkfile ) )
|
||||
{
|
||||
wxString msg;
|
||||
msg.Printf( _( " <%s> does not appear to be a valid KiCad component link file." ),
|
||||
GetChars( fn.GetFullPath() ) );
|
||||
wxMessageBox( msg, titleComponentLibErr, wxOK | wxICON_ERROR );
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int CVPCB_MAINFRAME::SaveCmpLinkFile( const wxString& aFullFileName )
|
||||
{
|
||||
wxFileName fn;
|
||||
@ -207,7 +166,7 @@ int CVPCB_MAINFRAME::SaveCmpLinkFile( const wxString& aFullFileName )
|
||||
}
|
||||
else
|
||||
{
|
||||
wxFileDialog dlg( this, _( "Save Component/Footprint Link File" ), wxGetCwd(),
|
||||
wxFileDialog dlg( this, _( "Save Component Footprint Link File" ), wxGetCwd(),
|
||||
wxEmptyString, ComponentFileWildcard, wxFD_SAVE );
|
||||
|
||||
if( dlg.ShowModal() == wxID_CANCEL )
|
||||
@ -224,7 +183,7 @@ int CVPCB_MAINFRAME::SaveCmpLinkFile( const wxString& aFullFileName )
|
||||
|
||||
if( WriteComponentLinkFile( fn.GetFullPath() ) == 0 )
|
||||
{
|
||||
DisplayError( this, _( "Unable to create component file (.cmp)" ) );
|
||||
DisplayError( this, _( "Unable to create component footprint link file (.cmp)" ) );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -148,7 +148,7 @@ void CMP_LIBRARY::GetEntryNames( wxArrayString& aNames, bool aSort, bool aMakeUp
|
||||
* simple function used as comparator to sort a std::vector<wxArrayString>&.
|
||||
*
|
||||
* @param aItem1 is the first comparison parameter.
|
||||
* @param aItem1 is the second.
|
||||
* @param aItem2 is the second.
|
||||
* @return bool - which item should be put first in the sorted list.
|
||||
*/
|
||||
bool sortFunction( wxArrayString aItem1, wxArrayString aItem2 )
|
||||
|
@ -259,7 +259,7 @@ public:
|
||||
* true.
|
||||
* @param aList = array of PARAM_CFG_BASE pointers
|
||||
*/
|
||||
void SaveCurrentSetupValues( const PARAM_CFG_ARRAY& List );
|
||||
void SaveCurrentSetupValues( const PARAM_CFG_ARRAY& aList );
|
||||
|
||||
/**
|
||||
* Function ReadCurrentSetupValues
|
||||
@ -268,7 +268,7 @@ public:
|
||||
* true.
|
||||
* @param aList = array of PARAM_CFG_BASE pointers
|
||||
*/
|
||||
void ReadCurrentSetupValues( const PARAM_CFG_ARRAY& List );
|
||||
void ReadCurrentSetupValues( const PARAM_CFG_ARRAY& aList );
|
||||
|
||||
/**
|
||||
* Function ReadProjectConfig
|
||||
|
@ -1,3 +1,27 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2010 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 1992-2012 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
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file dialog_helpers.h
|
||||
* @brief Helper dialog and control classes.
|
||||
@ -38,6 +62,7 @@ public:
|
||||
* Constructor:
|
||||
* @param aParent Pointer to the parent window.
|
||||
* @param aTitle = The title shown on top.
|
||||
* @param aItemHeaders is an array containing the column header names for the dialog.
|
||||
* @param aItemList = A wxArrayString of the list of elements.
|
||||
* @param aRefText = An item name if an item must be preselected.
|
||||
* @param aCallBackFunction = callback function to display comments
|
||||
|
@ -133,8 +133,31 @@ public:
|
||||
const std::string& aRevision )
|
||||
throw( PARSE_ERROR );
|
||||
|
||||
/**
|
||||
* Function clear
|
||||
* clears the contents of the library nickname, footprint name, and revision strings.
|
||||
*/
|
||||
void clear();
|
||||
|
||||
/**
|
||||
* Function empty
|
||||
* @return a boolean true value if the FPID is empty. Otherwise return false.
|
||||
*/
|
||||
bool empty() const { return nickname.empty() && footprint.empty() && revision.empty(); }
|
||||
|
||||
/**
|
||||
* Function Compare
|
||||
* compares the contents of FPID objects by performing a std::string comparison of the
|
||||
* library nickname, footprint name, and revision strings respectively.
|
||||
*
|
||||
* @param aFPID is the FPID to compare against.
|
||||
* @return -1 if less than \a aFPID, 1 if greater than \a aFPID, and 0 if equal to \a aFPID.
|
||||
*/
|
||||
int compare( const FPID& aFPID ) const;
|
||||
|
||||
bool operator <( const FPID& aFPID ) const { return this->compare( aFPID ) < 0; }
|
||||
bool operator ==( const FPID& aFPID ) const { return this->compare( aFPID ) == 0; }
|
||||
|
||||
#if defined(DEBUG)
|
||||
static void Test();
|
||||
#endif
|
||||
|
89
include/reporter.h
Normal file
89
include/reporter.h
Normal file
@ -0,0 +1,89 @@
|
||||
#ifndef _REPORTER_H_
|
||||
#define _REPORTER_H_
|
||||
|
||||
/**
|
||||
* @file reporter.h
|
||||
* @author Wayne Stambaugh
|
||||
* @note A special thanks to Dick Hollenbeck who came up with the idea that inspired
|
||||
* me to write this.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2013 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
|
||||
*/
|
||||
|
||||
|
||||
class wxString;
|
||||
class wxTextCtrl;
|
||||
|
||||
|
||||
/**
|
||||
* Class REPORTER
|
||||
* is a pure virtual class used to derive REPORTOR objects from.
|
||||
*
|
||||
* The purpose of the REPORTER object is to hide an object that take a string as an input
|
||||
* from other objects. This prevents objects such as wxWidgets UI control internals from
|
||||
* being exposed to low level KiCad objects dervice from #BOARD_ITEM and #SCH_ITEM.
|
||||
*/
|
||||
class REPORTER
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Function Report
|
||||
* is a pure virtual function to override in the derived object.
|
||||
*
|
||||
* @param aText is the string to report.
|
||||
*/
|
||||
virtual REPORTER& Report( const wxString& aText ) = 0;
|
||||
|
||||
REPORTER& Report( const char *aText );
|
||||
|
||||
REPORTER& operator <<( const wxString& aText ) { return Report( aText ); }
|
||||
|
||||
REPORTER& operator <<( const wxChar* aText ) { return Report( wxString( aText ) ); }
|
||||
|
||||
REPORTER& operator <<( wxChar aChar ) { return Report( wxString( aChar ) ); }
|
||||
|
||||
REPORTER& operator <<( const char* aText ) { return Report( aText ); }
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Class WX_TEXT_CTRL_REPORTER
|
||||
* is wrapper for reporting to a wxTextCtrl object.
|
||||
*/
|
||||
class WX_TEXT_CTRL_REPORTER : public REPORTER
|
||||
{
|
||||
wxTextCtrl* m_textCtrl;
|
||||
|
||||
public:
|
||||
WX_TEXT_CTRL_REPORTER( wxTextCtrl* aTextCtrl ) :
|
||||
REPORTER(),
|
||||
m_textCtrl( aTextCtrl )
|
||||
{
|
||||
}
|
||||
|
||||
REPORTER& Report( const wxString& aText );
|
||||
};
|
||||
|
||||
#endif // _REPORTER_H_
|
@ -98,6 +98,7 @@ extern const wxString KiCadFootprintLibFileWildcard;
|
||||
extern const wxString KiCadFootprintLibPathWildcard;
|
||||
extern const wxString GedaPcbFootprintLibFileWildcard;
|
||||
extern const wxString EagleFootprintLibPathWildcard;
|
||||
extern const wxString TextWildcard;
|
||||
|
||||
|
||||
#endif // INCLUDE_WILDCARDS_AND_FILES_EXT_H_
|
||||
|
@ -91,6 +91,19 @@ protected:
|
||||
void updateZoomSelectBox();
|
||||
virtual void unitsChangeRefresh();
|
||||
|
||||
/**
|
||||
* Function loadFootprint
|
||||
* attempts to load \a aFootprintName from the list of libraries.
|
||||
*
|
||||
* @param aFootprintName is the name of component footprint to load.
|
||||
* @return the #MODULE if found or NULL if \a aFootprintName not found in any of the
|
||||
* libraries.
|
||||
* @throw IO_ERROR if an I/O error occurs or a #PARSE_ERROR if a file parsing error
|
||||
* occurs while reading footprint library files.
|
||||
*/
|
||||
MODULE* loadFootprint( const wxString& aFootprintName )
|
||||
throw( IO_ERROR, PARSE_ERROR );
|
||||
|
||||
public:
|
||||
PCB_BASE_FRAME( wxWindow* aParent, ID_DRAWFRAME_TYPE aFrameType,
|
||||
const wxString& aTitle,
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user