blob: 49c948ffbb76e54a14f43d88c434a1716e9e4f77 [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 Syrovatsky6c6786d2005-11-07 09:17:38 +000029FTDialog::FTDialog(HINSTANCE hInst, FileTransfer *pFT)
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000030{
31 m_pFileTransfer = pFT;
32 m_hInstance = hInst;
33 m_bDlgShown = false;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000034
35 m_pLocalLV = NULL;
36 m_pRemoteLV = NULL;
37 m_pProgress = NULL;
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000038
Dennis Syrovatskyec906992005-11-07 09:56:06 +000039 m_hwndFTDialog = NULL;
Dennis Syrovatskyb595e032005-11-09 06:24:25 +000040 m_hwndLocalPath = NULL;
41 m_hwndRemotePath = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000042}
43
44FTDialog::~FTDialog()
45{
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000046 destroyFTDialog();
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000047}
48
49bool
50FTDialog::createFTDialog()
51{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000052 if (m_hwndFTDialog != NULL) return true;
53
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000054 m_hwndFTDialog = CreateDialogParam(m_hInstance,
55 MAKEINTRESOURCE(IDD_FILETRANSFER_DLG),
56 NULL,
57 (DLGPROC) FTDialogProc,
58 (LONG) this);
59
60 if (m_hwndFTDialog == NULL) return false;
61
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000062 HWND hwndLocalList = GetDlgItem(m_hwndFTDialog, IDC_FTLOCALLIST);
63 HWND hwndRemoteList = GetDlgItem(m_hwndFTDialog, IDC_FTREMOTELIST);
64
65 if ((hwndLocalList == NULL) || (hwndRemoteList == NULL)) {
66 destroyFTDialog();
67 return false;
68 }
69
70 m_pLocalLV = new FTListView(hwndLocalList);
71 m_pRemoteLV = new FTListView(hwndRemoteList);
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000072
73 m_pProgress = new FTProgress(m_hwndFTDialog);
74
75 if ((m_pLocalLV == NULL) || (m_pRemoteLV == NULL) || (m_pProgress == NULL)) {
76 destroyFTDialog();
77 return false;
78 }
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000079
80 initFTDialog();
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +000081
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +000082 ShowWindow(m_hwndFTDialog, SW_SHOW);
83 UpdateWindow(m_hwndFTDialog);
84 m_bDlgShown = true;
85 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +000086}
87
88bool
89FTDialog::initFTDialog()
90{
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000091 m_pLocalLV->initialize(m_hInstance);
92 m_pRemoteLV->initialize(m_hInstance);
93
94 m_pProgress->initialize(0,0);
95
Dennis Syrovatskyb595e032005-11-09 06:24:25 +000096 m_hwndLocalPath = GetDlgItem(m_hwndLocalPath, IDC_FTLOCALPATH);
97 m_hwndRemotePath = GetDlgItem(m_hwndRemotePath, IDC_FTREMOTEPATH);
98
Dennis Syrovatsky4ab41852005-11-07 09:52:36 +000099 return true;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000100}
101
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000102bool
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000103FTDialog::closeFTDialog()
104{
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000105 ShowWindow(m_hwndFTDialog, SW_HIDE);
106 m_bDlgShown = false;
Dennis Syrovatsky6c6786d2005-11-07 09:17:38 +0000107 return false;
108}
109
110void
111FTDialog::destroyFTDialog()
112{
113 if (m_pLocalLV != NULL) {
114 delete m_pLocalLV;
115 m_pLocalLV = NULL;
116 }
117
118 if (m_pRemoteLV != NULL) {
119 delete m_pRemoteLV;
120 m_pRemoteLV = NULL;
121 }
122
123 if (m_pProgress != NULL) {
124 delete m_pProgress;
125 m_pProgress = NULL;
126 }
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000127
128 if (DestroyWindow(m_hwndFTDialog)) m_hwndFTDialog = NULL;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000129}
130
131BOOL CALLBACK
132FTDialog::FTDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
133{
134 FTDialog *_this = (FTDialog *) GetWindowLong(hwnd, GWL_USERDATA);
Dennis Syrovatsky58a01ed2005-11-09 08:21:41 +0000135 switch (uMsg)
136 {
137 case WM_INITDIALOG:
138 SetWindowLong(hwnd, GWL_USERDATA, (LONG) lParam);
139 SetForegroundWindow(hwnd);
140 return TRUE;
141 case WM_COMMAND:
142 {
143 switch (LOWORD(wParam))
144 {
145 case IDC_FTCLOSE:
146 _this->closeFTDialog();
147 return FALSE;
148 case IDC_FTLOCALUP:
149 _this->onLocalOneUpFolder();
150 return FALSE;
151 case IDC_FTREMOTEUP:
152 _this->onRemoteOneUpFolder();
153 return FALSE;
154 }
155 }
156 break;
157
158 case WM_NOTIFY:
159 switch (LOWORD(wParam))
160 {
161 case IDC_FTLOCALLIST:
162 switch (((LPNMHDR) lParam)->code)
163 {
164 case LVN_GETDISPINFO:
165 _this->m_pLocalLV->onGetDispInfo((NMLVDISPINFO *) lParam);
166 return FALSE;
167 }
168 break;
169 case IDC_FTREMOTELIST:
170 switch (((LPNMHDR) lParam)->code)
171 {
172 case LVN_GETDISPINFO:
173 _this->m_pRemoteLV->onGetDispInfo((NMLVDISPINFO *) lParam);
174 return FALSE;
175 }
176 break;
177 }
178 break;
179 case WM_CLOSE:
180 case WM_DESTROY:
181 _this->closeFTDialog();
182 return FALSE;
183 }
184 return FALSE;
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000185}
186
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000187void
188FTDialog::onLocalItemActivate(LPNMITEMACTIVATE lpnmia)
189{
190}
191
192void
193FTDialog::onRemoteItemActivate(LPNMITEMACTIVATE lpnmia)
194{
195}
196
197void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000198FTDialog::addLocalLVItems(char *pPath, FileInfo *pFI)
199{
200 pFI->sort();
201 SetWindowText(m_hwndLocalPath, pPath);
202 m_pLocalLV->deleteAllItems();
203 m_pLocalLV->addItems(pFI);
204}
205
206void
207FTDialog::addRemoteLVItems(char *pPath, FileInfo *pFI)
208{
209 pFI->sort();
210 SetWindowText(m_hwndRemotePath, pPath);
211 m_pRemoteLV->deleteAllItems();
212 m_pRemoteLV->addItems(pFI);
213}
214
215void
216FTDialog::onLocalOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000217{
218}
219
220void
Dennis Syrovatskyb595e032005-11-09 06:24:25 +0000221FTDialog::onRemoteOneUpFolder()
Dennis Syrovatsky139d7832005-11-02 05:36:05 +0000222{
223}