blob: 8734060641f42f7637e0aebe98c869ea345a9baf [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{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000434 FileInfo fi;
435 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
436 m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL);
437 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000438}
439
440void
441FTDialog::onRemoteDelete()
442{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000443 FileInfo fi;
444 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
445 m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE);
446 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000447}
448
449void
450FTDialog::onFTCancel()
451{
452 MessageBox(NULL, "onFTCancel", "FTDialog", MB_OK);
453
454}
455
456void
457FTDialog::onFTMenuCommand(int command)
458{
459 switch (command)
460 {
461 case IDM_FTCOPY:
462 {
463 switch (m_FTMenuSource)
464 {
465 case IDC_FTLOCALLIST: onUpload(); break;
466 case IDC_FTREMOTELIST: onDownload(); break;
467 default: break;
468 }
469 }
470 break;
471 case IDM_FTRENAME:
472 {
473 switch (m_FTMenuSource)
474 {
475 case IDC_FTLOCALLIST: onLocalRename(); break;
476 case IDC_FTREMOTELIST: onRemoteRename(); break;
477 default: break;
478 }
479 }
480 break;
481 case IDM_FTDELETE:
482 {
483 switch (m_FTMenuSource)
484 {
485 case IDC_FTLOCALLIST: onLocalDelete(); break;
486 case IDC_FTREMOTELIST: onRemoteDelete(); break;
487 default: break;
488 }
489 }
490 break;
491 case IDM_FTCANCEL: onFTCancel(); break;
492 default:
493 break;
494 }
495}
496
497void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000498FTDialog::onLocalRButton()
499{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000500 refreshBtnState();
501 m_FTMenuSource = IDC_FTLOCALLIST;
502 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
503 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
504 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000505}
506
507void
508FTDialog::onRemoteRButton()
509{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000510 refreshBtnState();
511 m_FTMenuSource = IDC_FTREMOTELIST;
512 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
513 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
514 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000515}
516
517void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000518FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
519 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000520{
521 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
522 HMENU hFTMenu = GetSubMenu(hMenu, 0);
523
524 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
525
526 SetForegroundWindow(m_hwndFTDialog);
527
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000528 if (copyBtnState) {
529 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
530 } else {
531 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
532 }
533 if (createFldBtnState) {
534 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
535 } else {
536 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
537 }
538 if (renameBtnState) {
539 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
540 } else {
541 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
542 }
543 if (deleteBtnState) {
544 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
545 } else {
546 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
547 }
548 if (cancelBtnState) {
549 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
550 } else {
551 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
552 }
553 DrawMenuBar(m_hwndFTDialog);
554
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000555 POINT cursorPosition;
556 GetCursorPos(&cursorPosition);
557 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000558 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000559}
560
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000561void
562FTDialog::setIcon(int dest, int idIcon)
563{
564 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
565 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
566 DestroyIcon((HICON) hIcon);
567}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000568
569void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000570FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000571{
572 if (!m_bDlgShown) return;
573
574 int locPathLen = strlen(m_szLocalPath);
575 int remPathLen = strlen(m_szRemotePath);
576
577 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000578 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000579 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000580 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000581 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
582 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000583 m_BtnState.uploadBtn = false;
584 m_BtnState.deleteLocalBtn = false;
585 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000586 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000587 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000588 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000589 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000590 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000591 m_BtnState.uploadBtn = true;
592 }
593 if (nCount == 1) {
594 m_BtnState.renameLocalBtn = true;
595 } else {
596 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000597 }
598 }
599 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000600 m_BtnState.uploadBtn = false;
601 m_BtnState.createLocalFldBtn = false;
602 m_BtnState.deleteLocalBtn = false;
603 m_BtnState.renameLocalBtn = false;
604 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000605 }
606 } else {
607 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000608 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000609 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000610 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000611 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
612 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000613 m_BtnState.downloadBtn = false;
614 m_BtnState.deleteRemoteBtn = false;
615 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000616 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000617 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000618 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000619 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000620 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000621 m_BtnState.downloadBtn = true;
622 }
623 if (nCount == 1) {
624 m_BtnState.renameRemoteBtn = true;
625 } else {
626 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000627 }
628 }
629 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000630 m_BtnState.downloadBtn = false;
631 m_BtnState.createRemoteFldBtn = false;
632 m_BtnState.deleteRemoteBtn = false;
633 m_BtnState.renameRemoteBtn = false;
634 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000635 }
636 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000637 }
638 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000639 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000640}
641
642void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000643FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000644{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000645 refreshBtnState();
646
647 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000648 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000649 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
650 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000651 }
652
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000653 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000654 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000655 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
656 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000657 }
658
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000659 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000660 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000661 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
662 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000663 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000664}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000665
666void
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000667FTDialog::setStatusText(LPCSTR format,...)
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000668{
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000669 char text[1024];
670 va_list args;
671 va_start(args, format);
672 int nSize = _vsnprintf(text, sizeof(text), format, args);
673 SetDlgItemText(m_hwndFTDialog, IDC_FTSTATUS, text);
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000674}
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000675
676void
677FTDialog::postCheckTransferQueueMsg()
678{
679 PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
680}
681
682void
683FTDialog::postUploadFilePortionMsg()
684{
685 PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0);
686}
687
688void
689FTDialog::postDownloadFilePortionMsg()
690{
691 PostMessage(m_hwndFTDialog, m_msgDownloadFilePortion, 0, 0);
692}