source: trunk/dll/tools.c@ 130

Last change on this file since 130 was 130, checked in by root, 20 years ago

Use QWL_USER

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