Add naming of the outline page entries

This commit is contained in:
Marek Roszko 2022-09-24 22:52:09 -04:00
parent f2377b447d
commit 209e1b2086
3 changed files with 32 additions and 8 deletions

View File

@ -670,12 +670,13 @@ void PDF_PLOTTER::closePdfStream()
}
void PDF_PLOTTER::StartPage( const wxString& aPageNumber )
void PDF_PLOTTER::StartPage( const wxString& aPageNumber, const wxString& aPageName )
{
wxASSERT( m_outputFile );
wxASSERT( !m_workFile );
m_pageNumbers.push_back( aPageNumber );
m_pageName = aPageName;
// Compute the paper size in IUs
m_paperSize = m_pageInfo.GetSizeMils();
@ -810,8 +811,18 @@ void PDF_PLOTTER::ClosePage()
// Mark the page stream as idle
m_pageStreamHandle = 0;
OUTLINE_NODE* pageOutlineNode = addOutlineNode(
m_outlineRoot.get(), -1, wxString::Format( _( "Page %s" ), m_pageNumbers.back() ) );
wxString pageOutlineName = wxEmptyString;
if( m_pageName.IsEmpty() )
{
pageOutlineName = wxString::Format( _( "Page %s" ), m_pageNumbers.back() );
}
else
{
pageOutlineName = wxString::Format( _( "%s (Page %s)" ), m_pageName, m_pageNumbers.back() );
}
OUTLINE_NODE* pageOutlineNode = addOutlineNode( m_outlineRoot.get(), -1, pageOutlineName );
// let's reorg the symbol bookmarks under a page handle
// let's reorg the symbol bookmarks under a page handle
@ -847,7 +858,14 @@ void PDF_PLOTTER::ClosePage()
}
bool PDF_PLOTTER::StartPlot(const wxString& aPageNumber)
bool PDF_PLOTTER::StartPlot( const wxString& aPageNumber )
{
return StartPlot( aPageNumber, wxEmptyString );
}
bool PDF_PLOTTER::StartPlot( const wxString& aPageNumber,
const wxString& aPageName )
{
wxASSERT(m_outputFile);
@ -879,7 +897,7 @@ bool PDF_PLOTTER::StartPlot(const wxString& aPageNumber)
/* Now, the PDF is read from the end, (more or less)... so we start
with the page stream for page 1. Other more important stuff is written
at the end */
StartPage(aPageNumber);
StartPage(aPageNumber, aPageName);
return true;
}

View File

@ -851,7 +851,7 @@ void DIALOG_PLOT_SCHEMATIC::createPDFFile( bool aPlotAll, bool aPlotDrawingSheet
// Open the plotter and do the first page
setupPlotPagePDF( plotter, screen );
plotter->StartPlot( sheetList[i].GetPageNumber() );
plotter->StartPlot( sheetList[i].GetPageNumber(), _("Root") );
}
catch( const IO_ERROR& e )
{
@ -870,7 +870,8 @@ void DIALOG_PLOT_SCHEMATIC::createPDFFile( bool aPlotAll, bool aPlotDrawingSheet
* reconfigure, and then start a new one */
plotter->ClosePage();
setupPlotPagePDF( plotter, screen );
plotter->StartPage( sheetList[i].GetPageNumber() );
plotter->StartPage( sheetList[i].GetPageNumber(),
sheetList[i].Last()->GetFields()[SHEETNAME].GetShownText() );
}
plotOneSheetPDF( plotter, screen, aPlotDrawingSheet );

View File

@ -274,12 +274,16 @@ public:
* are to be closed and reopened. Between each page parameters can be set.
*/
virtual bool StartPlot( const wxString& aPageNumber ) override;
virtual bool StartPlot( const wxString& aPageNumber,
const wxString& aPageName = wxEmptyString );
virtual bool EndPlot() override;
/**
* Start a new page in the PDF document.
*/
virtual void StartPage( const wxString& aPageNumber );
virtual void StartPage( const wxString& aPageNumber, const wxString& aPageName = wxEmptyString );
/**
* Close the current page in the PDF document (and emit its compressed stream).
@ -467,6 +471,7 @@ protected:
int m_pageStreamHandle; ///< Handle of the page content object
int m_streamLengthHandle; ///< Handle to the deferred stream length
wxString m_workFilename;
wxString m_pageName;
FILE* m_workFile; ///< Temporary file to construct the stream before zipping
std::vector<long> m_xrefTable; ///< The PDF xref offset table