From 7d3c61c91d14dc2f28736e2c5e4c8c31c42c773c Mon Sep 17 00:00:00 2001 From: Saleem Edah-Tally Date: Sun, 13 Jul 2025 16:10:15 +0200 Subject: [PATCH] Use the saved config values or application values. ConfigEditorPopup On creating the popup, config values were always read and used. Do this if the application does not provide its own variables. The values are still committed to the config file in the usual way (on control destruction). The application may restore them to its own variables during setup. --- Resources/InsaneWidget/XInsaneWidget.cpp | 22 ++++++------- Resources/InsaneWidget/XInsaneWidget.h | 3 ++ Resources/Utilities/ConfigEditorPopup.cpp | 39 +++++++++++++++++++---- Resources/Utilities/ConfigEditorPopup.h | 6 ++-- 4 files changed, 48 insertions(+), 22 deletions(-) diff --git a/Resources/InsaneWidget/XInsaneWidget.cpp b/Resources/InsaneWidget/XInsaneWidget.cpp index 1d0b32b..0d9a649 100644 --- a/Resources/InsaneWidget/XInsaneWidget.cpp +++ b/Resources/InsaneWidget/XInsaneWidget.cpp @@ -400,6 +400,10 @@ XInsaneWidget::~XInsaneWidget() = default; // Important for mixing unique_ptr an void XInsaneWidget::Setup() { + // Restore known last values. + m_doubleSided = m_config->ReadBool("/Scanner/DoubleSided", false); + m_total = m_config->ReadLong("/Scanner/Total", 1); + lblNewDoc->Bind ( wxEVT_RIGHT_UP, &XInsaneWidget::OnLblNewDocRightClick, this ); txtNewDoc->Bind ( wxEVT_KEY_UP, &XInsaneWidget::OnTxtNewDocKeyPressed, this ); @@ -445,9 +449,9 @@ void XInsaneWidget::OnLblNewDocRightClick ( wxMouseEvent& evt ) evt.Skip(); return; } - wxCheckBox * cb = m_pageStack->AddCheckBox (_("Double sided:"),_T("/Scanner/DoubleSided") ); + wxCheckBox * cb = m_pageStack->AddCheckBox (_("Double sided:"),_T("/Scanner/DoubleSided"), &m_doubleSided ); cb->SetToolTip (_("Scan all front faces first, then all back faces in reverse order.") ); - wxSpinCtrl * spn = m_pageStack->AddSpinCtrl (_("Total:"),_T("/Scanner/Total") ); + wxSpinCtrl * spn = m_pageStack->AddSpinCtrl (_("Total:"),_T("/Scanner/Total"), &m_total ); spn->SetRange ( 1, 50 ); spn->SetToolTip (_("Total number of sides to scan (not total number of sheets).") ); m_pageStack->ShowPopup(); @@ -515,15 +519,7 @@ void XInsaneWidget::OnBtnScanClick ( wxMouseEvent& evt ) } const uint outputType = m_scannerWidget->GetScannerOutputType(); bool adf = false; - bool doubleSided = false; - uint total = 1; - wxString paperSize = _T("A4"); - if (m_config) - { - doubleSided = m_config->ReadBool("/Scanner/DoubleSided", false); - total = m_config->ReadLong("/Scanner/Total", 1); - m_config->Read("/Scanner/Last/PaperSize", &paperSize, "A4"); - } + wxString paperSize = m_scannerWidget->GetPaperSize(); wxFileName destFile(dest); const string deviceId = m_scannerWidget->GetCurrentDeviceId().ToStdString(); @@ -545,8 +541,8 @@ void XInsaneWidget::OnBtnScanClick ( wxMouseEvent& evt ) m_scanProject->SetResolution(resolution); m_scanProject->SetOutputType(outputType); m_scanProject->SetPaperSize(paperSize); - m_scanProject->SetDoubleSided(doubleSided); - m_scanProject->SetTotalNumberOfSides(total); + m_scanProject->SetDoubleSided(m_doubleSided); + m_scanProject->SetTotalNumberOfSides((uint) m_total); if (m_stampWidgets) { m_stampDescriptors = m_stampWidgets->GetStampDescriptors(); diff --git a/Resources/InsaneWidget/XInsaneWidget.h b/Resources/InsaneWidget/XInsaneWidget.h index e8c9bf3..a16b4d3 100644 --- a/Resources/InsaneWidget/XInsaneWidget.h +++ b/Resources/InsaneWidget/XInsaneWidget.h @@ -83,6 +83,9 @@ private: std::unique_ptr m_insaneWorker; std::unique_ptr m_backgroundScannerDiscoveryEvh; std::unique_ptr m_scanProject; + + bool m_doubleSided = false; + int m_total = 1; void OnLblNewDocRightClick ( wxMouseEvent& evt ); void OnTxtNewDocKeyPressed ( wxKeyEvent& evt ); diff --git a/Resources/Utilities/ConfigEditorPopup.cpp b/Resources/Utilities/ConfigEditorPopup.cpp index c4899a6..fc02f62 100644 --- a/Resources/Utilities/ConfigEditorPopup.cpp +++ b/Resources/Utilities/ConfigEditorPopup.cpp @@ -30,7 +30,8 @@ PopupTransientWindow* ConfigEditorPopup::CreatePopup() return m_popup; } -wxCheckBox* ConfigEditorPopup::AddCheckBox ( const wxString& label, const wxString& configPath ) +wxCheckBox* ConfigEditorPopup::AddCheckBox ( const wxString& label, const wxString& configPath, + bool * clientVar) { wxASSERT_MSG ( ( m_config != nullptr ),_T("CONFIG IS nullptr") ); wxString * cPath = new wxString ( configPath ); @@ -38,13 +39,22 @@ wxCheckBox* ConfigEditorPopup::AddCheckBox ( const wxString& label, const wxStri m_flxsz->Add ( lbl, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 0 ); wxCheckBox * cb = new wxCheckBox ( m_pan, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); m_flxsz->Add ( cb, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 0 ); - cb->SetValue ( m_config->ReadBool ( configPath, false ) ); + cb->SetValue ( (!clientVar) ? m_config->ReadBool ( configPath, false ) : *clientVar); cb->SetClientData ( cPath ); cb->Bind ( wxEVT_DESTROY, &ConfigEditorPopup::OnControlDestroy, this ); + if (clientVar) + { + cb->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, [cb, clientVar] (wxCommandEvent& evt) + { + *clientVar = cb->GetValue(); + } + ); + } return cb; } -wxSpinCtrl* ConfigEditorPopup::AddSpinCtrl ( const wxString& label, const wxString& configPath ) +wxSpinCtrl* ConfigEditorPopup::AddSpinCtrl ( const wxString& label, const wxString& configPath, + int * clientVar) { wxASSERT_MSG ( ( m_config != nullptr ),_T("CONFIG IS nullptr") ); wxString * cPath = new wxString ( configPath ); @@ -52,13 +62,22 @@ wxSpinCtrl* ConfigEditorPopup::AddSpinCtrl ( const wxString& label, const wxStri m_flxsz->Add ( lbl, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxGROW | wxALL, 0 ); wxSpinCtrl * spn = new wxSpinCtrl ( m_pan, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS | wxALIGN_RIGHT, -100, 100 ); m_flxsz->Add ( spn, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 0 ); - spn->SetValue ( ( int ) m_config->ReadLong ( configPath, 0 ) ); + spn->SetValue ((!clientVar) ? ( int ) m_config->ReadLong ( configPath, 0 ) : *clientVar); spn->SetClientData ( cPath ); spn->Bind ( wxEVT_DESTROY, &ConfigEditorPopup::OnControlDestroy, this ); + if (clientVar) + { + spn->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, [spn, clientVar] (wxSpinEvent& evt) + { + *clientVar = spn->GetValue(); + } + ); + } return spn; } -wxTextCtrl* ConfigEditorPopup::AddTextCtrl ( const wxString& label, const wxString& configPath ) +wxTextCtrl* ConfigEditorPopup::AddTextCtrl ( const wxString& label, const wxString& configPath, + wxString * clientVar) { wxASSERT_MSG ( ( m_config != nullptr ),_T("CONFIG IS nullptr") ); wxString * cPath = new wxString ( configPath ); @@ -66,9 +85,17 @@ wxTextCtrl* ConfigEditorPopup::AddTextCtrl ( const wxString& label, const wxStri m_flxsz->Add ( lbl, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxGROW | wxALL, 0 ); wxTextCtrl * txt = new wxTextCtrl ( m_pan, wxID_ANY ); m_flxsz->Add ( txt, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 0 ); - txt->SetValue ( m_config->Read ( configPath, wxEmptyString ) ); + txt->SetValue ( (!clientVar) ? m_config->Read ( configPath, wxEmptyString ) : *clientVar ); txt->SetClientData ( cPath ); txt->Bind ( wxEVT_DESTROY, &ConfigEditorPopup::OnControlDestroy, this ); + if (clientVar) + { + txt->Bind(wxEVT_COMMAND_TEXT_UPDATED, [txt, clientVar] (wxCommandEvent& evt) + { + *clientVar = txt->GetValue(); + } + ); + } return txt; } diff --git a/Resources/Utilities/ConfigEditorPopup.h b/Resources/Utilities/ConfigEditorPopup.h index 41a83f2..c8fa6e2 100644 --- a/Resources/Utilities/ConfigEditorPopup.h +++ b/Resources/Utilities/ConfigEditorPopup.h @@ -27,9 +27,9 @@ public: virtual ~ConfigEditorPopup(); PopupTransientWindow* CreatePopup(); void ShowPopup(); - wxCheckBox* AddCheckBox ( const wxString& label, const wxString& configPath ); - wxSpinCtrl* AddSpinCtrl ( const wxString& label, const wxString& configPath ); - wxTextCtrl * AddTextCtrl ( const wxString& label, const wxString& configPath ); + wxCheckBox* AddCheckBox(const wxString& label, const wxString& configPath, bool * clientVar = nullptr); + wxSpinCtrl* AddSpinCtrl ( const wxString& label, const wxString& configPath, int * clientVar = nullptr ); + wxTextCtrl * AddTextCtrl ( const wxString& label, const wxString& configPath, wxString * clientVar = nullptr ); private: wxConfig * m_config = nullptr;