Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
e2abaa81
Commit
e2abaa81
authored
Feb 29, 2008
by
CHARRAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Display filename and full sheet name ("sheet path") in sheet references
parent
4d9ea908
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
1042 additions
and
933 deletions
+1042
-933
common_plot_functions.cpp
common/common_plot_functions.cpp
+13
-1
dialog_build_BOM.cpp
eeschema/dialog_build_BOM.cpp
+1028
-931
netlist.h
eeschema/netlist.h
+1
-1
No files found.
common/common_plot_functions.cpp
View file @
e2abaa81
...
...
@@ -229,7 +229,7 @@ int UpperLimit = VARIABLE_BLOCK_START_POSITION;
msg
+=
screen
->
m_Revision
;
break
;
case
WS_
LICENCE
:
case
WS_
KICAD_VERSION
:
msg
+=
g_ProductName
;
break
;
...
...
@@ -241,6 +241,18 @@ int UpperLimit = VARIABLE_BLOCK_START_POSITION;
msg
<<
screen
->
m_ScreenNumber
<<
wxT
(
"/"
)
<<
screen
->
m_NumberOfScreen
;
break
;
case
WS_FILENAME
:
{
wxString
fname
,
fext
;
wxFileName
::
SplitPath
(
screen
->
m_FileName
,
(
wxString
*
)
NULL
,
&
fname
,
&
fext
);
msg
<<
fname
<<
wxT
(
"."
)
<<
fext
;
}
break
;
case
WS_FULLSHEETNAME
:
// msg += GetScreenDesc();
break
;
case
WS_COMPANY_NAME
:
msg
+=
screen
->
m_Company
;
if
(
!
msg
.
IsEmpty
()
)
...
...
eeschema/dialog_build_BOM.cpp
View file @
e2abaa81
/////////////////////////////////////////////////////////////////////////////
// Name: dialog_build_BOM.cpp
// Purpose:
// Purpose:
// Author: jean-pierre Charras
// Modified by:
// Modified by:
// Created: 01/15/06 18:18:44
// RCS-ID:
// RCS-ID:
// Copyright: GNU license
// Licence:
// Licence:
/////////////////////////////////////////////////////////////////////////////
// Generated by DialogBlocks (unregistered), 01/15/06 18:18:44
#if defined
(__GNUG__) && !defined
(__APPLE__)
#if defined
(__GNUG__) && !defined
(__APPLE__)
#pragma implementation "dialog_build_BOM.h"
#endif
...
...
@@ -47,59 +48,60 @@
/* fonctions locales */
static
int
GenListeGLabels
(
ListLabel
*
List
);
int
GenListeCmp
(
ListComponent
*
List
);
static
int
ListTriComposantByRef
(
ListComponent
*
Objet1
,
ListComponent
*
Objet2
);
static
int
ListTriComposantByVal
(
ListComponent
*
Objet1
,
ListComponent
*
Objet2
);
static
int
ListTriGLabelBySheet
(
ListLabel
*
Objet1
,
ListLabel
*
Objet2
);
static
int
ListTriGLabelByVal
(
ListLabel
*
Objet1
,
ListLabel
*
Objet2
);
static
void
DeleteSubCmp
(
ListComponent
*
List
,
int
NbItems
);
static
int
PrintListeGLabel
(
FILE
*
f
,
ListLabel
*
List
,
int
NbItems
);
static
int
GenListeGLabels
(
ListLabel
*
List
);
int
GenListeCmp
(
ListComponent
*
List
);
static
int
ListTriComposantByRef
(
ListComponent
*
Objet1
,
ListComponent
*
Objet2
);
static
int
ListTriComposantByVal
(
ListComponent
*
Objet1
,
ListComponent
*
Objet2
);
static
int
ListTriGLabelBySheet
(
ListLabel
*
Objet1
,
ListLabel
*
Objet2
);
static
int
ListTriGLabelByVal
(
ListLabel
*
Objet1
,
ListLabel
*
Objet2
);
static
void
DeleteSubCmp
(
ListComponent
*
List
,
int
NbItems
);
static
int
PrintListeGLabel
(
FILE
*
f
,
ListLabel
*
List
,
int
NbItems
);
/* Local variables */
static
bool
s_ListByRef
=
TRUE
;
static
bool
s_ListByValue
=
TRUE
;
static
bool
s_ListWithSubCmponents
;
static
bool
s_ListHierarchicalPinByName
;
static
bool
s_ListBySheet
;
static
bool
s_BrowsList
;
static
int
s_OutputFormOpt
;
static
int
s_OutputSeparatorOpt
;
static
bool
s_Add_FpField_state
;
static
bool
s_Add_F1_state
;
static
bool
s_Add_F2_state
;
static
bool
s_Add_F3_state
;
static
bool
s_Add_F4_state
;
static
bool
s_Add_F5_state
;
static
bool
s_Add_F6_state
;
static
bool
s_Add_F7_state
;
static
bool
s_Add_F8_state
;
static
bool
*
s_AddFieldList
[]
=
{
&
s_Add_FpField_state
,
&
s_Add_F1_state
,
&
s_Add_F2_state
,
&
s_Add_F3_state
,
&
s_Add_F4_state
,
&
s_Add_F5_state
,
&
s_Add_F6_state
,
&
s_Add_F7_state
,
&
s_Add_F8_state
,
NULL
static
bool
s_ListByRef
=
TRUE
;
static
bool
s_ListByValue
=
TRUE
;
static
bool
s_ListWithSubCmponents
;
static
bool
s_ListHierarchicalPinByName
;
static
bool
s_ListBySheet
;
static
bool
s_BrowsList
;
static
int
s_OutputFormOpt
;
static
int
s_OutputSeparatorOpt
;
static
bool
s_Add_FpField_state
;
static
bool
s_Add_F1_state
;
static
bool
s_Add_F2_state
;
static
bool
s_Add_F3_state
;
static
bool
s_Add_F4_state
;
static
bool
s_Add_F5_state
;
static
bool
s_Add_F6_state
;
static
bool
s_Add_F7_state
;
static
bool
s_Add_F8_state
;
static
bool
*
s_AddFieldList
[]
=
{
&
s_Add_FpField_state
,
&
s_Add_F1_state
,
&
s_Add_F2_state
,
&
s_Add_F3_state
,
&
s_Add_F4_state
,
&
s_Add_F5_state
,
&
s_Add_F6_state
,
&
s_Add_F7_state
,
&
s_Add_F8_state
,
NULL
};
#define OPTION_BOM_FORMAT
wxT("BomFormat"
)
#define OPTION_BOM_SEPARATOR wxT(
"BomExportSeparator"
)
#define OPTION_BOM_ADD_FIELD wxT(
"BomAddField"
)
#define OPTION_BOM_FORMAT
wxT( "BomFormat"
)
#define OPTION_BOM_SEPARATOR wxT(
"BomExportSeparator"
)
#define OPTION_BOM_ADD_FIELD wxT(
"BomAddField"
)
/* list of separators used in bom export to spreadsheet
* (selected by s_OutputSeparatorOpt, and s_OutputSeparatorOpt radiobox)
*/
static
char
s_ExportSeparator
[]
=
(
"
\t
;,."
);
static
char
s_ExportSeparatorSymbol
;
/*!
* WinEDA_Build_BOM_Frame type definition
*/
...
...
@@ -113,15 +115,15 @@ IMPLEMENT_DYNAMIC_CLASS( WinEDA_Build_BOM_Frame, wxDialog )
BEGIN_EVENT_TABLE
(
WinEDA_Build_BOM_Frame
,
wxDialog
)
////@begin WinEDA_Build_BOM_Frame event table entries
EVT_RADIOBOX
(
ID_RADIOBOX_SELECT_FORMAT
,
WinEDA_Build_BOM_Frame
::
OnRadioboxSelectFormatSelected
)
EVT_RADIOBOX
(
ID_RADIOBOX_SELECT_FORMAT
,
WinEDA_Build_BOM_Frame
::
OnRadioboxSelectFormatSelected
)
EVT_BUTTON
(
ID_CREATE_LIST
,
WinEDA_Build_BOM_Frame
::
OnCreateListClick
)
EVT_BUTTON
(
ID_CREATE_LIST
,
WinEDA_Build_BOM_Frame
::
OnCreateListClick
)
EVT_BUTTON
(
wxID_OK
,
WinEDA_Build_BOM_Frame
::
OnOkClick
)
EVT_BUTTON
(
wxID_OK
,
WinEDA_Build_BOM_Frame
::
OnOkClick
)
EVT_BUTTON
(
wxID_CANCEL
,
WinEDA_Build_BOM_Frame
::
OnCancelClick
)
EVT_BUTTON
(
wxID_CANCEL
,
WinEDA_Build_BOM_Frame
::
OnCancelClick
)
EVT_BUTTON
(
wxID_APPLY
,
WinEDA_Build_BOM_Frame
::
OnApplyClick
)
EVT_BUTTON
(
wxID_APPLY
,
WinEDA_Build_BOM_Frame
::
OnApplyClick
)
////@end WinEDA_Build_BOM_Frame event table entries
...
...
@@ -132,51 +134,63 @@ END_EVENT_TABLE()
* WinEDA_Build_BOM_Frame constructors
*/
WinEDA_Build_BOM_Frame
::
WinEDA_Build_BOM_Frame
()
{
}
WinEDA_Build_BOM_Frame
::
WinEDA_Build_BOM_Frame
()
{
}
WinEDA_Build_BOM_Frame
::
WinEDA_Build_BOM_Frame
(
WinEDA_DrawFrame
*
parent
,
wxWindowID
id
,
const
wxString
&
caption
,
const
wxPoint
&
pos
,
const
wxSize
&
size
,
long
style
)
wxWindowID
id
,
const
wxString
&
caption
,
const
wxPoint
&
pos
,
const
wxSize
&
size
,
long
style
)
{
m_Parent
=
parent
;
/* Get options */
s_OutputFormOpt
=
m_Parent
->
m_Parent
->
m_EDA_Config
->
Read
(
OPTION_BOM_FORMAT
,
(
long
)
0
);
s_OutputSeparatorOpt
=
m_Parent
->
m_Parent
->
m_EDA_Config
->
Read
(
OPTION_BOM_SEPARATOR
,
(
long
)
0
);
long
addfields
=
m_Parent
->
m_Parent
->
m_EDA_Config
->
Read
(
OPTION_BOM_ADD_FIELD
,
(
long
)
0
);
for
(
int
ii
=
0
,
bitmask
=
1
;
s_AddFieldList
[
ii
]
!=
NULL
;
ii
++
)
{
if
(
(
addfields
&
bitmask
)
)
*
s_AddFieldList
[
ii
]
=
true
;
else
*
s_AddFieldList
[
ii
]
=
false
;
bitmask
<<=
1
;
}
Create
(
parent
,
id
,
caption
,
pos
,
size
,
style
);
m_OutputFormCtrl
->
SetSelection
(
s_OutputFormOpt
);
m_OutputSeparatorCtrl
->
SetSelection
(
s_OutputSeparatorOpt
);
if
(
s_OutputFormOpt
==
1
)
m_OutputSeparatorCtrl
->
Enable
(
true
);
else
m_OutputSeparatorCtrl
->
Enable
(
false
);
m_Parent
=
parent
;
/* Get options */
s_OutputFormOpt
=
m_Parent
->
m_Parent
->
m_EDA_Config
->
Read
(
OPTION_BOM_FORMAT
,
(
long
)
0
);
s_OutputSeparatorOpt
=
m_Parent
->
m_Parent
->
m_EDA_Config
->
Read
(
OPTION_BOM_SEPARATOR
,
(
long
)
0
);
long
addfields
=
m_Parent
->
m_Parent
->
m_EDA_Config
->
Read
(
OPTION_BOM_ADD_FIELD
,
(
long
)
0
);
for
(
int
ii
=
0
,
bitmask
=
1
;
s_AddFieldList
[
ii
]
!=
NULL
;
ii
++
)
{
if
(
(
addfields
&
bitmask
)
)
*
s_AddFieldList
[
ii
]
=
true
;
else
*
s_AddFieldList
[
ii
]
=
false
;
bitmask
<<=
1
;
}
Create
(
parent
,
id
,
caption
,
pos
,
size
,
style
);
m_OutputFormCtrl
->
SetSelection
(
s_OutputFormOpt
);
m_OutputSeparatorCtrl
->
SetSelection
(
s_OutputSeparatorOpt
);
if
(
s_OutputFormOpt
==
1
)
m_OutputSeparatorCtrl
->
Enable
(
true
);
else
m_OutputSeparatorCtrl
->
Enable
(
false
);
}
/*!
* WinEDA_Build_BOM_Frame creator
*/
bool
WinEDA_Build_BOM_Frame
::
Create
(
wxWindow
*
parent
,
wxWindowID
id
,
const
wxString
&
caption
,
const
wxPoint
&
pos
,
const
wxSize
&
size
,
long
style
)
bool
WinEDA_Build_BOM_Frame
::
Create
(
wxWindow
*
parent
,
wxWindowID
id
,
const
wxString
&
caption
,
const
wxPoint
&
pos
,
const
wxSize
&
size
,
long
style
)
{
////@begin WinEDA_Build_BOM_Frame member initialisation
m_ListCmpbyRefItems
=
NULL
;
m_ListSubCmpItems
=
NULL
;
m_ListCmpbyValItems
=
NULL
;
m_GenListLabelsbyVal
=
NULL
;
m_ListCmpbyRefItems
=
NULL
;
m_ListSubCmpItems
=
NULL
;
m_ListCmpbyValItems
=
NULL
;
m_GenListLabelsbyVal
=
NULL
;
m_GenListLabelsbySheet
=
NULL
;
m_OutputFormCtrl
=
NULL
;
m_OutputFormCtrl
=
NULL
;
m_OutputSeparatorCtrl
=
NULL
;
m_GetListBrowser
=
NULL
;
m_FieldsToAppendListSizer
=
NULL
;
...
...
@@ -189,176 +203,225 @@ bool WinEDA_Build_BOM_Frame::Create( wxWindow* parent, wxWindowID id, const wxSt
m_AddField6
=
NULL
;
m_AddField7
=
NULL
;
m_AddField8
=
NULL
;
////@end WinEDA_Build_BOM_Frame member initialisation
////@begin WinEDA_Build_BOM_Frame creation
SetExtraStyle
(
wxWS_EX_BLOCK_EVENTS
);
SetExtraStyle
(
wxWS_EX_BLOCK_EVENTS
);
wxDialog
::
Create
(
parent
,
id
,
caption
,
pos
,
size
,
style
);
CreateControls
();
if
(
GetSizer
()
)
if
(
GetSizer
()
)
{
GetSizer
()
->
SetSizeHints
(
this
);
GetSizer
()
->
SetSizeHints
(
this
);
}
Centre
();
////@end WinEDA_Build_BOM_Frame creation
return
TRUE
;
}
/*!
* Control creation for WinEDA_Build_BOM_Frame
*/
void
WinEDA_Build_BOM_Frame
::
CreateControls
()
{
SetFont
(
*
g_DialogFont
);
{
SetFont
(
*
g_DialogFont
);
////@begin WinEDA_Build_BOM_Frame content construction
// Generated by DialogBlocks, Вск 04 Ноя 2007 18:43:07 (unregistered)
WinEDA_Build_BOM_Frame
*
itemDialog1
=
this
;
wxBoxSizer
*
itemBoxSizer2
=
new
wxBoxSizer
(
wxVERTICAL
);
itemDialog1
->
SetSizer
(
itemBoxSizer2
);
wxBoxSizer
*
itemBoxSizer3
=
new
wxBoxSizer
(
wxHORIZONTAL
);
itemBoxSizer2
->
Add
(
itemBoxSizer3
,
0
,
wxALIGN_CENTER_HORIZONTAL
|
wxLEFT
|
wxRIGHT
,
5
);
wxBoxSizer
*
itemBoxSizer4
=
new
wxBoxSizer
(
wxVERTICAL
);
itemBoxSizer3
->
Add
(
itemBoxSizer4
,
0
,
wxALIGN_CENTER_VERTICAL
|
wxTOP
|
wxBOTTOM
,
5
);
wxStaticBox
*
itemStaticBoxSizer5Static
=
new
wxStaticBox
(
itemDialog1
,
wxID_ANY
,
_
(
"List items:"
));
wxStaticBoxSizer
*
itemStaticBoxSizer5
=
new
wxStaticBoxSizer
(
itemStaticBoxSizer5Static
,
wxVERTICAL
);
itemBoxSizer4
->
Add
(
itemStaticBoxSizer5
,
0
,
wxGROW
|
wxALL
,
5
);
m_ListCmpbyRefItems
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX1
,
_
(
"Components by Reference"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_ListCmpbyRefItems
->
SetValue
(
true
);
itemStaticBoxSizer5
->
Add
(
m_ListCmpbyRefItems
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
m_ListSubCmpItems
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX2
,
_
(
"Sub Components (i.e. U2A, U2B ...)"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_ListSubCmpItems
->
SetValue
(
false
);
itemStaticBoxSizer5
->
Add
(
m_ListSubCmpItems
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
m_ListCmpbyValItems
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX3
,
_
(
"Components by Value"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_ListCmpbyValItems
->
SetValue
(
true
);
itemStaticBoxSizer5
->
Add
(
m_ListCmpbyValItems
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
m_GenListLabelsbyVal
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX4
,
_
(
"Hierachy Pins by Name"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_GenListLabelsbyVal
->
SetValue
(
false
);
itemStaticBoxSizer5
->
Add
(
m_GenListLabelsbyVal
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
m_GenListLabelsbySheet
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX5
,
_
(
"Hierachy Pins by Sheets"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_GenListLabelsbySheet
->
SetValue
(
false
);
itemStaticBoxSizer5
->
Add
(
m_GenListLabelsbySheet
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
wxBoxSizer
*
itemBoxSizer2
=
new
wxBoxSizer
(
wxVERTICAL
);
itemDialog1
->
SetSizer
(
itemBoxSizer2
);
wxBoxSizer
*
itemBoxSizer3
=
new
wxBoxSizer
(
wxHORIZONTAL
);
itemBoxSizer2
->
Add
(
itemBoxSizer3
,
0
,
wxALIGN_CENTER_HORIZONTAL
|
wxLEFT
|
wxRIGHT
,
5
);
wxBoxSizer
*
itemBoxSizer4
=
new
wxBoxSizer
(
wxVERTICAL
);
itemBoxSizer3
->
Add
(
itemBoxSizer4
,
0
,
wxALIGN_CENTER_VERTICAL
|
wxTOP
|
wxBOTTOM
,
5
);
wxStaticBox
*
itemStaticBoxSizer5Static
=
new
wxStaticBox
(
itemDialog1
,
wxID_ANY
,
_
(
"List items:"
)
);
wxStaticBoxSizer
*
itemStaticBoxSizer5
=
new
wxStaticBoxSizer
(
itemStaticBoxSizer5Static
,
wxVERTICAL
);
itemBoxSizer4
->
Add
(
itemStaticBoxSizer5
,
0
,
wxGROW
|
wxALL
,
5
);
m_ListCmpbyRefItems
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX1
,
_
(
"Components by Reference"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_ListCmpbyRefItems
->
SetValue
(
true
);
itemStaticBoxSizer5
->
Add
(
m_ListCmpbyRefItems
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
m_ListSubCmpItems
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX2
,
_
(
"Sub Components (i.e. U2A, U2B ...)"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_ListSubCmpItems
->
SetValue
(
false
);
itemStaticBoxSizer5
->
Add
(
m_ListSubCmpItems
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
m_ListCmpbyValItems
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX3
,
_
(
"Components by Value"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_ListCmpbyValItems
->
SetValue
(
true
);
itemStaticBoxSizer5
->
Add
(
m_ListCmpbyValItems
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
m_GenListLabelsbyVal
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX4
,
_
(
"Hierachy Pins by Name"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_GenListLabelsbyVal
->
SetValue
(
false
);
itemStaticBoxSizer5
->
Add
(
m_GenListLabelsbyVal
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
m_GenListLabelsbySheet
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX5
,
_
(
"Hierachy Pins by Sheets"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_GenListLabelsbySheet
->
SetValue
(
false
);
itemStaticBoxSizer5
->
Add
(
m_GenListLabelsbySheet
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
wxArrayString
m_OutputFormCtrlStrings
;
m_OutputFormCtrlStrings
.
Add
(
_
(
"List"
));
m_OutputFormCtrlStrings
.
Add
(
_
(
"Text for spreadsheet import"
));
m_OutputFormCtrl
=
new
wxRadioBox
(
itemDialog1
,
ID_RADIOBOX_SELECT_FORMAT
,
_
(
"Output format:"
),
wxDefaultPosition
,
wxDefaultSize
,
m_OutputFormCtrlStrings
,
1
,
wxRA_SPECIFY_COLS
);
m_OutputFormCtrl
->
SetSelection
(
0
);
itemBoxSizer4
->
Add
(
m_OutputFormCtrl
,
0
,
wxGROW
|
wxLEFT
|
wxRIGHT
|
wxTOP
,
5
);
m_OutputFormCtrlStrings
.
Add
(
_
(
"List"
)
);
m_OutputFormCtrlStrings
.
Add
(
_
(
"Text for spreadsheet import"
)
);
m_OutputFormCtrl
=
new
wxRadioBox
(
itemDialog1
,
ID_RADIOBOX_SELECT_FORMAT
,
_
(
"Output format:"
),
wxDefaultPosition
,
wxDefaultSize
,
m_OutputFormCtrlStrings
,
1
,
wxRA_SPECIFY_COLS
);
m_OutputFormCtrl
->
SetSelection
(
0
);
itemBoxSizer4
->
Add
(
m_OutputFormCtrl
,
0
,
wxGROW
|
wxLEFT
|
wxRIGHT
|
wxTOP
,
5
);
wxArrayString
m_OutputSeparatorCtrlStrings
;
m_OutputSeparatorCtrlStrings
.
Add
(
_
(
"Tab"
));
m_OutputSeparatorCtrlStrings
.
Add
(
_
(
";"
));
m_OutputSeparatorCtrlStrings
.
Add
(
_
(
","
));
m_OutputSeparatorCtrl
=
new
wxRadioBox
(
itemDialog1
,
ID_RADIOBOX_SEPARATOR
,
_
(
"Field separator for spreadsheet import:"
),
wxDefaultPosition
,
wxDefaultSize
,
m_OutputSeparatorCtrlStrings
,
1
,
wxRA_SPECIFY_ROWS
);
m_OutputSeparatorCtrl
->
SetSelection
(
0
);
itemBoxSizer4
->
Add
(
m_OutputSeparatorCtrl
,
0
,
wxGROW
|
wxLEFT
|
wxRIGHT
|
wxBOTTOM
,
5
);
wxStaticBox
*
itemStaticBoxSizer13Static
=
new
wxStaticBox
(
itemDialog1
,
wxID_ANY
,
_
(
"Options:"
));
wxStaticBoxSizer
*
itemStaticBoxSizer13
=
new
wxStaticBoxSizer
(
itemStaticBoxSizer13Static
,
wxHORIZONTAL
);
itemBoxSizer4
->
Add
(
itemStaticBoxSizer13
,
0
,
wxGROW
|
wxALL
,
5
);
m_GetListBrowser
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX6
,
_
(
"Launch list browser"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_GetListBrowser
->
SetValue
(
false
);
itemStaticBoxSizer13
->
Add
(
m_GetListBrowser
,
0
,
wxALIGN_CENTER_VERTICAL
|
wxALL
,
5
);
wxBoxSizer
*
itemBoxSizer15
=
new
wxBoxSizer
(
wxVERTICAL
);
itemBoxSizer3
->
Add
(
itemBoxSizer15
,
0
,
wxALIGN_TOP
|
wxLEFT
|
wxTOP
|
wxBOTTOM
,
5
);
wxStaticBox
*
itemStaticBoxSizer16Static
=
new
wxStaticBox
(
itemDialog1
,
wxID_ANY
,
_
(
"Fields to add:"
));
m_FieldsToAppendListSizer
=
new
wxStaticBoxSizer
(
itemStaticBoxSizer16Static
,
wxVERTICAL
);
itemBoxSizer15
->
Add
(
m_FieldsToAppendListSizer
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
m_AddFootprintField
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FOOTPRINT_FIELD
,
_
(
"Footprint"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddFootprintField
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddFootprintField
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField1
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD1
,
_
(
"Field 1"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField1
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField1
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField2
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD2
,
_
(
"Field 2"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField2
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField2
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField3
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD3
,
_
(
"Field 3"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField3
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField3
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField4
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD4
,
_
(
"Field 4"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField4
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField4
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField5
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD5
,
_
(
"Field 5"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField5
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField5
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField6
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD6
,
_
(
"Field 6"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField6
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField6
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField7
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD7
,
_
(
"Field 7"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField7
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField7
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField8
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD8
,
_
(
"Field 8"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField8
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField8
,
0
,
wxGROW
|
wxALL
,
5
);
itemBoxSizer15
->
Add
(
5
,
5
,
0
,
wxGROW
|
wxALL
,
10
);
wxButton
*
itemButton27
=
new
wxButton
(
itemDialog1
,
ID_CREATE_LIST
,
_
(
"Create &List"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
m_OutputSeparatorCtrlStrings
.
Add
(
_
(
"Tab"
)
);
m_OutputSeparatorCtrlStrings
.
Add
(
_
(
";"
)
);
m_OutputSeparatorCtrlStrings
.
Add
(
_
(
","
)
);
m_OutputSeparatorCtrl
=
new
wxRadioBox
(
itemDialog1
,
ID_RADIOBOX_SEPARATOR
,
_
(
"Field separator for spreadsheet import:"
),
wxDefaultPosition
,
wxDefaultSize
,
m_OutputSeparatorCtrlStrings
,
1
,
wxRA_SPECIFY_ROWS
);
m_OutputSeparatorCtrl
->
SetSelection
(
0
);
itemBoxSizer4
->
Add
(
m_OutputSeparatorCtrl
,
0
,
wxGROW
|
wxLEFT
|
wxRIGHT
|
wxBOTTOM
,
5
);
wxStaticBox
*
itemStaticBoxSizer13Static
=
new
wxStaticBox
(
itemDialog1
,
wxID_ANY
,
_
(
"Options:"
)
);
wxStaticBoxSizer
*
itemStaticBoxSizer13
=
new
wxStaticBoxSizer
(
itemStaticBoxSizer13Static
,
wxHORIZONTAL
);
itemBoxSizer4
->
Add
(
itemStaticBoxSizer13
,
0
,
wxGROW
|
wxALL
,
5
);
m_GetListBrowser
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX6
,
_
(
"Launch list browser"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_GetListBrowser
->
SetValue
(
false
);
itemStaticBoxSizer13
->
Add
(
m_GetListBrowser
,
0
,
wxALIGN_CENTER_VERTICAL
|
wxALL
,
5
);
wxBoxSizer
*
itemBoxSizer15
=
new
wxBoxSizer
(
wxVERTICAL
);
itemBoxSizer3
->
Add
(
itemBoxSizer15
,
0
,
wxALIGN_TOP
|
wxLEFT
|
wxTOP
|
wxBOTTOM
,
5
);
wxStaticBox
*
itemStaticBoxSizer16Static
=
new
wxStaticBox
(
itemDialog1
,
wxID_ANY
,
_
(
"Fields to add:"
)
);
m_FieldsToAppendListSizer
=
new
wxStaticBoxSizer
(
itemStaticBoxSizer16Static
,
wxVERTICAL
);
itemBoxSizer15
->
Add
(
m_FieldsToAppendListSizer
,
0
,
wxALIGN_LEFT
|
wxALL
,
5
);
m_AddFootprintField
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FOOTPRINT_FIELD
,
_
(
"Footprint"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddFootprintField
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddFootprintField
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField1
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD1
,
_
(
"Field 1"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField1
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField1
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField2
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD2
,
_
(
"Field 2"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField2
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField2
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField3
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD3
,
_
(
"Field 3"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField3
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField3
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField4
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD4
,
_
(
"Field 4"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField4
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField4
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField5
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD5
,
_
(
"Field 5"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField5
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField5
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField6
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD6
,
_
(
"Field 6"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField6
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField6
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField7
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD7
,
_
(
"Field 7"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField7
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField7
,
0
,
wxGROW
|
wxALL
,
5
);
m_AddField8
=
new
wxCheckBox
(
itemDialog1
,
ID_CHECKBOX_FIELD8
,
_
(
"Field 8"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCHK_2STATE
);
m_AddField8
->
SetValue
(
false
);
m_FieldsToAppendListSizer
->
Add
(
m_AddField8
,
0
,
wxGROW
|
wxALL
,
5
);
itemBoxSizer15
->
Add
(
5
,
5
,
0
,
wxGROW
|
wxALL
,
10
);
wxButton
*
itemButton27
=
new
wxButton
(
itemDialog1
,
ID_CREATE_LIST
,
_
(
"Create &List"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemButton27
->
SetDefault
();
itemButton27
->
SetForegroundColour
(
wxColour
(
166
,
0
,
0
)
);
itemBoxSizer15
->
Add
(
itemButton27
,
0
,
wxALIGN_CENTER_HORIZONTAL
|
wxALL
,
5
);
itemButton27
->
SetForegroundColour
(
wxColour
(
166
,
0
,
0
)
);
itemBoxSizer15
->
Add
(
itemButton27
,
0
,
wxALIGN_CENTER_HORIZONTAL
|
wxALL
,
5
);
wxBoxSizer
*
itemBoxSizer28
=
new
wxBoxSizer
(
wxHORIZONTAL
);
itemBoxSizer2
->
Add
(
itemBoxSizer28
,
0
,
wxALIGN_CENTER_HORIZONTAL
|
wxLEFT
|
wxRIGHT
|
wxBOTTOM
,
5
);
wxBoxSizer
*
itemBoxSizer28
=
new
wxBoxSizer
(
wxHORIZONTAL
);
itemBoxSizer2
->
Add
(
itemBoxSizer28
,
0
,
wxALIGN_CENTER_HORIZONTAL
|
wxLEFT
|
wxRIGHT
|
wxBOTTOM
,
5
);
wxButton
*
itemButton29
=
new
wxButton
(
itemDialog1
,
wxID_OK
,
_
(
"&OK"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemButton29
->
SetForegroundColour
(
wxColour
(
255
,
0
,
0
));
itemBoxSizer28
->
Add
(
itemButton29
,
0
,
wxALIGN_CENTER_VERTICAL
|
wxALL
,
5
);
wxButton
*
itemButton29
=
new
wxButton
(
itemDialog1
,
wxID_OK
,
_
(
"&OK"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemButton29
->
SetForegroundColour
(
wxColour
(
255
,
0
,
0
)
);
itemBoxSizer28
->
Add
(
itemButton29
,
0
,
wxALIGN_CENTER_VERTICAL
|
wxALL
,
5
);
wxButton
*
itemButton30
=
new
wxButton
(
itemDialog1
,
wxID_CANCEL
,
_
(
"&Cancel"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemButton30
->
SetForegroundColour
(
wxColour
(
0
,
0
,
255
));
itemBoxSizer28
->
Add
(
itemButton30
,
0
,
wxALIGN_CENTER_VERTICAL
|
wxALL
,
5
);
wxButton
*
itemButton30
=
new
wxButton
(
itemDialog1
,
wxID_CANCEL
,
_
(
"&Cancel"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemButton30
->
SetForegroundColour
(
wxColour
(
0
,
0
,
255
)
);
itemBoxSizer28
->
Add
(
itemButton30
,
0
,
wxALIGN_CENTER_VERTICAL
|
wxALL
,
5
);
wxButton
*
itemButton31
=
new
wxButton
(
itemDialog1
,
wxID_APPLY
,
_
(
"&Apply"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemBoxSizer28
->
Add
(
itemButton31
,
0
,
wxALIGN_CENTER_VERTICAL
|
wxALL
,
5
);
wxButton
*
itemButton31
=
new
wxButton
(
itemDialog1
,
wxID_APPLY
,
_
(
"&Apply"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
itemBoxSizer28
->
Add
(
itemButton31
,
0
,
wxALIGN_CENTER_VERTICAL
|
wxALL
,
5
);
// Set validators
m_ListCmpbyRefItems
->
SetValidator
(
wxGenericValidator
(
&
s_ListByRef
)
);
m_ListSubCmpItems
->
SetValidator
(
wxGenericValidator
(
&
s_ListWithSubCmponents
)
);
m_ListCmpbyValItems
->
SetValidator
(
wxGenericValidator
(
&
s_ListByValue
)
);
m_GenListLabelsbyVal
->
SetValidator
(
wxGenericValidator
(
&
s_ListHierarchicalPinByName
)
);
m_GenListLabelsbySheet
->
SetValidator
(
wxGenericValidator
(
&
s_ListBySheet
)
);
m_OutputFormCtrl
->
SetValidator
(
wxGenericValidator
(
&
s_OutputFormOpt
)
);
m_OutputSeparatorCtrl
->
SetValidator
(
wxGenericValidator
(
&
s_OutputSeparatorOpt
)
);
m_GetListBrowser
->
SetValidator
(
wxGenericValidator
(
&
s_BrowsList
)
);
m_AddFootprintField
->
SetValidator
(
wxGenericValidator
(
&
s_Add_FpField_state
)
);
m_AddField1
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F1_state
)
);
m_AddField2
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F2_state
)
);
m_AddField3
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F3_state
)
);
m_AddField4
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F4_state
)
);
m_AddField5
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F5_state
)
);
m_AddField6
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F6_state
)
);
m_AddField7
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F7_state
)
);
m_AddField8
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F8_state
)
);
m_ListCmpbyRefItems
->
SetValidator
(
wxGenericValidator
(
&
s_ListByRef
)
);
m_ListSubCmpItems
->
SetValidator
(
wxGenericValidator
(
&
s_ListWithSubCmponents
)
);
m_ListCmpbyValItems
->
SetValidator
(
wxGenericValidator
(
&
s_ListByValue
)
);
m_GenListLabelsbyVal
->
SetValidator
(
wxGenericValidator
(
&
s_ListHierarchicalPinByName
)
);
m_GenListLabelsbySheet
->
SetValidator
(
wxGenericValidator
(
&
s_ListBySheet
)
);
m_OutputFormCtrl
->
SetValidator
(
wxGenericValidator
(
&
s_OutputFormOpt
)
);
m_OutputSeparatorCtrl
->
SetValidator
(
wxGenericValidator
(
&
s_OutputSeparatorOpt
)
);
m_GetListBrowser
->
SetValidator
(
wxGenericValidator
(
&
s_BrowsList
)
);
m_AddFootprintField
->
SetValidator
(
wxGenericValidator
(
&
s_Add_FpField_state
)
);
m_AddField1
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F1_state
)
);
m_AddField2
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F2_state
)
);
m_AddField3
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F3_state
)
);
m_AddField4
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F4_state
)
);
m_AddField5
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F5_state
)
);
m_AddField6
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F6_state
)
);
m_AddField7
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F7_state
)
);
m_AddField8
->
SetValidator
(
wxGenericValidator
(
&
s_Add_F8_state
)
);
////@end WinEDA_Build_BOM_Frame content construction
}
/*!
* Should we show tooltips?
*/
...
...
@@ -368,6 +431,7 @@ bool WinEDA_Build_BOM_Frame::ShowToolTips()
return
TRUE
;
}
/*!
* Get bitmap resources
*/
...
...
@@ -376,11 +440,13 @@ wxBitmap WinEDA_Build_BOM_Frame::GetBitmapResource( const wxString& name )
{
// Bitmap retrieval
////@begin WinEDA_Build_BOM_Frame bitmap retrieval
wxUnusedVar
(
name
);
wxUnusedVar
(
name
);
return
wxNullBitmap
;
////@end WinEDA_Build_BOM_Frame bitmap retrieval
}
/*!
* Get icon resources
*/
...
...
@@ -389,8 +455,9 @@ wxIcon WinEDA_Build_BOM_Frame::GetIconResource( const wxString& name )
{
// Icon retrieval
////@begin WinEDA_Build_BOM_Frame icon retrieval
wxUnusedVar
(
name
);
wxUnusedVar
(
name
);
return
wxNullIcon
;
////@end WinEDA_Build_BOM_Frame icon retrieval
}
...
...
@@ -401,10 +468,10 @@ wxIcon WinEDA_Build_BOM_Frame::GetIconResource( const wxString& name )
void
WinEDA_Build_BOM_Frame
::
OnRadioboxSelectFormatSelected
(
wxCommandEvent
&
event
)
{
if
(
m_OutputFormCtrl
->
GetSelection
()
==
1
)
m_OutputSeparatorCtrl
->
Enable
(
true
);
else
m_OutputSeparatorCtrl
->
Enable
(
false
);
if
(
m_OutputFormCtrl
->
GetSelection
()
==
1
)
m_OutputSeparatorCtrl
->
Enable
(
true
);
else
m_OutputSeparatorCtrl
->
Enable
(
false
);
}
...
...
@@ -453,45 +520,46 @@ void WinEDA_Build_BOM_Frame::OnApplyClick( wxCommandEvent& event )
void
WinEDA_Build_BOM_Frame
::
SavePreferences
()
/**************************************************/
{
// Determine current settings of "List items" and "Options" checkboxes
// (NOTE: These 6 settings are restored when the dialog box is next
// invoked, but are *not* still saved after EESchema is next shut down.)
s_ListByRef
=
m_ListCmpbyRefItems
->
GetValue
();
s_ListWithSubCmponents
=
m_ListSubCmpItems
->
GetValue
();
s_ListByValue
=
m_ListCmpbyValItems
->
GetValue
();
s_ListHierarchicalPinByName
=
m_GenListLabelsbyVal
->
GetValue
();
s_ListBySheet
=
m_GenListLabelsbySheet
->
GetValue
();
s_BrowsList
=
m_GetListBrowser
->
GetValue
();
// Determine current settings of both radiobutton groups
s_OutputFormOpt
=
m_OutputFormCtrl
->
GetSelection
();
s_OutputSeparatorOpt
=
m_OutputSeparatorCtrl
->
GetSelection
();
if
(
s_OutputSeparatorOpt
<
0
)
s_OutputSeparatorOpt
=
0
;
// Determine current settings of all 8 "Fields to add" checkboxes
s_Add_F1_state
=
m_AddField1
->
GetValue
();
s_Add_F2_state
=
m_AddField2
->
GetValue
();
s_Add_F3_state
=
m_AddField3
->
GetValue
();
s_Add_F4_state
=
m_AddField4
->
GetValue
();
s_Add_F5_state
=
m_AddField5
->
GetValue
();
s_Add_F6_state
=
m_AddField6
->
GetValue
();
s_Add_F7_state
=
m_AddField7
->
GetValue
();
s_Add_F8_state
=
m_AddField8
->
GetValue
();
// Now save current settings of both radiobutton groups
m_Parent
->
m_Parent
->
m_EDA_Config
->
Write
(
OPTION_BOM_FORMAT
,
(
long
)
s_OutputFormOpt
);
m_Parent
->
m_Parent
->
m_EDA_Config
->
Write
(
OPTION_BOM_SEPARATOR
,
(
long
)
s_OutputSeparatorOpt
);
// Now save current settings of all 8 "Fields to add" checkboxes
long
addfields
=
0
;
for
(
int
ii
=
0
,
bitmask
=
1
;
s_AddFieldList
[
ii
]
!=
NULL
;
ii
++
)
{
if
(
*
s_AddFieldList
[
ii
]
)
addfields
|=
bitmask
;
bitmask
<<=
1
;
}
m_Parent
->
m_Parent
->
m_EDA_Config
->
Write
(
OPTION_BOM_ADD_FIELD
,
addfields
);
// Determine current settings of "List items" and "Options" checkboxes
// (NOTE: These 6 settings are restored when the dialog box is next
// invoked, but are *not* still saved after EESchema is next shut down.)
s_ListByRef
=
m_ListCmpbyRefItems
->
GetValue
();
s_ListWithSubCmponents
=
m_ListSubCmpItems
->
GetValue
();
s_ListByValue
=
m_ListCmpbyValItems
->
GetValue
();
s_ListHierarchicalPinByName
=
m_GenListLabelsbyVal
->
GetValue
();
s_ListBySheet
=
m_GenListLabelsbySheet
->
GetValue
();
s_BrowsList
=
m_GetListBrowser
->
GetValue
();
// Determine current settings of both radiobutton groups
s_OutputFormOpt
=
m_OutputFormCtrl
->
GetSelection
();
s_OutputSeparatorOpt
=
m_OutputSeparatorCtrl
->
GetSelection
();
if
(
s_OutputSeparatorOpt
<
0
)
s_OutputSeparatorOpt
=
0
;
// Determine current settings of all 8 "Fields to add" checkboxes
s_Add_F1_state
=
m_AddField1
->
GetValue
();
s_Add_F2_state
=
m_AddField2
->
GetValue
();
s_Add_F3_state
=
m_AddField3
->
GetValue
();
s_Add_F4_state
=
m_AddField4
->
GetValue
();
s_Add_F5_state
=
m_AddField5
->
GetValue
();
s_Add_F6_state
=
m_AddField6
->
GetValue
();
s_Add_F7_state
=
m_AddField7
->
GetValue
();
s_Add_F8_state
=
m_AddField8
->
GetValue
();
// Now save current settings of both radiobutton groups
m_Parent
->
m_Parent
->
m_EDA_Config
->
Write
(
OPTION_BOM_FORMAT
,
(
long
)
s_OutputFormOpt
);
m_Parent
->
m_Parent
->
m_EDA_Config
->
Write
(
OPTION_BOM_SEPARATOR
,
(
long
)
s_OutputSeparatorOpt
);
// Now save current settings of all 8 "Fields to add" checkboxes
long
addfields
=
0
;
for
(
int
ii
=
0
,
bitmask
=
1
;
s_AddFieldList
[
ii
]
!=
NULL
;
ii
++
)
{
if
(
*
s_AddFieldList
[
ii
]
)
addfields
|=
bitmask
;
bitmask
<<=
1
;
}
m_Parent
->
m_Parent
->
m_EDA_Config
->
Write
(
OPTION_BOM_ADD_FIELD
,
addfields
);
}
...
...
@@ -499,22 +567,22 @@ void WinEDA_Build_BOM_Frame::SavePreferences()
void
WinEDA_Build_BOM_Frame
::
GenList
()
/**********************************************************/
{
#define EXT_LIST wxT(
".lst"
)
wxString
mask
,
filename
;
// Although the currently selected options determine the contents
// and format of the subsequently generated file, they are still
// *not* "restored" if the dialog box is ever subsequently invoked
// again (unless those options had been specifically "saved" before
// now (by clicking on either of the "OK" or "Apply" buttons)).
//
// Hence the following previously provided commands are now
// commented out, and the currently selected options are now
// read "directly" by the relevant functions instead. (The previous
// behavior of the dialog box in this regard had been inconsistent,
// in that the settings of the "Fields to add" checkboxes were *not*
// "restored", whereas all of the other settings *were* "restored";
// now, *none* of those settings are subsequently "restored".)
#define EXT_LIST wxT(
".lst"
)
wxString
mask
,
filename
;
// Although the currently selected options determine the contents
// and format of the subsequently generated file, they are still
// *not* "restored" if the dialog box is ever subsequently invoked
// again (unless those options had been specifically "saved" before
// now (by clicking on either of the "OK" or "Apply" buttons)).
//
// Hence the following previously provided commands are now
// commented out, and the currently selected options are now
// read "directly" by the relevant functions instead. (The previous
// behavior of the dialog box in this regard had been inconsistent,
// in that the settings of the "Fields to add" checkboxes were *not*
// "restored", whereas all of the other settings *were* "restored";
// now, *none* of those settings are subsequently "restored".)
// s_ListByRef = m_ListCmpbyRefItems->GetValue();
// s_ListWithSubCmponents = m_ListSubCmpItems->GetValue();
...
...
@@ -529,357 +597,371 @@ wxString mask, filename;
// s_OutputSeparatorOpt = 0;
// s_ExportSeparatorSymbol = s_ExportSeparator[s_OutputSeparatorOpt];
// Updated code for determining the value of s_ExportSeparatorSymbol
if
(
m_OutputSeparatorCtrl
->
GetSelection
()
>
0
)
s_ExportSeparatorSymbol
=
s_ExportSeparator
[
m_OutputSeparatorCtrl
->
GetSelection
()];
else
s_ExportSeparatorSymbol
=
s_ExportSeparator
[
0
];
m_ListFileName
=
g_RootSheet
->
m_AssociatedScreen
->
m_FileName
;
ChangeFileNameExt
(
m_ListFileName
,
EXT_LIST
);
//need to get rid of the path.
m_ListFileName
=
m_ListFileName
.
AfterLast
(
'/'
);
mask
=
wxT
(
"*"
);
mask
+=
EXT_LIST
;
filename
=
EDA_FileSelector
(
_
(
"Bill of materials:"
),
wxEmptyString
,
/* Chemin par defaut (ici dir courante) */
m_ListFileName
,
/* nom fichier par defaut, et resultat */
EXT_LIST
,
/* extension par defaut */
mask
,
/* Masque d'affichage */
this
,
wxFD_SAVE
,
TRUE
);
if
(
filename
.
IsEmpty
()
)
return
;
else
m_ListFileName
=
filename
;
/* Close dialog, then show the list (if so requested) */
// Updated code for determining the value of s_ExportSeparatorSymbol
if
(
m_OutputSeparatorCtrl
->
GetSelection
()
>
0
)
s_ExportSeparatorSymbol
=
s_ExportSeparator
[
m_OutputSeparatorCtrl
->
GetSelection
()];
else
s_ExportSeparatorSymbol
=
s_ExportSeparator
[
0
];
m_ListFileName
=
g_RootSheet
->
m_AssociatedScreen
->
m_FileName
;
ChangeFileNameExt
(
m_ListFileName
,
EXT_LIST
);
//need to get rid of the path.
m_ListFileName
=
m_ListFileName
.
AfterLast
(
'/'
);
mask
=
wxT
(
"*"
);
mask
+=
EXT_LIST
;
filename
=
EDA_FileSelector
(
_
(
"Bill of materials:"
),
wxEmptyString
,
/* Chemin par defaut (ici dir courante) */
m_ListFileName
,
/* nom fichier par defaut, et resultat */
EXT_LIST
,
/* extension par defaut */
mask
,
/* Masque d'affichage */
this
,
wxFD_SAVE
,
TRUE
);
if
(
filename
.
IsEmpty
()
)
return
;
else
m_ListFileName
=
filename
;
/* Close dialog, then show the list (if so requested) */
// if( s_OutputFormOpt == 0 )
if
(
m_OutputFormCtrl
->
GetSelection
()
==
0
)
GenereListeOfItems
(
m_ListFileName
);
else
CreateExportList
(
m_ListFileName
);
if
(
m_OutputFormCtrl
->
GetSelection
()
==
0
)
GenereListeOfItems
(
m_ListFileName
);
else
CreateExportList
(
m_ListFileName
);
EndModal
(
1
);
EndModal
(
1
);
// if( s_BrowsList )
if
(
m_GetListBrowser
->
GetValue
()
)
{
wxString
editorname
=
GetEditorName
();
AddDelimiterString
(
filename
);
ExecuteFile
(
this
,
editorname
,
filename
);
}
if
(
m_GetListBrowser
->
GetValue
()
)
{
wxString
editorname
=
GetEditorName
();
AddDelimiterString
(
filename
);
ExecuteFile
(
this
,
editorname
,
filename
);
}
}
/****************************************************************************/
void
WinEDA_Build_BOM_Frame
::
CreateExportList
(
const
wxString
&
FullFileName
)
void
WinEDA_Build_BOM_Frame
::
CreateExportList
(
const
wxString
&
FullFileName
)
/****************************************************************************/
/*
* Print a list of components, in a form which can be imported by a spreadsheet
* form is:
* cmp name; cmp val; fields;
*/
{
FILE
*
f
;
ListComponent
*
List
;
int
NbItems
;
wxString
msg
;
/* Creation de la liste des elements */
if
(
(
f
=
wxFopen
(
FullFileName
,
wxT
(
"wt"
)
)
)
==
NULL
)
{
msg
=
_
(
"Failed to open file "
);
msg
<<
FullFileName
;
DisplayError
(
this
,
msg
);
return
;
}
NbItems
=
GenListeCmp
(
NULL
);
if
(
NbItems
)
{
List
=
(
ListComponent
*
)
MyZMalloc
(
NbItems
*
sizeof
(
ListComponent
)
);
if
(
List
==
NULL
)
{
fclose
(
f
);
return
;
}
GenListeCmp
(
List
);
/* sort component list */
qsort
(
List
,
NbItems
,
sizeof
(
ListComponent
),
(
int
(
*
)(
const
void
*
,
const
void
*
)
)
ListTriComposantByRef
);
FILE
*
f
;
ListComponent
*
List
;
int
NbItems
;
wxString
msg
;
/* Creation de la liste des elements */
if
(
(
f
=
wxFopen
(
FullFileName
,
wxT
(
"wt"
)
)
)
==
NULL
)
{
msg
=
_
(
"Failed to open file "
);
msg
<<
FullFileName
;
DisplayError
(
this
,
msg
);
return
;
}
NbItems
=
GenListeCmp
(
NULL
);
if
(
NbItems
)
{
List
=
(
ListComponent
*
)
MyZMalloc
(
NbItems
*
sizeof
(
ListComponent
)
);
if
(
List
==
NULL
)
{
fclose
(
f
);
return
;
}
GenListeCmp
(
List
);
/* sort component list */
qsort
(
List
,
NbItems
,
sizeof
(
ListComponent
),
(
int
(
*
)
(
const
void
*
,
const
void
*
)
)
ListTriComposantByRef
);
// if( ! s_ListWithSubCmponents )
if
(
!
m_ListSubCmpItems
->
GetValue
()
)
DeleteSubCmp
(
List
,
NbItems
);
if
(
!
m_ListSubCmpItems
->
GetValue
()
)
DeleteSubCmp
(
List
,
NbItems
);
/* create the file */
PrintListeCmpByRef
(
f
,
List
,
NbItems
,
TRUE
);
/* create the file */
PrintListeCmpByRef
(
f
,
List
,
NbItems
,
TRUE
);
MyFree
(
List
);
}
MyFree
(
List
);
}
fclose
(
f
);
fclose
(
f
);
}
/****************************************************************************/
void
WinEDA_Build_BOM_Frame
::
GenereListeOfItems
(
const
wxString
&
FullFileName
)
void
WinEDA_Build_BOM_Frame
::
GenereListeOfItems
(
const
wxString
&
FullFileName
)
/****************************************************************************/
/*
* Routine principale pour la creation des listings ( composants et/ou labels
* globaux et "sheet labels" )
*/
{
FILE
*
f
;
ListComponent
*
List
;
ListLabel
*
ListOfLabels
;
int
NbItems
;
char
Line
[
1024
];
wxString
msg
;
/* Creation de la liste des elements */
if
(
(
f
=
wxFopen
(
FullFileName
,
wxT
(
"wt"
)
)
)
==
NULL
)
{
msg
=
_
(
"Failed to open file "
);
msg
<<
FullFileName
;
DisplayError
(
this
,
msg
);
return
;
}
NbItems
=
GenListeCmp
(
NULL
);
if
(
NbItems
)
{
List
=
(
ListComponent
*
)
MyZMalloc
(
NbItems
*
sizeof
(
ListComponent
)
);
if
(
List
==
NULL
)
{
fclose
(
f
);
return
;
}
GenListeCmp
(
List
);
for
(
int
i
=
0
;
i
<
NbItems
;
i
++
){
printf
(
"found component: %s
\n
"
,
List
[
i
].
m_Ref
);
}
/* generation du fichier listing */
DateAndTime
(
Line
);
wxString
Title
=
g_Main_Title
+
wxT
(
" "
)
+
GetBuildVersion
();
fprintf
(
f
,
"%s >> Creation date: %s
\n
"
,
CONV_TO_UTF8
(
Title
),
Line
);
/* Tri et impression de la liste des composants */
qsort
(
List
,
NbItems
,
sizeof
(
ListComponent
),
(
int
(
*
)(
const
void
*
,
const
void
*
))
ListTriComposantByRef
);
printf
(
"sorted by reference:
\n
"
);
for
(
int
i
=
0
;
i
<
NbItems
;
i
++
){
printf
(
"found component: %s
\n
"
,
List
[
i
].
m_Ref
);
}
FILE
*
f
;
ListComponent
*
List
;
ListLabel
*
ListOfLabels
;
int
NbItems
;
char
Line
[
1024
];
wxString
msg
;
/* Creation de la liste des elements */
if
(
(
f
=
wxFopen
(
FullFileName
,
wxT
(
"wt"
)
)
)
==
NULL
)
{
msg
=
_
(
"Failed to open file "
);
msg
<<
FullFileName
;
DisplayError
(
this
,
msg
);
return
;
}
NbItems
=
GenListeCmp
(
NULL
);
if
(
NbItems
)
{
List
=
(
ListComponent
*
)
MyZMalloc
(
NbItems
*
sizeof
(
ListComponent
)
);
if
(
List
==
NULL
)
{
fclose
(
f
);
return
;
}
GenListeCmp
(
List
);
#if 0
for( int i = 0; i<NbItems; i++ )
{
printf( "found component: %s\n", List[i].m_Ref );
}
#endif
/* generation du fichier listing */
DateAndTime
(
Line
);
wxString
Title
=
g_Main_Title
+
wxT
(
" "
)
+
GetBuildVersion
();
fprintf
(
f
,
"%s >> Creation date: %s
\n
"
,
CONV_TO_UTF8
(
Title
),
Line
);
/* Tri et impression de la liste des composants */
qsort
(
List
,
NbItems
,
sizeof
(
ListComponent
),
(
int
(
*
)
(
const
void
*
,
const
void
*
)
)
ListTriComposantByRef
);
#if 0
printf( "sorted by reference:\n" );
for( int i = 0; i<NbItems; i++ )
{
printf( "found component: %s\n", List[i].m_Ref );
}
#endif
// if( ! s_ListWithSubCmponents )
if
(
!
m_ListSubCmpItems
->
GetValue
()
)
DeleteSubCmp
(
List
,
NbItems
);
if
(
!
m_ListSubCmpItems
->
GetValue
()
)
DeleteSubCmp
(
List
,
NbItems
);
// if( s_ListByRef )
if
(
m_ListCmpbyRefItems
->
GetValue
()
)
{
PrintListeCmpByRef
(
f
,
List
,
NbItems
);
}
if
(
m_ListCmpbyRefItems
->
GetValue
()
)
{
PrintListeCmpByRef
(
f
,
List
,
NbItems
);
}
// if( s_ListByValue )
if
(
m_ListCmpbyValItems
->
GetValue
()
)
{
qsort
(
List
,
NbItems
,
sizeof
(
ListComponent
),
(
int
(
*
)(
const
void
*
,
const
void
*
))
ListTriComposantByVal
);
PrintListeCmpByVal
(
f
,
List
,
NbItems
);
}
MyFree
(
List
);
}
/***************************************/
/* Generation liste des Labels globaux */
/***************************************/
NbItems
=
GenListeGLabels
(
NULL
);
if
(
NbItems
)
{
ListOfLabels
=
(
ListLabel
*
)
MyZMalloc
(
NbItems
*
sizeof
(
ListLabel
)
);
memset
((
void
*
)
ListOfLabels
,
0
,
NbItems
*
sizeof
(
ListLabel
));
if
(
ListOfLabels
==
NULL
)
{
fclose
(
f
);
return
;
}
GenListeGLabels
(
ListOfLabels
);
/* Tri de la liste */
if
(
m_ListCmpbyValItems
->
GetValue
()
)
{
qsort
(
List
,
NbItems
,
sizeof
(
ListComponent
),
(
int
(
*
)
(
const
void
*
,
const
void
*
)
)
ListTriComposantByVal
);
PrintListeCmpByVal
(
f
,
List
,
NbItems
);
}
MyFree
(
List
);
}
/***************************************/
/* Generation liste des Labels globaux */
/***************************************/
NbItems
=
GenListeGLabels
(
NULL
);
if
(
NbItems
)
{
ListOfLabels
=
(
ListLabel
*
)
MyZMalloc
(
NbItems
*
sizeof
(
ListLabel
)
);
memset
(
(
void
*
)
ListOfLabels
,
0
,
NbItems
*
sizeof
(
ListLabel
)
);
if
(
ListOfLabels
==
NULL
)
{
fclose
(
f
);
return
;
}
GenListeGLabels
(
ListOfLabels
);
/* Tri de la liste */
// if( s_ListBySheet )
if
(
m_GenListLabelsbySheet
->
GetValue
()
)
{
qsort
(
ListOfLabels
,
NbItems
,
sizeof
(
ListLabel
),
(
int
(
*
)(
const
void
*
,
const
void
*
)
)
ListTriGLabelBySheet
);
if
(
m_GenListLabelsbySheet
->
GetValue
()
)
{
qsort
(
ListOfLabels
,
NbItems
,
sizeof
(
ListLabel
),
(
int
(
*
)
(
const
void
*
,
const
void
*
)
)
ListTriGLabelBySheet
);
msg
.
Printf
(
_
(
"
\n
#Glob labels ( order = Sheet Number ) count = %d
\n
"
),
NbItems
);
fprintf
(
f
,
"%s"
,
CONV_TO_UTF8
(
msg
)
);
PrintListeGLabel
(
f
,
ListOfLabels
,
NbItems
);
}
msg
.
Printf
(
_
(
"
\n
#Glob labels ( order = Sheet Number ) count = %d
\n
"
),
NbItems
);
fprintf
(
f
,
"%s"
,
CONV_TO_UTF8
(
msg
)
);
PrintListeGLabel
(
f
,
ListOfLabels
,
NbItems
);
}
// if( s_ListHierarchicalPinByName )
if
(
m_GenListLabelsbyVal
->
GetValue
()
)
{
qsort
(
ListOfLabels
,
NbItems
,
sizeof
(
ListLabel
),
(
int
(
*
)(
const
void
*
,
const
void
*
))
ListTriGLabelByVal
);
msg
.
Printf
(
_
(
"
\n
#Glob labels ( order = Alphab. ) count = %d
\n\n
"
),
NbItems
);
fprintf
(
f
,
"%s"
,
CONV_TO_UTF8
(
msg
)
);
PrintListeGLabel
(
f
,
ListOfLabels
,
NbItems
);
}
MyFree
(
ListOfLabels
);
}
msg
=
_
(
"
\n
#End List
\n
"
);
fprintf
(
f
,
"%s"
,
CONV_TO_UTF8
(
msg
)
);
fclose
(
f
);
}
if
(
m_GenListLabelsbyVal
->
GetValue
()
)
{
qsort
(
ListOfLabels
,
NbItems
,
sizeof
(
ListLabel
),
(
int
(
*
)
(
const
void
*
,
const
void
*
)
)
ListTriGLabelByVal
);
msg
.
Printf
(
_
(
"
\n
#Glob labels ( order = Alphab. ) count = %d
\n\n
"
),
NbItems
);
fprintf
(
f
,
"%s"
,
CONV_TO_UTF8
(
msg
)
);
PrintListeGLabel
(
f
,
ListOfLabels
,
NbItems
);
}
MyFree
(
ListOfLabels
);
}
msg
=
_
(
"
\n
#End List
\n
"
);
fprintf
(
f
,
"%s"
,
CONV_TO_UTF8
(
msg
)
);
fclose
(
f
);
}
/****************************************/
int
GenListeCmp
(
ListComponent
*
List
)
int
GenListeCmp
(
ListComponent
*
List
)
/****************************************/
/* Routine de generation de la liste des elements utiles du dessin
* Si List == NULL: comptage des elements
* Sinon remplissage de la liste
* Initialise "FlagControlMulti" a SheetNumber pour la sortie des listes
* et m_Father comme pointeur sur la sheet d'appartenance
*
* routine for generating a list of the used components.
*
* routine for generating a list of the used components.
* if List == null, just returns the count. if not, fills the list.
* goes through the sheets, not the screens, so that we account for
* multiple instances of a given screen.
* goes through the sheets, not the screens, so that we account for
* multiple instances of a given screen.
*/
{
int
ItemCount
=
0
;
EDA_BaseStruct
*
DrawList
;
EDA_SchComponentStruct
*
DrawLibItem
;
DrawSheetPath
*
sheet
;
/* Build the sheet (not screen) list */
EDA_SheetList
SheetList
(
NULL
);
for
(
sheet
=
SheetList
.
GetFirst
();
sheet
!=
NULL
;
sheet
=
SheetList
.
GetNext
()
)
{
DrawList
=
sheet
->
LastDrawList
();
while
(
DrawList
)
{
switch
(
DrawList
->
Type
()
)
{
case
DRAW_LIB_ITEM_STRUCT_TYPE
:
ItemCount
++
;
DrawLibItem
=
(
EDA_SchComponentStruct
*
)
DrawList
;
DrawLibItem
->
m_Parent
=
sheet
->
LastScreen
();
if
(
List
)
{
(
*
List
).
m_Comp
=
DrawLibItem
;
(
*
List
).
m_SheetList
=
*
sheet
;
strncpy
(
&
((
*
List
).
m_Ref
[
0
]),
CONV_TO_UTF8
(
DrawLibItem
->
GetRef
(
sheet
)),
sizeof
((
*
List
).
m_Ref
));
List
++
;
}
break
;
default
:
break
;
}
DrawList
=
DrawList
->
Pnext
;
}
}
return
(
ItemCount
);
int
ItemCount
=
0
;
EDA_BaseStruct
*
DrawList
;
EDA_SchComponentStruct
*
DrawLibItem
;
DrawSheetPath
*
sheet
;
/* Build the sheet (not screen) list */
EDA_SheetList
SheetList
(
NULL
);
for
(
sheet
=
SheetList
.
GetFirst
();
sheet
!=
NULL
;
sheet
=
SheetList
.
GetNext
()
)
{
DrawList
=
sheet
->
LastDrawList
();
while
(
DrawList
)
{
switch
(
DrawList
->
Type
()
)
{
case
DRAW_LIB_ITEM_STRUCT_TYPE
:
ItemCount
++
;
DrawLibItem
=
(
EDA_SchComponentStruct
*
)
DrawList
;
DrawLibItem
->
m_Parent
=
sheet
->
LastScreen
();
if
(
List
)
{
List
->
m_Comp
=
DrawLibItem
;
List
->
m_SheetList
=
*
sheet
;
strncpy
(
List
->
m_Ref
,
CONV_TO_UTF8
(
DrawLibItem
->
GetRef
(
sheet
)
),
sizeof
(
List
->
m_Ref
)
);
List
++
;
}
break
;
default
:
break
;
}
DrawList
=
DrawList
->
Pnext
;
}
}
return
ItemCount
;
}
/*********************************************/
static
int
GenListeGLabels
(
ListLabel
*
List
)
static
int
GenListeGLabels
(
ListLabel
*
List
)
/*********************************************/
/* Count the Glabels, or fill the list Listwith Glabel pointers
/* Count the Glabels, or fill the list Listwith Glabel pointers
* If List == NULL: Item count only
* Else fill list of Glabels
*/
{
int
ItemCount
=
0
;
EDA_BaseStruct
*
DrawList
;
DrawSheetLabelStruct
*
SheetLabel
;
DrawSheetPath
*
sheet
;
/* Build the screen list */
EDA_SheetList
SheetList
(
NULL
);
for
(
sheet
=
SheetList
.
GetFirst
();
sheet
!=
NULL
;
sheet
=
SheetList
.
GetNext
()
)
{
DrawList
=
sheet
->
LastDrawList
();
wxString
path
=
sheet
->
Path
();
while
(
DrawList
)
{
switch
(
DrawList
->
Type
()
)
{
case
DRAW_HIER_LABEL_STRUCT_TYPE
:
case
DRAW_GLOBAL_LABEL_STRUCT_TYPE
:
ItemCount
++
;
if
(
List
)
{
List
->
m_LabelType
=
DrawList
->
Type
();
snprintf
(
List
->
m_SheetPath
,
sizeof
(
List
->
m_SheetPath
),
"%s"
,
CONV_TO_UTF8
(
path
));
List
->
m_Label
=
DrawList
;
List
++
;
}
break
;
case
DRAW_SHEET_STRUCT_TYPE
:
{
#define Sheet ((DrawSheetStruct * ) DrawList)
SheetLabel
=
Sheet
->
m_Label
;
while
(
SheetLabel
!=
NULL
)
{
if
(
List
)
{
List
->
m_LabelType
=
DRAW_SHEETLABEL_STRUCT_TYPE
;
snprintf
(
List
->
m_SheetPath
,
sizeof
(
List
->
m_SheetPath
),
"%s"
,
CONV_TO_UTF8
(
path
));
List
->
m_Label
=
SheetLabel
;
List
++
;
}
ItemCount
++
;
SheetLabel
=
(
DrawSheetLabelStruct
*
)(
SheetLabel
->
Pnext
);
}
}
break
;
default
:
break
;
}
DrawList
=
DrawList
->
Pnext
;
}
}
return
(
ItemCount
);
int
ItemCount
=
0
;
EDA_BaseStruct
*
DrawList
;
DrawSheetLabelStruct
*
SheetLabel
;
DrawSheetPath
*
sheet
;
/* Build the screen list */
EDA_SheetList
SheetList
(
NULL
);
for
(
sheet
=
SheetList
.
GetFirst
();
sheet
!=
NULL
;
sheet
=
SheetList
.
GetNext
()
)
{
DrawList
=
sheet
->
LastDrawList
();
wxString
path
=
sheet
->
PathHumanReadable
();
while
(
DrawList
)
{
switch
(
DrawList
->
Type
()
)
{
case
DRAW_HIER_LABEL_STRUCT_TYPE
:
case
DRAW_GLOBAL_LABEL_STRUCT_TYPE
:
ItemCount
++
;
if
(
List
)
{
List
->
m_LabelType
=
DrawList
->
Type
();
snprintf
(
List
->
m_SheetPath
,
sizeof
(
List
->
m_SheetPath
),
"%s"
,
CONV_TO_UTF8
(
path
)
);
List
->
m_Label
=
DrawList
;
List
++
;
}
break
;
case
DRAW_SHEET_STRUCT_TYPE
:
{
#define Sheet ( (DrawSheetStruct*) DrawList )
SheetLabel
=
Sheet
->
m_Label
;
while
(
SheetLabel
!=
NULL
)
{
if
(
List
)
{
List
->
m_LabelType
=
DRAW_SHEETLABEL_STRUCT_TYPE
;
snprintf
(
List
->
m_SheetPath
,
sizeof
(
List
->
m_SheetPath
),
"%s"
,
CONV_TO_UTF8
(
path
)
);
List
->
m_Label
=
SheetLabel
;
List
++
;
}
ItemCount
++
;
SheetLabel
=
(
DrawSheetLabelStruct
*
)
(
SheetLabel
->
Pnext
);
}
}
break
;
default
:
break
;
}
DrawList
=
DrawList
->
Pnext
;
}
}
return
ItemCount
;
}
/**********************************************************/
static
int
ListTriComposantByVal
(
ListComponent
*
Objet1
,
ListComponent
*
Objet2
)
static
int
ListTriComposantByVal
(
ListComponent
*
Objet1
,
ListComponent
*
Objet2
)
/**********************************************************/
/* Routine de comparaison pour le tri du Tableau par qsort()
* Les composants sont tries
* par valeur
...
...
@@ -887,44 +969,45 @@ static int ListTriComposantByVal(ListComponent *Objet1,
* si meme valeur: par numero d'unite
*/
{
int
ii
;
const
wxString
*
Text1
,
*
Text2
;
if
(
(
Objet1
==
NULL
)
&&
(
Objet2
==
NULL
)
)
return
(
0
)
;
if
(
Objet1
==
NULL
)
return
(
-
1
)
;
if
(
Objet2
==
NULL
)
return
(
1
)
;
if
(
(
Objet1
->
m_Comp
==
NULL
)
&&
(
Objet2
->
m_Comp
==
NULL
)
)
return
(
0
)
;
if
(
Objet1
->
m_Comp
==
NULL
)
return
(
-
1
)
;
if
(
Objet2
->
m_Comp
==
NULL
)
return
(
1
)
;
Text1
=
&
(
Objet1
->
m_Comp
->
m_Field
[
VALUE
].
m_Text
);
Text2
=
&
(
Objet2
->
m_Comp
->
m_Field
[
VALUE
].
m_Text
);
ii
=
Text1
->
CmpNoCase
(
*
Text2
);
if
(
ii
==
0
)
{
ii
=
strcmp
(
Objet1
->
m_Ref
,
Objet2
->
m_Ref
);
}
if
(
ii
==
0
)
{
ii
=
Objet1
->
m_Comp
->
m_Multi
-
Objet2
->
m_Comp
->
m_Multi
;
}
return
(
ii
)
;
int
ii
;
const
wxString
*
Text1
,
*
Text2
;
if
(
(
Objet1
==
NULL
)
&&
(
Objet2
==
NULL
)
)
return
0
;
if
(
Objet1
==
NULL
)
return
-
1
;
if
(
Objet2
==
NULL
)
return
1
;
if
(
(
Objet1
->
m_Comp
==
NULL
)
&&
(
Objet2
->
m_Comp
==
NULL
)
)
return
0
;
if
(
Objet1
->
m_Comp
==
NULL
)
return
-
1
;
if
(
Objet2
->
m_Comp
==
NULL
)
return
1
;
Text1
=
&
(
Objet1
->
m_Comp
->
m_Field
[
VALUE
].
m_Text
);
Text2
=
&
(
Objet2
->
m_Comp
->
m_Field
[
VALUE
].
m_Text
);
ii
=
Text1
->
CmpNoCase
(
*
Text2
);
if
(
ii
==
0
)
{
ii
=
strcmp
(
Objet1
->
m_Ref
,
Objet2
->
m_Ref
);
}
if
(
ii
==
0
)
{
ii
=
Objet1
->
m_Comp
->
m_Multi
-
Objet2
->
m_Comp
->
m_Multi
;
}
return
ii
;
}
/**********************************************************/
static
int
ListTriComposantByRef
(
ListComponent
*
Objet1
,
ListComponent
*
Objet2
)
static
int
ListTriComposantByRef
(
ListComponent
*
Objet1
,
ListComponent
*
Objet2
)
/**********************************************************/
/* Routine de comparaison pour le tri du Tableau par qsort()
* Les composants sont tries
* par reference
...
...
@@ -932,413 +1015,427 @@ static int ListTriComposantByRef(ListComponent *Objet1,
* si meme valeur: par numero d'unite
*/
{
int
ii
;
const
wxString
*
Text1
,
*
Text2
;
if
(
(
Objet1
==
NULL
)
&&
(
Objet2
==
NULL
)
)
return
(
0
);
if
(
Objet1
==
NULL
)
return
(
-
1
);
if
(
Objet2
==
NULL
)
return
(
1
);
if
(
(
Objet1
->
m_Comp
==
NULL
)
&&
(
Objet2
->
m_Comp
==
NULL
)
)
return
(
0
);
if
(
Objet1
->
m_Comp
==
NULL
)
return
(
-
1
);
if
(
Objet2
->
m_Comp
==
NULL
)
return
(
1
);
ii
=
strcmp
(
Objet1
->
m_Ref
,
Objet2
->
m_Ref
);
if
(
ii
==
0
){
Text1
=
&
(
Objet1
->
m_Comp
->
m_Field
[
VALUE
].
m_Text
);
Text2
=
&
(
Objet2
->
m_Comp
->
m_Field
[
VALUE
].
m_Text
);
ii
=
Text1
->
CmpNoCase
(
*
Text2
);
}
if
(
ii
==
0
){
ii
=
Objet1
->
m_Comp
->
m_Multi
-
Objet2
->
m_Comp
->
m_Multi
;
}
return
(
ii
);
int
ii
;
const
wxString
*
Text1
,
*
Text2
;
if
(
(
Objet1
==
NULL
)
&&
(
Objet2
==
NULL
)
)
return
0
;
if
(
Objet1
==
NULL
)
return
-
1
;
if
(
Objet2
==
NULL
)
return
1
;
if
(
(
Objet1
->
m_Comp
==
NULL
)
&&
(
Objet2
->
m_Comp
==
NULL
)
)
return
0
;
if
(
Objet1
->
m_Comp
==
NULL
)
return
-
1
;
if
(
Objet2
->
m_Comp
==
NULL
)
return
1
;
ii
=
strcmp
(
Objet1
->
m_Ref
,
Objet2
->
m_Ref
);
if
(
ii
==
0
)
{
Text1
=
&
(
Objet1
->
m_Comp
->
m_Field
[
VALUE
].
m_Text
);
Text2
=
&
(
Objet2
->
m_Comp
->
m_Field
[
VALUE
].
m_Text
);
ii
=
Text1
->
CmpNoCase
(
*
Text2
);
}
if
(
ii
==
0
)
{
ii
=
Objet1
->
m_Comp
->
m_Multi
-
Objet2
->
m_Comp
->
m_Multi
;
}
return
ii
;
}
/******************************************************************/
static
int
ListTriGLabelByVal
(
ListLabel
*
Objet1
,
ListLabel
*
Objet2
)
static
int
ListTriGLabelByVal
(
ListLabel
*
Objet1
,
ListLabel
*
Objet2
)
/*******************************************************************/
/* Routine de comparaison pour le tri du Tableau par qsort()
* Les labels sont tries
* par comparaison ascii
* si meme valeur: par numero de sheet
*/
{
int
ii
;
const
wxString
*
Text1
,
*
Text2
;
int
ii
;
const
wxString
*
Text1
,
*
Text2
;
if
(
Objet1
->
m_LabelType
==
DRAW_SHEETLABEL_STRUCT_TYPE
)
Text1
=
&
((
DrawSheetLabelStruct
*
)
Objet1
->
m_Label
)
->
m_Text
;
else
Text1
=
&
((
DrawTextStruct
*
)
Objet1
->
m_Label
)
->
m_Text
;
if
(
Objet1
->
m_LabelType
==
DRAW_SHEETLABEL_STRUCT_TYPE
)
Text1
=
&
(
(
DrawSheetLabelStruct
*
)
Objet1
->
m_Label
)
->
m_Text
;
else
Text1
=
&
(
(
DrawTextStruct
*
)
Objet1
->
m_Label
)
->
m_Text
;
if
(
Objet2
->
m_LabelType
==
DRAW_SHEETLABEL_STRUCT_TYPE
)
Text2
=
&
((
DrawSheetLabelStruct
*
)
Objet2
->
m_Label
)
->
m_Text
;
else
Text2
=
&
((
DrawTextStruct
*
)
Objet2
->
m_Label
)
->
m_Text
;
if
(
Objet2
->
m_LabelType
==
DRAW_SHEETLABEL_STRUCT_TYPE
)
Text2
=
&
(
(
DrawSheetLabelStruct
*
)
Objet2
->
m_Label
)
->
m_Text
;
else
Text2
=
&
(
(
DrawTextStruct
*
)
Objet2
->
m_Label
)
->
m_Text
;
ii
=
Text1
->
CmpNoCase
(
*
Text2
);
ii
=
Text1
->
CmpNoCase
(
*
Text2
);
if
(
ii
==
0
)
{
ii
=
strcmp
(
Objet1
->
m_SheetPath
,
Objet2
->
m_SheetPath
);
}
if
(
ii
==
0
)
{
ii
=
strcmp
(
Objet1
->
m_SheetPath
,
Objet2
->
m_SheetPath
);
}
return
(
ii
)
;
return
ii
;
}
/*******************************************************************/
static
int
ListTriGLabelBySheet
(
ListLabel
*
Objet1
,
ListLabel
*
Objet2
)
static
int
ListTriGLabelBySheet
(
ListLabel
*
Objet1
,
ListLabel
*
Objet2
)
/*******************************************************************/
/* Routine de comparaison pour le tri du Tableau par qsort()
* Les labels sont tries
* par sheet number
* si meme valeur, par ordre alphabetique
*/
{
int
ii
;
const
wxString
*
Text1
,
*
Text2
;
int
ii
;
const
wxString
*
Text1
,
*
Text2
;
ii
=
strcmp
(
Objet1
->
m_SheetPath
,
Objet2
->
m_SheetPath
);
if
(
ii
==
0
)
{
if
(
Objet1
->
m_LabelType
==
DRAW_SHEETLABEL_STRUCT_TYPE
)
Text1
=
&
((
DrawSheetLabelStruct
*
)
Objet1
->
m_Label
)
->
m_Text
;
else
Text1
=
&
((
DrawTextStruct
*
)
Objet1
->
m_Label
)
->
m_Text
;
ii
=
strcmp
(
Objet1
->
m_SheetPath
,
Objet2
->
m_SheetPath
);
if
(
Objet2
->
m_LabelType
==
DRAW_SHEETLABEL_STRUCT_TYPE
)
Text2
=
&
((
DrawSheetLabelStruct
*
)
Objet2
->
m_Label
)
->
m_Text
;
else
Text2
=
&
((
DrawTextStruct
*
)
Objet2
->
m_Label
)
->
m_Text
;
if
(
ii
==
0
)
{
if
(
Objet1
->
m_LabelType
==
DRAW_SHEETLABEL_STRUCT_TYPE
)
Text1
=
&
(
(
DrawSheetLabelStruct
*
)
Objet1
->
m_Label
)
->
m_Text
;
else
Text1
=
&
(
(
DrawTextStruct
*
)
Objet1
->
m_Label
)
->
m_Text
;
ii
=
Text1
->
CmpNoCase
(
*
Text2
);
}
if
(
Objet2
->
m_LabelType
==
DRAW_SHEETLABEL_STRUCT_TYPE
)
Text2
=
&
(
(
DrawSheetLabelStruct
*
)
Objet2
->
m_Label
)
->
m_Text
;
else
Text2
=
&
(
(
DrawTextStruct
*
)
Objet2
->
m_Label
)
->
m_Text
;
return
(
ii
);
ii
=
Text1
->
CmpNoCase
(
*
Text2
);
}
return
ii
;
}
/**************************************************************/
static
void
DeleteSubCmp
(
ListComponent
*
List
,
int
NbItems
)
static
void
DeleteSubCmp
(
ListComponent
*
List
,
int
NbItems
)
/**************************************************************/
/* Remove sub components from the list, when multiples parts per package are found in this list
* The component list **MUST** be sorted by reference and by unit number
*/
{
int
ii
;
EDA_SchComponentStruct
*
LibItem
;
wxString
OldName
,
CurrName
;
for
(
ii
=
0
;
ii
<
NbItems
;
ii
++
)
{
LibItem
=
List
[
ii
].
m_Comp
;
if
(
LibItem
==
NULL
)
continue
;
CurrName
=
CONV_FROM_UTF8
(
List
[
ii
].
m_Ref
);
if
(
!
OldName
.
IsEmpty
()
)
{
if
(
OldName
==
CurrName
)
// CurrName is a subpart of OldName: remove it
{
List
[
ii
].
m_Comp
=
NULL
;
List
[
ii
].
m_SheetList
.
Clear
();
List
[
ii
].
m_Ref
[
0
]
=
0
;
}
}
OldName
=
CurrName
;
}
int
ii
;
EDA_SchComponentStruct
*
LibItem
;
wxString
OldName
,
CurrName
;
for
(
ii
=
0
;
ii
<
NbItems
;
ii
++
)
{
LibItem
=
List
[
ii
].
m_Comp
;
if
(
LibItem
==
NULL
)
continue
;
CurrName
=
CONV_FROM_UTF8
(
List
[
ii
].
m_Ref
);
if
(
!
OldName
.
IsEmpty
()
)
{
if
(
OldName
==
CurrName
)
// CurrName is a subpart of OldName: remove it
{
List
[
ii
].
m_Comp
=
NULL
;
List
[
ii
].
m_SheetList
.
Clear
();
List
[
ii
].
m_Ref
[
0
]
=
0
;
}
}
OldName
=
CurrName
;
}
}
/*******************************************************************************************/
void
WinEDA_Build_BOM_Frame
::
PrintFieldData
(
FILE
*
f
,
EDA_SchComponentStruct
*
DrawLibItem
,
bool
CompactForm
)
void
WinEDA_Build_BOM_Frame
::
PrintFieldData
(
FILE
*
f
,
EDA_SchComponentStruct
*
DrawLibItem
,
bool
CompactForm
)
/*******************************************************************************************/
{
wxCheckBox
*
FieldListCtrl
[
FIELD8
-
FIELD1
+
1
]
=
{
m_AddField1
,
m_AddField2
,
m_AddField3
,
m_AddField4
,
m_AddField5
,
m_AddField6
,
m_AddField7
,
m_AddField8
};
int
ii
;
wxCheckBox
*
FieldCtrl
=
FieldListCtrl
[
0
];
if
(
CompactForm
)
{
fprintf
(
f
,
"%c%s"
,
s_ExportSeparatorSymbol
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
FOOTPRINT
].
m_Text
)
);
}
for
(
ii
=
FIELD1
;
ii
<=
FIELD8
;
ii
++
)
{
FieldCtrl
=
FieldListCtrl
[
ii
-
FIELD1
];
if
(
FieldCtrl
==
NULL
)
continue
;
if
(
!
FieldCtrl
->
IsChecked
()
)
continue
;
if
(
CompactForm
)
fprintf
(
f
,
"%c%s"
,
s_ExportSeparatorSymbol
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
ii
].
m_Text
)
);
else
fprintf
(
f
,
"; %-12s"
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
ii
].
m_Text
)
);
}
wxCheckBox
*
FieldListCtrl
[
FIELD8
-
FIELD1
+
1
]
=
{
m_AddField1
,
m_AddField2
,
m_AddField3
,
m_AddField4
,
m_AddField5
,
m_AddField6
,
m_AddField7
,
m_AddField8
};
int
ii
;
wxCheckBox
*
FieldCtrl
=
FieldListCtrl
[
0
];
if
(
CompactForm
)
{
fprintf
(
f
,
"%c%s"
,
s_ExportSeparatorSymbol
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
FOOTPRINT
].
m_Text
)
);
}
for
(
ii
=
FIELD1
;
ii
<=
FIELD8
;
ii
++
)
{
FieldCtrl
=
FieldListCtrl
[
ii
-
FIELD1
];
if
(
FieldCtrl
==
NULL
)
continue
;
if
(
!
FieldCtrl
->
IsChecked
()
)
continue
;
if
(
CompactForm
)
fprintf
(
f
,
"%c%s"
,
s_ExportSeparatorSymbol
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
ii
].
m_Text
)
);
else
fprintf
(
f
,
"; %-12s"
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
ii
].
m_Text
)
);
}
}
/*********************************************************************************************/
int
WinEDA_Build_BOM_Frame
::
PrintListeCmpByRef
(
FILE
*
f
,
ListComponent
*
List
,
int
NbItems
,
bool
CompactForm
)
int
WinEDA_Build_BOM_Frame
::
PrintListeCmpByRef
(
FILE
*
f
,
ListComponent
*
List
,
int
NbItems
,
bool
CompactForm
)
/*********************************************************************************************/
/* Print the B.O.M sorted by reference
*/
{
int
ii
,
Multi
,
Unit
;
EDA_BaseStruct
*
DrawList
;
EDA_SchComponentStruct
*
DrawLibItem
;
EDA_LibComponentStruct
*
Entry
;
char
NameCmp
[
80
];
wxString
msg
;
if
(
CompactForm
)
{
fprintf
(
f
,
"ref%cvalue%csheet path%csheet name%cfootprint"
,
s_ExportSeparatorSymbol
,
s_ExportSeparatorSymbol
,
s_ExportSeparatorSymbol
,
s_ExportSeparatorSymbol
);
wxCheckBox
*
FieldListCtrl
[
FIELD8
-
FIELD1
+
1
]
=
{
m_AddField1
,
m_AddField2
,
m_AddField3
,
m_AddField4
,
m_AddField5
,
m_AddField6
,
m_AddField7
,
m_AddField8
};
for
(
ii
=
FIELD1
;
ii
<=
FIELD8
;
ii
++
)
{
wxCheckBox
*
FieldCtrl
=
FieldListCtrl
[
ii
-
FIELD1
];
if
(
FieldCtrl
==
NULL
)
continue
;
if
(
!
FieldCtrl
->
IsChecked
()
)
continue
;
msg
=
_
(
"Field"
);
fprintf
(
f
,
"%c%s%d"
,
s_ExportSeparatorSymbol
,
CONV_TO_UTF8
(
msg
),
ii
-
FIELD1
+
1
);
}
fprintf
(
f
,
"
\n
"
);
}
else
{
msg
=
_
(
"
\n
#Cmp ( order = Reference )"
);
int
ii
,
Multi
,
Unit
;
EDA_BaseStruct
*
DrawList
;
EDA_SchComponentStruct
*
DrawLibItem
;
EDA_LibComponentStruct
*
Entry
;
char
NameCmp
[
80
];
wxString
msg
;
if
(
CompactForm
)
{
wxCheckBox
*
FieldListCtrl
[
FIELD8
-
FIELD1
+
1
]
=
{
m_AddField1
,
m_AddField2
,
m_AddField3
,
m_AddField4
,
m_AddField5
,
m_AddField6
,
m_AddField7
,
m_AddField8
};
// Print comment line:
fprintf
(
f
,
"ref%cvalue"
,
s_ExportSeparatorSymbol
);
if
(
m_ListSubCmpItems
->
GetValue
()
)
fprintf
(
f
,
"%csheet path"
,
s_ExportSeparatorSymbol
);
fprintf
(
f
,
"%cfootprint"
,
s_ExportSeparatorSymbol
);
for
(
ii
=
FIELD1
;
ii
<=
FIELD8
;
ii
++
)
{
wxCheckBox
*
FieldCtrl
=
FieldListCtrl
[
ii
-
FIELD1
];
if
(
FieldCtrl
==
NULL
)
continue
;
if
(
!
FieldCtrl
->
IsChecked
()
)
continue
;
msg
=
_
(
"Field"
);
fprintf
(
f
,
"%c%s%d"
,
s_ExportSeparatorSymbol
,
CONV_TO_UTF8
(
msg
),
ii
-
FIELD1
+
1
);
}
fprintf
(
f
,
"
\n
"
);
}
else
{
msg
=
_
(
"
\n
#Cmp ( order = Reference )"
);
// if( s_ListWithSubCmponents )
if
(
m_ListSubCmpItems
->
GetValue
()
)
msg
<<
_
(
" (with SubCmp)"
);
fprintf
(
f
,
"%s
\n
"
,
CONV_TO_UTF8
(
msg
)
);
}
for
(
ii
=
0
;
ii
<
NbItems
;
ii
++
)
{
DrawList
=
List
[
ii
].
m_Comp
;
if
(
DrawList
==
NULL
)
continue
;
if
(
DrawList
->
Type
()
!=
DRAW_LIB_ITEM_STRUCT_TYPE
)
continue
;
DrawLibItem
=
(
EDA_SchComponentStruct
*
)
DrawList
;
if
(
List
[
ii
].
m_Ref
[
0
]
==
'#'
)
continue
;
Multi
=
0
;
Unit
=
' '
;
Entry
=
FindLibPart
(
DrawLibItem
->
m_ChipName
.
GetData
(),
wxEmptyString
,
FIND_ROOT
);
if
(
Entry
)
Multi
=
Entry
->
m_UnitCount
;
if
(
m_ListSubCmpItems
->
GetValue
()
)
msg
<<
_
(
" (with SubCmp)"
);
fprintf
(
f
,
"%s
\n
"
,
CONV_TO_UTF8
(
msg
)
);
}
// Print list of items
for
(
ii
=
0
;
ii
<
NbItems
;
ii
++
)
{
DrawList
=
List
[
ii
].
m_Comp
;
if
(
DrawList
==
NULL
)
continue
;
if
(
DrawList
->
Type
()
!=
DRAW_LIB_ITEM_STRUCT_TYPE
)
continue
;
DrawLibItem
=
(
EDA_SchComponentStruct
*
)
DrawList
;
if
(
List
[
ii
].
m_Ref
[
0
]
==
'#'
)
continue
;
Multi
=
0
;
Unit
=
' '
;
Entry
=
FindLibPart
(
DrawLibItem
->
m_ChipName
.
GetData
(),
wxEmptyString
,
FIND_ROOT
);
if
(
Entry
)
Multi
=
Entry
->
m_UnitCount
;
// if( ( Multi > 1 ) && s_ListWithSubCmponents )
if
(
(
Multi
>
1
)
&&
m_ListSubCmpItems
->
GetValue
()
)
Unit
=
DrawLibItem
->
m_Multi
+
'A'
-
1
;
if
(
(
Multi
>
1
)
&&
m_ListSubCmpItems
->
GetValue
()
)
Unit
=
DrawLibItem
->
m_Multi
+
'A'
-
1
;
sprintf
(
NameCmp
,
"%s"
,
List
[
ii
].
m_Ref
);
if
(
!
CompactForm
||
Unit
!=
' '
)
sprintf
(
NameCmp
+
strlen
(
NameCmp
),
"%c"
,
Unit
);
sprintf
(
NameCmp
,
"%s"
,
List
[
ii
].
m_Ref
);
if
(
!
CompactForm
||
Unit
!=
' '
)
sprintf
(
NameCmp
+
strlen
(
NameCmp
),
"%c"
,
Unit
);
if
(
CompactForm
)
fprintf
(
f
,
"%s%c%s"
,
NameCmp
,
s_ExportSeparatorSymbol
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
VALUE
].
m_Text
)
);
else
fprintf
(
f
,
"| %-10s %-12s"
,
NameCmp
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
VALUE
].
m_Text
)
);
if
(
CompactForm
)
fprintf
(
f
,
"%s%c%s"
,
NameCmp
,
s_ExportSeparatorSymbol
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
VALUE
].
m_Text
)
);
else
fprintf
(
f
,
"| %-10s %-12s"
,
NameCmp
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
VALUE
].
m_Text
)
);
// if( s_ListWithSubCmponents )
if
(
m_ListSubCmpItems
->
GetValue
()
)
{
SCH_SCREEN
*
screen
=
(
SCH_SCREEN
*
)(
DrawLibItem
->
m_Parent
);
wxString
sheetname
;
if
(
screen
&&
screen
->
Type
()
==
SCREEN_STRUCT_TYPE
)
sheetname
=
screen
->
m_FileName
;
else
sheetname
=
_
(
"?"
);
if
(
CompactForm
)
fprintf
(
f
,
"%c%s;%s"
,
s_ExportSeparatorSymbol
,
CONV_TO_UTF8
(
List
[
ii
].
m_SheetList
.
Path
()),
CONV_TO_UTF8
(
sheetname
));
else
fprintf
(
f
,
" (Sheet %s:
\"
%s
\"
)"
,
CONV_TO_UTF8
(
List
[
ii
].
m_SheetList
.
Path
()),
CONV_TO_UTF8
(
sheetname
));
}
PrintFieldData
(
f
,
DrawLibItem
,
CompactForm
);
fprintf
(
f
,
"
\n
"
);
}
if
(
!
CompactForm
)
{
msg
=
_
(
"#End Cmp
\n
"
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
));
}
return
(
0
);
if
(
m_ListSubCmpItems
->
GetValue
()
)
{
msg
=
List
[
ii
].
m_SheetList
.
PathHumanReadable
();
if
(
CompactForm
)
fprintf
(
f
,
"%c%s"
,
s_ExportSeparatorSymbol
,
CONV_TO_UTF8
(
msg
)
);
else
fprintf
(
f
,
" (Sheet %s)"
,
CONV_TO_UTF8
(
msg
)
);
}
PrintFieldData
(
f
,
DrawLibItem
,
CompactForm
);
fprintf
(
f
,
"
\n
"
);
}
if
(
!
CompactForm
)
{
msg
=
_
(
"#End Cmp
\n
"
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
)
);
}
return
0
;
}
/*********************************************************************************************/
int
WinEDA_Build_BOM_Frame
::
PrintListeCmpByVal
(
FILE
*
f
,
ListComponent
*
List
,
int
NbItems
)
int
WinEDA_Build_BOM_Frame
::
PrintListeCmpByVal
(
FILE
*
f
,
ListComponent
*
List
,
int
NbItems
)
/**********************************************************************************************/
{
int
ii
,
Multi
;
wxChar
Unit
;
EDA_BaseStruct
*
DrawList
;
EDA_SchComponentStruct
*
DrawLibItem
;
EDA_LibComponentStruct
*
Entry
;
wxString
msg
;
msg
=
_
(
"
\n
#Cmp ( order = Value )"
);
int
ii
,
Multi
;
wxChar
Unit
;
EDA_BaseStruct
*
DrawList
;
EDA_SchComponentStruct
*
DrawLibItem
;
EDA_LibComponentStruct
*
Entry
;
wxString
msg
;
msg
=
_
(
"
\n
#Cmp ( order = Value )"
);
// if( s_ListWithSubCmponents )
if
(
m_ListSubCmpItems
->
GetValue
()
)
msg
<<
_
(
" (with SubCmp)"
);
msg
<<
wxT
(
"
\n
"
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
));
for
(
ii
=
0
;
ii
<
NbItems
;
ii
++
)
{
DrawList
=
List
[
ii
].
m_Comp
;
if
(
DrawList
==
NULL
)
continue
;
if
(
DrawList
->
Type
()
!=
DRAW_LIB_ITEM_STRUCT_TYPE
)
continue
;
DrawLibItem
=
(
EDA_SchComponentStruct
*
)
DrawList
;
if
(
List
[
ii
].
m_Ref
[
0
]
==
'#'
)
continue
;
Multi
=
0
;
Unit
=
' '
;
Entry
=
FindLibPart
(
DrawLibItem
->
m_ChipName
.
GetData
(),
wxEmptyString
,
FIND_ROOT
);
if
(
Entry
)
Multi
=
Entry
->
m_UnitCount
;
if
(
m_ListSubCmpItems
->
GetValue
()
)
msg
<<
_
(
" (with SubCmp)"
);
msg
<<
wxT
(
"
\n
"
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
)
);
for
(
ii
=
0
;
ii
<
NbItems
;
ii
++
)
{
DrawList
=
List
[
ii
].
m_Comp
;
if
(
DrawList
==
NULL
)
continue
;
if
(
DrawList
->
Type
()
!=
DRAW_LIB_ITEM_STRUCT_TYPE
)
continue
;
DrawLibItem
=
(
EDA_SchComponentStruct
*
)
DrawList
;
if
(
List
[
ii
].
m_Ref
[
0
]
==
'#'
)
continue
;
Multi
=
0
;
Unit
=
' '
;
Entry
=
FindLibPart
(
DrawLibItem
->
m_ChipName
.
GetData
(),
wxEmptyString
,
FIND_ROOT
);
if
(
Entry
)
Multi
=
Entry
->
m_UnitCount
;
// if( ( Multi > 1 ) && s_ListWithSubCmponents )
if
(
(
Multi
>
1
)
&&
m_ListSubCmpItems
->
GetValue
()
){
Unit
=
DrawLibItem
->
m_Multi
+
'A'
-
1
;
}
fprintf
(
f
,
"| %-12s %-10s%c"
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
VALUE
].
m_Text
),
List
[
ii
].
m_Ref
,
Unit
);
if
(
(
Multi
>
1
)
&&
m_ListSubCmpItems
->
GetValue
()
)
{
Unit
=
DrawLibItem
->
m_Multi
+
'A'
-
1
;
}
fprintf
(
f
,
"| %-12s %-10s%c"
,
CONV_TO_UTF8
(
DrawLibItem
->
m_Field
[
VALUE
].
m_Text
),
List
[
ii
].
m_Ref
,
Unit
);
// if( s_ListWithSubCmponents )
if
(
m_ListSubCmpItems
->
GetValue
()
)
{
fprintf
(
f
,
" (Sheet %s)"
,
CONV_TO_UTF8
(
List
[
ii
].
m_SheetList
.
Path
())
);
}
PrintFieldData
(
f
,
DrawLibItem
);
fprintf
(
f
,
"
\n
"
);
}
msg
=
_
(
"#End Cmp
\n
"
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
));
return
(
0
);
// print the sheet path
if
(
m_ListSubCmpItems
->
GetValue
()
)
{
msg
=
List
[
ii
].
m_SheetList
.
PathHumanReadable
();
fprintf
(
f
,
" (Sheet %s)"
,
CONV_TO_UTF8
(
msg
)
);
}
PrintFieldData
(
f
,
DrawLibItem
);
fprintf
(
f
,
"
\n
"
);
}
msg
=
_
(
"#End Cmp
\n
"
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
)
);
return
0
;
}
/******************************************************************/
static
int
PrintListeGLabel
(
FILE
*
f
,
ListLabel
*
List
,
int
NbItems
)
static
int
PrintListeGLabel
(
FILE
*
f
,
ListLabel
*
List
,
int
NbItems
)
/******************************************************************/
{
int
ii
,
jj
;
DrawLabelStruct
*
DrawTextItem
;
DrawSheetLabelStruct
*
DrawSheetLabel
;
ListLabel
*
LabelItem
;
wxString
msg
;
char
str
[
64
];
for
(
ii
=
0
;
ii
<
NbItems
;
ii
++
)
{
LabelItem
=
&
List
[
ii
];
switch
(
LabelItem
->
m_LabelType
)
{
case
DRAW_HIER_LABEL_STRUCT_TYPE
:
case
DRAW_GLOBAL_LABEL_STRUCT_TYPE
:
DrawTextItem
=
(
DrawLabelStruct
*
)(
LabelItem
->
m_Label
);
if
(
LabelItem
->
m_LabelType
==
DRAW_HIER_LABEL_STRUCT_TYPE
)
strncpy
(
str
,
"Hierarchal"
,
sizeof
(
str
));
else
strncpy
(
str
,
"Global "
,
sizeof
(
str
));
msg
.
Printf
(
_
(
"> %-28.28s %s (Sheet %s) pos: %3.3f, %3.3f
\n
"
),
DrawTextItem
->
m_Text
.
GetData
(),
str
,
LabelItem
->
m_SheetPath
,
(
float
)
DrawTextItem
->
m_Pos
.
x
/
1000
,
(
float
)
DrawTextItem
->
m_Pos
.
y
/
1000
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
));
break
;
case
DRAW_SHEETLABEL_STRUCT_TYPE
:
{
DrawSheetLabel
=
(
DrawSheetLabelStruct
*
)
LabelItem
->
m_Label
;
jj
=
DrawSheetLabel
->
m_Shape
;
if
(
jj
<
0
)
jj
=
NET_TMAX
;
if
(
jj
>
NET_TMAX
)
jj
=
4
;
wxString
labtype
=
CONV_FROM_UTF8
(
SheetLabelType
[
jj
]);
msg
.
Printf
(
_
(
"> %-28.28s Sheet %-7.7s (Sheet %s) pos: %3.3f, %3.3f
\n
"
),
DrawSheetLabel
->
m_Text
.
GetData
(),
labtype
.
GetData
(),
LabelItem
->
m_SheetPath
,
(
float
)
DrawSheetLabel
->
m_Pos
.
x
/
1000
,
(
float
)
DrawSheetLabel
->
m_Pos
.
y
/
1000
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
));
}
break
;
default
:
break
;
}
}
msg
=
_
(
"#End labels
\n
"
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
));
return
(
0
);
int
ii
,
jj
;
DrawLabelStruct
*
DrawTextItem
;
DrawSheetLabelStruct
*
DrawSheetLabel
;
ListLabel
*
LabelItem
;
wxString
msg
;
char
str
[
64
];
for
(
ii
=
0
;
ii
<
NbItems
;
ii
++
)
{
LabelItem
=
&
List
[
ii
];
switch
(
LabelItem
->
m_LabelType
)
{
case
DRAW_HIER_LABEL_STRUCT_TYPE
:
case
DRAW_GLOBAL_LABEL_STRUCT_TYPE
:
DrawTextItem
=
(
DrawLabelStruct
*
)
(
LabelItem
->
m_Label
);
if
(
LabelItem
->
m_LabelType
==
DRAW_HIER_LABEL_STRUCT_TYPE
)
strncpy
(
str
,
"Hierarchical"
,
sizeof
(
str
)
);
else
strncpy
(
str
,
"Global "
,
sizeof
(
str
)
);
msg
.
Printf
(
_
(
"> %-28.28s %s (Sheet %s) pos: %3.3f, %3.3f
\n
"
),
DrawTextItem
->
m_Text
.
GetData
(),
str
,
LabelItem
->
m_SheetPath
,
(
float
)
DrawTextItem
->
m_Pos
.
x
/
1000
,
(
float
)
DrawTextItem
->
m_Pos
.
y
/
1000
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
)
);
break
;
case
DRAW_SHEETLABEL_STRUCT_TYPE
:
{
DrawSheetLabel
=
(
DrawSheetLabelStruct
*
)
LabelItem
->
m_Label
;
jj
=
DrawSheetLabel
->
m_Shape
;
if
(
jj
<
0
)
jj
=
NET_TMAX
;
if
(
jj
>
NET_TMAX
)
jj
=
4
;
wxString
labtype
=
CONV_FROM_UTF8
(
SheetLabelType
[
jj
]
);
msg
.
Printf
(
_
(
"> %-28.28s Sheet %-7.7s (Sheet %s) pos: %3.3f, %3.3f
\n
"
),
DrawSheetLabel
->
m_Text
.
GetData
(),
labtype
.
GetData
(),
LabelItem
->
m_SheetPath
,
(
float
)
DrawSheetLabel
->
m_Pos
.
x
/
1000
,
(
float
)
DrawSheetLabel
->
m_Pos
.
y
/
1000
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
)
);
}
break
;
default
:
break
;
}
}
msg
=
_
(
"#End labels
\n
"
);
fprintf
(
f
,
CONV_TO_UTF8
(
msg
)
);
return
0
;
}
eeschema/netlist.h
View file @
e2abaa81
...
...
@@ -95,7 +95,7 @@ typedef struct ListLabel
{
int
m_LabelType
;
void
*
m_Label
;
char
m_SheetPath
[
32
];
char
m_SheetPath
[
64
];
}
ListLabel
;
typedef
struct
ListComponent
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment