source: filezilla/trunk/fuentes/src/interface/manual_transfer.cpp @ 3185

Last change on this file since 3185 was 3185, checked in by jrpelegrina, 3 years ago

Update new version: 3.15.02

File size: 17.2 KB
Line 
1#include <filezilla.h>
2#include "manual_transfer.h"
3#include "auto_ascii_files.h"
4#include "state.h"
5#include "Options.h"
6#include "sitemanager.h"
7#include "queue.h"
8#include "QueueView.h"
9#include "xrc_helper.h"
10
11#include <libfilezilla/local_filesys.hpp>
12
13BEGIN_EVENT_TABLE(CManualTransfer, wxDialogEx)
14EVT_TEXT(XRCID("ID_LOCALFILE"), CManualTransfer::OnLocalChanged)
15EVT_TEXT(XRCID("ID_REMOTEFILE"), CManualTransfer::OnRemoteChanged)
16EVT_BUTTON(XRCID("ID_BROWSE"), CManualTransfer::OnLocalBrowse)
17EVT_RADIOBUTTON(XRCID("ID_DOWNLOAD"), CManualTransfer::OnDirection)
18EVT_RADIOBUTTON(XRCID("ID_UPLOAD"), CManualTransfer::OnDirection)
19EVT_RADIOBUTTON(XRCID("ID_SERVER_CURRENT"), CManualTransfer::OnServerTypeChanged)
20EVT_RADIOBUTTON(XRCID("ID_SERVER_SITE"), CManualTransfer::OnServerTypeChanged)
21EVT_RADIOBUTTON(XRCID("ID_SERVER_CUSTOM"), CManualTransfer::OnServerTypeChanged)
22EVT_BUTTON(XRCID("wxID_OK"), CManualTransfer::OnOK)
23EVT_BUTTON(XRCID("ID_SERVER_SITE_SELECT"), CManualTransfer::OnSelectSite)
24EVT_MENU(wxID_ANY, CManualTransfer::OnSelectedSite)
25EVT_CHOICE(XRCID("ID_LOGONTYPE"), CManualTransfer::OnLogontypeSelChanged)
26END_EVENT_TABLE()
27
28CManualTransfer::CManualTransfer(CQueueView* pQueueView)
29        : m_local_file_exists()
30        , m_pServer()
31        , m_pLastSite()
32        , m_pState()
33        , m_pQueueView(pQueueView)
34{
35}
36
37CManualTransfer::~CManualTransfer()
38{
39        delete m_pServer;
40        delete m_pLastSite;
41}
42
43void CManualTransfer::Run(wxWindow* pParent, CState* pState)
44{
45        if (!Load(pParent, _T("ID_MANUALTRANSFER")))
46                return;
47
48        m_pState = pState;
49
50        wxChoice *pProtocol = XRCCTRL(*this, "ID_PROTOCOL", wxChoice);
51        if (pProtocol) {
52                pProtocol->Append(CServer::GetProtocolName(FTP));
53                pProtocol->Append(CServer::GetProtocolName(SFTP));
54                pProtocol->Append(CServer::GetProtocolName(FTPS));
55                pProtocol->Append(CServer::GetProtocolName(FTPES));
56                pProtocol->Append(CServer::GetProtocolName(INSECURE_FTP));
57        }
58
59        wxChoice* pChoice = XRCCTRL(*this, "ID_LOGONTYPE", wxChoice);
60        wxASSERT(pChoice);
61        for (int i = 0; i < LOGONTYPE_MAX; ++i)
62                pChoice->Append(CServer::GetNameFromLogonType((enum LogonType)i));
63
64        if (m_pState->GetServer()) {
65                m_pServer = new CServer(*m_pState->GetServer());
66                XRCCTRL(*this, "ID_SERVER_CURRENT", wxRadioButton)->SetValue(true);
67                DisplayServer();
68        }
69        else {
70                XRCCTRL(*this, "ID_SERVER_CUSTOM", wxRadioButton)->SetValue(true);
71                XRCCTRL(*this, "ID_SERVER_CURRENT", wxRadioButton)->Disable();
72                DisplayServer();
73        }
74
75        wxString localPath = m_pState->GetLocalDir().GetPath();
76        XRCCTRL(*this, "ID_LOCALFILE", wxTextCtrl)->ChangeValue(localPath);
77
78        XRCCTRL(*this, "ID_REMOTEPATH", wxTextCtrl)->ChangeValue(m_pState->GetRemotePath().GetPath());
79
80        SetControlState();
81
82        switch(COptions::Get()->GetOptionVal(OPTION_ASCIIBINARY))
83        {
84        case 1:
85                XRCCTRL(*this, "ID_TYPE_ASCII", wxRadioButton)->SetValue(true);
86                break;
87        case 2:
88                XRCCTRL(*this, "ID_TYPE_BINARY", wxRadioButton)->SetValue(true);
89                break;
90        default:
91                XRCCTRL(*this, "ID_TYPE_AUTO", wxRadioButton)->SetValue(true);
92                break;
93        }
94
95        wxSize minSize = GetSizer()->GetMinSize();
96        SetClientSize(minSize);
97
98        ShowModal();
99}
100
101void CManualTransfer::SetControlState()
102{
103        SetServerState();
104        SetAutoAsciiState();
105
106        XRCCTRL(*this, "ID_SERVER_SITE_SELECT", wxButton)->Enable(XRCCTRL(*this, "ID_SERVER_SITE", wxRadioButton)->GetValue());
107}
108
109void CManualTransfer::SetAutoAsciiState()
110{
111        if (XRCCTRL(*this, "ID_DOWNLOAD", wxRadioButton)->GetValue()) {
112                wxString remote_file = XRCCTRL(*this, "ID_REMOTEFILE", wxTextCtrl)->GetValue();
113                if (remote_file.empty()) {
114                        XRCCTRL(*this, "ID_TYPE_AUTO_ASCII", wxStaticText)->Hide();
115                        XRCCTRL(*this, "ID_TYPE_AUTO_BINARY", wxStaticText)->Hide();
116                }
117                else if (CAutoAsciiFiles::TransferLocalAsAscii(remote_file, m_pServer ? m_pServer->GetType() : UNIX)) {
118                        XRCCTRL(*this, "ID_TYPE_AUTO_ASCII", wxStaticText)->Show();
119                        XRCCTRL(*this, "ID_TYPE_AUTO_BINARY", wxStaticText)->Hide();
120                }
121                else {
122                        XRCCTRL(*this, "ID_TYPE_AUTO_ASCII", wxStaticText)->Hide();
123                        XRCCTRL(*this, "ID_TYPE_AUTO_BINARY", wxStaticText)->Show();
124                }
125        }
126        else {
127                wxString local_file = XRCCTRL(*this, "ID_LOCALFILE", wxTextCtrl)->GetValue();
128                if (!m_local_file_exists) {
129                        XRCCTRL(*this, "ID_TYPE_AUTO_ASCII", wxStaticText)->Hide();
130                        XRCCTRL(*this, "ID_TYPE_AUTO_BINARY", wxStaticText)->Hide();
131                }
132                else if (CAutoAsciiFiles::TransferLocalAsAscii(local_file, m_pServer ? m_pServer->GetType() : UNIX)) {
133                        XRCCTRL(*this, "ID_TYPE_AUTO_ASCII", wxStaticText)->Show();
134                        XRCCTRL(*this, "ID_TYPE_AUTO_BINARY", wxStaticText)->Hide();
135                }
136                else {
137                        XRCCTRL(*this, "ID_TYPE_AUTO_ASCII", wxStaticText)->Hide();
138                        XRCCTRL(*this, "ID_TYPE_AUTO_BINARY", wxStaticText)->Show();
139                }
140        }
141        XRCCTRL(*this, "ID_TYPE_AUTO_ASCII", wxStaticText)->GetContainingSizer()->Layout();
142}
143
144void CManualTransfer::SetServerState()
145{
146        bool server_enabled = XRCCTRL(*this, "ID_SERVER_CUSTOM", wxRadioButton)->GetValue();
147        XRCCTRL(*this, "ID_HOST", wxWindow)->Enable(server_enabled);
148        XRCCTRL(*this, "ID_PORT", wxWindow)->Enable(server_enabled);
149        XRCCTRL(*this, "ID_PROTOCOL", wxWindow)->Enable(server_enabled);
150        XRCCTRL(*this, "ID_LOGONTYPE", wxWindow)->Enable(server_enabled);
151
152        wxString logon_type = XRCCTRL(*this, "ID_LOGONTYPE", wxChoice)->GetStringSelection();
153        XRCCTRL(*this, "ID_USER", wxTextCtrl)->Enable(server_enabled && logon_type != _("Anonymous"));
154        XRCCTRL(*this, "ID_PASS", wxTextCtrl)->Enable(server_enabled && (logon_type == _("Normal") || logon_type == _("Account")));
155        XRCCTRL(*this, "ID_ACCOUNT", wxTextCtrl)->Enable(server_enabled && logon_type == _("Account"));
156}
157
158void CManualTransfer::DisplayServer()
159{
160        if (m_pServer)
161        {
162                XRCCTRL(*this, "ID_HOST", wxTextCtrl)->ChangeValue(m_pServer->FormatHost(true));
163                unsigned int port = m_pServer->GetPort();
164
165                if (port != CServer::GetDefaultPort(m_pServer->GetProtocol()))
166                        XRCCTRL(*this, "ID_PORT", wxTextCtrl)->ChangeValue(wxString::Format(_T("%d"), port));
167                else
168                        XRCCTRL(*this, "ID_PORT", wxTextCtrl)->ChangeValue(_T(""));
169
170                const wxString& protocolName = CServer::GetProtocolName(m_pServer->GetProtocol());
171                if (!protocolName.empty())
172                        XRCCTRL(*this, "ID_PROTOCOL", wxChoice)->SetStringSelection(protocolName);
173                else
174                        XRCCTRL(*this, "ID_PROTOCOL", wxChoice)->SetStringSelection(CServer::GetProtocolName(FTP));
175
176                switch (m_pServer->GetLogonType())
177                {
178                case NORMAL:
179                        XRCCTRL(*this, "ID_LOGONTYPE", wxChoice)->SetStringSelection(_("Normal"));
180                        break;
181                case ASK:
182                        XRCCTRL(*this, "ID_LOGONTYPE", wxChoice)->SetStringSelection(_("Ask for password"));
183                        break;
184                case INTERACTIVE:
185                        XRCCTRL(*this, "ID_LOGONTYPE", wxChoice)->SetStringSelection(_("Interactive"));
186                        break;
187                case ACCOUNT:
188                        XRCCTRL(*this, "ID_LOGONTYPE", wxChoice)->SetStringSelection(_("Account"));
189                        break;
190                default:
191                        XRCCTRL(*this, "ID_LOGONTYPE", wxChoice)->SetStringSelection(_("Anonymous"));
192                        break;
193                }
194
195                XRCCTRL(*this, "ID_USER", wxTextCtrl)->ChangeValue(m_pServer->GetUser());
196                XRCCTRL(*this, "ID_ACCOUNT", wxTextCtrl)->ChangeValue(m_pServer->GetAccount());
197                XRCCTRL(*this, "ID_PASS", wxTextCtrl)->ChangeValue(m_pServer->GetPass());
198        }
199        else
200        {
201                XRCCTRL(*this, "ID_HOST", wxTextCtrl)->ChangeValue(_T(""));
202                XRCCTRL(*this, "ID_PORT", wxTextCtrl)->ChangeValue(_T(""));
203                XRCCTRL(*this, "ID_PROTOCOL", wxChoice)->SetStringSelection(CServer::GetProtocolName(FTP));
204                XRCCTRL(*this, "ID_USER", wxTextCtrl)->Enable(false);
205                XRCCTRL(*this, "ID_PASS", wxTextCtrl)->Enable(false);
206                XRCCTRL(*this, "ID_ACCOUNT", wxTextCtrl)->Enable(false);
207                XRCCTRL(*this, "ID_LOGONTYPE", wxChoice)->SetStringSelection(_("Anonymous"));
208
209                XRCCTRL(*this, "ID_USER", wxTextCtrl)->ChangeValue(_T(""));
210                XRCCTRL(*this, "ID_ACCOUNT", wxTextCtrl)->ChangeValue(_T(""));
211                XRCCTRL(*this, "ID_PASS", wxTextCtrl)->ChangeValue(_T(""));
212        }
213}
214
215void CManualTransfer::OnLocalChanged(wxCommandEvent&)
216{
217        if (XRCCTRL(*this, "ID_DOWNLOAD", wxRadioButton)->GetValue())
218                return;
219
220        wxString file = XRCCTRL(*this, "ID_LOCALFILE", wxTextCtrl)->GetValue();
221
222        m_local_file_exists = fz::local_filesys::get_file_type(fz::to_native(file)) == fz::local_filesys::file;
223
224        SetAutoAsciiState();
225}
226
227void CManualTransfer::OnRemoteChanged(wxCommandEvent&)
228{
229        SetAutoAsciiState();
230}
231
232void CManualTransfer::OnLocalBrowse(wxCommandEvent&)
233{
234        int flags;
235        wxString title;
236        if (xrc_call(*this, "ID_DOWNLOAD", &wxRadioButton::GetValue)) {
237                flags = wxFD_SAVE | wxFD_OVERWRITE_PROMPT;
238                title = _("Select target filename");
239        }
240        else {
241                flags = wxFD_OPEN | wxFD_FILE_MUST_EXIST;
242                title = _("Select file to upload");
243        }
244
245        wxFileDialog dlg(this, title, _T(""), _T(""), _T("*.*"), flags);
246        int res = dlg.ShowModal();
247
248        if (res != wxID_OK)
249                return;
250
251        // SetValue on purpose
252        xrc_call(*this, "ID_LOCALFILE", &wxTextCtrl::SetValue, dlg.GetPath());
253}
254
255void CManualTransfer::OnDirection(wxCommandEvent& event)
256{
257        if (xrc_call(*this, "ID_DOWNLOAD", &wxRadioButton::GetValue))
258                SetAutoAsciiState();
259        else {
260                // Need to check for file existence
261                OnLocalChanged(event);
262        }
263}
264
265void CManualTransfer::OnServerTypeChanged(wxCommandEvent& event)
266{
267        if (event.GetId() == XRCID("ID_SERVER_CURRENT")) {
268                delete m_pServer;
269                if (m_pState->GetServer())
270                        m_pServer = new CServer(*m_pState->GetServer());
271                else
272                        m_pServer = 0;
273        }
274        else if (event.GetId() == XRCID("ID_SERVER_SITE")) {
275                delete m_pServer;
276                if (m_pLastSite)
277                        m_pServer = new CServer(*m_pLastSite);
278                else
279                        m_pServer = 0;
280
281        }
282        xrc_call(*this, "ID_SERVER_SITE_SELECT", &wxButton::Enable, event.GetId() == XRCID("ID_SERVER_SITE"));
283        DisplayServer();
284        SetServerState();
285}
286
287void CManualTransfer::OnOK(wxCommandEvent&)
288{
289        if (!UpdateServer())
290                return;
291
292        bool download = xrc_call(*this, "ID_DOWNLOAD", &wxRadioButton::GetValue);
293
294        bool start = xrc_call(*this, "ID_START", &wxCheckBox::GetValue);
295
296        if (!m_pServer) {
297                wxMessageBoxEx(_("You need to specify a server."), _("Manual transfer"), wxICON_EXCLAMATION);
298                return;
299        }
300
301        wxString local_file = xrc_call(*this, "ID_LOCALFILE", &wxTextCtrl::GetValue);
302        if (local_file.empty()) {
303                wxMessageBoxEx(_("You need to specify a local file."), _("Manual transfer"), wxICON_EXCLAMATION);
304                return;
305        }
306
307        fz::local_filesys::type type = fz::local_filesys::get_file_type(fz::to_native(local_file));
308        if (type == fz::local_filesys::dir) {
309                wxMessageBoxEx(_("Local file is a directory instead of a regular file."), _("Manual transfer"), wxICON_EXCLAMATION);
310                return;
311        }
312        if (!download && type != fz::local_filesys::file && start) {
313                wxMessageBoxEx(_("Local file does not exist."), _("Manual transfer"), wxICON_EXCLAMATION);
314                return;
315        }
316
317        wxString remote_file = xrc_call(*this, "ID_REMOTEFILE", &wxTextCtrl::GetValue);
318
319        if (remote_file.empty()) {
320                wxMessageBoxEx(_("You need to specify a remote file."), _("Manual transfer"), wxICON_EXCLAMATION);
321                return;
322        }
323
324        wxString remote_path_str = xrc_call(*this, "ID_REMOTEPATH", &wxTextCtrl::GetValue);
325        if (remote_path_str.empty()) {
326                wxMessageBoxEx(_("You need to specify a remote path."), _("Manual transfer"), wxICON_EXCLAMATION);
327                return;
328        }
329
330        CServerPath path(remote_path_str, m_pServer->GetType());
331        if (path.empty()) {
332                wxMessageBoxEx(_("Remote path could not be parsed."), _("Manual transfer"), wxICON_EXCLAMATION);
333                return;
334        }
335
336        int old_data_type = COptions::Get()->GetOptionVal(OPTION_ASCIIBINARY);
337
338        // Set data type for the file to add
339        if (xrc_call(*this, "ID_TYPE_ASCII", &wxRadioButton::GetValue))
340                COptions::Get()->SetOption(OPTION_ASCIIBINARY, 1);
341        else if (xrc_call(*this, "ID_TYPE_BINARY", &wxRadioButton::GetValue))
342                COptions::Get()->SetOption(OPTION_ASCIIBINARY, 2);
343        else
344                COptions::Get()->SetOption(OPTION_ASCIIBINARY, 0);
345
346        wxString name;
347        CLocalPath localPath(local_file, &name);
348
349        if (name.empty()) {
350                wxMessageBoxEx(_("Local file is not a valid filename."), _("Manual transfer"), wxICON_EXCLAMATION);
351                return;
352        }
353
354        m_pQueueView->QueueFile(!start, download,
355                download ? remote_file : name,
356                (remote_file != name) ? (download ? name : remote_file) : wxString(),
357                localPath, path, *m_pServer, -1);
358
359        // Restore old data type
360        COptions::Get()->SetOption(OPTION_ASCIIBINARY, old_data_type);
361
362        m_pQueueView->QueueFile_Finish(start);
363
364        EndModal(wxID_OK);
365}
366
367bool CManualTransfer::UpdateServer()
368{
369        if (!xrc_call(*this, "ID_SERVER_CUSTOM", &wxRadioButton::GetValue))
370                return true;
371
372        if (!VerifyServer())
373                return false;
374
375        CServer server;
376
377        unsigned long port;
378        if (!xrc_call(*this, "ID_PORT", &wxTextCtrl::GetValue).ToULong(&port)) {
379                return false;
380        }
381
382        wxString host = xrc_call(*this, "ID_HOST", &wxTextCtrl::GetValue);
383        // SetHost does not accept URL syntax
384        if (!host.empty() && host[0] == '[') {
385                host.RemoveLast();
386                host = host.Mid(1);
387        }
388        server.SetHost(host, port);
389
390        const wxString& protocolName = xrc_call(*this, "ID_PROTOCOL", &wxChoice::GetStringSelection);
391        const enum ServerProtocol protocol = CServer::GetProtocolFromName(protocolName);
392        if (protocol != UNKNOWN)
393                server.SetProtocol(protocol);
394        else
395                server.SetProtocol(FTP);
396
397        enum LogonType logon_type = CServer::GetLogonTypeFromName(xrc_call(*this, "ID_LOGONTYPE", &wxChoice::GetStringSelection));
398        server.SetLogonType(logon_type);
399
400        server.SetUser(xrc_call(*this, "ID_USER", &wxTextCtrl::GetValue),
401                xrc_call(*this, "ID_PASS", &wxTextCtrl::GetValue));
402        server.SetAccount(xrc_call(*this, "ID_ACCOUNT", &wxTextCtrl::GetValue));
403
404        delete m_pServer;
405        m_pServer = new CServer(server);
406
407        return true;
408}
409
410bool CManualTransfer::VerifyServer()
411{
412        const wxString& host = xrc_call(*this, "ID_HOST", &wxTextCtrl::GetValue);
413        if (host.empty()) {
414                xrc_call(*this, "ID_HOST", &wxTextCtrl::SetFocus);
415                wxMessageBoxEx(_("You have to enter a hostname."));
416                return false;
417        }
418
419        enum LogonType logon_type = CServer::GetLogonTypeFromName(xrc_call(*this, "ID_LOGONTYPE", &wxChoice::GetStringSelection));
420
421        wxString protocolName = xrc_call(*this, "ID_PROTOCOL", &wxChoice::GetStringSelection);
422        enum ServerProtocol protocol = CServer::GetProtocolFromName(protocolName);
423        if (protocol == SFTP &&
424                logon_type == ACCOUNT)
425        {
426                xrc_call(*this, "ID_LOGONTYPE", &wxChoice::SetFocus);
427                wxMessageBoxEx(_("'Account' logontype not supported by selected protocol"));
428                return false;
429        }
430
431        if (COptions::Get()->GetOptionVal(OPTION_DEFAULT_KIOSKMODE) != 0 &&
432                (logon_type == ACCOUNT || logon_type == NORMAL))
433        {
434                xrc_call(*this, "ID_LOGONTYPE", &wxChoice::SetFocus);
435                wxString msg;
436                if (COptions::Get()->OptionFromFzDefaultsXml(OPTION_DEFAULT_KIOSKMODE))
437                        msg = _("Saving of password has been disabled by your system administrator.");
438                else
439                        msg = _("Saving of passwords has been disabled by you.");
440                msg += _T("\n");
441                msg += _("'Normal' and 'Account' logontypes are not available, using 'Ask for password' instead.");
442                xrc_call(*this, "ID_LOGONTYPE", &wxChoice::SetStringSelection, CServer::GetNameFromLogonType(ASK));
443                xrc_call(*this, "ID_PASS", &wxTextCtrl::ChangeValue, _T(""));
444                logon_type = ASK;
445                wxMessageBoxEx(msg, _("Cannot remember password"), wxICON_INFORMATION, this);
446        }
447
448        CServer server;
449
450        // Set selected type
451        server.SetLogonType(logon_type);
452
453        if (protocol != UNKNOWN)
454                server.SetProtocol(protocol);
455
456        CServerPath path;
457        wxString error;
458        if (!server.ParseUrl(host, xrc_call(*this, "ID_PORT", &wxTextCtrl::GetValue), wxString(), wxString(), error, path)) {
459                xrc_call(*this, "ID_HOST", &wxTextCtrl::SetFocus);
460                wxMessageBoxEx(error);
461                return false;
462        }
463
464        xrc_call(*this, "ID_HOST", &wxTextCtrl::ChangeValue, server.FormatHost(true));
465        xrc_call(*this, "ID_PORT", &wxTextCtrl::ChangeValue, wxString::Format(_T("%d"), server.GetPort()));
466
467        protocolName = CServer::GetProtocolName(server.GetProtocol());
468        if (protocolName.empty())
469                CServer::GetProtocolName(FTP);
470        xrc_call(*this, "ID_PROTOCOL", &wxChoice::SetStringSelection, protocolName);
471
472        // Require username for non-anonymous, non-ask logon type
473        const wxString user = xrc_call(*this, "ID_USER", &wxTextCtrl::GetValue);
474        if (logon_type != ANONYMOUS &&
475                logon_type != ASK &&
476                logon_type != INTERACTIVE &&
477                user.empty())
478        {
479                xrc_call(*this, "ID_USER", &wxTextCtrl::SetFocus);
480                wxMessageBoxEx(_("You have to specify a user name"));
481                return false;
482        }
483
484        // We don't allow username of only spaces, confuses both users and XML libraries
485        if (!user.empty()) {
486                bool space_only = true;
487                for (unsigned int i = 0; i < user.Len(); ++i) {
488                        if (user[i] != ' ') {
489                                space_only = false;
490                                break;
491                        }
492                }
493                if (space_only) {
494                        xrc_call(*this, "ID_USER", &wxTextCtrl::SetFocus);
495                        wxMessageBoxEx(_("Username cannot be a series of spaces"));
496                        return false;
497                }
498
499        }
500
501        // Require account for account logon type
502        if (logon_type == ACCOUNT &&
503                xrc_call(*this, "ID_ACCOUNT", &wxTextCtrl::GetValue).empty())
504        {
505                xrc_call(*this, "ID_ACCOUNT", &wxTextCtrl::SetFocus);
506                wxMessageBoxEx(_("You have to enter an account name"));
507                return false;
508        }
509
510        return true;
511}
512
513void CManualTransfer::OnSelectSite(wxCommandEvent&)
514{
515        std::unique_ptr<wxMenu> pMenu = CSiteManager::GetSitesMenu();
516        if (pMenu) {
517                PopupMenu(pMenu.get());
518        }
519}
520
521void CManualTransfer::OnSelectedSite(wxCommandEvent& event)
522{
523        std::unique_ptr<CSiteManagerItemData_Site> pData = CSiteManager::GetSiteById(event.GetId());
524        if (!pData)
525                return;
526
527        delete m_pServer;
528        m_pServer = new CServer(pData->m_server);
529        delete m_pLastSite;
530        m_pLastSite = new CServer(pData->m_server);
531
532        xrc_call(*this, "ID_SERVER_SITE_SERVER", &wxStaticText::SetLabel, m_pServer->GetName());
533
534        DisplayServer();
535}
536
537void CManualTransfer::OnLogontypeSelChanged(wxCommandEvent& event)
538{
539        xrc_call(*this, "ID_USER", &wxTextCtrl::Enable, event.GetString() != _("Anonymous"));
540        xrc_call(*this, "ID_PASS", &wxTextCtrl::Enable, event.GetString() == _("Normal") || event.GetString() == _("Account"));
541        xrc_call(*this, "ID_ACCOUNT", &wxTextCtrl::Enable, event.GetString() == _("Account"));
542}
Note: See TracBrowser for help on using the repository browser.