Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /branches/ttcomtester/teraterm/teraterm/ftdlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8895 - (hide annotations) (download) (as text)
Tue Aug 18 15:27:38 2020 UTC (3 years, 7 months ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/ftdlg.cpp
File MIME type: text/x-c++src
File size: 8927 byte(s)
ファイル転送ダイアログ(ftdlg)を汎用的に使用できるよう修正

- メンバ変数から PFileVar をなくした
  - TFile(PVarPFileVar), TTTSet, TComVar なしで使用可
- 従来と同等のAPIも残した
1 doda 6806 /*
2     * Copyright (C) 1994-1998 T. Teranishi
3 zmatsuo 8857 * (C) 2007-2020 TeraTerm Project
4 doda 6806 * All rights reserved.
5     *
6 doda 6841 * Redistribution and use in source and binary forms, with or without
7     * modification, are permitted provided that the following conditions
8     * are met:
9 doda 6806 *
10 doda 6841 * 1. Redistributions of source code must retain the above copyright
11     * notice, this list of conditions and the following disclaimer.
12     * 2. Redistributions in binary form must reproduce the above copyright
13     * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the distribution.
15     * 3. The name of the author may not be used to endorse or promote products
16     * derived from this software without specific prior written permission.
17 doda 6806 *
18 doda 6841 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
19     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21     * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 doda 6806 */
29 maya 3227
30     /* TERATERM.EXE, file transfer dialog box */
31 zmatsuo 7554 #include "teraterm_conf.h"
32    
33 zmatsuo 7526 #include <stdio.h>
34     #include <windows.h>
35     #include <commctrl.h>
36 zmatsuo 7554
37 maya 3227 #include "teraterm.h"
38     #include "tttypes.h"
39     #include "ttftypes.h"
40     #include "ttlib.h"
41 zmatsuo 7526 #include "dlglib.h"
42 maya 3227 #include "tt_res.h"
43     #include "ftdlg.h"
44 zmatsuo 7528 #include "teraterml.h"
45 zmatsuo 8225 #include "helpid.h"
46 zmatsuo 8857 #include "filesys.h"
47 maya 3227
48     /////////////////////////////////////////////////////////////////////////////
49     // CFileTransDlg dialog
50    
51 zmatsuo 8895 CFileTransDlg::CFileTransDlg()
52 maya 3227 {
53 zmatsuo 8895 SmallIcon = NULL;
54     BigIcon = NULL;
55     DlgCaption = NULL;
56     FileName = NULL;
57     FullName = NULL;
58     ProgStat = 0;
59     }
60    
61     CFileTransDlg::~CFileTransDlg()
62     {
63     free(DlgCaption);
64     free(FileName);
65     free(FullName);
66     }
67    
68     BOOL CFileTransDlg::Create(HINSTANCE hInstance, CFileTransDlgInfo *info)
69     {
70 maya 3392 BOOL Ok;
71     int fuLoad = LR_DEFAULTCOLOR;
72 maya 4822 HWND hwnd;
73 maya 3227
74 zmatsuo 8895 UILanguageFile = info->UILanguageFile;
75     OpId = info->OpId;
76     DlgCaption = _strdup(info->DlgCaption);
77     FileName = _strdup(info->FileName);
78     FullName = _strdup(info->FullName);
79     HideDialog = info->HideDialog;
80     HMainWin = info->HMainWin;
81 maya 3227
82 maya 3392 Pause = FALSE;
83 zmatsuo 7526 hwnd = GetForegroundWindow();
84 zmatsuo 8895 if (OpId == OpLog) { // parent window is desktop
85 zmatsuo 8850 Ok = TTCDialog::Create(hInstance, GetDesktopWindow(), IDD_FILETRANSDLG);
86 maya 3392 }
87     else { // parent window is VT window
88 zmatsuo 8850 Ok = TTCDialog::Create(hInstance, NULL, IDD_FILETRANSDLG);
89 maya 3392 }
90 zmatsuo 8895 if (OpId == OpSendFile) {
91     HWND HProg = ::GetDlgItem(m_hWnd, IDC_TRANSPROGRESS);
92    
93     ProgStat = 0;
94    
95     ::SendMessage(HProg, PBM_SETRANGE, (WPARAM)0, MAKELPARAM(0, 100));
96     ::SendMessage(HProg, PBM_SETSTEP, (WPARAM)1, 0);
97     ::SendMessage(HProg, PBM_SETPOS, (WPARAM)0, 0);
98    
99     ::ShowWindow(HProg, SW_SHOW);
100    
101 zmatsuo 8857 ::ShowWindow(GetDlgItem(IDC_TRANS_ELAPSED), SW_SHOW);
102     }
103 maya 3227
104 zmatsuo 8895 if (!HideDialog) {
105 maya 4818 // Visible = False ���_�C�A���O���\������
106 maya 3709 ShowWindow(SW_SHOWNORMAL);
107 zmatsuo 8895 if (OpId == OpLog) {
108 maya 3392 ShowWindow(SW_MINIMIZE);
109     }
110     }
111 maya 3596 else {
112 maya 4822 // ���O���t�H�A�O���E���h�������E�B���h�E���t�H�[�J�X�������B
113     // ���j���[�������O���X�^�[�g�������� VTWin ���t�H�[�J�X���������������K�v�������B
114 maya 3600 ::SetForegroundWindow(hwnd);
115 maya 3596 }
116 maya 3227
117 maya 3392 return Ok;
118 maya 3227 }
119    
120 zmatsuo 8895 BOOL CFileTransDlg::Create(HINSTANCE hInstance, HWND hParent, PFileVar fv, PComVar pcv, PTTSet pts)
121     {
122     CFileTransDlgInfo info;
123    
124     info.UILanguageFile = pts->UILanguageFile;
125     info.OpId = fv->OpId;
126     info.DlgCaption = _strdup(fv->DlgCaption);
127     info.FileName = _strdup(&fv->FullName[fv->DirLen]);
128     info.FullName = _strdup(fv->FullName);
129     info.HideDialog = fv->HideDialog;
130     info.HMainWin = fv->HMainWin;
131     BOOL r = Create(hInstance, &info);
132     fv->HWin = m_hWnd;
133     fv->ProgStat = ProgStat;
134     return r;
135     }
136    
137 zmatsuo 8857 /**
138     * �e�L�X�g�����X����
139     */
140 maya 3227 void CFileTransDlg::ChangeButton(BOOL PauseFlag)
141     {
142 maya 3392 Pause = PauseFlag;
143     if (Pause) {
144 zmatsuo 8857 static const DlgTextInfo TextInfos[] = {
145     { IDC_TRANSPAUSESTART, "DLG_FILETRANS_START" },
146     };
147     SetDlgTexts(m_hWnd, TextInfos, _countof(TextInfos), UILanguageFile);
148 maya 3392 }
149     else {
150 zmatsuo 8857 static const DlgTextInfo TextInfos[] = {
151     { IDC_TRANSPAUSESTART, "DLG_FILETRANS_PAUSE" },
152     };
153     SetDlgTexts(m_hWnd, TextInfos, _countof(TextInfos), UILanguageFile);
154 maya 3392 }
155 maya 3227 }
156    
157 zmatsuo 8895 void CFileTransDlg::RefreshNum(DWORD StartTime, LONG FileSize, LONG ByteCount)
158 maya 3227 {
159 maya 3392 char NumStr[24];
160     double rate;
161 doda 4454 int rate2;
162     static DWORD prev_elapsed;
163     DWORD elapsed;
164 maya 3227
165 zmatsuo 8895 if (OpId == OpSendFile) {
166     if (StartTime == 0) {
167 doda 4461 SetDlgItemText(IDC_TRANS_ETIME, "0:00");
168 doda 4454 prev_elapsed = 0;
169     }
170     else {
171 zmatsuo 8895 elapsed = (GetTickCount() - StartTime) / 1000;
172 doda 4454 if (elapsed != prev_elapsed && elapsed != 0) {
173 zmatsuo 8895 rate2 = ByteCount / elapsed;
174 doda 4454 if (rate2 < 1200) {
175     _snprintf_s(NumStr, sizeof(NumStr), _TRUNCATE, "%d:%02d (%dBytes/s)", elapsed / 60, elapsed % 60, rate2);
176     }
177     else if (rate2 < 1200000) {
178     _snprintf_s(NumStr, sizeof(NumStr), _TRUNCATE, "%d:%02d (%d.%02dKB/s)", elapsed / 60, elapsed % 60, rate2 / 1000, rate2 / 10 % 100);
179     }
180     else {
181     _snprintf_s(NumStr, sizeof(NumStr), _TRUNCATE, "%d:%02d (%d.%02dMB/s)", elapsed / 60, elapsed % 60, rate2 / (1000*1000), rate2 / 10000 % 100);
182     }
183 doda 4461 SetDlgItemText(IDC_TRANS_ETIME, NumStr);
184 doda 4454 prev_elapsed = elapsed;
185     }
186     }
187    
188 zmatsuo 8895 if (FileSize > 0) {
189     rate = 100.0 * (double)ByteCount / (double)FileSize;
190     if (ProgStat < (int)rate) {
191     ProgStat = (int)rate;
192     SendDlgItemMessage(IDC_TRANSPROGRESS, PBM_SETPOS, (WPARAM)ProgStat, 0);
193     }
194     _snprintf_s(NumStr,sizeof(NumStr),_TRUNCATE,"%u (%3.1f%%)",ByteCount, rate);
195 maya 3392 }
196 zmatsuo 8895 SetDlgItemText(IDC_TRANSBYTES, NumStr);
197 maya 3392 }
198     else {
199 zmatsuo 8895 _snprintf_s(NumStr,sizeof(NumStr),_TRUNCATE,"%u",ByteCount);
200     SetDlgItemText(IDC_TRANSBYTES, NumStr);
201 maya 3392 }
202 maya 3227 }
203    
204 zmatsuo 8895 void CFileTransDlg::RefreshNum(TFileVar *fv)
205     {
206     ProgStat = fv->ProgStat;
207     RefreshNum(fv->StartTime, fv->FileSize, fv->ByteCount);
208     fv->ProgStat = ProgStat;
209     }
210    
211 maya 3227 /////////////////////////////////////////////////////////////////////////////
212     // CFileTransDlg message handler
213    
214     BOOL CFileTransDlg::OnInitDialog()
215     {
216 zmatsuo 7526 static const DlgTextInfo TextInfos[] = {
217     { IDC_TRANS_FILENAME, "DLG_FILETRANS_FILENAME" },
218     { IDC_FULLPATH_LABEL, "DLG_FILETRANS_FULLPATH" },
219     { IDC_TRANS_TRANS, "DLG_FILETRANS_TRNAS" },
220     { IDC_TRANS_ELAPSED, "DLG_FILETRANS_ELAPSED" },
221     { IDCANCEL, "DLG_FILETRANS_CLOSE" },
222     { IDC_TRANSPAUSESTART, "DLG_FILETRANS_PAUSE" },
223     { IDC_TRANSHELP, "BTN_HELP" },
224     };
225    
226 maya 3392 int fuLoad = LR_DEFAULTCOLOR;
227 maya 3227
228 zmatsuo 8895 if (HideDialog) {
229 maya 4822 // Visible = False �����t�H�A�O���E���h�����������������A������������
230     // �������g���X�^�C�� WS_EX_NOACTIVATE ���w�������B
231     // (Windows 2000 �������L��)
232     // WS_EX_NOACTIVATE ���w���������\�����������������^�X�N�o�[����������
233     // ���� WS_EX_APPWINDOW ���w�������B
234     ModifyStyleEx(0, WS_EX_NOACTIVATE | WS_EX_APPWINDOW);
235     }
236    
237 zmatsuo 8895 SetWindowText(DlgCaption);
238     SetDlgItemText(IDC_TRANSFNAME, FileName);
239     SetDlgItemText(IDC_EDIT_FULLPATH, FullName);
240 maya 3227
241 zmatsuo 8857 SetDlgTexts(m_hWnd, TextInfos, _countof(TextInfos), UILanguageFile);
242 zmatsuo 7526
243 yutakapon 6286 if (IsWindowsNT4()) {
244 maya 3392 fuLoad = LR_VGACOLOR;
245     }
246 zmatsuo 7526 SmallIcon = LoadImage(m_hInst,
247     MAKEINTRESOURCE(IDI_TTERM),
248     IMAGE_ICON, 16, 16, fuLoad);
249 yutakapon 6504 ::PostMessage(GetSafeHwnd(), WM_SETICON, ICON_SMALL,
250 zmatsuo 7526 (LPARAM)SmallIcon);
251 maya 3227
252 zmatsuo 7526 BigIcon = LoadImage(m_hInst,
253     MAKEINTRESOURCE(IDI_TTERM),
254     IMAGE_ICON, 0, 0, fuLoad);
255 yutakapon 6504 ::PostMessage(GetSafeHwnd(), WM_SETICON, ICON_BIG,
256 zmatsuo 7526 (LPARAM)BigIcon);
257 yutakapon 6504
258 zmatsuo 7915 AddModelessHandle(m_hWnd);
259 zmatsuo 7526
260     return TRUE;
261 maya 3227 }
262    
263 zmatsuo 7526 BOOL CFileTransDlg::OnCancel( )
264 maya 3227 {
265 zmatsuo 8895 FileTransEnd(OpId);
266 zmatsuo 7526 return TRUE;
267 maya 3227 }
268    
269 doda 6435 BOOL CFileTransDlg::OnCommand(WPARAM wParam, LPARAM lParam)
270 maya 3227 {
271 maya 3392 switch (LOWORD(wParam)) {
272     case IDC_TRANSPAUSESTART:
273     ChangeButton(! Pause);
274 zmatsuo 8895 FileTransPause(OpId, Pause);
275 maya 3392 return TRUE;
276     case IDC_TRANSHELP:
277 zmatsuo 8895 if (OpId == OpLog) {
278     ::PostMessage(HMainWin, WM_USER_DLGHELP2, HlpFileLog, 0);
279 zmatsuo 8851 }
280     else {
281 zmatsuo 8895 ::PostMessage(HMainWin, WM_USER_DLGHELP2, HlpFileSend, 0);
282 zmatsuo 8851 }
283 maya 3392 return TRUE;
284     default:
285 zmatsuo 7526 return (TTCDialog::OnCommand(wParam,lParam));
286 maya 3392 }
287 maya 3227 }
288    
289 zmatsuo 7526 BOOL CFileTransDlg::PostNcDestroy()
290 maya 3227 {
291 yutakapon 6504 // logopen��logclose���J���������AGDI���\�[�X���[�N�������������C�������B
292     // - LoadImage()�������A�C�R�����\�[�X�����������B
293     // (2016.10.5 yutaka)
294     if (SmallIcon) {
295     DestroyIcon((HICON)SmallIcon);
296     SmallIcon = NULL;
297     }
298    
299     if (BigIcon) {
300     DestroyIcon((HICON)BigIcon);
301     BigIcon = NULL;
302     }
303    
304 zmatsuo 7915 RemoveModelessHandle(m_hWnd);
305 zmatsuo 7526
306 maya 3392 delete this;
307 zmatsuo 7526 return TRUE;
308 maya 3227 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26