blob: b5782d6e709b1ad5b024f810902a6a04b7d1d0dc [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 Syrovatsky4ab41852005-11-07 09:52:36 +000047
Dennis Syrovatskyec906992005-11-07 09:56:06 +000048 m_hwndFTDialog = NULL;
Dennis Syrovatskyb595e032005-11-09 06:24:25 +000049 m_hwndLocalPath = NULL;
50 m_hwndRemotePath = NULL;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000051
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000052 m_FTMenuSource = 0;
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +000053 m_dwNumStatusStrings = 0;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +000054
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000055 m_szLocalPath[0] = '\0';
56 m_szRemotePath[0] = '\0';
57 m_szLocalPathTmp[0] = '\0';
58 m_szRemotePathTmp[0] = '\0';
Dennis Syrovatskyf0928942005-12-14 15:12:45 +000059 m_szCreateFolderName[0] = '\0';
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000060}
61
62FTDialog::~FTDialog()
63{
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000064 destroyFTDialog();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000065}
66
67bool
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000068FTDialog::createFTDialog(HWND hwndParent)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000069{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000070 if (m_hwndFTDialog != NULL) {
71 ShowWindow(m_hwndFTDialog, SW_SHOW);
72 m_bDlgShown = true;
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +000073 showLocalLVItems();
74 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +000075 return true;
76 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000077
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +000078 if (!initFTWndMsgs()) return false;
79
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000080 m_hwndFTDialog = CreateDialogParam(m_hInstance,
81 MAKEINTRESOURCE(IDD_FILETRANSFER_DLG),
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +000082 hwndParent,
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000083 (DLGPROC) FTDialogProc,
84 (LONG) this);
85
86 if (m_hwndFTDialog == NULL) return false;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +000087
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000088 HWND hwndLocalList = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALLIST);
89 HWND hwndRemoteList = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTELIST);
90
91 if ((hwndLocalList == NULL) || (hwndRemoteList == NULL)) {
92 destroyFTDialog();
93 return false;
94 }
95
96 m_pLocalLV = new FTListView(hwndLocalList);
97 m_pRemoteLV = new FTListView(hwndRemoteList);
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000098
99 m_pProgress = new FTProgress(m_hwndFTDialog);
100
101 if ((m_pLocalLV == NULL) || (m_pRemoteLV == NULL) || (m_pProgress == NULL)) {
102 destroyFTDialog();
103 return false;
104 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000105
106 initFTDialog();
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000107
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000108 ShowWindow(m_hwndFTDialog, SW_SHOW);
109 UpdateWindow(m_hwndFTDialog);
110 m_bDlgShown = true;
111 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000112}
113
114bool
115FTDialog::initFTDialog()
116{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000117 m_pLocalLV->initialize(m_hInstance);
118 m_pRemoteLV->initialize(m_hInstance);
119
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000120 m_hwndLocalPath = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALPATH);
121 m_hwndRemotePath = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTEPATH);
122
123 setIcon(IDC_FTLOCALUP, IDI_FTUP);
124 setIcon(IDC_FTREMOTEUP, IDI_FTUP);
125 setIcon(IDC_FTLOCALRELOAD, IDI_FTRELOAD);
126 setIcon(IDC_FTREMOTERELOAD, IDI_FTRELOAD);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000127
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000128 showLocalLVItems();
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000129 showRemoteLVItems();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000130
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +0000131 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000132}
133
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000134bool
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000135FTDialog::initFTWndMsgs()
136{
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000137 m_msgCheckDeleteQueue = RegisterWindowMessage(szCheckDeleteQueueText);
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000138 m_msgCheckTransferQueue = RegisterWindowMessage(szCheckTransferQueueText);
139 m_msgUploadFilePortion = RegisterWindowMessage(szUploadFilePortionText);
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000140
Dennis Syrovatsky95a01ff2005-12-14 07:58:29 +0000141 if ((m_msgCheckDeleteQueue) &&
142 (m_msgCheckTransferQueue) &&
143 (m_msgUploadFilePortion)) return true;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000144
145 return false;
146}
147
148bool
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000149FTDialog::closeFTDialog()
150{
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000151 ShowWindow(m_hwndFTDialog, SW_HIDE);
152 m_bDlgShown = false;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000153 return true;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000154}
155
156void
157FTDialog::destroyFTDialog()
158{
159 if (m_pLocalLV != NULL) {
160 delete m_pLocalLV;
161 m_pLocalLV = NULL;
162 }
163
164 if (m_pRemoteLV != NULL) {
165 delete m_pRemoteLV;
166 m_pRemoteLV = NULL;
167 }
168
169 if (m_pProgress != NULL) {
170 delete m_pProgress;
171 m_pProgress = NULL;
172 }
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000173
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000174 if(m_pCancelingDlg != NULL) {
175 delete m_pCancelingDlg;
176 m_pCancelingDlg = NULL;
177 }
178
179 if (m_pCreateFolderDlg != NULL) {
180 delete m_pCreateFolderDlg;
181 m_pCreateFolderDlg = NULL;
182 }
183
184 if(m_pRenameDlg != NULL) {
185 delete m_pRenameDlg;
186 m_pRenameDlg = NULL;
187 }
188
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000189 if (DestroyWindow(m_hwndFTDialog)) m_hwndFTDialog = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000190}
191
192BOOL CALLBACK
193FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
194{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000195 FTDialog *_this = (FTDialog *) GetWindowLong(hwnd, GWL_USERDATA);
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000196
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000197 switch (uMsg)
198 {
199 case WM_INITDIALOG:
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000200 _this = (FTDialog*)lParam;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000201 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
202 SetForegroundWindow(hwnd);
203 return TRUE;
204 case WM_COMMAND:
205 {
206 switch (LOWORD(wParam))
207 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000208 case IDC_FTLOCALPATH:
209 switch (HIWORD (wParam))
210 {
211 case CBN_SETFOCUS:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000212 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000213 return FALSE;
214 }
215 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000216 case IDC_FTREMOTEPATH:
217 switch (HIWORD (wParam))
218 {
219 case CBN_SETFOCUS:
220 _this->setButtonsState();
221 return FALSE;
222 }
223 break;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000224 case IDC_FTCLOSE:
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000225 _this->onClose();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000226 return FALSE;
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000227 case IDC_FTLOCALBROWSE:
228 _this->onLocalBrowse();
229 return FALSE;
230 case IDC_FTREMOTEBROWSE:
231 _this->onRemoteBrowse();
232 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000233 case IDC_FTLOCALUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000234 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000235 _this->onLocalOneUpFolder();
236 return FALSE;
237 case IDC_FTREMOTEUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000238 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000239 _this->onRemoteOneUpFolder();
240 return FALSE;
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000241 case IDC_FTLOCALRELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000242 _this->setButtonsState();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000243 _this->onLocalReload();
244 return FALSE;
245 case IDC_FTREMOTERELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000246 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000247 _this->onRemoteReload();
248 return FALSE;
249 case IDC_FTUPLOAD:
250 _this->onUpload();
251 return FALSE;
252 case IDC_FTDOWNLOAD:
253 _this->onDownload();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000254 return FALSE;
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000255 case IDC_FTCANCEL:
256 _this->onFTCancel();
257 return FALSE;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000258 case IDM_FTCOPY:
259 case IDM_FTRENAME:
260 case IDM_FTDELETE:
261 case IDM_FTCANCEL:
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000262 case IDM_FTCREATEFOLDER:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000263 _this->onFTMenuCommand(LOWORD(wParam));
264 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000265 }
266 }
267 break;
268
269 case WM_NOTIFY:
270 switch (LOWORD(wParam))
271 {
272 case IDC_FTLOCALLIST:
273 switch (((LPNMHDR) lParam)->code)
274 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000275 case NM_CLICK:
276 case NM_SETFOCUS:
277 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000278 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000279 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000280 case LVN_GETDISPINFO:
281 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
282 return FALSE;
283 case LVN_ITEMACTIVATE:
284 _this->onLocalItemActivate((LPNMITEMACTIVATE) lParam);
285 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000286 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000287 _this->onLocalRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000288 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000289 }
290 break;
291 case IDC_FTREMOTELIST:
292 switch (((LPNMHDR) lParam)->code)
293 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000294 case NM_CLICK:
295 case NM_SETFOCUS:
296 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000297 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000298 case LVN_GETDISPINFO:
299 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
300 return FALSE;
301 case LVN_ITEMACTIVATE:
302 _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
303 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000304 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000305 _this->onRemoteRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000306 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000307 }
308 break;
309 }
310 break;
311 case WM_CLOSE:
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000312 _this->onClose();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000313 return FALSE;
314 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000315
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000316 if (_this != NULL) {
317 if (uMsg == _this->m_msgCheckTransferQueue)
318 _this->m_pFileTransfer->checkTransferQueue();
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000319
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000320 if (uMsg == _this->m_msgUploadFilePortion)
321 _this->m_pFileTransfer->uploadFilePortion();
322
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000323 if (uMsg == _this->m_msgCheckDeleteQueue)
324 _this->m_pFileTransfer->checkDeleteQueue();
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000325 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000326
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000327 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000328}
329
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000330void
331FTDialog::onClose()
332{
333 if (m_pFileTransfer->isTransferEnable()) {
334 m_bCloseDlgAfterCancel = true;
335 onFTCancel();
336 } else {
337 closeFTDialog();
338 }
339}
340
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000341void
342FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
343{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000344 if (strlen(m_szLocalPath) == 0) {
345 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
346 } else {
347 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
348 }
349 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000350}
351
352void
353FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
354{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000355 if (strlen(m_szRemotePath) == 0) {
356 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
357 } else {
358 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
359 }
360 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000361}
362
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000363void
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000364FTDialog::onLocalBrowse()
365{
366
367}
368
369void
370FTDialog::onRemoteBrowse()
371{
372
373}
374
375void
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000376FTDialog::onLocalReload()
377{
378 strcpy(m_szLocalPathTmp, m_szLocalPath);
379 showLocalLVItems();
380}
381
382void
383FTDialog::onRemoteReload()
384{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000385 strcpy(m_szRemotePathTmp, m_szRemotePath);
386 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000387}
388
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000389void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000390FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000391{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000392 FolderManager fm;
393 FileInfo fileInfo;
394 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
395 fileInfo.sort();
396 m_pLocalLV->deleteAllItems();
397 m_pLocalLV->addItems(&fileInfo);
398 strcpy(m_szLocalPath, m_szLocalPathTmp);
399 SetWindowText(m_hwndLocalPath, m_szLocalPath);
400 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000401}
402
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000403void
404FTDialog::showRemoteLVItems()
405{
406 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
407}
408
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000409void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000410FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000411{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000412 pFI->sort();
413 m_pRemoteLV->deleteAllItems();
414 m_pRemoteLV->addItems(pFI);
415 strcpy(m_szRemotePath, m_szRemotePathTmp);
416 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000417 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000418}
419
420void
421FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000422{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000423 strcpy(m_szLocalPathTmp, m_szLocalPath);
424 makeOneUpFolder(m_szLocalPathTmp);
425 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000426}
427
428void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000429FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000430{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000431 strcpy(m_szRemotePathTmp, m_szRemotePath);
432 makeOneUpFolder(m_szRemotePathTmp);
433 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000434}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000435
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000436void
437FTDialog::reqFolderUnavailable()
438{
439 strcpy(m_szRemotePathTmp, m_szRemotePath);
440}
441
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000442int
443FTDialog::makeOneUpFolder(char *pPath)
444{
445 if (strcmp(pPath, "") == 0) return strlen(pPath);
446 for (int i=(strlen(pPath)-2); i>=0; i--) {
447 if (pPath[i] == '\\') {
448 pPath[i] = '\0';
449 break;
450 }
451 if (i == 0) pPath[0] = '\0';
452 }
453 return strlen(pPath);
454}
455
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000456void
457FTDialog::onUpload()
458{
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000459 FileInfo fi;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000460 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
461 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD);
462 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000463 setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000464}
465
466void
467FTDialog::onDownload()
468{
Dennis Syrovatsky3f5ccbd2005-12-13 04:33:07 +0000469 FileInfo fi;
470 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
471 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_DOWNLOAD);
472 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000473 setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000474}
475
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000476void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000477FTDialog::onLocalRename()
478{
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000479 if (m_pRenameDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000480
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000481 FileInfo fi;
482 if (m_pLocalLV->getSelectedItems(&fi) == 1) {
483 unsigned int flags = fi.getFlagsAt(0);
484 m_pRenameDlg = new FTDialog::RenameDlg(this);
485 if (m_pRenameDlg != NULL) {
486 if (flags & FT_ATTR_DIR) {
487 m_pRenameDlg->create(fi.getNameAt(0), true);
488 } else {
489 m_pRenameDlg->create(fi.getNameAt(0), false);
490 }
491 if (strlen(m_pRenameDlg->getFolderName()) > 0) {
492 FolderManager fm;
493 fm.renameIt(m_szLocalPath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
494 showLocalLVItems();
495 }
496 delete m_pRenameDlg;
497 m_pRenameDlg = NULL;
498 }
499 }
500 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000501}
502
503void
504FTDialog::onRemoteRename()
505{
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000506 if (m_pRenameDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000507
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000508 FileInfo fi;
509 if (m_pRemoteLV->getSelectedItems(&fi) == 1) {
510 unsigned int flags = fi.getFlagsAt(0);
511 m_pRenameDlg = new FTDialog::RenameDlg(this);
512 if (m_pRenameDlg != NULL) {
513 if (flags & FT_ATTR_DIR) {
514 m_pRenameDlg->create(fi.getNameAt(0), true);
515 } else {
516 m_pRenameDlg->create(fi.getNameAt(0), false);
517 }
518 if (strlen(m_pRenameDlg->getFolderName()) > 0) {
519 m_pFileTransfer->renameRemote(m_szRemotePath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
520 }
521 delete m_pRenameDlg;
522 m_pRenameDlg = NULL;
523 }
524 }
525 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000526}
527
528void
529FTDialog::onLocalDelete()
530{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000531 FileInfo fi;
532 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
533 m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL);
534 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000535 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000536}
537
538void
539FTDialog::onRemoteDelete()
540{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000541 FileInfo fi;
542 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
543 m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE);
544 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000545 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000546}
547
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000548bool
549FTDialog::getCreateFolderName()
550{
551 if (m_pCreateFolderDlg != NULL) return false;
552
553 bool bResult = false;
554
555 m_pCreateFolderDlg = new FTDialog::CreateFolderDlg(this);
556 m_pCreateFolderDlg->create();
557 if (strlen(m_pCreateFolderDlg->getFolderName()) != 0) {
558 strcpy(m_szCreateFolderName, m_pCreateFolderDlg->getFolderName());
559 bResult = true;
560 } else {
561 m_szCreateFolderName[0] = '\0';
562 bResult = false;
563 }
564 delete m_pCreateFolderDlg;
565 m_pCreateFolderDlg = NULL;
566
567 return bResult;
568}
569
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000570void
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000571FTDialog::onLocalCreateFolder()
572{
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000573 if (getCreateFolderName()) {
574 char path[FT_FILENAME_SIZE];
575 sprintf(path, "%s\\%s", m_szLocalPath, m_szCreateFolderName);
576 setStatusText("Creating Local Folder: %s", path);
577 FolderManager fm;
578 if (fm.createDir(path)) showLocalLVItems();
579 }
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000580}
581
582void
583FTDialog::onRemoteCreateFolder()
584{
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000585 if (getCreateFolderName()) {
586 m_pFileTransfer->createRemoteFolder(m_szRemotePath, m_szCreateFolderName);
587 }
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000588}
589
590void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000591FTDialog::onFTCancel()
592{
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000593 if (m_pCancelingDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000594
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000595 m_pCancelingDlg = new CancelingDlg(this);
596
597 m_pCancelingDlg->create();
598}
599
600void
601FTDialog::cancelTransfer(bool bResult)
602{
603 if (m_pCancelingDlg != NULL) {
604 delete m_pCancelingDlg;
605 m_pCancelingDlg = NULL;
606 }
607
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000608 setButtonsState();
609
610 if ((m_bCloseDlgAfterCancel) && (bResult)) {
611 m_bCloseDlgAfterCancel = false;
612 closeFTDialog();
613 }
614
615 m_pFileTransfer->m_bCancel = bResult;
616}
617
618void
619FTDialog::afterCancelTransfer()
620{
621 if (m_pCancelingDlg != NULL) {
622 delete m_pCancelingDlg;
623 m_pCancelingDlg = NULL;
624 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000625}
626
627void
628FTDialog::onFTMenuCommand(int command)
629{
630 switch (command)
631 {
632 case IDM_FTCOPY:
633 {
634 switch (m_FTMenuSource)
635 {
636 case IDC_FTLOCALLIST: onUpload(); break;
637 case IDC_FTREMOTELIST: onDownload(); break;
638 default: break;
639 }
640 }
641 break;
642 case IDM_FTRENAME:
643 {
644 switch (m_FTMenuSource)
645 {
646 case IDC_FTLOCALLIST: onLocalRename(); break;
647 case IDC_FTREMOTELIST: onRemoteRename(); break;
648 default: break;
649 }
650 }
651 break;
652 case IDM_FTDELETE:
653 {
654 switch (m_FTMenuSource)
655 {
656 case IDC_FTLOCALLIST: onLocalDelete(); break;
657 case IDC_FTREMOTELIST: onRemoteDelete(); break;
658 default: break;
659 }
660 }
661 break;
662 case IDM_FTCANCEL: onFTCancel(); break;
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000663 case IDM_FTCREATEFOLDER:
664 {
665 switch (m_FTMenuSource)
666 {
667 case IDC_FTLOCALLIST: onLocalCreateFolder(); break;
668 case IDC_FTREMOTELIST: onRemoteCreateFolder(); break;
669 default: break;
670 }
671 }
672 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000673 default:
674 break;
675 }
676}
677
678void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000679FTDialog::onLocalRButton()
680{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000681 refreshBtnState();
682 m_FTMenuSource = IDC_FTLOCALLIST;
683 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
684 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
685 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000686}
687
688void
689FTDialog::onRemoteRButton()
690{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000691 refreshBtnState();
692 m_FTMenuSource = IDC_FTREMOTELIST;
693 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
694 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
695 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000696}
697
698void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000699FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
700 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000701{
702 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
703 HMENU hFTMenu = GetSubMenu(hMenu, 0);
704
705 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
706
707 SetForegroundWindow(m_hwndFTDialog);
708
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000709 if (copyBtnState) {
710 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
711 } else {
712 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
713 }
714 if (createFldBtnState) {
715 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
716 } else {
717 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
718 }
719 if (renameBtnState) {
720 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
721 } else {
722 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
723 }
724 if (deleteBtnState) {
725 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
726 } else {
727 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
728 }
729 if (cancelBtnState) {
730 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
731 } else {
732 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
733 }
734 DrawMenuBar(m_hwndFTDialog);
735
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000736 POINT cursorPosition;
737 GetCursorPos(&cursorPosition);
738 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000739 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000740}
741
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000742void
743FTDialog::setIcon(int dest, int idIcon)
744{
745 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
746 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
747 DestroyIcon((HICON) hIcon);
748}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000749
750void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000751FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000752{
753 if (!m_bDlgShown) return;
754
755 int locPathLen = strlen(m_szLocalPath);
756 int remPathLen = strlen(m_szRemotePath);
757
758 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000759 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000760 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000761 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000762 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
763 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000764 m_BtnState.uploadBtn = false;
765 m_BtnState.deleteLocalBtn = false;
766 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000767 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000768 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000769 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000770 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000771 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000772 m_BtnState.uploadBtn = true;
773 }
774 if (nCount == 1) {
775 m_BtnState.renameLocalBtn = true;
776 } else {
777 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000778 }
779 }
780 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000781 m_BtnState.uploadBtn = false;
782 m_BtnState.createLocalFldBtn = false;
783 m_BtnState.deleteLocalBtn = false;
784 m_BtnState.renameLocalBtn = false;
785 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000786 }
787 } else {
788 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000789 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000790 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000791 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000792 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
793 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000794 m_BtnState.downloadBtn = false;
795 m_BtnState.deleteRemoteBtn = false;
796 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000797 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000798 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000799 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000800 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000801 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000802 m_BtnState.downloadBtn = true;
803 }
804 if (nCount == 1) {
805 m_BtnState.renameRemoteBtn = true;
806 } else {
807 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000808 }
809 }
810 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000811 m_BtnState.downloadBtn = false;
812 m_BtnState.createRemoteFldBtn = false;
813 m_BtnState.deleteRemoteBtn = false;
814 m_BtnState.renameRemoteBtn = false;
815 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000816 }
817 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000818 }
819 }
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000820 if (m_pFileTransfer->isTransferEnable())
821 m_BtnState.cancelBtn = true;
822 else
823 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000824}
825
826void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000827FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000828{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000829 refreshBtnState();
830
831 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000832 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000833 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
834 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000835 }
836
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000837 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000838 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000839 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
840 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000841 }
842
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000843 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000844 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000845 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
846 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000847 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000848
849 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000850}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000851
852void
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000853FTDialog::setStatusText(LPCSTR format,...)
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000854{
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000855 char text[1024];
856 va_list args;
857 va_start(args, format);
858 int nSize = _vsnprintf(text, sizeof(text), format, args);
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +0000859
860 HWND hStatusBox = GetDlgItem(m_hwndFTDialog, IDC_FTSTATUS);
861
862 LRESULT lRes = SendMessage(hStatusBox, (UINT) CB_INSERTSTRING, (WPARAM) 0, (LPARAM) text);
863 if ((lRes != CB_ERR) && (lRes != CB_ERRSPACE)) {
864 lRes = SendMessage(hStatusBox, (UINT) CB_SETCURSEL, (WPARAM) lRes, (LPARAM) 0);
865 }
866
867 m_dwNumStatusStrings++;
868 if (m_dwNumStatusStrings > FT_MAX_STATUS_STRINGS) {
869 int numItems = SendMessage(hStatusBox, (UINT) CB_GETCOUNT, (WPARAM) 0, (LPARAM) 0);
870 if (numItems != CB_ERR) {
871 m_dwNumStatusStrings--;
872 SendMessage(hStatusBox, (UINT) CB_DELETESTRING, (WPARAM) numItems - 1, (LPARAM) 0);
873 }
874 }
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000875}
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000876
877void
Dennis Syrovatskycbecfe12005-12-15 09:21:05 +0000878FTDialog::addBrowseItems(FileInfo *pFI)
879{
880}
881
882void
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000883FTDialog::processDlgMsgs()
884{
885 MSG msg;
886 while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) != 0) {
887 TranslateMessage(&msg);
888 DispatchMessage(&msg);
889 }
890}
891
892void
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000893FTDialog::postCheckTransferQueueMsg()
894{
895 PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
896}
897
898void
899FTDialog::postUploadFilePortionMsg()
900{
901 PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0);
902}
903
904void
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000905FTDialog::postCheckDeleteQueueMsg()
906{
907 PostMessage(m_hwndFTDialog, m_msgCheckDeleteQueue, 0, 0);
908}
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000909
910FTDialog::CancelingDlg::CancelingDlg(FTDialog *pFTDlg)
911{
912 m_pFTDlg = pFTDlg;
913 m_hwndDlg = NULL;
914}
915
916FTDialog::CancelingDlg::~CancelingDlg()
917{
918 destroy();
919}
920
921bool
922FTDialog::CancelingDlg::create()
923{
924 if (m_hwndDlg != NULL) return false;
925
926 m_hwndDlg = CreateDialogParam(GetModuleHandle(0),
927 MAKEINTRESOURCE(IDD_FTCANCELING),
928 NULL,
929 (DLGPROC) cancelingDlgProc,
930 (LONG) this);
931
932 if (m_hwndDlg == NULL) return false;
933
934 ShowWindow(m_hwndDlg, SW_SHOW);
935 DrawIcon(GetDC(m_hwndDlg), 15, 22, LoadIcon(NULL, IDI_QUESTION));
936 UpdateWindow(m_hwndDlg);
937
938 return true;
939}
940
941bool
942FTDialog::CancelingDlg::destroy()
943{
944 if (m_hwndDlg == NULL) return true;
945
946 if (DestroyWindow(m_hwndDlg)) {
947 m_hwndDlg = NULL;
948 return true;
949 } else {
950 return false;
951 }
952}
953
954bool
955FTDialog::CancelingDlg::close(bool bResult)
956{
957 if (m_hwndDlg == NULL) return true;
958
959 destroy();
960
961 m_pFTDlg->cancelTransfer(bResult);
962
963 return false;
964}
965
966BOOL CALLBACK
967FTDialog::CancelingDlg::cancelingDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
968{
969 FTDialog::CancelingDlg *_this = (FTDialog::CancelingDlg *) GetWindowLong(hwnd, GWL_USERDATA);
970 switch (uMsg)
971 {
972 case WM_INITDIALOG:
973 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
974 SetForegroundWindow(hwnd);
975 return TRUE;
976
977 case WM_COMMAND:
978 switch (LOWORD(wParam))
979 {
980 case IDOK:
981 _this->close(true);
982 return TRUE;
983 case IDCANCEL:
984 _this->close(false);
985 return TRUE;
986 }
987 break;
988 case WM_CLOSE:
989 _this->close(false);
990 return TRUE;
991 }
992 return FALSE;
993}
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000994
995FTDialog::CreateFolderDlg::CreateFolderDlg(FTDialog *pFTDlg) : Dialog(GetModuleHandle(0))
996{
997 m_pFTDlg = pFTDlg;
998 m_szFolderName[0] = '\0';
999}
1000
1001FTDialog::CreateFolderDlg::~CreateFolderDlg()
1002{
1003
1004}
1005
1006bool
1007FTDialog::CreateFolderDlg::create()
1008{
1009 return showDialog(MAKEINTRESOURCE(IDD_FTCREATEFOLDER), m_pFTDlg->getWndHandle());
1010}
1011
1012bool
1013FTDialog::CreateFolderDlg::onOk()
1014{
1015 strcpy(m_szFolderName, getItemString(IDC_FTFOLDERNAME));
1016 return true;
1017}
Dennis Syrovatsky95509432005-12-14 16:42:33 +00001018
1019FTDialog::RenameDlg::RenameDlg(FTDialog *pFTDlg) : CreateFolderDlg(pFTDlg)
1020{
1021 m_bFolder = false;
1022}
1023
1024FTDialog::RenameDlg::~RenameDlg()
1025{
1026}
1027
1028bool
1029FTDialog::RenameDlg::create(char *pFilename, bool bFolder)
1030{
1031 m_bFolder = bFolder;
1032 strcpy(m_szFilename, pFilename);
1033 return showDialog(MAKEINTRESOURCE(IDD_FTCREATEFOLDER), m_pFTDlg->getWndHandle());
1034}
1035
1036void
1037FTDialog::RenameDlg::initDialog()
1038{
1039 char buf[2*FT_FILENAME_SIZE];
1040 if (m_bFolder) {
1041 SetWindowText(handle, "Rename Folder");
1042 sprintf(buf, "Rename Folder '%s'", m_szFilename);
1043 } else {
1044 SetWindowText(handle, "Rename File");
1045 sprintf(buf, "Rename File '%s'", m_szFilename);
1046 }
1047
1048 setItemString(IDC_FTTEXT, buf);
1049 setItemString(IDC_FTFOLDERNAME, m_szFilename);
1050 SendDlgItemMessage(handle, IDC_FTFOLDERNAME, EM_SETSEL, (WPARAM) 0, (LPARAM) -1);
Dennis Syrovatskyfabe3d82005-12-15 07:40:05 +00001051}