blob: 683547b007714b238f470c9a7849fc65b44b7c6a [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;
49
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000050 m_szLocalPath[0] = '\0';
51 m_szRemotePath[0] = '\0';
52 m_szLocalPathTmp[0] = '\0';
53 m_szRemotePathTmp[0] = '\0';
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000054}
55
56FTDialog::~FTDialog()
57{
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000058 destroyFTDialog();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000059}
60
61bool
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000062FTDialog::createFTDialog(HWND hwndParent)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000063{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000064 if (m_hwndFTDialog != NULL) {
65 ShowWindow(m_hwndFTDialog, SW_SHOW);
66 m_bDlgShown = true;
67 return true;
68 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000069
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +000070 if (!initFTWndMsgs()) return false;
71
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000072 m_hwndFTDialog = CreateDialogParam(m_hInstance,
73 MAKEINTRESOURCE(IDD_FILETRANSFER_DLG),
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000074 hwndParent,
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000075 (DLGPROC) FTDialogProc,
76 (LONG) this);
77
78 if (m_hwndFTDialog == NULL) return false;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000079
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000080 HWND hwndLocalList = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALLIST);
81 HWND hwndRemoteList = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTELIST);
82
83 if ((hwndLocalList == NULL) || (hwndRemoteList == NULL)) {
84 destroyFTDialog();
85 return false;
86 }
87
88 m_pLocalLV = new FTListView(hwndLocalList);
89 m_pRemoteLV = new FTListView(hwndRemoteList);
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000090
91 m_pProgress = new FTProgress(m_hwndFTDialog);
92
93 if ((m_pLocalLV == NULL) || (m_pRemoteLV == NULL) || (m_pProgress == NULL)) {
94 destroyFTDialog();
95 return false;
96 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000097
98 initFTDialog();
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000099
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000100 ShowWindow(m_hwndFTDialog, SW_SHOW);
101 UpdateWindow(m_hwndFTDialog);
102 m_bDlgShown = true;
103 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000104}
105
106bool
107FTDialog::initFTDialog()
108{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000109 m_pLocalLV->initialize(m_hInstance);
110 m_pRemoteLV->initialize(m_hInstance);
111
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000112 m_hwndLocalPath = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALPATH);
113 m_hwndRemotePath = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTEPATH);
114
115 setIcon(IDC_FTLOCALUP, IDI_FTUP);
116 setIcon(IDC_FTREMOTEUP, IDI_FTUP);
117 setIcon(IDC_FTLOCALRELOAD, IDI_FTRELOAD);
118 setIcon(IDC_FTREMOTERELOAD, IDI_FTRELOAD);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000119
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000120 showLocalLVItems();
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000121 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000122
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000123 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000124}
125
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000126bool
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000127FTDialog::initFTWndMsgs()
128{
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000129 m_msgCheckDeleteQueue = RegisterWindowMessage(szCheckDeleteQueueText);
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000130 m_msgCheckTransferQueue = RegisterWindowMessage(szCheckTransferQueueText);
131 m_msgUploadFilePortion = RegisterWindowMessage(szUploadFilePortionText);
132 m_msgDownloadFilePortion = RegisterWindowMessage(szDownloadFilePortionText);
133
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000134 if ((m_msgCheckDeleteQueue) && (m_msgCheckTransferQueue) &&
135 (m_msgUploadFilePortion) && (m_msgDownloadFilePortion)) return true;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000136
137 return false;
138}
139
140bool
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000141FTDialog::closeFTDialog()
142{
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000143 ShowWindow(m_hwndFTDialog, SW_HIDE);
144 m_bDlgShown = false;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000145 return true;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000146}
147
148void
149FTDialog::destroyFTDialog()
150{
151 if (m_pLocalLV != NULL) {
152 delete m_pLocalLV;
153 m_pLocalLV = NULL;
154 }
155
156 if (m_pRemoteLV != NULL) {
157 delete m_pRemoteLV;
158 m_pRemoteLV = NULL;
159 }
160
161 if (m_pProgress != NULL) {
162 delete m_pProgress;
163 m_pProgress = NULL;
164 }
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000165
166 if (DestroyWindow(m_hwndFTDialog)) m_hwndFTDialog = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000167}
168
169BOOL CALLBACK
170FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
171{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000172 FTDialog *_this = (FTDialog *) GetWindowLong(hwnd, GWL_USERDATA);
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000173
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000174 switch (uMsg)
175 {
176 case WM_INITDIALOG:
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000177 _this = (FTDialog*)lParam;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000178 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
179 SetForegroundWindow(hwnd);
180 return TRUE;
181 case WM_COMMAND:
182 {
183 switch (LOWORD(wParam))
184 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000185 case IDC_FTLOCALPATH:
186 switch (HIWORD (wParam))
187 {
188 case CBN_SETFOCUS:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000189 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000190 return FALSE;
191 }
192 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000193 case IDC_FTREMOTEPATH:
194 switch (HIWORD (wParam))
195 {
196 case CBN_SETFOCUS:
197 _this->setButtonsState();
198 return FALSE;
199 }
200 break;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000201 case IDC_FTCLOSE:
202 _this->closeFTDialog();
203 return FALSE;
204 case IDC_FTLOCALUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000205 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000206 _this->onLocalOneUpFolder();
207 return FALSE;
208 case IDC_FTREMOTEUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000209 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000210 _this->onRemoteOneUpFolder();
211 return FALSE;
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000212 case IDC_FTLOCALRELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000213 _this->setButtonsState();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000214 _this->onLocalReload();
215 return FALSE;
216 case IDC_FTREMOTERELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000217 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000218 _this->onRemoteReload();
219 return FALSE;
220 case IDC_FTUPLOAD:
221 _this->onUpload();
222 return FALSE;
223 case IDC_FTDOWNLOAD:
224 _this->onDownload();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000225 return FALSE;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000226 case IDM_FTCOPY:
227 case IDM_FTRENAME:
228 case IDM_FTDELETE:
229 case IDM_FTCANCEL:
230 _this->onFTMenuCommand(LOWORD(wParam));
231 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000232 }
233 }
234 break;
235
236 case WM_NOTIFY:
237 switch (LOWORD(wParam))
238 {
239 case IDC_FTLOCALLIST:
240 switch (((LPNMHDR) lParam)->code)
241 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000242 case NM_CLICK:
243 case NM_SETFOCUS:
244 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000245 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000246 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000247 case LVN_GETDISPINFO:
248 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
249 return FALSE;
250 case LVN_ITEMACTIVATE:
251 _this->onLocalItemActivate((LPNMITEMACTIVATE) lParam);
252 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000253 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000254 _this->onLocalRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000255 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000256 }
257 break;
258 case IDC_FTREMOTELIST:
259 switch (((LPNMHDR) lParam)->code)
260 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000261 case NM_CLICK:
262 case NM_SETFOCUS:
263 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000264 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000265 case LVN_GETDISPINFO:
266 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
267 return FALSE;
268 case LVN_ITEMACTIVATE:
269 _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
270 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000271 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000272 _this->onRemoteRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000273 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000274 }
275 break;
276 }
277 break;
278 case WM_CLOSE:
279 case WM_DESTROY:
280 _this->closeFTDialog();
281 return FALSE;
282 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000283
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000284 if (_this != NULL) {
285 if (uMsg == _this->m_msgCheckTransferQueue)
286 _this->m_pFileTransfer->checkTransferQueue();
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000287
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000288 if (uMsg == _this->m_msgUploadFilePortion)
289 _this->m_pFileTransfer->uploadFilePortion();
290
291 if (uMsg == _this->m_msgDownloadFilePortion)
292 _this->m_pFileTransfer->downloadFilePortion();
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000293
294 if (uMsg == _this->m_msgCheckDeleteQueue)
295 _this->m_pFileTransfer->checkDeleteQueue();
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000296 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000297
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000298 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000299}
300
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000301void
302FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
303{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000304 if (strlen(m_szLocalPath) == 0) {
305 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
306 } else {
307 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
308 }
309 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000310}
311
312void
313FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
314{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000315 if (strlen(m_szRemotePath) == 0) {
316 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
317 } else {
318 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
319 }
320 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000321}
322
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000323void
324FTDialog::onLocalReload()
325{
326 strcpy(m_szLocalPathTmp, m_szLocalPath);
327 showLocalLVItems();
328}
329
330void
331FTDialog::onRemoteReload()
332{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000333 strcpy(m_szRemotePathTmp, m_szRemotePath);
334 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000335}
336
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000337void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000338FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000339{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000340 FolderManager fm;
341 FileInfo fileInfo;
342 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
343 fileInfo.sort();
344 m_pLocalLV->deleteAllItems();
345 m_pLocalLV->addItems(&fileInfo);
346 strcpy(m_szLocalPath, m_szLocalPathTmp);
347 SetWindowText(m_hwndLocalPath, m_szLocalPath);
348 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000349}
350
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000351void
352FTDialog::showRemoteLVItems()
353{
354 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
355}
356
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000357void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000358FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000359{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000360 pFI->sort();
361 m_pRemoteLV->deleteAllItems();
362 m_pRemoteLV->addItems(pFI);
363 strcpy(m_szRemotePath, m_szRemotePathTmp);
364 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000365 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000366}
367
368void
369FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000370{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000371 strcpy(m_szLocalPathTmp, m_szLocalPath);
372 makeOneUpFolder(m_szLocalPathTmp);
373 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000374}
375
376void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000377FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000378{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000379 strcpy(m_szRemotePathTmp, m_szRemotePath);
380 makeOneUpFolder(m_szRemotePathTmp);
381 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000382}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000383
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000384void
385FTDialog::reqFolderUnavailable()
386{
387 strcpy(m_szRemotePathTmp, m_szRemotePath);
388}
389
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000390int
391FTDialog::makeOneUpFolder(char *pPath)
392{
393 if (strcmp(pPath, "") == 0) return strlen(pPath);
394 for (int i=(strlen(pPath)-2); i>=0; i--) {
395 if (pPath[i] == '\\') {
396 pPath[i] = '\0';
397 break;
398 }
399 if (i == 0) pPath[0] = '\0';
400 }
401 return strlen(pPath);
402}
403
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000404void
405FTDialog::onUpload()
406{
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000407 FileInfo fi;
408 TransferQueue tq;
409 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
410 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD);
411 }
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000412}
413
414void
415FTDialog::onDownload()
416{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000417 MessageBox(NULL, "onDownload", "FTDialog", MB_OK);
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000418
419}
420
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000421void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000422FTDialog::onLocalRename()
423{
424 MessageBox(NULL, "onLocalRename", "FTDialog", MB_OK);
425
426}
427
428void
429FTDialog::onRemoteRename()
430{
431 MessageBox(NULL, "onRemoteRename", "FTDialog", MB_OK);
432
433}
434
435void
436FTDialog::onLocalDelete()
437{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000438 FileInfo fi;
439 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
440 m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL);
441 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000442}
443
444void
445FTDialog::onRemoteDelete()
446{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000447 FileInfo fi;
448 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
449 m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE);
450 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000451}
452
453void
454FTDialog::onFTCancel()
455{
456 MessageBox(NULL, "onFTCancel", "FTDialog", MB_OK);
457
458}
459
460void
461FTDialog::onFTMenuCommand(int command)
462{
463 switch (command)
464 {
465 case IDM_FTCOPY:
466 {
467 switch (m_FTMenuSource)
468 {
469 case IDC_FTLOCALLIST: onUpload(); break;
470 case IDC_FTREMOTELIST: onDownload(); break;
471 default: break;
472 }
473 }
474 break;
475 case IDM_FTRENAME:
476 {
477 switch (m_FTMenuSource)
478 {
479 case IDC_FTLOCALLIST: onLocalRename(); break;
480 case IDC_FTREMOTELIST: onRemoteRename(); break;
481 default: break;
482 }
483 }
484 break;
485 case IDM_FTDELETE:
486 {
487 switch (m_FTMenuSource)
488 {
489 case IDC_FTLOCALLIST: onLocalDelete(); break;
490 case IDC_FTREMOTELIST: onRemoteDelete(); break;
491 default: break;
492 }
493 }
494 break;
495 case IDM_FTCANCEL: onFTCancel(); break;
496 default:
497 break;
498 }
499}
500
501void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000502FTDialog::onLocalRButton()
503{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000504 refreshBtnState();
505 m_FTMenuSource = IDC_FTLOCALLIST;
506 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
507 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
508 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000509}
510
511void
512FTDialog::onRemoteRButton()
513{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000514 refreshBtnState();
515 m_FTMenuSource = IDC_FTREMOTELIST;
516 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
517 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
518 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000519}
520
521void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000522FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
523 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000524{
525 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
526 HMENU hFTMenu = GetSubMenu(hMenu, 0);
527
528 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
529
530 SetForegroundWindow(m_hwndFTDialog);
531
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000532 if (copyBtnState) {
533 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
534 } else {
535 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
536 }
537 if (createFldBtnState) {
538 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
539 } else {
540 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
541 }
542 if (renameBtnState) {
543 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
544 } else {
545 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
546 }
547 if (deleteBtnState) {
548 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
549 } else {
550 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
551 }
552 if (cancelBtnState) {
553 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
554 } else {
555 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
556 }
557 DrawMenuBar(m_hwndFTDialog);
558
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000559 POINT cursorPosition;
560 GetCursorPos(&cursorPosition);
561 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000562 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000563}
564
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000565void
566FTDialog::setIcon(int dest, int idIcon)
567{
568 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
569 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
570 DestroyIcon((HICON) hIcon);
571}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000572
573void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000574FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000575{
576 if (!m_bDlgShown) return;
577
578 int locPathLen = strlen(m_szLocalPath);
579 int remPathLen = strlen(m_szRemotePath);
580
581 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000582 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000583 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000584 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000585 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
586 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000587 m_BtnState.uploadBtn = false;
588 m_BtnState.deleteLocalBtn = false;
589 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000590 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000591 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000592 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000593 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000594 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000595 m_BtnState.uploadBtn = true;
596 }
597 if (nCount == 1) {
598 m_BtnState.renameLocalBtn = true;
599 } else {
600 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000601 }
602 }
603 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000604 m_BtnState.uploadBtn = false;
605 m_BtnState.createLocalFldBtn = false;
606 m_BtnState.deleteLocalBtn = false;
607 m_BtnState.renameLocalBtn = false;
608 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000609 }
610 } else {
611 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000612 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000613 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000614 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000615 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
616 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000617 m_BtnState.downloadBtn = false;
618 m_BtnState.deleteRemoteBtn = false;
619 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000620 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000621 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000622 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000623 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000624 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000625 m_BtnState.downloadBtn = true;
626 }
627 if (nCount == 1) {
628 m_BtnState.renameRemoteBtn = true;
629 } else {
630 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000631 }
632 }
633 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000634 m_BtnState.downloadBtn = false;
635 m_BtnState.createRemoteFldBtn = false;
636 m_BtnState.deleteRemoteBtn = false;
637 m_BtnState.renameRemoteBtn = false;
638 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000639 }
640 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000641 }
642 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000643 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000644}
645
646void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000647FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000648{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000649 refreshBtnState();
650
651 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000652 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000653 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
654 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000655 }
656
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000657 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000658 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000659 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
660 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000661 }
662
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000663 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000664 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000665 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
666 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000667 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000668}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000669
670void
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000671FTDialog::setStatusText(LPCSTR format,...)
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000672{
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000673 char text[1024];
674 va_list args;
675 va_start(args, format);
676 int nSize = _vsnprintf(text, sizeof(text), format, args);
677 SetDlgItemText(m_hwndFTDialog, IDC_FTSTATUS, text);
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000678}
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000679
680void
681FTDialog::postCheckTransferQueueMsg()
682{
683 PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
684}
685
686void
687FTDialog::postUploadFilePortionMsg()
688{
689 PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0);
690}
691
692void
693FTDialog::postDownloadFilePortionMsg()
694{
695 PostMessage(m_hwndFTDialog, m_msgDownloadFilePortion, 0, 0);
696}
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000697
698void
699FTDialog::postCheckDeleteQueueMsg()
700{
701 PostMessage(m_hwndFTDialog, m_msgCheckDeleteQueue, 0, 0);
702}