blob: b7ec9ba9f816acb710576ac24b38658772059786 [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 Syrovatsky2142b4a2005-12-14 11:03:19 +000039 m_bCloseDlgAfterCancel = false;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000040
41 m_pLocalLV = NULL;
42 m_pRemoteLV = NULL;
43 m_pProgress = NULL;
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +000044 m_pCancelingDlg = NULL;
Dennis Syrovatskyf0928942005-12-14 15:12:45 +000045 m_pCreateFolderDlg = NULL;
Dennis Syrovatsky95509432005-12-14 16:42:33 +000046 m_pRenameDlg = NULL;
Dennis Syrovatskyb0b72472005-12-15 10:02:16 +000047 m_pBrowseDlg = NULL;
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000048
Dennis Syrovatskyec906992005-11-07 09:56:06 +000049 m_hwndFTDialog = NULL;
Dennis Syrovatskyb595e032005-11-09 06:24:25 +000050 m_hwndLocalPath = NULL;
51 m_hwndRemotePath = NULL;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000052
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000053 m_FTMenuSource = 0;
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +000054 m_dwNumStatusStrings = 0;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000055
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000056 m_szLocalPath[0] = '\0';
57 m_szRemotePath[0] = '\0';
58 m_szLocalPathTmp[0] = '\0';
59 m_szRemotePathTmp[0] = '\0';
Dennis Syrovatskyf0928942005-12-14 15:12:45 +000060 m_szCreateFolderName[0] = '\0';
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000061}
62
63FTDialog::~FTDialog()
64{
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000065 destroyFTDialog();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000066}
67
68bool
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000069FTDialog::createFTDialog(HWND hwndParent)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000070{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000071 if (m_hwndFTDialog != NULL) {
72 ShowWindow(m_hwndFTDialog, SW_SHOW);
73 m_bDlgShown = true;
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +000074 showLocalLVItems();
75 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000076 return true;
77 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000078
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +000079 if (!initFTWndMsgs()) return false;
80
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000081 m_hwndFTDialog = CreateDialogParam(m_hInstance,
82 MAKEINTRESOURCE(IDD_FILETRANSFER_DLG),
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000083 hwndParent,
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000084 (DLGPROC) FTDialogProc,
85 (LONG) this);
86
87 if (m_hwndFTDialog == NULL) return false;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000088
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000089 HWND hwndLocalList = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALLIST);
90 HWND hwndRemoteList = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTELIST);
91
92 if ((hwndLocalList == NULL) || (hwndRemoteList == NULL)) {
93 destroyFTDialog();
94 return false;
95 }
96
97 m_pLocalLV = new FTListView(hwndLocalList);
98 m_pRemoteLV = new FTListView(hwndRemoteList);
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000099
100 m_pProgress = new FTProgress(m_hwndFTDialog);
101
102 if ((m_pLocalLV == NULL) || (m_pRemoteLV == NULL) || (m_pProgress == NULL)) {
103 destroyFTDialog();
104 return false;
105 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000106
107 initFTDialog();
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000108
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000109 ShowWindow(m_hwndFTDialog, SW_SHOW);
110 UpdateWindow(m_hwndFTDialog);
111 m_bDlgShown = true;
112 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000113}
114
115bool
116FTDialog::initFTDialog()
117{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000118 m_pLocalLV->initialize(m_hInstance);
119 m_pRemoteLV->initialize(m_hInstance);
120
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000121 m_hwndLocalPath = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALPATH);
122 m_hwndRemotePath = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTEPATH);
123
124 setIcon(IDC_FTLOCALUP, IDI_FTUP);
125 setIcon(IDC_FTREMOTEUP, IDI_FTUP);
126 setIcon(IDC_FTLOCALRELOAD, IDI_FTRELOAD);
127 setIcon(IDC_FTREMOTERELOAD, IDI_FTRELOAD);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000128
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000129 showLocalLVItems();
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000130 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000131
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000132 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000133}
134
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000135bool
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000136FTDialog::initFTWndMsgs()
137{
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000138 m_msgCheckDeleteQueue = RegisterWindowMessage(szCheckDeleteQueueText);
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000139 m_msgCheckTransferQueue = RegisterWindowMessage(szCheckTransferQueueText);
140 m_msgUploadFilePortion = RegisterWindowMessage(szUploadFilePortionText);
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000141
Dennis Syrovatsky95a01ff2005-12-14 07:58:29 +0000142 if ((m_msgCheckDeleteQueue) &&
143 (m_msgCheckTransferQueue) &&
144 (m_msgUploadFilePortion)) return true;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000145
146 return false;
147}
148
149bool
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000150FTDialog::closeFTDialog()
151{
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000152 ShowWindow(m_hwndFTDialog, SW_HIDE);
153 m_bDlgShown = false;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000154 return true;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000155}
156
157void
158FTDialog::destroyFTDialog()
159{
160 if (m_pLocalLV != NULL) {
161 delete m_pLocalLV;
162 m_pLocalLV = NULL;
163 }
164
165 if (m_pRemoteLV != NULL) {
166 delete m_pRemoteLV;
167 m_pRemoteLV = NULL;
168 }
169
170 if (m_pProgress != NULL) {
171 delete m_pProgress;
172 m_pProgress = NULL;
173 }
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000174
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000175 if(m_pCancelingDlg != NULL) {
176 delete m_pCancelingDlg;
177 m_pCancelingDlg = NULL;
178 }
179
180 if (m_pCreateFolderDlg != NULL) {
181 delete m_pCreateFolderDlg;
182 m_pCreateFolderDlg = NULL;
183 }
184
185 if(m_pRenameDlg != NULL) {
186 delete m_pRenameDlg;
187 m_pRenameDlg = NULL;
188 }
189
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000190 if (DestroyWindow(m_hwndFTDialog)) m_hwndFTDialog = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000191}
192
193BOOL CALLBACK
194FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
195{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000196 FTDialog *_this = (FTDialog *) GetWindowLong(hwnd, GWL_USERDATA);
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000197
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000198 switch (uMsg)
199 {
200 case WM_INITDIALOG:
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000201 _this = (FTDialog*)lParam;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000202 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
203 SetForegroundWindow(hwnd);
204 return TRUE;
205 case WM_COMMAND:
206 {
207 switch (LOWORD(wParam))
208 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000209 case IDC_FTLOCALPATH:
210 switch (HIWORD (wParam))
211 {
212 case CBN_SETFOCUS:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000213 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000214 return FALSE;
215 }
216 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000217 case IDC_FTREMOTEPATH:
218 switch (HIWORD (wParam))
219 {
220 case CBN_SETFOCUS:
221 _this->setButtonsState();
222 return FALSE;
223 }
224 break;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000225 case IDC_FTCLOSE:
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000226 _this->onClose();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000227 return FALSE;
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000228 case IDC_FTLOCALBROWSE:
229 _this->onLocalBrowse();
230 return FALSE;
231 case IDC_FTREMOTEBROWSE:
232 _this->onRemoteBrowse();
233 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000234 case IDC_FTLOCALUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000235 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000236 _this->onLocalOneUpFolder();
237 return FALSE;
238 case IDC_FTREMOTEUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000239 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000240 _this->onRemoteOneUpFolder();
241 return FALSE;
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000242 case IDC_FTLOCALRELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000243 _this->setButtonsState();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000244 _this->onLocalReload();
245 return FALSE;
246 case IDC_FTREMOTERELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000247 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000248 _this->onRemoteReload();
249 return FALSE;
250 case IDC_FTUPLOAD:
251 _this->onUpload();
252 return FALSE;
253 case IDC_FTDOWNLOAD:
254 _this->onDownload();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000255 return FALSE;
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000256 case IDC_FTCANCEL:
257 _this->onFTCancel();
258 return FALSE;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000259 case IDM_FTCOPY:
260 case IDM_FTRENAME:
261 case IDM_FTDELETE:
262 case IDM_FTCANCEL:
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000263 case IDM_FTCREATEFOLDER:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000264 _this->onFTMenuCommand(LOWORD(wParam));
265 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000266 }
267 }
268 break;
269
270 case WM_NOTIFY:
271 switch (LOWORD(wParam))
272 {
273 case IDC_FTLOCALLIST:
274 switch (((LPNMHDR) lParam)->code)
275 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000276 case NM_CLICK:
277 case NM_SETFOCUS:
278 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000279 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000280 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000281 case LVN_GETDISPINFO:
282 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
283 return FALSE;
284 case LVN_ITEMACTIVATE:
285 _this->onLocalItemActivate((LPNMITEMACTIVATE) lParam);
286 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000287 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000288 _this->onLocalRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000289 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000290 }
291 break;
292 case IDC_FTREMOTELIST:
293 switch (((LPNMHDR) lParam)->code)
294 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000295 case NM_CLICK:
296 case NM_SETFOCUS:
297 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000298 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000299 case LVN_GETDISPINFO:
300 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
301 return FALSE;
302 case LVN_ITEMACTIVATE:
303 _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
304 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000305 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000306 _this->onRemoteRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000307 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000308 }
309 break;
310 }
311 break;
312 case WM_CLOSE:
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000313 _this->onClose();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000314 return FALSE;
315 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000316
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000317 if (_this != NULL) {
318 if (uMsg == _this->m_msgCheckTransferQueue)
319 _this->m_pFileTransfer->checkTransferQueue();
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000320
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000321 if (uMsg == _this->m_msgUploadFilePortion)
322 _this->m_pFileTransfer->uploadFilePortion();
323
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000324 if (uMsg == _this->m_msgCheckDeleteQueue)
325 _this->m_pFileTransfer->checkDeleteQueue();
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000326 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000327
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000328 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000329}
330
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000331void
332FTDialog::onClose()
333{
334 if (m_pFileTransfer->isTransferEnable()) {
335 m_bCloseDlgAfterCancel = true;
336 onFTCancel();
337 } else {
338 closeFTDialog();
339 }
340}
341
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000342void
343FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
344{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000345 if (strlen(m_szLocalPath) == 0) {
346 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
347 } else {
348 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
349 }
350 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000351}
352
353void
354FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
355{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000356 if (strlen(m_szRemotePath) == 0) {
357 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
358 } else {
359 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
360 }
361 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000362}
363
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000364void
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000365FTDialog::onLocalBrowse()
366{
367
368}
369
370void
371FTDialog::onRemoteBrowse()
372{
Dennis Syrovatskyb0b72472005-12-15 10:02:16 +0000373 if (m_pBrowseDlg != NULL) return;
374
375 m_pBrowseDlg = new FTBrowseDlg(this);
376 m_pBrowseDlg->create();
377
378 m_pFileTransfer->requestFileList("", FT_FLR_DEST_BROWSE, true);
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000379}
380
381void
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000382FTDialog::onLocalReload()
383{
384 strcpy(m_szLocalPathTmp, m_szLocalPath);
385 showLocalLVItems();
386}
387
388void
389FTDialog::onRemoteReload()
390{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000391 strcpy(m_szRemotePathTmp, m_szRemotePath);
392 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000393}
394
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000395void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000396FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000397{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000398 FolderManager fm;
399 FileInfo fileInfo;
400 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
401 fileInfo.sort();
402 m_pLocalLV->deleteAllItems();
403 m_pLocalLV->addItems(&fileInfo);
404 strcpy(m_szLocalPath, m_szLocalPathTmp);
405 SetWindowText(m_hwndLocalPath, m_szLocalPath);
406 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000407}
408
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000409void
410FTDialog::showRemoteLVItems()
411{
412 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
413}
414
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000415void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000416FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000417{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000418 pFI->sort();
419 m_pRemoteLV->deleteAllItems();
420 m_pRemoteLV->addItems(pFI);
421 strcpy(m_szRemotePath, m_szRemotePathTmp);
422 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000423 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000424}
425
426void
427FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000428{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000429 strcpy(m_szLocalPathTmp, m_szLocalPath);
430 makeOneUpFolder(m_szLocalPathTmp);
431 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000432}
433
434void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000435FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000436{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000437 strcpy(m_szRemotePathTmp, m_szRemotePath);
438 makeOneUpFolder(m_szRemotePathTmp);
439 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000440}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000441
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000442void
443FTDialog::reqFolderUnavailable()
444{
445 strcpy(m_szRemotePathTmp, m_szRemotePath);
446}
447
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000448int
449FTDialog::makeOneUpFolder(char *pPath)
450{
451 if (strcmp(pPath, "") == 0) return strlen(pPath);
452 for (int i=(strlen(pPath)-2); i>=0; i--) {
453 if (pPath[i] == '\\') {
454 pPath[i] = '\0';
455 break;
456 }
457 if (i == 0) pPath[0] = '\0';
458 }
459 return strlen(pPath);
460}
461
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000462void
463FTDialog::onUpload()
464{
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000465 FileInfo fi;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000466 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
467 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD);
468 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000469 setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000470}
471
472void
473FTDialog::onDownload()
474{
Dennis Syrovatsky3f5ccbd2005-12-13 04:33:07 +0000475 FileInfo fi;
476 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
477 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_DOWNLOAD);
478 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000479 setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000480}
481
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000482void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000483FTDialog::onLocalRename()
484{
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000485 if (m_pRenameDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000486
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000487 FileInfo fi;
488 if (m_pLocalLV->getSelectedItems(&fi) == 1) {
489 unsigned int flags = fi.getFlagsAt(0);
490 m_pRenameDlg = new FTDialog::RenameDlg(this);
491 if (m_pRenameDlg != NULL) {
492 if (flags & FT_ATTR_DIR) {
493 m_pRenameDlg->create(fi.getNameAt(0), true);
494 } else {
495 m_pRenameDlg->create(fi.getNameAt(0), false);
496 }
497 if (strlen(m_pRenameDlg->getFolderName()) > 0) {
498 FolderManager fm;
499 fm.renameIt(m_szLocalPath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
500 showLocalLVItems();
501 }
502 delete m_pRenameDlg;
503 m_pRenameDlg = NULL;
504 }
505 }
506 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000507}
508
509void
510FTDialog::onRemoteRename()
511{
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000512 if (m_pRenameDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000513
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000514 FileInfo fi;
515 if (m_pRemoteLV->getSelectedItems(&fi) == 1) {
516 unsigned int flags = fi.getFlagsAt(0);
517 m_pRenameDlg = new FTDialog::RenameDlg(this);
518 if (m_pRenameDlg != NULL) {
519 if (flags & FT_ATTR_DIR) {
520 m_pRenameDlg->create(fi.getNameAt(0), true);
521 } else {
522 m_pRenameDlg->create(fi.getNameAt(0), false);
523 }
524 if (strlen(m_pRenameDlg->getFolderName()) > 0) {
525 m_pFileTransfer->renameRemote(m_szRemotePath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
526 }
527 delete m_pRenameDlg;
528 m_pRenameDlg = NULL;
529 }
530 }
531 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000532}
533
534void
535FTDialog::onLocalDelete()
536{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000537 FileInfo fi;
538 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
539 m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL);
540 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000541 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000542}
543
544void
545FTDialog::onRemoteDelete()
546{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000547 FileInfo fi;
548 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
549 m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE);
550 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000551 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000552}
553
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000554bool
555FTDialog::getCreateFolderName()
556{
557 if (m_pCreateFolderDlg != NULL) return false;
558
559 bool bResult = false;
560
561 m_pCreateFolderDlg = new FTDialog::CreateFolderDlg(this);
562 m_pCreateFolderDlg->create();
563 if (strlen(m_pCreateFolderDlg->getFolderName()) != 0) {
564 strcpy(m_szCreateFolderName, m_pCreateFolderDlg->getFolderName());
565 bResult = true;
566 } else {
567 m_szCreateFolderName[0] = '\0';
568 bResult = false;
569 }
570 delete m_pCreateFolderDlg;
571 m_pCreateFolderDlg = NULL;
572
573 return bResult;
574}
575
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000576void
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000577FTDialog::onLocalCreateFolder()
578{
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000579 if (getCreateFolderName()) {
580 char path[FT_FILENAME_SIZE];
581 sprintf(path, "%s\\%s", m_szLocalPath, m_szCreateFolderName);
582 setStatusText("Creating Local Folder: %s", path);
583 FolderManager fm;
584 if (fm.createDir(path)) showLocalLVItems();
585 }
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000586}
587
588void
589FTDialog::onRemoteCreateFolder()
590{
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000591 if (getCreateFolderName()) {
592 m_pFileTransfer->createRemoteFolder(m_szRemotePath, m_szCreateFolderName);
593 }
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000594}
595
596void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000597FTDialog::onFTCancel()
598{
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000599 if (m_pCancelingDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000600
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000601 m_pCancelingDlg = new CancelingDlg(this);
602
603 m_pCancelingDlg->create();
604}
605
606void
607FTDialog::cancelTransfer(bool bResult)
608{
609 if (m_pCancelingDlg != NULL) {
610 delete m_pCancelingDlg;
611 m_pCancelingDlg = NULL;
612 }
613
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000614 setButtonsState();
615
616 if ((m_bCloseDlgAfterCancel) && (bResult)) {
617 m_bCloseDlgAfterCancel = false;
618 closeFTDialog();
619 }
620
621 m_pFileTransfer->m_bCancel = bResult;
622}
623
624void
625FTDialog::afterCancelTransfer()
626{
627 if (m_pCancelingDlg != NULL) {
628 delete m_pCancelingDlg;
629 m_pCancelingDlg = NULL;
630 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000631}
632
633void
634FTDialog::onFTMenuCommand(int command)
635{
636 switch (command)
637 {
638 case IDM_FTCOPY:
639 {
640 switch (m_FTMenuSource)
641 {
642 case IDC_FTLOCALLIST: onUpload(); break;
643 case IDC_FTREMOTELIST: onDownload(); break;
644 default: break;
645 }
646 }
647 break;
648 case IDM_FTRENAME:
649 {
650 switch (m_FTMenuSource)
651 {
652 case IDC_FTLOCALLIST: onLocalRename(); break;
653 case IDC_FTREMOTELIST: onRemoteRename(); break;
654 default: break;
655 }
656 }
657 break;
658 case IDM_FTDELETE:
659 {
660 switch (m_FTMenuSource)
661 {
662 case IDC_FTLOCALLIST: onLocalDelete(); break;
663 case IDC_FTREMOTELIST: onRemoteDelete(); break;
664 default: break;
665 }
666 }
667 break;
668 case IDM_FTCANCEL: onFTCancel(); break;
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000669 case IDM_FTCREATEFOLDER:
670 {
671 switch (m_FTMenuSource)
672 {
673 case IDC_FTLOCALLIST: onLocalCreateFolder(); break;
674 case IDC_FTREMOTELIST: onRemoteCreateFolder(); break;
675 default: break;
676 }
677 }
678 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000679 default:
680 break;
681 }
682}
683
684void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000685FTDialog::onLocalRButton()
686{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000687 refreshBtnState();
688 m_FTMenuSource = IDC_FTLOCALLIST;
689 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
690 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
691 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000692}
693
694void
695FTDialog::onRemoteRButton()
696{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000697 refreshBtnState();
698 m_FTMenuSource = IDC_FTREMOTELIST;
699 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
700 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
701 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000702}
703
704void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000705FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
706 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000707{
708 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
709 HMENU hFTMenu = GetSubMenu(hMenu, 0);
710
711 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
712
713 SetForegroundWindow(m_hwndFTDialog);
714
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000715 if (copyBtnState) {
716 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
717 } else {
718 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
719 }
720 if (createFldBtnState) {
721 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
722 } else {
723 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
724 }
725 if (renameBtnState) {
726 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
727 } else {
728 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
729 }
730 if (deleteBtnState) {
731 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
732 } else {
733 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
734 }
735 if (cancelBtnState) {
736 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
737 } else {
738 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
739 }
740 DrawMenuBar(m_hwndFTDialog);
741
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000742 POINT cursorPosition;
743 GetCursorPos(&cursorPosition);
744 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000745 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000746}
747
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000748void
749FTDialog::setIcon(int dest, int idIcon)
750{
751 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
752 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
753 DestroyIcon((HICON) hIcon);
754}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000755
756void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000757FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000758{
759 if (!m_bDlgShown) return;
760
761 int locPathLen = strlen(m_szLocalPath);
762 int remPathLen = strlen(m_szRemotePath);
763
764 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000765 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000766 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000767 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000768 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
769 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000770 m_BtnState.uploadBtn = false;
771 m_BtnState.deleteLocalBtn = false;
772 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000773 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000774 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000775 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000776 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000777 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000778 m_BtnState.uploadBtn = true;
779 }
780 if (nCount == 1) {
781 m_BtnState.renameLocalBtn = true;
782 } else {
783 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000784 }
785 }
786 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000787 m_BtnState.uploadBtn = false;
788 m_BtnState.createLocalFldBtn = false;
789 m_BtnState.deleteLocalBtn = false;
790 m_BtnState.renameLocalBtn = false;
791 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000792 }
793 } else {
794 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000795 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000796 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000797 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000798 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
799 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000800 m_BtnState.downloadBtn = false;
801 m_BtnState.deleteRemoteBtn = false;
802 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000803 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000804 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000805 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000806 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000807 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000808 m_BtnState.downloadBtn = true;
809 }
810 if (nCount == 1) {
811 m_BtnState.renameRemoteBtn = true;
812 } else {
813 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000814 }
815 }
816 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000817 m_BtnState.downloadBtn = false;
818 m_BtnState.createRemoteFldBtn = false;
819 m_BtnState.deleteRemoteBtn = false;
820 m_BtnState.renameRemoteBtn = false;
821 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000822 }
823 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000824 }
825 }
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000826 if (m_pFileTransfer->isTransferEnable())
827 m_BtnState.cancelBtn = true;
828 else
829 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000830}
831
832void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000833FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000834{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000835 refreshBtnState();
836
837 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000838 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000839 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
840 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000841 }
842
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000843 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000844 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000845 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
846 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000847 }
848
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000849 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000850 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000851 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
852 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000853 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000854
855 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000856}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000857
858void
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000859FTDialog::setStatusText(LPCSTR format,...)
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000860{
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000861 char text[1024];
862 va_list args;
863 va_start(args, format);
864 int nSize = _vsnprintf(text, sizeof(text), format, args);
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +0000865
866 HWND hStatusBox = GetDlgItem(m_hwndFTDialog, IDC_FTSTATUS);
867
868 LRESULT lRes = SendMessage(hStatusBox, (UINT) CB_INSERTSTRING, (WPARAM) 0, (LPARAM) text);
869 if ((lRes != CB_ERR) && (lRes != CB_ERRSPACE)) {
870 lRes = SendMessage(hStatusBox, (UINT) CB_SETCURSEL, (WPARAM) lRes, (LPARAM) 0);
871 }
872
873 m_dwNumStatusStrings++;
874 if (m_dwNumStatusStrings > FT_MAX_STATUS_STRINGS) {
875 int numItems = SendMessage(hStatusBox, (UINT) CB_GETCOUNT, (WPARAM) 0, (LPARAM) 0);
876 if (numItems != CB_ERR) {
877 m_dwNumStatusStrings--;
878 SendMessage(hStatusBox, (UINT) CB_DELETESTRING, (WPARAM) numItems - 1, (LPARAM) 0);
879 }
880 }
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000881}
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000882
883void
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000884FTDialog::addBrowseItems(FileInfo *pFI)
885{
Dennis Syrovatskyb0b72472005-12-15 10:02:16 +0000886 if (m_pBrowseDlg == NULL) return;
887
888 m_pBrowseDlg->addItems(pFI);
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000889}
890
891void
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000892FTDialog::processDlgMsgs()
893{
894 MSG msg;
895 while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) != 0) {
896 TranslateMessage(&msg);
897 DispatchMessage(&msg);
898 }
899}
900
901void
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000902FTDialog::postCheckTransferQueueMsg()
903{
904 PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
905}
906
907void
908FTDialog::postUploadFilePortionMsg()
909{
910 PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0);
911}
912
913void
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000914FTDialog::postCheckDeleteQueueMsg()
915{
916 PostMessage(m_hwndFTDialog, m_msgCheckDeleteQueue, 0, 0);
917}
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000918
919FTDialog::CancelingDlg::CancelingDlg(FTDialog *pFTDlg)
920{
921 m_pFTDlg = pFTDlg;
922 m_hwndDlg = NULL;
923}
924
925FTDialog::CancelingDlg::~CancelingDlg()
926{
927 destroy();
928}
929
930bool
931FTDialog::CancelingDlg::create()
932{
933 if (m_hwndDlg != NULL) return false;
934
935 m_hwndDlg = CreateDialogParam(GetModuleHandle(0),
936 MAKEINTRESOURCE(IDD_FTCANCELING),
937 NULL,
938 (DLGPROC) cancelingDlgProc,
939 (LONG) this);
940
941 if (m_hwndDlg == NULL) return false;
942
943 ShowWindow(m_hwndDlg, SW_SHOW);
944 DrawIcon(GetDC(m_hwndDlg), 15, 22, LoadIcon(NULL, IDI_QUESTION));
945 UpdateWindow(m_hwndDlg);
946
947 return true;
948}
949
950bool
951FTDialog::CancelingDlg::destroy()
952{
953 if (m_hwndDlg == NULL) return true;
954
955 if (DestroyWindow(m_hwndDlg)) {
956 m_hwndDlg = NULL;
957 return true;
958 } else {
959 return false;
960 }
961}
962
963bool
964FTDialog::CancelingDlg::close(bool bResult)
965{
966 if (m_hwndDlg == NULL) return true;
967
968 destroy();
969
970 m_pFTDlg->cancelTransfer(bResult);
971
972 return false;
973}
974
975BOOL CALLBACK
976FTDialog::CancelingDlg::cancelingDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
977{
978 FTDialog::CancelingDlg *_this = (FTDialog::CancelingDlg *) GetWindowLong(hwnd, GWL_USERDATA);
979 switch (uMsg)
980 {
981 case WM_INITDIALOG:
982 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
983 SetForegroundWindow(hwnd);
984 return TRUE;
985
986 case WM_COMMAND:
987 switch (LOWORD(wParam))
988 {
989 case IDOK:
990 _this->close(true);
991 return TRUE;
992 case IDCANCEL:
993 _this->close(false);
994 return TRUE;
995 }
996 break;
997 case WM_CLOSE:
998 _this->close(false);
999 return TRUE;
1000 }
1001 return FALSE;
1002}
Dennis Syrovatskyf0928942005-12-14 15:12:45 +00001003
1004FTDialog::CreateFolderDlg::CreateFolderDlg(FTDialog *pFTDlg) : Dialog(GetModuleHandle(0))
1005{
1006 m_pFTDlg = pFTDlg;
1007 m_szFolderName[0] = '\0';
1008}
1009
1010FTDialog::CreateFolderDlg::~CreateFolderDlg()
1011{
1012
1013}
1014
1015bool
1016FTDialog::CreateFolderDlg::create()
1017{
1018 return showDialog(MAKEINTRESOURCE(IDD_FTCREATEFOLDER), m_pFTDlg->getWndHandle());
1019}
1020
1021bool
1022FTDialog::CreateFolderDlg::onOk()
1023{
1024 strcpy(m_szFolderName, getItemString(IDC_FTFOLDERNAME));
1025 return true;
1026}
Dennis Syrovatsky95509432005-12-14 16:42:33 +00001027
1028FTDialog::RenameDlg::RenameDlg(FTDialog *pFTDlg) : CreateFolderDlg(pFTDlg)
1029{
1030 m_bFolder = false;
1031}
1032
1033FTDialog::RenameDlg::~RenameDlg()
1034{
1035}
1036
1037bool
1038FTDialog::RenameDlg::create(char *pFilename, bool bFolder)
1039{
1040 m_bFolder = bFolder;
1041 strcpy(m_szFilename, pFilename);
1042 return showDialog(MAKEINTRESOURCE(IDD_FTCREATEFOLDER), m_pFTDlg->getWndHandle());
1043}
1044
1045void
1046FTDialog::RenameDlg::initDialog()
1047{
1048 char buf[2*FT_FILENAME_SIZE];
1049 if (m_bFolder) {
1050 SetWindowText(handle, "Rename Folder");
1051 sprintf(buf, "Rename Folder '%s'", m_szFilename);
1052 } else {
1053 SetWindowText(handle, "Rename File");
1054 sprintf(buf, "Rename File '%s'", m_szFilename);
1055 }
1056
1057 setItemString(IDC_FTTEXT, buf);
1058 setItemString(IDC_FTFOLDERNAME, m_szFilename);
1059 SendDlgItemMessage(handle, IDC_FTFOLDERNAME, EM_SETSEL, (WPARAM) 0, (LPARAM) -1);
Dennis Syrovatskyfabe3d82005-12-15 07:40:05 +00001060}