source: trunk/dll/tools.c@ 2

Last change on this file since 2 was 2, checked in by root, 23 years ago

Initial revision

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