diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index 8981202593..e193aaf026 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -16,6 +16,7 @@ set(EESCHEMA_SRCS class_hierarchical_PIN_sheet.cpp class_pin.cpp class_library.cpp + class_sch_cmp_field.cpp class_schematic_items.cpp class_screen.cpp class_text-label.cpp diff --git a/eeschema/class_sch_cmp_field.cpp b/eeschema/class_sch_cmp_field.cpp new file mode 100644 index 0000000000..8214c338e4 --- /dev/null +++ b/eeschema/class_sch_cmp_field.cpp @@ -0,0 +1,253 @@ +/***********************************************************************/ +/* component_class.cpp : handle the class SCH_COMPONENT */ +/***********************************************************************/ + +#include "fctsys.h" +#include "gr_basic.h" + +#include "common.h" +#include "program.h" +#include "libcmp.h" +#include "general.h" +#include "macros.h" + +#include "protos.h" + + +/***************************************************************************/ +SCH_CMP_FIELD::SCH_CMP_FIELD( const wxPoint& pos, const wxString& text ) : + SCH_ITEM( NULL, DRAW_PART_TEXT_STRUCT_TYPE ), + EDA_TextStruct( text ) +/***************************************************************************/ +{ + m_Pos = pos; + m_FieldId = 0; + m_AddExtraText = false; +} + + +/************************************/ +SCH_CMP_FIELD::~SCH_CMP_FIELD() +/************************************/ +{ +} + + +/**************************************************************************/ +void SCH_CMP_FIELD::SwapData( SCH_CMP_FIELD* copyitem ) +/**************************************************************************/ + +/* Used if undo / redo command: + * swap data between this and copyitem + */ +{ + EXCHG( m_Text, copyitem->m_Text ); + EXCHG( m_Layer, copyitem->m_Layer ); + EXCHG( m_Pos, copyitem->m_Pos ); + EXCHG( m_Size, copyitem->m_Size ); + EXCHG( m_Width, copyitem->m_Width ); + EXCHG( m_Orient, copyitem->m_Orient ); + EXCHG( m_Miroir, copyitem->m_Miroir ); + EXCHG( m_Attributs, copyitem->m_Attributs ); + EXCHG( m_CharType, copyitem->m_CharType ); + EXCHG( m_HJustify, copyitem->m_HJustify ); + EXCHG( m_VJustify, copyitem->m_VJustify ); + EXCHG( m_ZoomLevelDrawable, copyitem->m_ZoomLevelDrawable ); + EXCHG( m_TextDrawings, copyitem->m_TextDrawings ); + EXCHG( m_TextDrawingsSize, copyitem->m_TextDrawingsSize ); +} + + +/***********************************************************/ +void SCH_CMP_FIELD::PartTextCopy( SCH_CMP_FIELD* target ) +/***********************************************************/ +{ + target->m_Text = m_Text; + if( m_FieldId >= FIELD1 ) + target->m_Name = m_Name; + target->m_Layer = m_Layer; + target->m_Pos = m_Pos; + target->m_Size = m_Size; + target->m_Attributs = m_Attributs; + target->m_FieldId = m_FieldId; + target->m_Orient = m_Orient; + target->m_HJustify = m_HJustify; + target->m_VJustify = m_VJustify; + target->m_Flags = m_Flags; +} + + +/*********************************/ +bool SCH_CMP_FIELD::IsVoid() +/*********************************/ + +/* return True if the field is void, i.e.: + * contains "~" or "" + */ +{ + if( m_Text.IsEmpty() || m_Text == wxT( "~" ) ) + return TRUE; + return FALSE; +} + + +/********************************************/ +EDA_Rect SCH_CMP_FIELD::GetBoundaryBox() const +/********************************************/ + +/** Function GetBoundaryBox() + * @return an EDA_Rect contains the real (user coordinates) boundary box for a text field, + * according to the component position, rotation, mirror ... + * + */ +{ + EDA_Rect BoundaryBox; + int hjustify, vjustify; + int textlen; + int orient; + int dx, dy, x1, y1, x2, y2; + + SCH_COMPONENT* DrawLibItem = (SCH_COMPONENT*) m_Parent; + + orient = m_Orient; + wxPoint pos = DrawLibItem->m_Pos; + x1 = m_Pos.x - pos.x; + y1 = m_Pos.y - pos.y; + + textlen = GetLength(); + if( m_FieldId == REFERENCE ) // Real Text can be U1 or U1A + { + EDA_LibComponentStruct* Entry = + FindLibPart( DrawLibItem->m_ChipName.GetData(), wxEmptyString, FIND_ROOT ); + if( Entry && (Entry->m_UnitCount > 1) ) + textlen++; // because U1 is show as U1A or U1B ... + } + dx = m_Size.x * textlen; + + // Real X Size is 10/9 char size because space between 2 chars is 1/10 X Size + dx = (dx * 10) / 9; + + dy = m_Size.y; + hjustify = m_HJustify; + vjustify = m_VJustify; + + x2 = pos.x + (DrawLibItem->m_Transform[0][0] * x1) + + (DrawLibItem->m_Transform[0][1] * y1); + y2 = pos.y + (DrawLibItem->m_Transform[1][0] * x1) + + (DrawLibItem->m_Transform[1][1] * y1); + + /* If the component orientation is +/- 90 deg, the text orienation must be changed */ + if( DrawLibItem->m_Transform[0][1] ) + { + if( orient == TEXT_ORIENT_HORIZ ) + orient = TEXT_ORIENT_VERT; + else + orient = TEXT_ORIENT_HORIZ; + /* is it mirrored (for text justify)*/ + EXCHG( hjustify, vjustify ); + if( DrawLibItem->m_Transform[1][0] < 0 ) + vjustify = -vjustify; + if( DrawLibItem->m_Transform[0][1] > 0 ) + hjustify = -hjustify; + } + else /* component horizontal: is it mirrored (for text justify)*/ + { + if( DrawLibItem->m_Transform[0][0] < 0 ) + hjustify = -hjustify; + if( DrawLibItem->m_Transform[1][1] > 0 ) + vjustify = -vjustify; + } + + if( orient == TEXT_ORIENT_VERT ) + EXCHG( dx, dy ); + + switch( hjustify ) + { + case GR_TEXT_HJUSTIFY_CENTER: + x1 = x2 - (dx / 2); + break; + + case GR_TEXT_HJUSTIFY_RIGHT: + x1 = x2 - dx; + break; + + default: + x1 = x2; + break; + } + + switch( vjustify ) + { + case GR_TEXT_VJUSTIFY_CENTER: + y1 = y2 - (dy / 2); + break; + + case GR_TEXT_VJUSTIFY_BOTTOM: + y1 = y2 - dy; + break; + + default: + y1 = y2; + break; + } + + BoundaryBox.SetX( x1 ); + BoundaryBox.SetY( y1 ); + BoundaryBox.SetWidth( dx ); + BoundaryBox.SetHeight( dy ); + + return BoundaryBox; +} + + +/** + * Function Save + * writes the data structures for this object out to a FILE in "*.brd" format. + * @param aFile The FILE to write to. + * @return bool - true if success writing else false. + */ +bool SCH_CMP_FIELD::Save( FILE* aFile ) const +{ + char hjustify = 'C'; + + if( m_HJustify == GR_TEXT_HJUSTIFY_LEFT ) + hjustify = 'L'; + else if( m_HJustify == GR_TEXT_HJUSTIFY_RIGHT ) + hjustify = 'R'; + char vjustify = 'C'; + if( m_VJustify == GR_TEXT_VJUSTIFY_BOTTOM ) + vjustify = 'B'; + else if( m_VJustify == GR_TEXT_VJUSTIFY_TOP ) + vjustify = 'T'; + if( fprintf( aFile, "F %d \"%s\" %c %-3d %-3d %-3d %4.4X %c %c", m_FieldId, + CONV_TO_UTF8( m_Text ), + m_Orient == TEXT_ORIENT_HORIZ ? 'H' : 'V', + m_Pos.x, m_Pos.y, + m_Size.x, + m_Attributs, + hjustify, vjustify ) == EOF ) + { + return false; + } + + + // Save field name, if necessary + if( m_FieldId >= FIELD1 && !m_Name.IsEmpty() ) + { + wxString fieldname = ReturnDefaultFieldName( m_FieldId ); + if( fieldname != m_Name ) + { + if( fprintf( aFile, " \"%s\"", CONV_TO_UTF8( m_Name ) ) == EOF ) + { + return false; + } + } + } + + if( fprintf( aFile, "\n" ) == EOF ) + { + return false; + } + + return true; +} diff --git a/eeschema/class_sch_cmp_field.h b/eeschema/class_sch_cmp_field.h new file mode 100644 index 0000000000..88af98d698 --- /dev/null +++ b/eeschema/class_sch_cmp_field.h @@ -0,0 +1,79 @@ +/*************************************************************/ +/* Definitions for the component fields classes for EESchema */ +/*************************************************************/ + +#ifndef CLASS_SCH_CMP_FIELD_H +#define CLASS_SCH_CMP_FIELD_H + +/*Fields are texts attached to a component, having a specuial meaning + * Fields 0 and 1 are very important: reference and value + * Field 2 is used as default footprint name. + * Field 3 is reserved (not currently used + * Fields 4 to 11 are user fields. + * They can be renamed and can appear in reports + */ + +/* Fields identifiers */ +enum NumFieldType { + REFERENCE = 0, /* Field Reference of part, i.e. "IC21" */ + VALUE, /* Field Value of part, i.e. "3.3K" */ + FOOTPRINT, /* Field Name Module PCB, i.e. "16DIP300" */ + SHEET_FILENAME, /* Field Name Schema component, i.e. "cnt16.sch" */ + FIELD1, + FIELD2, + FIELD3, + FIELD4, + FIELD5, + FIELD6, + FIELD7, + FIELD8, + NUMBER_OF_FIELDS /* used as Field count, not a field identifier */ +}; + +/*************************************************************/ +class SCH_CMP_FIELD : public SCH_ITEM, public EDA_TextStruct +/*************************************************************/ +{ +public: + int m_FieldId; // Field indicator type (REFERENCE, VALUE or other id) + wxString m_Name; /* Field name (ref, value,pcb, sheet, filed 1.. + * and for fields 1 to 8 the name is editable */ + bool m_AddExtraText; // Mainly for REFERENCE, add extar info (for REFERENCE: add part selection text + +public: + SCH_CMP_FIELD( const wxPoint& pos = wxPoint( 0, 0 ), const wxString& text = wxEmptyString ); + ~SCH_CMP_FIELD(); + + virtual wxString GetClass() const + { + return wxT( "SCH_CMP_FIELD" ); + } + + + void PartTextCopy( SCH_CMP_FIELD* target ); + void Place( WinEDA_SchematicFrame* frame, wxDC* DC ); + + EDA_Rect GetBoundaryBox() const; + bool IsVoid(); + void SwapData( SCH_CMP_FIELD* copyitem ); + + /** + * Function Draw + */ + void Draw( WinEDA_DrawPanel* panel, + wxDC* DC, + const wxPoint& offset, + int draw_mode, + int Color = -1 ); + + /** + * Function Save + * writes the data structures for this object out to a FILE in "*.brd" format. + * @param aFile The FILE to write to. + * @return bool - true if success writing else false. + */ + bool Save( FILE* aFile ) const; +}; + + +#endif /* CLASS_SCH_CMP_FIELD_H */ diff --git a/eeschema/component_class.cpp b/eeschema/component_class.cpp index 9f37e6967b..393b444dad 100644 --- a/eeschema/component_class.cpp +++ b/eeschema/component_class.cpp @@ -10,12 +10,9 @@ #include "libcmp.h" #include "general.h" #include "macros.h" -#include "id.h" #include "protos.h" -#include "macros.h" - #include #include @@ -367,31 +364,6 @@ EDA_Rect SCH_COMPONENT::GetBoundaryBox() const } -/**************************************************************************/ -void SCH_CMP_FIELD::SwapData( SCH_CMP_FIELD* copyitem ) -/**************************************************************************/ - -/* Used if undo / redo command: - * swap data between this and copyitem - */ -{ - EXCHG( m_Text, copyitem->m_Text ); - EXCHG( m_Layer, copyitem->m_Layer ); - EXCHG( m_Pos, copyitem->m_Pos ); - EXCHG( m_Size, copyitem->m_Size ); - EXCHG( m_Width, copyitem->m_Width ); - EXCHG( m_Orient, copyitem->m_Orient ); - EXCHG( m_Miroir, copyitem->m_Miroir ); - EXCHG( m_Attributs, copyitem->m_Attributs ); - EXCHG( m_CharType, copyitem->m_CharType ); - EXCHG( m_HJustify, copyitem->m_HJustify ); - EXCHG( m_VJustify, copyitem->m_VJustify ); - EXCHG( m_ZoomLevelDrawable, copyitem->m_ZoomLevelDrawable ); - EXCHG( m_TextDrawings, copyitem->m_TextDrawings ); - EXCHG( m_TextDrawingsSize, copyitem->m_TextDrawingsSize ); -} - - /**************************************************************************/ void SCH_COMPONENT::SwapData( SCH_COMPONENT* copyitem ) /**************************************************************************/ @@ -467,7 +439,7 @@ void SCH_COMPONENT::ClearAnnotation( DrawSheetPath* aSheet ) defRef.Append( wxT( "?" ) ); wxString multi = wxT( "1" ); - + if ( KeepMulti ) // We cannot remove all annotations: part selection must be kept { wxString NewHref; @@ -799,219 +771,6 @@ void SCH_COMPONENT::Show( int nestLevel, std::ostream& os ) #endif -/***************************************************************************/ -SCH_CMP_FIELD::SCH_CMP_FIELD( const wxPoint& pos, const wxString& text ) : - SCH_ITEM( NULL, DRAW_PART_TEXT_STRUCT_TYPE ), - EDA_TextStruct( text ) -/***************************************************************************/ -{ - m_Pos = pos; - m_FieldId = 0; - m_AddExtraText = false; -} - - -/************************************/ -SCH_CMP_FIELD::~SCH_CMP_FIELD() -/************************************/ -{ -} - - -/***********************************************************/ -void SCH_CMP_FIELD::PartTextCopy( SCH_CMP_FIELD* target ) -/***********************************************************/ -{ - target->m_Text = m_Text; - if( m_FieldId >= FIELD1 ) - target->m_Name = m_Name; - target->m_Layer = m_Layer; - target->m_Pos = m_Pos; - target->m_Size = m_Size; - target->m_Attributs = m_Attributs; - target->m_FieldId = m_FieldId; - target->m_Orient = m_Orient; - target->m_HJustify = m_HJustify; - target->m_VJustify = m_VJustify; - target->m_Flags = m_Flags; -} - - -/*********************************/ -bool SCH_CMP_FIELD::IsVoid() -/*********************************/ - -/* return True if The field is void, i.e.: - * contains wxEmptyString or "~" - */ -{ - if( m_Text.IsEmpty() || m_Text == wxT( "~" ) ) - return TRUE; - return FALSE; -} - - -/********************************************/ -EDA_Rect SCH_CMP_FIELD::GetBoundaryBox() const -/********************************************/ - -/* return - * EDA_Rect contains the real (user coordinates) boundary box for a text field, - * according to the component position, rotation, mirror ... - * - */ -{ - EDA_Rect BoundaryBox; - int hjustify, vjustify; - int textlen; - int orient; - int dx, dy, x1, y1, x2, y2; - - SCH_COMPONENT* DrawLibItem = (SCH_COMPONENT*) m_Parent; - - orient = m_Orient; - wxPoint pos = DrawLibItem->m_Pos; - x1 = m_Pos.x - pos.x; - y1 = m_Pos.y - pos.y; - - textlen = GetLength(); - if( m_FieldId == REFERENCE ) // Real Text can be U1 or U1A - { - EDA_LibComponentStruct* Entry = - FindLibPart( DrawLibItem->m_ChipName.GetData(), wxEmptyString, FIND_ROOT ); - if( Entry && (Entry->m_UnitCount > 1) ) - textlen++; // because U1 is show as U1A or U1B ... - } - dx = m_Size.x * textlen; - - // Real X Size is 10/9 char size because space between 2 chars is 1/10 X Size - dx = (dx * 10) / 9; - - dy = m_Size.y; - hjustify = m_HJustify; - vjustify = m_VJustify; - - x2 = pos.x + (DrawLibItem->m_Transform[0][0] * x1) - + (DrawLibItem->m_Transform[0][1] * y1); - y2 = pos.y + (DrawLibItem->m_Transform[1][0] * x1) - + (DrawLibItem->m_Transform[1][1] * y1); - - /* If the component orientation is +/- 90 deg, the text orienation must be changed */ - if( DrawLibItem->m_Transform[0][1] ) - { - if( orient == TEXT_ORIENT_HORIZ ) - orient = TEXT_ORIENT_VERT; - else - orient = TEXT_ORIENT_HORIZ; - /* is it mirrored (for text justify)*/ - EXCHG( hjustify, vjustify ); - if( DrawLibItem->m_Transform[1][0] < 0 ) - vjustify = -vjustify; - if( DrawLibItem->m_Transform[0][1] > 0 ) - hjustify = -hjustify; - } - else /* component horizontal: is it mirrored (for text justify)*/ - { - if( DrawLibItem->m_Transform[0][0] < 0 ) - hjustify = -hjustify; - if( DrawLibItem->m_Transform[1][1] > 0 ) - vjustify = -vjustify; - } - - if( orient == TEXT_ORIENT_VERT ) - EXCHG( dx, dy ); - - switch( hjustify ) - { - case GR_TEXT_HJUSTIFY_CENTER: - x1 = x2 - (dx / 2); - break; - - case GR_TEXT_HJUSTIFY_RIGHT: - x1 = x2 - dx; - break; - - default: - x1 = x2; - break; - } - - switch( vjustify ) - { - case GR_TEXT_VJUSTIFY_CENTER: - y1 = y2 - (dy / 2); - break; - - case GR_TEXT_VJUSTIFY_BOTTOM: - y1 = y2 - dy; - break; - - default: - y1 = y2; - break; - } - - BoundaryBox.SetX( x1 ); - BoundaryBox.SetY( y1 ); - BoundaryBox.SetWidth( dx ); - BoundaryBox.SetHeight( dy ); - - return BoundaryBox; -} - - -/** - * Function Save - * writes the data structures for this object out to a FILE in "*.brd" format. - * @param aFile The FILE to write to. - * @return bool - true if success writing else false. - */ -bool SCH_CMP_FIELD::Save( FILE* aFile ) const -{ - char hjustify = 'C'; - - if( m_HJustify == GR_TEXT_HJUSTIFY_LEFT ) - hjustify = 'L'; - else if( m_HJustify == GR_TEXT_HJUSTIFY_RIGHT ) - hjustify = 'R'; - char vjustify = 'C'; - if( m_VJustify == GR_TEXT_VJUSTIFY_BOTTOM ) - vjustify = 'B'; - else if( m_VJustify == GR_TEXT_VJUSTIFY_TOP ) - vjustify = 'T'; - if( fprintf( aFile, "F %d \"%s\" %c %-3d %-3d %-3d %4.4X %c %c", m_FieldId, - CONV_TO_UTF8( m_Text ), - m_Orient == TEXT_ORIENT_HORIZ ? 'H' : 'V', - m_Pos.x, m_Pos.y, - m_Size.x, - m_Attributs, - hjustify, vjustify ) == EOF ) - { - return false; - } - - - // Save field name, if necessary - if( m_FieldId >= FIELD1 && !m_Name.IsEmpty() ) - { - wxString fieldname = ReturnDefaultFieldName( m_FieldId ); - if( fieldname != m_Name ) - { - if( fprintf( aFile, " \"%s\"", CONV_TO_UTF8( m_Name ) ) == EOF ) - { - return false; - } - } - } - - if( fprintf( aFile, "\n" ) == EOF ) - { - return false; - } - - return true; -} - /****************************************/ bool SCH_COMPONENT::Save( FILE* f ) const @@ -1151,17 +910,17 @@ EDA_Rect SCH_COMPONENT::GetBoundingBox() { const int PADDING = 40; - // This gives a reasonable approximation (but some things are missing so... - EDA_Rect ret = GetBoundaryBox(); + // This gives a reasonable approximation (but some things are missing so...) + EDA_Rect bbox = GetBoundaryBox(); // Include BoundingBoxes of fields - for( int i = REFERENCE; i < NUMBER_OF_FIELDS; i++ ) + for( int ii = REFERENCE; ii < NUMBER_OF_FIELDS; ii++ ) { - ret.Merge( m_Field[i].GetBoundaryBox() ); + bbox.Merge( m_Field[ii].GetBoundaryBox() ); } // ... add padding - ret.Inflate( PADDING, PADDING ); + bbox.Inflate( PADDING, PADDING ); - return ret; + return bbox; } diff --git a/eeschema/component_class.h b/eeschema/component_class.h index ce9a1b5202..196b12dcb3 100644 --- a/eeschema/component_class.h +++ b/eeschema/component_class.h @@ -9,77 +9,12 @@ #define eda_global extern #endif -#include "macros.h" #include "base_struct.h" -#include #include "class_screen.h" +#include #include -/* Definition de la representation du composant */ -enum NumFieldType { - REFERENCE = 0, /* Champ Reference of part, i.e. "IC21" */ - VALUE, /* Champ Value of part, i.e. "3.3K" */ - FOOTPRINT, /* Champ Name Module PCB, i.e. "16DIP300" */ - SHEET_FILENAME, /* Champ Name Schema component, i.e. "cnt16.sch" */ - FIELD1, - FIELD2, - FIELD3, - FIELD4, - FIELD5, - FIELD6, - FIELD7, - FIELD8, - NUMBER_OF_FIELDS /* Nombre de champs de texte affectes au composant */ -}; - - -/* Class to manage component fields. - * component fields are texts attached to the component (not the graphic texts) - * There are 2 major fields : Reference and Value - */ -class SCH_CMP_FIELD : public SCH_ITEM, - public EDA_TextStruct -{ -public: - int m_FieldId; // Field indicator type (REFERENCE, VALUE or other id) - wxString m_Name; /* Field name (ref, value,pcb, sheet, filed 1.. - * and for fields 1 to 8 the name is editable */ - bool m_AddExtraText; // Mainly for REFERENCE, add extar info (for REFERENCE: add part selection text - -public: - SCH_CMP_FIELD( const wxPoint& pos = wxPoint( 0, 0 ), const wxString& text = wxEmptyString ); - ~SCH_CMP_FIELD(); - - virtual wxString GetClass() const - { - return wxT( "SCH_CMP_FIELD" ); - } - - - void PartTextCopy( SCH_CMP_FIELD* target ); - void Place( WinEDA_SchematicFrame* frame, wxDC* DC ); - - EDA_Rect GetBoundaryBox() const; - bool IsVoid(); - void SwapData( SCH_CMP_FIELD* copyitem ); - - /** - * Function Draw - */ - void Draw( WinEDA_DrawPanel* panel, - wxDC* DC, - const wxPoint& offset, - int draw_mode, - int Color = -1 ); - /** - * Function Save - * writes the data structures for this object out to a FILE in "*.brd" format. - * @param aFile The FILE to write to. - * @return bool - true if success writing else false. - */ - bool Save( FILE* aFile ) const; -}; - +#include "class_sch_cmp_field.h" WX_DECLARE_OBJARRAY( DrawSheetPath, ArrayOfSheetLists ); diff --git a/eeschema/makefile.include b/eeschema/makefile.include index cfc8d5cc23..3fec9133b3 100644 --- a/eeschema/makefile.include +++ b/eeschema/makefile.include @@ -20,6 +20,7 @@ OBJECTS = eeschema.o\ cross-probing.o\ setpage.o\ class_schematic_items.o\ + class_sch_cmp_field.o\ classes_body_items.o\ class_drawsheet.o\ class_pin.o\ @@ -115,7 +116,7 @@ menubar.o: menubar.cpp $(DEPEND) find.o:find.cpp dialog_find.cpp dialog_find.h $(DEPEND) -backanno.o:backanno.cpp dialog_backanno.cpp dialog_backanno.h $(DEPEND) +backanno.o:backanno.cpp $(DEPEND) eeconfig.o: eeconfig.cpp eeconfig.h $(DEPEND) diff --git a/include/build_version.h b/include/build_version.h index 0cdcb24f61..615a1e6c5c 100644 --- a/include/build_version.h +++ b/include/build_version.h @@ -9,7 +9,7 @@ COMMON_GLOBL wxString g_BuildVersion # include "config.h" (wxT(KICAD_SVN_VERSION)) # else - (wxT("(20080912)")) /* main program version */ + (wxT("(20080920)")) /* main program version */ # endif #endif ; @@ -20,7 +20,7 @@ COMMON_GLOBL wxString g_BuildAboutVersion # include "config.h" (wxT(KICAD_ABOUT_VERSION)) # else - (wxT("(20080912)")) /* svn date & rev (normally overridden) */ + (wxT("(20080920)")) /* svn date & rev (normally overridden) */ # endif #endif ;