blob: 8acebd402ce14c419655b29ac5d9064aa88413ee [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 Syrovatsky13b4d4c2005-11-28 08:14:18 +000029const char FTDialog::szCheckTransferQueueText[] = "TightVNC.Viewer.CheckTransferQueue.Msg";
30const char FTDialog::szDownloadFilePortionText[] = "TightVNC.Viewer.DownloadFilePortion.Msg";
31const char FTDialog::szUploadFilePortionText[] = "TightVNC.Viewer.UploadFilePortion.Msg";
32
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000033FTDialog::FTDialog(HINSTANCE hInst, FileTransfer *pFT)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000034{
35 m_pFileTransfer = pFT;
36 m_hInstance = hInst;
37 m_bDlgShown = false;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000038
39 m_pLocalLV = NULL;
40 m_pRemoteLV = NULL;
41 m_pProgress = NULL;
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000042
Dennis Syrovatskyec906992005-11-07 09:56:06 +000043 m_hwndFTDialog = NULL;
Dennis Syrovatskyb595e032005-11-09 06:24:25 +000044 m_hwndLocalPath = NULL;
45 m_hwndRemotePath = NULL;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000046
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000047 m_FTMenuSource = 0;
48
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000049 m_szLocalPath[0] = '\0';
50 m_szRemotePath[0] = '\0';
51 m_szLocalPathTmp[0] = '\0';
52 m_szRemotePathTmp[0] = '\0';
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000053}
54
55FTDialog::~FTDialog()
56{
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000057 destroyFTDialog();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000058}
59
60bool
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000061FTDialog::createFTDialog(HWND hwndParent)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000062{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000063 if (m_hwndFTDialog != NULL) {
64 ShowWindow(m_hwndFTDialog, SW_SHOW);
65 m_bDlgShown = true;
66 return true;
67 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000068
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000069 m_hwndFTDialog = CreateDialogParam(m_hInstance,
70 MAKEINTRESOURCE(IDD_FILETRANSFER_DLG),
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000071 hwndParent,
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000072 (DLGPROC) FTDialogProc,
73 (LONG) this);
74
75 if (m_hwndFTDialog == NULL) return false;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000076
77 if (!initFTWndMsgs()) return false;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000078
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000079 HWND hwndLocalList = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALLIST);
80 HWND hwndRemoteList = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTELIST);
81
82 if ((hwndLocalList == NULL) || (hwndRemoteList == NULL)) {
83 destroyFTDialog();
84 return false;
85 }
86
87 m_pLocalLV = new FTListView(hwndLocalList);
88 m_pRemoteLV = new FTListView(hwndRemoteList);
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000089
90 m_pProgress = new FTProgress(m_hwndFTDialog);
91
92 if ((m_pLocalLV == NULL) || (m_pRemoteLV == NULL) || (m_pProgress == NULL)) {
93 destroyFTDialog();
94 return false;
95 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000096
97 initFTDialog();
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000098
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000099 ShowWindow(m_hwndFTDialog, SW_SHOW);
100 UpdateWindow(m_hwndFTDialog);
101 m_bDlgShown = true;
102 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000103}
104
105bool
106FTDialog::initFTDialog()
107{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000108 m_pLocalLV->initialize(m_hInstance);
109 m_pRemoteLV->initialize(m_hInstance);
110
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000111 m_hwndLocalPath = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALPATH);
112 m_hwndRemotePath = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTEPATH);
113
114 setIcon(IDC_FTLOCALUP, IDI_FTUP);
115 setIcon(IDC_FTREMOTEUP, IDI_FTUP);
116 setIcon(IDC_FTLOCALRELOAD, IDI_FTRELOAD);
117 setIcon(IDC_FTREMOTERELOAD, IDI_FTRELOAD);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000118
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000119 showLocalLVItems();
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000120 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000121
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000122 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000123}
124
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000125bool
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000126FTDialog::initFTWndMsgs()
127{
128 m_msgCheckTransferQueue = RegisterWindowMessage(szCheckTransferQueueText);
129 m_msgUploadFilePortion = RegisterWindowMessage(szUploadFilePortionText);
130 m_msgDownloadFilePortion = RegisterWindowMessage(szDownloadFilePortionText);
131
132 if ((m_msgCheckTransferQueue) &&
133 (m_msgUploadFilePortion) &&
134 (m_msgDownloadFilePortion)) return true;
135
136 return false;
137}
138
139bool
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000140FTDialog::closeFTDialog()
141{
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000142 ShowWindow(m_hwndFTDialog, SW_HIDE);
143 m_bDlgShown = false;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000144 return true;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000145}
146
147void
148FTDialog::destroyFTDialog()
149{
150 if (m_pLocalLV != NULL) {
151 delete m_pLocalLV;
152 m_pLocalLV = NULL;
153 }
154
155 if (m_pRemoteLV != NULL) {
156 delete m_pRemoteLV;
157 m_pRemoteLV = NULL;
158 }
159
160 if (m_pProgress != NULL) {
161 delete m_pProgress;
162 m_pProgress = NULL;
163 }
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000164
165 if (DestroyWindow(m_hwndFTDialog)) m_hwndFTDialog = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000166}
167
168BOOL CALLBACK
169FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
170{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000171 FTDialog *_this = (FTDialog *) GetWindowLong(hwnd, GWL_USERDATA);
172 switch (uMsg)
173 {
174 case WM_INITDIALOG:
175 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
176 SetForegroundWindow(hwnd);
177 return TRUE;
178 case WM_COMMAND:
179 {
180 switch (LOWORD(wParam))
181 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000182 case IDC_FTLOCALPATH:
183 switch (HIWORD (wParam))
184 {
185 case CBN_SETFOCUS:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000186 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000187 return FALSE;
188 }
189 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000190 case IDC_FTREMOTEPATH:
191 switch (HIWORD (wParam))
192 {
193 case CBN_SETFOCUS:
194 _this->setButtonsState();
195 return FALSE;
196 }
197 break;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000198 case IDC_FTCLOSE:
199 _this->closeFTDialog();
200 return FALSE;
201 case IDC_FTLOCALUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000202 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000203 _this->onLocalOneUpFolder();
204 return FALSE;
205 case IDC_FTREMOTEUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000206 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000207 _this->onRemoteOneUpFolder();
208 return FALSE;
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000209 case IDC_FTLOCALRELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000210 _this->setButtonsState();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000211 _this->onLocalReload();
212 return FALSE;
213 case IDC_FTREMOTERELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000214 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000215 _this->onRemoteReload();
216 return FALSE;
217 case IDC_FTUPLOAD:
218 _this->onUpload();
219 return FALSE;
220 case IDC_FTDOWNLOAD:
221 _this->onDownload();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000222 return FALSE;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000223 case IDM_FTCOPY:
224 case IDM_FTRENAME:
225 case IDM_FTDELETE:
226 case IDM_FTCANCEL:
227 _this->onFTMenuCommand(LOWORD(wParam));
228 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000229 }
230 }
231 break;
232
233 case WM_NOTIFY:
234 switch (LOWORD(wParam))
235 {
236 case IDC_FTLOCALLIST:
237 switch (((LPNMHDR) lParam)->code)
238 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000239 case NM_CLICK:
240 case NM_SETFOCUS:
241 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000242 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000243 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000244 case LVN_GETDISPINFO:
245 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
246 return FALSE;
247 case LVN_ITEMACTIVATE:
248 _this->onLocalItemActivate((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->onLocalRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000252 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000253 }
254 break;
255 case IDC_FTREMOTELIST:
256 switch (((LPNMHDR) lParam)->code)
257 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000258 case NM_CLICK:
259 case NM_SETFOCUS:
260 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000261 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000262 case LVN_GETDISPINFO:
263 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
264 return FALSE;
265 case LVN_ITEMACTIVATE:
266 _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
267 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000268 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000269 _this->onRemoteRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000270 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000271 }
272 break;
273 }
274 break;
275 case WM_CLOSE:
276 case WM_DESTROY:
277 _this->closeFTDialog();
278 return FALSE;
279 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000280
281 if (uMsg == _this->m_msgCheckTransferQueue)
282 _this->m_pFileTransfer->checkTransferQueue();
283
284 if (uMsg == _this->m_msgDownloadFilePortion)
285 _this->m_pFileTransfer->downloadFilePortion();
286
287 if (uMsg == _this->m_msgUploadFilePortion)
288 _this->m_pFileTransfer->uploadFilePortion();
289
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000290 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000291}
292
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000293void
294FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
295{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000296 if (strlen(m_szLocalPath) == 0) {
297 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
298 } else {
299 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
300 }
301 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000302}
303
304void
305FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
306{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000307 if (strlen(m_szRemotePath) == 0) {
308 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
309 } else {
310 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
311 }
312 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000313}
314
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000315void
316FTDialog::onLocalReload()
317{
318 strcpy(m_szLocalPathTmp, m_szLocalPath);
319 showLocalLVItems();
320}
321
322void
323FTDialog::onRemoteReload()
324{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000325 strcpy(m_szRemotePathTmp, m_szRemotePath);
326 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000327}
328
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000329void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000330FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000331{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000332 FolderManager fm;
333 FileInfo fileInfo;
334 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
335 fileInfo.sort();
336 m_pLocalLV->deleteAllItems();
337 m_pLocalLV->addItems(&fileInfo);
338 strcpy(m_szLocalPath, m_szLocalPathTmp);
339 SetWindowText(m_hwndLocalPath, m_szLocalPath);
340 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000341}
342
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000343void
344FTDialog::showRemoteLVItems()
345{
346 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
347}
348
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000349void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000350FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000351{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000352 pFI->sort();
353 m_pRemoteLV->deleteAllItems();
354 m_pRemoteLV->addItems(pFI);
355 strcpy(m_szRemotePath, m_szRemotePathTmp);
356 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000357 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000358}
359
360void
361FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000362{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000363 strcpy(m_szLocalPathTmp, m_szLocalPath);
364 makeOneUpFolder(m_szLocalPathTmp);
365 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000366}
367
368void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000369FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000370{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000371 strcpy(m_szRemotePathTmp, m_szRemotePath);
372 makeOneUpFolder(m_szRemotePathTmp);
373 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000374}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000375
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000376void
377FTDialog::reqFolderUnavailable()
378{
379 strcpy(m_szRemotePathTmp, m_szRemotePath);
380}
381
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000382int
383FTDialog::makeOneUpFolder(char *pPath)
384{
385 if (strcmp(pPath, "") == 0) return strlen(pPath);
386 for (int i=(strlen(pPath)-2); i>=0; i--) {
387 if (pPath[i] == '\\') {
388 pPath[i] = '\0';
389 break;
390 }
391 if (i == 0) pPath[0] = '\0';
392 }
393 return strlen(pPath);
394}
395
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000396void
397FTDialog::onUpload()
398{
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000399 FileInfo fi;
400 TransferQueue tq;
401 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
402 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD);
403 }
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000404}
405
406void
407FTDialog::onDownload()
408{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000409 MessageBox(NULL, "onDownload", "FTDialog", MB_OK);
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000410
411}
412
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000413void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000414FTDialog::onLocalRename()
415{
416 MessageBox(NULL, "onLocalRename", "FTDialog", MB_OK);
417
418}
419
420void
421FTDialog::onRemoteRename()
422{
423 MessageBox(NULL, "onRemoteRename", "FTDialog", MB_OK);
424
425}
426
427void
428FTDialog::onLocalDelete()
429{
430 MessageBox(NULL, "onLocalDelete", "FTDialog", MB_OK);
431
432}
433
434void
435FTDialog::onRemoteDelete()
436{
437 MessageBox(NULL, "onRemoteDelete", "FTDialog", MB_OK);
438
439}
440
441void
442FTDialog::onFTCancel()
443{
444 MessageBox(NULL, "onFTCancel", "FTDialog", MB_OK);
445
446}
447
448void
449FTDialog::onFTMenuCommand(int command)
450{
451 switch (command)
452 {
453 case IDM_FTCOPY:
454 {
455 switch (m_FTMenuSource)
456 {
457 case IDC_FTLOCALLIST: onUpload(); break;
458 case IDC_FTREMOTELIST: onDownload(); break;
459 default: break;
460 }
461 }
462 break;
463 case IDM_FTRENAME:
464 {
465 switch (m_FTMenuSource)
466 {
467 case IDC_FTLOCALLIST: onLocalRename(); break;
468 case IDC_FTREMOTELIST: onRemoteRename(); break;
469 default: break;
470 }
471 }
472 break;
473 case IDM_FTDELETE:
474 {
475 switch (m_FTMenuSource)
476 {
477 case IDC_FTLOCALLIST: onLocalDelete(); break;
478 case IDC_FTREMOTELIST: onRemoteDelete(); break;
479 default: break;
480 }
481 }
482 break;
483 case IDM_FTCANCEL: onFTCancel(); break;
484 default:
485 break;
486 }
487}
488
489void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000490FTDialog::onLocalRButton()
491{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000492 refreshBtnState();
493 m_FTMenuSource = IDC_FTLOCALLIST;
494 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
495 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
496 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000497}
498
499void
500FTDialog::onRemoteRButton()
501{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000502 refreshBtnState();
503 m_FTMenuSource = IDC_FTREMOTELIST;
504 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
505 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
506 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000507}
508
509void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000510FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
511 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000512{
513 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
514 HMENU hFTMenu = GetSubMenu(hMenu, 0);
515
516 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
517
518 SetForegroundWindow(m_hwndFTDialog);
519
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000520 if (copyBtnState) {
521 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
522 } else {
523 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
524 }
525 if (createFldBtnState) {
526 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
527 } else {
528 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
529 }
530 if (renameBtnState) {
531 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
532 } else {
533 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
534 }
535 if (deleteBtnState) {
536 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
537 } else {
538 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
539 }
540 if (cancelBtnState) {
541 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
542 } else {
543 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
544 }
545 DrawMenuBar(m_hwndFTDialog);
546
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000547 POINT cursorPosition;
548 GetCursorPos(&cursorPosition);
549 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000550 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000551}
552
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000553void
554FTDialog::setIcon(int dest, int idIcon)
555{
556 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
557 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
558 DestroyIcon((HICON) hIcon);
559}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000560
561void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000562FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000563{
564 if (!m_bDlgShown) return;
565
566 int locPathLen = strlen(m_szLocalPath);
567 int remPathLen = strlen(m_szRemotePath);
568
569 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000570 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000571 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000572 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000573 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
574 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000575 m_BtnState.uploadBtn = false;
576 m_BtnState.deleteLocalBtn = false;
577 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000578 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000579 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000580 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000581 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000582 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000583 m_BtnState.uploadBtn = true;
584 }
585 if (nCount == 1) {
586 m_BtnState.renameLocalBtn = true;
587 } else {
588 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000589 }
590 }
591 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000592 m_BtnState.uploadBtn = false;
593 m_BtnState.createLocalFldBtn = false;
594 m_BtnState.deleteLocalBtn = false;
595 m_BtnState.renameLocalBtn = false;
596 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000597 }
598 } else {
599 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000600 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000601 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000602 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000603 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
604 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000605 m_BtnState.downloadBtn = false;
606 m_BtnState.deleteRemoteBtn = false;
607 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000608 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000609 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000610 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000611 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000612 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000613 m_BtnState.downloadBtn = true;
614 }
615 if (nCount == 1) {
616 m_BtnState.renameRemoteBtn = true;
617 } else {
618 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000619 }
620 }
621 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000622 m_BtnState.downloadBtn = false;
623 m_BtnState.createRemoteFldBtn = false;
624 m_BtnState.deleteRemoteBtn = false;
625 m_BtnState.renameRemoteBtn = false;
626 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000627 }
628 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000629 }
630 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000631 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000632}
633
634void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000635FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000636{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000637 refreshBtnState();
638
639 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000640 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000641 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
642 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000643 }
644
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000645 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000646 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000647 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
648 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000649 }
650
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000651 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000652 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000653 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
654 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000655 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000656}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000657
658void
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000659FTDialog::setStatusText(LPCSTR format,...)
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000660{
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000661 char text[1024];
662 va_list args;
663 va_start(args, format);
664 int nSize = _vsnprintf(text, sizeof(text), format, args);
665 SetDlgItemText(m_hwndFTDialog, IDC_FTSTATUS, text);
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000666}
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000667
668void
669FTDialog::postCheckTransferQueueMsg()
670{
671 PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
672}
673
674void
675FTDialog::postUploadFilePortionMsg()
676{
677 PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0);
678}
679
680void
681FTDialog::postDownloadFilePortionMsg()
682{
683 PostMessage(m_hwndFTDialog, m_msgDownloadFilePortion, 0, 0);
684}