Link with C++ linker
[oweals/cde.git] / cde / programs / dticon / help.c
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $XConsortium: help.c /main/4 1995/11/02 14:05:18 rswiston $ */
24 /*********************************************************************
25 *  (c) Copyright 1993, 1994 Hewlett-Packard Company
26 *  (c) Copyright 1993, 1994 International Business Machines Corp.
27 *  (c) Copyright 1993, 1994 Sun Microsystems, Inc.
28 *  (c) Copyright 1993, 1994 Unix System Labs, Inc., a subsidiary of
29 *      Novell, Inc.
30 **********************************************************************/
31 /******************************************************************************
32  **  Program:           dticon
33  **
34  **  Description:       X11-based multi-color icon editor
35  **
36  **  File:              help.c, which contains the following subroutines or
37  **                     functions:
38  **                       AssignHelpCallbacks()
39  **                       HelpTriggerCB()
40  **                       HelpHyperlinkCB()
41  **                       HelpCloseCB()
42  **                       GetHelpDialog()
43  **                       HelpSetVolAndLocation()
44  **                       DisplayHelp()
45  **                       DisplayNewHelp()
46  **                       DisplayHelpDialog()
47  **                       CreateHelpDialog()
48  **
49  ******************************************************************************
50  **
51  **  Copyright 1991 by Hewlett-Packard Company, 1990, 1991, 1992.
52  **  All rights are reserved.  Copying or reproduction of this program,
53  **  except for archival purposes, is prohibited without prior written
54  **  consent of Hewlett-Packard Company.
55  **
56  **  Hewlett-Packard makes no representations about the suitibility of this
57  **  software for any purpose.  It is provided "as is" without express or
58  **  implied warranty.
59  **
60  ******************************************************************************/
61 #include <stdio.h>
62 #include <Xm/DialogS.h>
63 #include <Xm/Form.h>
64 #include <Xm/MwmUtil.h>
65 #include <Dt/HelpDialog.h>
66 #include "help.h"
67 #include "main.h"
68
69 extern Widget circleButton, editMenu_addHS_pb, editMenu_clear_pb;
70 extern Widget editMenu_copy_pb, editMenu_cut_pb, editMenu_deleteHS_pb;
71 extern Widget editMenu_flip_pb, editMenu_paste_pb, editMenu_resize_pb;
72 extern Widget editMenu_rotate_pb, editMenu_scale_pb, editMenu_top_pb;
73 extern Widget editMenu_undo_pb, ellipseButton, eraseButton, floodButton;
74 extern Widget fileMenu_new_pb, fileMenu_open_pb, fileMenu_quit_pb;
75 extern Widget fileMenu_saveAs_pb, fileMenu_save_pb, fileMenu_top_pb;
76 extern Widget lineButton, menu1, optionsMenu_format, optionsMenu_grid;
77 extern Widget optionsMenu_magnify, optionsMenu_top_pb, pointButton;
78 extern Widget polygonButton, polylineButton, queryDialog, rectangleButton;
79 extern Widget selectButton, fillToggle;
80 extern Widget editMenu_grabImage_pb;
81 extern Widget helpMenu_top_pb, helpMenu_intro_pb, helpMenu_tasks_pb,
82               helpMenu_ref_pb, helpMenu_item_pb, helpMenu_using_pb,
83               helpMenu_version_pb;
84 extern Widget rotateMenu, flipMenu, formatMenu, magnificationMenu;
85 extern Widget staticColorsBox, symbolicColorsBox, staticGreysBox;
86 extern Widget viewport;
87
88 void HelpTriggerCB(Widget w, caddr_t client_data, caddr_t call_data);
89 void HelpOnItemCB(Widget w, caddr_t client_data, caddr_t call_data);
90 void HelpSetVolAndLocation(int topic);
91 void DisplayNewHelp(char *helpVolume, char *locationId);
92 void DisplayHelp(char *helpVolume, char *locationId);
93 void DisplayHelpDialog(Widget dialog, char *helpVolume, char *locationId);
94 Widget CreateHelpDialog(HelpStruct *pHelp);
95
96
97 void
98 AssignHelpCallbacks( void )
99 {
100 #ifdef DEBUG
101   if (debug)
102     stat_out("Entering AssignHelpCallbacks\n");
103 #endif
104
105 /*** Set Help callbacks for the graphic tools ***/
106   XtAddCallback(pointButton, XmNhelpCallback,
107                         (XtCallbackProc) HelpTriggerCB,
108                         (XtPointer)HELP_POINT_BUTTON);
109   XtAddCallback(floodButton, XmNhelpCallback,
110                         (XtCallbackProc) HelpTriggerCB,
111                         (XtPointer)HELP_FLOOD_BUTTON);
112   XtAddCallback(lineButton, XmNhelpCallback,
113                         (XtCallbackProc) HelpTriggerCB,
114                         (XtPointer)HELP_LINE_BUTTON);
115   XtAddCallback(polylineButton, XmNhelpCallback,
116                         (XtCallbackProc) HelpTriggerCB,
117                         (XtPointer)HELP_POLYLINE_BUTTON);
118   XtAddCallback(rectangleButton, XmNhelpCallback,
119                         (XtCallbackProc) HelpTriggerCB,
120                         (XtPointer)HELP_RECTANGLE_BUTTON);
121   XtAddCallback(polygonButton, XmNhelpCallback,
122                         (XtCallbackProc) HelpTriggerCB,
123                         (XtPointer)HELP_POLYGON_BUTTON);
124   XtAddCallback(circleButton, XmNhelpCallback,
125                         (XtCallbackProc) HelpTriggerCB,
126                         (XtPointer)HELP_CIRCLE_BUTTON);
127   XtAddCallback(ellipseButton, XmNhelpCallback,
128                         (XtCallbackProc) HelpTriggerCB,
129                         (XtPointer)HELP_ELLIPSE_BUTTON);
130   XtAddCallback(eraseButton, XmNhelpCallback,
131                         (XtCallbackProc) HelpTriggerCB,
132                         (XtPointer)HELP_ERASER_BUTTON);
133   XtAddCallback(selectButton, XmNhelpCallback,
134                         (XtCallbackProc) HelpTriggerCB,
135                         (XtPointer)HELP_SELECT_BUTTON);
136   XtAddCallback(fillToggle, XmNhelpCallback,
137                         (XtCallbackProc) HelpTriggerCB,
138                         (XtPointer)HELP_FILL_BUTTON);
139
140 /*** Set Help callbacks for the pen groups ***/
141   XtAddCallback(staticColorsBox, XmNhelpCallback,
142                         (XtCallbackProc) HelpTriggerCB,
143                         (XtPointer)HELP_STATIC_COLOR_BUTTON);
144   XtAddCallback(staticGreysBox, XmNhelpCallback,
145                         (XtCallbackProc) HelpTriggerCB,
146                         (XtPointer)HELP_STATIC_GREY_BUTTON);
147   XtAddCallback(symbolicColorsBox, XmNhelpCallback,
148                         (XtCallbackProc) HelpTriggerCB,
149                         (XtPointer)HELP_DYNAMIC_COLOR_BUTTON);
150
151 /*** Set Help callbacks for the File menu ***/
152   XtAddCallback(fileMenu_top_pb, XmNhelpCallback,
153                         (XtCallbackProc) HelpTriggerCB,
154                         (XtPointer)HELP_FILE_BUTTON);
155   XtAddCallback(fileMenu_new_pb, XmNhelpCallback,
156                         (XtCallbackProc) HelpTriggerCB,
157                         (XtPointer)HELP_NEW_BUTTON);
158   XtAddCallback(fileMenu_open_pb, XmNhelpCallback,
159                         (XtCallbackProc) HelpTriggerCB,
160                         (XtPointer)HELP_OPEN_BUTTON);
161   XtAddCallback(fileMenu_save_pb, XmNhelpCallback,
162                         (XtCallbackProc) HelpTriggerCB,
163                         (XtPointer)HELP_SAVE_BUTTON);
164   XtAddCallback(fileMenu_saveAs_pb, XmNhelpCallback,
165                         (XtCallbackProc) HelpTriggerCB,
166                         (XtPointer)HELP_SAVE_AS_BUTTON);
167   XtAddCallback(fileMenu_quit_pb, XmNhelpCallback,
168                         (XtCallbackProc) HelpTriggerCB,
169                         (XtPointer)HELP_QUIT_BUTTON);
170
171 /*** Set Help callbacks for the Edit menu ***/
172   XtAddCallback(editMenu_top_pb, XmNhelpCallback,
173                         (XtCallbackProc) HelpTriggerCB,
174                         (XtPointer)HELP_EDIT_BUTTON);
175   XtAddCallback(editMenu_undo_pb, XmNhelpCallback,
176                         (XtCallbackProc) HelpTriggerCB,
177                         (XtPointer)HELP_UNDO_BUTTON);
178   XtAddCallback(editMenu_cut_pb, XmNhelpCallback,
179                         (XtCallbackProc) HelpTriggerCB,
180                         (XtPointer)HELP_CUT_BUTTON);
181   XtAddCallback(editMenu_copy_pb, XmNhelpCallback,
182                         (XtCallbackProc) HelpTriggerCB,
183                         (XtPointer)HELP_COPY_BUTTON);
184   XtAddCallback(editMenu_paste_pb, XmNhelpCallback,
185                         (XtCallbackProc) HelpTriggerCB,
186                         (XtPointer)HELP_PASTE_BUTTON);
187   XtAddCallback(editMenu_rotate_pb, XmNhelpCallback,
188                         (XtCallbackProc) HelpTriggerCB,
189                         (XtPointer)HELP_ROTATE_BUTTON);
190   XtAddCallback(rotateMenu, XmNhelpCallback,
191                         (XtCallbackProc) HelpTriggerCB,
192                         (XtPointer)HELP_ROTATE_BUTTON);
193   XtAddCallback(editMenu_flip_pb, XmNhelpCallback,
194                         (XtCallbackProc) HelpTriggerCB,
195                         (XtPointer)HELP_FLIP_BUTTON);
196   XtAddCallback(flipMenu, XmNhelpCallback,
197                         (XtCallbackProc) HelpTriggerCB,
198                         (XtPointer)HELP_FLIP_BUTTON);
199   XtAddCallback(editMenu_scale_pb, XmNhelpCallback,
200                         (XtCallbackProc) HelpTriggerCB,
201                         (XtPointer)HELP_SCALE_BUTTON);
202   XtAddCallback(editMenu_resize_pb, XmNhelpCallback,
203                         (XtCallbackProc) HelpTriggerCB,
204                         (XtPointer)HELP_RESIZE_ICON_BUTTON);
205   XtAddCallback(editMenu_addHS_pb, XmNhelpCallback,
206                         (XtCallbackProc) HelpTriggerCB,
207                         (XtPointer)HELP_ADD_HOTSPOT_BUTTON);
208   XtAddCallback(editMenu_deleteHS_pb, XmNhelpCallback,
209                         (XtCallbackProc) HelpTriggerCB,
210                         (XtPointer)HELP_DELETE_HOTSPOT_BUTTON);
211   XtAddCallback(editMenu_grabImage_pb, XmNhelpCallback,
212                         (XtCallbackProc) HelpTriggerCB,
213                         (XtPointer)HELP_GRAB_BUTTON);
214   XtAddCallback(editMenu_clear_pb, XmNhelpCallback,
215                         (XtCallbackProc) HelpTriggerCB,
216                         (XtPointer)HELP_CLEAR_ICON_BUTTON);
217
218 /*** Set Help callbacks for the Options menu ***/
219   XtAddCallback(optionsMenu_top_pb, XmNhelpCallback,
220                         (XtCallbackProc) HelpTriggerCB,
221                         (XtPointer)HELP_OPTIONS_BUTTON);
222   XtAddCallback(optionsMenu_grid, XmNhelpCallback,
223                         (XtCallbackProc) HelpTriggerCB,
224                         (XtPointer)HELP_VISIBLE_GRID_BUTTON);
225   XtAddCallback(optionsMenu_format, XmNhelpCallback,
226                         (XtCallbackProc) HelpTriggerCB,
227                         (XtPointer)HELP_OUTPUT_FORMAT_BUTTON);
228   XtAddCallback(formatMenu, XmNhelpCallback,
229                         (XtCallbackProc) HelpTriggerCB,
230                         (XtPointer)HELP_OUTPUT_FORMAT_BUTTON);
231   XtAddCallback(optionsMenu_magnify, XmNhelpCallback,
232                         (XtCallbackProc) HelpTriggerCB,
233                         (XtPointer)HELP_MAGNIFICATION_BUTTON);
234   XtAddCallback(magnificationMenu, XmNhelpCallback,
235                         (XtCallbackProc) HelpTriggerCB,
236                         (XtPointer)HELP_MAGNIFICATION_BUTTON);
237
238 /*** Set Help callbacks for the Help menu (menu items activated) ***/
239   XtAddCallback(helpMenu_intro_pb,
240                         XmNactivateCallback,
241                         (XtCallbackProc) HelpTriggerCB,
242                         (XtPointer)HELP_INTRODUCTION);
243   XtAddCallback(helpMenu_tasks_pb,
244                         XmNactivateCallback,
245                         (XtCallbackProc) HelpTriggerCB,
246                         (XtPointer)HELP_TASKS);
247   XtAddCallback(helpMenu_ref_pb,
248                         XmNactivateCallback,
249                         (XtCallbackProc) HelpTriggerCB,
250                         (XtPointer)HELP_REFERENCE);
251   XtAddCallback(helpMenu_item_pb,
252                         XmNactivateCallback,
253                         (XtCallbackProc) HelpOnItemCB,
254                         (XtPointer)HELP_ON_ITEM);
255   XtAddCallback(helpMenu_using_pb,
256                         XmNactivateCallback,
257                         (XtCallbackProc) HelpTriggerCB,
258                         (XtPointer)HELP_USING_HELP);
259   XtAddCallback(helpMenu_version_pb,
260                         XmNactivateCallback,
261                         (XtCallbackProc) HelpTriggerCB,
262                         (XtPointer)HELP_VERSION);
263
264 /*** Set Help callbacks for the Help menu (help on menu items themselves) ***/
265   XtAddCallback(helpMenu_top_pb,
266                         XmNhelpCallback,
267                         (XtCallbackProc) HelpTriggerCB,
268                         (XtPointer)HELP_HELP_BUTTON);
269   XtAddCallback(helpMenu_intro_pb,
270                         XmNhelpCallback,
271                         (XtCallbackProc) HelpTriggerCB,
272                         (XtPointer)HELP_HELP_INTRODUCTION);
273   XtAddCallback(helpMenu_tasks_pb,
274                         XmNhelpCallback,
275                         (XtCallbackProc) HelpTriggerCB,
276                         (XtPointer)HELP_HELP_TASKS);
277   XtAddCallback(helpMenu_ref_pb,
278                         XmNhelpCallback,
279                         (XtCallbackProc) HelpTriggerCB,
280                         (XtPointer)HELP_HELP_REFERENCE);
281   XtAddCallback(helpMenu_item_pb,
282                         XmNhelpCallback,
283                         (XtCallbackProc) HelpTriggerCB,
284                         (XtPointer)HELP_HELP_ON_ITEM);
285   XtAddCallback(helpMenu_using_pb,
286                         XmNhelpCallback,
287                         (XtCallbackProc) HelpTriggerCB,
288                         (XtPointer)HELP_HELP_USING_HELP);
289   XtAddCallback(helpMenu_version_pb,
290                         XmNhelpCallback,
291                         (XtCallbackProc) HelpTriggerCB,
292                         (XtPointer)HELP_HELP_VERSION);
293
294 /*** Set Help callbacks for other GUI components ***/
295   XtAddCallback(menu1, XmNhelpCallback,
296                         (XtCallbackProc) HelpTriggerCB,
297                         (XtPointer)HELP_MENUBAR);
298   XtAddCallback(queryDialog, XmNhelpCallback,
299                         (XtCallbackProc) HelpTriggerCB,
300                         (XtPointer)HELP_QUERY);
301   XtAddCallback(stdErrDialog, XmNhelpCallback,
302                         (XtCallbackProc) HelpTriggerCB,
303                         (XtPointer)HELP_ERROR);
304   XtAddCallback(newIconDialog, XmNhelpCallback,
305                         (XtCallbackProc) HelpTriggerCB,
306                         (XtPointer)HELP_NEW_ICON);
307   XtAddCallback(fileIODialog, XmNhelpCallback,
308                         (XtCallbackProc) HelpTriggerCB,
309                         (XtPointer)HELP_FILEIO_ICON);
310   XtAddCallback(viewport, XmNhelpCallback,
311                         (XtCallbackProc) HelpTriggerCB,
312                         (XtPointer)HELP_VIEWPORT);
313   XtAddCallback(mainWindow, XmNhelpCallback,
314                         (XtCallbackProc) HelpTriggerCB,
315                         (XtPointer)HELP_MAIN_WINDOW);
316
317 #ifdef DEBUG
318   if (debug)
319     stat_out("Leaving AssignHelpCallbacks\n");
320 #endif
321 }
322
323
324 void
325 HelpTriggerCB(
326         Widget w,
327         caddr_t client_data,
328         caddr_t call_data )
329 {
330 #ifdef DEBUG
331   if (debug)
332     stat_out("Entering HelpTriggerCB: help-tag=%d\n", (int) client_data);
333 #endif
334
335   HelpSetVolAndLocation((int) client_data);
336
337 #ifdef DEBUG
338   if (debug)
339     stat_out("Leaving HelpTriggerCB\n");
340 #endif
341 }
342
343
344 void
345 HelpOnItemCB(
346         Widget w,
347         caddr_t client_data,
348         caddr_t call_data )
349 {
350     Widget selWidget;
351     int    status;
352
353 #ifdef DEBUG
354   if (debug)
355     stat_out("Entering HelpOnItemCB: help-tag=%d\n", (int) client_data);
356 #endif
357
358
359     while (!XtIsSubclass(w, applicationShellWidgetClass))
360         w = XtParent(w);
361
362     status = DtHelpReturnSelectedWidgetId(w, NULL, &selWidget);
363     /* NULL value for cursor, uses default cursor value. */
364
365     switch ((int)status)
366     {
367         case DtHELP_SELECT_ERROR:
368             /* Display error dialog here, function call failed */
369             break;
370         case DtHELP_SELECT_VALID:
371             while (selWidget != (Widget)NULL)
372             {
373                 if ( (XtHasCallbacks(selWidget, XmNhelpCallback)
374                       == XtCallbackHasSome) )
375                 {
376                     XtCallCallbacks(selWidget, XmNhelpCallback, NULL);
377                     break;
378                 }
379                 else
380                     selWidget = XtParent(selWidget);
381             }
382             break;
383         case DtHELP_SELECT_ABORT:
384             /* Display error dialog here,
385              * "Selection Aborted by user."
386              */
387             break;
388         case DtHELP_SELECT_INVALID:
389             DoErrorDialog( GETSTR(14,4,"You must select an item\nwithin the Icon Editor.") );
390             break;
391
392     }
393
394 #ifdef DEBUG
395   if (debug)
396     stat_out("Leaving HelpOnItemCB\n");
397 #endif
398 }
399
400
401 void
402 HelpHyperlinkCB(
403         Widget w,
404         caddr_t client_data_unused,
405         caddr_t call_data )
406 {
407   DtHelpDialogCallbackStruct *pHyper =
408                 (DtHelpDialogCallbackStruct *) call_data;
409
410   switch(pHyper->hyperType) {
411     case DtHELP_LINK_JUMP_NEW :
412                 DisplayNewHelp(pHyper->helpVolume, pHyper->locationId);
413                 break;
414     default : ; /* application defined link code goes here */
415    } /* switch */
416 }
417
418
419 void
420 HelpCloseCB(
421         Widget w,
422         caddr_t client_data,
423         caddr_t call_data_unused )
424 {
425     HelpStruct *pHelp = (HelpStruct *)client_data;
426
427 #ifdef DEBUG
428   if (debug)
429     stat_out("Entering HelpCloseCB\n");
430 #endif
431
432     if(pHelp != (HelpStruct *)NULL)
433     {
434       /* this is a "cached" help dialog */
435       pHelp->inUse = False;
436     }
437
438     XtUnmanageChild(w);
439
440 #ifdef DEBUG
441   if (debug)
442     stat_out("Leaving HelpCloseCB\n");
443 #endif
444 }
445
446
447 static Widget
448 GetHelpDialog( void )
449 {
450   HelpStruct *pHelp;
451   Arg args[5];
452   int i, done;
453
454 #ifdef DEBUG
455   if (debug)
456     stat_out("Entering GetHelpDialog\n");
457 #endif
458
459   if(help_head == (HelpStruct *)NULL) {
460     pHelp = (HelpStruct *)XtMalloc(sizeof(HelpStruct));
461     pHelp->pNext = (HelpStruct *)NULL;
462     pHelp->pPrev = (HelpStruct *)NULL;
463     pHelp->inUse = True;
464     pHelp->dialog = CreateHelpDialog(pHelp);
465     help_head = pHelp;
466
467 #ifdef DEBUG
468   if (debug)
469     stat_out("Leaving GetHelpDialog: Created the 1st help dialog\n");
470 #endif
471
472     return pHelp->dialog;
473    }
474   else {
475     pHelp = help_head;
476     done = False;
477     while (!done) {
478       if(pHelp->inUse == False) {
479         pHelp->inUse = True;
480
481 #ifdef DEBUG
482   if (debug)
483     stat_out("Leaving GetHelpDialog: activated an existing help dialog\n");
484 #endif
485
486         return pHelp->dialog;
487        } /* if */
488       if(pHelp->pNext != (HelpStruct *)NULL)
489         pHelp = pHelp->pNext;
490       else
491         done = True;
492      } /* while */
493     pHelp->pNext = (HelpStruct *) XtMalloc(sizeof(HelpStruct));
494     pHelp->pNext->pPrev = pHelp;
495     pHelp = pHelp->pNext;
496     pHelp->pNext = (HelpStruct *)NULL;
497     pHelp->inUse = True;
498     pHelp->dialog = CreateHelpDialog(pHelp);
499
500 #ifdef DEBUG
501   if (debug)
502     stat_out("Leaving GetHelpDialog: Created a new help dialog\n");
503 #endif
504
505     return pHelp->dialog;
506    }
507 }
508
509
510 void
511 HelpSetVolAndLocation(
512         int topic)
513 {
514     char *helpVolume, *locationId;
515
516 #ifdef DEBUG
517   if (debug)
518     stat_out("Entering HelpSetVolAndLocation: topic = %d\n", topic);
519 #endif
520
521     helpVolume = HELP_VOLUME;
522     switch (topic) {
523
524       /*** choices for the 'Help' pulldown menu ***/
525       case HELP_INTRODUCTION:
526             locationId = HELP_INTRODUCTION_STR;
527             break;
528       case HELP_TASKS:
529             locationId = HELP_TASKS_STR;
530             break;
531       case HELP_REFERENCE:
532             locationId = HELP_REFERENCE_STR;
533             break;
534       case HELP_ON_ITEM:
535             locationId = HELP_ON_ITEM_STR;
536             break;
537       case HELP_USING_HELP:
538             helpVolume = HELP_HELP_VOLUME;
539             locationId = HELP_USING_HELP_STR;
540             break;
541       case HELP_VERSION:
542             locationId = HELP_VERSION_STR;
543             break;
544
545       /*** choices for the top-level menus on the main menubar ***/
546       case HELP_FILE_BUTTON:
547             locationId = HELP_FILE_BUTTON_STR;
548             break;
549       case HELP_EDIT_BUTTON:
550             locationId = HELP_EDIT_BUTTON_STR;
551             break;
552       case HELP_OPTIONS_BUTTON:
553             locationId = HELP_OPTIONS_BUTTON_STR;
554             break;
555       case HELP_HELP_BUTTON:
556             locationId = HELP_HELP_BUTTON_STR;
557             break;
558
559       /*** choices for the 'File' pulldown menu ***/
560       case HELP_NEW_BUTTON:
561             locationId = HELP_NEW_BUTTON_STR;
562             break;
563       case HELP_OPEN_BUTTON:
564             locationId = HELP_OPEN_BUTTON_STR;
565             break;
566       case HELP_SAVE_BUTTON:
567             locationId = HELP_SAVE_BUTTON_STR;
568             break;
569       case HELP_SAVE_AS_BUTTON:
570             locationId = HELP_SAVE_AS_BUTTON_STR;
571             break;
572       case HELP_QUIT_BUTTON:
573             locationId = HELP_QUIT_BUTTON_STR;
574             break;
575
576       /*** choices for the 'Edit' pulldown menu ***/
577       case HELP_UNDO_BUTTON:
578             locationId = HELP_UNDO_BUTTON_STR;
579             break;
580       case HELP_CUT_BUTTON:
581             locationId = HELP_CUT_BUTTON_STR;
582             break;
583       case HELP_COPY_BUTTON:
584             locationId = HELP_COPY_BUTTON_STR;
585             break;
586       case HELP_PASTE_BUTTON:
587             locationId = HELP_PASTE_BUTTON_STR;
588             break;
589       case HELP_ROTATE_BUTTON:
590             locationId = HELP_ROTATE_BUTTON_STR;
591             break;
592       case HELP_FLIP_BUTTON:
593             locationId = HELP_FLIP_BUTTON_STR;
594             break;
595       case HELP_SCALE_BUTTON:
596             locationId = HELP_SCALE_BUTTON_STR;
597             break;
598       case HELP_RESIZE_ICON_BUTTON:
599             locationId = HELP_RESIZE_ICON_BUTTON_STR;
600             break;
601       case HELP_ADD_HOTSPOT_BUTTON:
602             locationId = HELP_ADD_HOTSPOT_BUTTON_STR;
603             break;
604       case HELP_DELETE_HOTSPOT_BUTTON:
605             locationId = HELP_DELETE_HOTSPOT_BUTTON_STR;
606             break;
607       case HELP_GRAB_BUTTON:
608             locationId = HELP_GRAB_BUTTON_STR;
609             break;
610       case HELP_CLEAR_ICON_BUTTON:
611             locationId = HELP_CLEAR_ICON_BUTTON_STR;
612             break;
613
614       /*** choices for the 'Options' pulldown menu ***/
615       case HELP_VISIBLE_GRID_BUTTON:
616             locationId = HELP_VISIBLE_GRID_BUTTON_STR;
617             break;
618       case HELP_OUTPUT_FORMAT_BUTTON:
619             locationId = HELP_OUTPUT_FORMAT_BUTTON_STR;
620             break;
621       case HELP_MAGNIFICATION_BUTTON:
622             locationId = HELP_MAGNIFICATION_BUTTON_STR;
623             break;
624
625       /*** choices for the 'Help' pulldown menu ***/
626       case HELP_HELP_INTRODUCTION:
627             locationId = HELP_HELP_INTRODUCTION_STR;
628             break;
629
630       case HELP_HELP_TASKS:
631             locationId = HELP_HELP_TASKS_STR;
632             break;
633
634       case HELP_HELP_REFERENCE:
635             locationId = HELP_HELP_REFERENCE_STR;
636             break;
637
638       case HELP_HELP_ON_ITEM:
639             locationId = HELP_HELP_ON_ITEM_STR;
640             break;
641
642       case HELP_HELP_USING_HELP:
643             locationId = HELP_HELP_USING_HELP_STR;
644             break;
645
646       case HELP_HELP_VERSION:
647             locationId = HELP_HELP_VERSION_STR;
648             break;
649
650       /*** choices for each of the Graphics Tool pushbuttons ***/
651       case HELP_POINT_BUTTON:
652             locationId = HELP_POINT_BUTTON_STR;
653             break;
654       case HELP_FLOOD_BUTTON:
655             locationId = HELP_FLOOD_BUTTON_STR;
656             break;
657       case HELP_LINE_BUTTON:
658             locationId = HELP_LINE_BUTTON_STR;
659             break;
660       case HELP_POLYLINE_BUTTON:
661             locationId = HELP_POLYLINE_BUTTON_STR;
662             break;
663       case HELP_RECTANGLE_BUTTON:
664             locationId = HELP_RECTANGLE_BUTTON_STR;
665             break;
666       case HELP_POLYGON_BUTTON:
667             locationId = HELP_POLYGON_BUTTON_STR;
668             break;
669       case HELP_CIRCLE_BUTTON:
670             locationId = HELP_CIRCLE_BUTTON_STR;
671             break;
672       case HELP_ELLIPSE_BUTTON:
673             locationId = HELP_ELLIPSE_BUTTON_STR;
674             break;
675       case HELP_ERASER_BUTTON:
676             locationId = HELP_ERASER_BUTTON_STR;
677             break;
678       case HELP_SELECT_BUTTON:
679             locationId = HELP_SELECT_BUTTON_STR;
680             break;
681       case HELP_FILL_BUTTON:
682             locationId = HELP_FILL_BUTTON_STR;
683             break;
684
685       /*** choices for each of the Pen Color Group pushbuttons ***/
686       case HELP_STATIC_COLOR_BUTTON:
687             locationId = HELP_STATIC_COLOR_BUTTON_STR;
688             break;
689       case HELP_STATIC_GREY_BUTTON:
690             locationId = HELP_STATIC_GREY_BUTTON_STR;
691             break;
692       case HELP_DYNAMIC_COLOR_BUTTON:
693             locationId = HELP_DYNAMIC_COLOR_BUTTON_STR;
694             break;
695
696       /*** choice for other GUI components ***/
697       case HELP_MENUBAR:
698             locationId = HELP_MENUBAR_STR;
699             break;
700       case HELP_QUERY:
701             locationId = HELP_QUERY_STR;
702             break;
703       case HELP_ERROR:
704             locationId = HELP_ERROR_STR;
705             break;
706       case HELP_NEW_ICON:
707             locationId = HELP_NEW_ICON_STR;
708             break;
709       case HELP_FILEIO_ICON:
710             locationId = HELP_FILEIO_ICON_STR;
711             break;
712       case HELP_VIEWPORT:
713             locationId = HELP_VIEWPORT_STR;
714             break;
715       case HELP_MAIN_WINDOW:
716             locationId = HELP_MAIN_WINDOW_STR;
717             break;
718       default:
719             locationId = HELP_MAIN_WINDOW_STR;
720             break;
721     }
722     DisplayHelp(helpVolume, locationId);
723
724 #ifdef DEBUG
725   if (debug)
726     stat_out("Leaving HelpSetVolAndLocation\n");
727 #endif
728 }
729
730
731 void
732 DisplayHelp(
733         char *helpVolume,
734         char *locationId)
735 {
736   static Widget mainHelpDialog = NULL;
737
738 #ifdef DEBUG
739   if (debug)
740     stat_out("Entering DisplayHelp\n");
741 #endif
742
743   if (mainHelpDialog == NULL)
744       mainHelpDialog = CreateHelpDialog(NULL);
745
746   DisplayHelpDialog (mainHelpDialog, helpVolume, locationId);
747
748 #ifdef DEBUG
749   if (debug)
750     stat_out("Leaving DisplayHelp\n");
751 #endif
752 }
753
754
755 void
756 DisplayNewHelp(
757         char *helpVolume,
758         char *locationId)
759 {
760   Widget helpDialog;
761
762 #ifdef DEBUG
763   if (debug)
764     stat_out("Entering DisplayNewHelp\n");
765 #endif
766
767   helpDialog = GetHelpDialog();
768   DisplayHelpDialog (helpDialog, helpVolume, locationId);
769
770 #ifdef DEBUG
771   if (debug)
772     stat_out("Leaving DisplayNewHelp\n");
773 #endif
774 }
775
776 void
777 DisplayHelpDialog (
778         Widget helpDialog,
779         char  *helpVolume,
780         char  *locationId)
781 {
782   Arg args[10];
783   int n;
784
785 #ifdef DEBUG
786   if (debug)
787     stat_out("Entering DisplayHelpDialog\n");
788 #endif
789
790   n = 0;
791   XtSetArg(args[n], DtNhelpVolume, helpVolume); n++;
792   XtSetArg(args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
793   XtSetArg(args[n], DtNlocationId, locationId); n++;
794   XtSetValues(helpDialog, args, n);
795
796   XtManageChild(helpDialog);
797
798 #ifdef DEBUG
799   if (debug)
800     stat_out("Leaving DisplayHelpDialog\n");
801 #endif
802 }
803
804
805 Widget
806 CreateHelpDialog (HelpStruct *pHelp)
807 {
808     Widget helpDialog;
809     Arg args[10];
810     int i;
811
812 #ifdef DEBUG
813   if (debug)
814     stat_out("Entering CreateHelpDialog, pHelp is %x\n", pHelp);
815 #endif
816
817     i = 0;
818     XtSetArg(args[i], XmNtitle, GETSTR(14,2, "Icon Editor - Help")); i++;
819     XtSetArg(args[i], XmNiconName,GETSTR(14,2, "Icon Editor - Help"));i++;
820     helpDialog = DtCreateHelpDialog(dtIconShell, "helpDlg",
821                                             args, i);
822     XtAddCallback(helpDialog, DtNhyperLinkCallback,
823                       (XtCallbackProc)HelpHyperlinkCB, NULL);
824     XtAddCallback(helpDialog, DtNcloseCallback,
825                       (XtCallbackProc)HelpCloseCB, pHelp);
826
827 #ifdef DEBUG
828   if (debug)
829     stat_out("Leaving CreateHelpDialog\n");
830 #endif
831
832     return helpDialog;
833 }
834