From dd9497a1055c80c68489052da512d8ab0a547ab2 Mon Sep 17 00:00:00 2001 From: CHARRAS Date: Thu, 28 Feb 2008 19:27:25 +0000 Subject: [PATCH] Fixed: problem which could crash eeschema when a schematic file in a hierarchy was not found --- change_log.txt | 6 + eeschema/annotate.cpp | 277 ++++++++++++++++----------- eeschema/annotate_dialog.cpp | 2 +- eeschema/block.cpp | 102 +++++----- eeschema/class_drawsheet.cpp | 81 +++++--- eeschema/class_screen.cpp | 51 +---- eeschema/class_screen.h | 61 +++--- eeschema/component_class.cpp | 6 +- eeschema/component_class.h | 8 +- eeschema/delsheet.cpp | 2 +- eeschema/dialog_build_BOM.cpp | 4 +- eeschema/erc.cpp | 2 +- eeschema/files-io.cpp | 7 +- eeschema/find.cpp | 6 +- eeschema/hierarch.cpp | 28 +-- eeschema/load_one_schematic_file.cpp | 4 +- eeschema/netform.cpp | 20 +- eeschema/netlist.cpp | 8 +- eeschema/netlist.h | 8 +- eeschema/plot.cpp | 2 +- eeschema/save_schemas.cpp | 4 +- eeschema/schematic_undo_redo.cpp | 8 +- eeschema/schframe.cpp | 30 +-- eeschema/schframe.h | 9 +- eeschema/sheet.cpp | 137 ++++++------- eeschema/sheet.h | 8 +- eeschema/sheet.pjd | 212 ++++++++++++++++++-- include/wxstruct.h | 2 +- 28 files changed, 647 insertions(+), 448 deletions(-) diff --git a/change_log.txt b/change_log.txt index 494d0e47d1..2ba3454e62 100644 --- a/change_log.txt +++ b/change_log.txt @@ -5,6 +5,12 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2008-Feb-26 UPDATE Jean-Pierre Charras +================================================================================ ++eeschema + Fixed: problem which could crash eeschema when a sub schematic file in a hierarchy was not found. + + 2008-Feb-27 UPDATE Wayne Stambaugh ================================================================================ + eeschema diff --git a/eeschema/annotate.cpp b/eeschema/annotate.cpp index 3e096c2a88..d75405f8a0 100644 --- a/eeschema/annotate.cpp +++ b/eeschema/annotate.cpp @@ -13,17 +13,59 @@ /* Local Functions*/ static int ListeComposants( CmpListStruct* BaseListeCmp, - DrawSheetList* sheet ); + DrawSheetPath* sheet ); static void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void ReAnnotateComponents( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ); -int GetLastReferenceNumber( CmpListStruct* Objet, - CmpListStruct* BaseListeCmp, - int NbOfCmp ); +int GetLastReferenceNumber( CmpListStruct* Objet, + CmpListStruct* BaseListeCmp, + int NbOfCmp ); static int ExistUnit( CmpListStruct* Objet, int Unit, CmpListStruct* BaseListeCmp, int NbOfCmp ); +/************************************************/ +void WinEDA_SchematicFrame::UpdateSheetNumberAndDate() +/************************************************/ + +/* Set a sheet number, the sheet count for sheets in the whole schematic + * and update the date in all screens + */ +{ + wxString date = GenDate(); + int sheet_number = 1; // sheet 1 is the root sheet + DrawSheetPath* sheetpath; + + /* Build the sheet list */ + EDA_SheetList SheetList( g_RootSheet ); + int sheet_count = SheetList.GetCount(); + + for( sheetpath = SheetList.GetFirst(); + sheetpath != NULL; + sheetpath = SheetList.GetNext() ) + { + // Read all sheets in path, but not the root sheet (jj = 1) + for( int jj = 1; jj < sheetpath->m_numSheets; jj++ ) + { + DrawSheetStruct* sheet = sheetpath->m_sheets[jj]; + sheet->m_SheetNumber = sheet_number++; + sheet->m_NumberOfSheets = sheet_count; + SCH_SCREEN* screen = sheet->m_AssociatedScreen; + if( screen != NULL ) + { + screen->m_NumberOfScreen = sheet_count; + screen->m_Date = date; + } + } + } + + g_RootSheet->m_AssociatedScreen->m_Date = date; + g_RootSheet->m_AssociatedScreen->m_NumberOfScreen = sheet_count; + g_RootSheet->m_SheetNumber = 1; + g_RootSheet->m_NumberOfSheets = sheet_count; +} + + /***************************************************************************** * Used to annotate the power symbols, before testing erc or computing * netlist when a component reannotation is not necessary @@ -35,15 +77,15 @@ static int ExistUnit( CmpListStruct* Objet, int Unit, void ReAnnotatePowerSymbolsOnly( void ) { /* Build the screen list (screen, not sheet) */ - EDA_SheetList SheetList( NULL ); + EDA_SheetList SheetList( NULL ); - DrawSheetList* sheet; + DrawSheetPath* sheet; int CmpNumber = 1; for( sheet = SheetList.GetFirst(); - sheet != NULL; - sheet = SheetList.GetNext() ) + sheet != NULL; + sheet = SheetList.GetNext() ) { EDA_BaseStruct* DrawList = sheet->LastDrawList(); for( ; DrawList != NULL; DrawList = DrawList->Pnext ) @@ -97,7 +139,7 @@ int AnnotateByPosition( const void* o1, const void* o2 ) CmpListStruct* item1 = (CmpListStruct*) o1; CmpListStruct* item2 = (CmpListStruct*) o2; - int ii = strnicmp( item1->m_TextRef, item2->m_TextRef, 32 ); + int ii = strnicmp( item1->m_TextRef, item2->m_TextRef, 32 ); if( ii == 0 ) ii = item1->m_SheetList.Cmp( item2->m_SheetList ); @@ -113,20 +155,20 @@ int AnnotateByPosition( const void* o1, const void* o2 ) /***************************************************************************** - * qsort function to annotate items by value - * Components are sorted - * by reference - * if same reference: by value - * if same value: by unit number - * if same unit number, by sheet - * if same sheet, by time stamp - *****************************************************************************/ +* qsort function to annotate items by value +* Components are sorted +* by reference +* if same reference: by value +* if same value: by unit number +* if same unit number, by sheet +* if same sheet, by time stamp +*****************************************************************************/ int AnnotateByValue( const void* o1, const void* o2 ) { CmpListStruct* item1 = (CmpListStruct*) o1; CmpListStruct* item2 = (CmpListStruct*) o2; - int ii = strnicmp( item1->m_TextRef, item2->m_TextRef, 32 ); + int ii = strnicmp( item1->m_TextRef, item2->m_TextRef, 32 ); if( ii == 0 ) ii = strnicmp( item1->m_TextValue, item2->m_TextValue, 32 ); @@ -167,43 +209,43 @@ void DeleteAnnotation( WinEDA_SchematicFrame* parent, bool annotateSchematic ) /***************************************************************************** - * AnnotateComponents: - * - * Compute the annotation of the components for the whole project, or the - * current sheet only. All the components or the new ones only will be - * annotated. - *****************************************************************************/ +* AnnotateComponents: +* +* Compute the annotation of the components for the whole project, or the +* current sheet only. All the components or the new ones only will be +* annotated. +*****************************************************************************/ void AnnotateComponents( WinEDA_SchematicFrame* parent, - bool annotateSchematic, - bool sortByPosition, - bool resetAnnotation ) + bool annotateSchematic, + bool sortByPosition, + bool resetAnnotation ) { int ii, NbOfCmp; - DrawSheetList* sheet; + DrawSheetPath* sheet; CmpListStruct* BaseListeCmp; wxBusyCursor dummy; /* If it is an annotation for all the components, reset previous - annotation: */ + * annotation: */ if( resetAnnotation ) DeleteAnnotation( parent, annotateSchematic ); /* Build the sheet list */ EDA_SheetList SheetList( g_RootSheet ); - /* Update the screen number, sheet count and date */ - SheetList.UpdateSheetNumberAndDate(); + /* Update the sheet number, sheet count and date */ + parent->UpdateSheetNumberAndDate(); /* First pass: Component counting */ - ii = 0; + ii = 0; sheet = parent->GetSheet(); if( annotateSchematic ) { NbOfCmp = 0; for( sheet = SheetList.GetFirst(); - sheet != NULL; - sheet = SheetList.GetNext() ) + sheet != NULL; + sheet = SheetList.GetNext() ) NbOfCmp += ListeComposants( NULL, sheet ); } else @@ -219,8 +261,8 @@ void AnnotateComponents( WinEDA_SchematicFrame* parent, { ii = 0; for( sheet = SheetList.GetFirst(); - sheet != NULL; - sheet = SheetList.GetNext() ) + sheet != NULL; + sheet = SheetList.GetNext() ) ii += ListeComposants( BaseListeCmp + ii, sheet ); } else @@ -230,15 +272,15 @@ void AnnotateComponents( WinEDA_SchematicFrame* parent, DisplayError( parent, wxT( "Internal error in AnnotateComponents()" ) ); /* Break full components reference in name (prefix) and number: - example: IC1 become IC, and 1 */ + * example: IC1 become IC, and 1 */ BreakReference( BaseListeCmp, NbOfCmp ); - if ( sortByPosition ) + if( sortByPosition ) qsort( BaseListeCmp, NbOfCmp, sizeof(CmpListStruct), - ( int( * ) ( const void*, const void* ) )AnnotateByValue ); + ( int( * ) ( const void*, const void* ) )AnnotateByValue ); else qsort( BaseListeCmp, NbOfCmp, sizeof(CmpListStruct), - ( int( * ) ( const void*, const void* ) )AnnotateByPosition ); + ( int( * ) ( const void*, const void* ) )AnnotateByPosition ); /* Recalculate reference numbers */ ComputeReferenceNumber( BaseListeCmp, NbOfCmp ); @@ -254,10 +296,10 @@ void AnnotateComponents( WinEDA_SchematicFrame* parent, /***************************************************************************** - * if BaseListeCmp == NULL : count components - * else update data table BaseListeCmp - *****************************************************************************/ -int ListeComposants( CmpListStruct* BaseListeCmp, DrawSheetList* sheet ) +* if BaseListeCmp == NULL : count components +* else update data table BaseListeCmp +*****************************************************************************/ +int ListeComposants( CmpListStruct* BaseListeCmp, DrawSheetPath* sheet ) { int NbrCmp = 0; EDA_BaseStruct* DrawList = sheet->LastDrawList(); @@ -270,8 +312,8 @@ int ListeComposants( CmpListStruct* BaseListeCmp, DrawSheetList* sheet ) { DrawLibItem = (EDA_SchComponentStruct*) DrawList; Entry = FindLibPart( DrawLibItem->m_ChipName.GetData(), - wxEmptyString, - FIND_ROOT ); + wxEmptyString, + FIND_ROOT ); if( Entry == NULL ) continue; @@ -294,7 +336,7 @@ int ListeComposants( CmpListStruct* BaseListeCmp, DrawSheetList* sheet ) DrawLibItem->SetRef( sheet, wxT( "DefRef?" ) ); strncpy( BaseListeCmp[NbrCmp].m_TextRef, - CONV_TO_UTF8( DrawLibItem->GetRef( sheet ) ), 32 ); + CONV_TO_UTF8( DrawLibItem->GetRef( sheet ) ), 32 ); BaseListeCmp[NbrCmp].m_NumRef = -1; @@ -302,7 +344,7 @@ int ListeComposants( CmpListStruct* BaseListeCmp, DrawSheetList* sheet ) DrawLibItem->m_Field[VALUE].m_Text = wxT( "~" ); strncpy( BaseListeCmp[NbrCmp].m_TextValue, - CONV_TO_UTF8( DrawLibItem->m_Field[VALUE].m_Text ), 32 ); + CONV_TO_UTF8( DrawLibItem->m_Field[VALUE].m_Text ), 32 ); NbrCmp++; } } @@ -312,9 +354,9 @@ int ListeComposants( CmpListStruct* BaseListeCmp, DrawSheetList* sheet ) /***************************************************************************** - * Update the reference component for the schematic project (or the current - * sheet) - *****************************************************************************/ +* Update the reference component for the schematic project (or the current +* sheet) +*****************************************************************************/ static void ReAnnotateComponents( CmpListStruct* BaseListeCmp, int NbOfCmp ) { int ii; @@ -333,21 +375,21 @@ static void ReAnnotateComponents( CmpListStruct* BaseListeCmp, int NbOfCmp ) sprintf( Text + strlen( Text ), "%d", BaseListeCmp[ii].m_NumRef ); DrawLibItem->SetRef( &(BaseListeCmp[ii].m_SheetList), - CONV_FROM_UTF8( Text ) ); + CONV_FROM_UTF8( Text ) ); DrawLibItem->m_Multi = BaseListeCmp[ii].m_Unit; } } /***************************************************************************** - * Split component reference designators into a name (prefix) and number. - * Example: IC1 becomes IC and 1 in the .m_NumRef member. - * For multi part per package components not already annotated, set .m_Unit - * to a max value (0x7FFFFFFF). - * - * @param BaseListeCmp = list of component - * @param NbOfCmp = item count in the list - *****************************************************************************/ +* Split component reference designators into a name (prefix) and number. +* Example: IC1 becomes IC and 1 in the .m_NumRef member. +* For multi part per package components not already annotated, set .m_Unit +* to a max value (0x7FFFFFFF). +* +* @param BaseListeCmp = list of component +* @param NbOfCmp = item count in the list +*****************************************************************************/ void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) { int ii, ll; @@ -388,17 +430,17 @@ void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) } } - wxLogDebug( wxT("BreakReference(): %s number found: %d\n" ), - BaseListeCmp[ii].m_TextRef, - BaseListeCmp[ii].m_NumRef ); + wxLogDebug( wxT( "BreakReference(): %s number found: %d\n" ), + BaseListeCmp[ii].m_TextRef, + BaseListeCmp[ii].m_NumRef ); } } /***************************************************************************** - * Compute the reference number for components without reference number - * Compute .m_NumRef member - *****************************************************************************/ +* Compute the reference number for components without reference number +* Compute .m_NumRef member +*****************************************************************************/ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) { int ii, jj, LastReferenceNumber, NumberOfUnits, Unit; @@ -429,8 +471,8 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) { RefText = BaseListeCmp[ii].m_TextRef; LastReferenceNumber = GetLastReferenceNumber( BaseListeCmp + ii, - BaseListeCmp, - NbOfCmp ); + BaseListeCmp, + NbOfCmp ); } /* Annotation of one part per package components (trivial case)*/ @@ -448,7 +490,7 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) } /* Annotation of multi-part components ( n parts per package ) - (complex case) */ + * (complex case) */ ValText = BaseListeCmp[ii].m_TextValue; NumberOfUnits = BaseListeCmp[ii].m_NbParts; @@ -486,10 +528,11 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) { continue; } + /* Component without reference number found, annotate it if - possible */ - if( !BaseListeCmp[jj].m_PartsLocked || - (BaseListeCmp[jj].m_Unit == Unit) ) + * possible */ + if( !BaseListeCmp[jj].m_PartsLocked + || (BaseListeCmp[jj].m_Unit == Unit) ) { BaseListeCmp[jj].m_NumRef = BaseListeCmp[ii].m_NumRef; BaseListeCmp[jj].m_Unit = Unit; @@ -504,17 +547,17 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) /***************************************************************************** - * Search the last used (greatest) reference number in the component list - * for the prefix reference given by Objet - * The component list must be sorted. - * - * @param Objet = reference item ( Objet->m_TextRef is the search pattern) - * @param BaseListeCmp = list of items - * @param NbOfCmp = items count in list of items - *****************************************************************************/ +* Search the last used (greatest) reference number in the component list +* for the prefix reference given by Objet +* The component list must be sorted. +* +* @param Objet = reference item ( Objet->m_TextRef is the search pattern) +* @param BaseListeCmp = list of items +* @param NbOfCmp = items count in list of items +*****************************************************************************/ int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseListeCmp, - int NbOfCmp ) + int NbOfCmp ) { CmpListStruct* LastObjet = BaseListeCmp + NbOfCmp; int LastNumber = 0; @@ -535,13 +578,13 @@ int GetLastReferenceNumber( CmpListStruct* Objet, /***************************************************************************** - * TODO: Translate this to english/ - * Recherche dans la liste triee des composants, pour les composants - * multiples s'il existe pour le composant de reference Objet, - * une unite de numero Unit - * Retourne index dans BaseListeCmp si oui - * retourne -1 si non - *****************************************************************************/ +* TODO: Translate this to english/ +* Recherche dans la liste triee des composants, pour les composants +* multiples s'il existe pour le composant de reference Objet, +* une unite de numero Unit +* Retourne index dans BaseListeCmp si oui +* retourne -1 si non +*****************************************************************************/ static int ExistUnit( CmpListStruct* Objet, int Unit, CmpListStruct* BaseListeCmp, int NbOfCmp ) { @@ -577,18 +620,18 @@ static int ExistUnit( CmpListStruct* Objet, int Unit, /***************************************************************************** - * - * Function CheckAnnotate - * @return component count ( which are not annotated or have the same - * reference (duplicates)) - * @param oneSheetOnly : true = search is made only in the current sheet - * false = search in whole hierarchy (usual search). - * - *****************************************************************************/ +* +* Function CheckAnnotate +* @return component count ( which are not annotated or have the same +* reference (duplicates)) +* @param oneSheetOnly : true = search is made only in the current sheet +* false = search in whole hierarchy (usual search). +* +*****************************************************************************/ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) { int ii, error, NbOfCmp; - DrawSheetList* sheet; + DrawSheetPath* sheet; CmpListStruct* ListeCmp = NULL; wxString Buff; wxString msg, cmpref; @@ -604,8 +647,8 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) { NbOfCmp = 0; for( sheet = SheetList.GetFirst(); - sheet != NULL; - sheet = SheetList.GetNext() ) + sheet != NULL; + sheet = SheetList.GetNext() ) NbOfCmp += ListeComposants( NULL, sheet ); } else @@ -626,8 +669,8 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) { ii = 0; for( sheet = SheetList.GetFirst(); - sheet != NULL; - sheet = SheetList.GetNext() ) + sheet != NULL; + sheet = SheetList.GetNext() ) ii += ListeComposants( ListeCmp + ii, sheet ); } else @@ -638,7 +681,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) qsort( ListeCmp, NbOfCmp, sizeof(CmpListStruct), AnnotateByValue ); /* Break full components reference in name (prefix) and number: example: - IC1 become IC, and 1 */ + * IC1 become IC, and 1 */ BreakReference( ListeCmp, NbOfCmp ); /* count not yet annotated items */ @@ -657,7 +700,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) cmpref = CONV_FROM_UTF8( ListeCmp[ii].m_TextRef ); msg.Printf( _( "item not annotated: %s%s" ), - cmpref.GetData(), Buff.GetData() ); + cmpref.GetData(), Buff.GetData() ); if( (ListeCmp[ii].m_Unit > 0) && (ListeCmp[ii].m_Unit < 0x7FFFFFFF) ) { @@ -679,10 +722,10 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) cmpref = CONV_FROM_UTF8( ListeCmp[ii].m_TextRef ); msg.Printf( _( "Error item %s%s" ), cmpref.GetData(), - Buff.GetData() ); + Buff.GetData() ); Buff.Printf( _( " unit %d and no more than %d parts" ), - ListeCmp[ii].m_Unit, ListeCmp[ii].m_NbParts ); + ListeCmp[ii].m_Unit, ListeCmp[ii].m_NbParts ); msg << Buff; DisplayError( frame, msg ); error++; @@ -700,8 +743,8 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) Buff.Empty(); if( (stricmp( ListeCmp[ii].m_TextRef, - ListeCmp[ii + 1].m_TextRef ) != 0)|| - ( ListeCmp[ii].m_NumRef != ListeCmp[ii + 1].m_NumRef ) ) + ListeCmp[ii + 1].m_TextRef ) != 0) + || ( ListeCmp[ii].m_NumRef != ListeCmp[ii + 1].m_NumRef ) ) continue; /* Same reference found */ @@ -716,7 +759,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) cmpref = CONV_FROM_UTF8( ListeCmp[ii].m_TextRef ); msg.Printf( _( "Multiple item %s%s" ), - cmpref.GetData(), Buff.GetData() ); + cmpref.GetData(), Buff.GetData() ); if( (ListeCmp[ii].m_Unit > 0) && (ListeCmp[ii].m_Unit < 0x7FFFFFFF) ) { @@ -739,7 +782,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) cmpref = CONV_FROM_UTF8( ListeCmp[ii].m_TextRef ); msg.Printf( _( "Multiple item %s%s" ), - cmpref.GetData(), Buff.GetData() ); + cmpref.GetData(), Buff.GetData() ); if( (ListeCmp[ii].m_Unit > 0) && (ListeCmp[ii].m_Unit < 0x7FFFFFFF) ) { @@ -753,7 +796,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) /* Error if values are different between units, for the same reference */ if( stricmp( ListeCmp[ii].m_TextValue, - ListeCmp[ii + 1].m_TextValue ) != 0 ) + ListeCmp[ii + 1].m_TextValue ) != 0 ) { wxString nextcmpref, cmpvalue, nextcmpvalue; cmpref = CONV_FROM_UTF8( ListeCmp[ii].m_TextRef ); @@ -761,13 +804,13 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool oneSheetOnly ) cmpvalue = CONV_FROM_UTF8( ListeCmp[ii].m_TextValue ); nextcmpvalue = CONV_FROM_UTF8( ListeCmp[ii + 1].m_TextValue ); msg.Printf( _( "Diff values for %s%d%c (%s) and %s%d%c (%s)" ), - cmpref.GetData(), - ListeCmp[ii].m_NumRef, - ListeCmp[ii].m_Unit + 'A' - 1, - cmpvalue.GetData(), nextcmpref.GetData(), - ListeCmp[ii + 1].m_NumRef, - ListeCmp[ii + 1].m_Unit + 'A' - 1, - nextcmpvalue.GetData() ); + cmpref.GetData(), + ListeCmp[ii].m_NumRef, + ListeCmp[ii].m_Unit + 'A' - 1, + cmpvalue.GetData(), nextcmpref.GetData(), + ListeCmp[ii + 1].m_NumRef, + ListeCmp[ii + 1].m_Unit + 'A' - 1, + nextcmpvalue.GetData() ); DisplayError( frame, msg ); error++; diff --git a/eeschema/annotate_dialog.cpp b/eeschema/annotate_dialog.cpp index 9d7dc1ae92..86b7214718 100644 --- a/eeschema/annotate_dialog.cpp +++ b/eeschema/annotate_dialog.cpp @@ -208,7 +208,7 @@ void WinEDA_AnnotateFrame::CreateControls() /* TODO: Check if there is any existing annotation and enable/disable * the clear button accordingly. Probably should also enable/ * disable new components radio button if all of the components - * are already annotated. Some low level work on the DrawSheetList + * are already annotated. Some low level work on the DrawSheetPath * class will need to be done to accomadate this. */ m_btnClear = new wxButton( this, wxID_CLEAR ); diff --git a/eeschema/block.cpp b/eeschema/block.cpp index f57946c8ca..ea0b38c899 100644 --- a/eeschema/block.cpp +++ b/eeschema/block.cpp @@ -25,7 +25,7 @@ static EDA_BaseStruct* CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_ static void CollectStructsToDrag( SCH_SCREEN* screen ); static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ); static LibEDA_BaseStruct* GetNextPinPosition( EDA_SchComponentStruct* DrawLibItem, - wxPoint & position ); + wxPoint& position ); static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); static EDA_BaseStruct* SaveStructListForPaste( EDA_BaseStruct* DrawStruct ); static bool MirrorStruct( WinEDA_DrawPanel* panel, wxDC* DC, @@ -81,7 +81,7 @@ void WinEDA_SchematicFrame::InitBlockPasteInfos() /* Init the parameters used by the block paste command */ { - DrawBlockStruct* block = & GetScreen()->BlockLocate; + DrawBlockStruct* block = &GetScreen()->BlockLocate; block->m_BlockDrawStruct = g_BlockSaveDataList; DrawPanel->ManageCurseur = DrawMovingBlockOutlines; @@ -99,7 +99,7 @@ void WinEDA_SchematicFrame::HandleBlockPlace( wxDC* DC ) */ { bool err = FALSE; - DrawBlockStruct* block = & GetScreen()->BlockLocate; + DrawBlockStruct* block = &GetScreen()->BlockLocate; EDA_BaseStruct* NewStruct = NULL; @@ -208,7 +208,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC ) { int ii = 0; bool zoom_command = FALSE; - DrawBlockStruct* block = & GetScreen()->BlockLocate; + DrawBlockStruct* block = &GetScreen()->BlockLocate; if( block->m_BlockDrawStruct ) { @@ -234,7 +234,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC ) break; case BLOCK_DRAG: /* Drag */ - BreakSegmentOnJunction( (SCH_SCREEN*)GetScreen() ); + BreakSegmentOnJunction( (SCH_SCREEN*) GetScreen() ); case BLOCK_MOVE: /* Move */ case BLOCK_COPY: /* Copy */ @@ -245,7 +245,7 @@ int WinEDA_SchematicFrame::HandleBlockEnd( wxDC* DC ) if( block->m_BlockDrawStruct != NULL ) { ii = 1; - CollectStructsToDrag( (SCH_SCREEN*)GetScreen() ); + CollectStructsToDrag( (SCH_SCREEN*) GetScreen() ); DrawPanel->ManageCurseur( DrawPanel, DC, FALSE ); DrawPanel->ManageCurseur = DrawMovingBlockOutlines; DrawPanel->ManageCurseur( DrawPanel, DC, FALSE ); @@ -348,7 +348,7 @@ void WinEDA_SchematicFrame::HandleBlockEndByPopUp( int Command, wxDC* DC ) */ { int ii = 0; - DrawBlockStruct* block = & GetScreen()->BlockLocate; + DrawBlockStruct* block = &GetScreen()->BlockLocate; if( block->m_Command != BLOCK_MOVE ) return; @@ -381,14 +381,14 @@ void WinEDA_SchematicFrame::HandleBlockEndByPopUp( int Command, wxDC* DC ) } block->m_BlockDrawStruct = NULL; } - BreakSegmentOnJunction( (SCH_SCREEN*)GetScreen() ); + BreakSegmentOnJunction( (SCH_SCREEN*) GetScreen() ); block->m_BlockDrawStruct = PickStruct( GetScreen()->BlockLocate, GetScreen(), SEARCHALL ); if( block->m_BlockDrawStruct != NULL ) { ii = 1; - CollectStructsToDrag( (SCH_SCREEN*)GetScreen() ); + CollectStructsToDrag( (SCH_SCREEN*) GetScreen() ); if( DrawPanel->ManageCurseur ) DrawPanel->ManageCurseur( DrawPanel, DC, FALSE ); block->m_State = STATE_BLOCK_MOVE; @@ -673,9 +673,9 @@ void MirrorOneStruct( EDA_BaseStruct* DrawStruct, wxPoint& Center ) // The center position is mirrored and the text is moved for half horizontal len DrawText = (DrawTextStruct*) DrawStruct; px = DrawText->m_Pos; - if( DrawText->m_Orient == 0 ) /* horizontal text */ + if( DrawText->m_Orient == 0 ) /* horizontal text */ dx = DrawText->Len_Size() / 2; - else if( DrawText->m_Orient == 2 ) /* invert horizontal text*/ + else if( DrawText->m_Orient == 2 ) /* invert horizontal text*/ dx = -DrawText->Len_Size() / 2; else dx = 0; @@ -687,13 +687,14 @@ void MirrorOneStruct( EDA_BaseStruct* DrawStruct, wxPoint& Center ) DrawText->m_Pos.x = px.x; break; - case DRAW_HIER_LABEL_STRUCT_TYPE: + case DRAW_HIER_LABEL_STRUCT_TYPE: case DRAW_GLOBAL_LABEL_STRUCT_TYPE: + // Text is not really mirrored: Orientation is changed DrawText = (DrawLabelStruct*) DrawStruct; - if( DrawText->m_Orient == 0 ) /* horizontal text */ + if( DrawText->m_Orient == 0 ) /* horizontal text */ DrawText->m_Orient = 2; - else if( DrawText->m_Orient == 2 ) /* invert horizontal text*/ + else if( DrawText->m_Orient == 2 ) /* invert horizontal text*/ DrawText->m_Orient = 0; px = DrawText->m_Pos; @@ -706,7 +707,7 @@ void MirrorOneStruct( EDA_BaseStruct* DrawStruct, wxPoint& Center ) DrawLibItem = (EDA_SchComponentStruct*) DrawStruct; dx = DrawLibItem->m_Pos.x; g_EDA_Appl->m_SchematicFrame->CmpRotationMiroir( DrawLibItem, - NULL, CMP_MIROIR_Y ); + NULL, CMP_MIROIR_Y ); MirrorYPoint( DrawLibItem->m_Pos, Center ); dx -= DrawLibItem->m_Pos.x; for( ii = 0; ii < NUMBER_OF_FIELDS; ii++ ) @@ -833,17 +834,18 @@ static EDA_BaseStruct* CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREE case DRAW_SHEET_STRUCT_TYPE: { - //DuplicateStruct calls GenCopy, which should handle - //m_AssociatedScreen and m_sRefCount properly. + //DuplicateStruct calls GenCopy, which should handle + //m_AssociatedScreen and m_sRefCount properly. DrawSheetStruct* sheet = (DrawSheetStruct*) Struct; sheet->m_TimeStamp = GetTimeStamp(); - //sheet->m_AssociatedScreen->m_UndoList = NULL; - //sheet->m_AssociatedScreen->m_RedoList = NULL; - //keep m_AssociatedScreen pointer & associated. + + //sheet->m_AssociatedScreen->m_UndoList = NULL; + //sheet->m_AssociatedScreen->m_RedoList = NULL; + //keep m_AssociatedScreen pointer & associated. //sheet->m_Son = NULL; m_son is involved in undo and redo. break; } - + default: ; } @@ -873,7 +875,7 @@ static EDA_BaseStruct* CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREE case DRAW_TEXT_STRUCT_TYPE: case DRAW_LABEL_STRUCT_TYPE: case DRAW_GLOBAL_LABEL_STRUCT_TYPE: - case DRAW_HIER_LABEL_STRUCT_TYPE: + case DRAW_HIER_LABEL_STRUCT_TYPE: case DRAW_SHEETLABEL_STRUCT_TYPE: case DRAW_PICK_ITEM_STRUCT_TYPE: case DRAW_MARKER_STRUCT_TYPE: @@ -890,7 +892,7 @@ static EDA_BaseStruct* CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREE } case DRAW_LIB_ITEM_STRUCT_TYPE: - ( (EDA_SchComponentStruct*) NewDrawStruct )->m_TimeStamp = GetTimeStamp(); + ( (EDA_SchComponentStruct*) NewDrawStruct )->m_TimeStamp = GetTimeStamp(); ( (EDA_SchComponentStruct*) NewDrawStruct )->ClearAnnotation(); break; } @@ -962,12 +964,16 @@ void DeleteStruct( WinEDA_DrawPanel* panel, wxDC* DC, EDA_BaseStruct* DrawStruct RedrawOneStruct( panel, DC, DrawStruct, g_XorMode ); /* Unlink the structure */ DrawStruct->Pnext = DrawStruct->Pback = NULL; // Only one struct -> no link - if(DrawStruct->Type() == DRAW_SHEET_STRUCT_TYPE){ - SAFE_DELETE(DrawStruct); - //no undo/redo for this (for now), it is on both the EEDrawList and m_SubSheet arrays, - //hence the undo logic would have to be extended for this. - }else - frame->SaveCopyInUndoList( DrawStruct, IS_DELETED ); + if( DrawStruct->Type() == DRAW_SHEET_STRUCT_TYPE ) + { + frame->SaveCopyInUndoList( DrawStruct, IS_DELETED ); // Currently In TEST + +// SAFE_DELETE(DrawStruct); + //no undo/redo for this (for now), it is on both the EEDrawList and m_SubSheet arrays, + //hence the undo logic would have to be extended for this. + } + else + frame->SaveCopyInUndoList( DrawStruct, IS_DELETED ); } } @@ -1046,7 +1052,7 @@ void WinEDA_SchematicFrame::PasteStruct( wxDC* DC ) EDA_BaseStruct* Struct = PickedList->m_PickedStruct; if( Struct->Type() == DRAW_LIB_ITEM_STRUCT_TYPE ) { - ( (EDA_SchComponentStruct*) Struct )->m_TimeStamp = GetTimeStamp(); + ( (EDA_SchComponentStruct*) Struct )->m_TimeStamp = GetTimeStamp(); ( (EDA_SchComponentStruct*) Struct )->ClearAnnotation(); SetStructFather( Struct, GetScreen() ); } @@ -1070,7 +1076,7 @@ void WinEDA_SchematicFrame::PasteStruct( wxDC* DC ) { if( DrawStruct->Type() == DRAW_LIB_ITEM_STRUCT_TYPE ) { - ( (EDA_SchComponentStruct*) DrawStruct )->m_TimeStamp = GetTimeStamp(); + ( (EDA_SchComponentStruct*) DrawStruct )->m_TimeStamp = GetTimeStamp(); ( (EDA_SchComponentStruct*) DrawStruct )->ClearAnnotation(); } SetStructFather( DrawStruct, GetScreen() ); @@ -1120,7 +1126,7 @@ bool PlaceStruct( BASE_SCREEN* screen, EDA_BaseStruct* DrawStruct ) case DRAW_TEXT_STRUCT_TYPE: case DRAW_LABEL_STRUCT_TYPE: case DRAW_GLOBAL_LABEL_STRUCT_TYPE: - case DRAW_HIER_LABEL_STRUCT_TYPE: + case DRAW_HIER_LABEL_STRUCT_TYPE: case DRAW_LIB_ITEM_STRUCT_TYPE: case DRAW_SHEET_STRUCT_TYPE: case DRAW_SHEETLABEL_STRUCT_TYPE: @@ -1223,7 +1229,7 @@ void MoveOneStruct( EDA_BaseStruct* DrawStruct, const wxPoint& move_vector ) DrawLabel->m_Pos += move_vector; break; - case DRAW_HIER_LABEL_STRUCT_TYPE: + case DRAW_HIER_LABEL_STRUCT_TYPE: case DRAW_GLOBAL_LABEL_STRUCT_TYPE: #define DrawGHLabel ( (DrawLabelStruct*) DrawStruct ) DrawGHLabel->m_Pos += move_vector; @@ -1315,10 +1321,10 @@ EDA_BaseStruct* DuplicateStruct( EDA_BaseStruct* DrawStruct ) NewDrawStruct = ( (DrawLabelStruct*) DrawStruct )->GenCopy(); break; - case DRAW_HIER_LABEL_STRUCT_TYPE: - NewDrawStruct = ( (DrawHierLabelStruct*) DrawStruct )->GenCopy(); + case DRAW_HIER_LABEL_STRUCT_TYPE: + NewDrawStruct = ( (DrawHierLabelStruct*) DrawStruct )->GenCopy(); break; - + case DRAW_GLOBAL_LABEL_STRUCT_TYPE: NewDrawStruct = ( (DrawGlobalLabelStruct*) DrawStruct )->GenCopy(); break; @@ -1450,7 +1456,7 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) if( Struct->Type() == DRAW_LIB_ITEM_STRUCT_TYPE ) { LibEDA_BaseStruct* DrawItem; - wxPoint pos; + wxPoint pos; DrawItem = GetNextPinPosition( (EDA_SchComponentStruct*) Struct, pos ); while( DrawItem ) { @@ -1525,14 +1531,14 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) case DRAW_POLYLINE_STRUCT_TYPE: if( Struct->m_Flags & SELECTED ) - break; /* Deja en liste */ + break; /* Deja en liste */ break; case DRAW_JUNCTION_STRUCT_TYPE: #undef STRUCT #define STRUCT ( (DrawJunctionStruct*) Struct ) if( Struct->m_Flags & SELECTED ) - break; /* Deja en liste */ + break; /* Deja en liste */ if( STRUCT->m_Pos != position ) break; DrawStructs = new DrawPickedStruct( Struct ); @@ -1545,7 +1551,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) #undef STRUCT #define STRUCT ( (EDA_DrawLineStruct*) Struct ) if( Struct->m_Flags & SELECTED ) - break; /* Deja en liste */ + break; /* Deja en liste */ if( STRUCT->m_Start == position ) { DrawStructs = new DrawPickedStruct( Struct ); @@ -1576,7 +1582,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) #undef STRUCT #define STRUCT ( (DrawLabelStruct*) Struct ) if( Struct->m_Flags & SELECTED ) - break; /* Already in list */ + break; /* Already in list */ if( STRUCT->m_Pos != position ) break; DrawStructs = new DrawPickedStruct( Struct ); @@ -1586,12 +1592,12 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) Struct->m_Flags |= SELECTED; break; - case DRAW_HIER_LABEL_STRUCT_TYPE: + case DRAW_HIER_LABEL_STRUCT_TYPE: case DRAW_GLOBAL_LABEL_STRUCT_TYPE: #undef STRUCT #define STRUCT ( (DrawLabelStruct*) Struct ) if( Struct->m_Flags & SELECTED ) - break; /* Already in list */ + break; /* Already in list */ if( STRUCT->m_Pos != position ) break; DrawStructs = new DrawPickedStruct( Struct ); @@ -1617,7 +1623,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) #undef STRUCT #define STRUCT ( (DrawMarkerStruct*) Struct ) if( Struct->m_Flags & SELECTED ) - break; /* Already in list */ + break; /* Already in list */ if( STRUCT->m_Pos != position ) break; DrawStructs = new DrawPickedStruct( Struct ); @@ -1631,7 +1637,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) #undef STRUCT #define STRUCT ( (DrawNoConnectStruct*) Struct ) if( Struct->m_Flags & SELECTED ) - break; /* Already in list */ + break; /* Already in list */ if( STRUCT->m_Pos != position ) break; DrawStructs = new DrawPickedStruct( Struct ); @@ -1651,7 +1657,7 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) /*********************************************************************************/ static LibEDA_BaseStruct* GetNextPinPosition( EDA_SchComponentStruct* DrawLibItem, - wxPoint & position ) + wxPoint& position ) /*********************************************************************************/ { EDA_LibComponentStruct* Entry; @@ -1694,9 +1700,9 @@ static LibEDA_BaseStruct* GetNextPinPosition( EDA_SchComponentStruct* DrawLibIte /* Calcul de la position du point de reference */ position.x = PartX + (TransMat[0][0] * Pin->m_Pos.x) - + (TransMat[0][1] * Pin->m_Pos.y); + + (TransMat[0][1] * Pin->m_Pos.y); position.y = PartY + (TransMat[1][0] * Pin->m_Pos.x) - + (TransMat[1][1] * Pin->m_Pos.y); + + (TransMat[1][1] * Pin->m_Pos.y); NextItem = DEntry->Next(); return DEntry; } diff --git a/eeschema/class_drawsheet.cpp b/eeschema/class_drawsheet.cpp index f5fbdba88b..8a8af28d19 100644 --- a/eeschema/class_drawsheet.cpp +++ b/eeschema/class_drawsheet.cpp @@ -43,10 +43,11 @@ DrawSheetStruct::DrawSheetStruct( const wxPoint& pos ) : m_NbLabel = 0; m_Layer = LAYER_SHEET; m_Pos = pos; + m_TimeStamp = GetTimeStamp(); m_SheetNameSize = m_FileNameSize = 60; m_AssociatedScreen = NULL; - m_SheetName = wxT( "Root" ); - m_FileName = wxT( " " ); + m_SheetName.Printf( wxT("Sheet%8.8lX"), m_TimeStamp); + m_FileName.Printf( wxT("file%8.8lX.sch"), m_TimeStamp); m_SheetNumber = 1; m_NumberOfSheets = 1; @@ -351,7 +352,7 @@ bool DrawSheetStruct::SearchHierarchy( wxString filename, SCH_SCREEN** screen ) /*******************************************************************************/ -bool DrawSheetStruct::LocatePathOfScreen( SCH_SCREEN* screen, DrawSheetList* list ) +bool DrawSheetStruct::LocatePathOfScreen( SCH_SCREEN* screen, DrawSheetPath* list ) /*******************************************************************************/ { //search the existing hierarchy for an instance of screen "FileName". @@ -386,6 +387,8 @@ bool DrawSheetStruct::LocatePathOfScreen( SCH_SCREEN* screen, DrawSheetList* lis bool DrawSheetStruct::Load( WinEDA_SchematicFrame* frame ) /*******************************************************************************/ { + bool success = true; + if( !m_AssociatedScreen ) { SCH_SCREEN* screen = NULL; @@ -401,22 +404,24 @@ bool DrawSheetStruct::Load( WinEDA_SchematicFrame* frame ) { m_AssociatedScreen = new SCH_SCREEN( SCHEMATIC_FRAME ); m_AssociatedScreen->m_RefCount++; - if( !frame->LoadOneEEFile( m_AssociatedScreen, m_FileName ) ) - return false; - EDA_BaseStruct* bs = m_AssociatedScreen->EEDrawList; - while( bs ) - { - if( bs->Type() == DRAW_SHEET_STRUCT_TYPE ) - { - DrawSheetStruct* ss = (DrawSheetStruct*) bs; - if( !ss->Load( frame ) ) - return false; - } - bs = bs->Pnext; - } + success = frame->LoadOneEEFile( m_AssociatedScreen, m_FileName); + if ( success ) + { + EDA_BaseStruct* bs = m_AssociatedScreen->EEDrawList; + while( bs ) + { + if( bs->Type() == DRAW_SHEET_STRUCT_TYPE ) + { + DrawSheetStruct* sheetstruct = (DrawSheetStruct*) bs; + if( !sheetstruct->Load( frame ) ) + success = false; + } + bs = bs->Pnext; + } + } } } - return true; + return success; } @@ -442,6 +447,21 @@ int DrawSheetStruct::CountSheets() } +/******************************************/ +wxString DrawSheetStruct::GetFileName(void) +/******************************************/ +{ + return m_FileName; +} + + +/************************************************************/ +void DrawSheetStruct::SetFileName(const wxString & aFilename) +/************************************************************/ +{ + m_FileName = aFilename; +} + /************************/ /* DrawSheetLabelStruct */ /************************/ @@ -571,7 +591,7 @@ void DrawSheetLabelStruct::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoin /* class to handle a series of sheets *********/ /* a 'path' so to speak.. *********************/ /**********************************************/ -DrawSheetList::DrawSheetList() +DrawSheetPath::DrawSheetPath() { for( int i = 0; i d.m_numSheets ) return 1; @@ -600,7 +620,7 @@ int DrawSheetList::Cmp( DrawSheetList& d ) } -DrawSheetStruct* DrawSheetList::Last() +DrawSheetStruct* DrawSheetPath::Last() { if( m_numSheets ) return m_sheets[m_numSheets - 1]; @@ -608,7 +628,7 @@ DrawSheetStruct* DrawSheetList::Last() } -SCH_SCREEN* DrawSheetList::LastScreen() +SCH_SCREEN* DrawSheetPath::LastScreen() { if( m_numSheets ) return m_sheets[m_numSheets - 1]->m_AssociatedScreen; @@ -616,7 +636,7 @@ SCH_SCREEN* DrawSheetList::LastScreen() } -EDA_BaseStruct* DrawSheetList::LastDrawList() +EDA_BaseStruct* DrawSheetPath::LastDrawList() { if( m_numSheets && m_sheets[m_numSheets - 1]->m_AssociatedScreen ) return m_sheets[m_numSheets - 1]->m_AssociatedScreen->EEDrawList; @@ -624,8 +644,9 @@ EDA_BaseStruct* DrawSheetList::LastDrawList() } -void DrawSheetList::Push( DrawSheetStruct* sheet ) +void DrawSheetPath::Push( DrawSheetStruct* sheet ) { + wxASSERT( m_numSheets <= DSLSZ ); if( m_numSheets < DSLSZ ) { m_sheets[m_numSheets] = sheet; @@ -634,7 +655,7 @@ void DrawSheetList::Push( DrawSheetStruct* sheet ) } -DrawSheetStruct* DrawSheetList::Pop() +DrawSheetStruct* DrawSheetPath::Pop() { if( m_numSheets > 0 ) { @@ -645,7 +666,7 @@ DrawSheetStruct* DrawSheetList::Pop() } -wxString DrawSheetList::Path() +wxString DrawSheetPath::Path() { wxString s, t; @@ -664,7 +685,7 @@ wxString DrawSheetList::Path() } -wxString DrawSheetList::PathHumanReadable() +wxString DrawSheetPath::PathHumanReadable() { wxString s, t; @@ -680,7 +701,7 @@ wxString DrawSheetList::PathHumanReadable() } -void DrawSheetList::UpdateAllScreenReferences() +void DrawSheetPath::UpdateAllScreenReferences() { EDA_BaseStruct* t = LastDrawList(); @@ -698,7 +719,7 @@ void DrawSheetList::UpdateAllScreenReferences() } -bool DrawSheetList::operator=( const DrawSheetList& d1 ) +bool DrawSheetPath::operator=( const DrawSheetPath& d1 ) { m_numSheets = d1.m_numSheets; int i; @@ -716,7 +737,7 @@ bool DrawSheetList::operator=( const DrawSheetList& d1 ) } -bool DrawSheetList::operator==( const DrawSheetList& d1 ) +bool DrawSheetPath::operator==( const DrawSheetPath& d1 ) { if( m_numSheets != d1.m_numSheets ) return false; @@ -730,7 +751,7 @@ bool DrawSheetList::operator==( const DrawSheetList& d1 ) } -bool DrawSheetList::operator!=( const DrawSheetList& d1 ) +bool DrawSheetPath::operator!=( const DrawSheetPath& d1 ) { if( m_numSheets != d1.m_numSheets ) return true; diff --git a/eeschema/class_screen.cpp b/eeschema/class_screen.cpp index 1d3d313b55..a1822f88f9 100644 --- a/eeschema/class_screen.cpp +++ b/eeschema/class_screen.cpp @@ -268,7 +268,7 @@ void EDA_ScreenList::BuildScreenList( EDA_BaseStruct* s ) /*********************************************************************/ /*****************************************/ -DrawSheetList* EDA_SheetList::GetFirst() +DrawSheetPath* EDA_SheetList::GetFirst() /*****************************************/ { m_index = 0; @@ -279,7 +279,7 @@ DrawSheetList* EDA_SheetList::GetFirst() /*****************************************/ -DrawSheetList* EDA_SheetList::GetNext() +DrawSheetPath* EDA_SheetList::GetNext() /*****************************************/ { if( m_index < m_count ) @@ -289,7 +289,7 @@ DrawSheetList* EDA_SheetList::GetNext() /************************************************/ -DrawSheetList* EDA_SheetList::GetSheet( int index ) +DrawSheetPath* EDA_SheetList::GetSheet( int index ) /************************************************/ /* return the m_List[index] item @@ -312,8 +312,8 @@ void EDA_SheetList::BuildSheetList( DrawSheetStruct* sheet ) m_index = 0; if( m_List ) free( m_List );m_List = NULL; - count *= sizeof(DrawSheetList); - m_List = (DrawSheetList*) MyZMalloc( count ); + count *= sizeof(DrawSheetPath); + m_List = (DrawSheetPath*) MyZMalloc( count ); memset( (void*) m_List, 0, count ); m_currList.Clear(); } @@ -336,44 +336,3 @@ void EDA_SheetList::BuildSheetList( DrawSheetStruct* sheet ) m_currList.Pop(); } - -/************************************************/ -void EDA_SheetList::UpdateSheetNumberAndDate() -/************************************************/ - -/* Set a sheet number, the sheet count for sheets in the whoçle schematic - * and update the date in all srceens - */ -{ - wxString date = GenDate(); - int sheet_count = 1, sheet_number = 2; // sheet 1 is the root sheet - - for( int ii = 0; ii<(int) m_count; ii++ ) - { - DrawSheetList* sheetlist = GetSheet( ii ); - sheet_count += sheetlist->m_numSheets; - } - - for( int ii = 0; ii<(int) m_count; ii++ ) - { - DrawSheetList* sheetlist = GetSheet( ii ); - // Read all sheets in path, but not the root sheet (jj = 1) - for( int jj = 1; jj < sheetlist->m_numSheets; jj++ ) - { - DrawSheetStruct* sheet = sheetlist->m_sheets[jj]; - sheet->m_SheetNumber = sheet_number++; - sheet->m_NumberOfSheets = m_count; - SCH_SCREEN* screen = sheet->m_AssociatedScreen; - if( screen != NULL ) - { - screen->m_NumberOfScreen = sheet_count; - screen->m_Date = date; - } - } - } - - g_RootSheet->m_AssociatedScreen->m_Date = date; - g_RootSheet->m_AssociatedScreen->m_NumberOfScreen = sheet_count; - g_RootSheet->m_SheetNumber = 1; - g_RootSheet->m_NumberOfSheets = m_count; -} diff --git a/eeschema/class_screen.h b/eeschema/class_screen.h index acda42682b..c97d322f30 100644 --- a/eeschema/class_screen.h +++ b/eeschema/class_screen.h @@ -55,8 +55,8 @@ public: }; -class DrawSheetLabelStruct : public EDA_BaseStruct - , public EDA_TextStruct +class DrawSheetLabelStruct : public EDA_BaseStruct, + public EDA_TextStruct { public: int m_Layer; @@ -87,8 +87,8 @@ public: /* class DrawSheetStruct -This class is the sheet symbol placed in a schematic, and is the entry point for a sub schematic -*/ + * This class is the sheet symbol placed in a schematic, and is the entry point for a sub schematic + */ WX_DEFINE_ARRAY( DrawSheetStruct *, SheetGrowArray ); class DrawSheetStruct : public EDA_BaseStruct /*public SCH_SCREEN*/ /* Gestion de la hierarchie */ @@ -96,20 +96,22 @@ class DrawSheetStruct : public EDA_BaseStruct /*public SCH_SCREEN*/ /* Gestio public: wxString m_SheetName; //this is equivalent to C101 for components: // it is stored in F0 ... of the file. +private: wxString m_FileName; //also in SCH_SCREEN (redundant), //but need it here for loading after //reading the sheet description from file. - int m_SheetNameSize; +public: + int m_SheetNameSize; // Size (height) of the text, used to draw the name - int m_FileNameSize; + int m_FileNameSize; // Size (height) of the text, used to draw the name wxPoint m_Pos; wxSize m_Size; /* Position and Size of sheet symbol */ int m_Layer; DrawSheetLabelStruct* m_Label; /* Points de connection, linked list.*/ int m_NbLabel; /* Nombre de points de connexion */ - SCH_SCREEN* m_AssociatedScreen; /* Associated Screen which handle the physical data -In complex hierarchies we can have many DrawSheetStruct using the same data -*/ + SCH_SCREEN* m_AssociatedScreen; /* Associated Screen which handle the physical data + * In complex hierarchies we can have many DrawSheetStruct using the same data + */ int m_SheetNumber; // sheet number (used for info) int m_NumberOfSheets; // Sheets count in the whole schematic (used for info) @@ -133,8 +135,10 @@ public: int ComponentCount(); bool Load( WinEDA_SchematicFrame* frame ); bool SearchHierarchy( wxString filename, SCH_SCREEN** screen ); - bool LocatePathOfScreen( SCH_SCREEN* screen, DrawSheetList* list ); + bool LocatePathOfScreen( SCH_SCREEN* screen, DrawSheetPath* list ); int CountSheets(); + wxString GetFileName(void); + void SetFileName(const wxString & aFilename); //void RemoveSheet(DrawSheetStruct* sheet); //to remove a sheet, just delete it @@ -147,16 +151,16 @@ public: /* a 'path' so to speak.. *********************/ /**********************************************/ #define DSLSZ 32 -class DrawSheetList +class DrawSheetPath { public: int m_numSheets; DrawSheetStruct* m_sheets[DSLSZ]; - DrawSheetList(); - ~DrawSheetList() { }; + DrawSheetPath(); + ~DrawSheetPath() { }; void Clear() { m_numSheets = 0; } - int Cmp( DrawSheetList& d ); + int Cmp( DrawSheetPath& d ); DrawSheetStruct* Last(); SCH_SCREEN* LastScreen(); EDA_BaseStruct* LastDrawList(); @@ -166,11 +170,11 @@ public: wxString PathHumanReadable(); void UpdateAllScreenReferences(); - bool operator =( const DrawSheetList& d1 ); + bool operator =( const DrawSheetPath& d1 ); - bool operator ==( const DrawSheetList& d1 ); + bool operator ==( const DrawSheetPath& d1 ); - bool operator !=( const DrawSheetList& d1 ); + bool operator !=( const DrawSheetPath& d1 ); }; @@ -179,14 +183,16 @@ public: /*******************************************************/ // sheets are not unique - can have many sheets with the same -// filename and the same SCH_SHEET reference. +// filename and the same SCH_SCREEN reference. class EDA_SheetList { private: - DrawSheetList* m_List; - int m_count; + DrawSheetPath* m_List; + int m_count; /* Number of sheets included in hierarchy, + * starting at the given sheet in constructor . the given sheet is counted + */ int m_index; - DrawSheetList m_currList; + DrawSheetPath m_currList; public: EDA_SheetList( DrawSheetStruct* sheet ) @@ -211,10 +217,9 @@ public: int GetCount() { return m_count; } - DrawSheetList* GetFirst(); - DrawSheetList* GetNext(); - DrawSheetList* GetSheet( int index ); - void UpdateSheetNumberAndDate(); // Update the date displayed in the sheet count + DrawSheetPath* GetFirst(); + DrawSheetPath* GetNext(); + DrawSheetPath* GetSheet( int index ); private: void BuildSheetList( DrawSheetStruct* sheet ); @@ -242,9 +247,9 @@ public: ~EDA_ScreenList() { } int GetCount() { return m_List.GetCount(); } - SCH_SCREEN* GetFirst(); - SCH_SCREEN* GetNext(); - SCH_SCREEN* GetScreen( unsigned int index ); + SCH_SCREEN* GetFirst(); + SCH_SCREEN* GetNext(); + SCH_SCREEN* GetScreen( unsigned int index ); private: void AddScreenToList( SCH_SCREEN* testscreen ); diff --git a/eeschema/component_class.cpp b/eeschema/component_class.cpp index afcec247d7..ced31b7d97 100644 --- a/eeschema/component_class.cpp +++ b/eeschema/component_class.cpp @@ -94,7 +94,7 @@ const wxString& EDA_SchComponentStruct::ReturnFieldName( int aFieldNdx ) const /****************************************************************/ -wxString EDA_SchComponentStruct::GetPath( DrawSheetList* sheet ) +wxString EDA_SchComponentStruct::GetPath( DrawSheetPath* sheet ) /****************************************************************/ { wxString str; @@ -105,7 +105,7 @@ wxString EDA_SchComponentStruct::GetPath( DrawSheetList* sheet ) /********************************************************************/ -const wxString EDA_SchComponentStruct::GetRef( DrawSheetList* sheet ) +const wxString EDA_SchComponentStruct::GetRef( DrawSheetPath* sheet ) /********************************************************************/ { wxString path = GetPath( sheet ); @@ -137,7 +137,7 @@ const wxString EDA_SchComponentStruct::GetRef( DrawSheetList* sheet ) /***********************************************************************/ -void EDA_SchComponentStruct::SetRef( DrawSheetList* sheet, wxString ref ) +void EDA_SchComponentStruct::SetRef( DrawSheetPath* sheet, wxString ref ) /***********************************************************************/ { //check to see if it is already there before inserting it diff --git a/eeschema/component_class.h b/eeschema/component_class.h index dd8a61537a..8b20c7ca4b 100644 --- a/eeschema/component_class.h +++ b/eeschema/component_class.h @@ -88,7 +88,7 @@ public: } }; -WX_DECLARE_OBJARRAY( DrawSheetList, ArrayOfSheetLists ); +WX_DECLARE_OBJARRAY( DrawSheetPath, ArrayOfSheetLists ); /* the class EDA_SchComponentStruct describes a real component */ class EDA_SchComponentStruct : public DrawPartStruct { @@ -148,9 +148,9 @@ public: //returns a unique ID, in the form of a path. - wxString GetPath( DrawSheetList* sheet ); - const wxString GetRef( DrawSheetList* sheet ); - void SetRef( DrawSheetList* sheet, wxString ref ); + wxString GetPath( DrawSheetPath* sheet ); + const wxString GetRef( DrawSheetPath* sheet ); + void SetRef( DrawSheetPath* sheet, wxString ref ); void ClearRefs(); #if defined (DEBUG) diff --git a/eeschema/delsheet.cpp b/eeschema/delsheet.cpp index 89d212a60f..b8d2d25468 100644 --- a/eeschema/delsheet.cpp +++ b/eeschema/delsheet.cpp @@ -42,7 +42,7 @@ wxString msg; { msg.Printf( _("Sheet %s (file %s) modified. Save it?"), FirstSheet->m_SheetName.GetData(), - FirstSheet->m_FileName.GetData()); + FirstSheet->GetFileName().GetData()); if( IsOK(NULL, msg) ) { frame->SaveEEFile(FirstSheet->m_AssociatedScreen, FILE_SAVE_AS); diff --git a/eeschema/dialog_build_BOM.cpp b/eeschema/dialog_build_BOM.cpp index ba8957725d..17cb812d2d 100644 --- a/eeschema/dialog_build_BOM.cpp +++ b/eeschema/dialog_build_BOM.cpp @@ -772,7 +772,7 @@ int GenListeCmp( ListComponent * List ) int ItemCount = 0; EDA_BaseStruct *DrawList; EDA_SchComponentStruct *DrawLibItem; -DrawSheetList * sheet; +DrawSheetPath * sheet; /* Build the sheet (not screen) list */ EDA_SheetList SheetList(NULL); @@ -820,7 +820,7 @@ static int GenListeGLabels( ListLabel * List ) int ItemCount = 0; EDA_BaseStruct *DrawList; DrawSheetLabelStruct *SheetLabel; -DrawSheetList * sheet; +DrawSheetPath * sheet; /* Build the screen list */ EDA_SheetList SheetList(NULL); diff --git a/eeschema/erc.cpp b/eeschema/erc.cpp index 21cc3fb235..404ac13753 100644 --- a/eeschema/erc.cpp +++ b/eeschema/erc.cpp @@ -712,7 +712,7 @@ static bool WriteDiagnosticERC( const wxString& FullFileName ) DrawMarkerStruct* Marker; char Line[256]; static FILE* OutErc; - DrawSheetList* Sheet; + DrawSheetPath* Sheet; wxString msg; if( ( OutErc = wxFopen( FullFileName, wxT( "wt" ) ) ) == NULL ) diff --git a/eeschema/files-io.cpp b/eeschema/files-io.cpp index a6ff810fce..97f085133a 100644 --- a/eeschema/files-io.cpp +++ b/eeschema/files-io.cpp @@ -141,7 +141,7 @@ int WinEDA_SchematicFrame::LoadOneEEProject( const wxString& FileName, bool IsNe wxSetWorkingDirectory( wxPathOnly( FullFileName ) ); GetScreen()->m_FileName = FullFileName; - g_RootSheet->m_FileName = FullFileName; + g_RootSheet->SetFileName(FullFileName); Affiche_Message( wxEmptyString ); MsgPanel->EraseMsgBox(); @@ -223,14 +223,13 @@ int WinEDA_SchematicFrame::LoadOneEEProject( const wxString& FileName, bool IsNe //load the project. SAFE_DELETE(g_RootSheet->m_AssociatedScreen); - if(!g_RootSheet->Load(this)) - return 0; + bool diag = g_RootSheet->Load(this); /* Reaffichage ecran de base (ROOT) si necessaire */ ActiveScreen = GetScreen(); Zoom_Automatique( FALSE ); DrawPanel->Refresh( TRUE ); - return 1; + return diag; } /**********************************************************/ SCH_SCREEN * WinEDA_SchematicFrame::CreateNewScreen( diff --git a/eeschema/find.cpp b/eeschema/find.cpp index e70b2db46e..f2bc0bb17a 100644 --- a/eeschema/find.cpp +++ b/eeschema/find.cpp @@ -70,7 +70,7 @@ EDA_BaseStruct* WinEDA_SchematicFrame::FindComponentAndItem( * @param mouseWarp If true, then move the mouse cursor to the item. */ { - DrawSheetList* sheet, * SheetWithComponentFound = NULL; + DrawSheetPath* sheet, * SheetWithComponentFound = NULL; EDA_BaseStruct* DrawList = NULL; EDA_SchComponentStruct* Component = NULL; wxSize DrawAreaSize = DrawPanel->GetClientSize(); @@ -266,7 +266,7 @@ EDA_BaseStruct* WinEDA_SchematicFrame::FindMarker( int SearchType ) * SearchType = 0: search the first marker, else search next marker */ { - DrawSheetList* sheet, * FirstSheet = NULL; + DrawSheetPath* sheet, * FirstSheet = NULL; EDA_BaseStruct* DrawList, * FirstStruct = NULL, * Struct = NULL; DrawMarkerStruct* Marker = NULL; int StartCount; @@ -420,7 +420,7 @@ EDA_BaseStruct* WinEDA_SchematicFrame::FindSchematicItem( * @param mouseWarp If true, then move the mouse cursor to the item. */ { - DrawSheetList* Sheet, * FirstSheet = NULL; + DrawSheetPath* Sheet, * FirstSheet = NULL; EDA_BaseStruct* DrawList = NULL, * FirstStruct = NULL, * Struct = NULL; int StartCount, ii, jj; bool NotFound; diff --git a/eeschema/hierarch.cpp b/eeschema/hierarch.cpp index 5457182b23..9c674d2bf5 100644 --- a/eeschema/hierarch.cpp +++ b/eeschema/hierarch.cpp @@ -23,7 +23,7 @@ #include "../bitmaps/treensel.xpm" -static void UpdateScreenFromSheet(WinEDA_SchematicFrame * frame); +static bool UpdateScreenFromSheet(WinEDA_SchematicFrame * frame); enum { ID_TREECTRL_HIERARCHY = 1600 @@ -37,8 +37,8 @@ class WinEDA_HierFrame; class TreeItemData: public wxTreeItemData { public: - DrawSheetList m_SheetList; - TreeItemData(DrawSheetList sheet) :wxTreeItemData() + DrawSheetPath m_SheetList; + TreeItemData(DrawSheetPath sheet) :wxTreeItemData() { m_SheetList = sheet; } @@ -92,7 +92,7 @@ private: public: WinEDA_HierFrame(WinEDA_SchematicFrame *parent, wxDC * DC, const wxPoint& pos); - void BuildSheetList(DrawSheetList * list, wxTreeItemId * previousmenu); + void BuildSheetList(DrawSheetPath * list, wxTreeItemId * previousmenu); ~WinEDA_HierFrame(); void OnSelect(wxTreeEvent& event); @@ -133,7 +133,7 @@ WinEDA_HierFrame::WinEDA_HierFrame(WinEDA_SchematicFrame *parent, wxDC * DC, cellule = m_Tree->AddRoot(_("Root"), 0, 1); m_Tree->SetItemBold(cellule, TRUE); - DrawSheetList list; + DrawSheetPath list; list.Push(g_RootSheet); m_Tree->SetItemData( cellule, new TreeItemData(list) ); @@ -179,7 +179,7 @@ void WinEDA_HierFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) } /********************************************************************/ -void WinEDA_HierFrame::BuildSheetList(DrawSheetList* list, +void WinEDA_HierFrame::BuildSheetList(DrawSheetPath* list, wxTreeItemId * previousmenu) /********************************************************************/ /* Routine de creation de l'arbre de navigation dans la hierarchy @@ -235,11 +235,12 @@ wxTreeItemId menu; /***************************************************/ void WinEDA_HierFrame::OnSelect(wxTreeEvent& event) /***************************************************/ -/* appelee sur un double-click de la souris pour la selection d'un item: - Selectionne et affiche l'ecran demand� +/* Called on a double-click on a tree item: + Open the selected sheet, and display the corresponding screen */ { wxTreeItemId ItemSel = m_Tree->GetSelection(); + *(m_Parent->m_CurrentSheet) = ((TreeItemData*)(m_Tree->GetItemData(ItemSel)))->m_SheetList; wxString path = m_Parent->m_CurrentSheet->PathHumanReadable(); @@ -259,7 +260,7 @@ void WinEDA_SchematicFrame::InstallPreviousSheet() g_ItemToRepeat = NULL; MsgPanel->EraseMsgBox(); //make a copy for testing purposes. - DrawSheetList listtemp = *m_CurrentSheet; + DrawSheetPath listtemp = *m_CurrentSheet; listtemp.Pop(); if ( listtemp.LastScreen() == NULL ){ DisplayError( this, wxT("InstallPreviousScreen() Error: Sheet not found")); @@ -290,7 +291,7 @@ void WinEDA_SchematicFrame::InstallNextScreen(DrawSheetStruct * Sheet) } /**************************************************************/ -static void UpdateScreenFromSheet(WinEDA_SchematicFrame * frame) +static bool UpdateScreenFromSheet(WinEDA_SchematicFrame * frame) /**************************************************************/ /* Recherche et installe de l'ecran relatif au sheet symbole Sheet. @@ -302,7 +303,10 @@ static void UpdateScreenFromSheet(WinEDA_SchematicFrame * frame) NewScreen = frame->m_CurrentSheet->LastScreen(); if(!NewScreen) - NewScreen = g_RootSheet->m_AssociatedScreen; + { + DisplayError(frame, wxT("Screen not found for this sheet")); + return false; + } // Reinit des parametres d'affichage du nouvel ecran // assumes m_CurrentSheet has already been updated. @@ -325,6 +329,6 @@ static void UpdateScreenFromSheet(WinEDA_SchematicFrame * frame) frame->DrawPanel->MouseToCursorSchema(); } ActiveScreen = frame->m_CurrentSheet->LastScreen(); - return; + return true; } diff --git a/eeschema/load_one_schematic_file.cpp b/eeschema/load_one_schematic_file.cpp index bc3ae0a4b9..40fdf4843e 100644 --- a/eeschema/load_one_schematic_file.cpp +++ b/eeschema/load_one_schematic_file.cpp @@ -98,6 +98,7 @@ bool WinEDA_SchematicFrame::LoadOneEEFile( SCH_SCREEN* screen, const wxString& F return FALSE; screen->SetCurItem( NULL ); + screen->m_FileName = FullFileName; LineCount = 1; if( ( f = wxFopen( FullFileName, wxT( "rt" ) ) ) == NULL ) @@ -107,7 +108,6 @@ bool WinEDA_SchematicFrame::LoadOneEEFile( SCH_SCREEN* screen, const wxString& F return FALSE; } - screen->m_FileName = FullFileName; MsgDiag = _( "Loading " ) + screen->m_FileName; PrintMsg( MsgDiag ); @@ -886,7 +886,7 @@ static int ReadSheetDescr( wxWindow* frame, char* Line, FILE* f, BASE_SCREEN* Wi } else { - SheetStruct->m_FileName = CONV_FROM_UTF8( Name1 ); + SheetStruct->SetFileName(CONV_FROM_UTF8( Name1 )); //printf("in ReadSheetDescr : SheetStruct->m_FileName = %s \n", Name1); SheetStruct->m_FileNameSize = size; } diff --git a/eeschema/netform.cpp b/eeschema/netform.cpp index 32b9464313..b52f2dd941 100644 --- a/eeschema/netform.cpp +++ b/eeschema/netform.cpp @@ -25,9 +25,9 @@ static void WriteNetListPspice( WinEDA_SchematicFrame* frame, FILE* f, bool use_ static void WriteGENERICListOfNets( FILE* f, ObjetNetListStruct* ObjNet ); static void AddPinToComponentPinList( EDA_SchComponentStruct* Component, - DrawSheetList* sheet, + DrawSheetPath* sheet, LibDrawPin* PinEntry ); -static void FindOthersUnits( EDA_SchComponentStruct* Component, DrawSheetList* Sheet_in); +static void FindOthersUnits( EDA_SchComponentStruct* Component, DrawSheetPath* Sheet_in); static int SortPinsByNum( ObjetNetListStruct** Pin1, ObjetNetListStruct** Pin2 ); static void EraseDuplicatePins( ObjetNetListStruct** TabPin, int NbrPin ); @@ -93,7 +93,7 @@ void WriteNetList( WinEDA_SchematicFrame* frame, const wxString& FileNameNL, /****************************************************************************/ static EDA_SchComponentStruct* FindNextComponentAndCreatPinList( - EDA_BaseStruct* DrawList, DrawSheetList* sheet) + EDA_BaseStruct* DrawList, DrawSheetPath* sheet) /****************************************************************************/ /* Find a "suitable" component from the DrawList @@ -245,7 +245,7 @@ void Write_GENERIC_NetList( WinEDA_SchematicFrame* frame, */ { wxString Line, FootprintName; - DrawSheetList* sheet; + DrawSheetPath* sheet; EDA_BaseStruct* DrawList; EDA_SchComponentStruct* Component; wxString netname; @@ -392,7 +392,7 @@ static void WriteNetListPspice( WinEDA_SchematicFrame* frame, FILE* f, */ { char Line[1024]; - DrawSheetList* sheet; + DrawSheetPath* sheet; EDA_BaseStruct* DrawList; EDA_SchComponentStruct* Component; int ii, nbitems; @@ -534,7 +534,7 @@ static void WriteNetListPCBNEW( WinEDA_SchematicFrame* frame, FILE* f, bool with { wxString Line, FootprintName; char Buf[256]; - DrawSheetList* sheet; + DrawSheetPath* sheet; EDA_BaseStruct* DrawList; EDA_SchComponentStruct* Component; int ii; @@ -676,7 +676,7 @@ static void WriteNetListPCBNEW( WinEDA_SchematicFrame* frame, FILE* f, bool with /*************************************************************************************/ static void AddPinToComponentPinList( EDA_SchComponentStruct* Component, - DrawSheetList* sheetlist, LibDrawPin* Pin ) + DrawSheetPath* sheetlist, LibDrawPin* Pin ) /*************************************************************************************/ /* Add a new pin description in the pin list s_SortedComponentPinList @@ -742,7 +742,7 @@ static void EraseDuplicatePins( ObjetNetListStruct** TabPin, int NbrPin ) /**********************************************************************/ -static void FindOthersUnits( EDA_SchComponentStruct* Component_in, DrawSheetList* Sheet_in) +static void FindOthersUnits( EDA_SchComponentStruct* Component_in, DrawSheetPath* Sheet_in) /**********************************************************************/ /* Recherche les autres parts du boitier auquel appartient la part Component, @@ -754,7 +754,7 @@ static void FindOthersUnits( EDA_SchComponentStruct* Component_in, DrawSheetList EDA_SchComponentStruct* Component2; EDA_LibComponentStruct* Entry; LibEDA_BaseStruct* DEntry; - DrawSheetList* sheet; + DrawSheetPath* sheet; wxString str; EDA_SheetList SheetList( NULL ); @@ -960,7 +960,7 @@ static void WriteNetListCADSTAR( WinEDA_SchematicFrame* frame, FILE* f ) wxString msg; wxString FootprintName; char Line[1024]; - DrawSheetList* sheet; + DrawSheetPath* sheet; EDA_BaseStruct* DrawList; EDA_SchComponentStruct* Component; wxString Title = g_Main_Title + wxT( " " ) + GetBuildVersion(); diff --git a/eeschema/netlist.cpp b/eeschema/netlist.cpp index b72cabdf9f..11c97d4593 100644 --- a/eeschema/netlist.cpp +++ b/eeschema/netlist.cpp @@ -20,7 +20,7 @@ static void PropageNetCode( int OldNetCode, int NewNetCode, int IsBus ); static void SheetLabelConnect( ObjetNetListStruct* SheetLabel ); static int ListeObjetConnection( WinEDA_SchematicFrame* frame, - DrawSheetList* sheetlist, + DrawSheetPath* sheetlist, ObjetNetListStruct* ObjNet ); static int ConvertBusToMembers( ObjetNetListStruct* ObjNet ); static void PointToPointConnect( ObjetNetListStruct* Ref, int IsBus, @@ -154,7 +154,7 @@ void* WinEDA_SchematicFrame::BuildNetListBase() { int NetNumber; int i, istart, NetCode; - DrawSheetList* sheet; + DrawSheetPath* sheet; wxString msg; wxBusyCursor Busy; @@ -435,7 +435,7 @@ static void SheetLabelConnect( ObjetNetListStruct* SheetLabel ) /*****************************************************************************/ -static int ListeObjetConnection( WinEDA_SchematicFrame* frame, DrawSheetList* sheetlist, +static int ListeObjetConnection( WinEDA_SchematicFrame* frame, DrawSheetPath* sheetlist, ObjetNetListStruct* ObjNet ) /*****************************************************************************/ @@ -454,7 +454,7 @@ static int ListeObjetConnection( WinEDA_SchematicFrame* frame, DrawSheetList* sh EDA_LibComponentStruct* Entry; LibEDA_BaseStruct* DEntry; DrawSheetLabelStruct* SheetLabel; - DrawSheetList list; + DrawSheetPath list; DrawList = sheetlist->LastScreen()->EEDrawList; for( ; DrawList; DrawList = DrawList->Pnext ) diff --git a/eeschema/netlist.h b/eeschema/netlist.h index b401378322..47c085b24d 100644 --- a/eeschema/netlist.h +++ b/eeschema/netlist.h @@ -66,7 +66,7 @@ public: void* m_Link; /* Pour SheetLabelStruct: Pointeur sur la feuille de hierarchie * Pour les Pins: pointeur sur le composant */ int m_Flag; /* flag pour calculs internes */ - DrawSheetList m_SheetList; + DrawSheetPath m_SheetList; NetObjetType m_Type; int m_ElectricalType;/* Pour Pins et sheet labels: type electrique */ private: @@ -76,7 +76,7 @@ public: int m_Member; /* pour les labels type BUSWIRE ( labels de bus eclate ) * numero de membre */ IsConnectType m_FlagOfConnection; - DrawSheetList m_SheetListInclude; /* sheet that the hierarchal label connects to.*/ + DrawSheetPath m_SheetListInclude; /* sheet that the hierarchal label connects to.*/ long m_PinNum; /* numero de pin( 4 octets -> 4 codes ascii) */ const wxString* m_Label; /* Tous types Labels:pointeur sur la wxString definissant le label */ wxPoint m_Start, m_End; @@ -102,7 +102,7 @@ typedef struct ListComponent EDA_SchComponentStruct * m_Comp; char m_Ref[32]; //have to store it here since the object refrerences will be duplicated. - DrawSheetList m_SheetList; //composed of UIDs + DrawSheetPath m_SheetList; //composed of UIDs } ListComponent; /* Structure decrivant 1 composant de la schematique (pour *annotation* ) */ @@ -113,7 +113,7 @@ public: int m_NbParts; /* Nombre de parts par boitier */ bool m_PartsLocked; // For multi part components: True if the part cannot be changed int m_Unit; /* Numero de part */ - DrawSheetList m_SheetList; + DrawSheetPath m_SheetList; unsigned long m_TimeStamp; /* unique identification number */ int m_IsNew; /* != 0 pour composants non annotes */ char m_TextValue[32]; /* Valeur */ diff --git a/eeschema/plot.cpp b/eeschema/plot.cpp index 065feedda3..e88cdcd24f 100644 --- a/eeschema/plot.cpp +++ b/eeschema/plot.cpp @@ -773,7 +773,7 @@ void PlotSheetStruct( DrawSheetStruct* Struct ) GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_BOTTOM ); /* Trace des textes : FileName */ - Text = Struct->m_FileName; + Text = Struct->GetFileName(); size = wxSize( Struct->m_FileNameSize, Struct->m_FileNameSize ); if( (g_PlotFormat == PLOT_FORMAT_POST) && g_PlotPSColorOpt ) SetColorMapPS( ReturnLayerColor( LAYER_SHEETFILENAME ) ); diff --git a/eeschema/save_schemas.cpp b/eeschema/save_schemas.cpp index 68aa9f6091..cf166a45da 100644 --- a/eeschema/save_schemas.cpp +++ b/eeschema/save_schemas.cpp @@ -495,10 +495,10 @@ DrawSheetLabelStruct * SheetLabel; } } - if( ! SheetStruct->m_FileName.IsEmpty()) + if( ! SheetStruct->GetFileName().IsEmpty()) { if(fprintf(f,"F1 \"%s\" %d\n", - CONV_TO_UTF8(SheetStruct->m_FileName), + CONV_TO_UTF8(SheetStruct->GetFileName()), SheetStruct->m_FileNameSize) == EOF) { Failed = TRUE; return(Failed); diff --git a/eeschema/schematic_undo_redo.cpp b/eeschema/schematic_undo_redo.cpp index dd8b1c7fdd..c54e03c4d2 100644 --- a/eeschema/schematic_undo_redo.cpp +++ b/eeschema/schematic_undo_redo.cpp @@ -533,8 +533,11 @@ void SCH_SCREEN::ClearUndoORRedoList( EDA_BaseStruct* List ) item = PickedList->m_PickedStruct; if( item ) { +#if 0 if( item->Type() == DRAW_SHEET_STRUCT_TYPE ) { + printf( + "schematic undo_redo.cpp: undo_redo with a DRAW_SHEET_STRUCT_TYPE, checkme!!\n" ); DrawSheetStruct* sheet = (DrawSheetStruct*) item; /* Delete sub hierarchy if the sheet must be deleted */ if( (sheet->m_Flags & IS_DELETED) != 0 ) @@ -544,8 +547,6 @@ void SCH_SCREEN::ClearUndoORRedoList( EDA_BaseStruct* List ) { if( (item->m_Flags & IS_NEW) == 0 ) { - printf( - "schematic undo_redo.cpp: undo_redo with a DRAW_SHEET_STRUCT_TYPE, checkme!!\n" ); /* * sheet->EEDrawList = NULL; @@ -555,6 +556,7 @@ void SCH_SCREEN::ClearUndoORRedoList( EDA_BaseStruct* List ) } } } +#endif if( (item->m_Flags & IS_NEW) == 0 ) { SAFE_DELETE( item ); @@ -578,6 +580,7 @@ void SCH_SCREEN::ClearUndoORRedoList( EDA_BaseStruct* List ) } else { +#if 0 if( FirstItem->Type() == DRAW_SHEET_STRUCT_TYPE ) { DrawSheetStruct* sheet = (DrawSheetStruct*) FirstItem; @@ -599,6 +602,7 @@ void SCH_SCREEN::ClearUndoORRedoList( EDA_BaseStruct* List ) } } } +#endif if( (FirstItem->m_Flags & IS_NEW) == 0 ) { SAFE_DELETE( FirstItem ); diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp index 25651f36d9..82455449ad 100644 --- a/eeschema/schframe.cpp +++ b/eeschema/schframe.cpp @@ -140,7 +140,7 @@ WinEDA_SchematicFrame::WinEDA_SchematicFrame( wxWindow* father, m_Draw_Axis = FALSE; // TRUE to show axis m_Draw_Grid = g_ShowGrid; // TRUE to show a grid m_Draw_Sheet_Ref = TRUE; // TRUE to show sheet references - m_CurrentSheet = new DrawSheetList(); + m_CurrentSheet = new DrawSheetPath(); CreateScreens(); @@ -179,7 +179,7 @@ WinEDA_SchematicFrame::~WinEDA_SchematicFrame() { m_Parent->m_SchematicFrame = NULL; SAFE_DELETE( g_RootSheet ); - SAFE_DELETE( m_CurrentSheet ); //a DrawSheetList, on the heap. + SAFE_DELETE( m_CurrentSheet ); //a DrawSheetPath, on the heap. m_CurrentSheet = NULL; } @@ -187,7 +187,7 @@ WinEDA_SchematicFrame::~WinEDA_SchematicFrame() /***************/ /* utility functions */ /***************/ -DrawSheetList* WinEDA_SchematicFrame::GetSheet() +DrawSheetPath* WinEDA_SchematicFrame::GetSheet() { return m_CurrentSheet; } @@ -205,7 +205,7 @@ void WinEDA_SchematicFrame::SetScreen( SCH_SCREEN* screen ) //there is ambiguity in this function (there may be several //instances of a given sheet, but irregardless it is useful //for printing etc. - DrawSheetList sheetlist; + DrawSheetPath sheetlist; if( g_RootSheet->LocatePathOfScreen( screen, &sheetlist ) ) { @@ -250,7 +250,7 @@ void WinEDA_SchematicFrame::CreateScreens() /**************************************************************/ void WinEDA_SchematicFrame::OnCloseWindow( wxCloseEvent& Event ) { - DrawSheetList* sheet; + DrawSheetPath* sheet; if( m_Parent->m_LibeditFrame ) // Can close component editor ? { @@ -400,18 +400,18 @@ int WinEDA_SchematicFrame::BestZoom() int bestzoom; wxSize size; - dx = GetScreen()->m_CurrentSheetDesc->m_Size.x; - dy = GetScreen()->m_CurrentSheetDesc->m_Size.y; + dx = GetScreen()->m_CurrentSheetDesc->m_Size.x; + dy = GetScreen()->m_CurrentSheetDesc->m_Size.y; - size = DrawPanel->GetClientSize(); - ii = dx / size.x; - jj = dy / size.y; - bestzoom = MAX( ii, jj ) + 1; - - GetScreen()->SetZoom( ii ); - GetScreen()->m_Curseur.x = dx / 2; - GetScreen()->m_Curseur.y = dy / 2; + size = DrawPanel->GetClientSize(); + ii = dx / size.x; + jj = dy / size.y; + bestzoom = MAX( ii, jj ) + 1; + GetScreen()->SetZoom( ii ); + GetScreen()->m_Curseur.x = dx / 2; + GetScreen()->m_Curseur.y = dy / 2; + return bestzoom; } diff --git a/eeschema/schframe.h b/eeschema/schframe.h index fd46989fd5..92661e523a 100644 --- a/eeschema/schframe.h +++ b/eeschema/schframe.h @@ -16,7 +16,7 @@ class WinEDA_SchematicFrame : public WinEDA_DrawFrame { public: WinEDAChoiceBox* m_SelPartBox; - DrawSheetList* m_CurrentSheet; //which sheet we are presently working on. + DrawSheetPath* m_CurrentSheet; //which sheet we are presently working on. private: wxMenu* m_FilesMenu; @@ -45,7 +45,7 @@ public: int hotkey, EDA_BaseStruct* DrawStruct ); - DrawSheetList* GetSheet(); + DrawSheetPath* GetSheet(); virtual BASE_SCREEN* GetScreen(); virtual void SetScreen(SCH_SCREEN* screen); virtual wxString GetScreenDesc(); @@ -168,6 +168,11 @@ private: public: bool EditSheet( DrawSheetStruct* Sheet, wxDC* DC ); + /** Function UpdateSheetNumberAndDate + * Set a sheet number, the sheet count for sheets in the whole schematic + * and update the date in all screens + */ + void UpdateSheetNumberAndDate(); private: void StartMoveSheet( DrawSheetStruct* sheet, wxDC* DC ); diff --git a/eeschema/sheet.cpp b/eeschema/sheet.cpp index 8a5d0ac887..5eb794ffad 100644 --- a/eeschema/sheet.cpp +++ b/eeschema/sheet.cpp @@ -68,9 +68,9 @@ IMPLEMENT_DYNAMIC_CLASS( WinEDA_SheetPropertiesFrame, wxDialog ) BEGIN_EVENT_TABLE( WinEDA_SheetPropertiesFrame, wxDialog ) ////@begin WinEDA_SheetPropertiesFrame event table entries -EVT_BUTTON( wxID_CANCEL, WinEDA_SheetPropertiesFrame::OnCancelClick ) + EVT_BUTTON( wxID_CANCEL, WinEDA_SheetPropertiesFrame::OnCancelClick ) -EVT_BUTTON( wxID_OK, WinEDA_SheetPropertiesFrame::OnOkClick ) + EVT_BUTTON( wxID_OK, WinEDA_SheetPropertiesFrame::OnOkClick ) ////@end WinEDA_SheetPropertiesFrame event table entries @@ -115,24 +115,24 @@ bool WinEDA_SheetPropertiesFrame::Create( wxWindow* parent, wxWindowID id, const const wxPoint& pos, const wxSize& size, long style ) { ////@begin WinEDA_SheetPropertiesFrame member initialisation - m_FileNameWin = NULL; - m_SheetNameWin = NULL; - m_FileNameTextSize = NULL; - m_FileNameSize = NULL; + m_FileNameWin = NULL; + m_SheetNameWin = NULL; + m_FileNameTextSize = NULL; + m_FileNameSize = NULL; m_SheetNameTextSize = NULL; - m_SheetNameSize = NULL; - + m_SheetNameSize = NULL; ////@end WinEDA_SheetPropertiesFrame member initialisation ////@begin WinEDA_SheetPropertiesFrame creation - SetExtraStyle( GetExtraStyle() | wxWS_EX_BLOCK_EVENTS ); + SetExtraStyle(wxWS_EX_BLOCK_EVENTS); wxDialog::Create( parent, id, caption, pos, size, style ); CreateControls(); - GetSizer()->Fit( this ); - GetSizer()->SetSizeHints( this ); + if (GetSizer()) + { + GetSizer()->SetSizeHints(this); + } Centre(); - ////@end WinEDA_SheetPropertiesFrame creation return true; } @@ -147,89 +147,64 @@ void WinEDA_SheetPropertiesFrame::CreateControls() SetFont( *g_DialogFont ); ////@begin WinEDA_SheetPropertiesFrame content construction - // Generated by DialogBlocks, 27/02/2006 14:12:10 (unregistered) + // Generated by DialogBlocks, 28/02/2008 18:15:56 (unregistered) WinEDA_SheetPropertiesFrame* itemDialog1 = this; - wxBoxSizer* itemBoxSizer2 = new wxBoxSizer( wxVERTICAL ); - itemDialog1->SetSizer( itemBoxSizer2 ); + wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL); + itemDialog1->SetSizer(itemBoxSizer2); - wxBoxSizer* itemBoxSizer3 = new wxBoxSizer( wxHORIZONTAL ); - itemBoxSizer2->Add( itemBoxSizer3, 0, wxGROW | wxALL, 5 ); + wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL); + itemBoxSizer2->Add(itemBoxSizer3, 0, wxGROW|wxALL, 5); - wxBoxSizer* itemBoxSizer4 = new wxBoxSizer( wxVERTICAL ); - itemBoxSizer3->Add( itemBoxSizer4, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); + wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxVERTICAL); + itemBoxSizer3->Add(itemBoxSizer4, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); - wxStaticText* itemStaticText5 = new wxStaticText( itemDialog1, wxID_STATIC, _( - "Filename (will be created upon save if it does not already exist):" ), - wxDefaultPosition, - wxDefaultSize, 0 ); - itemBoxSizer4->Add( itemStaticText5, - 0, - wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, - 5 ); + wxStaticText* itemStaticText5 = new wxStaticText( itemDialog1, wxID_STATIC, _("Filename:"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer4->Add(itemStaticText5, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - m_FileNameWin = new wxTextCtrl( itemDialog1, ID_TEXTCTRL1, _T( "" ), wxDefaultPosition, - wxSize( 300, -1 ), wxTE_PROCESS_ENTER ); - itemBoxSizer4->Add( m_FileNameWin, 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxBOTTOM, 5 ); + m_FileNameWin = new wxTextCtrl( itemDialog1, ID_TEXTCTRL1, _T(""), wxDefaultPosition, wxSize(300, -1), wxTE_PROCESS_ENTER ); + itemBoxSizer4->Add(m_FileNameWin, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxBOTTOM, 5); - wxStaticText* itemStaticText7 = new wxStaticText( itemDialog1, wxID_STATIC, _( - "Sheetname:" ), wxDefaultPosition, - wxDefaultSize, 0 ); - itemBoxSizer4->Add( itemStaticText7, - 0, - wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, - 5 ); + wxStaticText* itemStaticText7 = new wxStaticText( itemDialog1, wxID_STATIC, _("Sheetname:"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer4->Add(itemStaticText7, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - m_SheetNameWin = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T( "" ), wxDefaultPosition, - wxSize( 300, -1 ), 0 ); - itemBoxSizer4->Add( m_SheetNameWin, 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxBOTTOM, 5 ); + m_SheetNameWin = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxSize(300, -1), 0 ); + itemBoxSizer4->Add(m_SheetNameWin, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxBOTTOM, 5); - wxBoxSizer* itemBoxSizer9 = new wxBoxSizer( wxVERTICAL ); - itemBoxSizer3->Add( itemBoxSizer9, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); + wxBoxSizer* itemBoxSizer9 = new wxBoxSizer(wxVERTICAL); + itemBoxSizer3->Add(itemBoxSizer9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); - m_FileNameTextSize = new wxStaticText( itemDialog1, wxID_STATIC, _( - "Size" ), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer9->Add( m_FileNameTextSize, - 0, - wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, - 5 ); + m_FileNameTextSize = new wxStaticText( itemDialog1, wxID_STATIC, _("Size"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer9->Add(m_FileNameTextSize, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - m_FileNameSize = new wxTextCtrl( itemDialog1, ID_TEXTCTRL2, _T( - "" ), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer9->Add( m_FileNameSize, 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxBOTTOM, 5 ); + m_FileNameSize = new wxTextCtrl( itemDialog1, ID_TEXTCTRL2, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer9->Add(m_FileNameSize, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxBOTTOM, 5); - m_SheetNameTextSize = new wxStaticText( itemDialog1, wxID_STATIC, _( - "Size" ), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer9->Add( m_SheetNameTextSize, - 0, - wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE, - 5 ); + m_SheetNameTextSize = new wxStaticText( itemDialog1, wxID_STATIC, _("Size"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer9->Add(m_SheetNameTextSize, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - m_SheetNameSize = new wxTextCtrl( itemDialog1, ID_TEXTCTRL3, _T( - "" ), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer9->Add( m_SheetNameSize, 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxBOTTOM, 5 ); + m_SheetNameSize = new wxTextCtrl( itemDialog1, ID_TEXTCTRL3, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer9->Add(m_SheetNameSize, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxBOTTOM, 5); - itemBoxSizer2->Add( 5, 5, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5 ); + itemBoxSizer2->Add(5, 5, 1, wxGROW|wxALL, 5); - wxBoxSizer* itemBoxSizer15 = new wxBoxSizer( wxHORIZONTAL ); - itemBoxSizer2->Add( itemBoxSizer15, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5 ); + wxBoxSizer* itemBoxSizer15 = new wxBoxSizer(wxHORIZONTAL); + itemBoxSizer2->Add(itemBoxSizer15, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); - wxButton* itemButton16 = new wxButton( itemDialog1, wxID_CANCEL, _( - "&Cancel" ), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton16->SetForegroundColour( wxColour( 0, 0, 255 ) ); - itemBoxSizer15->Add( itemButton16, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); + wxButton* itemButton16 = new wxButton( itemDialog1, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); + itemButton16->SetForegroundColour(wxColour(0, 0, 255)); + itemBoxSizer15->Add(itemButton16, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); - wxButton* itemButton17 = new wxButton( itemDialog1, wxID_OK, _( - "&OK" ), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton17->SetForegroundColour( wxColour( 196, 0, 0 ) ); - itemBoxSizer15->Add( itemButton17, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); + wxButton* itemButton17 = new wxButton( itemDialog1, wxID_OK, _("&OK"), wxDefaultPosition, wxDefaultSize, 0 ); + itemButton17->SetForegroundColour(wxColour(196, 0, 0)); + itemBoxSizer15->Add(itemButton17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); // Set validators - m_FileNameWin->SetValidator( wxTextValidator( wxFILTER_NONE, &m_CurrentSheet->m_FileName ) ); - m_SheetNameWin->SetValidator( wxTextValidator( wxFILTER_NONE, &m_CurrentSheet->m_SheetName ) ); - + m_SheetNameWin->SetValidator( wxTextValidator(wxFILTER_NONE, & m_CurrentSheet->m_SheetName) ); ////@end WinEDA_SheetPropertiesFrame content construction + + m_FileNameWin->SetValue( m_CurrentSheet->GetFileName()); } @@ -251,9 +226,8 @@ wxBitmap WinEDA_SheetPropertiesFrame::GetBitmapResource( const wxString& name ) { // Bitmap retrieval ////@begin WinEDA_SheetPropertiesFrame bitmap retrieval - wxUnusedVar( name ); + wxUnusedVar(name); return wxNullBitmap; - ////@end WinEDA_SheetPropertiesFrame bitmap retrieval } @@ -266,9 +240,8 @@ wxIcon WinEDA_SheetPropertiesFrame::GetIconResource( const wxString& name ) { // Icon retrieval ////@begin WinEDA_SheetPropertiesFrame icon retrieval - wxUnusedVar( name ); + wxUnusedVar(name); return wxNullIcon; - ////@end WinEDA_SheetPropertiesFrame icon retrieval } @@ -291,9 +264,9 @@ void WinEDA_SheetPropertiesFrame::SheetPropertiesAccept( wxCommandEvent& event ) ChangeFileNameExt( FileName, g_SchExtBuffer ); - if( m_CurrentSheet->m_FileName != FileName ) + if( m_CurrentSheet->GetFileName() != FileName ) { - m_CurrentSheet->m_FileName = FileName; + m_CurrentSheet->SetFileName(FileName); if( wxFileExists( FileName ) ) //do we reload the data from the existing file { @@ -336,7 +309,9 @@ void WinEDA_SheetPropertiesFrame::SheetPropertiesAccept( wxCommandEvent& event ) msg, m_Parent->m_InternalUnits ); if( ( m_CurrentSheet->m_SheetName.IsEmpty() ) ) - m_CurrentSheet->m_SheetName = m_CurrentSheet->m_FileName; + { + m_CurrentSheet->m_SheetName.Printf( wxT("Sheet%8.8lX"), GetTimeStamp() ); + } EndModal( TRUE ); diff --git a/eeschema/sheet.h b/eeschema/sheet.h index 40eee4544a..80abf81258 100644 --- a/eeschema/sheet.h +++ b/eeschema/sheet.h @@ -39,15 +39,15 @@ ////@begin control identifiers #define ID_DIALOG 10000 +#define ID_TEXTCTRL1 10002 +#define ID_TEXTCTRL 10001 +#define ID_TEXTCTRL2 10003 +#define ID_TEXTCTRL3 10004 #define SYMBOL_WINEDA_SHEETPROPERTIESFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX|MAYBE_RESIZE_BORDER #define SYMBOL_WINEDA_SHEETPROPERTIESFRAME_TITLE _("Sheet properties") #define SYMBOL_WINEDA_SHEETPROPERTIESFRAME_IDNAME ID_DIALOG #define SYMBOL_WINEDA_SHEETPROPERTIESFRAME_SIZE wxSize(400, 300) #define SYMBOL_WINEDA_SHEETPROPERTIESFRAME_POSITION wxDefaultPosition -#define ID_TEXTCTRL1 10002 -#define ID_TEXTCTRL 10001 -#define ID_TEXTCTRL2 10003 -#define ID_TEXTCTRL3 10004 ////@end control identifiers /*! diff --git a/eeschema/sheet.pjd b/eeschema/sheet.pjd index d11f630461..6e6d51d84f 100644 --- a/eeschema/sheet.pjd +++ b/eeschema/sheet.pjd @@ -1,4 +1,4 @@ - +
0 @@ -6,18 +6,20 @@ "" "" "" - 24 "" 0 0 0 + 1 1 1 + 1 0 "jean-pierre Charras" "License GNU" "" 0 + 0 "<All platforms>" "<Any>" "///////////////////////////////////////////////////////////////////////////// @@ -43,12 +45,6 @@ // Licence: ///////////////////////////////////////////////////////////////////////////// -" - " -/*! - * %BODY% - */ - " "///////////////////////////////////////////////////////////////////////////// // Name: %SYMBOLS-FILENAME% @@ -82,6 +78,14 @@ #include "wx/wx.h" #endif +" + " /// %BODY% +" + " +/*! + * %BODY% + */ + " "app_resources.h" "app_resources.cpp" @@ -93,11 +97,23 @@ "" "<None>" "<System>" + "utf-8" "<System>" "" + 0 + 0 + 4 + " " + "" 0 + 0 + 1 + 0 1 1 + 0 + 1 + 0
@@ -174,7 +190,7 @@ 1 1 0 - 0 + 1 "Windows" "html-document" @@ -198,7 +214,10 @@ 10000 0 "" + 0 + "" 0 + 0 "ID_DIALOG" 10000 "WinEDA_SheetPropertiesFrame" @@ -219,10 +238,16 @@ 0 1 "<Any platform>" + "" + "" + "" + "" + "" + "" + "Tiled" 0 1 0 - 0 1 0 0 @@ -237,7 +262,9 @@ 0 0 0 - 0 + 0 + 0 + 0 0 0 1 @@ -249,6 +276,7 @@ -1 400 300 + 0 "" "wxBoxSizer V" @@ -329,9 +357,16 @@ "wbStaticTextProxy" "wxID_STATIC" 5105 + "" "wxStaticText" + "wxStaticText" + 1 + 0 + "" + "" "" "Filename:" + -1 "" "" "" @@ -342,6 +377,11 @@ "<Any platform>" "" "" + "" + "" + "" + "" + "" 0 0 0 @@ -353,6 +393,8 @@ 0 0 0 + 0 + 0 "" -1 -1 @@ -385,7 +427,13 @@ "wbTextCtrlProxy" "ID_TEXTCTRL1" 10002 + "" "wxTextCtrl" + "wxTextCtrl" + 1 + 0 + "" + "" "m_FileNameWin" "" 0 @@ -397,8 +445,13 @@ 0 1 "<Any platform>" - "m_CurrentSheet->m_Field[SHEET_FILENAME].m_Text" - "wxTextValidator(wxFILTER_NONE, & %VARIABLE%)" + "" + "" + "" + "" + "" + "" + "" 0 1 0 @@ -412,8 +465,9 @@ 0 0 0 - 0 + 0 0 + 0 0 0 0 @@ -421,6 +475,8 @@ 0 0 0 + 0 + 0 "" -1 -1 @@ -453,9 +509,16 @@ "wbStaticTextProxy" "wxID_STATIC" 5105 + "" "wxStaticText" + "wxStaticText" + 1 + 0 + "" + "" "" "Sheetname:" + -1 "" "" "" @@ -466,6 +529,11 @@ "<Any platform>" "" "" + "" + "" + "" + "" + "" 0 0 0 @@ -477,6 +545,8 @@ 0 0 0 + 0 + 0 "" -1 -1 @@ -509,7 +579,13 @@ "wbTextCtrlProxy" "ID_TEXTCTRL" 10001 + "" "wxTextCtrl" + "wxTextCtrl" + 1 + 0 + "" + "" "m_SheetNameWin" "" 0 @@ -521,8 +597,13 @@ 0 1 "<Any platform>" - "m_CurrentSheet->m_Field[VALUE].m_Text" + "m_CurrentSheet->m_SheetName" "wxTextValidator(wxFILTER_NONE, & %VARIABLE%)" + "" + "" + "" + "" + "" 0 0 0 @@ -536,8 +617,9 @@ 0 0 0 - 0 + 0 0 + 0 0 0 0 @@ -545,6 +627,8 @@ 0 0 0 + 0 + 0 "" -1 -1 @@ -603,9 +687,16 @@ "wbStaticTextProxy" "wxID_STATIC" 5105 + "" "wxStaticText" + "wxStaticText" + 1 + 0 + "" + "" "m_FileNameTextSize" "Size" + -1 "" "" "" @@ -616,6 +707,11 @@ "<Any platform>" "" "" + "" + "" + "" + "" + "" 0 0 0 @@ -627,6 +723,8 @@ 0 0 0 + 0 + 0 "" -1 -1 @@ -659,7 +757,13 @@ "wbTextCtrlProxy" "ID_TEXTCTRL2" 10003 + "" "wxTextCtrl" + "wxTextCtrl" + 1 + 0 + "" + "" "m_FileNameSize" "" 0 @@ -673,6 +777,11 @@ "<Any platform>" "" "" + "" + "" + "" + "" + "" 0 0 0 @@ -686,8 +795,9 @@ 0 0 0 - 0 + 0 0 + 0 0 0 0 @@ -695,6 +805,8 @@ 0 0 0 + 0 + 0 "" -1 -1 @@ -713,6 +825,7 @@ 0 "" "" + 0 "wxStaticText: wxID_STATIC" @@ -727,9 +840,16 @@ "wbStaticTextProxy" "wxID_STATIC" 5105 + "" "wxStaticText" + "wxStaticText" + 1 + 0 + "" + "" "m_SheetNameTextSize" "Size" + -1 "" "" "" @@ -740,6 +860,11 @@ "<Any platform>" "" "" + "" + "" + "" + "" + "" 0 0 0 @@ -751,6 +876,8 @@ 0 0 0 + 0 + 0 "" -1 -1 @@ -783,7 +910,13 @@ "wbTextCtrlProxy" "ID_TEXTCTRL3" 10004 + "" "wxTextCtrl" + "wxTextCtrl" + 1 + 0 + "" + "" "m_SheetNameSize" "" 0 @@ -797,6 +930,11 @@ "<Any platform>" "" "" + "" + "" + "" + "" + "" 0 0 0 @@ -810,8 +948,9 @@ 0 0 0 - 0 + 0 0 + 0 0 0 0 @@ -819,6 +958,8 @@ 0 0 0 + 0 + 0 "" -1 -1 @@ -837,6 +978,7 @@ 0 "" "" + 0 @@ -853,9 +995,9 @@ "wbSpacerProxy" 5 5 - "Centre" + "Expand" "Centre" - 0 + 1 5 1 1 @@ -905,12 +1047,25 @@ "wxEVT_COMMAND_BUTTON_CLICKED|OnCancelClick" "wxID_CANCEL" 5101 + "" "wxButton" + "wxButton" + 1 + 0 + "" + "" "" "&Cancel" 0 "" "" + "" + "" + "" + "" + "" + "" + "" "" "0000FF" "" @@ -924,6 +1079,8 @@ 0 0 0 + 0 + 0 "" -1 -1 @@ -957,12 +1114,25 @@ "wxEVT_COMMAND_BUTTON_CLICKED|OnOkClick" "wxID_OK" 5100 + "" "wxButton" + "wxButton" + 1 + 0 + "" + "" "" "&OK" 0 "" "" + "" + "" + "" + "" + "" + "" + "" "" "C40000" "" @@ -976,6 +1146,8 @@ 0 0 0 + 0 + 0 "" -1 -1 diff --git a/include/wxstruct.h b/include/wxstruct.h index 59c1eb1c54..3299780851 100644 --- a/include/wxstruct.h +++ b/include/wxstruct.h @@ -75,7 +75,7 @@ class DrawGlobalLabelStruct; class DrawTextStruct; class EDA_DrawLineStruct; class DrawSheetStruct; -class DrawSheetList; +class DrawSheetPath; class DrawSheetLabelStruct; class EDA_SchComponentStruct; class LibDrawField;