Initial import of the CDE 2.1.30 sources from the Open Group.
[oweals/cde.git] / cde / programs / dtstyle / Help.c
1 /* $XConsortium: Help.c /main/4 1995/10/30 13:09:47 rswiston $ */
2 /****************************************************************************
3  ****************************************************************************
4  **
5  **   File:        HelpCB.h
6  **
7  **   Project:     DT 3.0
8  **
9  **   Description: Routines that create/cache the dialogs for Help
10  **
11  **
12  **  (c) Copyright Hewlett-Packard Company, 1990, 1991, 1992.  All rights are
13  **  reserved.  Copying or other reproduction of this program
14  **  except for archival purposes is prohibited without prior
15  **  written consent of Hewlett-Packard Company.
16  **
17  **
18  **
19  ****************************************************************************/
20
21 #include <stdio.h>
22
23 #include <Xm/DialogS.h>
24 #include <Xm/Form.h>
25 #include <Xm/MwmUtil.h>
26 #include <Dt/DtP.h>
27
28 #include <Dt/Help.h>
29 #include <Dt/HelpDialog.h>
30
31 #include "Main.h"
32 #include "Help.h"
33
34 static Widget
35 GetHelpDialog( )
36 {
37     static HelpStruct       *pHelpCache;
38
39     HelpStruct *pHelp;
40     Arg args[5];
41     int n;
42
43     if(pHelpCache == (HelpStruct *)NULL)
44     {
45         pHelp = pHelpCache = (HelpStruct *)XtMalloc(sizeof(HelpStruct));
46         pHelp->pNext = (HelpStruct *)NULL;
47         pHelp->pPrev = (HelpStruct *)NULL;
48         pHelp->inUse = True;
49
50         n = 0;
51         XtSetArg(args[n], XmNtitle, 
52             ((char *)GETMESSAGE(2, 7, "Style Manager - Help"))); n++;
53         pHelp->dialog = DtCreateHelpDialog(style.shell, "helpDlg", 
54                                             args, n);
55
56         DtWsmRemoveWorkspaceFunctions(style.display, 
57                 XtWindow(XtParent(pHelp->dialog)));
58         XtAddCallback(pHelp->dialog, DtNhyperLinkCallback, 
59                       (XtCallbackProc)HelpHyperlinkCB, NULL);
60         XtAddCallback(pHelp->dialog, DtNcloseCallback, 
61                       (XtCallbackProc)HelpCloseCB, pHelpCache);
62         return pHelp->dialog;
63     }
64     else
65     {
66         for(pHelp = pHelpCache; 
67             pHelp != (HelpStruct *)NULL;
68             pHelp = pHelp->pNext)
69         {
70             if(pHelp->inUse == False)
71             {
72                 pHelp->inUse = True;
73                 return pHelp->dialog;
74             }
75         }
76         pHelp = (HelpStruct *) XtMalloc(sizeof(HelpStruct));
77         pHelpCache->pPrev = pHelp;
78         pHelp->pNext = pHelpCache;
79         pHelpCache = pHelp;
80         pHelp->pPrev = (HelpStruct *)NULL;
81         pHelp->inUse = True;
82
83         n=0;
84         XtSetArg(args[n], XmNtitle, 
85             ((char *)GETMESSAGE(2, 7, "Style Manager - Help"))); n++;
86         pHelp->dialog = DtCreateHelpDialog(style.shell, "helpDlg", 
87                                             args, n);
88         DtWsmRemoveWorkspaceFunctions(style.display, 
89                       XtWindow(XtParent(pHelp->dialog)));
90         XtAddCallback(pHelp->dialog, DtNhyperLinkCallback, 
91                       (XtCallbackProc)HelpHyperlinkCB, NULL);
92         XtAddCallback(pHelp->dialog, DtNcloseCallback, 
93                       (XtCallbackProc)HelpCloseCB, pHelpCache);
94         return pHelp->dialog;
95     }
96 }
97
98 void
99 DisplayHelp(
100         char *helpVolume,
101         char *locationId)
102 {
103     Widget helpDialog;
104     Arg args[10];
105     int n;
106
107     helpDialog = GetHelpDialog();
108
109     n = 0;
110     XtSetArg(args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
111     XtSetArg(args[n], DtNhelpVolume, helpVolume);       n++;
112     XtSetArg(args[n], DtNlocationId, locationId);       n++;
113     XtSetValues(helpDialog, args, n);
114
115     XtManageChild(helpDialog);
116     XtMapWidget(XtParent(helpDialog));
117 }
118
119 void
120 Help(
121         char *helpVolume,
122         char *locationId)
123 {
124     static  Widget helpDialog = NULL;
125     Arg args[10];
126     int n;
127
128     if(helpDialog == NULL)
129     {
130         n = 0;
131         XtSetArg(args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
132         XtSetArg(args[n], DtNhelpVolume, helpVolume);   n++;
133         XtSetArg(args[n], DtNlocationId, locationId);   n++;
134         XtSetArg (args[n], XmNtitle, 
135             ((char *)GETMESSAGE(2, 7, "Style Manager - Help"))); n++;
136         helpDialog = DtCreateHelpDialog(style.shell, "helpDlg", args, n);
137
138         DtWsmRemoveWorkspaceFunctions(style.display, 
139                       XtWindow(XtParent(helpDialog)));
140         XtAddCallback(helpDialog, DtNhyperLinkCallback, 
141                       (XtCallbackProc)HelpHyperlinkCB, NULL);
142         XtAddCallback(helpDialog, DtNcloseCallback, 
143                       (XtCallbackProc)HelpCloseCB, NULL);
144
145         XtManageChild(helpDialog);
146     }
147     else
148     {
149         n = 0;
150         XtSetArg(args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
151         XtSetArg(args[n], DtNhelpVolume, helpVolume);   n++;
152         XtSetArg(args[n], DtNlocationId, locationId);   n++;
153         XtSetValues(helpDialog, args, n);
154     }
155
156     XtMapWidget(XtParent(helpDialog));
157 }
158