screen number and screen count now are set

This commit is contained in:
charras 2008-04-30 17:04:22 +00:00
parent 3912554721
commit 0ac832f066
12 changed files with 128 additions and 123 deletions

View File

@ -10,6 +10,7 @@ email address.
================================================================================ ================================================================================
+eeschema: +eeschema:
made in some dialogs the ESC key working (linux version, already working under windows) made in some dialogs the ESC key working (linux version, already working under windows)
screen number and screen count now are set
2008-Apr-29 UPDATE Dick Hollenbeck <dick@softplc.com> 2008-Apr-29 UPDATE Dick Hollenbeck <dick@softplc.com>

View File

@ -22,45 +22,23 @@ static int ExistUnit( CmpListStruct* Objet, int Unit,
CmpListStruct* BaseListeCmp, int NbOfCmp ); CmpListStruct* BaseListeCmp, int NbOfCmp );
/************************************************/ /******************************************************/
void WinEDA_SchematicFrame::UpdateSheetNumberAndDate() void WinEDA_SchematicFrame::UpdateSheetNumberAndDate()
/************************************************/ /******************************************************/
/* Set a sheet number, the sheet count for sheets in the whole schematic /* Set a sheet number, the sheet count for sheets in the whole schematic
* and update the date in all screens * and update the date in all screens
*/ */
{ {
wxString date = GenDate(); wxString date = GenDate();
int sheet_number = 1; // sheet 1 is the root sheet EDA_ScreenList s_list;
DrawSheetPath* sheetpath;
/* Build the sheet list */ // Set the date
EDA_SheetList SheetList( g_RootSheet ); for ( SCH_SCREEN * screen = s_list.GetFirst(); screen != NULL; screen = s_list.GetNext() )
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; screen->m_Date = date;
}
}
}
g_RootSheet->m_AssociatedScreen->m_Date = date; // Set sheet counts
g_RootSheet->m_AssociatedScreen->m_NumberOfScreen = sheet_count; SetSheetNumberAndCount();
g_RootSheet->m_SheetNumber = 1;
g_RootSheet->m_NumberOfSheets = sheet_count;
} }

View File

@ -47,8 +47,6 @@ DrawSheetStruct::DrawSheetStruct( const wxPoint& pos ) :
m_AssociatedScreen = NULL; m_AssociatedScreen = NULL;
m_SheetName.Printf( wxT( "Sheet%8.8lX" ), m_TimeStamp ); m_SheetName.Printf( wxT( "Sheet%8.8lX" ), m_TimeStamp );
m_FileName.Printf( wxT( "file%8.8lX.sch" ), m_TimeStamp ); m_FileName.Printf( wxT( "file%8.8lX.sch" ), m_TimeStamp );
m_SheetNumber = 1;
m_NumberOfSheets = 1;
} }
@ -499,9 +497,9 @@ bool DrawSheetStruct::Load( WinEDA_SchematicFrame* frame )
} }
/*******************************************************************************/ /**********************************/
int DrawSheetStruct::CountSheets() int DrawSheetStruct::CountSheets()
/*******************************************************************************/ /**********************************/
{ {
int count = 1; //1 = this!! int count = 1; //1 = this!!

View File

@ -52,9 +52,11 @@ public:
*/ */
bool Save( FILE* aFile ) const; bool Save( FILE* aFile ) const;
#if defined(DEBUG) #if defined (DEBUG)
// comment inherited by Doxygen from Base_Struct // comment inherited by Doxygen from Base_Struct
void Show( int nestLevel, std::ostream& os ); void Show( int nestLevel, std::ostream& os );
#endif #endif
}; };
@ -64,7 +66,7 @@ public:
*/ */
WX_DEFINE_ARRAY( DrawSheetStruct *, SheetGrowArray ); WX_DEFINE_ARRAY( DrawSheetStruct *, SheetGrowArray );
class DrawSheetStruct : public SCH_ITEM /*public SCH_SCREEN*/ /* Gestion de la hierarchie */ class DrawSheetStruct : public SCH_ITEM /* Gestion de la hierarchie */
{ {
public: public:
wxString m_SheetName; /*this is equivalent to C101 for components: wxString m_SheetName; /*this is equivalent to C101 for components:
@ -75,7 +77,6 @@ private:
* reading the sheet description from file. */ * reading the sheet description from file. */
public: public:
int m_SheetNameSize; /* Size (height) of the text, used to draw the name */ int m_SheetNameSize; /* Size (height) of the text, used to draw the name */
int m_FileNameSize; /* Size (height) of the text, used to draw the name */ int m_FileNameSize; /* Size (height) of the text, used to draw the name */
wxPoint m_Pos; wxPoint m_Pos;
wxSize m_Size; /* Position and Size of sheet symbol */ wxSize m_Size; /* Position and Size of sheet symbol */
@ -85,8 +86,6 @@ public:
SCH_SCREEN* m_AssociatedScreen; /* Associated Screen which handle the physical data SCH_SCREEN* m_AssociatedScreen; /* Associated Screen which handle the physical data
* In complex hierarchies we can have many DrawSheetStruct using the same 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)
public: public:
DrawSheetStruct( const wxPoint& pos = wxPoint( 0, 0 ) ); DrawSheetStruct( const wxPoint& pos = wxPoint( 0, 0 ) );
@ -126,9 +125,11 @@ public:
//to remove a sheet, just delete it //to remove a sheet, just delete it
//-- the destructor should take care of everything else. //-- the destructor should take care of everything else.
#if defined(DEBUG) #if defined (DEBUG)
// comment inherited by Doxygen from Base_Struct // comment inherited by Doxygen from Base_Struct
void Show( int nestLevel, std::ostream& os ); void Show( int nestLevel, std::ostream& os );
#endif #endif
}; };

View File

@ -91,8 +91,6 @@ SCH_SCREEN::SCH_SCREEN( int screentype, KICAD_T aType ) :
SetGridList( g_GridList ); SetGridList( g_GridList );
m_UndoRedoCountMax = 10; m_UndoRedoCountMax = 10;
m_RefCount = 0; m_RefCount = 0;
m_ScreenNumber = 1;
m_NumberOfScreen = 1;
} }

View File

@ -152,7 +152,6 @@ int WinEDA_SchematicFrame::LoadOneEEProject( const wxString& FileName, bool IsNe
{ {
screen->m_CurrentSheetDesc = &g_Sheet_A4; screen->m_CurrentSheetDesc = &g_Sheet_A4;
screen->SetZoom( 32 ); screen->SetZoom( 32 );
screen->m_ScreenNumber = screen->m_NumberOfScreen = 1;
screen->m_Title = wxT( "noname.sch" ); screen->m_Title = wxT( "noname.sch" );
GetScreen()->m_FileName = screen->m_Title; GetScreen()->m_FileName = screen->m_Title;
screen->m_Company.Empty(); screen->m_Company.Empty();
@ -162,6 +161,7 @@ int WinEDA_SchematicFrame::LoadOneEEProject( const wxString& FileName, bool IsNe
screen->m_Commentaire4.Empty(); screen->m_Commentaire4.Empty();
Read_Config( wxEmptyString, TRUE ); Read_Config( wxEmptyString, TRUE );
Zoom_Automatique( TRUE ); Zoom_Automatique( TRUE );
SetSheetNumberAndCount();
ReDrawPanel(); ReDrawPanel();
return 1; return 1;
} }
@ -226,6 +226,7 @@ int WinEDA_SchematicFrame::LoadOneEEProject( const wxString& FileName, bool IsNe
/* Reaffichage ecran de base (ROOT) si necessaire */ /* Reaffichage ecran de base (ROOT) si necessaire */
ActiveScreen = GetScreen(); ActiveScreen = GetScreen();
Zoom_Automatique( FALSE ); Zoom_Automatique( FALSE );
SetSheetNumberAndCount();
DrawPanel->Refresh( TRUE ); DrawPanel->Refresh( TRUE );
return diag; return diag;
} }

View File

@ -316,6 +316,7 @@ static bool UpdateScreenFromSheet(WinEDA_SchematicFrame * frame)
//update the References //update the References
frame->m_CurrentSheet->UpdateAllScreenReferences(); frame->m_CurrentSheet->UpdateAllScreenReferences();
frame->SetSheetNumberAndCount();
frame->DrawPanel->m_CanStartBlock = -1; frame->DrawPanel->m_CanStartBlock = -1;
ActiveScreen = frame->m_CurrentSheet->LastScreen(); ActiveScreen = frame->m_CurrentSheet->LastScreen();
if ( NewScreen->m_FirstRedraw ){ if ( NewScreen->m_FirstRedraw ){

View File

@ -145,7 +145,12 @@ bool SCH_SCREEN::Save( FILE* aFile ) const
fprintf( aFile, "$Descr %s %d %d\n", CONV_TO_UTF8( PlotSheet->m_Name ), fprintf( aFile, "$Descr %s %d %d\n", CONV_TO_UTF8( PlotSheet->m_Name ),
PlotSheet->m_Size.x, PlotSheet->m_Size.y ); PlotSheet->m_Size.x, PlotSheet->m_Size.y );
/* Write ScreenNumber and NumberOfScreen; not very meaningfull for SheetNumber and Sheet Count
* in a complex hierarchy, but usefull in simple hierarchy and flat hierarchy
* Used also to serach the root sheet ( ScreenNumber = 1 ) withing the files
*/
fprintf( aFile, "Sheet %d %d\n", m_ScreenNumber, m_NumberOfScreen ); fprintf( aFile, "Sheet %d %d\n", m_ScreenNumber, m_NumberOfScreen );
fprintf( aFile, "Title \"%s\"\n", CONV_TO_UTF8( m_Title ) ); fprintf( aFile, "Title \"%s\"\n", CONV_TO_UTF8( m_Title ) );
fprintf( aFile, "Date \"%s\"\n", CONV_TO_UTF8( m_Date ) ); fprintf( aFile, "Date \"%s\"\n", CONV_TO_UTF8( m_Date ) );
fprintf( aFile, "Rev \"%s\"\n", CONV_TO_UTF8( m_Revision ) ); fprintf( aFile, "Rev \"%s\"\n", CONV_TO_UTF8( m_Revision ) );
@ -159,7 +164,7 @@ bool SCH_SCREEN::Save( FILE* aFile ) const
/* Saving schematic items */ /* Saving schematic items */
bool failed = FALSE; bool failed = FALSE;
for( SCH_ITEM* item = EEDrawList; item; item=item->Next() ) for( SCH_ITEM* item = EEDrawList; item; item = item->Next() )
{ {
switch( item->Type() ) switch( item->Type() )
{ {
@ -180,9 +185,9 @@ bool SCH_SCREEN::Save( FILE* aFile ) const
break; break;
/* /*
case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE: * case DRAW_HIERARCHICAL_PIN_SHEET_STRUCT_TYPE:
case DRAW_PICK_ITEM_STRUCT_TYPE: * case DRAW_PICK_ITEM_STRUCT_TYPE:
break; * break;
*/ */
default: default:

View File

@ -201,6 +201,32 @@ DrawSheetPath* WinEDA_SchematicFrame::GetSheet()
} }
/****************************************************/
void WinEDA_SchematicFrame::SetSheetNumberAndCount()
/****************************************************/
/** Function SetSheetNumberAndCount
* Set the m_ScreenNumber and m_NumberOfScreen members for screens
* must be called after a delete or add sheet command, ans when entering a sheet
*/
{
SCH_SCREEN* screen = GetScreen();
EDA_ScreenList s_list;
/* Set the screen count, and the screen number (1 for root sheet)
*/
int screen_num = 2;
for ( screen = s_list.GetFirst(); screen != NULL; screen = s_list.GetNext() )
{
if ( screen == g_RootSheet->m_AssociatedScreen )
screen->m_ScreenNumber = 1;
else
screen->m_ScreenNumber = screen_num++;
screen->m_NumberOfScreen = s_list.GetCount();
}
}
SCH_SCREEN* WinEDA_SchematicFrame::GetScreen() const SCH_SCREEN* WinEDA_SchematicFrame::GetScreen() const
{ {
return m_CurrentSheet->LastScreen(); return m_CurrentSheet->LastScreen();

View File

@ -19,10 +19,8 @@
class SCH_SCREEN : public BASE_SCREEN class SCH_SCREEN : public BASE_SCREEN
{ {
public: public:
int m_RefCount; //how many sheets reference this screen? int m_RefCount; /*how many sheets reference this screen?
//delete when it goes to zero. * delete when it goes to zero. */
int m_ScreenNumber;
int m_NumberOfScreen;
SCH_SCREEN( int idtype, KICAD_T aType = SCREEN_STRUCT_TYPE ); SCH_SCREEN( int idtype, KICAD_T aType = SCREEN_STRUCT_TYPE );
~SCH_SCREEN(); ~SCH_SCREEN();
@ -63,6 +61,7 @@ public:
virtual void ClearUndoRedoList(); virtual void ClearUndoRedoList();
virtual void AddItemToUndoList( EDA_BaseStruct* item ); virtual void AddItemToUndoList( EDA_BaseStruct* item );
virtual void AddItemToRedoList( EDA_BaseStruct* item ); virtual void AddItemToRedoList( EDA_BaseStruct* item );
/** /**
* Function Save * Function Save
* writes the data structures for this object out to a FILE in "*.brd" format. * writes the data structures for this object out to a FILE in "*.brd" format.

View File

@ -112,10 +112,18 @@ public:
void InstallPreviousSheet(); void InstallPreviousSheet();
void InstallNextScreen( DrawSheetStruct* Sheet ); void InstallNextScreen( DrawSheetStruct* Sheet );
/** Function SetSheetNumberAndCount
* Set the m_ScreenNumber and m_NumberOfScreen members for screens
* must be called after a delete or add sheet command, and when entering a sheet
*/
void SetSheetNumberAndCount();
// Plot functions:
void ToPlot_PS( wxCommandEvent& event ); void ToPlot_PS( wxCommandEvent& event );
void ToPlot_HPGL( wxCommandEvent& event ); void ToPlot_HPGL( wxCommandEvent& event );
void ToPostProcess( wxCommandEvent& event ); void ToPostProcess( wxCommandEvent& event );
// read and save files
void Save_File( wxCommandEvent& event ); void Save_File( wxCommandEvent& event );
void SaveProject(); void SaveProject();
int LoadOneEEProject( const wxString& FileName, bool IsNew ); int LoadOneEEProject( const wxString& FileName, bool IsNew );

View File

@ -85,15 +85,4 @@ asked by: Dick Hollenbeck
loaded board. I think the number of layers should be reduced to the loaded board. I think the number of layers should be reduced to the
default and the default layer names should be used. default and the default layer names should be used.
2008-Apr-30 Assigned To:
asked by: Dick Hollenbeck
================================================================================
+eeschema
This line in eeschema/save_schemas.cpp is using m_ScreenNumber == 1
regardless.
fprintf( aFile, "Sheet %d %d\n", m_ScreenNumber, m_NumberOfScreen );
The field m_ScreenNumber needs to be updated based on where
the sheet is in the hierarchy. Until this is fixed, the code which checks
for "Sheet 1 " in kicad/treeprj_frame.cpp is broken and the project manager
is showing all *.sch files, not just the top most *.sch files.