Commit d6af27a3 authored by charras's avatar charras

eeschema: enforce time stamp control and repairs bad time stamps in annotation.

parent b9ba67c8
...@@ -4,6 +4,12 @@ KiCad ChangeLog 2009 ...@@ -4,6 +4,12 @@ KiCad ChangeLog 2009
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2009-apr-25 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================
++ Eeschema:
When annotating: tests and repairs bad (duplicated) time stamps.
Can be found in old schematics or converted from others tools ...
2009-apr-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr> 2009-apr-24 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================ ================================================================================
++Pcbnew: ++Pcbnew:
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>CFBundleDisplayName</key> <key>CFBundleDocumentTypes</key>
<string>cvpcb</string> <array>
<dict>
<key>CFBundleTypeIconFile</key>
<string>cvpcb_doc.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>net</string>
</array>
<key>CFBundleTypeName</key>
<string>cvpcb document</string>
<key>LSHandlerRank</key>
<string>Owner</string>
</dict>
</array>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>cvpcb</string> <string>cvpcb</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string>cvpcb.icns</string> <string>cvpcb.icns</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>org.kicad-eda.cvpcb</string> <string>org.kicad-eda.cvpcb</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleLongVersionString</key>
<string></string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>Cvpcb</string> <string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string></string>
<key>CSResourcesFileMapped</key>
<true/>
<key>LSRequiresCarbon</key> <key>LSRequiresCarbon</key>
<true/> <true/>
<key>NSHumanReadableCopyright</key>
<string></string>
</dict> </dict>
</plist> </plist>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>CFBundleDisplayName</key>
<array/>
<key>CFBundleDocumentTypes</key> <key>CFBundleDocumentTypes</key>
<array> <array>
<dict> <dict>
...@@ -12,18 +10,42 @@ ...@@ -12,18 +10,42 @@
<string>sch</string> <string>sch</string>
</array> </array>
<key>CFBundleTypeIconFile</key> <key>CFBundleTypeIconFile</key>
<string>file_sch.icns</string> <string>eeschema_doc.icns</string>
<key>CFBundleTypeName</key>
<string>eeschema document</string>
<key>LSHandlerRank</key>
<string>Owner</string>
</dict> </dict>
</array> </array>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>eeschema</string> <string>eeschema</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string>eeschema.icns</string> <string>eeschema.icns</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>org.kicad-eda.eeschema</string> <string>org.kicad-eda.eeschema</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleLongVersionString</key>
<string></string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>Schematics</string> <string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string></string>
<key>CSResourcesFileMapped</key>
<true/>
<key>LSRequiresCarbon</key> <key>LSRequiresCarbon</key>
<true/> <true/>
<key>NSHumanReadableCopyright</key>
<string></string>
</dict> </dict>
</plist> </plist>
...@@ -26,6 +26,7 @@ int GetLastReferenceNumber( int aObjet, ...@@ -26,6 +26,7 @@ int GetLastReferenceNumber( int aObjet,
std::vector <OBJ_CMP_TO_LIST>& aComponentsList ); std::vector <OBJ_CMP_TO_LIST>& aComponentsList );
static int ExistUnit( int aObjet, int aUnit, static int ExistUnit( int aObjet, int aUnit,
std::vector <OBJ_CMP_TO_LIST>& aComponentsList ); std::vector <OBJ_CMP_TO_LIST>& aComponentsList );
static int ReplaceDuplicatedTimeStamps();
/******************************************************/ /******************************************************/
...@@ -175,6 +176,21 @@ static bool AnnotateByValue( const OBJ_CMP_TO_LIST& item1, const OBJ_CMP_TO_LIST ...@@ -175,6 +176,21 @@ static bool AnnotateByValue( const OBJ_CMP_TO_LIST& item1, const OBJ_CMP_TO_LIST
} }
/*****************************************************************************
* qsort function to annotate items by value
* Components are sorted by time stamp
*****************************************************************************/
static bool SortByTimeStamp( const OBJ_CMP_TO_LIST& item1, const OBJ_CMP_TO_LIST& item2 )
{
int ii = item1.m_SheetPath.Cmp( item2.m_SheetPath );
if( ii == 0 )
ii = item1.m_TimeStamp - item2.m_TimeStamp;
return ii < 0;
}
/**************************************************************************************/ /**************************************************************************************/
void WinEDA_SchematicFrame::DeleteAnnotation( bool aCurrentSheetOnly, bool aRedraw ) void WinEDA_SchematicFrame::DeleteAnnotation( bool aCurrentSheetOnly, bool aRedraw )
/**************************************************************************************/ /**************************************************************************************/
...@@ -237,16 +253,33 @@ void WinEDA_SchematicFrame::DeleteAnnotation( bool aCurrentSheetOnly, bool aRedr ...@@ -237,16 +253,33 @@ void WinEDA_SchematicFrame::DeleteAnnotation( bool aCurrentSheetOnly, bool aRedr
* 1 = annotate by sorting Y position, * 1 = annotate by sorting Y position,
* 2 = annotate by sorting value * 2 = annotate by sorting value
* @param resetAnnotation : true = remove previous annotation false = anotate new components only * @param resetAnnotation : true = remove previous annotation false = anotate new components only
* @param repairsTimestamps : true = test for duplicate times stamps and replace duplicated
* Note: this option could change previous annotation, because time stamps are used to handle annotation
* mainly in complex hierarchies.
*****************************************************************************/ *****************************************************************************/
void AnnotateComponents( WinEDA_SchematicFrame* parent, void AnnotateComponents( WinEDA_SchematicFrame* parent,
bool annotateSchematic, bool annotateSchematic,
int sortOption, int sortOption,
bool resetAnnotation ) bool resetAnnotation,
bool repairsTimestamps )
{ {
std::vector <OBJ_CMP_TO_LIST> ComponentsList; std::vector <OBJ_CMP_TO_LIST> ComponentsList;
wxBusyCursor dummy; wxBusyCursor dummy;
// Test and replace duplicte time stamps
// duplicate can happen with old schematics, or schematic conversions or manual editions of files ...
if( repairsTimestamps )
{
int ireplacecount = ReplaceDuplicatedTimeStamps();
if ( ireplacecount )
{
wxString msg;
msg.Printf(_("%d Duplicate Time stamps replaced"), ireplacecount);
DisplayInfoMessage( NULL, msg, 2);
}
}
/* If it is an annotation for all the components, reset previous /* If it is an annotation for all the components, reset previous
* annotation: */ * annotation: */
if( resetAnnotation ) if( resetAnnotation )
...@@ -301,13 +334,15 @@ void AnnotateComponents( WinEDA_SchematicFrame* parent, ...@@ -301,13 +334,15 @@ void AnnotateComponents( WinEDA_SchematicFrame* parent,
/*******************************************************************************************************/ /*******************************************************************************************************/
int AddComponentsInSheetToList( std::vector <OBJ_CMP_TO_LIST>& aComponentsList, DrawSheetPath* aSheet ) int AddComponentsInSheetToList( std::vector <OBJ_CMP_TO_LIST>& aComponentsList,
DrawSheetPath* aSheet )
/********************************************************************************************************/ /********************************************************************************************************/
/** function AddComponentsInSheetToList() /** function AddComponentsInSheetToList()
* Add a OBJ_CMP_TO_LIST object in aComponentsList for each component found in sheet * Add a OBJ_CMP_TO_LIST object in aComponentsList for each component found in sheet
* @param aComponentsList = a std::vector list to fill * @param aComponentsList = a std::vector list to fill
* @param the DrawSheetPath sheet to analyse * @param the DrawSheetPath sheet to analyse
*/ */
{ {
int NbrCmp = 0; int NbrCmp = 0;
EDA_BaseStruct* DrawList = aSheet->LastDrawList(); EDA_BaseStruct* DrawList = aSheet->LastDrawList();
...@@ -699,7 +734,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) ...@@ -699,7 +734,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly )
msg.Empty(); msg.Empty();
Buff.Empty(); Buff.Empty();
if( (ComponentsList[ii].CompareRef(ComponentsList[ii + 1]) != 0) if( (ComponentsList[ii].CompareRef( ComponentsList[ii + 1] ) != 0)
|| ( ComponentsList[ii].m_NumRef != ComponentsList[ii + 1].m_NumRef ) ) || ( ComponentsList[ii].m_NumRef != ComponentsList[ii + 1].m_NumRef ) )
continue; continue;
...@@ -750,13 +785,13 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) ...@@ -750,13 +785,13 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly )
} }
/* Error if values are different between units, for the same reference */ /* Error if values are different between units, for the same reference */
int next = ii+1; int next = ii + 1;
if( ComponentsList[ii].CompareValue( ComponentsList[next] ) != 0 ) if( ComponentsList[ii].CompareValue( ComponentsList[next] ) != 0 )
{ {
wxString nextcmpref; wxString nextcmpref;
cmpref = CONV_FROM_UTF8( ComponentsList[ii].m_Reference ); cmpref = CONV_FROM_UTF8( ComponentsList[ii].m_Reference );
nextcmpref = CONV_FROM_UTF8( ComponentsList[next].m_Reference ); nextcmpref = CONV_FROM_UTF8( ComponentsList[next].m_Reference );
#if defined (KICAD_GOST) #if defined(KICAD_GOST)
msg.Printf( _( "Diff values for %s%d.%c (%s) and %s%d.%c (%s)" ), msg.Printf( _( "Diff values for %s%d.%c (%s) and %s%d.%c (%s)" ),
cmpref.GetData(), cmpref.GetData(),
ComponentsList[ii].m_NumRef, ComponentsList[ii].m_NumRef,
...@@ -781,5 +816,105 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) ...@@ -781,5 +816,105 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly )
} }
} }
// count the duplicated time stamps
sort( ComponentsList.begin(), ComponentsList.end(), SortByTimeStamp );
for( int ii = 0; (ii < imax) && (error < 4); ii++ )
{
if( (ComponentsList[ii].m_TimeStamp != ComponentsList[ii + 1].m_TimeStamp)
|| ( ComponentsList[ii].m_SheetPath != ComponentsList[ii + 1].m_SheetPath ) )
continue;
/* Same time stamp found. */
wxString nextcmpref;
wxString full_path;
full_path.Printf( wxT( "%s%8.8X" ),
ComponentsList[ii].m_SheetPath.Path().GetData(),
ComponentsList[ii].m_TimeStamp );
cmpref = CONV_FROM_UTF8( ComponentsList[ii].m_Reference );
nextcmpref = CONV_FROM_UTF8( ComponentsList[ii + 1].m_Reference );
msg.Printf( _( "duplicate time stamp (%s) for %s%d and %s%d" ),
full_path.GetData(),
cmpref.GetData(), ComponentsList[ii].m_NumRef,
nextcmpref.GetData(), ComponentsList[ii + 1].m_NumRef );
DisplayError( frame, msg );
error++;
}
return error; return error;
} }
/***********************************************
* function to sort sch_items by time stamp
************************************************/
static bool SortItemByTimeStamp( const SCH_ITEM* item1, const SCH_ITEM* item2 )
{
int ii = item1->m_TimeStamp - item2->m_TimeStamp;
/* if same time stamp, compare type, in order to have
* first : component
* after : sheet
* because this is the first item that have its time stamp changed
* and changing the time stamp of a sheet can loose annotation
*/
if( ii == 0 && ( item1->Type() != item2->Type()) )
if ( item1->Type() == DRAW_SHEET_STRUCT_TYPE )
ii = -1;
return ii < 0;
}
/** Function ReplaceDuplicatedTimeStamps
* Search for duplicate time stamps in the whole hierarchy, and replace duplicae by new time stamps
*/
int ReplaceDuplicatedTimeStamps()
{
/* Build the whole screen list */
EDA_ScreenList ScreenList;
/* Build the list of items with time stamps (components and sheets)
* note: if all items have a different time stamp, this ensure also different paths in complex hierarchy
* this is the reason we have differant time stamps for components AND sheets
*/
std::vector <SCH_ITEM*> itemlist;
SCH_SCREEN* screen;
SCH_ITEM* item;
for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() )
{
item = screen->EEDrawList;
while( item )
{
if( (item->Type() == DRAW_SHEET_STRUCT_TYPE)
|| (item->Type() == TYPE_SCH_COMPONENT) )
itemlist.push_back( item );
item = item->Next();
}
}
// Test and replace duplicated time stamps
int imax = itemlist.size() - 1;
int errcount = 0;
sort( itemlist.begin(), itemlist.end(), SortItemByTimeStamp );
for( int ii = 0; ii < imax; ii++ )
{
item = itemlist[ii];
SCH_ITEM* nextitem = itemlist[ii + 1];
if( item->m_TimeStamp == nextitem->m_TimeStamp )
{
errcount++;
// for a component, update its Time stamp and its paths (m_PathsAndReferences field)
if (item->Type() == TYPE_SCH_COMPONENT )
((SCH_COMPONENT*) item)->SetTimeStamp( GetTimeStamp());
// for a sheet, update only its time stamp (annotation of its components will be lost)
// TODO: see how to change sheet paths for its cmp list (can be possible in most cases)
else
item->m_TimeStamp = GetTimeStamp();
}
}
return errcount;
}
...@@ -28,7 +28,8 @@ ...@@ -28,7 +28,8 @@
extern void AnnotateComponents( WinEDA_SchematicFrame* parent, extern void AnnotateComponents( WinEDA_SchematicFrame* parent,
bool annotateSchematic, bool annotateSchematic,
int sortOption, int sortOption,
bool resetAnnotation ); bool resetAnnotation,
bool repairsTimestamps );
////@begin XPM images ////@begin XPM images
////@end XPM images ////@end XPM images
...@@ -261,7 +262,7 @@ void WinEDA_AnnotateFrame::OnApplyClick( wxCommandEvent& event ) ...@@ -261,7 +262,7 @@ void WinEDA_AnnotateFrame::OnApplyClick( wxCommandEvent& event )
if (response == wxCANCEL) if (response == wxCANCEL)
return; return;
AnnotateComponents( m_Parent, GetLevel(), GetSortOrder(), AnnotateComponents( m_Parent, GetLevel(), GetSortOrder(),
GetResetItems() ); GetResetItems() , true );
m_btnClear->Enable(); m_btnClear->Enable();
} }
......
...@@ -83,7 +83,6 @@ void DIALOG_BUILD_BOM::Create_BOM_Lists( bool aTypeFileIsExport, ...@@ -83,7 +83,6 @@ void DIALOG_BUILD_BOM::Create_BOM_Lists( bool aTypeFileIsExport,
/**************************************************************************/ /**************************************************************************/
{ {
wxFileName fn; wxFileName fn;
wxString mask, filename;
s_ExportSeparatorSymbol = aExportSeparatorSymbol; s_ExportSeparatorSymbol = aExportSeparatorSymbol;
...@@ -112,6 +111,7 @@ void DIALOG_BUILD_BOM::Create_BOM_Lists( bool aTypeFileIsExport, ...@@ -112,6 +111,7 @@ void DIALOG_BUILD_BOM::Create_BOM_Lists( bool aTypeFileIsExport,
if( aRunBrowser ) if( aRunBrowser )
{ {
wxString editorname = wxGetApp().GetEditorName(); wxString editorname = wxGetApp().GetEditorName();
wxString filename = m_ListFileName;
AddDelimiterString( filename ); AddDelimiterString( filename );
ExecuteFile( this, editorname, filename ); ExecuteFile( this, editorname, filename );
} }
...@@ -542,7 +542,7 @@ void DIALOG_BUILD_BOM::PrintFieldData( FILE* f, SCH_COMPONENT* DrawLibItem, ...@@ -542,7 +542,7 @@ void DIALOG_BUILD_BOM::PrintFieldData( FILE* f, SCH_COMPONENT* DrawLibItem,
for( ii = FIELD1; ii < DrawLibItem->GetFieldCount(); ii++ ) for( ii = FIELD1; ii < DrawLibItem->GetFieldCount(); ii++ )
{ {
if ( ii <= FIELD8 ) // see users fields 1 to 8 if( ii <= FIELD8 ) // see users fields 1 to 8
{ {
FieldCtrl = FieldListCtrl[ii - FIELD1]; FieldCtrl = FieldListCtrl[ii - FIELD1];
if( FieldCtrl == NULL ) if( FieldCtrl == NULL )
...@@ -552,7 +552,7 @@ void DIALOG_BUILD_BOM::PrintFieldData( FILE* f, SCH_COMPONENT* DrawLibItem, ...@@ -552,7 +552,7 @@ void DIALOG_BUILD_BOM::PrintFieldData( FILE* f, SCH_COMPONENT* DrawLibItem,
continue; continue;
} }
if( ! m_AddAllFields->IsChecked() ) if( !m_AddAllFields->IsChecked() )
break; break;
...@@ -570,8 +570,7 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef( ...@@ -570,8 +570,7 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef(
FILE* f, FILE* f,
std::vector <OBJ_CMP_TO_LIST>& aList, std::vector <OBJ_CMP_TO_LIST>& aList,
bool CompactForm, bool CompactForm,
bool bool aIncludeSubComponents )
aIncludeSubComponents )
/*********************************************************************************************/ /*********************************************************************************************/
/* Print the B.O.M sorted by reference /* Print the B.O.M sorted by reference
...@@ -657,9 +656,13 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef( ...@@ -657,9 +656,13 @@ int DIALOG_BUILD_BOM::PrintComponentsListByRef(
if( ( Multi > 1 ) && aIncludeSubComponents ) if( ( Multi > 1 ) && aIncludeSubComponents )
#if defined (KICAD_GOST) #if defined (KICAD_GOST)
Unit = aList[ii].m_Unit + '1' - 1; Unit = aList[ii].m_Unit + '1' - 1;
#else #else
Unit = aList[ii].m_Unit + 'A' - 1; Unit = aList[ii].m_Unit + 'A' - 1;
#endif #endif
......
...@@ -415,6 +415,23 @@ void SCH_COMPONENT::SetRef( DrawSheetPath* sheet, const wxString& ref ) ...@@ -415,6 +415,23 @@ void SCH_COMPONENT::SetRef( DrawSheetPath* sheet, const wxString& ref )
rf->m_Text = ref; // for drawing. rf->m_Text = ref; // for drawing.
} }
/** function SetTimeStamp
* Change the old time stamp to the new time stamp.
* the time stamp is also modified in paths
* @param aNewTimeStamp = new time stamp
*/
void SCH_COMPONENT::SetTimeStamp( long aNewTimeStamp)
{
wxString string_timestamp, string_oldtimestamp;
string_timestamp.Printf(wxT("%8.8X"), aNewTimeStamp);
string_oldtimestamp.Printf(wxT("%8.8X"), m_TimeStamp);
m_TimeStamp = aNewTimeStamp;
for( unsigned ii = 0; ii < m_PathsAndReferences.GetCount(); ii++ )
{
m_PathsAndReferences[ii].Replace(string_oldtimestamp.GetData(), string_timestamp.GetData());
}
}
/***********************************************************/ /***********************************************************/
//returns the unit selection, for the given sheet path. //returns the unit selection, for the given sheet path.
......
...@@ -112,8 +112,7 @@ private: ...@@ -112,8 +112,7 @@ private:
* with: * with:
* path = /<timestamp1>/<timestamp2> (subsheet path, = / for the root scheet) * path = /<timestamp1>/<timestamp2> (subsheet path, = / for the root scheet)
* reference = reference for this path (C23, R5, U78 ... ) * reference = reference for this path (C23, R5, U78 ... )
* multi = part selection in multi parts per package (0 or 1 for àne part * multi = part selection in multi parts per package (0 or 1 for one part per package)
* per package)
*/ */
wxArrayString m_PathsAndReferences; wxArrayString m_PathsAndReferences;
...@@ -193,6 +192,13 @@ public: ...@@ -193,6 +192,13 @@ public:
*/ */
void ClearAnnotation( DrawSheetPath* aSheet ); void ClearAnnotation( DrawSheetPath* aSheet );
/** function SetTimeStamp
* Change the old time stamp to the new time stamp.
* the time stamp is also modified in paths
* @param aNewTimeStamp = new time stamp
*/
void SetTimeStamp( long aNewTimeStamp);
EDA_Rect GetBoundaryBox() const; EDA_Rect GetBoundaryBox() const;
EDA_Rect GetBoundingBox(); EDA_Rect GetBoundingBox();
......
...@@ -474,7 +474,7 @@ void WinEDA_NetlistFrame::GenNetlist( wxCommandEvent& event ) ...@@ -474,7 +474,7 @@ void WinEDA_NetlistFrame::GenNetlist( wxCommandEvent& event )
wxFileDialog dlg( this, _( "Save Netlist Files" ), fn.GetPath(), wxFileDialog dlg( this, _( "Save Netlist Files" ), fn.GetPath(),
fn.GetFullName(), FileWildcard, fn.GetFullName(), FileWildcard,
wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); wxFD_SAVE /*| wxFD_OVERWRITE_PROMPT*/ );
if( dlg.ShowModal() == wxID_CANCEL ) if( dlg.ShowModal() == wxID_CANCEL )
return; return;
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>CFBundleDisplayName</key> <key>CFBundleDocumentTypes</key>
<string>gerbview</string> <array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>pen</string>
<string>gbr</string>
<string>gbx</string>
<string>lgr</string>
<string>ger</string>
<string>pho</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>gerbview_doc.icns</string>
<key>CFBundleTypeName</key>
<string>gerbview document</string>
<key>LSHandlerRank</key>
<string>Default</string>
</dict>
</array>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>gerbview</string> <string>gerbview</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string>gerbview.icns</string> <string>gerbview.icns</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>org.kicad-eda.gerbview</string> <string>org.kicad-eda.gerbview</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleLongVersionString</key>
<string></string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>Gerbview</string> <string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string></string>
<key>CSResourcesFileMapped</key>
<true/>
<key>LSRequiresCarbon</key> <key>LSRequiresCarbon</key>
<true/> <true/>
<key>NSHumanReadableCopyright</key>
<string></string>
</dict> </dict>
</plist> </plist>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>CFBundleDisplayName</key>
<string>Kicad Project Manager</string>
<key>CFBundleDocumentTypes</key> <key>CFBundleDocumentTypes</key>
<array> <array>
<dict> <dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>pro</string>
</array>
<key>CFBundleTypeIconFile</key> <key>CFBundleTypeIconFile</key>
<string>file_pro.icns</string> <string>kicad_doc.icns</string>
<key>CFBundleTypeName</key>
<string>kicad project files</string>
<key>LSHandlerRank</key>
<string>Owner</string>
</dict> </dict>
</array> </array>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>kicad</string> <string>kicad</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string>kicad.icns</string> <string>kicad.icns</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>org.kicad-eda.kicad</string> <string>org.kicad-eda.kicad</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleLongVersionString</key>
<string></string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>Kicad</string> <string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string></string>
<key>CSResourcesFileMapped</key>
<true/>
<key>LSRequiresCarbon</key> <key>LSRequiresCarbon</key>
<true/> <true/>
<key>NSHumanReadableCopyright</key>
<string></string>
</dict> </dict>
</plist> </plist>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>CFBundleDisplayName</key> <key>CFBundleDocumentTypes</key>
<string>Pcb Router</string> <array>
<dict>
<key>CFBundleTypeIconFile</key>
<string>pcbnew_doc.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>brd</string>
</array>
<key>CFBundleTypeName</key>
<string>pcbnew board</string>
<key>LSHandlerRank</key>
<string>Owner</string>
</dict>
</array>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>pcbnew</string> <string>pcbnew</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string>pcbnew.icns</string> <string>pcbnew.icns</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>org.kicad-eda.pcbnew</string> <string>org.kicad-eda.pcbnew</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleLongVersionString</key>
<string></string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>pcbnew</string> <string>pcbnew</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string></string>
<key>CSResourcesFileMapped</key>
<true/>
<key>LSRequiresCarbon</key> <key>LSRequiresCarbon</key>
<true/> <true/>
<key>NSHumanReadableCopyright</key>
<string></string>
</dict> </dict>
</plist> </plist>
...@@ -63,7 +63,7 @@ void WinEDA_PcbFrame::RecreateBOMFileFromBoard( wxCommandEvent& aEvent ) ...@@ -63,7 +63,7 @@ void WinEDA_PcbFrame::RecreateBOMFileFromBoard( wxCommandEvent& aEvent )
fn = GetScreen()->m_FileName; fn = GetScreen()->m_FileName;
fn.SetExt( CsvFileExtension ); fn.SetExt( CsvFileExtension );
wxFileDialog dlg( this, _( "Save Bill of Materials" ), wxEmptyString, wxFileDialog dlg( this, _( "Save Bill of Materials" ), wxGetCwd(),
fn.GetFullName(), CsvFileWildcard, fn.GetFullName(), CsvFileWildcard,
wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
......
...@@ -82,7 +82,7 @@ DIALOG_NETLIST_FBP::DIALOG_NETLIST_FBP( wxWindow* parent, wxWindowID id, const w ...@@ -82,7 +82,7 @@ DIALOG_NETLIST_FBP::DIALOG_NETLIST_FBP( wxWindow* parent, wxWindowID id, const w
bRightSizerButtons->Add( m_button4, 0, wxALL|wxEXPAND, 5 ); bRightSizerButtons->Add( m_button4, 0, wxALL|wxEXPAND, 5 );
m_button5 = new wxButton( this, wxID_ANY, _("Close"), wxDefaultPosition, wxDefaultSize, 0 ); m_button5 = new wxButton( this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
bRightSizerButtons->Add( m_button5, 0, wxALL|wxEXPAND, 5 ); bRightSizerButtons->Add( m_button5, 0, wxALL|wxEXPAND, 5 );
bUpperSizer->Add( bRightSizerButtons, 0, wxALIGN_CENTER_VERTICAL, 5 ); bUpperSizer->Add( bRightSizerButtons, 0, wxALIGN_CENTER_VERTICAL, 5 );
......
...@@ -551,7 +551,7 @@ ...@@ -551,7 +551,7 @@
<property name="fg"></property> <property name="fg"></property>
<property name="font"></property> <property name="font"></property>
<property name="hidden">0</property> <property name="hidden">0</property>
<property name="id">wxID_ANY</property> <property name="id">wxID_CANCEL</property>
<property name="label">Close</property> <property name="label">Close</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="minimum_size"></property> <property name="minimum_size"></property>
......
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