source: filezilla/trunk/fuentes/src/interface/settings/optionspage_ftpproxy.cpp @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 4 years ago

First release to xenial

File size: 4.6 KB
Line 
1#include <filezilla.h>
2
3#include "../Options.h"
4#include "settingsdialog.h"
5#include "optionspage.h"
6#include "optionspage_ftpproxy.h"
7
8BEGIN_EVENT_TABLE(COptionsPageFtpProxy, COptionsPageFtpProxy::COptionsPage)
9EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_NONE"), COptionsPageFtpProxy::OnProxyTypeChanged)
10EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_USER"), COptionsPageFtpProxy::OnProxyTypeChanged)
11EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_SITE"), COptionsPageFtpProxy::OnProxyTypeChanged)
12EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_OPEN"), COptionsPageFtpProxy::OnProxyTypeChanged)
13EVT_RADIOBUTTON(XRCID("ID_PROXYTYPE_CUSTOM"), COptionsPageFtpProxy::OnProxyTypeChanged)
14EVT_TEXT(XRCID("ID_LOGINSEQUENCE"), COptionsPageFtpProxy::OnLoginSequenceChanged)
15END_EVENT_TABLE()
16
17bool COptionsPageFtpProxy::LoadPage()
18{
19        bool failure = false;
20
21        SetTextFromOption(XRCID("ID_PROXY_HOST"), OPTION_FTP_PROXY_HOST, failure);
22        SetTextFromOption(XRCID("ID_PROXY_USER"), OPTION_FTP_PROXY_USER, failure);
23        SetTextFromOption(XRCID("ID_PROXY_PASS"), OPTION_FTP_PROXY_PASS, failure);
24
25        int type = m_pOptions->GetOptionVal(OPTION_FTP_PROXY_TYPE);
26        switch (type)
27        {
28        default:
29        case 0:
30                SetRCheck(XRCID("ID_PROXYTYPE_NONE"), true, failure);
31                break;
32        case 1:
33                SetRCheck(XRCID("ID_PROXYTYPE_USER"), true, failure);
34                break;
35        case 2:
36                SetRCheck(XRCID("ID_PROXYTYPE_SITE"), true, failure);
37                break;
38        case 3:
39                SetRCheck(XRCID("ID_PROXYTYPE_OPEN"), true, failure);
40                break;
41        case 4:
42                SetRCheck(XRCID("ID_PROXYTYPE_CUSTOM"), true, failure);
43                SetTextFromOption(XRCID("ID_LOGINSEQUENCE"), OPTION_FTP_PROXY_CUSTOMLOGINSEQUENCE, failure);
44                break;
45        }
46
47        if (!failure)
48                SetCtrlState();
49
50        return !failure;
51}
52
53bool COptionsPageFtpProxy::SavePage()
54{
55        SetOptionFromText(XRCID("ID_PROXY_HOST"), OPTION_FTP_PROXY_HOST);
56        SetOptionFromText(XRCID("ID_PROXY_USER"), OPTION_FTP_PROXY_USER);
57        SetOptionFromText(XRCID("ID_PROXY_PASS"), OPTION_FTP_PROXY_PASS);
58
59        int type = 0;
60        if (GetRCheck(XRCID("ID_PROXYTYPE_USER")))
61                type = 1;
62        else if (GetRCheck(XRCID("ID_PROXYTYPE_SITE")))
63                type = 2;
64        else if (GetRCheck(XRCID("ID_PROXYTYPE_OPEN")))
65                type = 3;
66        else if (GetRCheck(XRCID("ID_PROXYTYPE_CUSTOM")))
67        {
68                SetOptionFromText(XRCID("ID_LOGINSEQUENCE"), OPTION_FTP_PROXY_CUSTOMLOGINSEQUENCE);
69                type = 4;
70        }
71        m_pOptions->SetOption(OPTION_FTP_PROXY_TYPE, type);
72
73        return true;
74}
75
76bool COptionsPageFtpProxy::Validate()
77{
78        if (!XRCCTRL(*this, "ID_PROXYTYPE_NONE", wxRadioButton)->GetValue())
79        {
80                wxTextCtrl* pTextCtrl = XRCCTRL(*this, "ID_PROXY_HOST", wxTextCtrl);
81                if (pTextCtrl->GetValue().empty())
82                        return DisplayError(_T("ID_PROXY_HOST"), _("You need to enter a proxy host."));
83        }
84
85        if (XRCCTRL(*this, "ID_PROXYTYPE_CUSTOM", wxRadioButton)->GetValue())
86        {
87                wxTextCtrl* pTextCtrl = XRCCTRL(*this, "ID_LOGINSEQUENCE", wxTextCtrl);
88                if (pTextCtrl->GetValue().empty())
89                        return DisplayError(_T("ID_LOGINSEQUENCE"), _("The custom login sequence cannot be empty."));
90        }
91
92        return true;
93}
94
95void COptionsPageFtpProxy::SetCtrlState()
96{
97        wxTextCtrl* pTextCtrl = XRCCTRL(*this, "ID_LOGINSEQUENCE", wxTextCtrl);
98        if (!pTextCtrl)
99                return;
100
101        if (XRCCTRL(*this, "ID_PROXYTYPE_NONE", wxRadioButton)->GetValue()) {
102                pTextCtrl->ChangeValue(wxString());
103                pTextCtrl->Enable(false);
104                pTextCtrl->SetEditable(false);
105#ifdef __WXMSW__
106                pTextCtrl->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
107#endif
108
109                XRCCTRL(*this, "ID_PROXY_HOST", wxTextCtrl)->Enable(false);
110                XRCCTRL(*this, "ID_PROXY_USER", wxTextCtrl)->Enable(false);
111                XRCCTRL(*this, "ID_PROXY_PASS", wxTextCtrl)->Enable(false);
112                return;
113        }
114
115        pTextCtrl->Enable(true);
116        pTextCtrl->SetEditable(true);
117#ifdef __WXMSW__
118        pTextCtrl->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
119#endif
120
121        XRCCTRL(*this, "ID_PROXY_HOST", wxTextCtrl)->Enable(true);
122        XRCCTRL(*this, "ID_PROXY_USER", wxTextCtrl)->Enable(true);
123        XRCCTRL(*this, "ID_PROXY_PASS", wxTextCtrl)->Enable(true);
124
125        if (XRCCTRL(*this, "ID_PROXYTYPE_CUSTOM", wxRadioButton)->GetValue())
126                return;
127
128        wxString loginSequence = _T("USER %s\nPASS %w\n");
129
130        if (XRCCTRL(*this, "ID_PROXYTYPE_USER", wxRadioButton)->GetValue())
131                loginSequence += _T("USER %u@%h\n");
132        else
133        {
134                if (XRCCTRL(*this, "ID_PROXYTYPE_SITE", wxRadioButton)->GetValue())
135                        loginSequence += _T("SITE %h\n");
136                else
137                        loginSequence += _T("OPEN %h\n");
138                loginSequence += _T("USER %u\n");
139        }
140
141        loginSequence += _T("PASS %p\nACCT %a");
142
143        pTextCtrl->ChangeValue(loginSequence);
144}
145
146void COptionsPageFtpProxy::OnProxyTypeChanged(wxCommandEvent& event)
147{
148        SetCtrlState();
149}
150
151void COptionsPageFtpProxy::OnLoginSequenceChanged(wxCommandEvent& event)
152{
153        XRCCTRL(*this, "ID_PROXYTYPE_CUSTOM", wxRadioButton)->SetValue(true);
154}
Note: See TracBrowser for help on using the repository browser.