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