#include #include "../Options.h" #include "settingsdialog.h" #include "optionspage.h" #include "optionspage_logging.h" BEGIN_EVENT_TABLE(COptionsPageLogging, COptionsPage) EVT_BUTTON(XRCID("ID_BROWSE"), COptionsPageLogging::OnBrowse) EVT_CHECKBOX(XRCID("ID_LOGFILE"), COptionsPageLogging::OnCheck) EVT_CHECKBOX(XRCID("ID_DOLIMIT"), COptionsPageLogging::OnCheck) END_EVENT_TABLE() bool COptionsPageLogging::LoadPage() { bool failure = false; SetCheck(XRCID("ID_TIMESTAMPS"), m_pOptions->GetOptionVal(OPTION_MESSAGELOG_TIMESTAMP) ? true : false, failure); const wxString filename = m_pOptions->GetOption(OPTION_LOGGING_FILE); SetCheck(XRCID("ID_LOGFILE"), !filename.empty(), failure); SetText(XRCID("ID_FILENAME"), filename, failure); int limit = m_pOptions->GetOptionVal(OPTION_LOGGING_FILE_SIZELIMIT); if (limit < 0 || limit > 2000) limit = 0; SetCheck(XRCID("ID_DOLIMIT"), limit > 0, failure); if (!failure) XRCCTRL(*this, "ID_LIMIT", wxTextCtrl)->SetMaxLength(4); wxString v; if (limit > 0) v = wxString::Format(_T("%d"), limit); SetText(XRCID("ID_LIMIT"), v, failure); if (!failure) SetCtrlState(); return !failure; } bool COptionsPageLogging::SavePage() { m_pOptions->SetOption(OPTION_MESSAGELOG_TIMESTAMP, GetCheck(XRCID("ID_TIMESTAMPS")) ? 1 : 0); wxString filename; if (GetCheck(XRCID("ID_LOGFILE"))) filename = GetText(XRCID("ID_FILENAME")); m_pOptions->SetOption(OPTION_LOGGING_FILE, filename); if (GetCheck(XRCID("ID_DOLIMIT"))) SetOptionFromText(XRCID("ID_LIMIT"), OPTION_LOGGING_FILE_SIZELIMIT); else m_pOptions->SetOption(OPTION_LOGGING_FILE_SIZELIMIT, 0); return true; } bool COptionsPageLogging::Validate() { bool log_to_file = GetCheck(XRCID("ID_LOGFILE")); bool limit = GetCheck(XRCID("ID_DOLIMIT")); if (log_to_file) { wxTextCtrl *pFileName = XRCCTRL(*this, "ID_FILENAME", wxTextCtrl); if (pFileName->GetValue().empty()) return DisplayError(pFileName, _("You need to enter a name for the log file.")); wxFileName fn(pFileName->GetValue()); if (!fn.IsOk() || !fn.DirExists()) return DisplayError(pFileName, _("Directory containing the logfile does not exist or filename is invalid.")); if (limit) { unsigned long v; wxTextCtrl *pLimit = XRCCTRL(*this, "ID_LIMIT", wxTextCtrl); if (!pLimit->GetValue().ToULong(&v) || v < 1 || v > 2000) return DisplayError(pLimit, _("The limit needs to be between 1 and 2000 MiB")); } } return true; } void COptionsPageLogging::SetCtrlState() { bool log_to_file = GetCheck(XRCID("ID_LOGFILE")); bool limit = GetCheck(XRCID("ID_DOLIMIT")); XRCCTRL(*this, "ID_FILENAME", wxTextCtrl)->Enable(log_to_file); XRCCTRL(*this, "ID_BROWSE", wxButton)->Enable(log_to_file); XRCCTRL(*this, "ID_DOLIMIT", wxCheckBox)->Enable(log_to_file); XRCCTRL(*this, "ID_LIMIT", wxTextCtrl)->Enable(log_to_file && limit); } void COptionsPageLogging::OnBrowse(wxCommandEvent&) { wxFileDialog dlg(this, _("Log file"), wxString(), _T("filezilla.log"), _T("Log files (*.log)|*.log"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if (dlg.ShowModal() != wxID_OK) return; XRCCTRL(*this, "ID_FILENAME", wxTextCtrl)->ChangeValue(dlg.GetPath()); } void COptionsPageLogging::OnCheck(wxCommandEvent&) { SetCtrlState(); }