From 77dbcfd963789da8d501e1c51b62e9fdf5f67247 Mon Sep 17 00:00:00 2001 From: Charlie Fenton Date: Fri, 20 Jun 2014 04:48:05 -0700 Subject: [PATCH] MGR: Continue fixing deficiencies in Computing Preferences dialog reported by Juha. --- clientgui/DlgAdvPreferences.cpp | 53 ++++++++++++++++------------- clientgui/DlgAdvPreferences.h | 1 + clientgui/DlgAdvPreferencesBase.cpp | 47 ++++++++++++------------- 3 files changed, 53 insertions(+), 48 deletions(-) diff --git a/clientgui/DlgAdvPreferences.cpp b/clientgui/DlgAdvPreferences.cpp index 782db1e5cb..8a4b23a0a2 100644 --- a/clientgui/DlgAdvPreferences.cpp +++ b/clientgui/DlgAdvPreferences.cpp @@ -375,11 +375,6 @@ void CDlgAdvPreferences::ReadPreferenceSettings() { this->UpdateControlStates(); } -void clamp_pct(double& x) { - if (x < 0) x = 0; - if (x > 100) x = 100; -} - /* write overridden preferences to disk (global_prefs_override.xml) */ /* IMPORTANT: Any items added here must be checked in ValidateInput()! */ bool CDlgAdvPreferences::SavePreferencesSettings() { @@ -436,7 +431,6 @@ bool CDlgAdvPreferences::SavePreferencesSettings() { m_txtProcUseProcessors->GetValue().ToDouble(&td); td = RoundToHundredths(td); - clamp_pct(td); prefs.max_ncpus_pct=td; mask.max_ncpus_pct=true; @@ -512,7 +506,6 @@ bool CDlgAdvPreferences::SavePreferencesSettings() { // m_txtDiskMaxOfTotal->GetValue().ToDouble(&td); td = RoundToHundredths(td); - clamp_pct(td); prefs.disk_max_used_pct=td; mask.disk_max_used_pct=true; // @@ -522,21 +515,18 @@ bool CDlgAdvPreferences::SavePreferencesSettings() { // m_txtDiskMaxSwap->GetValue().ToDouble(&td); td = RoundToHundredths(td); - clamp_pct(td); td = td / 100.0 ; prefs.vm_max_used_frac=td; mask.vm_max_used_frac=true; //Memory m_txtMemoryMaxInUse->GetValue().ToDouble(&td); td = RoundToHundredths(td); - clamp_pct(td); td = td / 100.0; prefs.ram_max_used_busy_frac=td; mask.ram_max_used_busy_frac=true; // m_txtMemoryMaxOnIdle->GetValue().ToDouble(&td); td = RoundToHundredths(td); - clamp_pct(td); td = td / 100.0; prefs.ram_max_used_idle_frac=td; mask.ram_max_used_idle_frac=true; @@ -594,7 +584,7 @@ bool CDlgAdvPreferences::ValidateInput() { } } buffer = m_txtMaxLoad->GetValue(); - if(!IsValidFloatValue(buffer)) { + if(!IsValidFloatValueBetween(buffer, 0.0, 100.0)) { ShowErrorMessage(invMsgFloat, m_txtMaxLoad); return false; } @@ -635,13 +625,13 @@ bool CDlgAdvPreferences::ValidateInput() { } buffer = m_txtProcUseProcessors->GetValue(); - if(!IsValidFloatValue(buffer)) { + if(!IsValidFloatValueBetween(buffer, 0.0, 100.0)) { ShowErrorMessage(invMsgFloat, m_txtProcUseProcessors); return false; } buffer = m_txtProcUseCPUTime->GetValue(); - if(!IsValidFloatValue(buffer)) { + if(!IsValidFloatValueBetween(buffer, 0.0, 100.0)) { ShowErrorMessage(invMsgFloat, m_txtProcUseCPUTime); return false; } @@ -672,14 +662,14 @@ bool CDlgAdvPreferences::ValidateInput() { } //limit additional days from 0 to 10 - double td; - if (!m_txtNetConnectInterval->GetValue().ToDouble(&td)) td = -1.; - if(td>10.0 || td < 0.0) { + buffer = m_txtNetConnectInterval->GetValue(); + if(!IsValidFloatValueBetween(buffer, 0.0, 10.0)) { ShowErrorMessage(invMsgFloat,m_txtNetConnectInterval); return false; } - if (!m_txtNetAdditionalDays->GetValue().ToDouble(&td)) td = -1.; - if(td>10.0 || td < 0.0) { + + buffer = m_txtNetAdditionalDays->GetValue(); + if(!IsValidFloatValueBetween(buffer, 0.0, 10.0)) { ShowErrorMessage(invMsgFloat,m_txtNetAdditionalDays); return false; } @@ -730,7 +720,7 @@ bool CDlgAdvPreferences::ValidateInput() { } buffer = m_txtDiskMaxOfTotal->GetValue(); - if(!IsValidFloatValue(buffer)) { + if(!IsValidFloatValueBetween(buffer, 0.0, 100.0)) { ShowErrorMessage(invMsgFloat, m_txtDiskMaxOfTotal); return false; } @@ -742,19 +732,19 @@ bool CDlgAdvPreferences::ValidateInput() { } buffer = m_txtDiskMaxSwap->GetValue(); - if(!IsValidFloatValue(buffer)) { + if(!IsValidFloatValueBetween(buffer, 0.0, 100.0)) { ShowErrorMessage(invMsgFloat, m_txtDiskMaxSwap); return false; } buffer = m_txtMemoryMaxInUse->GetValue(); - if(!IsValidFloatValue(buffer)) { + if(!IsValidFloatValueBetween(buffer, 0.0, 100.0)) { ShowErrorMessage(invMsgFloat, m_txtMemoryMaxInUse); return false; } buffer = m_txtMemoryMaxOnIdle->GetValue(); - if(!IsValidFloatValue(buffer)) { + if(!IsValidFloatValueBetween(buffer, 0.0, 100.0)) { ShowErrorMessage(invMsgFloat, m_txtMemoryMaxOnIdle); return false; } @@ -789,7 +779,8 @@ bool CDlgAdvPreferences::EnsureTabPageVisible(wxTextCtrl* txtCtrl) { /* show an error message and set the focus to the control that caused the error */ void CDlgAdvPreferences::ShowErrorMessage(wxString& message,wxTextCtrl* errorCtrl) { - wxASSERT(this->EnsureTabPageVisible(errorCtrl)); + bool visibleOK = this->EnsureTabPageVisible(errorCtrl); + wxASSERT(visibleOK); // if(message.IsEmpty()){ message = _("invalid input value detected"); @@ -831,6 +822,22 @@ bool CDlgAdvPreferences::IsValidFloatValue(const wxString& value, bool allowNega return true; } +bool CDlgAdvPreferences::IsValidFloatValueBetween(const wxString& value, double minVal, double maxVal){ + for(unsigned int i=0; i < value.Length();i++) { + if(!IsValidFloatChar(value[i])) { + return false; + } + } + //all chars are valid, now what is with the value as a whole ? + double td; + if(!value.ToDouble(&td)) { + return false; + } + if ((td < minVal) || (td > maxVal)) return false; + return true; +} + + /* checks if the value is a valid time */ bool CDlgAdvPreferences::IsValidTimeValue(const wxString& value) { for(unsigned int i=0; i < value.Length();i++) { diff --git a/clientgui/DlgAdvPreferences.h b/clientgui/DlgAdvPreferences.h index 961811f1bf..e448efcad2 100644 --- a/clientgui/DlgAdvPreferences.h +++ b/clientgui/DlgAdvPreferences.h @@ -43,6 +43,7 @@ class CDlgAdvPreferences : public CDlgAdvPreferencesBase { void SetValidators(); bool IsValidFloatChar(const wxChar& ch); bool IsValidFloatValue(const wxString& value, bool allowNegative=false); + bool IsValidFloatValueBetween(const wxString& value, double minVal, double maxVal); bool IsValidTimeChar(const wxChar& ch); bool IsValidTimeValue(const wxString& value); bool IsValidTimeIntervalChar(const wxChar& ch); diff --git a/clientgui/DlgAdvPreferencesBase.cpp b/clientgui/DlgAdvPreferencesBase.cpp index 804cf1747c..f7e1c7dc92 100644 --- a/clientgui/DlgAdvPreferencesBase.cpp +++ b/clientgui/DlgAdvPreferencesBase.cpp @@ -105,7 +105,8 @@ CDlgAdvPreferencesBase::CDlgAdvPreferencesBase( wxWindow* parent, int id, wxStri m_btnOK = new wxButton( m_panelButtons, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 ); m_btnOK->SetToolTip( _("save all values and close the dialog") ); - + m_btnOK->SetDefault(); + buttonSizer->Add( m_btnOK, 0, wxALL, 5 ); m_btnCancel = new wxButton( m_panelButtons, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); @@ -348,7 +349,7 @@ wxPanel* CDlgAdvPreferencesBase::createProcessorTab(wxNotebook* notebook) miscProcGridSizer->Add( m_txtProcUseProcessors, 0, wxALL, 1 ); /*xgettext:no-c-format*/ - m_staticText21 = new wxStaticText( miscProcStaticBox, ID_DEFAULT, _("% of the processors (0 means ignore this setting)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText21 = new wxStaticText( miscProcStaticBox, ID_DEFAULT, _("% of the processors (0 means no restriction)"), wxDefaultPosition, wxDefaultSize, 0 ); miscProcGridSizer->Add( m_staticText21, 0, wxALL, 5 ); m_staticText22 = new wxStaticText( miscProcStaticBox, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); @@ -358,7 +359,7 @@ wxPanel* CDlgAdvPreferencesBase::createProcessorTab(wxNotebook* notebook) miscProcGridSizer->Add( m_txtProcUseCPUTime, 0, wxALL, 1 ); /*xgettext:no-c-format*/ - m_staticText23 = new wxStaticText( miscProcStaticBox, ID_DEFAULT, _("% CPU time"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText23 = new wxStaticText( miscProcStaticBox, ID_DEFAULT, _("% of CPU time (0 means no restriction)"), wxDefaultPosition, wxDefaultSize, 0 ); miscProcGridSizer->Add( m_staticText23, 0, wxALL, 5 ); miscProcBoxSizer->Add( miscProcGridSizer, 0, wxEXPAND, 1 ); @@ -383,7 +384,7 @@ wxPanel* CDlgAdvPreferencesBase::createNetworkTab(wxNotebook* notebook) wxStaticBox* networkGeneralStaticBox = new wxStaticBox( networkTab, -1, _("General options") ); wxStaticBoxSizer* networkGeneralBoxSizer = new wxStaticBoxSizer( networkGeneralStaticBox, wxVERTICAL ); - wxFlexGridSizer* networkGeneralGridSizer = new wxFlexGridSizer(6, 0, 0 ); + wxFlexGridSizer* networkGeneralGridSizer = new wxFlexGridSizer(3, 0, 0 ); networkGeneralGridSizer->SetFlexibleDirection( wxHORIZONTAL ); networkGeneralGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); @@ -395,7 +396,7 @@ wxPanel* CDlgAdvPreferencesBase::createNetworkTab(wxNotebook* notebook) m_txtNetDownloadRate = new wxTextCtrl( networkGeneralStaticBox, ID_TXTNETDOWNLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT ); networkGeneralGridSizer->Add( m_txtNetDownloadRate, 0, wxALL, 1 ); - m_staticText33 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("KBytes/sec."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText33 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("KBytes/second (0 means no restriction)"), wxDefaultPosition, wxDefaultSize, 0 ); networkGeneralGridSizer->Add( m_staticText33, 0, wxALL, 5 ); m_staticText34 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("Maximum upload rate"), wxDefaultPosition, wxDefaultSize, 0 ); @@ -404,7 +405,7 @@ wxPanel* CDlgAdvPreferencesBase::createNetworkTab(wxNotebook* notebook) m_txtNetUploadRate = new wxTextCtrl( networkGeneralStaticBox, ID_TXTNETUPLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT ); networkGeneralGridSizer->Add( m_txtNetUploadRate, 0, wxALL, 1 ); - m_staticText35 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("KBytes/sec."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText35 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("KBytes/second (0 means no restriction)"), wxDefaultPosition, wxDefaultSize, 0 ); networkGeneralGridSizer->Add( m_staticText35, 0, wxALL, 5 ); // buffer sizes @@ -426,7 +427,7 @@ wxPanel* CDlgAdvPreferencesBase::createNetworkTab(wxNotebook* notebook) networkGeneralGridSizer->Add( m_txtNetConnectInterval, 0, wxALL, 1 ); m_staticText31 = new wxStaticText( - networkGeneralStaticBox, ID_DEFAULT, _("days"), wxDefaultPosition, wxDefaultSize, 0 + networkGeneralStaticBox, ID_DEFAULT, _("days (maximum value: 10)"), wxDefaultPosition, wxDefaultSize, 0 ); networkGeneralGridSizer->Add( m_staticText31, 0, wxALL, 5 ); @@ -445,41 +446,37 @@ wxPanel* CDlgAdvPreferencesBase::createNetworkTab(wxNotebook* notebook) ); networkGeneralGridSizer->Add( m_txtNetAdditionalDays, 0, wxALL, 1 ); - m_staticText341 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("days"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText341 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("days (maximum value: 10)"), wxDefaultPosition, wxDefaultSize, 0 ); networkGeneralGridSizer->Add( m_staticText341, 0, wxALL, 5 ); + networkGeneralBoxSizer->Add( networkGeneralGridSizer, 0, wxEXPAND, 1 ); + // long-term quota - m_staticText_daily_xfer1 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("Transfer at most"), wxDefaultPosition, wxDefaultSize, 0 ); - networkGeneralGridSizer->Add( m_staticText_daily_xfer1, 0, wxALL, 5 ); - - m_txt_daily_xfer_limit_mb = new wxTextCtrl( networkGeneralStaticBox, ID_TXTNETDOWNLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT ); - networkGeneralGridSizer->Add( m_txt_daily_xfer_limit_mb, 0, wxALL, 1 ); - wxBoxSizer* networkTransferLimitSizer = new wxBoxSizer( wxHORIZONTAL ); - // Temporarily concatenate strings in order not to break existing localization tables - m_staticText_daily_xfer2 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("Mbytes")+wxT(" ")+_("every"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText_daily_xfer1 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("Transfer at most"), wxDefaultPosition, wxDefaultSize, 0 ); + networkTransferLimitSizer->Add( m_staticText_daily_xfer1, 0, wxALL, 5 ); + + m_txt_daily_xfer_limit_mb = new wxTextCtrl( networkGeneralStaticBox, ID_TXTNETDOWNLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT ); + networkTransferLimitSizer->Add( m_txt_daily_xfer_limit_mb, 0, wxALL, 1 ); + + m_staticText_daily_xfer2 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("MBytes every"), wxDefaultPosition, wxDefaultSize, 0 ); networkTransferLimitSizer->Add( m_staticText_daily_xfer2, 0, wxALL, 5 ); m_txt_daily_xfer_period_days = new wxTextCtrl( networkGeneralStaticBox, ID_TXTNETUPLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT ); networkTransferLimitSizer->Add( m_txt_daily_xfer_period_days, 0, wxALL, 1 ); - m_staticText_daily_xfer4 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("days"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText_daily_xfer4 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("days (0 means no restriction)"), wxDefaultPosition, wxDefaultSize, 0 ); networkTransferLimitSizer->Add( m_staticText_daily_xfer4, 0, wxALL, 5 ); - networkGeneralGridSizer->Add( networkTransferLimitSizer, 0, wxALL, 0 ); - networkGeneralGridSizer->Add( new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 )); - networkGeneralGridSizer->Add( new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 )); - networkGeneralGridSizer->Add( new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 )); + networkGeneralBoxSizer->Add( networkTransferLimitSizer, 0, wxALL, 0 ); m_chkNetSkipImageVerification = new wxCheckBox( networkGeneralStaticBox, ID_CHKNETSKIPIMAGEVERIFICATION, _("Skip image file verification"), wxDefaultPosition, wxDefaultSize, 0 ); m_chkNetSkipImageVerification->SetToolTip( _("check this if your Internet provider modifies image files") ); - networkGeneralGridSizer->Add( m_chkNetSkipImageVerification, 0, wxALL, 5 ); - - networkGeneralBoxSizer->Add( networkGeneralGridSizer, 0, wxEXPAND, 1 ); + networkGeneralBoxSizer->Add( m_chkNetSkipImageVerification, 0, wxALL, 5 ); networkTabSizer->Add( networkGeneralBoxSizer, 0, wxEXPAND, 1 ); @@ -623,7 +620,7 @@ wxPanel* CDlgAdvPreferencesBase::createDiskAndMemoryTab(wxNotebook* notebook) diskUsageGridSizer->Add( m_txtDiskMaxSpace, 0, wxALL, 1 ); - m_staticText41 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("Gigabytes disk space"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText41 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("Gigabytes disk space (0 means no restriction)"), wxDefaultPosition, wxDefaultSize, 0 ); diskUsageGridSizer->Add( m_staticText41, 0, wxALL, 5 ); m_staticText42 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("Leave at least"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );