From c9fbc037c49e7f95ba6dc67cae350026fe0011e4 Mon Sep 17 00:00:00 2001 From: Damjan Date: Mon, 12 Jan 2026 22:09:12 +0100 Subject: [PATCH] Fix print dialog settings not persisting between sessions --- common/board_printout.cpp | 4 ++++ common/settings/app_settings.cpp | 15 +++++++++++++++ include/settings/app_settings.h | 19 ++++++++++++------- pcbnew/dialogs/dialog_print_pcbnew.cpp | 7 +++++++ pcbnew/pcbnew_printout.cpp | 10 ++++++++++ 5 files changed, 48 insertions(+), 7 deletions(-) diff --git a/common/board_printout.cpp b/common/board_printout.cpp index 4b193e686f..bd2cd17e1e 100644 --- a/common/board_printout.cpp +++ b/common/board_printout.cpp @@ -51,6 +51,8 @@ void BOARD_PRINTOUT_SETTINGS::Load( APP_SETTINGS_BASE* aConfig ) for( int layer : aConfig->m_Printing.layers ) m_LayerSet.set( layer, true ); + + m_Mirror = aConfig->m_Printing.mirror; } @@ -63,6 +65,8 @@ void BOARD_PRINTOUT_SETTINGS::Save( APP_SETTINGS_BASE* aConfig ) for( unsigned layer = 0; layer < m_LayerSet.size(); ++layer ) if( m_LayerSet.test( layer ) ) aConfig->m_Printing.layers.push_back( layer ); + + aConfig->m_Printing.mirror = m_Mirror; } diff --git a/common/settings/app_settings.cpp b/common/settings/app_settings.cpp index 8ed4709607..2b8ce40b76 100644 --- a/common/settings/app_settings.cpp +++ b/common/settings/app_settings.cpp @@ -189,6 +189,21 @@ APP_SETTINGS_BASE::APP_SETTINGS_BASE( const std::string& aFilename, int aSchemaV m_params.emplace_back( new PARAM_LIST( "printing.layers", &m_Printing.layers, {} ) ); + m_params.emplace_back( new PARAM( "printing.mirror", + &m_Printing.mirror, false ) ); + + m_params.emplace_back( new PARAM( "printing.drill_marks", + &m_Printing.drill_marks, 1 ) ); + + m_params.emplace_back( new PARAM( "printing.pagination", + &m_Printing.pagination, 1 ) ); + + m_params.emplace_back( new PARAM( "printing.edge_cuts_on_all_pages", + &m_Printing.edge_cuts_on_all_pages, true ) ); + + m_params.emplace_back( new PARAM( "printing.as_item_checkboxes", + &m_Printing.as_item_checkboxes, false ) ); + m_params.emplace_back( new PARAM( "search_pane.selection_zoom", reinterpret_cast( &m_SearchPane.selection_zoom ), static_cast( SEARCH_PANE::SELECTION_ZOOM::PAN ) ) ); diff --git a/include/settings/app_settings.h b/include/settings/app_settings.h index d81942b30b..93bae0fdd5 100644 --- a/include/settings/app_settings.h +++ b/include/settings/app_settings.h @@ -178,13 +178,18 @@ public: struct PRINTING { - bool background; ///< Whether or not to print background color. - bool monochrome; ///< Whether or not to print in monochrome. - double scale; ///< Printout scale. - bool use_theme; ///< If false, display color theme will be used. - wxString color_theme; ///< Color theme to use for printing. - bool title_block; ///< Whether or not to print title block. - std::vector layers; ///< List of enabled layers for printing. + bool background; ///< Whether or not to print background color. + bool monochrome; ///< Whether or not to print in monochrome. + double scale; ///< Printout scale. + bool use_theme; ///< If false, display color theme will be used. + wxString color_theme; ///< Color theme to use for printing. + bool title_block; ///< Whether or not to print title block. + std::vector layers; ///< List of enabled layers for printing. + bool mirror; ///< Print mirrored. + int drill_marks; ///< Drill marks type (0=none, 1=small, 2=real). + int pagination; ///< 0=all layers on one page, 1=one page per layer. + bool edge_cuts_on_all_pages; ///< Print board edges on all pages. + bool as_item_checkboxes; ///< Honor checkboxes in appearance manager. }; struct SYSTEM diff --git a/pcbnew/dialogs/dialog_print_pcbnew.cpp b/pcbnew/dialogs/dialog_print_pcbnew.cpp index 305d24f707..c211dbd058 100644 --- a/pcbnew/dialogs/dialog_print_pcbnew.cpp +++ b/pcbnew/dialogs/dialog_print_pcbnew.cpp @@ -454,6 +454,8 @@ void DIALOG_PRINT_PCBNEW::saveSettings() } DIALOG_PRINT_GENERIC::saveSettings(); + + settings()->Save( cfg ); } @@ -463,6 +465,11 @@ int PCB_CONTROL::Print( const TOOL_EVENT& aEvent ) m_toolMgr->RunAction( ACTIONS::selectionClear ); PCBNEW_PRINTOUT_SETTINGS settings( m_frame->GetPageSettings() ); + + // Load saved settings + PCBNEW_SETTINGS* cfg = static_cast( m_frame )->GetPcbNewSettings(); + settings.Load( cfg ); + DIALOG_PRINT_PCBNEW dlg( (PCB_BASE_EDIT_FRAME*) m_frame, &settings ); if( m_isFootprintEditor ) diff --git a/pcbnew/pcbnew_printout.cpp b/pcbnew/pcbnew_printout.cpp index 1df16a9b91..dc24ad1f82 100644 --- a/pcbnew/pcbnew_printout.cpp +++ b/pcbnew/pcbnew_printout.cpp @@ -53,12 +53,22 @@ PCBNEW_PRINTOUT_SETTINGS::PCBNEW_PRINTOUT_SETTINGS( const PAGE_INFO& aPageInfo ) void PCBNEW_PRINTOUT_SETTINGS::Load( APP_SETTINGS_BASE* aConfig ) { BOARD_PRINTOUT_SETTINGS::Load( aConfig ); + + m_DrillMarks = static_cast( aConfig->m_Printing.drill_marks ); + m_Pagination = static_cast( aConfig->m_Printing.pagination ); + m_PrintEdgeCutsOnAllPages = aConfig->m_Printing.edge_cuts_on_all_pages; + m_AsItemCheckboxes = aConfig->m_Printing.as_item_checkboxes; } void PCBNEW_PRINTOUT_SETTINGS::Save( APP_SETTINGS_BASE* aConfig ) { BOARD_PRINTOUT_SETTINGS::Save( aConfig ); + + aConfig->m_Printing.drill_marks = static_cast( m_DrillMarks ); + aConfig->m_Printing.pagination = static_cast( m_Pagination ); + aConfig->m_Printing.edge_cuts_on_all_pages = m_PrintEdgeCutsOnAllPages; + aConfig->m_Printing.as_item_checkboxes = m_AsItemCheckboxes; }