blob: 72d9e28e3653134bc15c2485a8ccca1588fdf718 [file] [log] [blame]
Dennis Syrovatsky139d7832005-11-02 05:36:05 +00001/* Copyright (C) 2005 TightVNC Team. All Rights Reserved.
2 *
3 * This is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This software is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this software; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
16 * USA.
17 *
18 * TightVNC distribution homepage on the Web: http://www.tightvnc.com/
19 *
20 */
21
22// -=- FTDialog.cxx
23
24#include <vncviewer/FTDialog.h>
25
26using namespace rfb;
27using namespace rfb::win32;
28
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000029FTDialog::FTDialog(HINSTANCE hInst, FileTransfer *pFT)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000030{
31 m_pFileTransfer = pFT;
32 m_hInstance = hInst;
33 m_bDlgShown = false;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000034
35 m_pLocalLV = NULL;
36 m_pRemoteLV = NULL;
37 m_pProgress = NULL;
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000038
Dennis Syrovatskyec906992005-11-07 09:56:06 +000039 m_hwndFTDialog = NULL;
Dennis Syrovatskyb595e032005-11-09 06:24:25 +000040 m_hwndLocalPath = NULL;
41 m_hwndRemotePath = NULL;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000042
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000043 m_FTMenuSource = 0;
44
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000045 m_szLocalPath[0] = '\0';
46 m_szRemotePath[0] = '\0';
47 m_szLocalPathTmp[0] = '\0';
48 m_szRemotePathTmp[0] = '\0';
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000049}
50
51FTDialog::~FTDialog()
52{
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000053 destroyFTDialog();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000054}
55
56bool
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000057FTDialog::createFTDialog(HWND hwndParent)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000058{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000059 if (m_hwndFTDialog != NULL) {
60 ShowWindow(m_hwndFTDialog, SW_SHOW);
61 m_bDlgShown = true;
62 return true;
63 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000064
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000065 m_hwndFTDialog = CreateDialogParam(m_hInstance,
66 MAKEINTRESOURCE(IDD_FILETRANSFER_DLG),
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000067 hwndParent,
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000068 (DLGPROC) FTDialogProc,
69 (LONG) this);
70
71 if (m_hwndFTDialog == NULL) return false;
72
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000073 HWND hwndLocalList = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALLIST);
74 HWND hwndRemoteList = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTELIST);
75
76 if ((hwndLocalList == NULL) || (hwndRemoteList == NULL)) {
77 destroyFTDialog();
78 return false;
79 }
80
81 m_pLocalLV = new FTListView(hwndLocalList);
82 m_pRemoteLV = new FTListView(hwndRemoteList);
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000083
84 m_pProgress = new FTProgress(m_hwndFTDialog);
85
86 if ((m_pLocalLV == NULL) || (m_pRemoteLV == NULL) || (m_pProgress == NULL)) {
87 destroyFTDialog();
88 return false;
89 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000090
91 initFTDialog();
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000092
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000093 ShowWindow(m_hwndFTDialog, SW_SHOW);
94 UpdateWindow(m_hwndFTDialog);
95 m_bDlgShown = true;
96 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000097}
98
99bool
100FTDialog::initFTDialog()
101{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000102 m_pLocalLV->initialize(m_hInstance);
103 m_pRemoteLV->initialize(m_hInstance);
104
105 m_pProgress->initialize(0,0);
106
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000107 m_hwndLocalPath = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALPATH);
108 m_hwndRemotePath = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTEPATH);
109
110 setIcon(IDC_FTLOCALUP, IDI_FTUP);
111 setIcon(IDC_FTREMOTEUP, IDI_FTUP);
112 setIcon(IDC_FTLOCALRELOAD, IDI_FTRELOAD);
113 setIcon(IDC_FTREMOTERELOAD, IDI_FTRELOAD);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000114
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000115 showLocalLVItems();
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000116 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000117
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000118 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000119}
120
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000121bool
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000122FTDialog::closeFTDialog()
123{
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000124 ShowWindow(m_hwndFTDialog, SW_HIDE);
125 m_bDlgShown = false;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000126 return true;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000127}
128
129void
130FTDialog::destroyFTDialog()
131{
132 if (m_pLocalLV != NULL) {
133 delete m_pLocalLV;
134 m_pLocalLV = NULL;
135 }
136
137 if (m_pRemoteLV != NULL) {
138 delete m_pRemoteLV;
139 m_pRemoteLV = NULL;
140 }
141
142 if (m_pProgress != NULL) {
143 delete m_pProgress;
144 m_pProgress = NULL;
145 }
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000146
147 if (DestroyWindow(m_hwndFTDialog)) m_hwndFTDialog = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000148}
149
150BOOL CALLBACK
151FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
152{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000153 FTDialog *_this = (FTDialog *) GetWindowLong(hwnd, GWL_USERDATA);
154 switch (uMsg)
155 {
156 case WM_INITDIALOG:
157 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
158 SetForegroundWindow(hwnd);
159 return TRUE;
160 case WM_COMMAND:
161 {
162 switch (LOWORD(wParam))
163 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000164 case IDC_FTLOCALPATH:
165 switch (HIWORD (wParam))
166 {
167 case CBN_SETFOCUS:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000168 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000169 return FALSE;
170 }
171 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000172 case IDC_FTREMOTEPATH:
173 switch (HIWORD (wParam))
174 {
175 case CBN_SETFOCUS:
176 _this->setButtonsState();
177 return FALSE;
178 }
179 break;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000180 case IDC_FTCLOSE:
181 _this->closeFTDialog();
182 return FALSE;
183 case IDC_FTLOCALUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000184 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000185 _this->onLocalOneUpFolder();
186 return FALSE;
187 case IDC_FTREMOTEUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000188 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000189 _this->onRemoteOneUpFolder();
190 return FALSE;
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000191 case IDC_FTLOCALRELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000192 _this->setButtonsState();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000193 _this->onLocalReload();
194 return FALSE;
195 case IDC_FTREMOTERELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000196 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000197 _this->onRemoteReload();
198 return FALSE;
199 case IDC_FTUPLOAD:
200 _this->onUpload();
201 return FALSE;
202 case IDC_FTDOWNLOAD:
203 _this->onDownload();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000204 return FALSE;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000205 case IDM_FTCOPY:
206 case IDM_FTRENAME:
207 case IDM_FTDELETE:
208 case IDM_FTCANCEL:
209 _this->onFTMenuCommand(LOWORD(wParam));
210 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000211 }
212 }
213 break;
214
215 case WM_NOTIFY:
216 switch (LOWORD(wParam))
217 {
218 case IDC_FTLOCALLIST:
219 switch (((LPNMHDR) lParam)->code)
220 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000221 case NM_CLICK:
222 case NM_SETFOCUS:
223 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000224 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000225 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000226 case LVN_GETDISPINFO:
227 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
228 return FALSE;
229 case LVN_ITEMACTIVATE:
230 _this->onLocalItemActivate((LPNMITEMACTIVATE) lParam);
231 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000232 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000233 _this->onLocalRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000234 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000235 }
236 break;
237 case IDC_FTREMOTELIST:
238 switch (((LPNMHDR) lParam)->code)
239 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000240 case NM_CLICK:
241 case NM_SETFOCUS:
242 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000243 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000244 case LVN_GETDISPINFO:
245 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
246 return FALSE;
247 case LVN_ITEMACTIVATE:
248 _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
249 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000250 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000251 _this->onRemoteRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000252 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000253 }
254 break;
255 }
256 break;
257 case WM_CLOSE:
258 case WM_DESTROY:
259 _this->closeFTDialog();
260 return FALSE;
261 }
262 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000263}
264
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000265void
266FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
267{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000268 if (strlen(m_szLocalPath) == 0) {
269 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
270 } else {
271 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
272 }
273 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000274}
275
276void
277FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
278{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000279 if (strlen(m_szRemotePath) == 0) {
280 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
281 } else {
282 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
283 }
284 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000285}
286
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000287void
288FTDialog::onLocalReload()
289{
290 strcpy(m_szLocalPathTmp, m_szLocalPath);
291 showLocalLVItems();
292}
293
294void
295FTDialog::onRemoteReload()
296{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000297 strcpy(m_szRemotePathTmp, m_szRemotePath);
298 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000299}
300
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000301void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000302FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000303{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000304 FolderManager fm;
305 FileInfo fileInfo;
306 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
307 fileInfo.sort();
308 m_pLocalLV->deleteAllItems();
309 m_pLocalLV->addItems(&fileInfo);
310 strcpy(m_szLocalPath, m_szLocalPathTmp);
311 SetWindowText(m_hwndLocalPath, m_szLocalPath);
312 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000313}
314
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000315void
316FTDialog::showRemoteLVItems()
317{
318 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
319}
320
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000321void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000322FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000323{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000324 pFI->sort();
325 m_pRemoteLV->deleteAllItems();
326 m_pRemoteLV->addItems(pFI);
327 strcpy(m_szRemotePath, m_szRemotePathTmp);
328 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000329 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000330}
331
332void
333FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000334{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000335 strcpy(m_szLocalPathTmp, m_szLocalPath);
336 makeOneUpFolder(m_szLocalPathTmp);
337 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000338}
339
340void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000341FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000342{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000343 strcpy(m_szRemotePathTmp, m_szRemotePath);
344 makeOneUpFolder(m_szRemotePathTmp);
345 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000346}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000347
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000348void
349FTDialog::reqFolderUnavailable()
350{
351 strcpy(m_szRemotePathTmp, m_szRemotePath);
352}
353
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000354int
355FTDialog::makeOneUpFolder(char *pPath)
356{
357 if (strcmp(pPath, "") == 0) return strlen(pPath);
358 for (int i=(strlen(pPath)-2); i>=0; i--) {
359 if (pPath[i] == '\\') {
360 pPath[i] = '\0';
361 break;
362 }
363 if (i == 0) pPath[0] = '\0';
364 }
365 return strlen(pPath);
366}
367
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000368void
369FTDialog::onUpload()
370{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000371 MessageBox(NULL, "onUpload", "FTDialog", MB_OK);
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000372}
373
374void
375FTDialog::onDownload()
376{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000377 MessageBox(NULL, "onDownload", "FTDialog", MB_OK);
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000378
379}
380
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000381void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000382FTDialog::onLocalRename()
383{
384 MessageBox(NULL, "onLocalRename", "FTDialog", MB_OK);
385
386}
387
388void
389FTDialog::onRemoteRename()
390{
391 MessageBox(NULL, "onRemoteRename", "FTDialog", MB_OK);
392
393}
394
395void
396FTDialog::onLocalDelete()
397{
398 MessageBox(NULL, "onLocalDelete", "FTDialog", MB_OK);
399
400}
401
402void
403FTDialog::onRemoteDelete()
404{
405 MessageBox(NULL, "onRemoteDelete", "FTDialog", MB_OK);
406
407}
408
409void
410FTDialog::onFTCancel()
411{
412 MessageBox(NULL, "onFTCancel", "FTDialog", MB_OK);
413
414}
415
416void
417FTDialog::onFTMenuCommand(int command)
418{
419 switch (command)
420 {
421 case IDM_FTCOPY:
422 {
423 switch (m_FTMenuSource)
424 {
425 case IDC_FTLOCALLIST: onUpload(); break;
426 case IDC_FTREMOTELIST: onDownload(); break;
427 default: break;
428 }
429 }
430 break;
431 case IDM_FTRENAME:
432 {
433 switch (m_FTMenuSource)
434 {
435 case IDC_FTLOCALLIST: onLocalRename(); break;
436 case IDC_FTREMOTELIST: onRemoteRename(); break;
437 default: break;
438 }
439 }
440 break;
441 case IDM_FTDELETE:
442 {
443 switch (m_FTMenuSource)
444 {
445 case IDC_FTLOCALLIST: onLocalDelete(); break;
446 case IDC_FTREMOTELIST: onRemoteDelete(); break;
447 default: break;
448 }
449 }
450 break;
451 case IDM_FTCANCEL: onFTCancel(); break;
452 default:
453 break;
454 }
455}
456
457void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000458FTDialog::onLocalRButton()
459{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000460 refreshBtnState();
461 m_FTMenuSource = IDC_FTLOCALLIST;
462 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
463 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
464 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000465}
466
467void
468FTDialog::onRemoteRButton()
469{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000470 refreshBtnState();
471 m_FTMenuSource = IDC_FTREMOTELIST;
472 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
473 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
474 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000475}
476
477void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000478FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
479 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000480{
481 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
482 HMENU hFTMenu = GetSubMenu(hMenu, 0);
483
484 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
485
486 SetForegroundWindow(m_hwndFTDialog);
487
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000488 if (copyBtnState) {
489 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
490 } else {
491 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
492 }
493 if (createFldBtnState) {
494 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
495 } else {
496 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
497 }
498 if (renameBtnState) {
499 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
500 } else {
501 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
502 }
503 if (deleteBtnState) {
504 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
505 } else {
506 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
507 }
508 if (cancelBtnState) {
509 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
510 } else {
511 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
512 }
513 DrawMenuBar(m_hwndFTDialog);
514
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000515 POINT cursorPosition;
516 GetCursorPos(&cursorPosition);
517 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000518 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000519}
520
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000521void
522FTDialog::setIcon(int dest, int idIcon)
523{
524 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
525 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
526 DestroyIcon((HICON) hIcon);
527}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000528
529void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000530FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000531{
532 if (!m_bDlgShown) return;
533
534 int locPathLen = strlen(m_szLocalPath);
535 int remPathLen = strlen(m_szRemotePath);
536
537 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000538 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000539 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000540 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000541 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
542 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000543 m_BtnState.uploadBtn = false;
544 m_BtnState.deleteLocalBtn = false;
545 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000546 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000547 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000548 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000549 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000550 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000551 m_BtnState.uploadBtn = true;
552 }
553 if (nCount == 1) {
554 m_BtnState.renameLocalBtn = true;
555 } else {
556 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000557 }
558 }
559 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000560 m_BtnState.uploadBtn = false;
561 m_BtnState.createLocalFldBtn = false;
562 m_BtnState.deleteLocalBtn = false;
563 m_BtnState.renameLocalBtn = false;
564 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000565 }
566 } else {
567 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000568 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000569 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000570 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000571 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
572 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000573 m_BtnState.downloadBtn = false;
574 m_BtnState.deleteRemoteBtn = false;
575 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000576 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000577 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000578 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000579 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000580 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000581 m_BtnState.downloadBtn = true;
582 }
583 if (nCount == 1) {
584 m_BtnState.renameRemoteBtn = true;
585 } else {
586 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000587 }
588 }
589 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000590 m_BtnState.downloadBtn = false;
591 m_BtnState.createRemoteFldBtn = false;
592 m_BtnState.deleteRemoteBtn = false;
593 m_BtnState.renameRemoteBtn = false;
594 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000595 }
596 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000597 }
598 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000599 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000600/*
601 if (m_pFileTransfer->isTransferEnable()) {
602 setAllButtonsState(-1, -1, -1, -1, 1);
603 } else {
604 setAllButtonsState(-1, -1, -1, -1, 0);
605 }
606*/
607}
608
609void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000610FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000611{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000612 refreshBtnState();
613
614 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000615 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000616 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
617 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000618 }
619
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000620 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000621 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000622 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
623 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000624 }
625
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000626 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000627 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000628 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
629 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000630 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000631}