Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/teraterm/common/dlglib.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4454 - (show annotations) (download) (as text)
Tue Apr 19 13:23:37 2011 UTC (2 years, 2 months ago) by doda
File MIME type: text/x-csrc
File size: 4068 byte(s)
ファイル転送ダイアログ/ファイル送信ダイアログで、経過時間と転送速度を表示するようにした。
1 /* Tera Term
2 Copyright(C) 1994-1998 T. Teranishi
3 All rights reserved. */
4
5 /* Routines for dialog boxes */
6 #include "teraterm.h"
7 #include <stdio.h>
8 #include <commctrl.h>
9
10 void EnableDlgItem(HWND HDlg, int FirstId, int LastId)
11 {
12 int i;
13 HWND HControl;
14
15 for (i = FirstId ; i <= LastId ; i++) {
16 HControl = GetDlgItem(HDlg, i);
17 EnableWindow(HControl,TRUE);
18 }
19 }
20
21 void DisableDlgItem(HWND HDlg, int FirstId, int LastId)
22 {
23 int i;
24 HWND HControl;
25
26 for (i = FirstId ; i <= LastId ; i++) {
27 HControl = GetDlgItem(HDlg, i);
28 EnableWindow(HControl,FALSE);
29 }
30 }
31
32 void ShowDlgItem(HWND HDlg, int FirstId, int LastId)
33 {
34 int i;
35 HWND HControl;
36
37 for (i = FirstId ; i <= LastId ; i++) {
38 HControl = GetDlgItem(HDlg, i);
39 ShowWindow(HControl,SW_SHOW);
40 }
41 }
42
43 void SetRB(HWND HDlg, int R, int FirstId, int LastId)
44 {
45 HWND HControl;
46 DWORD Style;
47
48 if ( R<1 ) {
49 return;
50 }
51 if ( FirstId+R-1 > LastId ) {
52 return;
53 }
54 HControl = GetDlgItem(HDlg, FirstId + R - 1);
55 SendMessage(HControl, BM_SETCHECK, 1, 0);
56 Style = GetClassLong(HControl, GCL_STYLE);
57 SetClassLong(HControl, GCL_STYLE, Style | WS_TABSTOP);
58 }
59
60 void GetRB(HWND HDlg, LPWORD R, int FirstId, int LastId)
61 {
62 int i;
63
64 *R = 0;
65 for (i = FirstId ; i <= LastId ; i++) {
66 if (SendDlgItemMessage(HDlg, i, BM_GETCHECK, 0, 0) != 0) {
67 *R = i - FirstId + 1;
68 return;
69 }
70 }
71 }
72
73 void SetDlgNum(HWND HDlg, int id_Item, LONG Num)
74 {
75 char Temp[16];
76
77 /* In Win16, SetDlgItemInt can not be used to display long integer. */
78 _snprintf_s(Temp,sizeof(Temp),_TRUNCATE,"%d",Num);
79 SetDlgItemText(HDlg,id_Item,Temp);
80 }
81
82 void InitDlgProgress(HWND HDlg, int id_Progress, int *CurProgStat) {
83 HWND HProg;
84 HProg = GetDlgItem(HDlg, id_Progress);
85
86 *CurProgStat = 0;
87
88 SendMessage(HProg, PBM_SETRANGE, (WPARAM)0, MAKELPARAM(0, 100));
89 SendMessage(HProg, PBM_SETSTEP, (WPARAM)1, 0);
90 SendMessage(HProg, PBM_SETPOS, (WPARAM)0, 0);
91
92 ShowWindow(HProg, SW_SHOW);
93 return;
94 }
95
96 void SetDlgPercent(HWND HDlg, int id_Item, int id_Progress, LONG a, LONG b, int *p)
97 {
98 // 20MB以上のファイルをアップロードしようとすると、buffer overflowで
99 // 落ちる問題への対処。(2005.3.18 yutaka)
100 // cf. http://sourceforge.jp/tracker/index.php?func=detail&aid=5713&group_id=1412&atid=5333
101 double Num;
102 char NumStr[10];
103
104 if (b==0) {
105 Num = 100.0;
106 }
107 else {
108 Num = 100.0 * (double)a / (double)b;
109 }
110 _snprintf_s(NumStr,sizeof(NumStr),_TRUNCATE,"%3.1f%%",Num);
111 SetDlgItemText(HDlg, id_Item, NumStr);
112
113 if (id_Progress != 0 && p != NULL && *p >= 0 && (double)*p < Num) {
114 *p = (int)Num;
115 SendMessage(GetDlgItem(HDlg, id_Progress), PBM_SETPOS, (WPARAM)*p, 0);
116 }
117 }
118
119 void SetDlgTime(HWND HDlg, int id_Item, DWORD stime, int bytes)
120 {
121 static int prev_elapsed;
122 int elapsed, rate;
123 char buff[64];
124
125 elapsed = (GetTickCount() - stime) / 1000;
126
127 if (elapsed == 0) {
128 prev_elapsed = 0;
129 SetDlgItemText(HDlg, id_Item, "0:00");
130 return;
131 }
132
133 if (elapsed == prev_elapsed) {
134 return;
135 }
136 prev_elapsed = elapsed;
137
138 rate = bytes / elapsed;
139 if (rate < 1200) {
140 _snprintf_s(buff, sizeof(buff), _TRUNCATE, "%d:%02d (%dBytes/s)", elapsed / 60, elapsed % 60, rate);
141 }
142 else if (rate < 1200000) {
143 _snprintf_s(buff, sizeof(buff), _TRUNCATE, "%d:%02d (%d.%02dKB/s)", elapsed / 60, elapsed % 60, rate / 1000, rate / 10 % 100);
144 }
145 else {
146 _snprintf_s(buff, sizeof(buff), _TRUNCATE, "%d:%02d (%d.%02dMB/s)", elapsed / 60, elapsed % 60, rate / (1000 * 1000), rate / 10000 % 100);
147 }
148
149 SetDlgItemText(HDlg, id_Item, buff);
150 }
151
152 void SetDropDownList(HWND HDlg, int Id_Item, PCHAR far *List, int nsel)
153 {
154 int i;
155
156 i = 0;
157 while (List[i] != NULL) {
158 SendDlgItemMessage(HDlg, Id_Item, CB_ADDSTRING,
159 0, (LPARAM)List[i]);
160 i++;
161 }
162 SendDlgItemMessage(HDlg, Id_Item, CB_SETCURSEL,nsel-1,0);
163 }
164
165 LONG GetCurSel(HWND HDlg, int Id_Item)
166 {
167 LONG n;
168
169 n = SendDlgItemMessage(HDlg, Id_Item, CB_GETCURSEL, 0, 0);
170 if (n==CB_ERR) {
171 n = 0;
172 }
173 else {
174 n++;
175 }
176
177 return n;
178 }