author | Michael Krelin <hacker@klever.net> | 2004-07-05 01:53:09 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2004-07-05 01:53:09 (UTC) |
commit | 9938ea772d372ba955b7bc1f1c48a062c3a36f8a (patch) (unidiff) | |
tree | a98185df944e3a763f9557aa74bc2837b343f048 /RequestDlg.cpp | |
download | pumpkin-9938ea772d372ba955b7bc1f1c48a062c3a36f8a.zip pumpkin-9938ea772d372ba955b7bc1f1c48a062c3a36f8a.tar.gz pumpkin-9938ea772d372ba955b7bc1f1c48a062c3a36f8a.tar.bz2 |
initial commit into svn repository
git-svn-id: http://svn.klever.net/kin/pumpkin/trunk@1 fe716a7a-6dde-0310-88d9-d003556173a8
-rw-r--r-- | RequestDlg.cpp | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/RequestDlg.cpp b/RequestDlg.cpp new file mode 100644 index 0000000..94a8a98 --- a/dev/null +++ b/RequestDlg.cpp | |||
@@ -0,0 +1,299 @@ | |||
1 | // RequestDlg.cpp : implementation file | ||
2 | // | ||
3 | |||
4 | #include "stdafx.h" | ||
5 | #include "PumpKIN.h" | ||
6 | #include "RequestDlg.h" | ||
7 | |||
8 | #ifdef _DEBUG | ||
9 | #define new DEBUG_NEW | ||
10 | #undef THIS_FILE | ||
11 | static char THIS_FILE[] = __FILE__; | ||
12 | #endif | ||
13 | |||
14 | ///////////////////////////////////////////////////////////////////////////// | ||
15 | // CRequestDlg dialog | ||
16 | |||
17 | |||
18 | CRequestDlg::CRequestDlg(CWnd* pParent /*=NULL*/) | ||
19 | : CDialog(CRequestDlg::IDD, pParent) | ||
20 | { | ||
21 | m_Put=TRUE; | ||
22 | m_Drop=FALSE; | ||
23 | //{{AFX_DATA_INIT(CRequestDlg) | ||
24 | m_Host = m_MRUHost; | ||
25 | m_LocalFile = _T(""); | ||
26 | m_RemoteFile = _T(""); | ||
27 | m_Type = _T("octet"); | ||
28 | m_strBSize = _T(""); | ||
29 | //}}AFX_DATA_INIT | ||
30 | } | ||
31 | |||
32 | |||
33 | void CRequestDlg::DoDataExchange(CDataExchange* pDX) | ||
34 | { | ||
35 | CDialog::DoDataExchange(pDX); | ||
36 | if(!pDX->m_bSaveAndValidate) | ||
37 | m_strBSize.Format("%u",m_BSize); | ||
38 | //{{AFX_DATA_MAP(CRequestDlg) | ||
39 | DDX_Control(pDX, IDC_REMOTEFILE, m_RemoteFileCtl); | ||
40 | DDX_Control(pDX, IDC_LOCALFILE, m_LocalFileCtl); | ||
41 | DDX_Control(pDX, IDC_REFRESH, m_RefreshCtl); | ||
42 | DDX_Control(pDX, IDOK, m_OKCtl); | ||
43 | DDX_Control(pDX, IDC_TALKS, m_TalksCtl); | ||
44 | DDX_Control(pDX, IDC_BROWSE, m_BrowseCtl); | ||
45 | DDX_CBString(pDX, IDC_TALKS, m_Host); | ||
46 | DDX_Text(pDX, IDC_LOCALFILE, m_LocalFile); | ||
47 | DDX_Text(pDX, IDC_REMOTEFILE, m_RemoteFile); | ||
48 | DDX_CBString(pDX, IDC_TYPE, m_Type); | ||
49 | DDX_CBString(pDX, IDC_BSIZE, m_strBSize); | ||
50 | //}}AFX_DATA_MAP | ||
51 | if(pDX->m_bSaveAndValidate) | ||
52 | m_BSize=atoi(m_strBSize); | ||
53 | } | ||
54 | |||
55 | CString CRequestDlg::m_MRUHost; | ||
56 | |||
57 | BEGIN_MESSAGE_MAP(CRequestDlg, CDialog) | ||
58 | //{{AFX_MSG_MAP(CRequestDlg) | ||
59 | ON_BN_CLICKED(IDC_REFRESH, OnRefresh) | ||
60 | ON_BN_CLICKED(IDC_BROWSE, OnBrowse) | ||
61 | ON_EN_CHANGE(IDC_LOCALFILE, OnChangeLocalfile) | ||
62 | ON_EN_CHANGE(IDC_REMOTEFILE, OnChangeRemotefile) | ||
63 | ON_CBN_EDITCHANGE(IDC_TALKS, OnEditchangeTalks) | ||
64 | ON_CBN_SELCHANGE(IDC_TALKS, OnSelchangeTalks) | ||
65 | ON_WM_CTLCOLOR() | ||
66 | ON_WM_DROPFILES() | ||
67 | //}}AFX_MSG_MAP | ||
68 | END_MESSAGE_MAP() | ||
69 | |||
70 | ///////////////////////////////////////////////////////////////////////////// | ||
71 | // CRequestDlg message handlers | ||
72 | |||
73 | BOOL CRequestDlg::OnInitDialog() | ||
74 | { | ||
75 | CDialog::OnInitDialog(); | ||
76 | |||
77 | m_RefreshCtl.SendMessage(WM_SETFONT,(WPARAM)::GetStockObject(ANSI_FIXED_FONT),0); | ||
78 | m_BrowseCtl.SetIcon(AfxGetApp()->LoadIcon(IDI_BROWSE)); | ||
79 | |||
80 | CString title; | ||
81 | title.LoadString(m_Put?IDS_TITLE_PUTREQUEST:IDS_TITLE_GETREQUEST); | ||
82 | SetWindowText(title); | ||
83 | UpdateOK(); | ||
84 | SyncNames(); | ||
85 | BringWindowToTop(); | ||
86 | SetForegroundWindow(); | ||
87 | OnRefresh(); | ||
88 | if(!m_MRUHost.IsEmpty()) | ||
89 | m_TalksCtl.SetWindowText(m_MRUHost); | ||
90 | else{ | ||
91 | if(m_TalksCtl.GetCount()==1){ | ||
92 | CString tmp; | ||
93 | m_TalksCtl.GetLBText(0,tmp); | ||
94 | m_TalksCtl.SetWindowText(tmp); | ||
95 | } | ||
96 | } | ||
97 | |||
98 | // CG: The following block was added by the ToolTips component. | ||
99 | { | ||
100 | // Create the ToolTip control. | ||
101 | m_tooltip.Create(this); | ||
102 | m_tooltip.Activate(TRUE); | ||
103 | |||
104 | m_tooltip.AddTool(&m_BrowseCtl,IDC_BROWSE); | ||
105 | m_tooltip.AddTool(&m_RefreshCtl,IDC_REFRESH); | ||
106 | } | ||
107 | |||
108 | if(m_Put) | ||
109 | DragAcceptFiles(); | ||
110 | |||
111 | if(m_Drop || !m_Put){ | ||
112 | m_RemoteFileCtl.SetFocus(); | ||
113 | return FALSE; | ||
114 | } | ||
115 | |||
116 | return TRUE; // return TRUE unless you set the focus to a control | ||
117 | // EXCEPTION: OCX Property Pages should return FALSE | ||
118 | } | ||
119 | |||
120 | void CRequestDlg::OnRefresh() | ||
121 | { | ||
122 | m_TalksCtl.ResetContent(); | ||
123 | CWnd *wnd = CWnd::FindWindow(NULL,NULL); | ||
124 | CString wtalkHead,wtalkAt; | ||
125 | wtalkHead.LoadString(IDS_WTALKHEADING);wtalkAt.LoadString(IDS_WTALKAT); | ||
126 | CString otalxHead,otalxAt; | ||
127 | otalxHead.LoadString(IDS_OTALXHEADING);otalxAt.LoadString(IDS_OTALXAT); | ||
128 | while(wnd){ | ||
129 | CString text; | ||
130 | wnd->GetWindowText(text); | ||
131 | int tw = text.Find(wtalkHead); | ||
132 | if(tw==0){ | ||
133 | text=text.Mid(wtalkHead.GetLength()); | ||
134 | int at = text.Find(wtalkAt); | ||
135 | if(at>=0){ | ||
136 | if(text.GetLength()>(at+wtalkAt.GetLength())){ | ||
137 | text=text.Left(at)+'@'+text.Mid(at+wtalkAt.GetLength()); | ||
138 | text.TrimLeft(); | ||
139 | text.TrimRight(); | ||
140 | VERIFY(m_TalksCtl.AddString(text)>=0); | ||
141 | } | ||
142 | } | ||
143 | }else{ | ||
144 | tw = text.Find(otalxHead); | ||
145 | if(tw==0){ | ||
146 | text=text.Mid(otalxHead.GetLength()); | ||
147 | int at = text.Find(otalxAt); | ||
148 | if(at>=0){ | ||
149 | if(text.GetLength()>(at+otalxAt.GetLength())){ | ||
150 | text=text.Left(at)+'@'+text.Mid(at+otalxAt.GetLength()); | ||
151 | text.TrimLeft(); | ||
152 | text.TrimRight(); | ||
153 | VERIFY(m_TalksCtl.AddString(text)>=0); | ||
154 | } | ||
155 | } | ||
156 | } | ||
157 | } | ||
158 | wnd = wnd->GetNextWindow(); | ||
159 | } | ||
160 | UpdateOK(); | ||
161 | } | ||
162 | |||
163 | void CRequestDlg::OnBrowse() | ||
164 | { | ||
165 | UpdateData(TRUE); | ||
166 | CFileDialog cfd(m_Put,NULL,m_LocalFile.IsEmpty()?NULL:m_LocalFile,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|(m_Put?OFN_FILEMUSTEXIST:OFN_OVERWRITEPROMPT),NULL,this); | ||
167 | CString title; | ||
168 | title.LoadString(IDS_TITLE_BROWSEFILE); | ||
169 | cfd.m_ofn.lpstrTitle=(LPCTSTR)title; | ||
170 | if(cfd.DoModal()==IDOK){ | ||
171 | m_LocalFile=cfd.GetPathName(); | ||
172 | UpdateData(FALSE); | ||
173 | SyncNames(); | ||
174 | UpdateOK(); | ||
175 | } | ||
176 | } | ||
177 | |||
178 | void CRequestDlg::SyncNames() | ||
179 | { | ||
180 | if(m_Put){ | ||
181 | CString tmp; | ||
182 | m_LocalFileCtl.GetWindowText(tmp); | ||
183 | int s=tmp.ReverseFind('\\'); | ||
184 | if(s>=0) | ||
185 | tmp=tmp.Mid(s+1); | ||
186 | else{ | ||
187 | s = tmp.ReverseFind('/'); | ||
188 | if(s>=0) | ||
189 | tmp=tmp.Mid(s+1); | ||
190 | } | ||
191 | if(!tmp.IsEmpty()) | ||
192 | m_RemoteFileCtl.SetWindowText(tmp); | ||
193 | }else{ | ||
194 | CString tmp; | ||
195 | m_RemoteFileCtl.GetWindowText(tmp); | ||
196 | int s=tmp.ReverseFind('\\'); | ||
197 | if(s>=0) | ||
198 | tmp=tmp.Mid(s+1); | ||
199 | else{ | ||
200 | s = tmp.ReverseFind('/'); | ||
201 | if(s>=0) | ||
202 | tmp=tmp.Mid(s+1); | ||
203 | } | ||
204 | if(!tmp.IsEmpty()) | ||
205 | m_LocalFileCtl.SetWindowText(tmp); | ||
206 | } | ||
207 | } | ||
208 | |||
209 | void CRequestDlg::OnChangeLocalfile() | ||
210 | { | ||
211 | if(m_Put) | ||
212 | SyncNames(); | ||
213 | UpdateOK(); | ||
214 | } | ||
215 | |||
216 | void CRequestDlg::OnChangeRemotefile() | ||
217 | { | ||
218 | if(!m_Put) | ||
219 | SyncNames(); | ||
220 | UpdateOK(); | ||
221 | } | ||
222 | |||
223 | void CRequestDlg::UpdateOK() | ||
224 | { | ||
225 | CString t; | ||
226 | m_LocalFileCtl.GetWindowText(t); | ||
227 | if(t.IsEmpty()) | ||
228 | gotodAble; | ||
229 | m_RemoteFileCtl.GetWindowText(t); | ||
230 | if(t.IsEmpty()) | ||
231 | goto dAble; | ||
232 | m_TalksCtl.GetWindowText(t); | ||
233 | if(t.IsEmpty()) | ||
234 | goto dAble; | ||
235 | m_OKCtl.EnableWindow(TRUE); | ||
236 | return; | ||
237 | dAble: | ||
238 | m_OKCtl.EnableWindow(FALSE); | ||
239 | } | ||
240 | |||
241 | void CRequestDlg::OnEditchangeTalks() | ||
242 | { | ||
243 | UpdateOK(); | ||
244 | } | ||
245 | |||
246 | void CRequestDlg::OnSelchangeTalks() | ||
247 | { | ||
248 | UpdateOK(); | ||
249 | } | ||
250 | |||
251 | HBRUSH CRequestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) | ||
252 | { | ||
253 | HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); | ||
254 | UpdateOK(); | ||
255 | return hbr; | ||
256 | } | ||
257 | |||
258 | BOOL CRequestDlg::PreTranslateMessage(MSG* pMsg) | ||
259 | { | ||
260 | // CG: The following block was added by the ToolTips component. | ||
261 | { | ||
262 | // Let the ToolTip process this message. | ||
263 | if(::IsWindow(m_tooltip.m_hWnd)) | ||
264 | m_tooltip.RelayEvent(pMsg); | ||
265 | |||
266 | return CDialog::PreTranslateMessage(pMsg); | ||
267 | } | ||
268 | } | ||
269 | |||
270 | int CRequestDlg::DoModal() | ||
271 | { | ||
272 | int rv = CDialog::DoModal(); | ||
273 | if(rv==IDOK) | ||
274 | m_MRUHost=m_Host; | ||
275 | return rv; | ||
276 | } | ||
277 | |||
278 | void CRequestDlg::OnDropFiles(HDROP hDropInfo) | ||
279 | { | ||
280 | UINT files = ::DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0); | ||
281 | if(files!=1){ | ||
282 | CString title,text; | ||
283 | title.LoadString(IDS_DROPFILES_TITLE); | ||
284 | text.LoadString(IDS_NOMULTIPLEDROP_TEXT); | ||
285 | if(MessageBox(text,title,MB_ICONSTOP|MB_OKCANCEL)!=IDOK){ | ||
286 | ::DragFinish(hDropInfo); | ||
287 | return; | ||
288 | } | ||
289 | } | ||
290 | ASSERT(files); | ||
291 | CString theFile; | ||
292 | UINT fileNameLength = ::DragQueryFile(hDropInfo,0,NULL,0); | ||
293 | ASSERT(fileNameLength); | ||
294 | VERIFY(::DragQueryFile(hDropInfo,0,theFile.GetBuffer(fileNameLength+5),fileNameLength+4)<=fileNameLength); | ||
295 | theFile.ReleaseBuffer(); | ||
296 | m_LocalFileCtl.SetWindowText(theFile); | ||
297 | SyncNames(); | ||
298 | ::DragFinish(hDropInfo); | ||
299 | } | ||