source: trunk/dll/key.c@ 1471

Last change on this file since 1471 was 1471, checked in by Steven Levine, 16 years ago

Remember last filter mask selection
Use Ctrl-click to select state or commonly used directory quicklist entry without activating.
Use Ctrl-click to select walk dialog user list entry without activating.
Avoid drivebar MB2 exception
Remember last seek and scan mask selection across runs
Avoid traps when changing tree container display style
Restore missing drives to drive list dropdown
Minor documentation updates

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 10.2 KB
Line 
1
2/***********************************************************************
3
4 $Id: key.c 1471 2009-10-13 23:43:04Z stevenhl $
5
6 About dialogs
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2004, 2009 Steven H. Levine
10
11 Revisions
12 01 Nov 04 SHL Rename SKULL? defines to avoid rc issues
13 06 Aug 07 GKY Reduce DosSleep times (ticket 148)
14 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
15 13 Jul 09 SHL Sync with renames
16
17***********************************************************************/
18
19#include <string.h>
20
21#define INCL_DOS
22#define INCL_WIN
23#define INCL_LONGLONG // dircnrs.h
24
25#include "fm3dll.h"
26#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
27#include "mainwnd2.h" // Data declaration(s)
28#include "mainwnd.h" // Data declaration(s)
29#include "fm3dlg.h"
30#include "fm3str.h"
31#include "version.h"
32#include "errutil.h" // Dos_Error...
33#include "strutil.h" // GetPString
34#include "key.h" // AboutDlgProc
35#include "misc.h" // PostMsg
36
37// Data declarations
38#pragma data_seg(GLOBAL1)
39static HWND AboutBox;
40
41#pragma data_seg(DATA1)
42
43MRESULT EXPENTRY AuthorDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
44{
45 return WinDefDlgProc(hwnd, msg, mp1, mp2);
46}
47
48MRESULT EXPENTRY AboutDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
49{
50 SWP swp;
51 static HAB hab = 0;
52 BOOL no = FALSE;
53 static BOOL noanimation;
54 static INT width, direction, ticktock, counter;
55 static HPOINTER stick1, stick2, stick3, stick4, stick12, stick22, stick32,
56 stick42, stick5, stick52;
57
58 switch (msg) {
59 case WM_INITDLG:
60 if (hab) {
61 WinDismissDlg(hwnd, 0);
62 break;
63 }
64 if (mp2)
65 noanimation = TRUE;
66 else
67 noanimation = FALSE;
68 AboutBox = hwnd;
69 hab = WinQueryAnchorBlock(hwnd);
70 WinQueryWindowPos(hwnd, &swp);
71 width = swp.cx;
72 {
73 CHAR s[81];
74
75 sprintf(s,
76 "%s %d.%02d%s",
77 GetPString(IDS_VERSIONTEXT), VERMAJOR, VERMINOR, VERREALMINOR);
78 WinSetDlgItemText(hwnd, ABT_VERSION, s);
79 }
80 if (!strcmp(realappname, "FM/4"))
81 WinSetDlgItemText(hwnd, ABT_PROGNAME, GetPString(IDS_FM2LITETEXT));
82 if (!noanimation) {
83 stick1 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK1);
84 stick2 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK2);
85 stick3 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK3);
86 stick4 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK4);
87 stick5 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK5);
88 stick12 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK12);
89 stick22 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK22);
90 stick32 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK32);
91 stick42 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK42);
92 stick52 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ID_STICK52);
93 direction = 2;
94 ticktock = 0;
95 WinStartTimer(hab, hwnd, ID_ABOUT_TIMER, 164);
96 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
97 }
98 break;
99
100 case UM_SETUP:
101 if (counter++ > 1) {
102
103 HPOINTER hbm, sk0, sk1, sk2, sk3, sk4, sk5, sk6, sk7, sk8, sk9;
104
105 hbm = (HPOINTER) WinSendDlgItemMsg(hwnd,
106 ABT_ICON,
107 SM_QUERYHANDLE, MPVOID, MPVOID);
108 if (hbm) {
109 sk0 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL0_ICON);
110 sk1 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL1_ICON);
111 sk2 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL2_ICON);
112 sk3 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL3_ICON);
113 sk4 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL4_ICON);
114 sk5 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL5_ICON);
115 sk6 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL6_ICON);
116 sk7 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL7_ICON);
117 sk8 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL8_ICON);
118 sk9 = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, SKULL9_ICON);
119 if (sk0 && sk1 && sk2 && sk3 && sk4 && sk5 && sk6 && sk7 &&
120 sk8 && sk9) {
121 WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), FALSE);
122 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
123 MPFROMLONG(sk0), MPVOID);
124 WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), TRUE);
125 DosSleep(16);
126 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
127 MPFROMLONG(sk1), MPVOID);
128 DosSleep(16);//05 Aug 07 GKY 33
129 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
130 MPFROMLONG(sk2), MPVOID);
131 DosSleep(16);//05 Aug 07 GKY 33
132 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
133 MPFROMLONG(sk3), MPVOID);
134 DosSleep(16);//05 Aug 07 GKY 33
135 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
136 MPFROMLONG(sk4), MPVOID);
137 DosSleep(16);//05 Aug 07 GKY 33
138 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
139 MPFROMLONG(sk5), MPVOID);
140 DosSleep(16);//05 Aug 07 GKY 33
141 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
142 MPFROMLONG(sk6), MPVOID);
143 DosSleep(16);//05 Aug 07 GKY 33
144 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
145 MPFROMLONG(sk7), MPVOID);
146 DosSleep(16);//05 Aug 07 GKY 33
147 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
148 MPFROMLONG(sk8), MPVOID);
149 DosSleep(16);//05 Aug 07 GKY 33
150 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
151 MPFROMLONG(sk9), MPVOID);
152 DosSleep(100);//05 Aug 07 GKY 257
153 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
154 MPFROMLONG(sk8), MPVOID);
155 DosSleep(16);//05 Aug 07 GKY 33
156 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
157 MPFROMLONG(sk7), MPVOID);
158 DosSleep(16);//05 Aug 07 GKY 33
159 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
160 MPFROMLONG(sk6), MPVOID);
161 DosSleep(16);//05 Aug 07 GKY 33
162 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
163 MPFROMLONG(sk5), MPVOID);
164 DosSleep(16);//05 Aug 07 GKY 33
165 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
166 MPFROMLONG(sk4), MPVOID);
167 DosSleep(16);//05 Aug 07 GKY 33
168 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
169 MPFROMLONG(sk3), MPVOID);
170 DosSleep(16);//05 Aug 07 GKY 33
171 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
172 MPFROMLONG(sk2), MPVOID);
173 DosSleep(16);//05 Aug 07 GKY 33
174 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
175 MPFROMLONG(sk1), MPVOID);
176 DosSleep(16);//05 Aug 07 GKY 33
177 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
178 MPFROMLONG(sk0), MPVOID);
179 DosSleep(16);//05 Aug 07 GKY 33
180 WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), FALSE);
181 WinSendDlgItemMsg(hwnd, ABT_ICON, SM_SETHANDLE,
182 MPFROMLONG(hbm), MPVOID);
183 WinShowWindow(WinWindowFromID(hwnd, ABT_ICON), TRUE);
184 }
185 if (sk0)
186 WinDestroyPointer(sk0);
187 if (sk1)
188 WinDestroyPointer(sk1);
189 if (sk2)
190 WinDestroyPointer(sk2);
191 if (sk3)
192 WinDestroyPointer(sk3);
193 if (sk4)
194 WinDestroyPointer(sk4);
195 if (sk5)
196 WinDestroyPointer(sk5);
197 if (sk6)
198 WinDestroyPointer(sk6);
199 if (sk7)
200 WinDestroyPointer(sk7);
201 if (sk8)
202 WinDestroyPointer(sk8);
203 if (sk9)
204 WinDestroyPointer(sk9);
205 }
206 }
207 if (counter > 4)
208 WinDlgBox(HWND_DESKTOP,
209 hwnd, AuthorDlgProc, FM3ModHandle, AUTHOR_FRAME, NULL);
210 return 0;
211
212 case UM_SETDIR:
213 WinSetFocus(HWND_DESKTOP, HWND_DESKTOP);
214 DosSleep(250);//05 Aug 07 GKY 2500
215 return 0;
216
217 case WM_TIMER:
218 WinQueryWindowPos(WinWindowFromID(hwnd, ABT_STICK1), &swp);
219 if (swp.x + (swp.cx * 3) > width - 3) {
220 direction = -2;
221 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE);
222 WinSendDlgItemMsg(hwnd,
223 ABT_STICK1, SM_SETHANDLE, MPFROMLONG(stick3), MPVOID);
224 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE);
225 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE);
226 WinSendDlgItemMsg(hwnd,
227 ABT_STICK2,
228 SM_SETHANDLE, MPFROMLONG(stick32), MPVOID);
229 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE);
230 no = TRUE;
231 }
232 else if (swp.x < 3) {
233 direction = 2;
234 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE);
235 WinSendDlgItemMsg(hwnd, ABT_STICK2,
236 SM_SETHANDLE, MPFROMLONG(stick32), MPVOID);
237 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE);
238 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE);
239 WinSendDlgItemMsg(hwnd,
240 ABT_STICK1, SM_SETHANDLE, MPFROMLONG(stick3), MPVOID);
241 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE);
242 no = TRUE;
243 }
244 swp.x += direction;
245 WinSetWindowPos(WinWindowFromID(hwnd, ABT_STICK1),
246 HWND_TOP, swp.x, swp.y, swp.cx, swp.cy, SWP_MOVE);
247 WinSetWindowPos(WinWindowFromID(hwnd, ABT_ICON),
248 HWND_TOP,
249 swp.x + swp.cx, swp.y, swp.cx, swp.cy, SWP_MOVE);
250 WinSetWindowPos(WinWindowFromID(hwnd, ABT_STICK2),
251 HWND_TOP,
252 swp.x + (swp.cx * 2), swp.y, swp.cx, swp.cy, SWP_MOVE);
253 if (!no) {
254 if (direction > 0) {
255 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE);
256 WinSendDlgItemMsg(hwnd,
257 ABT_STICK1,
258 SM_SETHANDLE,
259 MPFROMLONG((ticktock) ? stick1 : stick2), MPVOID);
260 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE);
261 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE);
262 WinSendDlgItemMsg(hwnd,
263 ABT_STICK2,
264 SM_SETHANDLE,
265 MPFROMLONG((ticktock) ? stick42 : stick52), MPVOID);
266 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE);
267 }
268 else {
269 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), FALSE);
270 WinSendDlgItemMsg(hwnd,
271 ABT_STICK2,
272 SM_SETHANDLE,
273 MPFROMLONG((ticktock) ? stick12 : stick22), MPVOID);
274 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK2), TRUE);
275 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), FALSE);
276 WinSendDlgItemMsg(hwnd,
277 ABT_STICK1,
278 SM_SETHANDLE,
279 MPFROMLONG((ticktock) ? stick4 : stick5), MPVOID);
280 WinShowWindow(WinWindowFromID(hwnd, ABT_STICK1), TRUE);
281 }
282 }
283 ticktock = (ticktock) ? 0 : 1;
284 break;
285
286 case WM_COMMAND:
287 switch (SHORT1FROMMP(mp1)) {
288 case ABT_VERSION:
289 case DID_CANCEL:
290 WinDismissDlg(hwnd, 0);
291 break;
292 }
293 return 0;
294
295 case WM_CLOSE:
296 WinDestroyWindow(hwnd);
297 return 0;
298
299 case WM_DESTROY:
300 if (hab) {
301 if (!noanimation) {
302 WinStopTimer(hab, hwnd, ID_ABOUT_TIMER);
303 WinDestroyPointer(stick1);
304 WinDestroyPointer(stick2);
305 WinDestroyPointer(stick3);
306 WinDestroyPointer(stick4);
307 WinDestroyPointer(stick5);
308 WinDestroyPointer(stick12);
309 WinDestroyPointer(stick22);
310 WinDestroyPointer(stick32);
311 WinDestroyPointer(stick42);
312 WinDestroyPointer(stick52);
313 }
314 hab = 0;
315 }
316 AboutBox = (HWND) 0;
317 break;
318 }
319 return WinDefDlgProc(hwnd, msg, mp1, mp2);
320}
321
322#pragma alloc_text(ABOUT,AboutDlgProc,AuthorDlgProc)
Note: See TracBrowser for help on using the repository browser.