diff --git a/common/drawing_sheet/ds_painter.cpp b/common/drawing_sheet/ds_painter.cpp index 62c3d0a1d4..d26faf646b 100644 --- a/common/drawing_sheet/ds_painter.cpp +++ b/common/drawing_sheet/ds_painter.cpp @@ -107,6 +107,8 @@ void DS_DRAW_ITEM_LIST::GetTextVars( wxArrayString* aVars ) aVars->push_back( wxT( "PROJECTNAME" ) ); aVars->push_back( wxT( "PAPER" ) ); aVars->push_back( wxT( "LAYER" ) ); + aVars->push_back( wxT( "VARIANT" ) ); + aVars->push_back( wxT( "VARIANT_DESC" ) ); TITLE_BLOCK::GetContextualTextVars( aVars ); } @@ -165,6 +167,16 @@ wxString DS_DRAW_ITEM_LIST::BuildFullText( const wxString& aTextbase ) *token = m_sheetLayer; tokenUpdated = true; } + else if( token->IsSameAs( wxT( "VARIANT" ) ) ) + { + *token = m_variantName; + tokenUpdated = true; + } + else if( token->IsSameAs( wxT( "VARIANT_DESC" ) ) ) + { + *token = m_variantDesc; + tokenUpdated = true; + } else if( m_titleBlock ) { if( m_titleBlock->TextVarResolver( token, m_project, m_flags ) ) diff --git a/common/drawing_sheet/ds_proxy_view_item.cpp b/common/drawing_sheet/ds_proxy_view_item.cpp index db4cfb06d2..269dc7ef72 100644 --- a/common/drawing_sheet/ds_proxy_view_item.cpp +++ b/common/drawing_sheet/ds_proxy_view_item.cpp @@ -80,6 +80,8 @@ void DS_PROXY_VIEW_ITEM::buildDrawList( VIEW* aView, wxString fileName( m_fileName.c_str(), wxConvUTF8 ); wxString sheetName( m_sheetName.c_str(), wxConvUTF8 ); wxString sheetPath( m_sheetPath.c_str(), wxConvUTF8 ); + wxString variantName( m_variantName.c_str(), wxConvUTF8 ); + wxString variantDesc( m_variantDesc.c_str(), wxConvUTF8 ); aDrawList->SetDefaultPenSize( (int) settings->GetDrawingSheetLineWidth() ); aDrawList->SetIsFirstPage( m_isFirstPage ); @@ -89,6 +91,8 @@ void DS_PROXY_VIEW_ITEM::buildDrawList( VIEW* aView, aDrawList->SetSheetName( sheetName ); aDrawList->SetSheetPath( sheetPath ); aDrawList->SetSheetLayer( settings->GetLayerName() ); + aDrawList->SetVariantName( variantName ); + aDrawList->SetVariantDesc( variantDesc ); aDrawList->SetProject( m_project ); aDrawList->SetProperties( aProperties ); diff --git a/common/plotters/common_plot_functions.cpp b/common/plotters/common_plot_functions.cpp index dcc4fcce4d..896e2f0980 100644 --- a/common/plotters/common_plot_functions.cpp +++ b/common/plotters/common_plot_functions.cpp @@ -51,8 +51,8 @@ wxString GetDefaultPlotExtension( PLOT_FORMAT aFormat ) void PlotDrawingSheet( PLOTTER* plotter, const PROJECT* aProject, const TITLE_BLOCK& aTitleBlock, const PAGE_INFO& aPageInfo, const std::map* aProperties, const wxString& aSheetNumber, int aSheetCount, const wxString& aSheetName, - const wxString& aSheetPath, const wxString& aFilename, COLOR4D aColor, - bool aIsFirstPage ) + const wxString& aSheetPath, const wxString& aFilename, COLOR4D aColor, bool aIsFirstPage, + const wxString& aVariantName, const wxString& aVariantDesc ) { /* Note: Page sizes values are given in mils */ @@ -81,6 +81,8 @@ void PlotDrawingSheet( PLOTTER* plotter, const PROJECT* aProject, const TITLE_BL drawList.SetProject( aProject ); drawList.SetIsFirstPage( aIsFirstPage ); drawList.SetProperties( aProperties ); + drawList.SetVariantName( aVariantName ); + drawList.SetVariantDesc( aVariantDesc ); drawList.BuildDrawItemsList( aPageInfo, aTitleBlock ); diff --git a/eeschema/eeschema_jobs_handler.cpp b/eeschema/eeschema_jobs_handler.cpp index 30927001eb..c08a47a8c6 100644 --- a/eeschema/eeschema_jobs_handler.cpp +++ b/eeschema/eeschema_jobs_handler.cpp @@ -1414,6 +1414,11 @@ DS_PROXY_VIEW_ITEM* EESCHEMA_JOBS_HANDLER::getDrawingSheetProxyView( SCHEMATIC* drawingSheet->SetPageBorderColorLayer( LAYER_SCHEMATIC_PAGE_LIMITS ); drawingSheet->SetIsFirstPage( aSch->RootScreen()->GetVirtualPageNumber() == 1 ); + wxString currentVariant = aSch->GetCurrentVariant(); + wxString variantDesc = aSch->GetVariantDescription( currentVariant ); + drawingSheet->SetVariantName( TO_UTF8( currentVariant ) ); + drawingSheet->SetVariantDesc( TO_UTF8( variantDesc ) ); + drawingSheet->SetSheetName( "" ); drawingSheet->SetSheetPath( "" ); diff --git a/eeschema/sch_plotter.cpp b/eeschema/sch_plotter.cpp index b0988e92ea..045b38cbe3 100644 --- a/eeschema/sch_plotter.cpp +++ b/eeschema/sch_plotter.cpp @@ -259,12 +259,14 @@ void SCH_PLOTTER::plotOneSheetPDF( PLOTTER* aPlotter, SCH_SCREEN* aScreen, wxString sheetPath = m_schematic->CurrentSheet().PathHumanReadable(); const PAGE_INFO& actualPage = aScreen->GetPageSettings(); // page size selected in schematic - PlotDrawingSheet( aPlotter, &aScreen->Schematic()->Project(), - aScreen->GetTitleBlock(), - actualPage, - aScreen->Schematic()->GetProperties(), + SCHEMATIC* sch = aScreen->Schematic(); + wxString variantName = sch->GetCurrentVariant(); + wxString variantDesc = sch->GetVariantDescription( variantName ); + + PlotDrawingSheet( aPlotter, &sch->Project(), aScreen->GetTitleBlock(), actualPage, sch->GetProperties(), aScreen->GetPageNumber(), aScreen->GetPageCount(), sheetName, sheetPath, - aScreen->GetFileName(), color, aScreen->GetVirtualPageNumber() == 1 ); + aScreen->GetFileName(), color, aScreen->GetVirtualPageNumber() == 1, variantName, + variantDesc ); } aScreen->Plot( aPlotter, aPlotOpts ); @@ -471,12 +473,14 @@ bool SCH_PLOTTER::plotOneSheetPS( const wxString& aFileName, SCH_SCREEN* aScreen wxString sheetPath = m_schematic->CurrentSheet().PathHumanReadable(); COLOR4D color = plotter->RenderSettings()->GetLayerColor( LAYER_SCHEMATIC_DRAWINGSHEET ); - PlotDrawingSheet( plotter, &aScreen->Schematic()->Project(), - aScreen->GetTitleBlock(), - aPageInfo, aScreen->Schematic()->GetProperties(), + SCHEMATIC* sch = aScreen->Schematic(); + wxString variantName = sch->GetCurrentVariant(); + wxString variantDesc = sch->GetVariantDescription( variantName ); + + PlotDrawingSheet( plotter, &sch->Project(), aScreen->GetTitleBlock(), aPageInfo, sch->GetProperties(), aScreen->GetPageNumber(), aScreen->GetPageCount(), sheetName, sheetPath, aScreen->GetFileName(), plotter->GetColorMode() ? color : COLOR4D::BLACK, - aScreen->GetVirtualPageNumber() == 1 ); + aScreen->GetVirtualPageNumber() == 1, variantName, variantDesc ); } aScreen->Plot( plotter, aPlotOpts ); @@ -648,13 +652,14 @@ bool SCH_PLOTTER::plotOneSheetSVG( const wxString& aFileName, SCH_SCREEN* aScree wxString sheetPath = m_schematic->CurrentSheet().PathHumanReadable(); COLOR4D color = plotter->RenderSettings()->GetLayerColor( LAYER_SCHEMATIC_DRAWINGSHEET ); - PlotDrawingSheet( plotter, &aScreen->Schematic()->Project(), - aScreen->GetTitleBlock(), - actualPage, aScreen->Schematic()->GetProperties(), - aScreen->GetPageNumber(), - aScreen->GetPageCount(), sheetName, sheetPath, aScreen->GetFileName(), - plotter->GetColorMode() ? color : COLOR4D::BLACK, - aScreen->GetVirtualPageNumber() == 1 ); + SCHEMATIC* sch = aScreen->Schematic(); + wxString variantName = sch->GetCurrentVariant(); + wxString variantDesc = sch->GetVariantDescription( variantName ); + + PlotDrawingSheet( plotter, &sch->Project(), aScreen->GetTitleBlock(), actualPage, sch->GetProperties(), + aScreen->GetPageNumber(), aScreen->GetPageCount(), sheetName, sheetPath, + aScreen->GetFileName(), plotter->GetColorMode() ? color : COLOR4D::BLACK, + aScreen->GetVirtualPageNumber() == 1, variantName, variantDesc ); } aScreen->Plot( plotter, aPlotOpts ); @@ -796,13 +801,13 @@ bool SCH_PLOTTER::plotOneSheetDXF( const wxString& aFileName, SCH_SCREEN* aScree wxString sheetPath = m_schematic->CurrentSheet().PathHumanReadable(); COLOR4D color = plotter->RenderSettings()->GetLayerColor( LAYER_SCHEMATIC_DRAWINGSHEET ); - PlotDrawingSheet( plotter, &m_schematic->Project(), - aScreen->GetTitleBlock(), - pageInfo, - aScreen->Schematic()->GetProperties(), aScreen->GetPageNumber(), - aScreen->GetPageCount(), sheetName, sheetPath, aScreen->GetFileName(), - plotter->GetColorMode() ? color : COLOR4D::BLACK, - aScreen->GetVirtualPageNumber() == 1 ); + wxString variantName = m_schematic->GetCurrentVariant(); + wxString variantDesc = m_schematic->GetVariantDescription( variantName ); + + PlotDrawingSheet( plotter, &m_schematic->Project(), aScreen->GetTitleBlock(), pageInfo, + m_schematic->GetProperties(), aScreen->GetPageNumber(), aScreen->GetPageCount(), sheetName, + sheetPath, aScreen->GetFileName(), plotter->GetColorMode() ? color : COLOR4D::BLACK, + aScreen->GetVirtualPageNumber() == 1, variantName, variantDesc ); } aScreen->Plot( plotter, aPlotOpts ); diff --git a/eeschema/sch_view.cpp b/eeschema/sch_view.cpp index b744234e39..a8cb8fdda2 100644 --- a/eeschema/sch_view.cpp +++ b/eeschema/sch_view.cpp @@ -125,6 +125,11 @@ void SCH_VIEW::DisplaySheet( const SCH_SCREEN *aScreen ) m_drawingSheet->SetPageBorderColorLayer( LAYER_SCHEMATIC_PAGE_LIMITS ); m_drawingSheet->SetIsFirstPage( aScreen->GetVirtualPageNumber() == 1 ); + wxString currentVariant = aScreen->Schematic()->GetCurrentVariant(); + wxString variantDesc = aScreen->Schematic()->GetVariantDescription( currentVariant ); + m_drawingSheet->SetVariantName( TO_UTF8( currentVariant ) ); + m_drawingSheet->SetVariantDesc( TO_UTF8( variantDesc ) ); + if( m_frame && m_frame->IsType( FRAME_SCH ) ) { SCH_EDIT_FRAME* editFrame = dynamic_cast( m_frame ); diff --git a/eeschema/toolbars_sch_editor.cpp b/eeschema/toolbars_sch_editor.cpp index 31ab97a570..3a417a1a42 100644 --- a/eeschema/toolbars_sch_editor.cpp +++ b/eeschema/toolbars_sch_editor.cpp @@ -462,8 +462,6 @@ bool SCH_EDIT_FRAME::ShowAddVariantDialog() UpdateVariantSelectionCtrl( Schematic().GetVariantNamesForUI() ); SetCurrentVariant( variantName ); OnModify(); - UpdateProperties(); - HardRedraw(); return true; } @@ -491,5 +489,8 @@ void SCH_EDIT_FRAME::SetCurrentVariant( const wxString& aVariantName ) { m_currentVariantCtrl->SetSelection( newSelection ); Schematic().SetCurrentVariant( aVariantName ); + + UpdateProperties(); + HardRedraw(); } } diff --git a/eeschema/tools/sch_editor_control.cpp b/eeschema/tools/sch_editor_control.cpp index 5c51746378..f233cfd291 100644 --- a/eeschema/tools/sch_editor_control.cpp +++ b/eeschema/tools/sch_editor_control.cpp @@ -338,6 +338,11 @@ wxImage renderSelectionToBitmap( SCH_EDIT_FRAME* aFrame, const SCH_SELECTION& aS drawingSheet->SetSheetName( TO_UTF8( aFrame->GetScreenDesc() ) ); drawingSheet->SetSheetPath( TO_UTF8( aFrame->GetFullScreenDesc() ) ); + wxString currentVariant = screen->Schematic()->GetCurrentVariant(); + wxString variantDesc = screen->Schematic()->GetVariantDescription( currentVariant ); + drawingSheet->SetVariantName( TO_UTF8( currentVariant ) ); + drawingSheet->SetVariantDesc( TO_UTF8( variantDesc ) ); + view->Add( drawingSheet.get() ); } diff --git a/include/drawing_sheet/ds_draw_item.h b/include/drawing_sheet/ds_draw_item.h index 1a3596de8b..f6fdc8a717 100644 --- a/include/drawing_sheet/ds_draw_item.h +++ b/include/drawing_sheet/ds_draw_item.h @@ -459,6 +459,12 @@ public: */ void SetSheetLayer( const wxString& aSheetLayer ) { m_sheetLayer = aSheetLayer; } + /** + * Set the current variant name and description to draw/plot + */ + void SetVariantName( const wxString& aVariant ) { m_variantName = aVariant; } + void SetVariantDesc( const wxString& aDesc ) { m_variantDesc = aDesc; } + void SetDefaultPenSize( int aPenSize ) { m_penSize = aPenSize; } int GetDefaultPenSize() const { return m_penSize; } @@ -578,6 +584,8 @@ protected: wxString m_sheetPath; // for text variable references wxString m_pageNumber; ///< The actual page number displayed in the title block. wxString m_sheetLayer; // for text variable references + wxString m_variantName; // for ${VARIANT} text variable reference + wxString m_variantDesc; // for ${VARIANT_DESC} text variable reference const PROJECT* m_project; // for project-based text variable references int m_flags; diff --git a/include/drawing_sheet/ds_proxy_view_item.h b/include/drawing_sheet/ds_proxy_view_item.h index c53f058a6e..81bd314cdf 100644 --- a/include/drawing_sheet/ds_proxy_view_item.h +++ b/include/drawing_sheet/ds_proxy_view_item.h @@ -85,6 +85,12 @@ public: */ void SetIsFirstPage( bool aIsFirstPage ) { m_isFirstPage = aIsFirstPage; } + /** + * Set the current variant name and description to be shown on the drawing sheet. + */ + void SetVariantName( const std::string& aVariant ) { m_variantName = aVariant; } + void SetVariantDesc( const std::string& aVariantDesc ) { m_variantDesc = aVariantDesc; } + /** * Can be used to override which layer ID is used for drawing sheet item colors * @param aLayerId is the color to use (defaults to LAYER_DRAWINGSHEET if this is not called) @@ -142,6 +148,8 @@ protected: std::string m_pageNumber; int m_sheetCount; bool m_isFirstPage; + std::string m_variantName; + std::string m_variantDesc; const PROJECT* m_project; const std::map* m_properties; diff --git a/include/plotters/plotter.h b/include/plotters/plotter.h index 55165ef83f..274a743ccb 100644 --- a/include/plotters/plotter.h +++ b/include/plotters/plotter.h @@ -734,10 +734,11 @@ protected: // variables used in most of plotters: class TITLE_BLOCK; void PlotDrawingSheet( PLOTTER* plotter, const PROJECT* aProject, const TITLE_BLOCK& aTitleBlock, - const PAGE_INFO& aPageInfo, const std::map*aProperties, + const PAGE_INFO& aPageInfo, const std::map* aProperties, const wxString& aSheetNumber, int aSheetCount, const wxString& aSheetName, - const wxString& aSheetPath, const wxString& aFilename, - COLOR4D aColor = COLOR4D::UNSPECIFIED, bool aIsFirstPage = true ); + const wxString& aSheetPath, const wxString& aFilename, COLOR4D aColor = COLOR4D::UNSPECIFIED, + bool aIsFirstPage = true, const wxString& aVariantName = wxEmptyString, + const wxString& aVariantDesc = wxEmptyString ); /** * Return the default plot extension for a format. diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp index 9922e5d5de..b9acedf49a 100644 --- a/pcbnew/pcb_edit_frame.cpp +++ b/pcbnew/pcb_edit_frame.cpp @@ -881,7 +881,13 @@ void PCB_EDIT_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings ) } if( BOARD* board = GetBoard() ) + { drawingSheet->SetFileName( TO_UTF8( board->GetFileName() ) ); + wxString currentVariant = board->GetCurrentVariant(); + wxString variantDesc = board->GetVariantDescription( currentVariant ); + drawingSheet->SetVariantName( TO_UTF8( currentVariant ) ); + drawingSheet->SetVariantDesc( TO_UTF8( variantDesc ) ); + } // PCB_DRAW_PANEL_GAL takes ownership of the drawing-sheet GetCanvas()->SetDrawingSheet( drawingSheet ); diff --git a/pcbnew/pcb_edit_frame.h b/pcbnew/pcb_edit_frame.h index 668c89a286..39abbd561c 100644 --- a/pcbnew/pcb_edit_frame.h +++ b/pcbnew/pcb_edit_frame.h @@ -175,6 +175,12 @@ public: */ void UpdateVariantSelectionCtrl(); + /** + * Set the current variant on the board and update the drawing sheet's cached + * variant name and description accordingly. + */ + void SetCurrentVariant( const wxString& aVariantName ); + /** * Event handler for variant selection changes in the toolbar. */ diff --git a/pcbnew/pcbnew_jobs_handler.cpp b/pcbnew/pcbnew_jobs_handler.cpp index bde13fda15..a6858cf02c 100644 --- a/pcbnew/pcbnew_jobs_handler.cpp +++ b/pcbnew/pcbnew_jobs_handler.cpp @@ -2796,6 +2796,11 @@ DS_PROXY_VIEW_ITEM* PCBNEW_JOBS_HANDLER::getDrawingSheetProxyView( BOARD* aBrd ) drawingSheet->SetFileName( TO_UTF8( aBrd->GetFileName() ) ); + wxString currentVariant = aBrd->GetCurrentVariant(); + wxString variantDesc = aBrd->GetVariantDescription( currentVariant ); + drawingSheet->SetVariantName( TO_UTF8( currentVariant ) ); + drawingSheet->SetVariantDesc( TO_UTF8( variantDesc ) ); + return drawingSheet; } diff --git a/pcbnew/plot_board_layers.cpp b/pcbnew/plot_board_layers.cpp index c603d82973..3aacd24411 100644 --- a/pcbnew/plot_board_layers.cpp +++ b/pcbnew/plot_board_layers.cpp @@ -1392,10 +1392,13 @@ PLOTTER* StartPlotBoard( BOARD *aBoard, const PCB_PLOT_PARAMS *aPlotOpts, int aL // Plot the frame reference if requested if( aPlotOpts->GetPlotFrameRef() ) { - PlotDrawingSheet( plotter, aBoard->GetProject(), aBoard->GetTitleBlock(), - aBoard->GetPageSettings(), &aBoard->GetProperties(), aPageNumber, - aPageCount, aSheetName, aSheetPath, aBoard->GetFileName(), - renderSettings->GetLayerColor( LAYER_DRAWINGSHEET ) ); + wxString variantName = aBoard->GetCurrentVariant(); + wxString variantDesc = aBoard->GetVariantDescription( variantName ); + + PlotDrawingSheet( plotter, aBoard->GetProject(), aBoard->GetTitleBlock(), aBoard->GetPageSettings(), + &aBoard->GetProperties(), aPageNumber, aPageCount, aSheetName, aSheetPath, + aBoard->GetFileName(), renderSettings->GetLayerColor( LAYER_DRAWINGSHEET ), true, + variantName, variantDesc ); if( aPlotOpts->GetMirror() || aPlotOpts->GetScale() != 1.0 || aPlotOpts->GetAutoScale() ) initializePlotter( plotter, aBoard, aPlotOpts ); @@ -1447,11 +1450,13 @@ void setupPlotterNewPDFPage( PLOTTER* aPlotter, BOARD* aBoard, PCB_PLOT_PARAMS* revertOps = true; } - PlotDrawingSheet( aPlotter, aBoard->GetProject(), aBoard->GetTitleBlock(), - aBoard->GetPageSettings(), &aBoard->GetProperties(), aPageNumber, - aPageCount, - aSheetName, aSheetPath, aBoard->GetFileName(), - aPlotter->RenderSettings()->GetLayerColor( LAYER_DRAWINGSHEET ) ); + wxString variantName = aBoard->GetCurrentVariant(); + wxString variantDesc = aBoard->GetVariantDescription( variantName ); + + PlotDrawingSheet( aPlotter, aBoard->GetProject(), aBoard->GetTitleBlock(), aBoard->GetPageSettings(), + &aBoard->GetProperties(), aPageNumber, aPageCount, aSheetName, aSheetPath, + aBoard->GetFileName(), aPlotter->RenderSettings()->GetLayerColor( LAYER_DRAWINGSHEET ), true, + variantName, variantDesc ); if( revertOps ) { diff --git a/pcbnew/toolbars_pcb_editor.cpp b/pcbnew/toolbars_pcb_editor.cpp index 7ec6da80fa..967aaf98f0 100644 --- a/pcbnew/toolbars_pcb_editor.cpp +++ b/pcbnew/toolbars_pcb_editor.cpp @@ -72,6 +72,8 @@ #include #include #include +#include +#include #include "../scripting/python_scripting.h" @@ -524,6 +526,26 @@ void PCB_EDIT_FRAME::UpdateVariantSelectionCtrl() } +void PCB_EDIT_FRAME::SetCurrentVariant( const wxString& aVariantName ) +{ + GetBoard()->SetCurrentVariant( aVariantName ); + + if( PCB_DRAW_PANEL_GAL* canvas = dynamic_cast( GetCanvas() ) ) + { + DS_PROXY_VIEW_ITEM* ds = canvas->GetDrawingSheet(); + + if( ds ) + { + wxString currentVariant = GetBoard()->GetCurrentVariant(); + wxString variantDesc = GetBoard()->GetVariantDescription( currentVariant ); + + ds->SetVariantName( currentVariant.ToStdString() ); + ds->SetVariantDesc( variantDesc.ToStdString() ); + } + } +} + + void PCB_EDIT_FRAME::onVariantSelected( wxCommandEvent& aEvent ) { if( !m_CurrentVariantCtrl ) @@ -534,12 +556,12 @@ void PCB_EDIT_FRAME::onVariantSelected( wxCommandEvent& aEvent ) if( selection == wxNOT_FOUND || selection == 0 ) { // "" selected - clear the current variant - GetBoard()->SetCurrentVariant( wxEmptyString ); + SetCurrentVariant( wxEmptyString ); } else { wxString selectedVariant = m_CurrentVariantCtrl->GetString( selection ); - GetBoard()->SetCurrentVariant( selectedVariant ); + SetCurrentVariant( selectedVariant ); } // Refresh the view and properties panel to show the new variant state