blob: 5d691088b027f2eadc307943b02f614753529db6 [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 Syrovatsky092d9982005-12-05 09:57:05 +000029const char FTDialog::szCheckDeleteQueueText[] = "TightVNC.Viewer.CheckDeleteQueue.Msg";
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000030const char FTDialog::szCheckTransferQueueText[] = "TightVNC.Viewer.CheckTransferQueue.Msg";
31const char FTDialog::szDownloadFilePortionText[] = "TightVNC.Viewer.DownloadFilePortion.Msg";
32const char FTDialog::szUploadFilePortionText[] = "TightVNC.Viewer.UploadFilePortion.Msg";
33
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000034FTDialog::FTDialog(HINSTANCE hInst, FileTransfer *pFT)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000035{
36 m_pFileTransfer = pFT;
37 m_hInstance = hInst;
38 m_bDlgShown = false;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000039
40 m_pLocalLV = NULL;
41 m_pRemoteLV = NULL;
42 m_pProgress = NULL;
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000043
Dennis Syrovatskyec906992005-11-07 09:56:06 +000044 m_hwndFTDialog = NULL;
Dennis Syrovatskyb595e032005-11-09 06:24:25 +000045 m_hwndLocalPath = NULL;
46 m_hwndRemotePath = NULL;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000047
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000048 m_FTMenuSource = 0;
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +000049 m_dwNumStatusStrings = 0;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000050
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000051 m_szLocalPath[0] = '\0';
52 m_szRemotePath[0] = '\0';
53 m_szLocalPathTmp[0] = '\0';
54 m_szRemotePathTmp[0] = '\0';
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000055}
56
57FTDialog::~FTDialog()
58{
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000059 destroyFTDialog();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000060}
61
62bool
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000063FTDialog::createFTDialog(HWND hwndParent)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000064{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000065 if (m_hwndFTDialog != NULL) {
66 ShowWindow(m_hwndFTDialog, SW_SHOW);
67 m_bDlgShown = true;
68 return true;
69 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000070
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +000071 if (!initFTWndMsgs()) return false;
72
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000073 m_hwndFTDialog = CreateDialogParam(m_hInstance,
74 MAKEINTRESOURCE(IDD_FILETRANSFER_DLG),
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000075 hwndParent,
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000076 (DLGPROC) FTDialogProc,
77 (LONG) this);
78
79 if (m_hwndFTDialog == NULL) return false;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000080
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000081 HWND hwndLocalList = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALLIST);
82 HWND hwndRemoteList = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTELIST);
83
84 if ((hwndLocalList == NULL) || (hwndRemoteList == NULL)) {
85 destroyFTDialog();
86 return false;
87 }
88
89 m_pLocalLV = new FTListView(hwndLocalList);
90 m_pRemoteLV = new FTListView(hwndRemoteList);
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000091
92 m_pProgress = new FTProgress(m_hwndFTDialog);
93
94 if ((m_pLocalLV == NULL) || (m_pRemoteLV == NULL) || (m_pProgress == NULL)) {
95 destroyFTDialog();
96 return false;
97 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000098
99 initFTDialog();
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000100
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000101 ShowWindow(m_hwndFTDialog, SW_SHOW);
102 UpdateWindow(m_hwndFTDialog);
103 m_bDlgShown = true;
104 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000105}
106
107bool
108FTDialog::initFTDialog()
109{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000110 m_pLocalLV->initialize(m_hInstance);
111 m_pRemoteLV->initialize(m_hInstance);
112
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000113 m_hwndLocalPath = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALPATH);
114 m_hwndRemotePath = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTEPATH);
115
116 setIcon(IDC_FTLOCALUP, IDI_FTUP);
117 setIcon(IDC_FTREMOTEUP, IDI_FTUP);
118 setIcon(IDC_FTLOCALRELOAD, IDI_FTRELOAD);
119 setIcon(IDC_FTREMOTERELOAD, IDI_FTRELOAD);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000120
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000121 showLocalLVItems();
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000122 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000123
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000124 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000125}
126
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000127bool
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000128FTDialog::initFTWndMsgs()
129{
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000130 m_msgCheckDeleteQueue = RegisterWindowMessage(szCheckDeleteQueueText);
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000131 m_msgCheckTransferQueue = RegisterWindowMessage(szCheckTransferQueueText);
132 m_msgUploadFilePortion = RegisterWindowMessage(szUploadFilePortionText);
133 m_msgDownloadFilePortion = RegisterWindowMessage(szDownloadFilePortionText);
134
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000135 if ((m_msgCheckDeleteQueue) && (m_msgCheckTransferQueue) &&
136 (m_msgUploadFilePortion) && (m_msgDownloadFilePortion)) return true;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000137
138 return false;
139}
140
141bool
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000142FTDialog::closeFTDialog()
143{
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000144 ShowWindow(m_hwndFTDialog, SW_HIDE);
145 m_bDlgShown = false;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000146 return true;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000147}
148
149void
150FTDialog::destroyFTDialog()
151{
152 if (m_pLocalLV != NULL) {
153 delete m_pLocalLV;
154 m_pLocalLV = NULL;
155 }
156
157 if (m_pRemoteLV != NULL) {
158 delete m_pRemoteLV;
159 m_pRemoteLV = NULL;
160 }
161
162 if (m_pProgress != NULL) {
163 delete m_pProgress;
164 m_pProgress = NULL;
165 }
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000166
167 if (DestroyWindow(m_hwndFTDialog)) m_hwndFTDialog = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000168}
169
170BOOL CALLBACK
171FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
172{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000173 FTDialog *_this = (FTDialog *) GetWindowLong(hwnd, GWL_USERDATA);
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000174
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000175 switch (uMsg)
176 {
177 case WM_INITDIALOG:
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000178 _this = (FTDialog*)lParam;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000179 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
180 SetForegroundWindow(hwnd);
181 return TRUE;
182 case WM_COMMAND:
183 {
184 switch (LOWORD(wParam))
185 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000186 case IDC_FTLOCALPATH:
187 switch (HIWORD (wParam))
188 {
189 case CBN_SETFOCUS:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000190 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000191 return FALSE;
192 }
193 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000194 case IDC_FTREMOTEPATH:
195 switch (HIWORD (wParam))
196 {
197 case CBN_SETFOCUS:
198 _this->setButtonsState();
199 return FALSE;
200 }
201 break;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000202 case IDC_FTCLOSE:
203 _this->closeFTDialog();
204 return FALSE;
205 case IDC_FTLOCALUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000206 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000207 _this->onLocalOneUpFolder();
208 return FALSE;
209 case IDC_FTREMOTEUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000210 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000211 _this->onRemoteOneUpFolder();
212 return FALSE;
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000213 case IDC_FTLOCALRELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000214 _this->setButtonsState();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000215 _this->onLocalReload();
216 return FALSE;
217 case IDC_FTREMOTERELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000218 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000219 _this->onRemoteReload();
220 return FALSE;
221 case IDC_FTUPLOAD:
222 _this->onUpload();
223 return FALSE;
224 case IDC_FTDOWNLOAD:
225 _this->onDownload();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000226 return FALSE;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000227 case IDM_FTCOPY:
228 case IDM_FTRENAME:
229 case IDM_FTDELETE:
230 case IDM_FTCANCEL:
231 _this->onFTMenuCommand(LOWORD(wParam));
232 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000233 }
234 }
235 break;
236
237 case WM_NOTIFY:
238 switch (LOWORD(wParam))
239 {
240 case IDC_FTLOCALLIST:
241 switch (((LPNMHDR) lParam)->code)
242 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000243 case NM_CLICK:
244 case NM_SETFOCUS:
245 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000246 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000247 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000248 case LVN_GETDISPINFO:
249 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
250 return FALSE;
251 case LVN_ITEMACTIVATE:
252 _this->onLocalItemActivate((LPNMITEMACTIVATE) lParam);
253 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000254 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000255 _this->onLocalRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000256 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000257 }
258 break;
259 case IDC_FTREMOTELIST:
260 switch (((LPNMHDR) lParam)->code)
261 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000262 case NM_CLICK:
263 case NM_SETFOCUS:
264 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000265 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000266 case LVN_GETDISPINFO:
267 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
268 return FALSE;
269 case LVN_ITEMACTIVATE:
270 _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
271 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000272 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000273 _this->onRemoteRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000274 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000275 }
276 break;
277 }
278 break;
279 case WM_CLOSE:
280 case WM_DESTROY:
281 _this->closeFTDialog();
282 return FALSE;
283 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000284
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000285 if (_this != NULL) {
286 if (uMsg == _this->m_msgCheckTransferQueue)
287 _this->m_pFileTransfer->checkTransferQueue();
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000288
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000289 if (uMsg == _this->m_msgUploadFilePortion)
290 _this->m_pFileTransfer->uploadFilePortion();
291
292 if (uMsg == _this->m_msgDownloadFilePortion)
293 _this->m_pFileTransfer->downloadFilePortion();
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000294
295 if (uMsg == _this->m_msgCheckDeleteQueue)
296 _this->m_pFileTransfer->checkDeleteQueue();
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000297 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000298
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000299 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000300}
301
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000302void
303FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
304{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000305 if (strlen(m_szLocalPath) == 0) {
306 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
307 } else {
308 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
309 }
310 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000311}
312
313void
314FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
315{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000316 if (strlen(m_szRemotePath) == 0) {
317 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
318 } else {
319 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
320 }
321 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000322}
323
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000324void
325FTDialog::onLocalReload()
326{
327 strcpy(m_szLocalPathTmp, m_szLocalPath);
328 showLocalLVItems();
329}
330
331void
332FTDialog::onRemoteReload()
333{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000334 strcpy(m_szRemotePathTmp, m_szRemotePath);
335 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000336}
337
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000338void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000339FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000340{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000341 FolderManager fm;
342 FileInfo fileInfo;
343 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
344 fileInfo.sort();
345 m_pLocalLV->deleteAllItems();
346 m_pLocalLV->addItems(&fileInfo);
347 strcpy(m_szLocalPath, m_szLocalPathTmp);
348 SetWindowText(m_hwndLocalPath, m_szLocalPath);
349 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000350}
351
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000352void
353FTDialog::showRemoteLVItems()
354{
355 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
356}
357
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000358void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000359FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000360{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000361 pFI->sort();
362 m_pRemoteLV->deleteAllItems();
363 m_pRemoteLV->addItems(pFI);
364 strcpy(m_szRemotePath, m_szRemotePathTmp);
365 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000366 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000367}
368
369void
370FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000371{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000372 strcpy(m_szLocalPathTmp, m_szLocalPath);
373 makeOneUpFolder(m_szLocalPathTmp);
374 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000375}
376
377void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000378FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000379{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000380 strcpy(m_szRemotePathTmp, m_szRemotePath);
381 makeOneUpFolder(m_szRemotePathTmp);
382 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000383}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000384
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000385void
386FTDialog::reqFolderUnavailable()
387{
388 strcpy(m_szRemotePathTmp, m_szRemotePath);
389}
390
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000391int
392FTDialog::makeOneUpFolder(char *pPath)
393{
394 if (strcmp(pPath, "") == 0) return strlen(pPath);
395 for (int i=(strlen(pPath)-2); i>=0; i--) {
396 if (pPath[i] == '\\') {
397 pPath[i] = '\0';
398 break;
399 }
400 if (i == 0) pPath[0] = '\0';
401 }
402 return strlen(pPath);
403}
404
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000405void
406FTDialog::onUpload()
407{
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000408 FileInfo fi;
409 TransferQueue tq;
410 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
411 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD);
412 }
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000413}
414
415void
416FTDialog::onDownload()
417{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000418 MessageBox(NULL, "onDownload", "FTDialog", MB_OK);
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000419
420}
421
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000422void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000423FTDialog::onLocalRename()
424{
425 MessageBox(NULL, "onLocalRename", "FTDialog", MB_OK);
426
427}
428
429void
430FTDialog::onRemoteRename()
431{
432 MessageBox(NULL, "onRemoteRename", "FTDialog", MB_OK);
433
434}
435
436void
437FTDialog::onLocalDelete()
438{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000439 FileInfo fi;
440 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
441 m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL);
442 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000443}
444
445void
446FTDialog::onRemoteDelete()
447{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000448 FileInfo fi;
449 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
450 m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE);
451 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000452}
453
454void
455FTDialog::onFTCancel()
456{
457 MessageBox(NULL, "onFTCancel", "FTDialog", MB_OK);
458
459}
460
461void
462FTDialog::onFTMenuCommand(int command)
463{
464 switch (command)
465 {
466 case IDM_FTCOPY:
467 {
468 switch (m_FTMenuSource)
469 {
470 case IDC_FTLOCALLIST: onUpload(); break;
471 case IDC_FTREMOTELIST: onDownload(); break;
472 default: break;
473 }
474 }
475 break;
476 case IDM_FTRENAME:
477 {
478 switch (m_FTMenuSource)
479 {
480 case IDC_FTLOCALLIST: onLocalRename(); break;
481 case IDC_FTREMOTELIST: onRemoteRename(); break;
482 default: break;
483 }
484 }
485 break;
486 case IDM_FTDELETE:
487 {
488 switch (m_FTMenuSource)
489 {
490 case IDC_FTLOCALLIST: onLocalDelete(); break;
491 case IDC_FTREMOTELIST: onRemoteDelete(); break;
492 default: break;
493 }
494 }
495 break;
496 case IDM_FTCANCEL: onFTCancel(); break;
497 default:
498 break;
499 }
500}
501
502void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000503FTDialog::onLocalRButton()
504{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000505 refreshBtnState();
506 m_FTMenuSource = IDC_FTLOCALLIST;
507 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
508 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
509 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000510}
511
512void
513FTDialog::onRemoteRButton()
514{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000515 refreshBtnState();
516 m_FTMenuSource = IDC_FTREMOTELIST;
517 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
518 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
519 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000520}
521
522void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000523FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
524 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000525{
526 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
527 HMENU hFTMenu = GetSubMenu(hMenu, 0);
528
529 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
530
531 SetForegroundWindow(m_hwndFTDialog);
532
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000533 if (copyBtnState) {
534 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
535 } else {
536 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
537 }
538 if (createFldBtnState) {
539 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
540 } else {
541 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
542 }
543 if (renameBtnState) {
544 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
545 } else {
546 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
547 }
548 if (deleteBtnState) {
549 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
550 } else {
551 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
552 }
553 if (cancelBtnState) {
554 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
555 } else {
556 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
557 }
558 DrawMenuBar(m_hwndFTDialog);
559
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000560 POINT cursorPosition;
561 GetCursorPos(&cursorPosition);
562 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000563 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000564}
565
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000566void
567FTDialog::setIcon(int dest, int idIcon)
568{
569 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
570 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
571 DestroyIcon((HICON) hIcon);
572}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000573
574void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000575FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000576{
577 if (!m_bDlgShown) return;
578
579 int locPathLen = strlen(m_szLocalPath);
580 int remPathLen = strlen(m_szRemotePath);
581
582 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000583 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000584 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000585 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000586 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
587 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000588 m_BtnState.uploadBtn = false;
589 m_BtnState.deleteLocalBtn = false;
590 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000591 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000592 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000593 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000594 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000595 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000596 m_BtnState.uploadBtn = true;
597 }
598 if (nCount == 1) {
599 m_BtnState.renameLocalBtn = true;
600 } else {
601 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000602 }
603 }
604 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000605 m_BtnState.uploadBtn = false;
606 m_BtnState.createLocalFldBtn = false;
607 m_BtnState.deleteLocalBtn = false;
608 m_BtnState.renameLocalBtn = false;
609 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000610 }
611 } else {
612 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000613 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000614 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000615 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000616 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
617 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000618 m_BtnState.downloadBtn = false;
619 m_BtnState.deleteRemoteBtn = false;
620 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000621 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000622 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000623 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000624 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000625 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000626 m_BtnState.downloadBtn = true;
627 }
628 if (nCount == 1) {
629 m_BtnState.renameRemoteBtn = true;
630 } else {
631 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000632 }
633 }
634 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000635 m_BtnState.downloadBtn = false;
636 m_BtnState.createRemoteFldBtn = false;
637 m_BtnState.deleteRemoteBtn = false;
638 m_BtnState.renameRemoteBtn = false;
639 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000640 }
641 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000642 }
643 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000644 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000645}
646
647void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000648FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000649{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000650 refreshBtnState();
651
652 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000653 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000654 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
655 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000656 }
657
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000658 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000659 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000660 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
661 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000662 }
663
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000664 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000665 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000666 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
667 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000668 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000669}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000670
671void
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000672FTDialog::setStatusText(LPCSTR format,...)
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000673{
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000674 char text[1024];
675 va_list args;
676 va_start(args, format);
677 int nSize = _vsnprintf(text, sizeof(text), format, args);
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +0000678
679 HWND hStatusBox = GetDlgItem(m_hwndFTDialog, IDC_FTSTATUS);
680
681 LRESULT lRes = SendMessage(hStatusBox, (UINT) CB_INSERTSTRING, (WPARAM) 0, (LPARAM) text);
682 if ((lRes != CB_ERR) && (lRes != CB_ERRSPACE)) {
683 lRes = SendMessage(hStatusBox, (UINT) CB_SETCURSEL, (WPARAM) lRes, (LPARAM) 0);
684 }
685
686 m_dwNumStatusStrings++;
687 if (m_dwNumStatusStrings > FT_MAX_STATUS_STRINGS) {
688 int numItems = SendMessage(hStatusBox, (UINT) CB_GETCOUNT, (WPARAM) 0, (LPARAM) 0);
689 if (numItems != CB_ERR) {
690 m_dwNumStatusStrings--;
691 SendMessage(hStatusBox, (UINT) CB_DELETESTRING, (WPARAM) numItems - 1, (LPARAM) 0);
692 }
693 }
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000694}
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000695
696void
697FTDialog::postCheckTransferQueueMsg()
698{
699 PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
700}
701
702void
703FTDialog::postUploadFilePortionMsg()
704{
705 PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0);
706}
707
708void
709FTDialog::postDownloadFilePortionMsg()
710{
711 PostMessage(m_hwndFTDialog, m_msgDownloadFilePortion, 0, 0);
712}
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000713
714void
715FTDialog::postCheckDeleteQueueMsg()
716{
717 PostMessage(m_hwndFTDialog, m_msgCheckDeleteQueue, 0, 0);
718}