blob: 409d3b17ff372fa805e4c012c7dddcc7d7e77714 [file] [log] [blame]
Dennis Syrovatsky139d7832005-11-02 05:36:05 +00001/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.
Dennis Syrovatskyf72f9fd2006-04-17 08:56:48 +00002 *
3 * Developed by Dennis Syrovatsky
Dennis Syrovatsky139d7832005-11-02 05:36:05 +00004 *
5 * This is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This software is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this software; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
18 * USA.
19 *
20 * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
21 *
22 */
23
24// -=- FTDialog.cxx
25
26#include <vncviewer/FTDialog.h>
27
28using namespace rfb;
29using namespace rfb::win32;
30
Dennis Syrovatsky092d9982005-12-05 09:57:05 +000031const char FTDialog::szCheckDeleteQueueText[] = "TightVNC.Viewer.CheckDeleteQueue.Msg";
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000032const char FTDialog::szCheckTransferQueueText[] = "TightVNC.Viewer.CheckTransferQueue.Msg";
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000033const char FTDialog::szUploadFilePortionText[] = "TightVNC.Viewer.UploadFilePortion.Msg";
34
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000035FTDialog::FTDialog(HINSTANCE hInst, FileTransfer *pFT)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000036{
37 m_pFileTransfer = pFT;
38 m_hInstance = hInst;
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +000039
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000040 m_bDlgShown = false;
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +000041 m_bLocalBrowsing = true;
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +000042 m_bCloseDlgAfterCancel = false;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000043
44 m_pLocalLV = NULL;
45 m_pRemoteLV = NULL;
46 m_pProgress = NULL;
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +000047 m_pCancelingDlg = NULL;
Dennis Syrovatskyf0928942005-12-14 15:12:45 +000048 m_pCreateFolderDlg = NULL;
Dennis Syrovatsky95509432005-12-14 16:42:33 +000049 m_pRenameDlg = NULL;
Dennis Syrovatskyb0b72472005-12-15 10:02:16 +000050 m_pBrowseDlg = NULL;
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000051
Dennis Syrovatskyec906992005-11-07 09:56:06 +000052 m_hwndFTDialog = NULL;
Dennis Syrovatskyb595e032005-11-09 06:24:25 +000053 m_hwndLocalPath = NULL;
54 m_hwndRemotePath = NULL;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000055
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000056 m_FTMenuSource = 0;
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +000057 m_dwNumStatusStrings = 0;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000058
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000059 m_szLocalPath[0] = '\0';
60 m_szRemotePath[0] = '\0';
61 m_szLocalPathTmp[0] = '\0';
62 m_szRemotePathTmp[0] = '\0';
Dennis Syrovatskyf0928942005-12-14 15:12:45 +000063 m_szCreateFolderName[0] = '\0';
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000064}
65
66FTDialog::~FTDialog()
67{
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000068 destroyFTDialog();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000069}
70
71bool
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000072FTDialog::createFTDialog(HWND hwndParent)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000073{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000074 if (m_hwndFTDialog != NULL) {
75 ShowWindow(m_hwndFTDialog, SW_SHOW);
76 m_bDlgShown = true;
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +000077 showLocalLVItems();
78 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000079 return true;
80 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000081
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +000082 if (!initFTWndMsgs()) return false;
83
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000084 m_hwndFTDialog = CreateDialogParam(m_hInstance,
85 MAKEINTRESOURCE(IDD_FILETRANSFER_DLG),
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000086 hwndParent,
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000087 (DLGPROC) FTDialogProc,
88 (LONG) this);
89
90 if (m_hwndFTDialog == NULL) return false;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000091
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000092 HWND hwndLocalList = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALLIST);
93 HWND hwndRemoteList = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTELIST);
94
95 if ((hwndLocalList == NULL) || (hwndRemoteList == NULL)) {
96 destroyFTDialog();
97 return false;
98 }
99
100 m_pLocalLV = new FTListView(hwndLocalList);
101 m_pRemoteLV = new FTListView(hwndRemoteList);
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000102
103 m_pProgress = new FTProgress(m_hwndFTDialog);
104
105 if ((m_pLocalLV == NULL) || (m_pRemoteLV == NULL) || (m_pProgress == NULL)) {
106 destroyFTDialog();
107 return false;
108 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000109
110 initFTDialog();
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000111
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000112 ShowWindow(m_hwndFTDialog, SW_SHOW);
113 UpdateWindow(m_hwndFTDialog);
114 m_bDlgShown = true;
115 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000116}
117
118bool
119FTDialog::initFTDialog()
120{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000121 m_pLocalLV->initialize(m_hInstance);
122 m_pRemoteLV->initialize(m_hInstance);
123
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000124 m_hwndLocalPath = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALPATH);
125 m_hwndRemotePath = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTEPATH);
126
127 setIcon(IDC_FTLOCALUP, IDI_FTUP);
128 setIcon(IDC_FTREMOTEUP, IDI_FTUP);
129 setIcon(IDC_FTLOCALRELOAD, IDI_FTRELOAD);
130 setIcon(IDC_FTREMOTERELOAD, IDI_FTRELOAD);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000131
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000132 showLocalLVItems();
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000133 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000134
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000135 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000136}
137
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000138bool
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000139FTDialog::initFTWndMsgs()
140{
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000141 m_msgCheckDeleteQueue = RegisterWindowMessage(szCheckDeleteQueueText);
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000142 m_msgCheckTransferQueue = RegisterWindowMessage(szCheckTransferQueueText);
143 m_msgUploadFilePortion = RegisterWindowMessage(szUploadFilePortionText);
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000144
Dennis Syrovatsky95a01ff2005-12-14 07:58:29 +0000145 if ((m_msgCheckDeleteQueue) &&
146 (m_msgCheckTransferQueue) &&
147 (m_msgUploadFilePortion)) return true;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000148
149 return false;
150}
151
152bool
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000153FTDialog::closeFTDialog()
154{
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000155 ShowWindow(m_hwndFTDialog, SW_HIDE);
156 m_bDlgShown = false;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000157 return true;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000158}
159
160void
161FTDialog::destroyFTDialog()
162{
163 if (m_pLocalLV != NULL) {
164 delete m_pLocalLV;
165 m_pLocalLV = NULL;
166 }
167
168 if (m_pRemoteLV != NULL) {
169 delete m_pRemoteLV;
170 m_pRemoteLV = NULL;
171 }
172
173 if (m_pProgress != NULL) {
174 delete m_pProgress;
175 m_pProgress = NULL;
176 }
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000177
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000178 if(m_pCancelingDlg != NULL) {
179 delete m_pCancelingDlg;
180 m_pCancelingDlg = NULL;
181 }
182
183 if (m_pCreateFolderDlg != NULL) {
184 delete m_pCreateFolderDlg;
185 m_pCreateFolderDlg = NULL;
186 }
187
188 if(m_pRenameDlg != NULL) {
189 delete m_pRenameDlg;
190 m_pRenameDlg = NULL;
191 }
192
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000193 if (DestroyWindow(m_hwndFTDialog)) m_hwndFTDialog = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000194}
195
196BOOL CALLBACK
197FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
198{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000199 FTDialog *_this = (FTDialog *) GetWindowLong(hwnd, GWL_USERDATA);
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000200
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000201 switch (uMsg)
202 {
203 case WM_INITDIALOG:
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000204 _this = (FTDialog*)lParam;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000205 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
206 SetForegroundWindow(hwnd);
207 return TRUE;
208 case WM_COMMAND:
209 {
210 switch (LOWORD(wParam))
211 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000212 case IDC_FTLOCALPATH:
213 switch (HIWORD (wParam))
214 {
215 case CBN_SETFOCUS:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000216 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000217 return FALSE;
218 }
219 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000220 case IDC_FTREMOTEPATH:
221 switch (HIWORD (wParam))
222 {
223 case CBN_SETFOCUS:
224 _this->setButtonsState();
225 return FALSE;
226 }
227 break;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000228 case IDC_FTCLOSE:
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000229 _this->onClose();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000230 return FALSE;
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000231 case IDC_FTLOCALBROWSE:
232 _this->onLocalBrowse();
233 return FALSE;
234 case IDC_FTREMOTEBROWSE:
235 _this->onRemoteBrowse();
236 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000237 case IDC_FTLOCALUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000238 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000239 _this->onLocalOneUpFolder();
240 return FALSE;
241 case IDC_FTREMOTEUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000242 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000243 _this->onRemoteOneUpFolder();
244 return FALSE;
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000245 case IDC_FTLOCALRELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000246 _this->setButtonsState();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000247 _this->onLocalReload();
248 return FALSE;
249 case IDC_FTREMOTERELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000250 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000251 _this->onRemoteReload();
252 return FALSE;
253 case IDC_FTUPLOAD:
254 _this->onUpload();
255 return FALSE;
256 case IDC_FTDOWNLOAD:
257 _this->onDownload();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000258 return FALSE;
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000259 case IDC_FTCANCEL:
260 _this->onFTCancel();
261 return FALSE;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000262 case IDM_FTCOPY:
263 case IDM_FTRENAME:
264 case IDM_FTDELETE:
265 case IDM_FTCANCEL:
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000266 case IDM_FTCREATEFOLDER:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000267 _this->onFTMenuCommand(LOWORD(wParam));
268 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000269 }
270 }
271 break;
272
273 case WM_NOTIFY:
274 switch (LOWORD(wParam))
275 {
276 case IDC_FTLOCALLIST:
277 switch (((LPNMHDR) lParam)->code)
278 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000279 case NM_CLICK:
280 case NM_SETFOCUS:
281 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000282 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000283 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000284 case LVN_GETDISPINFO:
285 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
286 return FALSE;
287 case LVN_ITEMACTIVATE:
288 _this->onLocalItemActivate((LPNMITEMACTIVATE) lParam);
289 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000290 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000291 _this->onLocalRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000292 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000293 }
294 break;
295 case IDC_FTREMOTELIST:
296 switch (((LPNMHDR) lParam)->code)
297 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000298 case NM_CLICK:
299 case NM_SETFOCUS:
300 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000301 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000302 case LVN_GETDISPINFO:
303 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
304 return FALSE;
305 case LVN_ITEMACTIVATE:
306 _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
307 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000308 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000309 _this->onRemoteRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000310 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000311 }
312 break;
313 }
314 break;
315 case WM_CLOSE:
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000316 _this->onClose();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000317 return FALSE;
318 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000319
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000320 if (_this != NULL) {
321 if (uMsg == _this->m_msgCheckTransferQueue)
322 _this->m_pFileTransfer->checkTransferQueue();
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000323
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000324 if (uMsg == _this->m_msgUploadFilePortion)
325 _this->m_pFileTransfer->uploadFilePortion();
326
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000327 if (uMsg == _this->m_msgCheckDeleteQueue)
328 _this->m_pFileTransfer->checkDeleteQueue();
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000329 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000330
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000331 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000332}
333
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000334void
335FTDialog::onClose()
336{
337 if (m_pFileTransfer->isTransferEnable()) {
338 m_bCloseDlgAfterCancel = true;
339 onFTCancel();
340 } else {
341 closeFTDialog();
342 }
343}
344
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000345void
346FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
347{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000348 if (strlen(m_szLocalPath) == 0) {
349 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
350 } else {
351 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
352 }
353 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000354}
355
356void
357FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
358{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000359 if (strlen(m_szRemotePath) == 0) {
360 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
361 } else {
362 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
363 }
364 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000365}
366
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000367void
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +0000368FTDialog::onEndBrowseDlg(bool bResult)
369{
370 if (m_pBrowseDlg == NULL) return;
371
372 if (bResult) {
373 if (m_bLocalBrowsing) {
374 strcpy(m_szLocalPathTmp, m_pBrowseDlg->getPath());
375 showLocalLVItems();
376 } else {
377 strcpy(m_szRemotePathTmp, m_pBrowseDlg->getPath());
378 showRemoteLVItems();
379 }
380 }
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +0000381 delete m_pBrowseDlg;
382 m_pBrowseDlg = NULL;
383}
384
385void
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000386FTDialog::onLocalBrowse()
387{
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +0000388 if (m_pBrowseDlg != NULL) return;
389
390 m_bLocalBrowsing = true;
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000391
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +0000392 m_pBrowseDlg = new FTBrowseDlg(this);
393 m_pBrowseDlg->create();
394
395 getBrowseItems("");
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000396}
397
398void
399FTDialog::onRemoteBrowse()
400{
Dennis Syrovatskyb0b72472005-12-15 10:02:16 +0000401 if (m_pBrowseDlg != NULL) return;
402
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +0000403 m_bLocalBrowsing = false;
404
Dennis Syrovatskyb0b72472005-12-15 10:02:16 +0000405 m_pBrowseDlg = new FTBrowseDlg(this);
406 m_pBrowseDlg->create();
407
408 m_pFileTransfer->requestFileList("", FT_FLR_DEST_BROWSE, true);
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000409}
410
411void
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000412FTDialog::onLocalReload()
413{
414 strcpy(m_szLocalPathTmp, m_szLocalPath);
415 showLocalLVItems();
416}
417
418void
419FTDialog::onRemoteReload()
420{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000421 strcpy(m_szRemotePathTmp, m_szRemotePath);
422 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000423}
424
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000425void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000426FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000427{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000428 FolderManager fm;
429 FileInfo fileInfo;
430 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
431 fileInfo.sort();
432 m_pLocalLV->deleteAllItems();
433 m_pLocalLV->addItems(&fileInfo);
434 strcpy(m_szLocalPath, m_szLocalPathTmp);
435 SetWindowText(m_hwndLocalPath, m_szLocalPath);
436 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000437}
438
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000439void
440FTDialog::showRemoteLVItems()
441{
442 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
443}
444
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000445void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000446FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000447{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000448 pFI->sort();
449 m_pRemoteLV->deleteAllItems();
450 m_pRemoteLV->addItems(pFI);
451 strcpy(m_szRemotePath, m_szRemotePathTmp);
452 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000453 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000454}
455
456void
457FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000458{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000459 strcpy(m_szLocalPathTmp, m_szLocalPath);
460 makeOneUpFolder(m_szLocalPathTmp);
461 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000462}
463
464void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000465FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000466{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000467 strcpy(m_szRemotePathTmp, m_szRemotePath);
468 makeOneUpFolder(m_szRemotePathTmp);
469 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000470}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000471
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000472void
473FTDialog::reqFolderUnavailable()
474{
475 strcpy(m_szRemotePathTmp, m_szRemotePath);
476}
477
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000478int
479FTDialog::makeOneUpFolder(char *pPath)
480{
481 if (strcmp(pPath, "") == 0) return strlen(pPath);
482 for (int i=(strlen(pPath)-2); i>=0; i--) {
483 if (pPath[i] == '\\') {
484 pPath[i] = '\0';
485 break;
486 }
487 if (i == 0) pPath[0] = '\0';
488 }
489 return strlen(pPath);
490}
491
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000492void
493FTDialog::onUpload()
494{
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000495 FileInfo fi;
Dennis Syrovatskyf8f977d2005-12-18 07:39:47 +0000496 char prefix[FT_FILENAME_SIZE];
497 prefix[0] = '\0';
498
499 if (m_pFileTransfer->isTransferEnable())
500 strcpy(prefix, "File Transfer is active.\nDo you want to add selected file(s)/folder(s) to transfer queue?\n\n");
501
502 int numSel = m_pLocalLV->getSelectedItems(&fi);
503 if (numSel > 0) {
504 char *pBuf = new char [(numSel + 4) * (MAX_PATH + 3) + strlen(prefix) + 1];
505 sprintf(pBuf, "%sFrom: Local Computer %s\\\n\n", prefix, m_szLocalPath);
506
507 for (unsigned int i = 0; i < fi.getNumEntries(); i++)
508 sprintf(pBuf, "%s%s, ", pBuf, fi.getNameAt(i));
509
510 sprintf(pBuf, "%s\n\nTo: Remote Computer %s\\", pBuf, m_szRemotePath);
511
512 if (strlen(pBuf) > 2048)
513 sprintf(pBuf, "%sFrom: Local Computer %s\\\n\nTo: Remote Computer %s\\\n\nTotal %d file(s)/folder(s)",
514 prefix, m_szLocalPath, m_szRemotePath, numSel);
515
516 if (MessageBox(m_hwndFTDialog, pBuf, "Copy Selected Files and Folders", MB_OKCANCEL) == IDOK)
517 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD);
Dennis Syrovatskyf72f9fd2006-04-17 08:56:48 +0000518
519 setButtonsState();
Dennis Syrovatskyf8f977d2005-12-18 07:39:47 +0000520
521 delete [] pBuf;
522 return;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000523 }
Dennis Syrovatskyf8f977d2005-12-18 07:39:47 +0000524
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000525 setButtonsState();
Dennis Syrovatskyf8f977d2005-12-18 07:39:47 +0000526 setStatusText("File Transfer Impossible. No file(s) selected for transfer");
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000527}
528
529void
530FTDialog::onDownload()
531{
Dennis Syrovatsky3f5ccbd2005-12-13 04:33:07 +0000532 FileInfo fi;
Dennis Syrovatskyf8f977d2005-12-18 07:39:47 +0000533 char prefix[FT_FILENAME_SIZE];
534 prefix[0] = '\0';
535
536 if (m_pFileTransfer->isTransferEnable())
537 strcpy(prefix, "File Transfer is active.\nDo you want to add selected file(s)/folder(s) to transfer queue?\n\n");
538
539 int numSel = m_pRemoteLV->getSelectedItems(&fi);
540 if (numSel > 0) {
541 char *pBuf = new char [(numSel + 4) * (MAX_PATH + 3) + strlen(prefix) + 1];
542 sprintf(pBuf, "%sFrom: Remote Computer %s\\\n\n", prefix, m_szRemotePath);
543
544 for (unsigned int i = 0; i < fi.getNumEntries(); i++)
545 sprintf(pBuf, "%s%s, ", pBuf, fi.getNameAt(i));
546
547 sprintf(pBuf, "%s\n\nTo: Local Computer %s\\", pBuf, m_szLocalPath);
548
549 if (strlen(pBuf) > 2048)
550 sprintf(pBuf, "%sFrom: Remote Computer %s\\\n\nTo: Local Computer %s\\\n\nTotal %d file(s)/folder(s)",
551 prefix, m_szRemotePath, m_szLocalPath, numSel);
552
553 if (MessageBox(m_hwndFTDialog, pBuf, "Copy Selected Files and Folders", MB_OKCANCEL) == IDOK)
554 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_DOWNLOAD);
Dennis Syrovatskyf72f9fd2006-04-17 08:56:48 +0000555
556 setButtonsState();
Dennis Syrovatskyf8f977d2005-12-18 07:39:47 +0000557
558 delete [] pBuf;
559 return;
Dennis Syrovatsky3f5ccbd2005-12-13 04:33:07 +0000560 }
Dennis Syrovatskyf8f977d2005-12-18 07:39:47 +0000561
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000562 setButtonsState();
Dennis Syrovatskyf8f977d2005-12-18 07:39:47 +0000563 setStatusText("File Transfer Impossible. No file(s) selected for transfer");
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000564}
565
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000566void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000567FTDialog::onLocalRename()
568{
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000569 if (m_pRenameDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000570
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000571 FileInfo fi;
572 if (m_pLocalLV->getSelectedItems(&fi) == 1) {
573 unsigned int flags = fi.getFlagsAt(0);
574 m_pRenameDlg = new FTDialog::RenameDlg(this);
575 if (m_pRenameDlg != NULL) {
576 if (flags & FT_ATTR_DIR) {
577 m_pRenameDlg->create(fi.getNameAt(0), true);
578 } else {
579 m_pRenameDlg->create(fi.getNameAt(0), false);
580 }
581 if (strlen(m_pRenameDlg->getFolderName()) > 0) {
582 FolderManager fm;
583 fm.renameIt(m_szLocalPath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
584 showLocalLVItems();
585 }
586 delete m_pRenameDlg;
587 m_pRenameDlg = NULL;
588 }
589 }
590 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000591}
592
593void
594FTDialog::onRemoteRename()
595{
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000596 if (m_pRenameDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000597
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000598 FileInfo fi;
599 if (m_pRemoteLV->getSelectedItems(&fi) == 1) {
600 unsigned int flags = fi.getFlagsAt(0);
601 m_pRenameDlg = new FTDialog::RenameDlg(this);
602 if (m_pRenameDlg != NULL) {
603 if (flags & FT_ATTR_DIR) {
604 m_pRenameDlg->create(fi.getNameAt(0), true);
605 } else {
606 m_pRenameDlg->create(fi.getNameAt(0), false);
607 }
608 if (strlen(m_pRenameDlg->getFolderName()) > 0) {
609 m_pFileTransfer->renameRemote(m_szRemotePath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
610 }
611 delete m_pRenameDlg;
612 m_pRenameDlg = NULL;
613 }
614 }
615 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000616}
617
618void
619FTDialog::onLocalDelete()
620{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000621 FileInfo fi;
622 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
623 m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL);
624 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000625 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000626}
627
628void
629FTDialog::onRemoteDelete()
630{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000631 FileInfo fi;
632 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
633 m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE);
634 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000635 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000636}
637
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000638bool
639FTDialog::getCreateFolderName()
640{
641 if (m_pCreateFolderDlg != NULL) return false;
642
643 bool bResult = false;
644
645 m_pCreateFolderDlg = new FTDialog::CreateFolderDlg(this);
646 m_pCreateFolderDlg->create();
647 if (strlen(m_pCreateFolderDlg->getFolderName()) != 0) {
648 strcpy(m_szCreateFolderName, m_pCreateFolderDlg->getFolderName());
649 bResult = true;
650 } else {
651 m_szCreateFolderName[0] = '\0';
652 bResult = false;
653 }
654 delete m_pCreateFolderDlg;
655 m_pCreateFolderDlg = NULL;
656
657 return bResult;
658}
659
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000660void
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000661FTDialog::onLocalCreateFolder()
662{
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000663 if (getCreateFolderName()) {
664 char path[FT_FILENAME_SIZE];
665 sprintf(path, "%s\\%s", m_szLocalPath, m_szCreateFolderName);
666 setStatusText("Creating Local Folder: %s", path);
667 FolderManager fm;
668 if (fm.createDir(path)) showLocalLVItems();
669 }
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000670}
671
672void
673FTDialog::onRemoteCreateFolder()
674{
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000675 if (getCreateFolderName()) {
676 m_pFileTransfer->createRemoteFolder(m_szRemotePath, m_szCreateFolderName);
677 }
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000678}
679
680void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000681FTDialog::onFTCancel()
682{
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000683 if (m_pCancelingDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000684
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000685 m_pCancelingDlg = new CancelingDlg(this);
686
687 m_pCancelingDlg->create();
688}
689
690void
691FTDialog::cancelTransfer(bool bResult)
692{
693 if (m_pCancelingDlg != NULL) {
694 delete m_pCancelingDlg;
695 m_pCancelingDlg = NULL;
696 }
697
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000698 setButtonsState();
699
700 if ((m_bCloseDlgAfterCancel) && (bResult)) {
701 m_bCloseDlgAfterCancel = false;
702 closeFTDialog();
703 }
704
705 m_pFileTransfer->m_bCancel = bResult;
706}
707
708void
709FTDialog::afterCancelTransfer()
710{
711 if (m_pCancelingDlg != NULL) {
712 delete m_pCancelingDlg;
713 m_pCancelingDlg = NULL;
714 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000715}
716
717void
718FTDialog::onFTMenuCommand(int command)
719{
720 switch (command)
721 {
722 case IDM_FTCOPY:
723 {
724 switch (m_FTMenuSource)
725 {
726 case IDC_FTLOCALLIST: onUpload(); break;
727 case IDC_FTREMOTELIST: onDownload(); break;
728 default: break;
729 }
730 }
731 break;
732 case IDM_FTRENAME:
733 {
734 switch (m_FTMenuSource)
735 {
736 case IDC_FTLOCALLIST: onLocalRename(); break;
737 case IDC_FTREMOTELIST: onRemoteRename(); break;
738 default: break;
739 }
740 }
741 break;
742 case IDM_FTDELETE:
743 {
744 switch (m_FTMenuSource)
745 {
746 case IDC_FTLOCALLIST: onLocalDelete(); break;
747 case IDC_FTREMOTELIST: onRemoteDelete(); break;
748 default: break;
749 }
750 }
751 break;
752 case IDM_FTCANCEL: onFTCancel(); break;
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000753 case IDM_FTCREATEFOLDER:
754 {
755 switch (m_FTMenuSource)
756 {
757 case IDC_FTLOCALLIST: onLocalCreateFolder(); break;
758 case IDC_FTREMOTELIST: onRemoteCreateFolder(); break;
759 default: break;
760 }
761 }
762 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000763 default:
764 break;
765 }
766}
767
768void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000769FTDialog::onLocalRButton()
770{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000771 refreshBtnState();
772 m_FTMenuSource = IDC_FTLOCALLIST;
773 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
774 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
775 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000776}
777
778void
779FTDialog::onRemoteRButton()
780{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000781 refreshBtnState();
782 m_FTMenuSource = IDC_FTREMOTELIST;
783 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
784 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
785 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000786}
787
788void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000789FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
790 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000791{
792 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
793 HMENU hFTMenu = GetSubMenu(hMenu, 0);
794
795 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
796
797 SetForegroundWindow(m_hwndFTDialog);
798
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000799 if (copyBtnState) {
800 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
801 } else {
802 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
803 }
804 if (createFldBtnState) {
805 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
806 } else {
807 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
808 }
809 if (renameBtnState) {
810 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
811 } else {
812 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
813 }
814 if (deleteBtnState) {
815 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
816 } else {
817 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
818 }
819 if (cancelBtnState) {
820 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
821 } else {
822 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
823 }
824 DrawMenuBar(m_hwndFTDialog);
825
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000826 POINT cursorPosition;
827 GetCursorPos(&cursorPosition);
828 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000829 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000830}
831
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000832void
833FTDialog::setIcon(int dest, int idIcon)
834{
835 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
836 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
837 DestroyIcon((HICON) hIcon);
838}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000839
840void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000841FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000842{
843 if (!m_bDlgShown) return;
844
845 int locPathLen = strlen(m_szLocalPath);
846 int remPathLen = strlen(m_szRemotePath);
847
848 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000849 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000850 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000851 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000852 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
853 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000854 m_BtnState.uploadBtn = false;
855 m_BtnState.deleteLocalBtn = false;
856 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000857 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000858 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000859 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000860 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000861 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000862 m_BtnState.uploadBtn = true;
863 }
864 if (nCount == 1) {
865 m_BtnState.renameLocalBtn = true;
866 } else {
867 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000868 }
869 }
870 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000871 m_BtnState.uploadBtn = false;
872 m_BtnState.createLocalFldBtn = false;
873 m_BtnState.deleteLocalBtn = false;
874 m_BtnState.renameLocalBtn = false;
875 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000876 }
877 } else {
878 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000879 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000880 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000881 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000882 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
883 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000884 m_BtnState.downloadBtn = false;
885 m_BtnState.deleteRemoteBtn = false;
886 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000887 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000888 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000889 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000890 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000891 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000892 m_BtnState.downloadBtn = true;
893 }
894 if (nCount == 1) {
895 m_BtnState.renameRemoteBtn = true;
896 } else {
897 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000898 }
899 }
900 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000901 m_BtnState.downloadBtn = false;
902 m_BtnState.createRemoteFldBtn = false;
903 m_BtnState.deleteRemoteBtn = false;
904 m_BtnState.renameRemoteBtn = false;
905 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000906 }
907 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000908 }
909 }
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000910 if (m_pFileTransfer->isTransferEnable())
911 m_BtnState.cancelBtn = true;
912 else
913 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000914}
915
916void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000917FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000918{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000919 refreshBtnState();
920
921 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000922 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000923 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
924 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000925 }
926
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000927 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000928 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000929 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
930 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000931 }
932
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000933 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000934 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000935 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
936 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000937 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000938
939 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000940}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000941
942void
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000943FTDialog::setStatusText(LPCSTR format,...)
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000944{
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000945 char text[1024];
946 va_list args;
947 va_start(args, format);
948 int nSize = _vsnprintf(text, sizeof(text), format, args);
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +0000949
950 HWND hStatusBox = GetDlgItem(m_hwndFTDialog, IDC_FTSTATUS);
951
952 LRESULT lRes = SendMessage(hStatusBox, (UINT) CB_INSERTSTRING, (WPARAM) 0, (LPARAM) text);
953 if ((lRes != CB_ERR) && (lRes != CB_ERRSPACE)) {
954 lRes = SendMessage(hStatusBox, (UINT) CB_SETCURSEL, (WPARAM) lRes, (LPARAM) 0);
955 }
956
957 m_dwNumStatusStrings++;
958 if (m_dwNumStatusStrings > FT_MAX_STATUS_STRINGS) {
959 int numItems = SendMessage(hStatusBox, (UINT) CB_GETCOUNT, (WPARAM) 0, (LPARAM) 0);
960 if (numItems != CB_ERR) {
961 m_dwNumStatusStrings--;
962 SendMessage(hStatusBox, (UINT) CB_DELETESTRING, (WPARAM) numItems - 1, (LPARAM) 0);
963 }
964 }
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000965}
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000966
967void
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +0000968FTDialog::getBrowseItems(char *pPath)
969{
970 if (m_bLocalBrowsing) {
971 FileInfo fi;
972 FolderManager fm;
973 fm.getDirInfo(pPath, &fi, 1);
974 if (m_pBrowseDlg != NULL) m_pBrowseDlg->addItems(&fi);
975 } else {
976 m_pFileTransfer->requestFileList(pPath, FT_FLR_DEST_BROWSE, true);
977 }
978}
979
980void
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000981FTDialog::addBrowseItems(FileInfo *pFI)
982{
Dennis Syrovatskyb0b72472005-12-15 10:02:16 +0000983 if (m_pBrowseDlg == NULL) return;
984
985 m_pBrowseDlg->addItems(pFI);
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000986}
987
988void
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000989FTDialog::processDlgMsgs()
990{
991 MSG msg;
992 while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) != 0) {
993 TranslateMessage(&msg);
994 DispatchMessage(&msg);
995 }
996}
997
998void
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000999FTDialog::postCheckTransferQueueMsg()
1000{
1001 PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
1002}
1003
1004void
1005FTDialog::postUploadFilePortionMsg()
1006{
1007 PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0);
1008}
1009
1010void
Dennis Syrovatsky092d9982005-12-05 09:57:05 +00001011FTDialog::postCheckDeleteQueueMsg()
1012{
1013 PostMessage(m_hwndFTDialog, m_msgCheckDeleteQueue, 0, 0);
1014}
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +00001015
1016FTDialog::CancelingDlg::CancelingDlg(FTDialog *pFTDlg)
1017{
1018 m_pFTDlg = pFTDlg;
1019 m_hwndDlg = NULL;
1020}
1021
1022FTDialog::CancelingDlg::~CancelingDlg()
1023{
1024 destroy();
1025}
1026
1027bool
1028FTDialog::CancelingDlg::create()
1029{
1030 if (m_hwndDlg != NULL) return false;
1031
1032 m_hwndDlg = CreateDialogParam(GetModuleHandle(0),
1033 MAKEINTRESOURCE(IDD_FTCANCELING),
1034 NULL,
1035 (DLGPROC) cancelingDlgProc,
1036 (LONG) this);
1037
1038 if (m_hwndDlg == NULL) return false;
1039
1040 ShowWindow(m_hwndDlg, SW_SHOW);
1041 DrawIcon(GetDC(m_hwndDlg), 15, 22, LoadIcon(NULL, IDI_QUESTION));
1042 UpdateWindow(m_hwndDlg);
1043
1044 return true;
1045}
1046
1047bool
1048FTDialog::CancelingDlg::destroy()
1049{
1050 if (m_hwndDlg == NULL) return true;
1051
1052 if (DestroyWindow(m_hwndDlg)) {
1053 m_hwndDlg = NULL;
1054 return true;
1055 } else {
1056 return false;
1057 }
1058}
1059
1060bool
1061FTDialog::CancelingDlg::close(bool bResult)
1062{
1063 if (m_hwndDlg == NULL) return true;
1064
1065 destroy();
1066
1067 m_pFTDlg->cancelTransfer(bResult);
1068
1069 return false;
1070}
1071
1072BOOL CALLBACK
1073FTDialog::CancelingDlg::cancelingDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
1074{
1075 FTDialog::CancelingDlg *_this = (FTDialog::CancelingDlg *) GetWindowLong(hwnd, GWL_USERDATA);
1076 switch (uMsg)
1077 {
1078 case WM_INITDIALOG:
1079 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
1080 SetForegroundWindow(hwnd);
1081 return TRUE;
1082
1083 case WM_COMMAND:
1084 switch (LOWORD(wParam))
1085 {
1086 case IDOK:
1087 _this->close(true);
1088 return TRUE;
1089 case IDCANCEL:
1090 _this->close(false);
1091 return TRUE;
1092 }
1093 break;
1094 case WM_CLOSE:
1095 _this->close(false);
1096 return TRUE;
1097 }
1098 return FALSE;
1099}
Dennis Syrovatskyf0928942005-12-14 15:12:45 +00001100
1101FTDialog::CreateFolderDlg::CreateFolderDlg(FTDialog *pFTDlg) : Dialog(GetModuleHandle(0))
1102{
1103 m_pFTDlg = pFTDlg;
1104 m_szFolderName[0] = '\0';
1105}
1106
1107FTDialog::CreateFolderDlg::~CreateFolderDlg()
1108{
1109
1110}
1111
1112bool
1113FTDialog::CreateFolderDlg::create()
1114{
1115 return showDialog(MAKEINTRESOURCE(IDD_FTCREATEFOLDER), m_pFTDlg->getWndHandle());
1116}
1117
1118bool
1119FTDialog::CreateFolderDlg::onOk()
1120{
1121 strcpy(m_szFolderName, getItemString(IDC_FTFOLDERNAME));
1122 return true;
1123}
Dennis Syrovatsky95509432005-12-14 16:42:33 +00001124
1125FTDialog::RenameDlg::RenameDlg(FTDialog *pFTDlg) : CreateFolderDlg(pFTDlg)
1126{
1127 m_bFolder = false;
1128}
1129
1130FTDialog::RenameDlg::~RenameDlg()
1131{
1132}
1133
1134bool
1135FTDialog::RenameDlg::create(char *pFilename, bool bFolder)
1136{
1137 m_bFolder = bFolder;
1138 strcpy(m_szFilename, pFilename);
1139 return showDialog(MAKEINTRESOURCE(IDD_FTCREATEFOLDER), m_pFTDlg->getWndHandle());
1140}
1141
1142void
1143FTDialog::RenameDlg::initDialog()
1144{
1145 char buf[2*FT_FILENAME_SIZE];
1146 if (m_bFolder) {
1147 SetWindowText(handle, "Rename Folder");
1148 sprintf(buf, "Rename Folder '%s'", m_szFilename);
1149 } else {
1150 SetWindowText(handle, "Rename File");
1151 sprintf(buf, "Rename File '%s'", m_szFilename);
1152 }
1153
1154 setItemString(IDC_FTTEXT, buf);
1155 setItemString(IDC_FTFOLDERNAME, m_szFilename);
1156 SendDlgItemMessage(handle, IDC_FTFOLDERNAME, EM_SETSEL, (WPARAM) 0, (LPARAM) -1);
Dennis Syrovatskyfabe3d82005-12-15 07:40:05 +00001157}