source: trunk/dll/tools.c@ 512

Last change on this file since 512 was 512, checked in by root, 19 years ago

Correct typo

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