blob: 404547014c5da86c28d1b26b37609b6cd9eff6c2 [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 Syrovatsky5ae73f12005-11-30 04:15:40 +000069 if (!initFTWndMsgs()) return false;
70
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000071 m_hwndFTDialog = CreateDialogParam(m_hInstance,
72 MAKEINTRESOURCE(IDD_FILETRANSFER_DLG),
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000073 hwndParent,
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000074 (DLGPROC) FTDialogProc,
75 (LONG) this);
76
77 if (m_hwndFTDialog == NULL) return false;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +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);
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000172
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000173 switch (uMsg)
174 {
175 case WM_INITDIALOG:
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000176 _this = (FTDialog*)lParam;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000177 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
178 SetForegroundWindow(hwnd);
179 return TRUE;
180 case WM_COMMAND:
181 {
182 switch (LOWORD(wParam))
183 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000184 case IDC_FTLOCALPATH:
185 switch (HIWORD (wParam))
186 {
187 case CBN_SETFOCUS:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000188 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000189 return FALSE;
190 }
191 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000192 case IDC_FTREMOTEPATH:
193 switch (HIWORD (wParam))
194 {
195 case CBN_SETFOCUS:
196 _this->setButtonsState();
197 return FALSE;
198 }
199 break;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000200 case IDC_FTCLOSE:
201 _this->closeFTDialog();
202 return FALSE;
203 case IDC_FTLOCALUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000204 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000205 _this->onLocalOneUpFolder();
206 return FALSE;
207 case IDC_FTREMOTEUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000208 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000209 _this->onRemoteOneUpFolder();
210 return FALSE;
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000211 case IDC_FTLOCALRELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000212 _this->setButtonsState();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000213 _this->onLocalReload();
214 return FALSE;
215 case IDC_FTREMOTERELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000216 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000217 _this->onRemoteReload();
218 return FALSE;
219 case IDC_FTUPLOAD:
220 _this->onUpload();
221 return FALSE;
222 case IDC_FTDOWNLOAD:
223 _this->onDownload();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000224 return FALSE;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000225 case IDM_FTCOPY:
226 case IDM_FTRENAME:
227 case IDM_FTDELETE:
228 case IDM_FTCANCEL:
229 _this->onFTMenuCommand(LOWORD(wParam));
230 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000231 }
232 }
233 break;
234
235 case WM_NOTIFY:
236 switch (LOWORD(wParam))
237 {
238 case IDC_FTLOCALLIST:
239 switch (((LPNMHDR) lParam)->code)
240 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000241 case NM_CLICK:
242 case NM_SETFOCUS:
243 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000244 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000245 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000246 case LVN_GETDISPINFO:
247 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
248 return FALSE;
249 case LVN_ITEMACTIVATE:
250 _this->onLocalItemActivate((LPNMITEMACTIVATE) lParam);
251 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000252 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000253 _this->onLocalRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000254 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000255 }
256 break;
257 case IDC_FTREMOTELIST:
258 switch (((LPNMHDR) lParam)->code)
259 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000260 case NM_CLICK:
261 case NM_SETFOCUS:
262 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000263 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000264 case LVN_GETDISPINFO:
265 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
266 return FALSE;
267 case LVN_ITEMACTIVATE:
268 _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
269 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000270 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000271 _this->onRemoteRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000272 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000273 }
274 break;
275 }
276 break;
277 case WM_CLOSE:
278 case WM_DESTROY:
279 _this->closeFTDialog();
280 return FALSE;
281 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000282
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000283 if (_this != NULL) {
284 if (uMsg == _this->m_msgCheckTransferQueue)
285 _this->m_pFileTransfer->checkTransferQueue();
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000286
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000287 if (uMsg == _this->m_msgUploadFilePortion)
288 _this->m_pFileTransfer->uploadFilePortion();
289
290 if (uMsg == _this->m_msgDownloadFilePortion)
291 _this->m_pFileTransfer->downloadFilePortion();
292 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000293
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000294 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000295}
296
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000297void
298FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
299{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000300 if (strlen(m_szLocalPath) == 0) {
301 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
302 } else {
303 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
304 }
305 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000306}
307
308void
309FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
310{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000311 if (strlen(m_szRemotePath) == 0) {
312 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
313 } else {
314 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
315 }
316 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000317}
318
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000319void
320FTDialog::onLocalReload()
321{
322 strcpy(m_szLocalPathTmp, m_szLocalPath);
323 showLocalLVItems();
324}
325
326void
327FTDialog::onRemoteReload()
328{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000329 strcpy(m_szRemotePathTmp, m_szRemotePath);
330 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000331}
332
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000333void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000334FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000335{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000336 FolderManager fm;
337 FileInfo fileInfo;
338 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
339 fileInfo.sort();
340 m_pLocalLV->deleteAllItems();
341 m_pLocalLV->addItems(&fileInfo);
342 strcpy(m_szLocalPath, m_szLocalPathTmp);
343 SetWindowText(m_hwndLocalPath, m_szLocalPath);
344 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000345}
346
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000347void
348FTDialog::showRemoteLVItems()
349{
350 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
351}
352
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000353void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000354FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000355{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000356 pFI->sort();
357 m_pRemoteLV->deleteAllItems();
358 m_pRemoteLV->addItems(pFI);
359 strcpy(m_szRemotePath, m_szRemotePathTmp);
360 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000361 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000362}
363
364void
365FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000366{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000367 strcpy(m_szLocalPathTmp, m_szLocalPath);
368 makeOneUpFolder(m_szLocalPathTmp);
369 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000370}
371
372void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000373FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000374{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000375 strcpy(m_szRemotePathTmp, m_szRemotePath);
376 makeOneUpFolder(m_szRemotePathTmp);
377 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000378}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000379
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000380void
381FTDialog::reqFolderUnavailable()
382{
383 strcpy(m_szRemotePathTmp, m_szRemotePath);
384}
385
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000386int
387FTDialog::makeOneUpFolder(char *pPath)
388{
389 if (strcmp(pPath, "") == 0) return strlen(pPath);
390 for (int i=(strlen(pPath)-2); i>=0; i--) {
391 if (pPath[i] == '\\') {
392 pPath[i] = '\0';
393 break;
394 }
395 if (i == 0) pPath[0] = '\0';
396 }
397 return strlen(pPath);
398}
399
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000400void
401FTDialog::onUpload()
402{
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000403 FileInfo fi;
404 TransferQueue tq;
405 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
406 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD);
407 }
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000408}
409
410void
411FTDialog::onDownload()
412{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000413 MessageBox(NULL, "onDownload", "FTDialog", MB_OK);
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000414
415}
416
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000417void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000418FTDialog::onLocalRename()
419{
420 MessageBox(NULL, "onLocalRename", "FTDialog", MB_OK);
421
422}
423
424void
425FTDialog::onRemoteRename()
426{
427 MessageBox(NULL, "onRemoteRename", "FTDialog", MB_OK);
428
429}
430
431void
432FTDialog::onLocalDelete()
433{
434 MessageBox(NULL, "onLocalDelete", "FTDialog", MB_OK);
435
436}
437
438void
439FTDialog::onRemoteDelete()
440{
441 MessageBox(NULL, "onRemoteDelete", "FTDialog", MB_OK);
442
443}
444
445void
446FTDialog::onFTCancel()
447{
448 MessageBox(NULL, "onFTCancel", "FTDialog", MB_OK);
449
450}
451
452void
453FTDialog::onFTMenuCommand(int command)
454{
455 switch (command)
456 {
457 case IDM_FTCOPY:
458 {
459 switch (m_FTMenuSource)
460 {
461 case IDC_FTLOCALLIST: onUpload(); break;
462 case IDC_FTREMOTELIST: onDownload(); break;
463 default: break;
464 }
465 }
466 break;
467 case IDM_FTRENAME:
468 {
469 switch (m_FTMenuSource)
470 {
471 case IDC_FTLOCALLIST: onLocalRename(); break;
472 case IDC_FTREMOTELIST: onRemoteRename(); break;
473 default: break;
474 }
475 }
476 break;
477 case IDM_FTDELETE:
478 {
479 switch (m_FTMenuSource)
480 {
481 case IDC_FTLOCALLIST: onLocalDelete(); break;
482 case IDC_FTREMOTELIST: onRemoteDelete(); break;
483 default: break;
484 }
485 }
486 break;
487 case IDM_FTCANCEL: onFTCancel(); break;
488 default:
489 break;
490 }
491}
492
493void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000494FTDialog::onLocalRButton()
495{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000496 refreshBtnState();
497 m_FTMenuSource = IDC_FTLOCALLIST;
498 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
499 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
500 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000501}
502
503void
504FTDialog::onRemoteRButton()
505{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000506 refreshBtnState();
507 m_FTMenuSource = IDC_FTREMOTELIST;
508 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
509 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
510 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000511}
512
513void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000514FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
515 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000516{
517 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
518 HMENU hFTMenu = GetSubMenu(hMenu, 0);
519
520 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
521
522 SetForegroundWindow(m_hwndFTDialog);
523
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000524 if (copyBtnState) {
525 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
526 } else {
527 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
528 }
529 if (createFldBtnState) {
530 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
531 } else {
532 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
533 }
534 if (renameBtnState) {
535 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
536 } else {
537 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
538 }
539 if (deleteBtnState) {
540 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
541 } else {
542 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
543 }
544 if (cancelBtnState) {
545 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
546 } else {
547 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
548 }
549 DrawMenuBar(m_hwndFTDialog);
550
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000551 POINT cursorPosition;
552 GetCursorPos(&cursorPosition);
553 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000554 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000555}
556
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000557void
558FTDialog::setIcon(int dest, int idIcon)
559{
560 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
561 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
562 DestroyIcon((HICON) hIcon);
563}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000564
565void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000566FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000567{
568 if (!m_bDlgShown) return;
569
570 int locPathLen = strlen(m_szLocalPath);
571 int remPathLen = strlen(m_szRemotePath);
572
573 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000574 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000575 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000576 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000577 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
578 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000579 m_BtnState.uploadBtn = false;
580 m_BtnState.deleteLocalBtn = false;
581 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000582 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000583 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000584 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000585 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000586 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000587 m_BtnState.uploadBtn = true;
588 }
589 if (nCount == 1) {
590 m_BtnState.renameLocalBtn = true;
591 } else {
592 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000593 }
594 }
595 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000596 m_BtnState.uploadBtn = false;
597 m_BtnState.createLocalFldBtn = false;
598 m_BtnState.deleteLocalBtn = false;
599 m_BtnState.renameLocalBtn = false;
600 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000601 }
602 } else {
603 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000604 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000605 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000606 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000607 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
608 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000609 m_BtnState.downloadBtn = false;
610 m_BtnState.deleteRemoteBtn = false;
611 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000612 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000613 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000614 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000615 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000616 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000617 m_BtnState.downloadBtn = true;
618 }
619 if (nCount == 1) {
620 m_BtnState.renameRemoteBtn = true;
621 } else {
622 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000623 }
624 }
625 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000626 m_BtnState.downloadBtn = false;
627 m_BtnState.createRemoteFldBtn = false;
628 m_BtnState.deleteRemoteBtn = false;
629 m_BtnState.renameRemoteBtn = false;
630 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000631 }
632 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000633 }
634 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000635 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000636}
637
638void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000639FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000640{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000641 refreshBtnState();
642
643 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000644 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000645 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
646 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000647 }
648
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000649 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000650 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000651 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
652 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000653 }
654
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000655 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000656 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000657 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
658 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000659 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000660}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000661
662void
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000663FTDialog::setStatusText(LPCSTR format,...)
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000664{
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000665 char text[1024];
666 va_list args;
667 va_start(args, format);
668 int nSize = _vsnprintf(text, sizeof(text), format, args);
669 SetDlgItemText(m_hwndFTDialog, IDC_FTSTATUS, text);
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000670}
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000671
672void
673FTDialog::postCheckTransferQueueMsg()
674{
675 PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
676}
677
678void
679FTDialog::postUploadFilePortionMsg()
680{
681 PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0);
682}
683
684void
685FTDialog::postDownloadFilePortionMsg()
686{
687 PostMessage(m_hwndFTDialog, m_msgDownloadFilePortion, 0, 0);
688}