#include "FileZilla.h"
#include "Options.h"
#include "settingsdialog.h"
#include "optionspage.h"
#include "optionspage_connection_active.h"
BEGIN_EVENT_TABLE(COptionsPageConnectionActive, COptionsPage)
EVT_CHECKBOX(XRCID("ID_LIMITPORTS"), COptionsPageConnectionActive::OnRadioOrCheckEvent)
EVT_RADIOBUTTON(XRCID("ID_ACTIVEMODE1"), COptionsPageConnectionActive::OnRadioOrCheckEvent)
EVT_RADIOBUTTON(XRCID("ID_ACTIVEMODE2"), COptionsPageConnectionActive::OnRadioOrCheckEvent)
EVT_RADIOBUTTON(XRCID("ID_ACTIVEMODE3"), COptionsPageConnectionActive::OnRadioOrCheckEvent)
END_EVENT_TABLE();
bool COptionsPageConnectionActive::LoadPage()
{
bool failure = false;
SetCheck(XRCID("ID_LIMITPORTS"), m_pOptions->GetOptionVal(OPTION_LIMITPORTS) != 0, failure);
SetTextFromOption(XRCID("ID_LOWESTPORT"), OPTION_LIMITPORTS_LOW, failure);
SetTextFromOption(XRCID("ID_HIGHESTPORT"), OPTION_LIMITPORTS_HIGH, failure);
SetRCheck(XRCID("ID_ACTIVEMODE1"), m_pOptions->GetOptionVal(OPTION_EXTERNALIPMODE) == 0, failure);
SetRCheck(XRCID("ID_ACTIVEMODE2"), m_pOptions->GetOptionVal(OPTION_EXTERNALIPMODE) == 1, failure);
SetRCheck(XRCID("ID_ACTIVEMODE3"), m_pOptions->GetOptionVal(OPTION_EXTERNALIPMODE) == 2, failure);
SetTextFromOption(XRCID("ID_ACTIVEIP"), OPTION_EXTERNALIP, failure);
SetTextFromOption(XRCID("ID_ACTIVERESOLVER"), OPTION_EXTERNALIPRESOLVER, failure);
SetCheck(XRCID("ID_NOEXTERNALONLOCAL"), m_pOptions->GetOptionVal(OPTION_NOEXTERNALONLOCAL) != 0, failure);
if (!failure)
SetCtrlState();
return !failure;
}
bool COptionsPageConnectionActive::SavePage()
{
m_pOptions->SetOption(OPTION_LIMITPORTS, GetCheck(XRCID("ID_LIMITPORTS")) ? 1 : 0);
long tmp;
GetText(XRCID("ID_LOWESTPORT")).ToLong(&tmp); m_pOptions->SetOption(OPTION_LIMITPORTS_LOW, tmp);
GetText(XRCID("ID_HIGHESTPORT")).ToLong(&tmp); m_pOptions->SetOption(OPTION_LIMITPORTS_HIGH, tmp);
int mode;
if (XRCCTRL(*this, "ID_ACTIVEMODE1", wxRadioButton)->GetValue())
mode = 0;
else
mode = XRCCTRL(*this, "ID_ACTIVEMODE2", wxRadioButton)->GetValue() ? 1 : 2;
m_pOptions->SetOption(OPTION_EXTERNALIPMODE, mode);
if (mode == 1)
m_pOptions->SetOption(OPTION_EXTERNALIP, XRCCTRL(*this, "ID_ACTIVEIP", wxTextCtrl)->GetValue());
else if (mode == 2)
m_pOptions->SetOption(OPTION_EXTERNALIPRESOLVER, XRCCTRL(*this, "ID_ACTIVERESOLVER", wxTextCtrl)->GetValue());
m_pOptions->SetOption(OPTION_NOEXTERNALONLOCAL, XRCCTRL(*this, "ID_NOEXTERNALONLOCAL", wxCheckBox)->GetValue());
return true;
}
bool COptionsPageConnectionActive::Validate()
{
// Validate port limiting settings
if (GetCheck(XRCID("ID_LIMITPORTS")))
{
wxTextCtrl* pLow = XRCCTRL(*this, "ID_LOWESTPORT", wxTextCtrl);
wxASSERT(pLow);
long low;
if (!pLow->GetValue().ToLong(&low) || low < 1024 || low > 65535)
{
pLow->SetFocus();
wxMessageBox(_("Lowest available port has to be a number between 1024 and 65535."), validationFailed, wxICON_EXCLAMATION, this);
return false;
}
wxTextCtrl* pHigh = XRCCTRL(*this, "ID_LOWESTPORT", wxTextCtrl);
wxASSERT(pHigh);
long high;
if (!pHigh->GetValue().ToLong(&high) || high < 1024 || high > 65535)
{
pHigh->SetFocus();
wxMessageBox(_("Highest available port has to be a number between 1024 and 65535."), validationFailed, wxICON_EXCLAMATION, this);
return false;
}
if (low > high)
{
pLow->SetFocus();
wxMessageBox(_("The lowest available port has to be less or equal than the highest available port."), validationFailed, wxICON_EXCLAMATION, this);
return false;
}
}
int mode;
if (XRCCTRL(*this, "ID_ACTIVEMODE1", wxRadioButton)->GetValue())
mode = 0;
else
mode = XRCCTRL(*this, "ID_ACTIVEMODE2", wxRadioButton)->GetValue() ? 1 : 2;
if (mode == 1)
{
wxTextCtrl* pActiveIP = XRCCTRL(*this, "ID_ACTIVEIP", wxTextCtrl);
if (!IsIpAddress(pActiveIP->GetValue()))
{
pActiveIP->SetFocus();
wxMessageBox(_("You have to enter a valid IP address."));
return false;
}
}
return true;
}
void COptionsPageConnectionActive::SetCtrlState()
{
FindWindow(XRCID("ID_LOWESTPORT"))->Enable(GetCheck(XRCID("ID_LIMITPORTS")));
FindWindow(XRCID("ID_HIGHESTPORT"))->Enable(GetCheck(XRCID("ID_LIMITPORTS")));
int mode;
if (XRCCTRL(*this, "ID_ACTIVEMODE1", wxRadioButton)->GetValue())
mode = 0;
else
mode = XRCCTRL(*this, "ID_ACTIVEMODE2", wxRadioButton)->GetValue() ? 1 : 2;
FindWindow(XRCID("ID_ACTIVEIP"))->Enable(mode == 1);
FindWindow(XRCID("ID_ACTIVERESOLVER"))->Enable(mode == 2);
FindWindow(XRCID("ID_NOEXTERNALONLOCAL"))->Enable(mode != 0);
}
void COptionsPageConnectionActive::OnRadioOrCheckEvent(wxCommandEvent& event)
{
SetCtrlState();
}
syntax highlighted by Code2HTML, v. 0.9.1