blob: 47e0c24023b05cc927c22c1fe7e1e59f2a182878 [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
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000105 m_hwndLocalPath = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALPATH);
106 m_hwndRemotePath = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTEPATH);
107
108 setIcon(IDC_FTLOCALUP, IDI_FTUP);
109 setIcon(IDC_FTREMOTEUP, IDI_FTUP);
110 setIcon(IDC_FTLOCALRELOAD, IDI_FTRELOAD);
111 setIcon(IDC_FTREMOTERELOAD, IDI_FTRELOAD);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000112
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000113 showLocalLVItems();
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000114 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000115
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000116 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000117}
118
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000119bool
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000120FTDialog::closeFTDialog()
121{
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000122 ShowWindow(m_hwndFTDialog, SW_HIDE);
123 m_bDlgShown = false;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000124 return true;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000125}
126
127void
128FTDialog::destroyFTDialog()
129{
130 if (m_pLocalLV != NULL) {
131 delete m_pLocalLV;
132 m_pLocalLV = NULL;
133 }
134
135 if (m_pRemoteLV != NULL) {
136 delete m_pRemoteLV;
137 m_pRemoteLV = NULL;
138 }
139
140 if (m_pProgress != NULL) {
141 delete m_pProgress;
142 m_pProgress = NULL;
143 }
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000144
145 if (DestroyWindow(m_hwndFTDialog)) m_hwndFTDialog = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000146}
147
148BOOL CALLBACK
149FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
150{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000151 FTDialog *_this = (FTDialog *) GetWindowLong(hwnd, GWL_USERDATA);
152 switch (uMsg)
153 {
154 case WM_INITDIALOG:
155 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
156 SetForegroundWindow(hwnd);
157 return TRUE;
158 case WM_COMMAND:
159 {
160 switch (LOWORD(wParam))
161 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000162 case IDC_FTLOCALPATH:
163 switch (HIWORD (wParam))
164 {
165 case CBN_SETFOCUS:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000166 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000167 return FALSE;
168 }
169 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000170 case IDC_FTREMOTEPATH:
171 switch (HIWORD (wParam))
172 {
173 case CBN_SETFOCUS:
174 _this->setButtonsState();
175 return FALSE;
176 }
177 break;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000178 case IDC_FTCLOSE:
179 _this->closeFTDialog();
180 return FALSE;
181 case IDC_FTLOCALUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000182 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000183 _this->onLocalOneUpFolder();
184 return FALSE;
185 case IDC_FTREMOTEUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000186 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000187 _this->onRemoteOneUpFolder();
188 return FALSE;
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000189 case IDC_FTLOCALRELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000190 _this->setButtonsState();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000191 _this->onLocalReload();
192 return FALSE;
193 case IDC_FTREMOTERELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000194 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000195 _this->onRemoteReload();
196 return FALSE;
197 case IDC_FTUPLOAD:
198 _this->onUpload();
199 return FALSE;
200 case IDC_FTDOWNLOAD:
201 _this->onDownload();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000202 return FALSE;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000203 case IDM_FTCOPY:
204 case IDM_FTRENAME:
205 case IDM_FTDELETE:
206 case IDM_FTCANCEL:
207 _this->onFTMenuCommand(LOWORD(wParam));
208 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000209 }
210 }
211 break;
212
213 case WM_NOTIFY:
214 switch (LOWORD(wParam))
215 {
216 case IDC_FTLOCALLIST:
217 switch (((LPNMHDR) lParam)->code)
218 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000219 case NM_CLICK:
220 case NM_SETFOCUS:
221 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000222 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000223 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000224 case LVN_GETDISPINFO:
225 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
226 return FALSE;
227 case LVN_ITEMACTIVATE:
228 _this->onLocalItemActivate((LPNMITEMACTIVATE) lParam);
229 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000230 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000231 _this->onLocalRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000232 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000233 }
234 break;
235 case IDC_FTREMOTELIST:
236 switch (((LPNMHDR) lParam)->code)
237 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000238 case NM_CLICK:
239 case NM_SETFOCUS:
240 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000241 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000242 case LVN_GETDISPINFO:
243 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
244 return FALSE;
245 case LVN_ITEMACTIVATE:
246 _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
247 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000248 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000249 _this->onRemoteRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000250 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000251 }
252 break;
253 }
254 break;
255 case WM_CLOSE:
256 case WM_DESTROY:
257 _this->closeFTDialog();
258 return FALSE;
259 }
260 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000261}
262
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000263void
264FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
265{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000266 if (strlen(m_szLocalPath) == 0) {
267 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
268 } else {
269 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
270 }
271 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000272}
273
274void
275FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
276{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000277 if (strlen(m_szRemotePath) == 0) {
278 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
279 } else {
280 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
281 }
282 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000283}
284
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000285void
286FTDialog::onLocalReload()
287{
288 strcpy(m_szLocalPathTmp, m_szLocalPath);
289 showLocalLVItems();
290}
291
292void
293FTDialog::onRemoteReload()
294{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000295 strcpy(m_szRemotePathTmp, m_szRemotePath);
296 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000297}
298
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000299void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000300FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000301{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000302 FolderManager fm;
303 FileInfo fileInfo;
304 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
305 fileInfo.sort();
306 m_pLocalLV->deleteAllItems();
307 m_pLocalLV->addItems(&fileInfo);
308 strcpy(m_szLocalPath, m_szLocalPathTmp);
309 SetWindowText(m_hwndLocalPath, m_szLocalPath);
310 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000311}
312
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000313void
314FTDialog::showRemoteLVItems()
315{
316 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
317}
318
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000319void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000320FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000321{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000322 pFI->sort();
323 m_pRemoteLV->deleteAllItems();
324 m_pRemoteLV->addItems(pFI);
325 strcpy(m_szRemotePath, m_szRemotePathTmp);
326 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000327 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000328}
329
330void
331FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000332{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000333 strcpy(m_szLocalPathTmp, m_szLocalPath);
334 makeOneUpFolder(m_szLocalPathTmp);
335 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000336}
337
338void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000339FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000340{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000341 strcpy(m_szRemotePathTmp, m_szRemotePath);
342 makeOneUpFolder(m_szRemotePathTmp);
343 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000344}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000345
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000346void
347FTDialog::reqFolderUnavailable()
348{
349 strcpy(m_szRemotePathTmp, m_szRemotePath);
350}
351
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000352int
353FTDialog::makeOneUpFolder(char *pPath)
354{
355 if (strcmp(pPath, "") == 0) return strlen(pPath);
356 for (int i=(strlen(pPath)-2); i>=0; i--) {
357 if (pPath[i] == '\\') {
358 pPath[i] = '\0';
359 break;
360 }
361 if (i == 0) pPath[0] = '\0';
362 }
363 return strlen(pPath);
364}
365
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000366void
367FTDialog::onUpload()
368{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000369 MessageBox(NULL, "onUpload", "FTDialog", MB_OK);
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000370}
371
372void
373FTDialog::onDownload()
374{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000375 MessageBox(NULL, "onDownload", "FTDialog", MB_OK);
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000376
377}
378
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000379void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000380FTDialog::onLocalRename()
381{
382 MessageBox(NULL, "onLocalRename", "FTDialog", MB_OK);
383
384}
385
386void
387FTDialog::onRemoteRename()
388{
389 MessageBox(NULL, "onRemoteRename", "FTDialog", MB_OK);
390
391}
392
393void
394FTDialog::onLocalDelete()
395{
396 MessageBox(NULL, "onLocalDelete", "FTDialog", MB_OK);
397
398}
399
400void
401FTDialog::onRemoteDelete()
402{
403 MessageBox(NULL, "onRemoteDelete", "FTDialog", MB_OK);
404
405}
406
407void
408FTDialog::onFTCancel()
409{
410 MessageBox(NULL, "onFTCancel", "FTDialog", MB_OK);
411
412}
413
414void
415FTDialog::onFTMenuCommand(int command)
416{
417 switch (command)
418 {
419 case IDM_FTCOPY:
420 {
421 switch (m_FTMenuSource)
422 {
423 case IDC_FTLOCALLIST: onUpload(); break;
424 case IDC_FTREMOTELIST: onDownload(); break;
425 default: break;
426 }
427 }
428 break;
429 case IDM_FTRENAME:
430 {
431 switch (m_FTMenuSource)
432 {
433 case IDC_FTLOCALLIST: onLocalRename(); break;
434 case IDC_FTREMOTELIST: onRemoteRename(); break;
435 default: break;
436 }
437 }
438 break;
439 case IDM_FTDELETE:
440 {
441 switch (m_FTMenuSource)
442 {
443 case IDC_FTLOCALLIST: onLocalDelete(); break;
444 case IDC_FTREMOTELIST: onRemoteDelete(); break;
445 default: break;
446 }
447 }
448 break;
449 case IDM_FTCANCEL: onFTCancel(); break;
450 default:
451 break;
452 }
453}
454
455void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000456FTDialog::onLocalRButton()
457{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000458 refreshBtnState();
459 m_FTMenuSource = IDC_FTLOCALLIST;
460 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
461 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
462 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000463}
464
465void
466FTDialog::onRemoteRButton()
467{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000468 refreshBtnState();
469 m_FTMenuSource = IDC_FTREMOTELIST;
470 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
471 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
472 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000473}
474
475void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000476FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
477 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000478{
479 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
480 HMENU hFTMenu = GetSubMenu(hMenu, 0);
481
482 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
483
484 SetForegroundWindow(m_hwndFTDialog);
485
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000486 if (copyBtnState) {
487 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
488 } else {
489 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
490 }
491 if (createFldBtnState) {
492 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
493 } else {
494 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
495 }
496 if (renameBtnState) {
497 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
498 } else {
499 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
500 }
501 if (deleteBtnState) {
502 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
503 } else {
504 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
505 }
506 if (cancelBtnState) {
507 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
508 } else {
509 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
510 }
511 DrawMenuBar(m_hwndFTDialog);
512
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000513 POINT cursorPosition;
514 GetCursorPos(&cursorPosition);
515 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000516 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000517}
518
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000519void
520FTDialog::setIcon(int dest, int idIcon)
521{
522 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
523 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
524 DestroyIcon((HICON) hIcon);
525}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000526
527void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000528FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000529{
530 if (!m_bDlgShown) return;
531
532 int locPathLen = strlen(m_szLocalPath);
533 int remPathLen = strlen(m_szRemotePath);
534
535 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000536 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000537 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000538 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000539 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
540 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000541 m_BtnState.uploadBtn = false;
542 m_BtnState.deleteLocalBtn = false;
543 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000544 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000545 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000546 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000547 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000548 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000549 m_BtnState.uploadBtn = true;
550 }
551 if (nCount == 1) {
552 m_BtnState.renameLocalBtn = true;
553 } else {
554 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000555 }
556 }
557 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000558 m_BtnState.uploadBtn = false;
559 m_BtnState.createLocalFldBtn = false;
560 m_BtnState.deleteLocalBtn = false;
561 m_BtnState.renameLocalBtn = false;
562 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000563 }
564 } else {
565 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000566 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000567 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000568 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000569 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
570 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000571 m_BtnState.downloadBtn = false;
572 m_BtnState.deleteRemoteBtn = false;
573 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000574 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000575 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000576 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000577 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000578 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000579 m_BtnState.downloadBtn = true;
580 }
581 if (nCount == 1) {
582 m_BtnState.renameRemoteBtn = true;
583 } else {
584 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000585 }
586 }
587 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000588 m_BtnState.downloadBtn = false;
589 m_BtnState.createRemoteFldBtn = false;
590 m_BtnState.deleteRemoteBtn = false;
591 m_BtnState.renameRemoteBtn = false;
592 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000593 }
594 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000595 }
596 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000597 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000598}
599
600void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000601FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000602{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000603 refreshBtnState();
604
605 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000606 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000607 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
608 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000609 }
610
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000611 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000612 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000613 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
614 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000615 }
616
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000617 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000618 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000619 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
620 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000621 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000622}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000623
624void
625FTDialog::setStatusText(char *pText)
626{
627 SetDlgItemText(m_hwndFTDialog, IDC_FTSTATUS, pText);
628}