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;