source: trunk/dll/tools.c@ 766

Last change on this file since 766 was 766, checked in by Gregg Young, 18 years ago

format cleanup

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 23.8 KB
RevLine 
[2]1
[123]2/***********************************************************************
3
4 $Id: tools.c 766 2007-08-05 20:21:20Z gyoung $
5
[329]6 Toolbar support routines
[123]7
8 Copyright (c) 1994-97 M. Kimes
[329]9 Copyright (c) 2004, 2006 Steven H.Levine
[123]10
[130]11 01 Aug 04 SHL Rework lstrip/rstrip usage
12 23 May 05 SHL Use QWL_USER
[329]13 22 Jul 06 SHL Check more run time errors
[401]14 29 Jul 06 SHL Use xfgets, xfgets_bstripcr
[440]15 18 Aug 06 SHL Report more runtime errors
[487]16 05 Sep 06 SHL docopyf filename args must be variables
[512]17 05 Sep 06 SHL Sync with standard source formatting
[123]18
19***********************************************************************/
20
[2]21#define INCL_DOS
22#define INCL_WIN
[329]23#include <os2.h>
[2]24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28#include <share.h>
[329]29
[2]30#include "fm3dll.h"
31#include "fm3dlg.h"
32#include "tools.h"
33#include "fm3str.h"
34
35#pragma data_seg(DATA1)
[329]36
37static PSZ pszSrcFile = __FILE__;
38
[2]39#pragma alloc_text(TOOLS,load_tools,save_tools,add_tool,insert_tool,del_tool,free_tools,swap_tools,load_quicktools,save_quicktools)
40#pragma alloc_text(TOOLS1,ReOrderToolsProc,PickToolProc,AddToolProc,ToolIODlgProc)
41
42TOOL *toolhead = NULL;
43
[440]44//== load_quicktools() build *.tls array ==
[2]45
[440]46VOID load_quicktools(VOID)
47{
[551]48 FILE *fp;
49 CHAR s[CCHMAXPATH + 14];
50 INT x;
[2]51
52 qtloaded = TRUE;
[440]53 for (x = 0; x < 50 && quicktool[x]; x++) {
[2]54 free(quicktool[x]);
55 quicktool[x] = NULL;
56 }
[440]57 if (!fToolbar) {
[2]58 qtloaded = FALSE;
59 return;
60 }
61 save_dir2(s);
[440]62 if (s[strlen(s) - 1] != '\\')
[551]63 strcat(s, "\\");
64 strcat(s, "QUICKTLS.DAT");
65 fp = _fsopen(s, "r", SH_DENYWR);
[329]66 if (fp) {
[440]67 x = 0;
68 while (!feof(fp)) {
[551]69 if (!xfgets_bstripcr(s, CCHMAXPATH + 2, fp, pszSrcFile, __LINE__))
70 break;
[440]71 if (!*s || *s == ';')
[551]72 continue;
[440]73 if (x >= 50) {
74 Runtime_Error(pszSrcFile, __LINE__, "add");
75 break;
[2]76 }
[551]77 quicktool[x] = xstrdup(s, pszSrcFile, __LINE__);
[440]78 if (!quicktool[x])
[551]79 break;
[440]80 x++;
[2]81 }
82 fclose(fp);
83 }
84}
85
[440]86VOID save_quicktools(VOID)
87{
[2]88 FILE *fp;
[551]89 INT x = 0;
90 CHAR s[CCHMAXPATH + 14];
[2]91
[487]92 if (!quicktool[0])
[2]93 return;
94 save_dir2(s);
[487]95 if (s[strlen(s) - 1] != '\\')
[551]96 strcat(s, "\\");
97 strcat(s, "QUICKTLS.DAT");
98 fp = xfopen(s, "w", pszSrcFile, __LINE__);
[329]99 if (fp) {
[551]100 for (x = 0; quicktool[x] && x < 50; x++)
101 fprintf(fp, "%s\n", quicktool[x]);
[2]102 fclose(fp);
103 }
104}
105
[440]106//== load_tools() Build tools list given .tls filename ==
[2]107
[551]108TOOL *load_tools(CHAR * filename)
[440]109{
[551]110 FILE *fp;
111 CHAR help[80], text[80], flagstr[80], idstr[80], *fname;
112 TOOL *info;
[2]113
[487]114 if (!fToolbar) {
[2]115 toolhead = free_tools();
116 return toolhead;
117 }
[551]118 if (!filename || !*filename)
[2]119 filename = (*lasttoolbox) ? lasttoolbox : "CMDS.TLS";
[487]120 if (*filename)
[2]121 fname = searchpath(filename);
[551]122 if (!fname || !*fname)
[2]123 fname = "FM3TOOLS.DAT";
[551]124 if (fname && *fname) {
[2]125 filename = fname;
[551]126 strcpy(lasttoolbox, filename);
127 fp = _fsopen(filename, "r", SH_DENYWR);
[329]128 if (fp) {
[2]129 toolhead = free_tools();
[487]130 while (!feof(fp)) {
[551]131 do {
132 if (!xfgets(help, sizeof(help), fp, pszSrcFile, __LINE__))
133 break;
134 } while (*help == ';' && !feof(fp));
135 stripcr(help);
136 if (!xfgets(text, sizeof(text), fp, pszSrcFile, __LINE__))
137 break;
138 stripcr(text);
139 if (!xfgets(flagstr, sizeof(flagstr), fp, pszSrcFile, __LINE__))
140 break;
141 if (!xfgets(idstr, sizeof(idstr), fp, pszSrcFile, __LINE__))
142 break;
143 if (!(USHORT) atoi(idstr))
144 continue;
145 info = xmallocz(sizeof(TOOL), pszSrcFile, __LINE__);
146 if (info) {
147 if (*help) {
148 literal(help);
149 if (*help)
150 info->help = xstrdup(help, pszSrcFile, __LINE__);
151 }
152 if (*text)
153 info->text = xstrdup(text, pszSrcFile, __LINE__);
154 info->flags = (atoi(flagstr) & (~(T_TEXT | T_EMPHASIZED)));
155 info->id = (USHORT) atoi(idstr);
156 info->next = NULL;
157 add_tool(info);
158 }
[2]159 }
160 fclose(fp);
161 fToolsChanged = FALSE;
162 }
163 }
164 return toolhead;
165}
166
[551]167VOID save_tools(CHAR * filename)
[440]168{
[551]169 FILE *fp;
170 CHAR *fname;
171 TOOL *info;
[2]172
[487]173 if (!filename)
[2]174 filename = lasttoolbox;
[487]175 if (*filename)
[2]176 fname = searchpath(filename);
[487]177 if (fname && *fname)
[2]178 filename = fname;
179 else {
[487]180 if (*lasttoolbox)
[2]181 filename = lasttoolbox;
182 else
183 filename = "FM3TOOLS.TLS";
184 fname = searchpath(filename);
[487]185 if (fname && *fname)
[2]186 filename = fname;
187 }
188
[551]189 if (stristr(filename, "FM3TOOLS.DAT"))
[2]190 filename = "FM3TOOLS.TLS";
[487]191 if (toolhead && filename && *filename) {
[551]192 strcpy(lasttoolbox, filename);
193 PrfWriteProfileString(fmprof, FM3Str, "LastToolBox", filename);
[2]194 }
[487]195 if (!toolhead) {
[551]196 unlinkf("%s", filename);
[2]197 return;
198 }
[551]199 fp = xfopen(filename, "w", pszSrcFile, __LINE__);
[329]200 if (fp) {
[551]201 fprintf(fp, GetPString(IDS_TOOLFILETEXT), filename);
[2]202 info = toolhead;
[487]203 while (info) {
[2]204 fprintf(fp,
[551]205 "%s\n%s\n%u\n%u\n;\n",
206 (info->help) ? info->help : NullStr,
207 (info->text) ? info->text : NullStr,
208 (info->flags & (~(T_EMPHASIZED | T_TEXT))), info->id);
[2]209 info = info->next;
210 }
211 fclose(fp);
212 fToolsChanged = FALSE;
213 }
[487]214 if (hwndMain)
[551]215 PostMsg(hwndMain, UM_FILLBUTTONLIST, MPVOID, MPVOID);
[2]216}
217
[551]218TOOL *add_tool(TOOL * tool)
[440]219{
[2]220 TOOL *info;
221
[487]222 if (tool) {
[2]223 info = toolhead;
[487]224 if (info) {
225 while (info->next)
[551]226 info = info->next;
[2]227 }
[487]228 if (info)
[2]229 info->next = tool;
230 else
231 toolhead = tool;
232 fToolsChanged = TRUE;
233 }
234 return toolhead;
235}
236
[551]237TOOL *insert_tool(TOOL * tool, TOOL * after)
[440]238{
[487]239 if (tool) {
240 if (!toolhead)
[2]241 return add_tool(tool);
[487]242 if (!after) {
[2]243 tool->next = toolhead;
244 toolhead = tool;
245 fToolsChanged = TRUE;
246 }
247 else {
248 tool->next = after->next;
249 after->next = tool;
250 fToolsChanged = TRUE;
251 }
252 }
253 return toolhead;
254}
255
[551]256TOOL *del_tool(TOOL * tool)
[440]257{
[551]258 TOOL *info, *prev = NULL;
[2]259
[487]260 if (tool) {
[2]261 info = toolhead;
[487]262 while (info) {
263 if (info == tool) {
[551]264 if (info == toolhead)
265 toolhead = info->next;
266 if (prev)
267 prev->next = info->next;
268 if (info->help)
269 free(info->help);
270 if (info->text)
271 free(info->text);
272 free(info);
273 fToolsChanged = TRUE;
274 break;
[2]275 }
276 prev = info;
277 info = info->next;
278 }
279 }
280 return toolhead;
281}
282
[440]283TOOL *find_tool(USHORT id)
284{
[2]285 TOOL *tool;
286
[487]287 if (id) {
[2]288 tool = toolhead;
[487]289 while (tool) {
290 if (id && tool->id == id)
[551]291 return tool;
[2]292 tool = tool->next;
293 }
294 }
295 return NULL;
296}
297
[551]298TOOL *next_tool(TOOL * tool, BOOL skipinvisible)
[440]299{
[487]300 while (tool) {
301 if (tool->next && (skipinvisible && (tool->next->flags & T_INVISIBLE)))
[2]302 tool = tool->next;
303 else
304 return (tool->next) ? tool->next : toolhead;
305 }
306 return NULL;
307}
308
[551]309TOOL *prev_tool(TOOL * tool, BOOL skipinvisible)
[440]310{
[2]311 TOOL *info;
312
313Again:
[487]314 while (tool) {
[2]315 info = toolhead;
[487]316 while (info) {
317 if (info->next == tool) {
[551]318 if (skipinvisible && (info->flags & T_INVISIBLE)) {
319 tool = info;
320 goto Again;
321 }
322 return info;
[2]323 }
[487]324 if (!info->next && tool == toolhead)
[551]325 return info;
[2]326 info = info->next;
327 }
328 return toolhead;
329 }
330 return NULL;
331}
332
[551]333TOOL *swap_tools(TOOL * tool1, TOOL * tool2)
[440]334{
[551]335 TOOL *prev1 = NULL, *prev2 = NULL, *info;
[2]336
[487]337 if (tool1 && tool2 && tool1 != tool2) {
[2]338 info = toolhead;
[487]339 while (info && !prev1 && !prev2) {
340 if (info->next == tool1)
[551]341 prev1 = info;
[487]342 else if (info->next == tool2)
[551]343 prev2 = info;
[2]344 info = info->next;
345 }
346 info = tool2;
347 tool2 = tool1;
348 tool1 = info;
349 info = tool2->next;
[487]350 if (prev1)
[2]351 prev1->next = tool2;
[487]352 if (prev2)
[2]353 prev2->next = tool1;
354 tool2->next = tool1->next;
355 tool1->next = info;
356 fToolsChanged = TRUE;
357 }
358 return toolhead;
359}
360
[440]361TOOL *free_tools(VOID)
362{
[551]363 TOOL *tool, *next;
[2]364
365 tool = toolhead;
[487]366 while (tool) {
[2]367 next = tool->next;
[487]368 if (tool->help)
[2]369 free(tool->help);
[487]370 if (tool->text)
[2]371 free(tool->text);
372 free(tool);
373 tool = next;
374 }
375 toolhead = NULL;
376 return toolhead;
377}
378
[551]379MRESULT EXPENTRY ReOrderToolsProc(HWND hwnd, ULONG msg, MPARAM mp1,
380 MPARAM mp2)
[440]381{
[487]382 switch (msg) {
[551]383 case WM_INITDLG:
384 if (!toolhead || !toolhead->next)
385 WinDismissDlg(hwnd, 0);
386 WinSetWindowText(hwnd, GetPString(IDS_RETOOLTEXT));
387 {
388 TOOL *tool;
389 CHAR s[133];
390 SHORT sSelect;
[2]391
[551]392 tool = toolhead;
393 while (tool) {
394 sprintf(s, "%-5u %s", tool->id, (tool->help) ? tool->help : "?");
395 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
396 RE_ADDLISTBOX,
397 LM_INSERTITEM,
398 MPFROMSHORT(LIT_END), MPFROMP(s));
399 if (sSelect >= 0)
400 WinSendDlgItemMsg(hwnd,
401 RE_ADDLISTBOX,
402 LM_SETITEMHANDLE,
403 MPFROMSHORT(sSelect), MPFROMLONG((ULONG) tool));
404 tool = tool->next;
[2]405 }
[551]406 }
407 break;
[2]408
[551]409 case WM_CONTROL:
410 return 0;
[2]411
[551]412 case WM_COMMAND:
413 switch (SHORT1FROMMP(mp1)) {
414 case DID_CANCEL:
415 WinDismissDlg(hwnd, 0);
416 break;
[2]417
[551]418 case DID_OK:
419 {
420 TOOL *tool, *thead = NULL, *last = NULL;
421 SHORT sSelect = 0, numitems;
[2]422
[551]423 numitems = (SHORT) WinSendDlgItemMsg(hwnd, RE_REMOVELISTBOX,
424 LM_QUERYITEMCOUNT,
425 MPVOID, MPVOID);
426 while (numitems) {
427 tool = (TOOL *) WinSendDlgItemMsg(hwnd, RE_REMOVELISTBOX,
428 LM_QUERYITEMHANDLE,
429 MPFROMSHORT(sSelect++), MPVOID);
430 if (tool) {
431 if (!thead)
432 thead = tool;
433 else
434 last->next = tool;
435 last = tool;
436 }
437 numitems--;
438 }
439 sSelect = 0;
440 numitems = (SHORT) WinSendDlgItemMsg(hwnd, RE_ADDLISTBOX,
441 LM_QUERYITEMCOUNT,
442 MPVOID, MPVOID);
443 while (numitems) {
444 tool = (TOOL *) WinSendDlgItemMsg(hwnd, RE_ADDLISTBOX,
445 LM_QUERYITEMHANDLE,
446 MPFROMSHORT(sSelect++), MPVOID);
447 if (tool) {
448 if (!thead)
449 thead = tool;
450 else
451 last->next = tool;
452 last = tool;
453 }
454 numitems--;
455 }
456 if (last)
457 last->next = NULL;
458 toolhead = thead;
459 }
460 fToolsChanged = TRUE;
461 WinDismissDlg(hwnd, 1);
462 break;
[2]463
[551]464 case IDM_HELP:
465 if (hwndHelp)
466 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
467 MPFROM2SHORT(HELP_REORDERBUTTONS, 0),
468 MPFROMSHORT(HM_RESOURCEID));
469 break;
[2]470
[551]471 case RE_ADD:
472 {
473 SHORT sSelect, sSelect2;
474 CHAR s[133];
475 TOOL *tool;
[2]476
[551]477 sSelect = (USHORT) WinSendDlgItemMsg(hwnd,
478 RE_ADDLISTBOX,
479 LM_QUERYSELECTION,
480 MPFROMSHORT(LIT_FIRST), MPVOID);
481 while (sSelect >= 0) {
482 tool = (TOOL *) WinSendDlgItemMsg(hwnd,
483 RE_ADDLISTBOX,
484 LM_QUERYITEMHANDLE,
485 MPFROMSHORT(sSelect), MPVOID);
486 if (tool) {
487 sprintf(s, "%-5u %s", tool->id, (tool->help) ? tool->help : "?");
488 sSelect2 = (SHORT) WinSendDlgItemMsg(hwnd,
489 RE_REMOVELISTBOX,
490 LM_INSERTITEM,
491 MPFROM2SHORT(LIT_END, 0),
492 MPFROMP(s));
493 if (sSelect2 >= 0)
494 WinSendDlgItemMsg(hwnd,
495 RE_REMOVELISTBOX,
496 LM_SETITEMHANDLE,
497 MPFROMSHORT(sSelect2),
498 MPFROMLONG((ULONG) tool));
499 WinSendDlgItemMsg(hwnd,
500 RE_ADDLISTBOX,
501 LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID);
502 }
503 else
504 WinSendDlgItemMsg(hwnd,
505 RE_ADDLISTBOX,
506 LM_SELECTITEM,
507 MPFROMSHORT(sSelect), MPFROMSHORT(FALSE));
508 sSelect = (USHORT) WinSendDlgItemMsg(hwnd,
509 RE_ADDLISTBOX,
510 LM_QUERYSELECTION,
511 MPFROMSHORT(LIT_FIRST),
512 MPVOID);
513 }
514 }
515 break;
[2]516
[551]517 case RE_REMOVE:
518 {
519 SHORT sSelect, sSelect2;
520 CHAR s[133];
521 TOOL *tool;
[2]522
[551]523 sSelect = (USHORT) WinSendDlgItemMsg(hwnd,
524 RE_REMOVELISTBOX,
525 LM_QUERYSELECTION,
526 MPFROMSHORT(LIT_FIRST), MPVOID);
527 while (sSelect >= 0) {
528 tool = (TOOL *) WinSendDlgItemMsg(hwnd,
529 RE_REMOVELISTBOX,
530 LM_QUERYITEMHANDLE,
531 MPFROMSHORT(sSelect), MPVOID);
532 if (tool) {
533 sprintf(s, "%-5u %s", tool->id, (tool->help) ? tool->help : "?");
534 sSelect2 = (SHORT) WinSendDlgItemMsg(hwnd,
535 RE_ADDLISTBOX,
536 LM_INSERTITEM,
537 MPFROM2SHORT(LIT_END, 0),
538 MPFROMP(s));
539 if (sSelect2 >= 0)
540 WinSendDlgItemMsg(hwnd,
541 RE_ADDLISTBOX,
542 LM_SETITEMHANDLE,
543 MPFROMSHORT(sSelect2),
544 MPFROMLONG((ULONG) tool));
545 WinSendDlgItemMsg(hwnd,
546 RE_REMOVELISTBOX,
547 LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID);
548 }
549 else
550 WinSendDlgItemMsg(hwnd,
551 RE_REMOVELISTBOX,
552 LM_SELECTITEM,
553 MPFROMSHORT(sSelect), MPFROMSHORT(FALSE));
554 sSelect = (USHORT) WinSendDlgItemMsg(hwnd,
555 RE_REMOVELISTBOX,
556 LM_QUERYSELECTION,
557 MPFROMSHORT(LIT_FIRST),
558 MPVOID);
559 }
[2]560 }
[551]561 break;
562 }
563 return 0;
[2]564 }
[551]565 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]566}
567
[551]568MRESULT EXPENTRY AddToolProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[440]569{
[487]570 switch (msg) {
[551]571 case WM_INITDLG:
572 WinSetWindowPtr(hwnd, QWL_USER, mp2);
573 if (mp2) {
574 WinSetWindowText(hwnd, GetPString(IDS_EDITTOOLTEXT));
575 WinSendDlgItemMsg(hwnd, ADDBTN_ID, EM_SETREADONLY,
576 MPFROM2SHORT(TRUE, 0), MPVOID);
577 }
578 WinSendDlgItemMsg(hwnd, ADDBTN_HELP, EM_SETTEXTLIMIT,
579 MPFROM2SHORT(80, 0), MPVOID);
580 WinSendDlgItemMsg(hwnd, ADDBTN_TEXT, EM_SETTEXTLIMIT,
581 MPFROM2SHORT(80, 0), MPVOID);
582 WinSendDlgItemMsg(hwnd, ADDBTN_ID, EM_SETTEXTLIMIT,
583 MPFROM2SHORT(5, 0), MPVOID);
584 if (!mp2)
585 WinCheckButton(hwnd, ADDBTN_VISIBLE, TRUE);
586 else {
587 TOOL *tool = (TOOL *) mp2;
588 CHAR s[33];
[2]589
[551]590 if (tool->help)
591 WinSetDlgItemText(hwnd, ADDBTN_HELP, tool->help);
592 if (tool->text)
593 WinSetDlgItemText(hwnd, ADDBTN_TEXT, tool->text);
594 if (tool->flags & T_MYICON)
595 WinCheckButton(hwnd, ADDBTN_MYICON, TRUE);
596 else
597 WinEnableWindow(WinWindowFromID(hwnd, ADDBTN_EDITBMP), FALSE);
598 if (tool->flags & T_DROPABLE)
599 WinCheckButton(hwnd, ADDBTN_DROPABLE, TRUE);
600 if (!(tool->flags & T_INVISIBLE))
601 WinCheckButton(hwnd, ADDBTN_VISIBLE, TRUE);
602 if (tool->flags & T_SEPARATOR)
603 WinCheckButton(hwnd, ADDBTN_SEPARATOR, TRUE);
604 if (tool->flags & T_TEXT)
605 WinCheckButton(hwnd, ADDBTN_SHOWTEXT, TRUE);
606 sprintf(s, "%u", tool->id);
607 WinSetDlgItemText(hwnd, ADDBTN_ID, s);
608 WinEnableWindow(WinWindowFromID(hwnd, ADDBTN_SHOWTEXT), FALSE);
609 }
610 WinShowWindow(WinWindowFromID(hwnd, ADDBTN_SHOWTEXT), FALSE);
611 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
612 break;
[2]613
[551]614 case WM_ADJUSTWINDOWPOS:
615 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
616 break;
[2]617
[551]618 case UM_SETDIR:
619 PaintRecessedWindow(WinWindowFromID(hwnd, ADDBTN_HELPME), (HPS) 0, FALSE,
620 TRUE);
621 PaintRecessedWindow(WinWindowFromID(hwnd, ADDBTN_BMP), (HPS) 0, TRUE,
622 FALSE);
623 return 0;
[2]624
[551]625 case UM_SETUP:
626 {
627 HBITMAP hbm = (HBITMAP) 0, hbmd, hbmdd;
628 HPS hps;
629 CHAR idstr[7];
630 USHORT id;
[2]631
[551]632 *idstr = 0;
633 WinQueryDlgItemText(hwnd, ADDBTN_ID, 6, idstr);
634 id = atoi(idstr);
635 if (id) {
636 hps = WinGetPS(WinWindowFromID(hwnd, ADDBTN_BMP));
637 if (!WinQueryButtonCheckstate(hwnd, ADDBTN_MYICON))
638 hbm = GpiLoadBitmap(hps, 0, id, 28, 28);
639 if (!hbm)
640 hbm = LoadBitmapFromFileNum(id);
641 if (hbm) {
642 hbmd = (HBITMAP) WinSendDlgItemMsg(hwnd, ADDBTN_BMP, SM_QUERYHANDLE,
643 MPVOID, MPVOID);
644 hbmdd = (HBITMAP) WinSendDlgItemMsg(hwnd, ADDBTN_BMP, SM_SETHANDLE,
645 MPFROMLONG(hbm), MPVOID);
646 if (hbmdd && hbmd && hbmd != hbmdd)
647 GpiDeleteBitmap(hbmd);
648 }
[2]649 }
[551]650 }
651 return 0;
[2]652
[551]653 case WM_CONTROL:
654 switch (SHORT1FROMMP(mp1)) {
655 case ADDBTN_HELP:
656 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
657 WinSetDlgItemText(hwnd, ADDBTN_HELPME, NullStr);
658 if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
659 WinSetDlgItemText(hwnd, ADDBTN_HELPME,
660 GetPString(IDS_ADDTOOLQUICKHELPTEXT));
661 break;
[2]662
[551]663 case ADDBTN_TEXT:
664 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
665 WinSetDlgItemText(hwnd, ADDBTN_HELPME, NullStr);
666 if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
667 WinSetDlgItemText(hwnd, ADDBTN_HELPME,
668 GetPString(IDS_ADDTOOLBUTTONTEXT));
669 break;
[2]670
[551]671 case ADDBTN_ID:
672 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS) {
673 WinSetDlgItemText(hwnd, ADDBTN_HELPME, NullStr);
674 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
[2]675 }
[551]676 if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
677 WinSetDlgItemText(hwnd,
678 ADDBTN_HELPME, GetPString(IDS_ADDTOOLBUTTONIDTEXT));
679 break;
[2]680
[551]681 case ADDBTN_MYICON:
682 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
683 WinEnableWindow(WinWindowFromID(hwnd, ADDBTN_EDITBMP),
684 WinQueryButtonCheckstate(hwnd, ADDBTN_MYICON));
685 break;
686 }
687 return 0;
[2]688
[551]689 case WM_COMMAND:
690 switch (SHORT1FROMMP(mp1)) {
691 case DID_OK:
692 {
693 CHAR help[81], text[81], idstr[7];
694 BOOL invisible, dropable, separator, istext, myicon;
695 TOOL *tool;
[2]696
[551]697 WinQueryDlgItemText(hwnd, ADDBTN_HELP, 80, help);
698 WinQueryDlgItemText(hwnd, ADDBTN_TEXT, 80, text);
699 if (WinQueryButtonCheckstate(hwnd, ADDBTN_DROPABLE))
700 dropable = TRUE;
701 else
702 dropable = FALSE;
703 myicon = WinQueryButtonCheckstate(hwnd, ADDBTN_MYICON);
704 if (WinQueryButtonCheckstate(hwnd, ADDBTN_VISIBLE))
705 invisible = FALSE;
706 else
707 invisible = TRUE;
708 if (WinQueryButtonCheckstate(hwnd, ADDBTN_SEPARATOR))
709 separator = TRUE;
710 else
711 separator = FALSE;
712 if (WinQueryButtonCheckstate(hwnd, ADDBTN_SHOWTEXT))
713 istext = TRUE;
714 else
715 istext = FALSE;
716 tool = INSTDATA(hwnd);
717 if (tool) { /* just editing strings... */
718 istext = ((tool->flags & T_TEXT) != 0);
719 if (tool->help)
720 free(tool->help);
721 tool->help = NULL;
722 if (tool->text)
723 free(tool->text);
724 tool->text = NULL;
725 if (*help)
726 tool->help = xstrdup(help, pszSrcFile, __LINE__);
727 if (*text)
728 tool->text = xstrdup(text, pszSrcFile, __LINE__);
729 tool->flags = (((dropable) ? T_DROPABLE : 0) |
730 ((invisible) ? T_INVISIBLE : 0) |
731 ((separator) ? T_SEPARATOR : 0) |
732 ((myicon) ? T_MYICON : 0) | ((istext) ? T_TEXT : 0));
733 fToolsChanged = TRUE;
734 WinDismissDlg(hwnd, 1);
735 break;
736 }
737 *idstr = 0;
738 WinQueryDlgItemText(hwnd, ADDBTN_ID, 6, idstr);
739 if (!(USHORT) atoi(idstr)) {
740 DosBeep(250, 100);
741 break;
742 }
743 tool = toolhead;
744 while (tool) {
745 if (tool->id == (USHORT) atoi(idstr) && tool != tool) {
746 saymsg(MB_ENTER,
747 hwnd,
748 GetPString(IDS_DUPLICATETEXT),
749 GetPString(IDS_TOOLIDEXISTS));
750 WinSetDlgItemText(hwnd, ADDBTN_ID, NullStr);
751 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, ADDBTN_ID));
752 break;
753 }
754 tool = tool->next;
755 }
756 tool = xmallocz(sizeof(TOOL), pszSrcFile, __LINE__);
757 if (tool) {
758 if (*help)
759 tool->help = xstrdup(help, pszSrcFile, __LINE__);
760 if (*text)
761 tool->text = xstrdup(text, pszSrcFile, __LINE__);
762 tool->id = (USHORT) atoi(idstr);
763 tool->flags = (((dropable) ? T_DROPABLE : 0) |
764 ((invisible) ? T_INVISIBLE : 0) |
765 ((separator) ? T_SEPARATOR : 0) |
766 ((myicon) ? T_MYICON : 0) | ((istext) ? T_TEXT : 0));
767 add_tool(tool);
768 WinDismissDlg(hwnd, tool->id);
769 }
770 }
771 break;
[2]772
[551]773 case DID_CANCEL:
774 WinDismissDlg(hwnd, 0);
775 break;
[2]776
[551]777 case ADDBTN_EDITBMP:
778 {
779 CHAR idstr[6], filename[34];
[2]780
[551]781 *idstr = 0;
782 WinQueryDlgItemText(hwnd, ADDBTN_ID, 6, idstr);
783 if (!(USHORT) atoi(idstr)) {
784 DosBeep(250, 100);
785 break;
786 }
787 sprintf(filename, "%u.BMP", atoi(idstr));
788 if (IsFile(filename) != 1) {
789 CHAR s[CCHMAXPATH] = "EMPTY.BMP";
790
791 docopyf(COPY, s, filename);
792 }
793 runemf2(SEPARATE | WINDOWED,
794 hwnd, NULL, NULL, "ICONEDIT.EXE %s", filename);
[2]795 }
[551]796 break;
797
798 case IDM_HELP:
799 if (hwndHelp) {
800 if (INSTDATA(hwnd))
801 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
802 MPFROM2SHORT(HELP_CHANGEBUTTON, 0),
803 MPFROMSHORT(HM_RESOURCEID));
804 else
805 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
806 MPFROM2SHORT(HELP_ADDBUTTON, 0),
807 MPFROMSHORT(HM_RESOURCEID));
808 }
809 break;
810 }
811 return 0;
[2]812 }
[551]813 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]814}
815
[551]816MRESULT EXPENTRY PickToolProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[440]817{
[487]818 switch (msg) {
[551]819 case WM_INITDLG:
820 if (mp2) {
821 CHAR s[133];
[2]822
[551]823 sprintf(s, GetPString(IDS_PICKTOOLTITLETEXT), (CHAR *) mp2);
824 WinSetWindowText(hwnd, s);
825 }
826 {
827 TOOL *tool;
828 CHAR s[133];
[2]829
[551]830 tool = toolhead;
831 while (tool) {
832 sprintf(s, "%-5u %s", tool->id, (tool->help) ? tool->help : "?");
833 WinSendDlgItemMsg(hwnd,
834 PICKBTN_LISTBOX,
835 LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP(s));
836 tool = tool->next;
[2]837 }
[551]838 }
839 break;
[2]840
[551]841 case WM_CONTROL:
842 if (SHORT1FROMMP(mp1) == PICKBTN_LISTBOX) {
843 switch (SHORT2FROMMP(mp1)) {
844 case LN_ENTER:
845 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID);
846 break;
[2]847 }
[551]848 }
849 return 0;
[2]850
[551]851 case WM_COMMAND:
852 switch (SHORT1FROMMP(mp1)) {
853 case DID_CANCEL:
854 WinDismissDlg(hwnd, 0);
855 break;
856 case DID_OK:
857 {
858 SHORT sSelect;
859 CHAR s[33];
[2]860
[551]861 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, PICKBTN_LISTBOX,
862 LM_QUERYSELECTION,
863 MPFROMSHORT(LIT_FIRST), MPVOID);
864 if (sSelect >= 0) {
865 *s = 0;
866 WinSendDlgItemMsg(hwnd, PICKBTN_LISTBOX, LM_QUERYITEMTEXT,
867 MPFROM2SHORT(sSelect, 32), MPFROMP(s));
868 if (*s)
869 WinDismissDlg(hwnd, (USHORT) atoi(s));
870 }
[2]871 }
[551]872 break;
873 }
874 return 0;
[2]875 }
[551]876 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]877}
878
[551]879MRESULT EXPENTRY ToolIODlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[440]880{
[487]881 switch (msg) {
[551]882 case WM_INITDLG:
883 if (mp2)
884 WinSetWindowULong(hwnd, QWL_USER, TRUE);
885 else {
886 WinSetWindowULong(hwnd, QWL_USER, FALSE);
887 WinSetWindowText(hwnd, GetPString(IDS_LOADTOOLBOXTITLETEXT));
888 }
889 WinSendDlgItemMsg(hwnd,
890 SVBTN_ENTRY,
891 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
892 {
893 FILEFINDBUF3 findbuf;
894 HDIR hDir;
895 ULONG ulSearchCount, x = 0;
896 CHAR *masks[] = { "*.TLS", "FM3TOOLS.DAT", NULL };
897
[487]898 if (mp2)
[551]899 masks[1] = NULL;
900 while (masks[x]) {
901 hDir = HDIR_CREATE;
[766]902 ulSearchCount = 1;
[551]903 DosError(FERR_DISABLEHARDERR);
904 if (!DosFindFirst(masks[x],
905 &hDir,
906 FILE_ARCHIVED,
907 &findbuf,
908 sizeof(FILEFINDBUF3),
909 &ulSearchCount, FIL_STANDARD)) {
910 do {
911 priority_bumped();
912 WinSendMsg(WinWindowFromID(hwnd,
913 SVBTN_LISTBOX),
914 LM_INSERTITEM,
915 MPFROM2SHORT(LIT_SORTASCENDING, 0),
916 MPFROMP(findbuf.achName));
[766]917 ulSearchCount = 1;
[551]918 } while (!DosFindNext(hDir,
919 &findbuf,
920 sizeof(FILEFINDBUF3), &ulSearchCount));
921 DosFindClose(hDir);
922 priority_bumped();
923 }
924 x++;
[2]925 }
[551]926 DosError(FERR_DISABLEHARDERR);
927 }
928 if (!WinSendDlgItemMsg(hwnd,
929 SVBTN_LISTBOX,
930 LM_QUERYITEMCOUNT, MPVOID, MPVOID)) {
931 WinEnableWindow(WinWindowFromID(hwnd, SVBTN_LISTBOX), FALSE);
932 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
933 }
934 WinSetDlgItemText(hwnd,
935 SVBTN_CURRENT,
936 (*lasttoolbox) ? lasttoolbox : "FM3TOOLS.DAT");
937 break;
[2]938
[551]939 case UM_SETUP:
940 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, SVBTN_ENTRY));
941 return 0;
[2]942
[551]943 case WM_CONTROL:
944 if (SHORT1FROMMP(mp1) == SVBTN_LISTBOX) {
945 SHORT sSelect;
946 CHAR szBuffer[CCHMAXPATH];
[2]947
[551]948 switch (SHORT2FROMMP(mp1)) {
949 case LN_SELECT:
950 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, SVBTN_LISTBOX,
951 LM_QUERYSELECTION,
952 MPFROMSHORT(LIT_FIRST), MPVOID);
953 if (sSelect >= 0) {
954 *szBuffer = 0;
955 WinSendDlgItemMsg(hwnd, SVBTN_LISTBOX, LM_QUERYITEMTEXT,
956 MPFROM2SHORT(sSelect, CCHMAXPATH),
957 MPFROMP(szBuffer));
958 if (*szBuffer)
959 WinSetDlgItemText(hwnd, SVBTN_ENTRY, szBuffer);
960 }
961 break;
[2]962
[551]963 case LN_ENTER:
964 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID);
965 break;
966 }
967 }
968 return 0;
[2]969
[551]970 case WM_COMMAND:
971 switch (SHORT1FROMMP(mp1)) {
972 case IDM_HELP:
973 if (hwndHelp) {
974 if (INSTDATA(hwnd))
975 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
976 MPFROM2SHORT(HELP_SAVETOOLS, 0),
977 MPFROMSHORT(HM_RESOURCEID));
978 else
979 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
980 MPFROM2SHORT(HELP_LOADTOOLS, 0),
981 MPFROMSHORT(HM_RESOURCEID));
[2]982 }
[551]983 break;
[2]984
[551]985 case DID_CANCEL:
986 WinDismissDlg(hwnd, 0);
987 break;
[2]988
[551]989 case DID_OK:
990 {
991 BOOL saving = WinQueryWindowULong(hwnd, QWL_USER);
992 CHAR temptools[CCHMAXPATH];
[2]993
[551]994 strcpy(temptools, lasttoolbox);
995 if (fToolsChanged)
996 save_tools(NULL);
997 WinQueryDlgItemText(hwnd,
998 SVBTN_ENTRY, sizeof(lasttoolbox), lasttoolbox);
999 if (*lasttoolbox) {
1000 if (!strchr(lasttoolbox, '.'))
1001 strcat(lasttoolbox, ".TLS");
1002 }
1003 if (saving && *lasttoolbox)
1004 save_tools(NULL);
1005 else {
1006 if (!load_tools(NULL)) {
1007 strcpy(lasttoolbox, temptools);
1008 if (!load_tools(NULL)) {
1009 *lasttoolbox = 0;
1010 load_tools(NULL);
1011 }
1012 }
1013 }
1014 PrfWriteProfileString(fmprof, FM3Str, "LastToolBox", lasttoolbox);
[2]1015 }
[551]1016 WinDismissDlg(hwnd, 1);
1017 break;
1018 }
1019 return 0;
[2]1020 }
[551]1021 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]1022}
Note: See TracBrowser for help on using the repository browser.