blob: a02ae756549f7206ec8af3a573a60474010bb553 [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;
227 case IDC_FTLOCALUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000228 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000229 _this->onLocalOneUpFolder();
230 return FALSE;
231 case IDC_FTREMOTEUP:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000232 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000233 _this->onRemoteOneUpFolder();
234 return FALSE;
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000235 case IDC_FTLOCALRELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000236 _this->setButtonsState();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000237 _this->onLocalReload();
238 return FALSE;
239 case IDC_FTREMOTERELOAD:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000240 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000241 _this->onRemoteReload();
242 return FALSE;
243 case IDC_FTUPLOAD:
244 _this->onUpload();
245 return FALSE;
246 case IDC_FTDOWNLOAD:
247 _this->onDownload();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000248 return FALSE;
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000249 case IDC_FTCANCEL:
250 _this->onFTCancel();
251 return FALSE;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000252 case IDM_FTCOPY:
253 case IDM_FTRENAME:
254 case IDM_FTDELETE:
255 case IDM_FTCANCEL:
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000256 case IDM_FTCREATEFOLDER:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000257 _this->onFTMenuCommand(LOWORD(wParam));
258 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000259 }
260 }
261 break;
262
263 case WM_NOTIFY:
264 switch (LOWORD(wParam))
265 {
266 case IDC_FTLOCALLIST:
267 switch (((LPNMHDR) lParam)->code)
268 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000269 case NM_CLICK:
270 case NM_SETFOCUS:
271 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000272 _this->setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000273 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000274 case LVN_GETDISPINFO:
275 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
276 return FALSE;
277 case LVN_ITEMACTIVATE:
278 _this->onLocalItemActivate((LPNMITEMACTIVATE) lParam);
279 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000280 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000281 _this->onLocalRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000282 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000283 }
284 break;
285 case IDC_FTREMOTELIST:
286 switch (((LPNMHDR) lParam)->code)
287 {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000288 case NM_CLICK:
289 case NM_SETFOCUS:
290 case LVN_ITEMCHANGED:
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000291 _this->setButtonsState();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000292 case LVN_GETDISPINFO:
293 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
294 return FALSE;
295 case LVN_ITEMACTIVATE:
296 _this->onRemoteItemActivate((LPNMITEMACTIVATE) lParam);
297 return FALSE;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000298 case NM_RCLICK:
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000299 _this->onRemoteRButton();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000300 return FALSE;
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000301 }
302 break;
303 }
304 break;
305 case WM_CLOSE:
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000306 _this->onClose();
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000307 return FALSE;
308 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000309
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000310 if (_this != NULL) {
311 if (uMsg == _this->m_msgCheckTransferQueue)
312 _this->m_pFileTransfer->checkTransferQueue();
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000313
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000314 if (uMsg == _this->m_msgUploadFilePortion)
315 _this->m_pFileTransfer->uploadFilePortion();
316
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000317 if (uMsg == _this->m_msgCheckDeleteQueue)
318 _this->m_pFileTransfer->checkDeleteQueue();
Dennis Syrovatsky5ae73f12005-11-30 04:15:40 +0000319 }
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000320
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000321 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000322}
323
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000324void
325FTDialog::onClose()
326{
327 if (m_pFileTransfer->isTransferEnable()) {
328 m_bCloseDlgAfterCancel = true;
329 onFTCancel();
330 } else {
331 closeFTDialog();
332 }
333}
334
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000335void
336FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
337{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000338 if (strlen(m_szLocalPath) == 0) {
339 strcpy(m_szLocalPathTmp, m_pLocalLV->getActivateItemName(lpnmia));
340 } else {
341 sprintf(m_szLocalPathTmp, "%s\\%s", m_szLocalPath, m_pLocalLV->getActivateItemName(lpnmia));
342 }
343 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000344}
345
346void
347FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
348{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000349 if (strlen(m_szRemotePath) == 0) {
350 strcpy(m_szRemotePathTmp, m_pRemoteLV->getActivateItemName(lpnmia));
351 } else {
352 sprintf(m_szRemotePathTmp, "%s\\%s", m_szRemotePath, m_pRemoteLV->getActivateItemName(lpnmia));
353 }
354 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000355}
356
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000357void
358FTDialog::onLocalReload()
359{
360 strcpy(m_szLocalPathTmp, m_szLocalPath);
361 showLocalLVItems();
362}
363
364void
365FTDialog::onRemoteReload()
366{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000367 strcpy(m_szRemotePathTmp, m_szRemotePath);
368 showRemoteLVItems();
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000369}
370
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000371void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000372FTDialog::showLocalLVItems()
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000373{
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000374 FolderManager fm;
375 FileInfo fileInfo;
376 if (fm.getDirInfo(m_szLocalPathTmp, &fileInfo, 0)) {
377 fileInfo.sort();
378 m_pLocalLV->deleteAllItems();
379 m_pLocalLV->addItems(&fileInfo);
380 strcpy(m_szLocalPath, m_szLocalPathTmp);
381 SetWindowText(m_hwndLocalPath, m_szLocalPath);
382 }
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000383}
384
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000385void
386FTDialog::showRemoteLVItems()
387{
388 m_pFileTransfer->requestFileList(m_szRemotePathTmp, FT_FLR_DEST_MAIN, 0);
389}
390
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000391void
Dennis Syrovatskyd6febeb2005-11-10 04:27:49 +0000392FTDialog::addRemoteLVItems(FileInfo *pFI)
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000393{
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000394 pFI->sort();
395 m_pRemoteLV->deleteAllItems();
396 m_pRemoteLV->addItems(pFI);
397 strcpy(m_szRemotePath, m_szRemotePathTmp);
398 SetWindowText(m_hwndRemotePath, m_szRemotePath);
Dennis Syrovatsky4905c8f2005-11-21 15:52:46 +0000399 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000400}
401
402void
403FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000404{
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000405 strcpy(m_szLocalPathTmp, m_szLocalPath);
406 makeOneUpFolder(m_szLocalPathTmp);
407 showLocalLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000408}
409
410void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000411FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000412{
Dennis Syrovatsky4d915dd2005-11-12 06:27:34 +0000413 strcpy(m_szRemotePathTmp, m_szRemotePath);
414 makeOneUpFolder(m_szRemotePathTmp);
415 showRemoteLVItems();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000416}
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000417
Dennis Syrovatsky8b194ee2005-11-10 08:56:34 +0000418void
419FTDialog::reqFolderUnavailable()
420{
421 strcpy(m_szRemotePathTmp, m_szRemotePath);
422}
423
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000424int
425FTDialog::makeOneUpFolder(char *pPath)
426{
427 if (strcmp(pPath, "") == 0) return strlen(pPath);
428 for (int i=(strlen(pPath)-2); i>=0; i--) {
429 if (pPath[i] == '\\') {
430 pPath[i] = '\0';
431 break;
432 }
433 if (i == 0) pPath[0] = '\0';
434 }
435 return strlen(pPath);
436}
437
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000438void
439FTDialog::onUpload()
440{
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000441 FileInfo fi;
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000442 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
443 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_UPLOAD);
444 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000445 setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000446}
447
448void
449FTDialog::onDownload()
450{
Dennis Syrovatsky3f5ccbd2005-12-13 04:33:07 +0000451 FileInfo fi;
452 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
453 m_pFileTransfer->addTransferQueue(m_szLocalPath, m_szRemotePath, &fi, FT_ATTR_COPY_DOWNLOAD);
454 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000455 setButtonsState();
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000456}
457
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000458void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000459FTDialog::onLocalRename()
460{
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000461 if (m_pRenameDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000462
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000463 FileInfo fi;
464 if (m_pLocalLV->getSelectedItems(&fi) == 1) {
465 unsigned int flags = fi.getFlagsAt(0);
466 m_pRenameDlg = new FTDialog::RenameDlg(this);
467 if (m_pRenameDlg != NULL) {
468 if (flags & FT_ATTR_DIR) {
469 m_pRenameDlg->create(fi.getNameAt(0), true);
470 } else {
471 m_pRenameDlg->create(fi.getNameAt(0), false);
472 }
473 if (strlen(m_pRenameDlg->getFolderName()) > 0) {
474 FolderManager fm;
475 fm.renameIt(m_szLocalPath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
476 showLocalLVItems();
477 }
478 delete m_pRenameDlg;
479 m_pRenameDlg = NULL;
480 }
481 }
482 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000483}
484
485void
486FTDialog::onRemoteRename()
487{
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000488 if (m_pRenameDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000489
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000490 FileInfo fi;
491 if (m_pRemoteLV->getSelectedItems(&fi) == 1) {
492 unsigned int flags = fi.getFlagsAt(0);
493 m_pRenameDlg = new FTDialog::RenameDlg(this);
494 if (m_pRenameDlg != NULL) {
495 if (flags & FT_ATTR_DIR) {
496 m_pRenameDlg->create(fi.getNameAt(0), true);
497 } else {
498 m_pRenameDlg->create(fi.getNameAt(0), false);
499 }
500 if (strlen(m_pRenameDlg->getFolderName()) > 0) {
501 m_pFileTransfer->renameRemote(m_szRemotePath, fi.getNameAt(0), m_pRenameDlg->getFolderName());
502 }
503 delete m_pRenameDlg;
504 m_pRenameDlg = NULL;
505 }
506 }
507 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000508}
509
510void
511FTDialog::onLocalDelete()
512{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000513 FileInfo fi;
514 if (m_pLocalLV->getSelectedItems(&fi) > 0) {
515 m_pFileTransfer->addDeleteQueue(m_szLocalPath, &fi, FT_ATTR_DELETE_LOCAL);
516 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000517 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000518}
519
520void
521FTDialog::onRemoteDelete()
522{
Dennis Syrovatsky29440e82005-12-05 09:31:28 +0000523 FileInfo fi;
524 if (m_pRemoteLV->getSelectedItems(&fi) > 0) {
525 m_pFileTransfer->addDeleteQueue(m_szRemotePath, &fi, FT_ATTR_DELETE_REMOTE);
526 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000527 setButtonsState();
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000528}
529
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000530bool
531FTDialog::getCreateFolderName()
532{
533 if (m_pCreateFolderDlg != NULL) return false;
534
535 bool bResult = false;
536
537 m_pCreateFolderDlg = new FTDialog::CreateFolderDlg(this);
538 m_pCreateFolderDlg->create();
539 if (strlen(m_pCreateFolderDlg->getFolderName()) != 0) {
540 strcpy(m_szCreateFolderName, m_pCreateFolderDlg->getFolderName());
541 bResult = true;
542 } else {
543 m_szCreateFolderName[0] = '\0';
544 bResult = false;
545 }
546 delete m_pCreateFolderDlg;
547 m_pCreateFolderDlg = NULL;
548
549 return bResult;
550}
551
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000552void
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000553FTDialog::onLocalCreateFolder()
554{
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000555 if (getCreateFolderName()) {
556 char path[FT_FILENAME_SIZE];
557 sprintf(path, "%s\\%s", m_szLocalPath, m_szCreateFolderName);
558 setStatusText("Creating Local Folder: %s", path);
559 FolderManager fm;
560 if (fm.createDir(path)) showLocalLVItems();
561 }
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000562}
563
564void
565FTDialog::onRemoteCreateFolder()
566{
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000567 if (getCreateFolderName()) {
568 m_pFileTransfer->createRemoteFolder(m_szRemotePath, m_szCreateFolderName);
569 }
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000570}
571
572void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000573FTDialog::onFTCancel()
574{
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000575 if (m_pCancelingDlg != NULL) return;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000576
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000577 m_pCancelingDlg = new CancelingDlg(this);
578
579 m_pCancelingDlg->create();
580}
581
582void
583FTDialog::cancelTransfer(bool bResult)
584{
585 if (m_pCancelingDlg != NULL) {
586 delete m_pCancelingDlg;
587 m_pCancelingDlg = NULL;
588 }
589
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000590 setButtonsState();
591
592 if ((m_bCloseDlgAfterCancel) && (bResult)) {
593 m_bCloseDlgAfterCancel = false;
594 closeFTDialog();
595 }
596
597 m_pFileTransfer->m_bCancel = bResult;
598}
599
600void
601FTDialog::afterCancelTransfer()
602{
603 if (m_pCancelingDlg != NULL) {
604 delete m_pCancelingDlg;
605 m_pCancelingDlg = NULL;
606 }
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000607}
608
609void
610FTDialog::onFTMenuCommand(int command)
611{
612 switch (command)
613 {
614 case IDM_FTCOPY:
615 {
616 switch (m_FTMenuSource)
617 {
618 case IDC_FTLOCALLIST: onUpload(); break;
619 case IDC_FTREMOTELIST: onDownload(); break;
620 default: break;
621 }
622 }
623 break;
624 case IDM_FTRENAME:
625 {
626 switch (m_FTMenuSource)
627 {
628 case IDC_FTLOCALLIST: onLocalRename(); break;
629 case IDC_FTREMOTELIST: onRemoteRename(); break;
630 default: break;
631 }
632 }
633 break;
634 case IDM_FTDELETE:
635 {
636 switch (m_FTMenuSource)
637 {
638 case IDC_FTLOCALLIST: onLocalDelete(); break;
639 case IDC_FTREMOTELIST: onRemoteDelete(); break;
640 default: break;
641 }
642 }
643 break;
644 case IDM_FTCANCEL: onFTCancel(); break;
Dennis Syrovatsky05c424e2005-12-14 11:19:19 +0000645 case IDM_FTCREATEFOLDER:
646 {
647 switch (m_FTMenuSource)
648 {
649 case IDC_FTLOCALLIST: onLocalCreateFolder(); break;
650 case IDC_FTREMOTELIST: onRemoteCreateFolder(); break;
651 default: break;
652 }
653 }
654 break;
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000655 default:
656 break;
657 }
658}
659
660void
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000661FTDialog::onLocalRButton()
662{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000663 refreshBtnState();
664 m_FTMenuSource = IDC_FTLOCALLIST;
665 showFTMenu(m_BtnState.uploadBtn, m_BtnState.createLocalFldBtn,
666 m_BtnState.renameLocalBtn, m_BtnState.deleteLocalBtn,
667 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000668}
669
670void
671FTDialog::onRemoteRButton()
672{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000673 refreshBtnState();
674 m_FTMenuSource = IDC_FTREMOTELIST;
675 showFTMenu(m_BtnState.downloadBtn, m_BtnState.createRemoteFldBtn,
676 m_BtnState.renameRemoteBtn, m_BtnState.deleteRemoteBtn,
677 m_BtnState.cancelBtn);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000678}
679
680void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000681FTDialog::showFTMenu(bool copyBtnState, bool createFldBtnState, bool renameBtnState,
682 bool deleteBtnState, bool cancelBtnState)
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000683{
684 HMENU hMenu = LoadMenu(m_hInstance, MAKEINTRESOURCE(IDR_FTMENU));
685 HMENU hFTMenu = GetSubMenu(hMenu, 0);
686
687 SetMenuDefaultItem(hFTMenu, IDM_FTCOPY, FALSE);
688
689 SetForegroundWindow(m_hwndFTDialog);
690
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000691 if (copyBtnState) {
692 EnableMenuItem(hMenu, IDM_FTCOPY, MF_ENABLED);
693 } else {
694 EnableMenuItem(hMenu, IDM_FTCOPY, MF_DISABLED | MF_GRAYED);
695 }
696 if (createFldBtnState) {
697 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_ENABLED);
698 } else {
699 EnableMenuItem(hMenu, IDM_FTCREATEFOLDER, MF_DISABLED | MF_GRAYED);
700 }
701 if (renameBtnState) {
702 EnableMenuItem(hMenu, IDM_FTRENAME, MF_ENABLED);
703 } else {
704 EnableMenuItem(hMenu, IDM_FTRENAME, MF_DISABLED | MF_GRAYED);
705 }
706 if (deleteBtnState) {
707 EnableMenuItem(hMenu, IDM_FTDELETE, MF_ENABLED);
708 } else {
709 EnableMenuItem(hMenu, IDM_FTDELETE, MF_DISABLED | MF_GRAYED);
710 }
711 if (cancelBtnState) {
712 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_ENABLED);
713 } else {
714 EnableMenuItem(hMenu, IDM_FTCANCEL, MF_DISABLED | MF_GRAYED);
715 }
716 DrawMenuBar(m_hwndFTDialog);
717
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000718 POINT cursorPosition;
719 GetCursorPos(&cursorPosition);
720 TrackPopupMenu(hFTMenu, 0, cursorPosition.x, cursorPosition.y, 0, m_hwndFTDialog, 0);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000721 DestroyMenu(hFTMenu);
Dennis Syrovatsky3f079e72005-11-23 05:23:50 +0000722}
723
Dennis Syrovatsky0b765cc2005-11-10 04:52:10 +0000724void
725FTDialog::setIcon(int dest, int idIcon)
726{
727 HANDLE hIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(idIcon), IMAGE_ICON, 16, 16, LR_SHARED);
728 SendMessage(GetDlgItem(m_hwndFTDialog, dest), BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIcon);
729 DestroyIcon((HICON) hIcon);
730}
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000731
732void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000733FTDialog::refreshBtnState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000734{
735 if (!m_bDlgShown) return;
736
737 int locPathLen = strlen(m_szLocalPath);
738 int remPathLen = strlen(m_szRemotePath);
739
740 if (GetFocus() == m_pLocalLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000741 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000742 if (strlen(m_szLocalPath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000743 m_BtnState.createLocalFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000744 int nCount = ListView_GetSelectedCount(m_pLocalLV->getWndHandle());
745 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000746 m_BtnState.uploadBtn = false;
747 m_BtnState.deleteLocalBtn = false;
748 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000749 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000750 m_BtnState.deleteLocalBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000751 if (remPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000752 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000753 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000754 m_BtnState.uploadBtn = true;
755 }
756 if (nCount == 1) {
757 m_BtnState.renameLocalBtn = true;
758 } else {
759 m_BtnState.renameLocalBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000760 }
761 }
762 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000763 m_BtnState.uploadBtn = false;
764 m_BtnState.createLocalFldBtn = false;
765 m_BtnState.deleteLocalBtn = false;
766 m_BtnState.renameLocalBtn = false;
767 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000768 }
769 } else {
770 if (GetFocus() == m_pRemoteLV->getWndHandle()) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000771 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000772 if (strlen(m_szRemotePath) != 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000773 m_BtnState.createRemoteFldBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000774 int nCount = ListView_GetSelectedCount(m_pRemoteLV->getWndHandle());
775 if (nCount <= 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000776 m_BtnState.downloadBtn = false;
777 m_BtnState.deleteRemoteBtn = false;
778 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000779 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000780 m_BtnState.deleteRemoteBtn = true;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000781 if (locPathLen == 0) {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000782 m_BtnState.downloadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000783 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000784 m_BtnState.downloadBtn = true;
785 }
786 if (nCount == 1) {
787 m_BtnState.renameRemoteBtn = true;
788 } else {
789 m_BtnState.renameRemoteBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000790 }
791 }
792 } else {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000793 m_BtnState.downloadBtn = false;
794 m_BtnState.createRemoteFldBtn = false;
795 m_BtnState.deleteRemoteBtn = false;
796 m_BtnState.renameRemoteBtn = false;
797 m_BtnState.uploadBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000798 }
799 } else {
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000800 }
801 }
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000802 if (m_pFileTransfer->isTransferEnable())
803 m_BtnState.cancelBtn = true;
804 else
805 m_BtnState.cancelBtn = false;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000806}
807
808void
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000809FTDialog::setButtonsState()
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000810{
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000811 refreshBtnState();
812
813 switch (m_BtnState.uploadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000814 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000815 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), FALSE); break;
816 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTUPLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000817 }
818
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000819 switch (m_BtnState.downloadBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000820 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000821 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), FALSE); break;
822 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTDOWNLOAD), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000823 }
824
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000825 switch (m_BtnState.cancelBtn)
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000826 {
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000827 case false: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), FALSE); break;
828 case true: EnableWindow(GetDlgItem(m_hwndFTDialog, IDC_FTCANCEL), TRUE); break;
Dennis Syrovatskyabc2cc52005-11-23 03:52:07 +0000829 }
Dennis Syrovatsky2142b4a2005-12-14 11:03:19 +0000830
831 UpdateWindow(m_hwndFTDialog);
Dennis Syrovatskybe4956b2005-11-23 09:15:12 +0000832}
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000833
834void
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000835FTDialog::setStatusText(LPCSTR format,...)
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000836{
Dennis Syrovatskyc4ed9b72005-11-28 07:10:27 +0000837 char text[1024];
838 va_list args;
839 va_start(args, format);
840 int nSize = _vsnprintf(text, sizeof(text), format, args);
Dennis Syrovatsky922ee6a2005-12-05 10:55:51 +0000841
842 HWND hStatusBox = GetDlgItem(m_hwndFTDialog, IDC_FTSTATUS);
843
844 LRESULT lRes = SendMessage(hStatusBox, (UINT) CB_INSERTSTRING, (WPARAM) 0, (LPARAM) text);
845 if ((lRes != CB_ERR) && (lRes != CB_ERRSPACE)) {
846 lRes = SendMessage(hStatusBox, (UINT) CB_SETCURSEL, (WPARAM) lRes, (LPARAM) 0);
847 }
848
849 m_dwNumStatusStrings++;
850 if (m_dwNumStatusStrings > FT_MAX_STATUS_STRINGS) {
851 int numItems = SendMessage(hStatusBox, (UINT) CB_GETCOUNT, (WPARAM) 0, (LPARAM) 0);
852 if (numItems != CB_ERR) {
853 m_dwNumStatusStrings--;
854 SendMessage(hStatusBox, (UINT) CB_DELETESTRING, (WPARAM) numItems - 1, (LPARAM) 0);
855 }
856 }
Dennis Syrovatsky6806fec2005-11-28 06:12:44 +0000857}
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000858
859void
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000860FTDialog::processDlgMsgs()
861{
862 MSG msg;
863 while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) != 0) {
864 TranslateMessage(&msg);
865 DispatchMessage(&msg);
866 }
867}
868
869void
Dennis Syrovatsky13b4d4c2005-11-28 08:14:18 +0000870FTDialog::postCheckTransferQueueMsg()
871{
872 PostMessage(m_hwndFTDialog, m_msgCheckTransferQueue, 0, 0);
873}
874
875void
876FTDialog::postUploadFilePortionMsg()
877{
878 PostMessage(m_hwndFTDialog, m_msgUploadFilePortion, 0, 0);
879}
880
881void
Dennis Syrovatsky092d9982005-12-05 09:57:05 +0000882FTDialog::postCheckDeleteQueueMsg()
883{
884 PostMessage(m_hwndFTDialog, m_msgCheckDeleteQueue, 0, 0);
885}
Dennis Syrovatsky7b53c662005-12-14 10:18:21 +0000886
887FTDialog::CancelingDlg::CancelingDlg(FTDialog *pFTDlg)
888{
889 m_pFTDlg = pFTDlg;
890 m_hwndDlg = NULL;
891}
892
893FTDialog::CancelingDlg::~CancelingDlg()
894{
895 destroy();
896}
897
898bool
899FTDialog::CancelingDlg::create()
900{
901 if (m_hwndDlg != NULL) return false;
902
903 m_hwndDlg = CreateDialogParam(GetModuleHandle(0),
904 MAKEINTRESOURCE(IDD_FTCANCELING),
905 NULL,
906 (DLGPROC) cancelingDlgProc,
907 (LONG) this);
908
909 if (m_hwndDlg == NULL) return false;
910
911 ShowWindow(m_hwndDlg, SW_SHOW);
912 DrawIcon(GetDC(m_hwndDlg), 15, 22, LoadIcon(NULL, IDI_QUESTION));
913 UpdateWindow(m_hwndDlg);
914
915 return true;
916}
917
918bool
919FTDialog::CancelingDlg::destroy()
920{
921 if (m_hwndDlg == NULL) return true;
922
923 if (DestroyWindow(m_hwndDlg)) {
924 m_hwndDlg = NULL;
925 return true;
926 } else {
927 return false;
928 }
929}
930
931bool
932FTDialog::CancelingDlg::close(bool bResult)
933{
934 if (m_hwndDlg == NULL) return true;
935
936 destroy();
937
938 m_pFTDlg->cancelTransfer(bResult);
939
940 return false;
941}
942
943BOOL CALLBACK
944FTDialog::CancelingDlg::cancelingDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
945{
946 FTDialog::CancelingDlg *_this = (FTDialog::CancelingDlg *) GetWindowLong(hwnd, GWL_USERDATA);
947 switch (uMsg)
948 {
949 case WM_INITDIALOG:
950 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
951 SetForegroundWindow(hwnd);
952 return TRUE;
953
954 case WM_COMMAND:
955 switch (LOWORD(wParam))
956 {
957 case IDOK:
958 _this->close(true);
959 return TRUE;
960 case IDCANCEL:
961 _this->close(false);
962 return TRUE;
963 }
964 break;
965 case WM_CLOSE:
966 _this->close(false);
967 return TRUE;
968 }
969 return FALSE;
970}
Dennis Syrovatskyf0928942005-12-14 15:12:45 +0000971
972FTDialog::CreateFolderDlg::CreateFolderDlg(FTDialog *pFTDlg) : Dialog(GetModuleHandle(0))
973{
974 m_pFTDlg = pFTDlg;
975 m_szFolderName[0] = '\0';
976}
977
978FTDialog::CreateFolderDlg::~CreateFolderDlg()
979{
980
981}
982
983bool
984FTDialog::CreateFolderDlg::create()
985{
986 return showDialog(MAKEINTRESOURCE(IDD_FTCREATEFOLDER), m_pFTDlg->getWndHandle());
987}
988
989bool
990FTDialog::CreateFolderDlg::onOk()
991{
992 strcpy(m_szFolderName, getItemString(IDC_FTFOLDERNAME));
993 return true;
994}
Dennis Syrovatsky95509432005-12-14 16:42:33 +0000995
996FTDialog::RenameDlg::RenameDlg(FTDialog *pFTDlg) : CreateFolderDlg(pFTDlg)
997{
998 m_bFolder = false;
999}
1000
1001FTDialog::RenameDlg::~RenameDlg()
1002{
1003}
1004
1005bool
1006FTDialog::RenameDlg::create(char *pFilename, bool bFolder)
1007{
1008 m_bFolder = bFolder;
1009 strcpy(m_szFilename, pFilename);
1010 return showDialog(MAKEINTRESOURCE(IDD_FTCREATEFOLDER), m_pFTDlg->getWndHandle());
1011}
1012
1013void
1014FTDialog::RenameDlg::initDialog()
1015{
1016 char buf[2*FT_FILENAME_SIZE];
1017 if (m_bFolder) {
1018 SetWindowText(handle, "Rename Folder");
1019 sprintf(buf, "Rename Folder '%s'", m_szFilename);
1020 } else {
1021 SetWindowText(handle, "Rename File");
1022 sprintf(buf, "Rename File '%s'", m_szFilename);
1023 }
1024
1025 setItemString(IDC_FTTEXT, buf);
1026 setItemString(IDC_FTFOLDERNAME, m_szFilename);
1027 SendDlgItemMessage(handle, IDC_FTFOLDERNAME, EM_SETSEL, (WPARAM) 0, (LPARAM) -1);
1028}