blob: 5998a0f29842ee509a99ee57b1650d4832d6ea1a [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;
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +000037
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000038 m_bDlgShown = false;
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +000039 m_bLocalBrowsing = true;
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +000040 m_bCloseDlgAfterCancel = false;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000041
42 m_pLocalLV = NULL;
43 m_pRemoteLV = NULL;
44 m_pProgress = NULL;
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +000045 m_pCancelingDlg = NULL;
Dennis Syrovatskyf0928942005-12-14 15:12:45 +000046 m_pCreateFolderDlg = NULL;
Dennis Syrovatsky95509432005-12-14 16:42:33 +000047 m_pRenameDlg = NULL;
Dennis Syrovatskyb0b72472005-12-15 10:02:16 +000048 m_pBrowseDlg = NULL;
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000049
Dennis Syrovatskyec906992005-11-07 09:56:06 +000050 m_hwndFTDialog = NULL;
Dennis Syrovatskyb595e032005-11-09 06:24:25 +000051 m_hwndLocalPath = NULL;
52 m_hwndRemotePath = NULL;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000053
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000054 m_FTMenuSource = 0;
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +000055 m_dwNumStatusStrings = 0;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000056
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000057 m_szLocalPath[0] = '\0';
58 m_szRemotePath[0] = '\0';
59 m_szLocalPathTmp[0] = '\0';
60 m_szRemotePathTmp[0] = '\0';
Dennis Syrovatskyf0928942005-12-14 15:12:45 +000061 m_szCreateFolderName[0] = '\0';
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000062}
63
64FTDialog::~FTDialog()
65{
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000066 destroyFTDialog();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000067}
68
69bool
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000070FTDialog::createFTDialog(HWND hwndParent)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000071{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000072 if (m_hwndFTDialog != NULL) {
73 ShowWindow(m_hwndFTDialog, SW_SHOW);
74 m_bDlgShown = true;
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +000075 showLocalLVItems();
76 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000077 return true;
78 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000079
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +000080 if (!initFTWndMsgs()) return false;
81
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000082 m_hwndFTDialog = CreateDialogParam(m_hInstance,
83 MAKEINTRESOURCE(IDD_FILETRANSFER_DLG),
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000084 hwndParent,
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000085 (DLGPROC) FTDialogProc,
86 (LONG) this);
87
88 if (m_hwndFTDialog == NULL) return false;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000089
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000090 HWND hwndLocalList = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALLIST);
91 HWND hwndRemoteList = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTELIST);
92
93 if ((hwndLocalList == NULL) || (hwndRemoteList == NULL)) {
94 destroyFTDialog();
95 return false;
96 }
97
98 m_pLocalLV = new FTListView(hwndLocalList);
99 m_pRemoteLV = new FTListView(hwndRemoteList);
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000100
101 m_pProgress = new FTProgress(m_hwndFTDialog);
102
103 if ((m_pLocalLV == NULL) || (m_pRemoteLV == NULL) || (m_pProgress == NULL)) {
104 destroyFTDialog();
105 return false;
106 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000107
108 initFTDialog();
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000109
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000110 ShowWindow(m_hwndFTDialog, SW_SHOW);
111 UpdateWindow(m_hwndFTDialog);
112 m_bDlgShown = true;
113 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000114}
115
116bool
117FTDialog::initFTDialog()
118{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000119 m_pLocalLV->initialize(m_hInstance);
120 m_pRemoteLV->initialize(m_hInstance);
121
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000122 m_hwndLocalPath = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALPATH);
123 m_hwndRemotePath = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTEPATH);
124
125 setIcon(IDC_FTLOCALUP, IDI_FTUP);
126 setIcon(IDC_FTREMOTEUP, IDI_FTUP);
127 setIcon(IDC_FTLOCALRELOAD, IDI_FTRELOAD);
128 setIcon(IDC_FTREMOTERELOAD, IDI_FTRELOAD);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000129
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000130 showLocalLVItems();
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000131 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000132
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000133 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000134}
135
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000136bool
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000137FTDialog::initFTWndMsgs()
138{
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000139 m_msgCheckDeleteQueue = RegisterWindowMessage(szCheckDeleteQueueText);
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000140 m_msgCheckTransferQueue = RegisterWindowMessage(szCheckTransferQueueText);
141 m_msgUploadFilePortion = RegisterWindowMessage(szUploadFilePortionText);
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000142
Dennis Syrovatsky95a01ff2005-12-14 07:58:29 +0000143 if ((m_msgCheckDeleteQueue) &&
144 (m_msgCheckTransferQueue) &&
145 (m_msgUploadFilePortion)) return true;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000146
147 return false;
148}
149
150bool
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000151FTDialog::closeFTDialog()
152{
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000153 ShowWindow(m_hwndFTDialog, SW_HIDE);
154 m_bDlgShown = false;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000155 return true;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000156}
157
158void
159FTDialog::destroyFTDialog()
160{
161 if (m_pLocalLV != NULL) {
162 delete m_pLocalLV;
163 m_pLocalLV = NULL;
164 }
165
166 if (m_pRemoteLV != NULL) {
167 delete m_pRemoteLV;
168 m_pRemoteLV = NULL;
169 }
170
171 if (m_pProgress != NULL) {
172 delete m_pProgress;
173 m_pProgress = NULL;
174 }
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000175
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000176 if(m_pCancelingDlg != NULL) {
177 delete m_pCancelingDlg;
178 m_pCancelingDlg = NULL;
179 }
180
181 if (m_pCreateFolderDlg != NULL) {
182 delete m_pCreateFolderDlg;
183 m_pCreateFolderDlg = NULL;
184 }
185
186 if(m_pRenameDlg != NULL) {
187 delete m_pRenameDlg;
188 m_pRenameDlg = NULL;
189 }
190
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000191 if (DestroyWindow(m_hwndFTDialog)) m_hwndFTDialog = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000192}
193
194BOOL CALLBACK
195FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
196{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000197 FTDialog *_this = (FTDialog *) GetWindowLong(hwnd, GWL_USERDATA);
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000198
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000199 switch (uMsg)
200 {
201 case WM_INITDIALOG:
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000202 _this = (FTDialog*)lParam;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000203 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
204 SetForegroundWindow(hwnd);
205 return TRUE;
206 case WM_COMMAND:
207 {
208 switch (LOWORD(wParam))
209 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000210 case IDC_FTLOCALPATH:
211 switch (HIWORD (wParam))
212 {
213 case CBN_SETFOCUS:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000214 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000215 return FALSE;
216 }
217 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000218 case IDC_FTREMOTEPATH:
219 switch (HIWORD (wParam))
220 {
221 case CBN_SETFOCUS:
222 _this->setButtonsState();
223 return FALSE;
224 }
225 break;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000226 case IDC_FTCLOSE:
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000227 _this->onClose();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000228 return FALSE;
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000229 case IDC_FTLOCALBROWSE:
230 _this->onLocalBrowse();
231 return FALSE;
232 case IDC_FTREMOTEBROWSE:
233 _this->onRemoteBrowse();
234 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000235 case IDC_FTLOCALUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000236 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000237 _this->onLocalOneUpFolder();
238 return FALSE;
239 case IDC_FTREMOTEUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000240 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000241 _this->onRemoteOneUpFolder();
242 return FALSE;
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000243 case IDC_FTLOCALRELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000244 _this->setButtonsState();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000245 _this->onLocalReload();
246 return FALSE;
247 case IDC_FTREMOTERELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000248 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000249 _this->onRemoteReload();
250 return FALSE;
251 case IDC_FTUPLOAD:
252 _this->onUpload();
253 return FALSE;
254 case IDC_FTDOWNLOAD:
255 _this->onDownload();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000256 return FALSE;
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000257 case IDC_FTCANCEL:
258 _this->onFTCancel();
259 return FALSE;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000260 case IDM_FTCOPY:
261 case IDM_FTRENAME:
262 case IDM_FTDELETE:
263 case IDM_FTCANCEL:
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000264 case IDM_FTCREATEFOLDER:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000265 _this->onFTMenuCommand(LOWORD(wParam));
266 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000267 }
268 }
269 break;
270
271 case WM_NOTIFY:
272 switch (LOWORD(wParam))
273 {
274 case IDC_FTLOCALLIST:
275 switch (((LPNMHDR) lParam)->code)
276 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000277 case NM_CLICK:
278 case NM_SETFOCUS:
279 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000280 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000281 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000282 case LVN_GETDISPINFO:
283 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
284 return FALSE;
285 case LVN_ITEMACTIVATE:
286 _this->onLocalItemActivate((LPNMITEMACTIVATE) lParam);
287 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000288 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000289 _this->onLocalRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000290 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000291 }
292 break;
293 case IDC_FTREMOTELIST:
294 switch (((LPNMHDR) lParam)->code)
295 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000296 case NM_CLICK:
297 case NM_SETFOCUS:
298 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000299 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000300 case LVN_GETDISPINFO:
301 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
302 return FALSE;
303 case LVN_ITEMACTIVATE:
304 _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
305 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000306 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000307 _this->onRemoteRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000308 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000309 }
310 break;
311 }
312 break;
313 case WM_CLOSE:
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000314 _this->onClose();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000315 return FALSE;
316 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000317
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000318 if (_this != NULL) {
319 if (uMsg == _this->m_msgCheckTransferQueue)
320 _this->m_pFileTransfer->checkTransferQueue();
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000321
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000322 if (uMsg == _this->m_msgUploadFilePortion)
323 _this->m_pFileTransfer->uploadFilePortion();
324
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000325 if (uMsg == _this->m_msgCheckDeleteQueue)
326 _this->m_pFileTransfer->checkDeleteQueue();
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000327 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000328
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000329 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000330}
331
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000332void
333FTDialog::onClose()
334{
335 if (m_pFileTransfer->isTransferEnable()) {
336 m_bCloseDlgAfterCancel = true;
337 onFTCancel();
338 } else {
339 closeFTDialog();
340 }
341}
342
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000343void
344FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
345{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000346 if (strlen(m_szLocalPath) == 0) {
347 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
348 } else {
349 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
350 }
351 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000352}
353
354void
355FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
356{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000357 if (strlen(m_szRemotePath) == 0) {
358 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
359 } else {
360 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
361 }
362 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000363}
364
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000365void
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +0000366FTDialog::onEndBrowseDlg(bool bResult)
367{
368 if (m_pBrowseDlg == NULL) return;
369
370 if (bResult) {
371 if (m_bLocalBrowsing) {
372 strcpy(m_szLocalPathTmp, m_pBrowseDlg->getPath());
373 showLocalLVItems();
374 } else {
375 strcpy(m_szRemotePathTmp, m_pBrowseDlg->getPath());
376 showRemoteLVItems();
377 }
378 }
379
380 delete m_pBrowseDlg;
381 m_pBrowseDlg = NULL;
382}
383
384void
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000385FTDialog::onLocalBrowse()
386{
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +0000387 if (m_pBrowseDlg != NULL) return;
388
389 m_bLocalBrowsing = true;
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000390
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +0000391 m_pBrowseDlg = new FTBrowseDlg(this);
392 m_pBrowseDlg->create();
393
394 getBrowseItems("");
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000395}
396
397void
398FTDialog::onRemoteBrowse()
399{
Dennis Syrovatskyb0b72472005-12-15 10:02:16 +0000400 if (m_pBrowseDlg != NULL) return;
401
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +0000402 m_bLocalBrowsing = false;
403
Dennis Syrovatskyb0b72472005-12-15 10:02:16 +0000404 m_pBrowseDlg = new FTBrowseDlg(this);
405 m_pBrowseDlg->create();
406
407 m_pFileTransfer->requestFileList("", FT_FLR_DEST_BROWSE, true);
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000408}
409
410void
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000411FTDialog::onLocalReload()
412{
413 strcpy(m_szLocalPathTmp, m_szLocalPath);
414 showLocalLVItems();
415}
416
417void
418FTDialog::onRemoteReload()
419{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000420 strcpy(m_szRemotePathTmp, m_szRemotePath);
421 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000422}
423
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000424void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000425FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000426{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000427 FolderManager fm;
428 FileInfo fileInfo;
429 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
430 fileInfo.sort();
431 m_pLocalLV->deleteAllItems();
432 m_pLocalLV->addItems(&fileInfo);
433 strcpy(m_szLocalPath, m_szLocalPathTmp);
434 SetWindowText(m_hwndLocalPath, m_szLocalPath);
435 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000436}
437
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000438void
439FTDialog::showRemoteLVItems()
440{
441 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
442}
443
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000444void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000445FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000446{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000447 pFI->sort();
448 m_pRemoteLV->deleteAllItems();
449 m_pRemoteLV->addItems(pFI);
450 strcpy(m_szRemotePath, m_szRemotePathTmp);
451 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000452 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000453}
454
455void
456FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000457{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000458 strcpy(m_szLocalPathTmp, m_szLocalPath);
459 makeOneUpFolder(m_szLocalPathTmp);
460 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000461}
462
463void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000464FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000465{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000466 strcpy(m_szRemotePathTmp, m_szRemotePath);
467 makeOneUpFolder(m_szRemotePathTmp);
468 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000469}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000470
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000471void
472FTDialog::reqFolderUnavailable()
473{
474 strcpy(m_szRemotePathTmp, m_szRemotePath);
475}
476
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000477int
478FTDialog::makeOneUpFolder(char *pPath)
479{
480 if (strcmp(pPath, "") == 0) return strlen(pPath);
481 for (int i=(strlen(pPath)-2); i>=0; i--) {
482 if (pPath[i] == '\\') {
483 pPath[i] = '\0';
484 break;
485 }
486 if (i == 0) pPath[0] = '\0';
487 }
488 return strlen(pPath);
489}
490
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000491void
492FTDialog::onUpload()
493{
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000494 FileInfo fi;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000495 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
496 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD);
497 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000498 setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000499}
500
501void
502FTDialog::onDownload()
503{
Dennis Syrovatsky3f5ccbd2005-12-13 04:33:07 +0000504 FileInfo fi;
505 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
506 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_DOWNLOAD);
507 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000508 setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000509}
510
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000511void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000512FTDialog::onLocalRename()
513{
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000514 if (m_pRenameDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000515
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000516 FileInfo fi;
517 if (m_pLocalLV->getSelectedItems(&fi) == 1) {
518 unsigned int flags = fi.getFlagsAt(0);
519 m_pRenameDlg = new FTDialog::RenameDlg(this);
520 if (m_pRenameDlg != NULL) {
521 if (flags & FT_ATTR_DIR) {
522 m_pRenameDlg->create(fi.getNameAt(0), true);
523 } else {
524 m_pRenameDlg->create(fi.getNameAt(0), false);
525 }
526 if (strlen(m_pRenameDlg->getFolderName()) > 0) {
527 FolderManager fm;
528 fm.renameIt(m_szLocalPath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
529 showLocalLVItems();
530 }
531 delete m_pRenameDlg;
532 m_pRenameDlg = NULL;
533 }
534 }
535 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000536}
537
538void
539FTDialog::onRemoteRename()
540{
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000541 if (m_pRenameDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000542
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000543 FileInfo fi;
544 if (m_pRemoteLV->getSelectedItems(&fi) == 1) {
545 unsigned int flags = fi.getFlagsAt(0);
546 m_pRenameDlg = new FTDialog::RenameDlg(this);
547 if (m_pRenameDlg != NULL) {
548 if (flags & FT_ATTR_DIR) {
549 m_pRenameDlg->create(fi.getNameAt(0), true);
550 } else {
551 m_pRenameDlg->create(fi.getNameAt(0), false);
552 }
553 if (strlen(m_pRenameDlg->getFolderName()) > 0) {
554 m_pFileTransfer->renameRemote(m_szRemotePath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
555 }
556 delete m_pRenameDlg;
557 m_pRenameDlg = NULL;
558 }
559 }
560 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000561}
562
563void
564FTDialog::onLocalDelete()
565{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000566 FileInfo fi;
567 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
568 m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL);
569 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000570 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000571}
572
573void
574FTDialog::onRemoteDelete()
575{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000576 FileInfo fi;
577 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
578 m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE);
579 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000580 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000581}
582
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000583bool
584FTDialog::getCreateFolderName()
585{
586 if (m_pCreateFolderDlg != NULL) return false;
587
588 bool bResult = false;
589
590 m_pCreateFolderDlg = new FTDialog::CreateFolderDlg(this);
591 m_pCreateFolderDlg->create();
592 if (strlen(m_pCreateFolderDlg->getFolderName()) != 0) {
593 strcpy(m_szCreateFolderName, m_pCreateFolderDlg->getFolderName());
594 bResult = true;
595 } else {
596 m_szCreateFolderName[0] = '\0';
597 bResult = false;
598 }
599 delete m_pCreateFolderDlg;
600 m_pCreateFolderDlg = NULL;
601
602 return bResult;
603}
604
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000605void
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000606FTDialog::onLocalCreateFolder()
607{
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000608 if (getCreateFolderName()) {
609 char path[FT_FILENAME_SIZE];
610 sprintf(path, "%s\\%s", m_szLocalPath, m_szCreateFolderName);
611 setStatusText("Creating Local Folder: %s", path);
612 FolderManager fm;
613 if (fm.createDir(path)) showLocalLVItems();
614 }
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000615}
616
617void
618FTDialog::onRemoteCreateFolder()
619{
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000620 if (getCreateFolderName()) {
621 m_pFileTransfer->createRemoteFolder(m_szRemotePath, m_szCreateFolderName);
622 }
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000623}
624
625void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000626FTDialog::onFTCancel()
627{
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000628 if (m_pCancelingDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000629
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000630 m_pCancelingDlg = new CancelingDlg(this);
631
632 m_pCancelingDlg->create();
633}
634
635void
636FTDialog::cancelTransfer(bool bResult)
637{
638 if (m_pCancelingDlg != NULL) {
639 delete m_pCancelingDlg;
640 m_pCancelingDlg = NULL;
641 }
642
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000643 setButtonsState();
644
645 if ((m_bCloseDlgAfterCancel) && (bResult)) {
646 m_bCloseDlgAfterCancel = false;
647 closeFTDialog();
648 }
649
650 m_pFileTransfer->m_bCancel = bResult;
651}
652
653void
654FTDialog::afterCancelTransfer()
655{
656 if (m_pCancelingDlg != NULL) {
657 delete m_pCancelingDlg;
658 m_pCancelingDlg = NULL;
659 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000660}
661
662void
663FTDialog::onFTMenuCommand(int command)
664{
665 switch (command)
666 {
667 case IDM_FTCOPY:
668 {
669 switch (m_FTMenuSource)
670 {
671 case IDC_FTLOCALLIST: onUpload(); break;
672 case IDC_FTREMOTELIST: onDownload(); break;
673 default: break;
674 }
675 }
676 break;
677 case IDM_FTRENAME:
678 {
679 switch (m_FTMenuSource)
680 {
681 case IDC_FTLOCALLIST: onLocalRename(); break;
682 case IDC_FTREMOTELIST: onRemoteRename(); break;
683 default: break;
684 }
685 }
686 break;
687 case IDM_FTDELETE:
688 {
689 switch (m_FTMenuSource)
690 {
691 case IDC_FTLOCALLIST: onLocalDelete(); break;
692 case IDC_FTREMOTELIST: onRemoteDelete(); break;
693 default: break;
694 }
695 }
696 break;
697 case IDM_FTCANCEL: onFTCancel(); break;
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000698 case IDM_FTCREATEFOLDER:
699 {
700 switch (m_FTMenuSource)
701 {
702 case IDC_FTLOCALLIST: onLocalCreateFolder(); break;
703 case IDC_FTREMOTELIST: onRemoteCreateFolder(); break;
704 default: break;
705 }
706 }
707 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000708 default:
709 break;
710 }
711}
712
713void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000714FTDialog::onLocalRButton()
715{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000716 refreshBtnState();
717 m_FTMenuSource = IDC_FTLOCALLIST;
718 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
719 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
720 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000721}
722
723void
724FTDialog::onRemoteRButton()
725{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000726 refreshBtnState();
727 m_FTMenuSource = IDC_FTREMOTELIST;
728 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
729 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
730 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000731}
732
733void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000734FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
735 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000736{
737 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
738 HMENU hFTMenu = GetSubMenu(hMenu, 0);
739
740 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
741
742 SetForegroundWindow(m_hwndFTDialog);
743
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000744 if (copyBtnState) {
745 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
746 } else {
747 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
748 }
749 if (createFldBtnState) {
750 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
751 } else {
752 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
753 }
754 if (renameBtnState) {
755 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
756 } else {
757 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
758 }
759 if (deleteBtnState) {
760 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
761 } else {
762 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
763 }
764 if (cancelBtnState) {
765 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
766 } else {
767 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
768 }
769 DrawMenuBar(m_hwndFTDialog);
770
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000771 POINT cursorPosition;
772 GetCursorPos(&cursorPosition);
773 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000774 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000775}
776
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000777void
778FTDialog::setIcon(int dest, int idIcon)
779{
780 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
781 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
782 DestroyIcon((HICON) hIcon);
783}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000784
785void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000786FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000787{
788 if (!m_bDlgShown) return;
789
790 int locPathLen = strlen(m_szLocalPath);
791 int remPathLen = strlen(m_szRemotePath);
792
793 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000794 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000795 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000796 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000797 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
798 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000799 m_BtnState.uploadBtn = false;
800 m_BtnState.deleteLocalBtn = false;
801 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000802 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000803 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000804 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000805 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000806 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000807 m_BtnState.uploadBtn = true;
808 }
809 if (nCount == 1) {
810 m_BtnState.renameLocalBtn = true;
811 } else {
812 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000813 }
814 }
815 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000816 m_BtnState.uploadBtn = false;
817 m_BtnState.createLocalFldBtn = false;
818 m_BtnState.deleteLocalBtn = false;
819 m_BtnState.renameLocalBtn = false;
820 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000821 }
822 } else {
823 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000824 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000825 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000826 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000827 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
828 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000829 m_BtnState.downloadBtn = false;
830 m_BtnState.deleteRemoteBtn = false;
831 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000832 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000833 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000834 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000835 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000836 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000837 m_BtnState.downloadBtn = true;
838 }
839 if (nCount == 1) {
840 m_BtnState.renameRemoteBtn = true;
841 } else {
842 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000843 }
844 }
845 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000846 m_BtnState.downloadBtn = false;
847 m_BtnState.createRemoteFldBtn = false;
848 m_BtnState.deleteRemoteBtn = false;
849 m_BtnState.renameRemoteBtn = false;
850 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000851 }
852 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000853 }
854 }
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000855 if (m_pFileTransfer->isTransferEnable())
856 m_BtnState.cancelBtn = true;
857 else
858 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000859}
860
861void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000862FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000863{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000864 refreshBtnState();
865
866 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000867 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000868 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
869 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000870 }
871
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000872 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000873 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000874 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
875 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000876 }
877
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000878 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000879 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000880 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
881 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000882 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000883
884 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000885}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000886
887void
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000888FTDialog::setStatusText(LPCSTR format,...)
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000889{
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000890 char text[1024];
891 va_list args;
892 va_start(args, format);
893 int nSize = _vsnprintf(text, sizeof(text), format, args);
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +0000894
895 HWND hStatusBox = GetDlgItem(m_hwndFTDialog, IDC_FTSTATUS);
896
897 LRESULT lRes = SendMessage(hStatusBox, (UINT) CB_INSERTSTRING, (WPARAM) 0, (LPARAM) text);
898 if ((lRes != CB_ERR) && (lRes != CB_ERRSPACE)) {
899 lRes = SendMessage(hStatusBox, (UINT) CB_SETCURSEL, (WPARAM) lRes, (LPARAM) 0);
900 }
901
902 m_dwNumStatusStrings++;
903 if (m_dwNumStatusStrings > FT_MAX_STATUS_STRINGS) {
904 int numItems = SendMessage(hStatusBox, (UINT) CB_GETCOUNT, (WPARAM) 0, (LPARAM) 0);
905 if (numItems != CB_ERR) {
906 m_dwNumStatusStrings--;
907 SendMessage(hStatusBox, (UINT) CB_DELETESTRING, (WPARAM) numItems - 1, (LPARAM) 0);
908 }
909 }
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000910}
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000911
912void
Dennis Syrovatsky1a3a5532005-12-15 14:20:03 +0000913FTDialog::getBrowseItems(char *pPath)
914{
915 if (m_bLocalBrowsing) {
916 FileInfo fi;
917 FolderManager fm;
918 fm.getDirInfo(pPath, &fi, 1);
919 if (m_pBrowseDlg != NULL) m_pBrowseDlg->addItems(&fi);
920 } else {
921 m_pFileTransfer->requestFileList(pPath, FT_FLR_DEST_BROWSE, true);
922 }
923}
924
925void
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000926FTDialog::addBrowseItems(FileInfo *pFI)
927{
Dennis Syrovatskyb0b72472005-12-15 10:02:16 +0000928 if (m_pBrowseDlg == NULL) return;
929
930 m_pBrowseDlg->addItems(pFI);
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000931}
932
933void
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000934FTDialog::processDlgMsgs()
935{
936 MSG msg;
937 while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) != 0) {
938 TranslateMessage(&msg);
939 DispatchMessage(&msg);
940 }
941}
942
943void
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000944FTDialog::postCheckTransferQueueMsg()
945{
946 PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
947}
948
949void
950FTDialog::postUploadFilePortionMsg()
951{
952 PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0);
953}
954
955void
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000956FTDialog::postCheckDeleteQueueMsg()
957{
958 PostMessage(m_hwndFTDialog, m_msgCheckDeleteQueue, 0, 0);
959}
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000960
961FTDialog::CancelingDlg::CancelingDlg(FTDialog *pFTDlg)
962{
963 m_pFTDlg = pFTDlg;
964 m_hwndDlg = NULL;
965}
966
967FTDialog::CancelingDlg::~CancelingDlg()
968{
969 destroy();
970}
971
972bool
973FTDialog::CancelingDlg::create()
974{
975 if (m_hwndDlg != NULL) return false;
976
977 m_hwndDlg = CreateDialogParam(GetModuleHandle(0),
978 MAKEINTRESOURCE(IDD_FTCANCELING),
979 NULL,
980 (DLGPROC) cancelingDlgProc,
981 (LONG) this);
982
983 if (m_hwndDlg == NULL) return false;
984
985 ShowWindow(m_hwndDlg, SW_SHOW);
986 DrawIcon(GetDC(m_hwndDlg), 15, 22, LoadIcon(NULL, IDI_QUESTION));
987 UpdateWindow(m_hwndDlg);
988
989 return true;
990}
991
992bool
993FTDialog::CancelingDlg::destroy()
994{
995 if (m_hwndDlg == NULL) return true;
996
997 if (DestroyWindow(m_hwndDlg)) {
998 m_hwndDlg = NULL;
999 return true;
1000 } else {
1001 return false;
1002 }
1003}
1004
1005bool
1006FTDialog::CancelingDlg::close(bool bResult)
1007{
1008 if (m_hwndDlg == NULL) return true;
1009
1010 destroy();
1011
1012 m_pFTDlg->cancelTransfer(bResult);
1013
1014 return false;
1015}
1016
1017BOOL CALLBACK
1018FTDialog::CancelingDlg::cancelingDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
1019{
1020 FTDialog::CancelingDlg *_this = (FTDialog::CancelingDlg *) GetWindowLong(hwnd, GWL_USERDATA);
1021 switch (uMsg)
1022 {
1023 case WM_INITDIALOG:
1024 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
1025 SetForegroundWindow(hwnd);
1026 return TRUE;
1027
1028 case WM_COMMAND:
1029 switch (LOWORD(wParam))
1030 {
1031 case IDOK:
1032 _this->close(true);
1033 return TRUE;
1034 case IDCANCEL:
1035 _this->close(false);
1036 return TRUE;
1037 }
1038 break;
1039 case WM_CLOSE:
1040 _this->close(false);
1041 return TRUE;
1042 }
1043 return FALSE;
1044}
Dennis Syrovatskyf0928942005-12-14 15:12:45 +00001045
1046FTDialog::CreateFolderDlg::CreateFolderDlg(FTDialog *pFTDlg) : Dialog(GetModuleHandle(0))
1047{
1048 m_pFTDlg = pFTDlg;
1049 m_szFolderName[0] = '\0';
1050}
1051
1052FTDialog::CreateFolderDlg::~CreateFolderDlg()
1053{
1054
1055}
1056
1057bool
1058FTDialog::CreateFolderDlg::create()
1059{
1060 return showDialog(MAKEINTRESOURCE(IDD_FTCREATEFOLDER), m_pFTDlg->getWndHandle());
1061}
1062
1063bool
1064FTDialog::CreateFolderDlg::onOk()
1065{
1066 strcpy(m_szFolderName, getItemString(IDC_FTFOLDERNAME));
1067 return true;
1068}
Dennis Syrovatsky95509432005-12-14 16:42:33 +00001069
1070FTDialog::RenameDlg::RenameDlg(FTDialog *pFTDlg) : CreateFolderDlg(pFTDlg)
1071{
1072 m_bFolder = false;
1073}
1074
1075FTDialog::RenameDlg::~RenameDlg()
1076{
1077}
1078
1079bool
1080FTDialog::RenameDlg::create(char *pFilename, bool bFolder)
1081{
1082 m_bFolder = bFolder;
1083 strcpy(m_szFilename, pFilename);
1084 return showDialog(MAKEINTRESOURCE(IDD_FTCREATEFOLDER), m_pFTDlg->getWndHandle());
1085}
1086
1087void
1088FTDialog::RenameDlg::initDialog()
1089{
1090 char buf[2*FT_FILENAME_SIZE];
1091 if (m_bFolder) {
1092 SetWindowText(handle, "Rename Folder");
1093 sprintf(buf, "Rename Folder '%s'", m_szFilename);
1094 } else {
1095 SetWindowText(handle, "Rename File");
1096 sprintf(buf, "Rename File '%s'", m_szFilename);
1097 }
1098
1099 setItemString(IDC_FTTEXT, buf);
1100 setItemString(IDC_FTFOLDERNAME, m_szFilename);
1101 SendDlgItemMessage(handle, IDC_FTFOLDERNAME, EM_SETSEL, (WPARAM) 0, (LPARAM) -1);
Dennis Syrovatskyfabe3d82005-12-15 07:40:05 +00001102}