diff --git a/common/title_block_shapes.h b/common/title_block_shapes.h index 5f7817b446..7ae17700db 100644 --- a/common/title_block_shapes.h +++ b/common/title_block_shapes.h @@ -37,36 +37,36 @@ #define GRID_REF_W 70 // height of the band reference grid -#define SIZETEXT 60 // worksheet text size -#define SIZETEXT_REF 50 // worksheet frame reference text size +#define TEXTSIZE 60 // worksheet text size +#define FRMREF_TXTSIZE 50 // worksheet frame reference text size #define PAS_REF 2000 // reference markings on worksheet frame -#define VARIABLE_BLOCK_START_POSITION (SIZETEXT * 10) +#define VARIABLE_BLOCK_START_POSITION (TEXTSIZE * 10) // The coordinates below are relative to the bottom right corner of page and // will be subtracted from this origin. #define BLOCK_OX 4200 -#define BLOCK_KICAD_VERSION_X BLOCK_OX - SIZETEXT -#define BLOCK_KICAD_VERSION_Y SIZETEXT +#define BLOCK_KICAD_VERSION_X BLOCK_OX - TEXTSIZE +#define BLOCK_KICAD_VERSION_Y TEXTSIZE #define BLOCK_REV_X 820 -#define BLOCK_REV_Y (SIZETEXT * 3) -#define BLOCK_DATE_X BLOCK_OX - (SIZETEXT * 15) -#define BLOCK_DATE_Y (SIZETEXT * 3) +#define BLOCK_REV_Y (TEXTSIZE * 3) +#define BLOCK_DATE_X BLOCK_OX - (TEXTSIZE * 15) +#define BLOCK_DATE_Y (TEXTSIZE * 3) #define BLOCK_ID_SHEET_X 820 -#define BLOCK_ID_SHEET_Y SIZETEXT -#define BLOCK_SIZE_SHEET_X BLOCK_OX - SIZETEXT -#define BLOCK_SIZE_SHEET_Y (SIZETEXT * 3) -#define BLOCK_TITLE_X BLOCK_OX - SIZETEXT -#define BLOCK_TITLE_Y (SIZETEXT * 5) -#define BLOCK_FULLSHEETNAME_X BLOCK_OX - SIZETEXT -#define BLOCK_FULLSHEETNAME_Y (SIZETEXT * 7) -#define BLOCK_FILENAME_X BLOCK_OX - SIZETEXT -#define BLOCK_FILENAME_Y (SIZETEXT * 9) -#define BLOCK_COMMENT_X BLOCK_OX - SIZETEXT -#define BLOCK_COMPANY_Y (SIZETEXT * 11) -#define BLOCK_COMMENT1_Y (SIZETEXT * 13) -#define BLOCK_COMMENT2_Y (SIZETEXT * 15) -#define BLOCK_COMMENT3_Y (SIZETEXT * 17) -#define BLOCK_COMMENT4_Y (SIZETEXT * 19) +#define BLOCK_ID_SHEET_Y TEXTSIZE +#define BLOCK_SIZE_SHEET_X BLOCK_OX - TEXTSIZE +#define BLOCK_SIZE_SHEET_Y (TEXTSIZE * 3) +#define BLOCK_TITLE_X BLOCK_OX - TEXTSIZE +#define BLOCK_TITLE_Y (TEXTSIZE * 5) +#define BLOCK_FULLSHEETNAME_X BLOCK_OX - TEXTSIZE +#define BLOCK_FULLSHEETNAME_Y (TEXTSIZE * 7) +#define BLOCK_FILENAME_X BLOCK_OX - TEXTSIZE +#define BLOCK_FILENAME_Y (TEXTSIZE * 9) +#define BLOCK_COMMENT_X BLOCK_OX - TEXTSIZE +#define BLOCK_COMPANY_Y (TEXTSIZE * 11) +#define BLOCK_COMMENT1_Y (TEXTSIZE * 13) +#define BLOCK_COMMENT2_Y (TEXTSIZE * 15) +#define BLOCK_COMMENT3_Y (TEXTSIZE * 17) +#define BLOCK_COMMENT4_Y (TEXTSIZE * 19) // Work sheet structure type definitions. enum TypeKi_WorkSheetData { @@ -89,32 +89,43 @@ enum TypeKi_WorkSheetData { WS_CADRE }; -extern Ki_WorkSheetData WS_Date; -extern Ki_WorkSheetData WS_Revision; -extern Ki_WorkSheetData WS_Licence; -extern Ki_WorkSheetData WS_SizeSheet; -extern Ki_WorkSheetData WS_IdentSheet; -extern Ki_WorkSheetData WS_FullSheetName; -extern Ki_WorkSheetData WS_SheetFilename; -extern Ki_WorkSheetData WS_Title; -extern Ki_WorkSheetData WS_Company; -extern Ki_WorkSheetData WS_Comment1; -extern Ki_WorkSheetData WS_Comment2; -extern Ki_WorkSheetData WS_Comment3; -extern Ki_WorkSheetData WS_Comment4; -extern Ki_WorkSheetData WS_SeparatorLine; -extern Ki_WorkSheetData WS_MostLeftLine; -extern Ki_WorkSheetData WS_MostUpperLine; -extern Ki_WorkSheetData WS_Segm3; -extern Ki_WorkSheetData WS_Segm4; -extern Ki_WorkSheetData WS_Segm5; -extern Ki_WorkSheetData WS_Segm6; -extern Ki_WorkSheetData WS_Segm7; + +// superior horizontal segment: should be after comments +// to know the exact position +Ki_WorkSheetData WS_MostUpperLine = +{ + WS_UPPER_SEGMENT, + NULL, + BLOCK_OX, TEXTSIZE * 16, + 0, TEXTSIZE * 16, + NULL, NULL +}; + +// Left vertical segment: should be after comments +// to know the exact position +Ki_WorkSheetData WS_MostLeftLine = +{ + WS_LEFT_SEGMENT, + &WS_MostUpperLine, + BLOCK_OX, TEXTSIZE * 16, + BLOCK_OX, 0, + NULL, NULL +}; + +// horizontal segment between filename and comments +Ki_WorkSheetData WS_SeparatorLine = +{ + WS_SEGMENT, + &WS_MostLeftLine, + BLOCK_OX, VARIABLE_BLOCK_START_POSITION, + 0, VARIABLE_BLOCK_START_POSITION, + NULL, NULL +}; Ki_WorkSheetData WS_Date = { WS_DATE, - &WS_Licence, + &WS_SeparatorLine, BLOCK_DATE_X, BLOCK_DATE_Y, 0, 0, wxT( "Date: " ),NULL @@ -123,7 +134,7 @@ Ki_WorkSheetData WS_Date = Ki_WorkSheetData WS_Licence = { WS_KICAD_VERSION, - &WS_Revision, + &WS_Date, BLOCK_KICAD_VERSION_X,BLOCK_KICAD_VERSION_Y, 0, 0, @@ -133,7 +144,7 @@ Ki_WorkSheetData WS_Licence = Ki_WorkSheetData WS_Revision = { WS_REV, - &WS_SizeSheet, + &WS_Licence, BLOCK_REV_X, BLOCK_REV_Y, 0, 0, wxT( "Rev: " ),NULL @@ -142,7 +153,7 @@ Ki_WorkSheetData WS_Revision = Ki_WorkSheetData WS_SizeSheet = { WS_SIZESHEET, - &WS_IdentSheet, + &WS_Revision, BLOCK_SIZE_SHEET_X,BLOCK_SIZE_SHEET_Y, 0, 0, wxT( "Size: " ), NULL @@ -151,7 +162,7 @@ Ki_WorkSheetData WS_SizeSheet = Ki_WorkSheetData WS_IdentSheet = { WS_IDENTSHEET, - &WS_Title, + &WS_SizeSheet, BLOCK_ID_SHEET_X,BLOCK_ID_SHEET_Y, 0, 0, wxT( "Id: " ), NULL @@ -160,7 +171,7 @@ Ki_WorkSheetData WS_IdentSheet = Ki_WorkSheetData WS_Title = { WS_TITLE, - &WS_SheetFilename, + &WS_IdentSheet, BLOCK_TITLE_X, BLOCK_TITLE_Y, 0, 0, wxT( "Title: " ), NULL @@ -169,7 +180,7 @@ Ki_WorkSheetData WS_Title = Ki_WorkSheetData WS_SheetFilename = { WS_FILENAME, - &WS_FullSheetName, + &WS_Title, BLOCK_FILENAME_X, BLOCK_FILENAME_Y, 0, 0, wxT( "File: " ), NULL @@ -178,7 +189,7 @@ Ki_WorkSheetData WS_SheetFilename = Ki_WorkSheetData WS_FullSheetName = { WS_FULLSHEETNAME, - &WS_Company, + &WS_SheetFilename, BLOCK_FULLSHEETNAME_X,BLOCK_FULLSHEETNAME_Y, 0, 0, @@ -188,7 +199,7 @@ Ki_WorkSheetData WS_FullSheetName = Ki_WorkSheetData WS_Company = { WS_COMPANY_NAME, - &WS_Comment1, + &WS_FullSheetName, BLOCK_COMMENT_X,BLOCK_COMPANY_Y, 0, 0, NULL, NULL @@ -197,7 +208,7 @@ Ki_WorkSheetData WS_Company = Ki_WorkSheetData WS_Comment1 = { WS_COMMENT1, - &WS_Comment2, + &WS_Company, BLOCK_COMMENT_X,BLOCK_COMMENT1_Y, 0, 0, NULL, NULL @@ -206,7 +217,7 @@ Ki_WorkSheetData WS_Comment1 = Ki_WorkSheetData WS_Comment2 = { WS_COMMENT2, - &WS_Comment3, + &WS_Comment1, BLOCK_COMMENT_X,BLOCK_COMMENT2_Y, 0, 0, NULL, NULL @@ -215,7 +226,7 @@ Ki_WorkSheetData WS_Comment2 = Ki_WorkSheetData WS_Comment3 = { WS_COMMENT3, - &WS_Comment4, + &WS_Comment2, BLOCK_COMMENT_X,BLOCK_COMMENT3_Y, 0, 0, NULL, NULL @@ -224,53 +235,20 @@ Ki_WorkSheetData WS_Comment3 = Ki_WorkSheetData WS_Comment4 = { WS_COMMENT4, - &WS_MostLeftLine, + &WS_Comment3, BLOCK_COMMENT_X, BLOCK_COMMENT4_Y, 0, 0, NULL, NULL }; -// Left vertical segment -Ki_WorkSheetData WS_MostLeftLine = -{ - WS_LEFT_SEGMENT, - &WS_SeparatorLine, - BLOCK_OX, SIZETEXT * 16, - BLOCK_OX, 0, - NULL, NULL -}; - - -// horizontal segment between filename and comments -Ki_WorkSheetData WS_SeparatorLine = -{ - WS_SEGMENT, - &WS_MostUpperLine, - BLOCK_OX, VARIABLE_BLOCK_START_POSITION, - 0, VARIABLE_BLOCK_START_POSITION, - NULL, NULL -}; - - -// superior horizontal segment -Ki_WorkSheetData WS_MostUpperLine = -{ - WS_UPPER_SEGMENT, - &WS_Segm3, - BLOCK_OX, SIZETEXT * 16, - 0, SIZETEXT * 16, - NULL, NULL -}; - - // horizontal segment above COMPANY NAME Ki_WorkSheetData WS_Segm3 = { WS_SEGMENT, - &WS_Segm4, - BLOCK_OX, SIZETEXT * 6, - 0, SIZETEXT * 6, + &WS_Comment4, + BLOCK_OX, TEXTSIZE * 6, + 0, TEXTSIZE * 6, NULL, NULL }; @@ -279,9 +257,9 @@ Ki_WorkSheetData WS_Segm3 = Ki_WorkSheetData WS_Segm4 = { WS_SEGMENT, - &WS_Segm5, - BLOCK_REV_X + SIZETEXT,SIZETEXT * 4, - BLOCK_REV_X + SIZETEXT, 0, + &WS_Segm3, + BLOCK_REV_X + TEXTSIZE,TEXTSIZE * 4, + BLOCK_REV_X + TEXTSIZE, 0, NULL, NULL }; @@ -289,9 +267,9 @@ Ki_WorkSheetData WS_Segm4 = Ki_WorkSheetData WS_Segm5 = { WS_SEGMENT, - &WS_Segm6, - BLOCK_OX, SIZETEXT * 2, - 0, SIZETEXT * 2, + &WS_Segm4, + BLOCK_OX, TEXTSIZE * 2, + 0, TEXTSIZE * 2, NULL, NULL }; @@ -299,9 +277,9 @@ Ki_WorkSheetData WS_Segm5 = Ki_WorkSheetData WS_Segm6 = { WS_SEGMENT, - &WS_Segm7, - BLOCK_OX, SIZETEXT * 4, - 0, SIZETEXT * 4, + &WS_Segm5, + BLOCK_OX, TEXTSIZE * 4, + 0, TEXTSIZE * 4, NULL, NULL }; @@ -309,14 +287,22 @@ Ki_WorkSheetData WS_Segm6 = Ki_WorkSheetData WS_Segm7 = { WS_SEGMENT, - NULL, - BLOCK_OX - (SIZETEXT * 11),SIZETEXT * 4, - BLOCK_OX - (SIZETEXT * 11),SIZETEXT * 2, + &WS_Segm6, + BLOCK_OX - (TEXTSIZE * 11),TEXTSIZE * 4, + BLOCK_OX - (TEXTSIZE * 11),TEXTSIZE * 2, NULL, NULL }; #include +// Helper function which returns the text corresponding to the aIdent identifier +static wxString FindUserText( int aIdent, const TITLE_BLOCK& aTitleBlock, + const wxString& aPaperFormat, + const wxString& aFileName, + const wxString& aSheetPathHumanReadable, + int aSheetCount, int aSheetNumber ); + + void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( const wxString& aPaperFormat, const wxString& aFileName, @@ -326,22 +312,18 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( EDA_COLOR_T aLineColor, EDA_COLOR_T aTextColor ) { wxPoint pos; - wxPoint end; - int refx, refy; - wxString Line; - Ki_WorkSheetData* WsItem; - wxSize size( SIZETEXT * m_milsToIu, SIZETEXT * m_milsToIu ); - wxSize size_ref( SIZETEXT_REF * m_milsToIu, SIZETEXT_REF * m_milsToIu ); + wxSize textsize( TEXTSIZE * m_milsToIu, TEXTSIZE * m_milsToIu ); + wxSize size_ref( FRMREF_TXTSIZE * m_milsToIu, + FRMREF_TXTSIZE * m_milsToIu ); wxString msg; // Upper left corner - refx = m_LTmargin.x; - refy = m_LTmargin.y; + int refx = m_LTmargin.x; + int refy = m_LTmargin.y; // lower right corner wxPoint currpos; - currpos.x = m_pageSize.x - m_RBmargin.x; - currpos.y = m_pageSize.y - m_RBmargin.y; + currpos = m_pageSize - m_RBmargin; // Draw the border. int ii, jj, ipas, gxpas, gypas; @@ -372,7 +354,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( for( ii = refx + gxpas, jj = 1; ipas > 0; ii += gxpas, jj++, ipas-- ) { - Line.Printf( wxT( "%d" ), jj ); + msg.Printf( wxT( "%d" ), jj ); if( ii < currpos.x - PAS_REF / 2 ) { @@ -382,7 +364,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( m_penSize, aLineColor ) ); } - Append( new WS_DRAW_ITEM_TEXT( Line, + Append( new WS_DRAW_ITEM_TEXT( msg, wxPoint( ( ii - gxpas / 2 ) * m_milsToIu, ( refy + GRID_REF_W / 2 ) * m_milsToIu ), size_ref, m_penSize, aLineColor ) ); @@ -395,7 +377,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( m_penSize, aLineColor ) ); } - Append( new WS_DRAW_ITEM_TEXT( Line, + Append( new WS_DRAW_ITEM_TEXT( msg, wxPoint( ( ii - gxpas / 2 ) * m_milsToIu, ( currpos.y - GRID_REF_W / 2) * m_milsToIu ), size_ref, m_penSize, aLineColor ) ); @@ -407,9 +389,9 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( for( ii = refy + gypas, jj = 0; ipas > 0; ii += gypas, jj++, ipas-- ) { if( jj < 26 ) - Line.Printf( wxT( "%c" ), jj + 'A' ); + msg.Printf( wxT( "%c" ), jj + 'A' ); else // I hope 52 identifiers are enough... - Line.Printf( wxT( "%c" ), 'a' + jj - 26 ); + msg.Printf( wxT( "%c" ), 'a' + jj - 26 ); if( ii < currpos.y - PAS_REF / 2 ) { @@ -419,7 +401,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( m_penSize, aLineColor ) ); } - Append( new WS_DRAW_ITEM_TEXT( Line, + Append( new WS_DRAW_ITEM_TEXT( msg, wxPoint( ( refx + GRID_REF_W / 2 ) * m_milsToIu, ( ii - gypas / 2 ) * m_milsToIu ), size_ref, m_penSize, aLineColor ) ); @@ -432,7 +414,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( m_penSize, aLineColor ) ); } - Append( new WS_DRAW_ITEM_TEXT( Line, + Append( new WS_DRAW_ITEM_TEXT( msg, wxPoint( ( currpos.x - GRID_REF_W / 2 ) * m_milsToIu, ( ii - gxpas / 2 ) * m_milsToIu ), size_ref, m_penSize, aLineColor ) ); @@ -443,219 +425,64 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( refy = m_pageSize.y - m_RBmargin.y - GRID_REF_W; WS_DRAW_ITEM_TEXT* gtext; + Ki_WorkSheetData* WsItem; + int boldPenSize; - for( WsItem = &WS_Date; WsItem != NULL; WsItem = WsItem->Pnext ) + for( WsItem = &WS_Segm7; WsItem != NULL; WsItem = WsItem->Pnext ) { pos.x = (refx - WsItem->m_Posx) * m_milsToIu; pos.y = (refy - WsItem->m_Posy) * m_milsToIu; + msg.Empty(); + if( WsItem->m_Legende ) + msg = WsItem->m_Legende; + msg += FindUserText( WsItem->m_Type, aTitleBlock, aPaperFormat, aFileName, + aSheetPathHumanReadable, aSheetCount, aSheetNumber ); + switch( WsItem->m_Type ) { - case WS_DATE: - - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; - - msg += aTitleBlock.GetDate(); - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, - size, m_penSize, aLineColor, false, - true ) ); - gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - break; - case WS_REV: - - if( WsItem->m_Legende ) - { - msg = WsItem->m_Legende; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - GetPenSizeForBold( std::min( size. - x, - size. - y ) ), - aLineColor, false, true ) ); - gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - pos.x += ReturnGraphicTextWidth( msg, size.x, false, false ); - } - - msg = aTitleBlock.GetRevision(); - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - GetPenSizeForBold( std::min( size.x, - size.y ) ), + case WS_TITLE: + boldPenSize = GetPenSizeForBold( std::min( textsize.x, textsize.y ) ); + Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, textsize, boldPenSize, aTextColor, false, true ) ); gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); break; case WS_KICAD_VERSION: - - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; - - msg += g_ProductName + wxGetApp().GetAppName(); - msg += wxT( " " ) + GetBuildVersion(); - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - m_penSize, aLineColor ) ); - gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - break; - case WS_SIZESHEET: - - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; - - msg += aPaperFormat; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - m_penSize, aLineColor ) ); - gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - break; - - case WS_IDENTSHEET: - - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; - - msg << aSheetNumber << wxT( "/" ) << aSheetCount; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - m_penSize, aLineColor ) ); - gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - break; - case WS_FILENAME: - { - wxFileName fn( aFileName ); - - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; - - msg << fn.GetFullName(); - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - m_penSize, aLineColor ) ); - gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - } - break; - case WS_FULLSHEETNAME: - - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; - - msg += aSheetPathHumanReadable; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, + case WS_DATE: + Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, textsize, m_penSize, aLineColor ) ); gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); break; - case WS_COMPANY_NAME: - - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; - - msg += aTitleBlock.GetCompany(); - if( !msg.IsEmpty() ) { - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - GetPenSizeForBold( std::min( size. - x, - size. - y ) ), + boldPenSize = GetPenSizeForBold( std::min( textsize.x, textsize.y ) ); + Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, textsize ,boldPenSize, aTextColor, false, true ) ); gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - UpperLimit = std::max( UpperLimit, WsItem->m_Posy + SIZETEXT ); + UpperLimit = std::max( UpperLimit, WsItem->m_Posy + TEXTSIZE ); } break; - case WS_TITLE: - - if( WsItem->m_Legende ) - { - msg = WsItem->m_Legende; - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - GetPenSizeForBold( std::min( size. - x, - size. - y ) ), - aLineColor, false, true ) ); - gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - pos.x += ReturnGraphicTextWidth( msg, size.x, false, false ); - } - - msg = aTitleBlock.GetTitle(); - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - GetPenSizeForBold( std::min( size.x, - size.y ) ), - aTextColor, false, true ) ); - gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - break; - case WS_COMMENT1: - - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; - - msg += aTitleBlock.GetComment1(); - - if( !msg.IsEmpty() ) - { - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - m_penSize, aTextColor ) ); - gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - UpperLimit = std::max( UpperLimit, WsItem->m_Posy + SIZETEXT ); - } - - break; - case WS_COMMENT2: - - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; - - msg += aTitleBlock.GetComment2(); - - if( !msg.IsEmpty() ) - { - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - m_penSize, aTextColor ) ); - gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - UpperLimit = std::max( UpperLimit, WsItem->m_Posy + SIZETEXT ); - } - - break; - case WS_COMMENT3: - - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; - - msg += aTitleBlock.GetComment3(); - - if( !msg.IsEmpty() ) - { - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, - m_penSize, aTextColor ) ); - gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - UpperLimit = std::max( UpperLimit, WsItem->m_Posy + SIZETEXT ); - } - - break; - case WS_COMMENT4: - - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; - - msg += aTitleBlock.GetComment4(); - if( !msg.IsEmpty() ) { - Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, size, + Append( gtext = new WS_DRAW_ITEM_TEXT( msg, pos, textsize, m_penSize, aTextColor ) ); gtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT ); - UpperLimit = std::max( UpperLimit, WsItem->m_Posy + SIZETEXT ); + UpperLimit = std::max( UpperLimit, WsItem->m_Posy + TEXTSIZE ); } break; @@ -666,8 +493,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( break; case WS_LEFT_SEGMENT: - WS_MostUpperLine.m_Posy = - WS_MostUpperLine.m_Endy = + WS_MostUpperLine.m_Posy = WS_MostUpperLine.m_Endy = WS_MostLeftLine.m_Posy = UpperLimit; pos.y = (refy - WsItem->m_Posy) * m_milsToIu; @@ -681,3 +507,78 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( } } } + +// returns the text corresponding to the aIdent identifier +wxString FindUserText( int aIdent, const TITLE_BLOCK& aTitleBlock, + const wxString& aPaperFormat, + const wxString& aFileName, + const wxString& aSheetPathHumanReadable, + int aSheetCount, int aSheetNumber ) +{ + wxString msg; + + switch( aIdent ) + { + case WS_DATE: + msg = aTitleBlock.GetDate(); + break; + + case WS_REV: + msg = aTitleBlock.GetRevision(); + break; + + case WS_KICAD_VERSION: + msg = g_ProductName + wxGetApp().GetAppName(); + msg += wxT( " " ) + GetBuildVersion(); + break; + + case WS_SIZESHEET: + msg = aPaperFormat; + break; + + + case WS_IDENTSHEET: + msg << aSheetNumber << wxT( "/" ) << aSheetCount; + break; + + case WS_FILENAME: + { + wxFileName fn( aFileName ); + msg = fn.GetFullName(); + } + break; + + case WS_FULLSHEETNAME: + msg = aSheetPathHumanReadable; + break; + + case WS_COMPANY_NAME: + msg = aTitleBlock.GetCompany(); + break; + + case WS_TITLE: + msg = aTitleBlock.GetTitle(); + break; + + case WS_COMMENT1: + msg = aTitleBlock.GetComment1(); + break; + + case WS_COMMENT2: + msg = aTitleBlock.GetComment2(); + break; + + case WS_COMMENT3: + msg = aTitleBlock.GetComment3(); + break; + + case WS_COMMENT4: + msg = aTitleBlock.GetComment4(); + break; + + default: + break; + } + + return msg; +} diff --git a/common/title_block_shapes_gost.h b/common/title_block_shapes_gost.h index e020b2ea7b..d8affc0243 100644 --- a/common/title_block_shapes_gost.h +++ b/common/title_block_shapes_gost.h @@ -35,8 +35,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#define SIZETEXT 100 // worksheet text size -#define SIZETEXT_REF 50 // worksheet frame reference text size +#define TEXTSIZE 100 // worksheet text size #define PAS_REF 2000 // reference markings on worksheet frame // used in worksheet.cpp @@ -974,10 +973,8 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( wxPoint pos; wxPoint end; int refx, refy; - wxString Line; Ki_WorkSheetData* WsItem; - wxSize size( SIZETEXT * m_milsToIu, SIZETEXT * m_milsToIu ); - wxSize size_ref( SIZETEXT_REF * m_milsToIu, SIZETEXT_REF * m_milsToIu ); + wxSize size( TEXTSIZE * m_milsToIu, TEXTSIZE * m_milsToIu ); wxString msg; WS_DRAW_ITEM_TEXT* gtext; @@ -994,10 +991,10 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( int lnWosn = m_penSize * 2; int lnWtonk = m_penSize; wxSize sz; - wxSize size0_8( SIZETEXT * m_milsToIu * 0.8, SIZETEXT * m_milsToIu * 1 ); - wxSize size1_5( SIZETEXT * m_milsToIu * 1.5, SIZETEXT * m_milsToIu * 1.5 ); - wxSize size2( SIZETEXT * m_milsToIu * 2, SIZETEXT * m_milsToIu * 2 ); - wxSize size3( SIZETEXT * m_milsToIu * 3, SIZETEXT * m_milsToIu * 3 ); + wxSize size0_8( TEXTSIZE * m_milsToIu * 0.8, TEXTSIZE * m_milsToIu * 1 ); + wxSize size1_5( TEXTSIZE * m_milsToIu * 1.5, TEXTSIZE * m_milsToIu * 1.5 ); + wxSize size2( TEXTSIZE * m_milsToIu * 2, TEXTSIZE * m_milsToIu * 2 ); + wxSize size3( TEXTSIZE * m_milsToIu * 3, TEXTSIZE * m_milsToIu * 3 ); // Draw the border. Append( new WS_DRAW_ITEM_RECT( @@ -1112,9 +1109,9 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( int index = 0; wxString fullMsg = msg; - do // Reduce the height of wrapped title until the fit + while( 1 ) // Reduce the height of wrapped title until the fit { - do // Wrap the title + while( 1 ) // Wrap the title { titleWidth = ReturnGraphicTextWidth( msg, sz.x, false, false ) / m_milsToIu; @@ -1122,7 +1119,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( { index = 0; - do + while( 1 ) { msg = msg.Left( msg.Length() - 1 ); @@ -1163,7 +1160,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( } } } - } while( 1 ); + } } else { @@ -1180,7 +1177,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( break; } - } while( 1 ); + } if( titleFieldHeight < (int) ( titleHeight * lines.Count() ) ) { @@ -1191,7 +1188,7 @@ void WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList( } else break; - } while( 1 ); + } pos.x = ( refx - Mm2mils( 85 ) ) * m_milsToIu; pos.y = diff --git a/common/worksheet_shape_builder.h b/common/worksheet_shape_builder.h index 8174c90225..45affcba06 100644 --- a/common/worksheet_shape_builder.h +++ b/common/worksheet_shape_builder.h @@ -133,6 +133,8 @@ public: WS_DRAW_ITEM_LIST() { m_idx = 0; + m_milsToIu = 1.0; + m_penSize = 1; } ~WS_DRAW_ITEM_LIST() diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp index dced52becf..be801f3735 100644 --- a/eeschema/schframe.cpp +++ b/eeschema/schframe.cpp @@ -530,27 +530,24 @@ wxString SCH_EDIT_FRAME::GetUniqueFilenameForCurrentSheet() * However if filename is too long name is - */ - #define FN_LEN_MAX 100 // A reasonnable value for the full file name len + #define FN_LEN_MAX 80 // A reasonable value for the short filename len - fn.ClearExt(); - wxString filename = fn.GetFullPath(); - if( ( filename.Len() + m_CurrentSheet->PathHumanReadable().Len() ) < FN_LEN_MAX ) - { - filename += m_CurrentSheet->PathHumanReadable(); - filename.Replace( wxT( "/" ), wxT( "-" ) ); - filename.RemoveLast(); - // To avoid issues on unix, ensure the filename does not start - // by '-', which has a special meaning in command lines -#ifndef __WINDOWS__ - wxString newfn; - if( filename.StartsWith( wxT( "-" ), &newfn ) ) - filename = newfn; -#endif - } + wxString filename = fn.GetName(); + wxString sheetFullName = m_CurrentSheet->PathHumanReadable(); + sheetFullName.Trim( true ); + sheetFullName.Trim( false ); + + // Remove the last '/' of the path human readable + // (and for the root sheet, make sheetFullName empty): + sheetFullName.RemoveLast(); + + // Convert path human readable separator to '-' + sheetFullName.Replace( wxT( "/" ), wxT( "-" ) ); + + if( ( filename.Len() + sheetFullName.Len() ) < FN_LEN_MAX ) + filename += sheetFullName; else - { filename << wxT( "-" ) << GetScreen()->m_ScreenNumber; - } return filename; }