• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision5647 (tree)
Time2014-08-18 19:04:00
Authordoda

Log Message

メニュー項目として画面の高さ/幅いっぱいというのを設定できるようにした。
設定で-1を指定すると画面いっぱいとして扱う。
# 0で変更無し、-1で画面いっぱいというのは判り辛そうだが、いい案が思い浮かばず

Change Summary

Incremental Difference

--- trunk/TTXSamples/TTXResizeMenu/TTXResizeMenu.c (revision 5646)
+++ trunk/TTXSamples/TTXResizeMenu/TTXResizeMenu.c (revision 5647)
@@ -21,6 +21,7 @@
2121 PComVar cv;
2222 HMENU ResizeMenu;
2323 BOOL ReplaceTermDlg;
24+ BOOL useMultiMonitorAPI;
2425 PReadIniFile origReadIniFile;
2526 int MenuItems;
2627 int ResizeList[MAX_MENU_ITEMS][2];
@@ -31,8 +32,76 @@
3132 /* WIN32 allows multiple instances of a DLL */
3233 static TInstVar InstVar;
3334
35+BOOL GetMonitorSizeByChar(int *width, int *height) {
36+ RECT rc_dsk, rc_wnd, rc_cl;
37+
38+ if (width) {
39+ *width = 0;
40+ }
41+ if (height) {
42+ *height = 0;
43+ }
44+
45+ if (pvar->useMultiMonitorAPI) {
46+ HMONITOR hm;
47+ MONITORINFO mi;
48+
49+ hm = MonitorFromWindow(pvar->cv->HWin, MONITOR_DEFAULTTONEAREST);
50+ mi.cbSize = sizeof(MONITORINFO);
51+ if (! GetMonitorInfo(hm, &mi)) {
52+ return FALSE;
53+ }
54+ rc_dsk = mi.rcWork;
55+ }
56+ else {
57+ SystemParametersInfo(SPI_GETWORKAREA, 0, &rc_dsk, 0);
58+ }
59+
60+ if (!GetWindowRect(pvar->cv->HWin, &rc_wnd) || !GetClientRect(pvar->cv->HWin, &rc_cl)) {
61+ return FALSE;
62+ }
63+
64+
65+ if (width) {
66+ int margin_w, cell_w;
67+
68+ margin_w = (rc_wnd.right - rc_wnd.left) - (rc_cl.right - rc_cl.left);
69+ cell_w = (rc_cl.right - rc_cl.left) / pvar->ts->TerminalWidth;
70+
71+ *width = (rc_dsk.right - rc_dsk.left - margin_w) / cell_w;
72+ }
73+ if (height) {
74+ int margin_h, cell_h;
75+
76+ margin_h = (rc_wnd.bottom - rc_wnd.top) - (rc_cl.bottom - rc_cl.top);
77+ cell_h = (rc_cl.bottom - rc_cl.top) / pvar->ts->TerminalHeight;
78+
79+ *height = (rc_dsk.bottom - rc_dsk.top - margin_h) / cell_h;
80+ }
81+
82+ return TRUE;
83+}
84+
85+int mkMenuEntry(char *buff, size_t buffsize, int x, int y, int c) {
86+ char tmp[20];
87+
88+ if (x == 0)
89+ _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "height: %d", y);
90+ else if (y == 0)
91+ _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "width: %d", x);
92+ else
93+ _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "%dx%d", x, y);
94+
95+ if (c < 15)
96+ return _snprintf_s(buff, buffsize, _TRUNCATE, "%s(&%x)", tmp, c+1);
97+ else if (c < 35)
98+ return _snprintf_s(buff, buffsize, _TRUNCATE, "%s(&%c)", tmp, 'a' + 1 - 9);
99+ else
100+ return _snprintf_s(buff, buffsize, _TRUNCATE, "%s", tmp);
101+}
102+
34103 void InitMenu() {
35- int i, x, y;
104+ int i, x, y, full_w, full_h;
36105 char tmp[20];
37106
38107 if (pvar->ResizeMenu != NULL) {
@@ -40,35 +109,18 @@
40109 }
41110
42111 if (pvar->MenuItems > 0) {
112+ GetMonitorSizeByChar(&full_w, &full_h);
43113 pvar->ResizeMenu = CreateMenu();
44114
45115 for (i=0; i < pvar->MenuItems; i++) {
46116 x = pvar->ResizeList[i][0];
117+ if (x == -1)
118+ x = full_w;
47119 y = pvar->ResizeList[i][1];
48- if (i < 15) {
49- if (x == 0)
50- _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "height: %d(&%x)", y, i+1);
51- else if (y == 0)
52- _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "width: %d(&%x)", x, i+1);
53- else
54- _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "%dx%d(&%x)", x, y, i+1);
55- }
56- else if (i < 35) {
57- if (x == 0)
58- _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "height: %d(&%c)", y, 'a' + i - 9);
59- else if (y == 0)
60- _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "width: %d(&%c)", x, 'a' + i - 9);
61- else
62- _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "%dx%d(&%c)", x, y, 'a' + i - 9);
63- }
64- else {
65- if (x == 0)
66- _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "height: %d", y);
67- else if (y == 0)
68- _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "width: %d", x);
69- else
70- _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "%dx%d", x, y);
71- }
120+ if (y == -1)
121+ y = full_h;
122+
123+ mkMenuEntry(tmp, sizeof(tmp), x, y, i);
72124 InsertMenu(pvar->ResizeMenu, -1, MF_BYPOSITION, ID_MENUID_BASE+i, tmp);
73125 }
74126 }
@@ -77,12 +129,47 @@
77129 }
78130 }
79131
132+void UpdateMenu() {
133+ int i, x, y, full_w, full_h;
134+ char tmp[20];
135+
136+ if (pvar->ResizeMenu == NULL)
137+ return;
138+
139+ GetMonitorSizeByChar(&full_w, &full_h);
140+
141+ for (i=0; i < pvar->MenuItems; i++) {
142+ x = pvar->ResizeList[i][0];
143+ y = pvar->ResizeList[i][1];
144+ if (x == -1 || y == -1) {
145+ if (x == -1)
146+ x = full_w;
147+ if (y == -1)
148+ y = full_h;
149+ mkMenuEntry(tmp, sizeof(tmp), (x==-1)?full_w:x, (y==-1)?full_h:y, i);
150+ ModifyMenu(pvar->ResizeMenu, i, MF_BYPOSITION, ID_MENUID_BASE+i, tmp);
151+ }
152+ }
153+}
154+
80155 static void PASCAL FAR TTXInit(PTTSet ts, PComVar cv) {
156+ OSVERSIONINFO osvi;
157+
81158 pvar->ts = ts;
82159 pvar->cv = cv;
83160 pvar->ReplaceTermDlg = FALSE;
84161 pvar->ResizeMenu = NULL;
85162 pvar->MenuItems = 0;
163+
164+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
165+ GetVersionEx(&osvi);
166+ if ((osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion == 4) ||
167+ (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS && osvi.dwMinorVersion < 10)) {
168+ pvar->useMultiMonitorAPI = FALSE;
169+ }
170+ else {
171+ pvar->useMultiMonitorAPI = TRUE;
172+ }
86173 }
87174
88175 static BOOL FAR PASCAL TTXSetupTerminal(HWND parent, PTTSet ts) {
@@ -108,11 +195,11 @@
108195 GetPrivateProfileString(SECTION, Key, "\n", Buff, sizeof(Buff), fn);
109196
110197 if (sscanf_s(Buff, "%d , %d", &x, &y) == 2) {
111- if (x < 0 ) {
198+ if (x < -1 ) {
112199 x = 0;
113200 }
114201
115- if (y < 0 ) {
202+ if (y < -1 ) {
116203 y = 0;
117204 }
118205
@@ -160,18 +247,33 @@
160247 }
161248 }
162249
163-static int PASCAL FAR TTXProcessCommand(HWND hWin, WORD cmd) {
164- int num;
250+static void PASCAL FAR TTXModifyPopupMenu(HMENU menu) {
251+ if (menu == pvar->ResizeMenu) {
252+ UpdateMenu();
253+ }
254+}
255+
256+static int PASCAL FAR TTXProcessCommand(HWND HWin, WORD cmd) {
257+ int num, full_h, full_w;
165258 if (cmd >= ID_MENUID_BASE && cmd < ID_MENUID_BASE + pvar->MenuItems) {
259+ GetMonitorSizeByChar(&full_w, &full_h);
166260 num = cmd - ID_MENUID_BASE;
167- if (pvar->ResizeList[num][0] > 0)
261+ if (pvar->ResizeList[num][0] > 0) {
168262 pvar->ts->TerminalWidth = pvar->ResizeList[num][0];
169- if (pvar->ResizeList[num][1] > 0)
263+ }
264+ else if (pvar->ResizeList[num][0] == -1 && full_w > 0) {
265+ pvar->ts->TerminalWidth = full_w;
266+ }
267+ if (pvar->ResizeList[num][1] > 0) {
170268 pvar->ts->TerminalHeight = pvar->ResizeList[num][1];
269+ }
270+ else if (pvar->ResizeList[num][1] == -1 && full_h > 0) {
271+ pvar->ts->TerminalHeight = full_h;
272+ }
171273 pvar->ReplaceTermDlg = TRUE;
172274
173275 // Call Setup-Terminal dialog
174- SendMessage(hWin, WM_COMMAND, MAKELONG(ID_SETUP_TERMINAL, 0), 0);
276+ SendMessage(HWin, WM_COMMAND, MAKELONG(ID_SETUP_TERMINAL, 0), 0);
175277 return 1;
176278 }
177279 return 0;
@@ -188,7 +290,7 @@
188290 NULL, // TTXCloseTCP,
189291 NULL, // TTXSetWinSize,
190292 TTXModifyMenu,
191- NULL, // TTXModifyPopupMenu,
293+ TTXModifyPopupMenu,
192294 TTXProcessCommand,
193295 NULL, // TTXEnd
194296 };
--- trunk/TTXSamples/TTXResizeMenu/ReadMe.txt (revision 5646)
+++ trunk/TTXSamples/TTXResizeMenu/ReadMe.txt (revision 5647)
@@ -2,13 +2,23 @@
22
33 Feature:
44 This feature adds Resize menu.
5- If a user selects the Resize menu item, Tera Term VT window is changed to the specified size.
5+ If a user selects the Resize menu item, Tera Term VT window is changed to
6+ the specified size.
67
78 Description:
89 TTXResizeMenu is based on TTXResizeWin plugin.
9- Please refer to TTXResizeWin plugin description about the detail implementation of TTXResizeMenu plugin.
10+ Please refer to TTXResizeWin plugin description about the detail
11+ implementation of TTXResizeMenu plugin.
1012
11- If you want to change the menu items, change resize_list and recompile this plugin soure code.
13+ Basically, the [Resize] menu does not display after the plugin is installed.
14+ Next, a user must register the menu entry in the teraterm.ini file.
1215
16+ Add a [Resize Menu] section in the teraterm.ini file, and describe the
17+ "ResizeMenuN = X, Y" entry. N is an 1-origin number.
18+ When X or Y equals zero, the value is not changed. For example,
19+ (X, Y)=(0, 37) means that the width is not changed and the height is changed
20+ into 37 lines.
21+ These value maximum is 20.
22+
1323 ToDo:
1424 To configure with TERATERM.INI file againt Resize menu item.
--- trunk/TTXSamples/TTXResizeMenu/ReadMe-ja.txt (revision 5646)
+++ trunk/TTXSamples/TTXResizeMenu/ReadMe-ja.txt (revision 5647)
@@ -14,6 +14,8 @@
1414 作成し、ResizeMenuN = X, Y の形式で指定して下さい。N は 1 からの連番です。
1515 X または Y のいずれかが 0 の時は、その要素は変更されません。例えば 0, 37 の
1616 時は、横幅は変更せずに縦幅を 37 行に変更します。
17+ X または Y の値を -1 にした場合、画面サイズを超えない範囲での最大値として
18+ 扱われます。
1719 メニューの項目数は最大で 20 です。最大数を増やしたい時は TTXResizeMenu.c の
1820 MAX_MENU_ITEMS を増やしてからビルドし直してください。
1921
--- trunk/doc/ja/html/usage/resizemenu.html (revision 5646)
+++ trunk/doc/ja/html/usage/resizemenu.html (revision 5647)
@@ -29,11 +29,12 @@
2929
3030 メニュー内の項目を変更したい場合は、TERATERM.INI に [Resize Menu] セクションを作成し、"ResizeMenuN = X, Y" の形式で指定して下さい。N は 1 からの連番です。<br>
3131 X または Y のいずれかが 0 の時は、その要素は変更されません。例えば 0, 37 の時は、横幅は変更せずに縦幅を 37 行に変更します。<br>
32+X または Y の値を -1 にした場合、画面サイズを超えない範囲での最大値として扱われます。<br>
3233 メニューの項目数は最大で 20 です。
3334 </p>
3435
3536 <h2>設定例</h2>
36-<pre>
37+<pre class="macro-example">
3738 [Resize Menu]
3839 ;
3940 ; 横幅 80桁, 縦幅 37行
--- trunk/doc/ja/html/about/history.html (revision 5646)
+++ trunk/doc/ja/html/about/history.html (revision 5647)
@@ -51,6 +51,7 @@
5151 <li>対応する動作環境にWindows Server 2012 R2を追加した。</li>
5252 <li><a href="#ttssh_2.70">TTSSH(2.70)</a>へ差し替えた。</li>
5353 <li><a href="#ttmenu_1.12">TeraTerm Menu(1.12)</a>へ差し替えた。</li>
54+ <li><a href="#resizemenu_1.03">TTXResizeMenu Plugin(1.03)</a>へ差し替えた。</li>
5455 <li>LogMeTT 2.10.2 へ差し替えた。</li>
5556 </ul>
5657 </li>
@@ -3841,6 +3842,11 @@
38413842 </ul>
38423843
38433844 <h2><a name="resizemenu">TTXResizeMenu</a></h2>
3845+<h3><a name="resizemenu_1.03">2014.xx.xx (Ver 1.03)</a></h3>
3846+<ul class="history">
3847+ <li>メニュー項目として、画面の高さ/幅いっぱいというのを設定できるようにした。</li>
3848+</ul>
3849+
38443850 <h3><a name="resizemenu_1.02">2013.02.28 (Ver 1.02)</a></h3>
38453851 <ul class="history">
38463852 <li>端末の高さとして受け付ける値を200から500へ増やした。</li>
--- trunk/doc/en/html/usage/resizemenu.html (revision 5646)
+++ trunk/doc/en/html/usage/resizemenu.html (revision 5647)
@@ -30,11 +30,12 @@
3030
3131 Add a [Resize Menu] section in the teraterm.ini file, and describe the "ResizeMenuN = X, Y" entry. N is an 1-origin number.<br>
3232 When X or Y equals zero, the value is not changed. For example, (X, Y)=(0, 37) means that the width is not changed and the height is changed into 37 lines.<br>
33+<!-- X または Y の値を -1 にした場合、画面サイズを超えない範囲での最大値として扱われます。<br> -->
3334 These value maximum is 20.
3435 </p>
3536
3637 <h2>Example</h2>
37-<pre>
38+<pre class="macro-example">
3839 [Resize Menu]
3940 ;
4041 ; width 80 columns, height 37 rows
--- trunk/doc/en/html/about/history.html (revision 5646)
+++ trunk/doc/en/html/about/history.html (revision 5647)
@@ -51,6 +51,7 @@
5151 <li>added support for Microsoft Windows Server 2012 R2.</li>
5252 <li>upgraded TTSSH to <a href="#ttssh_2.70">2.70</a></li>
5353 <li>upgraded TeraTerm Menu to <a href="#ttmenu_1.12">1.12</a></li>
54+ <li>upgraded TTXResizeMenu Plugin to <a href="#resizemenu_1.03">1.03</a></li>
5455 <li>upgraded LogMeTT to 2.10.2</li>
5556 </ul>
5657 </li>
@@ -3834,6 +3835,12 @@
38343835 </ul>
38353836
38363837 <h2><a name="resizemenu">TTXResizeMenu</a></h2>
3838+<h3><a name="resizemenu_1.03">2014.xx.xx (Ver 1.03)</a></h3>
3839+<ul class="history">
3840+ <!-- li>メニュー項目として、画面の高さ/幅いっぱいというのを設定できるようにした。</li -->
3841+</ul>
3842+
3843+<h2><a name="resizemenu">TTXResizeMenu</a></h2>
38373844 <h3><a name="resizemenu_1.02">2013.02.28 (Ver 1.02)</a></h3>
38383845 <ul class="history">
38393846 <li>increased max height of window from 200 lines to 500 lines.</li>
Show on old repository browser