blob: 99c9ca203e6f4295636ed44413b8931ef1bae740 [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";
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000031const 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;
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +000048 m_dwNumStatusStrings = 0;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000049
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);
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000132
Dennis Syrovatsky95a01ff2005-12-14 07:58:29 +0000133 if ((m_msgCheckDeleteQueue) &&
134 (m_msgCheckTransferQueue) &&
135 (m_msgUploadFilePortion)) 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
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000291 if (uMsg == _this->m_msgCheckDeleteQueue)
292 _this->m_pFileTransfer->checkDeleteQueue();
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000293 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000294
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000295 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000296}
297
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000298void
299FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
300{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000301 if (strlen(m_szLocalPath) == 0) {
302 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
303 } else {
304 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
305 }
306 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000307}
308
309void
310FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
311{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000312 if (strlen(m_szRemotePath) == 0) {
313 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
314 } else {
315 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
316 }
317 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000318}
319
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000320void
321FTDialog::onLocalReload()
322{
323 strcpy(m_szLocalPathTmp, m_szLocalPath);
324 showLocalLVItems();
325}
326
327void
328FTDialog::onRemoteReload()
329{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000330 strcpy(m_szRemotePathTmp, m_szRemotePath);
331 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000332}
333
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000334void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000335FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000336{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000337 FolderManager fm;
338 FileInfo fileInfo;
339 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
340 fileInfo.sort();
341 m_pLocalLV->deleteAllItems();
342 m_pLocalLV->addItems(&fileInfo);
343 strcpy(m_szLocalPath, m_szLocalPathTmp);
344 SetWindowText(m_hwndLocalPath, m_szLocalPath);
345 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000346}
347
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000348void
349FTDialog::showRemoteLVItems()
350{
351 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
352}
353
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000354void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000355FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000356{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000357 pFI->sort();
358 m_pRemoteLV->deleteAllItems();
359 m_pRemoteLV->addItems(pFI);
360 strcpy(m_szRemotePath, m_szRemotePathTmp);
361 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000362 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000363}
364
365void
366FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000367{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000368 strcpy(m_szLocalPathTmp, m_szLocalPath);
369 makeOneUpFolder(m_szLocalPathTmp);
370 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000371}
372
373void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000374FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000375{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000376 strcpy(m_szRemotePathTmp, m_szRemotePath);
377 makeOneUpFolder(m_szRemotePathTmp);
378 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000379}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000380
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000381void
382FTDialog::reqFolderUnavailable()
383{
384 strcpy(m_szRemotePathTmp, m_szRemotePath);
385}
386
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000387int
388FTDialog::makeOneUpFolder(char *pPath)
389{
390 if (strcmp(pPath, "") == 0) return strlen(pPath);
391 for (int i=(strlen(pPath)-2); i>=0; i--) {
392 if (pPath[i] == '\\') {
393 pPath[i] = '\0';
394 break;
395 }
396 if (i == 0) pPath[0] = '\0';
397 }
398 return strlen(pPath);
399}
400
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000401void
402FTDialog::onUpload()
403{
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000404 FileInfo fi;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000405 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 Syrovatsky3f5ccbd2005-12-13 04:33:07 +0000413 FileInfo fi;
414 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
415 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_DOWNLOAD);
416 }
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000417}
418
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000419void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000420FTDialog::onLocalRename()
421{
422 MessageBox(NULL, "onLocalRename", "FTDialog", MB_OK);
423
424}
425
426void
427FTDialog::onRemoteRename()
428{
429 MessageBox(NULL, "onRemoteRename", "FTDialog", MB_OK);
430
431}
432
433void
434FTDialog::onLocalDelete()
435{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000436 FileInfo fi;
437 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
438 m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL);
439 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000440}
441
442void
443FTDialog::onRemoteDelete()
444{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000445 FileInfo fi;
446 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
447 m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE);
448 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000449}
450
451void
452FTDialog::onFTCancel()
453{
454 MessageBox(NULL, "onFTCancel", "FTDialog", MB_OK);
455
456}
457
458void
459FTDialog::onFTMenuCommand(int command)
460{
461 switch (command)
462 {
463 case IDM_FTCOPY:
464 {
465 switch (m_FTMenuSource)
466 {
467 case IDC_FTLOCALLIST: onUpload(); break;
468 case IDC_FTREMOTELIST: onDownload(); break;
469 default: break;
470 }
471 }
472 break;
473 case IDM_FTRENAME:
474 {
475 switch (m_FTMenuSource)
476 {
477 case IDC_FTLOCALLIST: onLocalRename(); break;
478 case IDC_FTREMOTELIST: onRemoteRename(); break;
479 default: break;
480 }
481 }
482 break;
483 case IDM_FTDELETE:
484 {
485 switch (m_FTMenuSource)
486 {
487 case IDC_FTLOCALLIST: onLocalDelete(); break;
488 case IDC_FTREMOTELIST: onRemoteDelete(); break;
489 default: break;
490 }
491 }
492 break;
493 case IDM_FTCANCEL: onFTCancel(); break;
494 default:
495 break;
496 }
497}
498
499void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000500FTDialog::onLocalRButton()
501{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000502 refreshBtnState();
503 m_FTMenuSource = IDC_FTLOCALLIST;
504 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
505 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
506 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000507}
508
509void
510FTDialog::onRemoteRButton()
511{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000512 refreshBtnState();
513 m_FTMenuSource = IDC_FTREMOTELIST;
514 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
515 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
516 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000517}
518
519void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000520FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
521 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000522{
523 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
524 HMENU hFTMenu = GetSubMenu(hMenu, 0);
525
526 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
527
528 SetForegroundWindow(m_hwndFTDialog);
529
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000530 if (copyBtnState) {
531 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
532 } else {
533 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
534 }
535 if (createFldBtnState) {
536 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
537 } else {
538 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
539 }
540 if (renameBtnState) {
541 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
542 } else {
543 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
544 }
545 if (deleteBtnState) {
546 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
547 } else {
548 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
549 }
550 if (cancelBtnState) {
551 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
552 } else {
553 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
554 }
555 DrawMenuBar(m_hwndFTDialog);
556
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000557 POINT cursorPosition;
558 GetCursorPos(&cursorPosition);
559 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000560 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000561}
562
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000563void
564FTDialog::setIcon(int dest, int idIcon)
565{
566 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
567 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
568 DestroyIcon((HICON) hIcon);
569}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000570
571void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000572FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000573{
574 if (!m_bDlgShown) return;
575
576 int locPathLen = strlen(m_szLocalPath);
577 int remPathLen = strlen(m_szRemotePath);
578
579 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000580 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000581 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000582 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000583 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
584 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000585 m_BtnState.uploadBtn = false;
586 m_BtnState.deleteLocalBtn = false;
587 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000588 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000589 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000590 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000591 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000592 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000593 m_BtnState.uploadBtn = true;
594 }
595 if (nCount == 1) {
596 m_BtnState.renameLocalBtn = true;
597 } else {
598 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000599 }
600 }
601 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000602 m_BtnState.uploadBtn = false;
603 m_BtnState.createLocalFldBtn = false;
604 m_BtnState.deleteLocalBtn = false;
605 m_BtnState.renameLocalBtn = false;
606 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000607 }
608 } else {
609 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000610 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000611 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000612 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000613 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
614 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000615 m_BtnState.downloadBtn = false;
616 m_BtnState.deleteRemoteBtn = false;
617 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000618 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000619 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000620 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000621 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000622 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000623 m_BtnState.downloadBtn = true;
624 }
625 if (nCount == 1) {
626 m_BtnState.renameRemoteBtn = true;
627 } else {
628 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000629 }
630 }
631 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000632 m_BtnState.downloadBtn = false;
633 m_BtnState.createRemoteFldBtn = false;
634 m_BtnState.deleteRemoteBtn = false;
635 m_BtnState.renameRemoteBtn = false;
636 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000637 }
638 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000639 }
640 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000641 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000642}
643
644void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000645FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000646{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000647 refreshBtnState();
648
649 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000650 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000651 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
652 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000653 }
654
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000655 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000656 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000657 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
658 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000659 }
660
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000661 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000662 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000663 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
664 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000665 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000666}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000667
668void
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000669FTDialog::setStatusText(LPCSTR format,...)
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000670{
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000671 char text[1024];
672 va_list args;
673 va_start(args, format);
674 int nSize = _vsnprintf(text, sizeof(text), format, args);
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +0000675
676 HWND hStatusBox = GetDlgItem(m_hwndFTDialog, IDC_FTSTATUS);
677
678 LRESULT lRes = SendMessage(hStatusBox, (UINT) CB_INSERTSTRING, (WPARAM) 0, (LPARAM) text);
679 if ((lRes != CB_ERR) && (lRes != CB_ERRSPACE)) {
680 lRes = SendMessage(hStatusBox, (UINT) CB_SETCURSEL, (WPARAM) lRes, (LPARAM) 0);
681 }
682
683 m_dwNumStatusStrings++;
684 if (m_dwNumStatusStrings > FT_MAX_STATUS_STRINGS) {
685 int numItems = SendMessage(hStatusBox, (UINT) CB_GETCOUNT, (WPARAM) 0, (LPARAM) 0);
686 if (numItems != CB_ERR) {
687 m_dwNumStatusStrings--;
688 SendMessage(hStatusBox, (UINT) CB_DELETESTRING, (WPARAM) numItems - 1, (LPARAM) 0);
689 }
690 }
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000691}
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000692
693void
694FTDialog::postCheckTransferQueueMsg()
695{
696 PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
697}
698
699void
700FTDialog::postUploadFilePortionMsg()
701{
702 PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0);
703}
704
705void
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000706FTDialog::postCheckDeleteQueueMsg()
707{
708 PostMessage(m_hwndFTDialog, m_msgCheckDeleteQueue, 0, 0);
709}