Commit bf3b8f56 authored by jean-pierre charras's avatar jean-pierre charras

BOM list code cleanup.

parent eb3ba806
/**
* @file BOM_lister.h
*/
/* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2012 Jean-Pierre Charras jp.charras at wanadoo.fr
* 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
*/
#ifndef _BOM_LISTER_H_
#define _BOM_LISTER_H_
#include <netlist.h>
// A helper class to build item lists for BOM,
// and write lists on files
class BOM_LISTER
{
BOM_LABEL_LIST m_labelList; // a list of global and hierarchical labels
FILE * m_outFile; // the output file for BOM generation
char m_separatorSymbol; // the separator used for csv files ( usually \t ; or , )
bool m_outputFmtCsv; // true to create Csv files, false to create text lists
bool m_includeSubComponents; // true to list each part
// of a multiple part per package component
// false to list only once this kind of component
std::vector <int> m_fieldIDactive; // list of field IDs to print
public:
BOM_LISTER()
{
m_outFile = NULL;
m_separatorSymbol = '\t';
m_outputFmtCsv = false;
m_includeSubComponents = false;
}
void SetIncludeSubCmp( bool aIncludeSubCmp )
{ m_includeSubComponents = aIncludeSubCmp; }
void CreateCsvBOMList( char aSeparator, FILE * aFile );
void PrintComponentsListByPart( SCH_REFERENCE_LIST& aList );
void AddFieldIdToPrintList( int aFieldId );
void ClearFieldIdPrintList() { m_fieldIDactive.clear(); }
/**
* Function PrintGlobalAndHierarchicalLabelsList
* print the list of global and hierarchical labels bu sheet or by name
* @param aSortBySheet = true to print by sheet name order
* false to print by label name order
* @param aFile = the file to write to (will be NOT clesed)
*/
void PrintGlobalAndHierarchicalLabelsList( FILE * aFile, bool aSortBySheet );
private:
bool isFieldPrintable( int aFieldId );
void buildGlobalAndHierarchicalLabelsList();
};
#endif // _BOM_LISTER_H_
/* /*
* 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) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com * Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2012 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.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
...@@ -33,63 +33,97 @@ ...@@ -33,63 +33,97 @@
#include <fctsys.h> #include <fctsys.h>
#include <class_sch_screen.h> #include <class_sch_screen.h>
#include <kicad_string.h>
#include <general.h>
#include <sch_sheet.h> #include <sch_sheet.h>
#include <sch_component.h> #include <sch_component.h>
#include <template_fieldnames.h> #include <template_fieldnames.h>
#include <netlist.h>
#include <BOM_lister.h>
/* Fill aList with labels
*/ void BOM_LISTER::CreateCsvBOMList( char aSeparator, FILE * aFile )
void GenListeGLabels( BOM_LABEL_LIST& aList )
{ {
// Build the sheet list m_outFile = aFile;
m_separatorSymbol = aSeparator;
SCH_REFERENCE_LIST cmplist;
SCH_SHEET_LIST sheetList; SCH_SHEET_LIST sheetList;
BOM_LABEL label;
for( SCH_SHEET_PATH* path = sheetList.GetFirst(); path; path = sheetList.GetNext() ) sheetList.GetComponents( cmplist, false );
{
SCH_ITEM* schItem = (SCH_ITEM*) path->LastDrawList();
while( schItem ) // sort component list by ref and remove sub components
{ cmplist.RemoveSubComponentsFromList();
switch( schItem->Type() )
{
case SCH_HIERARCHICAL_LABEL_T:
case SCH_GLOBAL_LABEL_T:
aList.push_back( BOM_LABEL( schItem->Type(), schItem, *path ) );
break;
case SCH_SHEET_T: // sort component list by value
{ cmplist.SortByValueOnly( );
SCH_SHEET* sheet = (SCH_SHEET*) schItem; PrintComponentsListByPart( cmplist );
BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, sheet->GetPins() ) fclose( m_outFile );
{ m_outFile = NULL;
aList.push_back( BOM_LABEL( SCH_SHEET_PIN_T, &sheetPin, *path ) ); }
}
}
break;
default:
break; void BOM_LISTER::PrintComponentsListByPart( SCH_REFERENCE_LIST& aList )
{
unsigned int index = 0;
while( index < aList.GetCount() )
{
SCH_COMPONENT *component = aList[index].GetComponent();
wxString referenceListStr;
int qty = 1;
referenceListStr.append( aList[index].GetRef() );
for( unsigned int i = index+1; i < aList.GetCount(); )
{
if( *(aList[i].GetComponent()) == *component )
{
referenceListStr.append( wxT( " " ) + aList[i].GetRef() );
aList.RemoveItem( i );
qty++;
} }
else
i++; // Increment index only when current item is not removed from the list
}
schItem = schItem->Next(); // Write value, quantity and list of references
fprintf( m_outFile, "%s%c%d%c\"%s\"", TO_UTF8( component->GetField( VALUE )->GetText() ),
m_separatorSymbol, qty,
m_separatorSymbol, TO_UTF8( referenceListStr ) );
for( int i = FOOTPRINT; i < component->GetFieldCount(); i++ )
{
if( isFieldPrintable( i ) )
fprintf( m_outFile, "%c%s", m_separatorSymbol,
TO_UTF8( component->GetField( i )->GetText() ) );
} }
fprintf( m_outFile, "\n" );
index++;
} }
} }
bool BOM_LISTER::isFieldPrintable( int aFieldId )
{
for( unsigned ii = 0; ii < m_fieldIDactive.size(); ii ++ )
if( m_fieldIDactive[ii] == aFieldId )
return true;
return false;
}
void BOM_LISTER::AddFieldIdToPrintList( int aFieldId )
{
for( unsigned ii = 0; ii < m_fieldIDactive.size(); ii ++ )
if( m_fieldIDactive[ii] == aFieldId )
return;
m_fieldIDactive.push_back( aFieldId );
}
/* compare function for sorting labels /* compare function for sorting labels
* sort by * sort by
* value * value
* if same value: by sheet * if same value: by sheet
*/ */
bool SortLabelsByValue( const BOM_LABEL& obj1, const BOM_LABEL& obj2 ) static bool SortLabelsByValue( const BOM_LABEL& obj1, const BOM_LABEL& obj2 )
{ {
int ii; int ii;
...@@ -108,7 +142,7 @@ bool SortLabelsByValue( const BOM_LABEL& obj1, const BOM_LABEL& obj2 ) ...@@ -108,7 +142,7 @@ bool SortLabelsByValue( const BOM_LABEL& obj1, const BOM_LABEL& obj2 )
* by sheet * by sheet
* in a sheet, by alphabetic order * in a sheet, by alphabetic order
*/ */
bool SortLabelsBySheet( const BOM_LABEL& obj1, const BOM_LABEL& obj2 ) static bool SortLabelsBySheet( const BOM_LABEL& obj1, const BOM_LABEL& obj2 )
{ {
int ii; int ii;
...@@ -122,41 +156,101 @@ bool SortLabelsBySheet( const BOM_LABEL& obj1, const BOM_LABEL& obj2 ) ...@@ -122,41 +156,101 @@ bool SortLabelsBySheet( const BOM_LABEL& obj1, const BOM_LABEL& obj2 )
return ii < 0; return ii < 0;
} }
void BOM_LISTER::buildGlobalAndHierarchicalLabelsList()
{
m_labelList.clear();
// Explore the flat sheet list
SCH_SHEET_LIST sheetList;
for( SCH_SHEET_PATH* path = sheetList.GetFirst(); path; path = sheetList.GetNext() )
{
SCH_ITEM* schItem = (SCH_ITEM*) path->LastDrawList();
for( ; schItem; schItem = schItem->Next() )
{
switch( schItem->Type() )
{
case SCH_HIERARCHICAL_LABEL_T:
case SCH_GLOBAL_LABEL_T:
m_labelList.push_back( BOM_LABEL( schItem->Type(), schItem, *path ) );
break;
case SCH_SHEET_T:
{
SCH_SHEET* sheet = (SCH_SHEET*) schItem;
BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, sheet->GetPins() )
{
m_labelList.push_back( BOM_LABEL( SCH_SHEET_PIN_T,
&sheetPin, *path ) );
}
}
break;
default:
break;
}
}
}
}
int PrintListeGLabel( FILE* f, BOM_LABEL_LIST& aList ) void BOM_LISTER::PrintGlobalAndHierarchicalLabelsList( FILE * aFile, bool aSortBySheet )
{ {
m_outFile = aFile;
buildGlobalAndHierarchicalLabelsList();
wxString msg;
if( aSortBySheet )
{
sort( m_labelList.begin(), m_labelList.end(), SortLabelsBySheet );
msg.Printf( _( "\n#Global, Hierarchical Labels and PinSheets \
( order = Sheet Number ) count = %d\n" ),
m_labelList.size() );
}
else
{
sort( m_labelList.begin(), m_labelList.end(), SortLabelsByValue );
msg.Printf( _( "\n#Global, Hierarchical Labels and PinSheets ( \
order = Alphab. ) count = %d\n\n" ),
m_labelList.size() );
}
fprintf( m_outFile, "%s", TO_UTF8( msg ) );
SCH_LABEL* label; SCH_LABEL* label;
SCH_SHEET_PIN* pinsheet; SCH_SHEET_PIN* pinsheet;
wxString msg, sheetpath; wxString sheetpath;
wxString labeltype; wxString labeltype;
for( unsigned ii = 0; ii < aList.size(); ii++ ) for( unsigned ii = 0; ii < m_labelList.size(); ii++ )
{ {
switch( aList[ii].GetType() ) switch( m_labelList[ii].GetType() )
{ {
case SCH_HIERARCHICAL_LABEL_T: case SCH_HIERARCHICAL_LABEL_T:
case SCH_GLOBAL_LABEL_T: case SCH_GLOBAL_LABEL_T:
label = (SCH_LABEL*)(aList[ii].GetLabel()); label = (SCH_LABEL*)(m_labelList[ii].GetLabel());
if( aList[ii].GetType() == SCH_HIERARCHICAL_LABEL_T ) if( m_labelList[ii].GetType() == SCH_HIERARCHICAL_LABEL_T )
labeltype = wxT( "Hierarchical" ); labeltype = wxT( "Hierarchical" );
else else
labeltype = wxT( "Global " ); labeltype = wxT( "Global " );
sheetpath = aList[ii].GetSheetPath().PathHumanReadable(); sheetpath = m_labelList[ii].GetSheetPath().PathHumanReadable();
msg.Printf( _( "> %-28.28s %s (Sheet %s) pos: %3.3f, %3.3f\n" ), msg.Printf( _( "> %-28.28s %s (Sheet %s) pos: %3.3f, %3.3f\n" ),
GetChars( label->GetText() ), GetChars( label->GetText() ),
GetChars( labeltype ), GetChars( labeltype ), GetChars( sheetpath ),
GetChars( sheetpath ),
(float) label->m_Pos.x / 1000, (float) label->m_Pos.x / 1000,
(float) label->m_Pos.y / 1000 ); (float) label->m_Pos.y / 1000 );
fputs( TO_UTF8( msg ), f ); fputs( TO_UTF8( msg ), m_outFile );
break; break;
case SCH_SHEET_PIN_T: case SCH_SHEET_PIN_T:
{ {
pinsheet = (SCH_SHEET_PIN*) aList[ii].GetLabel(); pinsheet = (SCH_SHEET_PIN*) m_labelList[ii].GetLabel();
int jj = pinsheet->GetShape(); int jj = pinsheet->GetShape();
if( jj < 0 ) if( jj < 0 )
...@@ -170,11 +264,11 @@ int PrintListeGLabel( FILE* f, BOM_LABEL_LIST& aList ) ...@@ -170,11 +264,11 @@ int PrintListeGLabel( FILE* f, BOM_LABEL_LIST& aList )
msg.Printf( _( "> %-28.28s PinSheet %-7.7s (Sheet %s) pos: %3.3f, %3.3f\n" ), msg.Printf( _( "> %-28.28s PinSheet %-7.7s (Sheet %s) pos: %3.3f, %3.3f\n" ),
GetChars( pinsheet->GetText() ), GetChars( pinsheet->GetText() ),
GetChars( labtype ), GetChars( labtype ),
GetChars( aList[ii].GetSheetPath().PathHumanReadable() ), GetChars( m_labelList[ii].GetSheetPath().PathHumanReadable() ),
(float) pinsheet->m_Pos.x / 1000, (float) pinsheet->m_Pos.x / 1000,
(float) pinsheet->m_Pos.y / 1000 ); (float) pinsheet->m_Pos.y / 1000 );
fputs( TO_UTF8( msg ), f ); fputs( TO_UTF8( msg ), m_outFile );
} }
break; break;
...@@ -185,6 +279,5 @@ int PrintListeGLabel( FILE* f, BOM_LABEL_LIST& aList ) ...@@ -185,6 +279,5 @@ int PrintListeGLabel( FILE* f, BOM_LABEL_LIST& aList )
} }
msg = _( "#End labels\n" ); msg = _( "#End labels\n" );
fputs( TO_UTF8( msg ), f ); fputs( TO_UTF8( msg ), m_outFile );
return 0;
} }
/* /*
* 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) 2008 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com * Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.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
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
#include <wxstruct.h> #include <wxstruct.h>
#include <build_version.h> #include <build_version.h>
#include <general.h>
#include <netlist.h> #include <netlist.h>
#include <template_fieldnames.h> #include <template_fieldnames.h>
#include <sch_component.h> #include <sch_component.h>
...@@ -45,14 +44,7 @@ ...@@ -45,14 +44,7 @@
#include <wx/valgen.h> #include <wx/valgen.h>
#include <dialog_build_BOM.h> #include <dialog_build_BOM.h>
#include <BOM_lister.h>
#include <protos.h>
extern void GenListeGLabels( std::vector <BOM_LABEL>& aList );
extern bool SortLabelsByValue( const BOM_LABEL& obj1, const BOM_LABEL& obj2 );
extern bool SortLabelsBySheet( const BOM_LABEL& obj1, const BOM_LABEL& obj2 );
extern int PrintListeGLabel( FILE* f, std::vector <BOM_LABEL>& aList );
/* Local variables */ /* Local variables */
...@@ -118,10 +110,10 @@ static char s_ExportSeparator[] = ("\t;,."); ...@@ -118,10 +110,10 @@ static char s_ExportSeparator[] = ("\t;,.");
DIALOG_BUILD_BOM::DIALOG_BUILD_BOM( EDA_DRAW_FRAME* parent ) : DIALOG_BUILD_BOM::DIALOG_BUILD_BOM( EDA_DRAW_FRAME* parent ) :
DIALOG_BUILD_BOM_BASE( parent ) DIALOG_BUILD_BOM_BASE( parent )
{ {
m_Config = wxGetApp().GetSettings(); m_config = wxGetApp().GetSettings();
wxASSERT( m_Config != NULL ); wxASSERT( m_config != NULL );
m_Parent = parent; m_parent = parent;
Init(); Init();
...@@ -142,18 +134,18 @@ void DIALOG_BUILD_BOM::Init() ...@@ -142,18 +134,18 @@ void DIALOG_BUILD_BOM::Init()
SetFocus(); SetFocus();
/* Get options */ /* Get options */
m_Config->Read( OPTION_BOM_LIST_REF, &s_ListByRef ); m_config->Read( OPTION_BOM_LIST_REF, &s_ListByRef );
m_Config->Read( OPTION_BOM_LIST_VALUE , &s_ListByValue ); m_config->Read( OPTION_BOM_LIST_VALUE , &s_ListByValue );
m_Config->Read( OPTION_BOM_LIST_HPINS, &s_ListHierarchicalPinByName ); m_config->Read( OPTION_BOM_LIST_HPINS, &s_ListHierarchicalPinByName );
m_Config->Read( OPTION_BOM_LIST_HPINS_BY_SHEET, &s_ListWithSubCmponents ); m_config->Read( OPTION_BOM_LIST_HPINS_BY_SHEET, &s_ListWithSubCmponents );
m_Config->Read( OPTION_BOM_LIST_HPINS_BY_NAME_, &s_ListWithSubCmponents ); m_config->Read( OPTION_BOM_LIST_HPINS_BY_NAME_, &s_ListWithSubCmponents );
m_Config->Read( OPTION_BOM_LIST_SUB_CMP, &s_ListWithSubCmponents ); m_config->Read( OPTION_BOM_LIST_SUB_CMP, &s_ListWithSubCmponents );
m_Config->Read( OPTION_BOM_LIST_HPINS_BY_SHEET, &s_ListHierarchicalPinBySheet ); m_config->Read( OPTION_BOM_LIST_HPINS_BY_SHEET, &s_ListHierarchicalPinBySheet );
m_Config->Read( OPTION_BOM_LIST_HPINS_BY_NAME_, &s_ListHierarchicalPinByName ); m_config->Read( OPTION_BOM_LIST_HPINS_BY_NAME_, &s_ListHierarchicalPinByName );
s_OutputFormOpt = m_Config->Read( OPTION_BOM_FORMAT, (long) 0 ); s_OutputFormOpt = m_config->Read( OPTION_BOM_FORMAT, 0l );
m_Config->Read( OPTION_BOM_LAUNCH_BROWSER, &s_BrowseCreatedList ); m_config->Read( OPTION_BOM_LAUNCH_BROWSER, &s_BrowseCreatedList );
s_OutputSeparatorOpt = m_Config->Read( OPTION_BOM_SEPARATOR, (long) 0 ); s_OutputSeparatorOpt = m_config->Read( OPTION_BOM_SEPARATOR, 0l );
long addfields = m_Config->Read( OPTION_BOM_ADD_FIELD, (long) 0 ); long addfields = m_config->Read( OPTION_BOM_ADD_FIELD, 0l );
for( int ii = 0, bitmask = 1; s_AddFieldList[ii] != NULL; ii++ ) for( int ii = 0, bitmask = 1; s_AddFieldList[ii] != NULL; ii++ )
{ {
...@@ -264,8 +256,6 @@ void DIALOG_BUILD_BOM::OnCancelClick( wxCommandEvent& event ) ...@@ -264,8 +256,6 @@ void DIALOG_BUILD_BOM::OnCancelClick( wxCommandEvent& event )
void DIALOG_BUILD_BOM::SavePreferences() void DIALOG_BUILD_BOM::SavePreferences()
{ {
wxASSERT( m_Config != NULL );
// Determine current settings of "List items" and "Options" checkboxes // Determine current settings of "List items" and "Options" checkboxes
s_ListByRef = m_ListCmpbyRefItems->GetValue(); s_ListByRef = m_ListCmpbyRefItems->GetValue();
s_ListWithSubCmponents = m_ListSubCmpItems->GetValue(); s_ListWithSubCmponents = m_ListSubCmpItems->GetValue();
...@@ -296,16 +286,16 @@ void DIALOG_BUILD_BOM::SavePreferences() ...@@ -296,16 +286,16 @@ void DIALOG_BUILD_BOM::SavePreferences()
s_Add_Alls_state = m_AddAllFields->GetValue(); s_Add_Alls_state = m_AddAllFields->GetValue();
// Now save current settings of both radiobutton groups // Now save current settings of both radiobutton groups
m_Config->Write( OPTION_BOM_LIST_REF, s_ListByRef ); m_config->Write( OPTION_BOM_LIST_REF, s_ListByRef );
m_Config->Write( OPTION_BOM_LIST_VALUE , s_ListByValue ); m_config->Write( OPTION_BOM_LIST_VALUE , s_ListByValue );
m_Config->Write( OPTION_BOM_LIST_HPINS, s_ListHierarchicalPinByName ); m_config->Write( OPTION_BOM_LIST_HPINS, s_ListHierarchicalPinByName );
m_Config->Write( OPTION_BOM_LIST_HPINS_BY_SHEET, s_ListHierarchicalPinBySheet ); m_config->Write( OPTION_BOM_LIST_HPINS_BY_SHEET, s_ListHierarchicalPinBySheet );
m_Config->Write( OPTION_BOM_LIST_HPINS_BY_NAME_, s_ListHierarchicalPinByName ); m_config->Write( OPTION_BOM_LIST_HPINS_BY_NAME_, s_ListHierarchicalPinByName );
m_Config->Write( OPTION_BOM_LIST_SUB_CMP, s_ListWithSubCmponents ); m_config->Write( OPTION_BOM_LIST_SUB_CMP, s_ListWithSubCmponents );
m_Config->Write( OPTION_BOM_FORMAT, (long) s_OutputFormOpt ); m_config->Write( OPTION_BOM_FORMAT, (long) s_OutputFormOpt );
m_Config->Write( OPTION_BOM_SEPARATOR, (long) s_OutputSeparatorOpt ); m_config->Write( OPTION_BOM_SEPARATOR, (long) s_OutputSeparatorOpt );
m_Config->Write( OPTION_BOM_LAUNCH_BROWSER, (long) s_BrowseCreatedList ); m_config->Write( OPTION_BOM_LAUNCH_BROWSER, (long) s_BrowseCreatedList );
// Now save current settings of all "Fields to add" checkboxes // Now save current settings of all "Fields to add" checkboxes
long addfields = 0; long addfields = 0;
...@@ -318,7 +308,7 @@ void DIALOG_BUILD_BOM::SavePreferences() ...@@ -318,7 +308,7 @@ void DIALOG_BUILD_BOM::SavePreferences()
bitmask <<= 1; bitmask <<= 1;
} }
m_Config->Write( OPTION_BOM_ADD_FIELD, addfields ); m_config->Write( OPTION_BOM_ADD_FIELD, addfields );
} }
...@@ -371,7 +361,7 @@ void DIALOG_BUILD_BOM::Create_BOM_Lists( int aTypeFile, ...@@ -371,7 +361,7 @@ void DIALOG_BUILD_BOM::Create_BOM_Lists( int aTypeFile,
fn = dlg.GetPath(); // remember path+filename+ext for subsequent runs. fn = dlg.GetPath(); // remember path+filename+ext for subsequent runs.
m_ListFileName = dlg.GetPath(); m_listFileName = dlg.GetPath();
// Close dialog, then show the list (if so requested) // Close dialog, then show the list (if so requested)
...@@ -395,7 +385,7 @@ void DIALOG_BUILD_BOM::Create_BOM_Lists( int aTypeFile, ...@@ -395,7 +385,7 @@ void DIALOG_BUILD_BOM::Create_BOM_Lists( int aTypeFile,
if( aRunBrowser ) if( aRunBrowser )
{ {
wxString editorname = wxGetApp().GetEditorName(); wxString editorname = wxGetApp().GetEditorName();
wxString filename = m_ListFileName; wxString filename = m_listFileName;
AddDelimiterString( filename ); AddDelimiterString( filename );
ExecuteFile( this, editorname, filename ); ExecuteFile( this, editorname, filename );
} }
...@@ -448,30 +438,23 @@ bool DIALOG_BUILD_BOM::IsFieldChecked(int aFieldId) ...@@ -448,30 +438,23 @@ bool DIALOG_BUILD_BOM::IsFieldChecked(int aFieldId)
*/ */
void DIALOG_BUILD_BOM::CreatePartsList( ) void DIALOG_BUILD_BOM::CreatePartsList( )
{ {
FILE* f; FILE* f;
wxString msg;
if( ( f = wxFopen( m_ListFileName, wxT( "wt" ) ) ) == NULL ) if( ( f = wxFopen( m_listFileName, wxT( "wt" ) ) ) == NULL )
{ {
wxString msg;
msg = _( "Failed to open file " ); msg = _( "Failed to open file " );
msg << m_ListFileName; msg << m_listFileName;
DisplayError( this, msg ); DisplayError( this, msg );
return; return;
} }
SCH_REFERENCE_LIST cmplist; BOM_LISTER bom_lister;
SCH_SHEET_LIST sheetList; // Set the list of fields to add to list
for( int ii = FOOTPRINT, ii < FIELD8; ii++ )
sheetList.GetComponents( cmplist, false ); if IsFieldChecked( ii )
bom_lister.AddFieldIdToPrintList( ii );
// sort component list by ref and remove sub components bom_lister.CreateCsvBOMList( s_ExportSeparatorSymbol, f );
cmplist.RemoveSubComponentsFromList();
// sort component list by value
cmplist.SortByValueOnly( );
PrintComponentsListByPart( f, cmplist, false );
fclose( f );
} }
...@@ -486,10 +469,10 @@ void DIALOG_BUILD_BOM::CreateExportList( bool aIncludeSubComponents ) ...@@ -486,10 +469,10 @@ void DIALOG_BUILD_BOM::CreateExportList( bool aIncludeSubComponents )
FILE* f; FILE* f;
wxString msg; wxString msg;
if( ( f = wxFopen( m_ListFileName, wxT( "wt" ) ) ) == NULL ) if( ( f = wxFopen( m_listFileName, wxT( "wt" ) ) ) == NULL )
{ {
msg = _( "Failed to open file " ); msg = _( "Failed to open file " );
msg << m_ListFileName; msg << m_listFileName;
DisplayError( this, msg ); DisplayError( this, msg );
return; return;
} }
...@@ -515,7 +498,7 @@ void DIALOG_BUILD_BOM::CreateExportList( bool aIncludeSubComponents ) ...@@ -515,7 +498,7 @@ void DIALOG_BUILD_BOM::CreateExportList( bool aIncludeSubComponents )
/* /*
* GenereListeOfItems() * GenereListeOfItems()
* Main function to create the list of components and/or labels * Main function to create the list of components and/or labels
* (global labels and pin sheets" ) * (global labels, hierarchical labels and pin sheets )
*/ */
void DIALOG_BUILD_BOM::GenereListeOfItems( bool aIncludeSubComponents ) void DIALOG_BUILD_BOM::GenereListeOfItems( bool aIncludeSubComponents )
{ {
...@@ -523,10 +506,10 @@ void DIALOG_BUILD_BOM::GenereListeOfItems( bool aIncludeSubComponents ) ...@@ -523,10 +506,10 @@ void DIALOG_BUILD_BOM::GenereListeOfItems( bool aIncludeSubComponents )
int itemCount; int itemCount;
wxString msg; wxString msg;
if( ( f = wxFopen( m_ListFileName, wxT( "wt" ) ) ) == NULL ) if( ( f = wxFopen( m_listFileName, wxT( "wt" ) ) ) == NULL )
{ {
msg = _( "Failed to open file " ); msg = _( "Failed to open file " );
msg << m_ListFileName; msg << m_listFileName;
DisplayError( this, msg ); DisplayError( this, msg );
return; return;
} }
...@@ -561,39 +544,14 @@ void DIALOG_BUILD_BOM::GenereListeOfItems( bool aIncludeSubComponents ) ...@@ -561,39 +544,14 @@ void DIALOG_BUILD_BOM::GenereListeOfItems( bool aIncludeSubComponents )
} }
} }
/*************************************************/ // Create list of global labels, hierrachical labels and pins sheets
/* Create list of global labels and pins sheets */ BOM_LISTER bom_lister;
/*************************************************/
std::vector <BOM_LABEL> listOfLabels;
GenListeGLabels( listOfLabels );
if( ( itemCount = listOfLabels.size() ) > 0 )
{
if( m_GenListLabelsbySheet->GetValue() )
{
sort( listOfLabels.begin(), listOfLabels.end(), SortLabelsBySheet );
msg.Printf( _( "\n#Global, Hierarchical Labels and PinSheets \
( order = Sheet Number ) count = %d\n" ),
itemCount );
fprintf( f, "%s", TO_UTF8( msg ) );
PrintListeGLabel( f, listOfLabels );
}
if( m_GenListLabelsbyVal->GetValue() )
{
sort( listOfLabels.begin(), listOfLabels.end(), SortLabelsByValue );
msg.Printf( _( "\n#Global, Hierarchical Labels and PinSheets ( \ if( m_GenListLabelsbySheet->GetValue() )
order = Alphab. ) count = %d\n\n" ), bom_lister.PrintGlobalAndHierarchicalLabelsList( f, true );
itemCount );
fprintf( f, "%s", TO_UTF8( msg ) ); if( m_GenListLabelsbyVal->GetValue() )
PrintListeGLabel( f, listOfLabels ); bom_lister.PrintGlobalAndHierarchicalLabelsList( f, false );
}
}
msg = _( "\n#End List\n" ); msg = _( "\n#End List\n" );
fprintf( f, "%s", TO_UTF8( msg ) ); fprintf( f, "%s", TO_UTF8( msg ) );
...@@ -763,11 +721,11 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef( FILE* f, ...@@ -763,11 +721,11 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef( FILE* f,
{ {
#if defined(KICAD_GOST) #if defined(KICAD_GOST)
strCur.Printf( wxT( "%c%s" ), s_ExportSeparatorSymbol, GetChars( msg ) ); strCur.Printf( wxT( "%c%s" ), s_ExportSeparatorSymbol, GetChars( msg ) );
msg = m_Parent->GetXYSheetReferences( comp->GetPosition() ); msg = m_parent->GetXYSheetReferences( comp->GetPosition() );
strCur.Printf( wxT( "%c%s)" ), s_ExportSeparatorSymbol, GetChars( msg ) ); strCur.Printf( wxT( "%c%s)" ), s_ExportSeparatorSymbol, GetChars( msg ) );
#else #else
fprintf( f, "%c%s", s_ExportSeparatorSymbol, TO_UTF8( msg ) ); fprintf( f, "%c%s", s_ExportSeparatorSymbol, TO_UTF8( msg ) );
msg = m_Parent->GetXYSheetReferences( comp->GetPosition() ); msg = m_parent->GetXYSheetReferences( comp->GetPosition() );
fprintf( f, "%c%s)", s_ExportSeparatorSymbol, fprintf( f, "%c%s)", s_ExportSeparatorSymbol,
TO_UTF8( msg ) ); TO_UTF8( msg ) );
#endif #endif
...@@ -775,7 +733,7 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef( FILE* f, ...@@ -775,7 +733,7 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef( FILE* f,
else else
{ {
fprintf( f, " (Sheet %s)", TO_UTF8( msg ) ); fprintf( f, " (Sheet %s)", TO_UTF8( msg ) );
msg = m_Parent->GetXYSheetReferences( comp->GetPosition() ); msg = m_parent->GetXYSheetReferences( comp->GetPosition() );
fprintf( f, " (loc %s)", TO_UTF8( msg ) ); fprintf( f, " (loc %s)", TO_UTF8( msg ) );
} }
} }
...@@ -865,49 +823,6 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef( FILE* f, ...@@ -865,49 +823,6 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef( FILE* f,
} }
int DIALOG_BUILD_BOM::PrintComponentsListByPart( FILE* aFile, SCH_REFERENCE_LIST& aList,
bool aIncludeSubComponents )
{
unsigned int index = 0;
while( index < aList.GetCount() )
{
SCH_COMPONENT *component = aList[index].GetComponent();
wxString referenceListStr;
int qty = 1;
referenceListStr.append( aList[index].GetRef() );
for( unsigned int i = index+1; i < aList.GetCount(); )
{
if( *(aList[i].GetComponent()) == *component )
{
referenceListStr.append( wxT( " " ) + aList[i].GetRef() );
aList.RemoveItem( i );
qty++;
}
else
i++; // Increment index only when current item is not removed from the list
}
// Write value, quantity and list of references
fprintf( aFile, "%15s%c%3d%c\"%s\"", TO_UTF8( component->GetField( VALUE )->GetText() ),
s_ExportSeparatorSymbol, qty,
s_ExportSeparatorSymbol, TO_UTF8( referenceListStr ) );
// Write the rest of the fields if required
#if defined( KICAD_GOST )
fprintf( aFile, "%c%20s", s_ExportSeparatorSymbol,
TO_UTF8( component->GetField( DATASHEET )->GetText() ) );
#endif
for( int i = FOOTPRINT; i < component->GetFieldCount(); i++ )
if( IsFieldChecked( i ) )
fprintf( aFile, "%c%15s", s_ExportSeparatorSymbol,
TO_UTF8( component->GetField( i )->GetText() ) );
fprintf( aFile, "\n" );
index++;
}
return 0;
}
int DIALOG_BUILD_BOM::PrintComponentsListByVal( FILE* f, int DIALOG_BUILD_BOM::PrintComponentsListByVal( FILE* f,
SCH_REFERENCE_LIST& aList, SCH_REFERENCE_LIST& aList,
bool aIncludeSubComponents ) bool aIncludeSubComponents )
...@@ -968,7 +883,7 @@ int DIALOG_BUILD_BOM::PrintComponentsListByVal( FILE* f, ...@@ -968,7 +883,7 @@ int DIALOG_BUILD_BOM::PrintComponentsListByVal( FILE* f,
{ {
msg = aList[ii].GetSheetPath().PathHumanReadable(); msg = aList[ii].GetSheetPath().PathHumanReadable();
fprintf( f, " (Sheet %s)", TO_UTF8( msg ) ); fprintf( f, " (Sheet %s)", TO_UTF8( msg ) );
msg = m_Parent->GetXYSheetReferences( DrawLibItem->GetPosition() ); msg = m_parent->GetXYSheetReferences( DrawLibItem->GetPosition() );
fprintf( f, " (loc %s)", TO_UTF8( msg ) ); fprintf( f, " (loc %s)", TO_UTF8( msg ) );
} }
} }
......
///////////////////////////////////////////////////////////////////////////// /**
// Name: dialog_build_BOM.h * @file dialog_build_BOM.h
// Copyright: GNU license */
// Licence:
///////////////////////////////////////////////////////////////////////////// /* 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
*/
#ifndef _DIALOG_BUILD_BOM_H_ #ifndef _DIALOG_BUILD_BOM_H_
#define _DIALOG_BUILD_BOM_H_ #define _DIALOG_BUILD_BOM_H_
...@@ -14,13 +35,12 @@ class EDA_DRAW_FRAME; ...@@ -14,13 +35,12 @@ class EDA_DRAW_FRAME;
class SCH_COMPONENT; class SCH_COMPONENT;
class wxConfig; class wxConfig;
class DIALOG_BUILD_BOM : public DIALOG_BUILD_BOM_BASE class DIALOG_BUILD_BOM : public DIALOG_BUILD_BOM_BASE
{ {
private: private:
EDA_DRAW_FRAME* m_Parent; EDA_DRAW_FRAME* m_parent;
wxConfig* m_Config; wxConfig* m_config;
wxString m_ListFileName; // The full filename of the file report. wxString m_listFileName; // The full filename of the file report.
private: private:
void OnRadioboxSelectFormatSelected( wxCommandEvent& event ); void OnRadioboxSelectFormatSelected( wxCommandEvent& event );
...@@ -62,9 +82,6 @@ private: ...@@ -62,9 +82,6 @@ private:
int PrintComponentsListByVal( FILE* f, SCH_REFERENCE_LIST& aList, int PrintComponentsListByVal( FILE* f, SCH_REFERENCE_LIST& aList,
bool aIncludeSubComponents ); bool aIncludeSubComponents );
int PrintComponentsListByPart( FILE* f, SCH_REFERENCE_LIST& aList,
bool aIncludeSubComponents );
wxString PrintFieldData( SCH_COMPONENT* DrawLibItem, bool CompactForm = false ); wxString PrintFieldData( SCH_COMPONENT* DrawLibItem, bool CompactForm = false );
bool IsFieldChecked( int aFieldId ); bool IsFieldChecked( int aFieldId );
......
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 21 2008) // C++ code generated with wxFormBuilder (version Apr 10 2012)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
#include "dialog_build_BOM_base.h" #include "dialog_build_BOM_base.h"
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
DIALOG_BUILD_BOM_BASE::DIALOG_BUILD_BOM_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) DIALOG_BUILD_BOM_BASE::DIALOG_BUILD_BOM_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
{ {
this->SetSizeHints( wxDefaultSize, wxDefaultSize ); this->SetSizeHints( wxDefaultSize, wxDefaultSize );
wxBoxSizer* bMainSizer; wxBoxSizer* bMainSizer;
bMainSizer = new wxBoxSizer( wxHORIZONTAL ); bMainSizer = new wxBoxSizer( wxHORIZONTAL );
wxStaticBoxSizer* sbOptionsSizer; wxStaticBoxSizer* sbOptionsSizer;
sbOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options:") ), wxVERTICAL ); sbOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options:") ), wxVERTICAL );
wxStaticBoxSizer* sbListOptionsSizer; wxStaticBoxSizer* sbListOptionsSizer;
sbListOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("List items:") ), wxVERTICAL ); sbListOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("List items:") ), wxVERTICAL );
m_ListCmpbyRefItems = new wxCheckBox( this, wxID_ANY, _("Components by reference"), wxDefaultPosition, wxDefaultSize, 0 ); m_ListCmpbyRefItems = new wxCheckBox( this, wxID_ANY, _("Components by reference"), wxDefaultPosition, wxDefaultSize, 0 );
sbListOptionsSizer->Add( m_ListCmpbyRefItems, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
sbListOptionsSizer->Add( m_ListCmpbyRefItems, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_ListSubCmpItems = new wxCheckBox( this, wxID_ANY, _("Sub components (i.e. U2A, U2B ...)"), wxDefaultPosition, wxDefaultSize, 0 );
m_ListSubCmpItems = new wxCheckBox( this, wxID_ANY, _("Sub components (i.e. U2A, U2B ...)"), wxDefaultPosition, wxDefaultSize, 0 ); sbListOptionsSizer->Add( m_ListSubCmpItems, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
sbListOptionsSizer->Add( m_ListSubCmpItems, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); m_ListCmpbyValItems = new wxCheckBox( this, wxID_ANY, _("Components by value"), wxDefaultPosition, wxDefaultSize, 0 );
sbListOptionsSizer->Add( m_ListCmpbyValItems, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_ListCmpbyValItems = new wxCheckBox( this, wxID_ANY, _("Components by value"), wxDefaultPosition, wxDefaultSize, 0 );
m_GenListLabelsbyVal = new wxCheckBox( this, wxID_ANY, _("Hierarchy pins by name"), wxDefaultPosition, wxDefaultSize, 0 );
sbListOptionsSizer->Add( m_ListCmpbyValItems, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); sbListOptionsSizer->Add( m_GenListLabelsbyVal, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_GenListLabelsbyVal = new wxCheckBox( this, wxID_ANY, _("Hierarchy pins by name"), wxDefaultPosition, wxDefaultSize, 0 ); m_GenListLabelsbySheet = new wxCheckBox( this, wxID_ANY, _("Hierarchy pins by sheets"), wxDefaultPosition, wxDefaultSize, 0 );
sbListOptionsSizer->Add( m_GenListLabelsbySheet, 0, wxALL, 5 );
sbListOptionsSizer->Add( m_GenListLabelsbyVal, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_GenListLabelsbySheet = new wxCheckBox( this, wxID_ANY, _("Hierarchy pins by sheets"), wxDefaultPosition, wxDefaultSize, 0 ); sbOptionsSizer->Add( sbListOptionsSizer, 0, wxEXPAND, 5 );
sbListOptionsSizer->Add( m_GenListLabelsbySheet, 0, wxALL, 5 ); wxString m_OutputFormCtrlChoices[] = { _("List"), _("Text for spreadsheet import"), _("Single Part per line") };
int m_OutputFormCtrlNChoices = sizeof( m_OutputFormCtrlChoices ) / sizeof( wxString );
sbOptionsSizer->Add( sbListOptionsSizer, 0, wxEXPAND, 5 ); m_OutputFormCtrl = new wxRadioBox( this, ID_RADIOBOX_SELECT_FORMAT, _("Output format:"), wxDefaultPosition, wxDefaultSize, m_OutputFormCtrlNChoices, m_OutputFormCtrlChoices, 1, wxRA_SPECIFY_COLS );
m_OutputFormCtrl->SetSelection( 2 );
wxString m_OutputFormCtrlChoices[] = { _("List"), _("Text for spreadsheet import"), _("Single Part per line") }; sbOptionsSizer->Add( m_OutputFormCtrl, 0, wxEXPAND|wxTOP, 5 );
int m_OutputFormCtrlNChoices = sizeof( m_OutputFormCtrlChoices ) / sizeof( wxString );
m_OutputFormCtrl = new wxRadioBox( this, ID_RADIOBOX_SELECT_FORMAT, _("Output format:"), wxDefaultPosition, wxDefaultSize, m_OutputFormCtrlNChoices, m_OutputFormCtrlChoices, 1, wxRA_SPECIFY_COLS ); wxString m_OutputSeparatorCtrlChoices[] = { _("Tab"), _(";"), _(",") };
m_OutputFormCtrl->SetSelection( 2 ); int m_OutputSeparatorCtrlNChoices = sizeof( m_OutputSeparatorCtrlChoices ) / sizeof( wxString );
sbOptionsSizer->Add( m_OutputFormCtrl, 0, wxEXPAND|wxTOP, 5 ); m_OutputSeparatorCtrl = new wxRadioBox( this, wxID_ANY, _("Field separator for spreadsheet import:"), wxDefaultPosition, wxDefaultSize, m_OutputSeparatorCtrlNChoices, m_OutputSeparatorCtrlChoices, 1, wxRA_SPECIFY_ROWS );
m_OutputSeparatorCtrl->SetSelection( 0 );
wxString m_OutputSeparatorCtrlChoices[] = { _("Tab"), _(";"), _(",") }; sbOptionsSizer->Add( m_OutputSeparatorCtrl, 0, wxEXPAND|wxTOP, 5 );
int m_OutputSeparatorCtrlNChoices = sizeof( m_OutputSeparatorCtrlChoices ) / sizeof( wxString );
m_OutputSeparatorCtrl = new wxRadioBox( this, wxID_ANY, _("Field separator for spreadsheet import:"), wxDefaultPosition, wxDefaultSize, m_OutputSeparatorCtrlNChoices, m_OutputSeparatorCtrlChoices, 1, wxRA_SPECIFY_ROWS ); wxStaticBoxSizer* sbBrowseOptSizer;
m_OutputSeparatorCtrl->SetSelection( 0 ); sbBrowseOptSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options:") ), wxVERTICAL );
sbOptionsSizer->Add( m_OutputSeparatorCtrl, 0, wxEXPAND|wxTOP, 5 );
m_GetListBrowser = new wxCheckBox( this, wxID_ANY, _("Launch list browser"), wxDefaultPosition, wxDefaultSize, 0 );
wxStaticBoxSizer* sbBrowseOptSizer; sbBrowseOptSizer->Add( m_GetListBrowser, 0, wxALL|wxEXPAND, 5 );
sbBrowseOptSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options:") ), wxVERTICAL );
m_GetListBrowser = new wxCheckBox( this, wxID_ANY, _("Launch list browser"), wxDefaultPosition, wxDefaultSize, 0 ); sbOptionsSizer->Add( sbBrowseOptSizer, 0, wxEXPAND|wxTOP, 5 );
sbBrowseOptSizer->Add( m_GetListBrowser, 0, wxALL|wxEXPAND, 5 );
bMainSizer->Add( sbOptionsSizer, 10, wxALL|wxEXPAND, 5 );
sbOptionsSizer->Add( sbBrowseOptSizer, 0, wxEXPAND|wxTOP, 5 );
wxBoxSizer* bRightSizer;
bMainSizer->Add( sbOptionsSizer, 10, wxALL|wxEXPAND, 5 ); bRightSizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bRightSizer; wxStaticBoxSizer* sbFieldsSelectionSizer;
bRightSizer = new wxBoxSizer( wxVERTICAL ); sbFieldsSelectionSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Fields to add:") ), wxVERTICAL );
wxStaticBoxSizer* sbFieldsSelectionSizer; wxStaticBoxSizer* sbFixedFieldsSizer;
sbFieldsSelectionSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Fields to add:") ), wxVERTICAL ); sbFixedFieldsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("System Fields:") ), wxVERTICAL );
wxStaticBoxSizer* sbFixedFieldsSizer; m_AddFootprintField = new wxCheckBox( this, wxID_ANY, _("Footprint"), wxDefaultPosition, wxDefaultSize, 0 );
sbFixedFieldsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("System Fields:") ), wxVERTICAL ); sbFixedFieldsSizer->Add( m_AddFootprintField, 0, wxALL|wxEXPAND, 5 );
m_AddFootprintField = new wxCheckBox( this, wxID_ANY, _("Footprint"), wxDefaultPosition, wxDefaultSize, 0 );
sbFieldsSelectionSizer->Add( sbFixedFieldsSizer, 0, wxEXPAND, 5 );
sbFixedFieldsSizer->Add( m_AddFootprintField, 0, wxALL|wxEXPAND, 5 );
wxStaticBoxSizer* sbUsersFiledsSizer;
sbFieldsSelectionSizer->Add( sbFixedFieldsSizer, 0, wxEXPAND, 5 ); sbUsersFiledsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Users Fields:") ), wxVERTICAL );
wxStaticBoxSizer* sbUsersFiledsSizer; m_AddField1 = new wxCheckBox( this, wxID_ANY, _("Field 1"), wxDefaultPosition, wxDefaultSize, 0 );
sbUsersFiledsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Users Fields:") ), wxVERTICAL ); sbUsersFiledsSizer->Add( m_AddField1, 0, wxEXPAND|wxALL, 5 );
m_AddField1 = new wxCheckBox( this, wxID_ANY, _("Field 1"), wxDefaultPosition, wxDefaultSize, 0 ); m_AddField2 = new wxCheckBox( this, wxID_ANY, _("Field 2"), wxDefaultPosition, wxDefaultSize, 0 );
sbUsersFiledsSizer->Add( m_AddField2, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
sbUsersFiledsSizer->Add( m_AddField1, 0, wxEXPAND|wxALL, 5 );
m_AddField3 = new wxCheckBox( this, wxID_ANY, _("Field 3"), wxDefaultPosition, wxDefaultSize, 0 );
m_AddField2 = new wxCheckBox( this, wxID_ANY, _("Field 2"), wxDefaultPosition, wxDefaultSize, 0 ); sbUsersFiledsSizer->Add( m_AddField3, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
sbUsersFiledsSizer->Add( m_AddField2, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_AddField4 = new wxCheckBox( this, wxID_ANY, _("Field 4"), wxDefaultPosition, wxDefaultSize, 0 );
sbUsersFiledsSizer->Add( m_AddField4, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_AddField3 = new wxCheckBox( this, wxID_ANY, _("Field 3"), wxDefaultPosition, wxDefaultSize, 0 );
m_AddField5 = new wxCheckBox( this, wxID_ANY, _("Field 5"), wxDefaultPosition, wxDefaultSize, 0 );
sbUsersFiledsSizer->Add( m_AddField3, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); sbUsersFiledsSizer->Add( m_AddField5, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_AddField4 = new wxCheckBox( this, wxID_ANY, _("Field 4"), wxDefaultPosition, wxDefaultSize, 0 ); m_AddField6 = new wxCheckBox( this, wxID_ANY, _("Field 6"), wxDefaultPosition, wxDefaultSize, 0 );
sbUsersFiledsSizer->Add( m_AddField6, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
sbUsersFiledsSizer->Add( m_AddField4, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_AddField7 = new wxCheckBox( this, wxID_ANY, _("Field 7"), wxDefaultPosition, wxDefaultSize, 0 );
m_AddField5 = new wxCheckBox( this, wxID_ANY, _("Field 5"), wxDefaultPosition, wxDefaultSize, 0 ); sbUsersFiledsSizer->Add( m_AddField7, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
sbUsersFiledsSizer->Add( m_AddField5, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_AddField8 = new wxCheckBox( this, wxID_ANY, _("Field 8"), wxDefaultPosition, wxDefaultSize, 0 );
sbUsersFiledsSizer->Add( m_AddField8, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_AddField6 = new wxCheckBox( this, wxID_ANY, _("Field 6"), wxDefaultPosition, wxDefaultSize, 0 );
m_AddAllFields = new wxCheckBox( this, wxID_ANY, _("All existing users fields"), wxDefaultPosition, wxDefaultSize, 0 );
sbUsersFiledsSizer->Add( m_AddField6, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); sbUsersFiledsSizer->Add( m_AddAllFields, 0, wxALL, 5 );
m_AddField7 = new wxCheckBox( this, wxID_ANY, _("Field 7"), wxDefaultPosition, wxDefaultSize, 0 );
sbFieldsSelectionSizer->Add( sbUsersFiledsSizer, 0, wxEXPAND|wxTOP, 5 );
sbUsersFiledsSizer->Add( m_AddField7, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_AddField8 = new wxCheckBox( this, wxID_ANY, _("Field 8"), wxDefaultPosition, wxDefaultSize, 0 ); bRightSizer->Add( sbFieldsSelectionSizer, 1, wxEXPAND, 5 );
sbUsersFiledsSizer->Add( m_AddField8, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
bRightSizer->Add( 10, 10, 0, 0, 5 );
m_AddAllFields = new wxCheckBox( this, wxID_ANY, _("All existing users fields"), wxDefaultPosition, wxDefaultSize, 0 );
m_buttonOK = new wxButton( this, wxID_OK, _("Ok"), wxDefaultPosition, wxDefaultSize, 0 );
sbUsersFiledsSizer->Add( m_AddAllFields, 0, wxALL, 5 ); m_buttonOK->SetDefault();
bRightSizer->Add( m_buttonOK, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
sbFieldsSelectionSizer->Add( sbUsersFiledsSizer, 0, wxEXPAND|wxTOP, 5 );
m_buttonCANCEL = new wxButton( this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
bRightSizer->Add( sbFieldsSelectionSizer, 1, wxEXPAND, 5 ); bRightSizer->Add( m_buttonCANCEL, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
bRightSizer->Add( 10, 10, 0, 0, 5 ); bMainSizer->Add( bRightSizer, 8, wxALL|wxEXPAND, 5 );
m_buttonOK = new wxButton( this, wxID_OK, _("Ok"), wxDefaultPosition, wxDefaultSize, 0 );
m_buttonOK->SetDefault(); this->SetSizer( bMainSizer );
bRightSizer->Add( m_buttonOK, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); this->Layout();
m_buttonCANCEL = new wxButton( this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 ); // Connect Events
bRightSizer->Add( m_buttonCANCEL, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_OutputFormCtrl->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnRadioboxSelectFormatSelected ), NULL, this );
m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnOkClick ), NULL, this );
bMainSizer->Add( bRightSizer, 8, wxALL|wxEXPAND, 5 ); m_buttonCANCEL->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnCancelClick ), NULL, this );
}
this->SetSizer( bMainSizer );
this->Layout(); DIALOG_BUILD_BOM_BASE::~DIALOG_BUILD_BOM_BASE()
{
// Connect Events // Disconnect Events
m_OutputFormCtrl->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnRadioboxSelectFormatSelected ), NULL, this ); m_OutputFormCtrl->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnRadioboxSelectFormatSelected ), NULL, this );
m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnOkClick ), NULL, this ); m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnOkClick ), NULL, this );
m_buttonCANCEL->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnCancelClick ), NULL, this ); m_buttonCANCEL->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnCancelClick ), NULL, this );
}
}
DIALOG_BUILD_BOM_BASE::~DIALOG_BUILD_BOM_BASE()
{
// Disconnect Events
m_OutputFormCtrl->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnRadioboxSelectFormatSelected ), NULL, this );
m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnOkClick ), NULL, this );
m_buttonCANCEL->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_BUILD_BOM_BASE::OnCancelClick ), NULL, this );
}
This source diff could not be displayed because it is too large. You can view the blob instead.
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 21 2008) // C++ code generated with wxFormBuilder (version Apr 10 2012)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
#ifndef __dialog_build_BOM_base__ #ifndef __DIALOG_BUILD_BOM_BASE_H__
#define __dialog_build_BOM_base__ #define __DIALOG_BUILD_BOM_BASE_H__
#include <wx/intl.h> #include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/string.h> #include <wx/intl.h>
#include <wx/checkbox.h> #include "dialog_shim.h"
#include <wx/gdicmn.h> #include <wx/string.h>
#include <wx/font.h> #include <wx/checkbox.h>
#include <wx/colour.h> #include <wx/gdicmn.h>
#include <wx/settings.h> #include <wx/font.h>
#include <wx/sizer.h> #include <wx/colour.h>
#include <wx/statbox.h> #include <wx/settings.h>
#include <wx/radiobox.h> #include <wx/sizer.h>
#include <wx/button.h> #include <wx/statbox.h>
#include <wx/dialog.h> #include <wx/radiobox.h>
#include <wx/button.h>
/////////////////////////////////////////////////////////////////////////// #include <wx/dialog.h>
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
/// Class DIALOG_BUILD_BOM_BASE
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
class DIALOG_BUILD_BOM_BASE : public wxDialog /// Class DIALOG_BUILD_BOM_BASE
{ ///////////////////////////////////////////////////////////////////////////////
private: class DIALOG_BUILD_BOM_BASE : public DIALOG_SHIM
{
protected: private:
enum
{ protected:
ID_RADIOBOX_SELECT_FORMAT = 1000, enum
}; {
ID_RADIOBOX_SELECT_FORMAT = 1000
wxCheckBox* m_ListCmpbyRefItems; };
wxCheckBox* m_ListSubCmpItems;
wxCheckBox* m_ListCmpbyValItems; wxCheckBox* m_ListCmpbyRefItems;
wxCheckBox* m_GenListLabelsbyVal; wxCheckBox* m_ListSubCmpItems;
wxCheckBox* m_GenListLabelsbySheet; wxCheckBox* m_ListCmpbyValItems;
wxRadioBox* m_OutputFormCtrl; wxCheckBox* m_GenListLabelsbyVal;
wxRadioBox* m_OutputSeparatorCtrl; wxCheckBox* m_GenListLabelsbySheet;
wxCheckBox* m_GetListBrowser; wxRadioBox* m_OutputFormCtrl;
wxCheckBox* m_AddFootprintField; wxRadioBox* m_OutputSeparatorCtrl;
wxCheckBox* m_AddField1; wxCheckBox* m_GetListBrowser;
wxCheckBox* m_AddField2; wxCheckBox* m_AddFootprintField;
wxCheckBox* m_AddField3; wxCheckBox* m_AddField1;
wxCheckBox* m_AddField4; wxCheckBox* m_AddField2;
wxCheckBox* m_AddField5; wxCheckBox* m_AddField3;
wxCheckBox* m_AddField6; wxCheckBox* m_AddField4;
wxCheckBox* m_AddField7; wxCheckBox* m_AddField5;
wxCheckBox* m_AddField8; wxCheckBox* m_AddField6;
wxCheckBox* m_AddAllFields; wxCheckBox* m_AddField7;
wxCheckBox* m_AddField8;
wxButton* m_buttonOK; wxCheckBox* m_AddAllFields;
wxButton* m_buttonCANCEL; wxButton* m_buttonOK;
wxButton* m_buttonCANCEL;
// Virtual event handlers, overide them in your derived class
virtual void OnRadioboxSelectFormatSelected( wxCommandEvent& event ){ event.Skip(); } // Virtual event handlers, overide them in your derived class
virtual void OnOkClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnRadioboxSelectFormatSelected( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
public:
DIALOG_BUILD_BOM_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("List of Material"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 415,382 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); public:
~DIALOG_BUILD_BOM_BASE();
DIALOG_BUILD_BOM_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("List of Material"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 415,382 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
}; ~DIALOG_BUILD_BOM_BASE();
#endif //__dialog_build_BOM_base__ };
#endif //__DIALOG_BUILD_BOM_BASE_H__
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment