2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
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)
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
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
23 /* $XConsortium: HelpP.c /main/4 1995/11/02 14:40:13 rswiston $ */
24 /************************************<+>*************************************
25 ****************************************************************************
29 * COMPONENT_NAME: Desktop File Manager (dtfile)
31 * Description: Processing functions for the help dialog.
33 * FUNCTIONS: DTHelpClose
43 * (c) Copyright 1993, 1994, 1995 Hewlett-Packard Company
44 * (c) Copyright 1993, 1994, 1995 International Business Machines Corp.
45 * (c) Copyright 1993, 1994, 1995 Sun Microsystems, Inc.
46 * (c) Copyright 1993, 1994, 1995 Novell, Inc.
48 ****************************************************************************
49 ************************************<+>*************************************/
51 #include <sys/types.h>
59 #include <Dt/Connect.h>
60 #include <Dt/HourGlass.h>
62 #include "SharedProcs.h"
64 #include <Dt/HelpDialog.h>
72 /******** Static Function Declarations ********/
74 static void MainWindowHelpClose(
75 XtPointer client_data,
76 DialogData *old_dialog_data,
77 DialogData *new_dialog_data) ;
78 static void MainWinHyperLink(
82 static void TrashHelpClose(
83 XtPointer client_data,
84 DialogData *old_dialog_data,
85 DialogData *new_dialog_data) ;
86 static void TrashHyperLink(
90 static void DTHelpClose(
91 XtPointer client_data,
92 DialogData *old_dialog_data,
93 DialogData *new_dialog_data) ;
94 static void DTHyperLink(
99 /******** End Static Function Declarations ********/
103 /************************************************************************
106 * Used to display a primary or a hyperlink help dialog
108 ************************************************************************/
113 XtPointer topLevelRec,
115 DialogData *dialogData,
128 DialogData * fmDialogData;
129 FileMgrData * fileMgrData;
134 * DialogData is not NULL, if doing a restore session */
135 if (dialogData == NULL)
137 /* We are not restoring a session, so get the default values */
138 dialogData = _DtGetDefaultDialogData(help_dialog);
140 /* Add to the array of visible help annotation dialogs for this view */
141 fmDialogData = _DtGetInstanceData(topLevelRec);
142 fileMgrData = (FileMgrData *) fmDialogData->data;
144 if (dialogType == MAIN_HELP_DIALOG)
146 fileMgrData->primaryHelpDialog = dialogData;
150 /* Hyperlink help window */
151 _DtAddOneSubdialog (dialogData,
152 &fileMgrData->secondaryHelpDialogList,
153 &fileMgrData->secondaryHelpDialogCount);
156 helpData = (HelpData *)dialogData->data;
157 helpData->idString = XtNewString(idString);
158 helpData->volString = XtNewString(volString);
159 helpData->topicTitle = XtNewString(topicTitle);
160 helpData->fileType = XtNewString(fileType);
161 helpData->helpType = helpType;
164 _DtShowDialog(parentShell, NULL, topLevelRec, dialogData,
165 NULL, NULL, MainWindowHelpClose, topLevelRec, NULL, False,
168 /* lets set the title appropriately */
169 fmDialogData = _DtGetInstanceData(topLevelRec);
170 fileMgrData = (FileMgrData *) fmDialogData->data;
171 helpData = (HelpData *)dialogData->data;
172 if(fileMgrData->title == NULL || fileMgrData->helpVol == NULL ||
173 strcmp(fileMgrData->helpVol, DTFILE_HELP_NAME) == 0 ||
174 strcmp(helpData->volString, "Help4Help") == 0)
176 if(fileMgrData->title)
178 tmpStr = GETMESSAGE(29,2, "%s Help");
179 helpName = (char *)XtMalloc(strlen(fileMgrData->title) +
181 sprintf(helpName, tmpStr, fileMgrData->title);
182 XtSetArg(args[0], XmNtitle, helpName);
186 XtSetArg(args[0], XmNtitle, (GETMESSAGE(29,1, "File Manager Help")));
192 tmpStr = GETMESSAGE(29,2, "%s Help");
193 helpName = (char *)XtMalloc(strlen(fileMgrData->title) +
195 sprintf(helpName, tmpStr, fileMgrData->title);
196 XtSetArg(args[0], XmNtitle, helpName);
198 helpRec = (HelpRec *)_DtGetDialogInstance(dialogData);
199 XtSetValues(XtParent(helpRec->helpDialog), args, 1);
203 /* Add hyperlink callback */
204 XtRemoveAllCallbacks(helpRec->helpDialog, DtNhyperLinkCallback);
205 XtAddCallback(helpRec->helpDialog, DtNhyperLinkCallback,
206 MainWinHyperLink, topLevelRec);
212 /************************************************************************
214 * MainWindowHelpClose
215 * Callback function invoked from the help dialog's close button.
217 ************************************************************************/
221 XtPointer client_data,
222 DialogData *old_dialog_data,
223 DialogData *new_dialog_data )
226 FileMgrRec * fileMgrRec = (FileMgrRec *) client_data;
227 FileMgrData * fileMgrData;
228 DialogData * dialog_data;
232 dialog_data = _DtGetInstanceData((XtPointer)fileMgrRec);
233 fileMgrData = (FileMgrData *)dialog_data->data;
235 /* Remove the dialog data from the top level window's list */
236 if (old_dialog_data == fileMgrData->primaryHelpDialog)
238 fileMgrData->primaryHelpDialog = NULL;
242 _DtHideOneSubdialog( old_dialog_data,
243 &fileMgrData->secondaryHelpDialogList,
244 &fileMgrData->secondaryHelpDialogCount);
247 _DtHideDialog(old_dialog_data, False);
248 _DtFreeDialogData(old_dialog_data);
249 _DtFreeDialogData(new_dialog_data);
254 /************************************************************************
257 * Callback function responsible for handling a hyperlink help
258 * request for a help window associated with a main window view.
260 ************************************************************************/
265 XtPointer clientData,
269 FileMgrRec * fileMgrRec = (FileMgrRec *)clientData;
270 DtHelpDialogCallbackStruct * hyperData;
272 hyperData = (DtHelpDialogCallbackStruct *)callData;
273 if (hyperData->hyperType == DtHELP_LINK_JUMP_NEW)
275 ShowHelpDialog(fileMgrRec->shell, (XtPointer)fileMgrRec,
277 NULL, hyperData->locationId,
278 hyperData->helpVolume, NULL, NULL, DtHELP_TYPE_TOPIC);
283 /************************************************************************
285 * ShowTrashHelpDialog
286 * Used to display a primary or a hyperlink help dialog for trash
289 ************************************************************************/
295 DialogData *dialogData,
305 /* Get the default values */
306 dialogData = _DtGetDefaultDialogData(help_dialog);
308 if (dialogType == MAIN_HELP_DIALOG)
310 primaryTrashHelpDialog = dialogData;
314 /* Hyperlink help window */
315 _DtAddOneSubdialog (dialogData,
316 &secondaryTrashHelpDialogList,
317 &secondaryTrashHelpDialogCount);
320 helpData = (HelpData *)dialogData->data;
321 helpData->idString = XtNewString(idString);
322 helpData->volString = XtNewString(volString);
323 helpData->helpType = DtHELP_TYPE_TOPIC;
325 _DtShowDialog(parentShell, NULL, NULL, dialogData, NULL, NULL, TrashHelpClose,
326 NULL, NULL, False, False, NULL, NULL);
328 /* lets set the title appropriately */
329 XtSetArg(args[0], XmNtitle, (GETMESSAGE(29,9, "Trash Can Help")));
330 helpRec = (HelpRec *)_DtGetDialogInstance(dialogData);
331 XtSetValues(XtParent(helpRec->helpDialog), args, 1);
333 /* Add hyperlink callback */
334 helpRec = (HelpRec *)_DtGetDialogInstance(dialogData);
335 XtRemoveAllCallbacks(helpRec->helpDialog, DtNhyperLinkCallback);
336 XtAddCallback(helpRec->helpDialog, DtNhyperLinkCallback,
337 TrashHyperLink, NULL);
343 /************************************************************************
346 * Callback function invoked from the help dialog's close button,
347 * for the Trash help dialogs.
349 ************************************************************************/
353 XtPointer client_data,
354 DialogData *old_dialog_data,
355 DialogData *new_dialog_data )
361 /* Remove the dialog data from the trash window's list */
362 if (old_dialog_data == primaryTrashHelpDialog)
364 primaryTrashHelpDialog = NULL;
368 _DtHideOneSubdialog( old_dialog_data,
369 &secondaryTrashHelpDialogList,
370 &secondaryTrashHelpDialogCount);
373 _DtHideDialog(old_dialog_data, False);
374 _DtFreeDialogData(old_dialog_data);
375 _DtFreeDialogData(new_dialog_data);
380 /************************************************************************
383 * Callback function responsible for handling a hyperlink help
384 * request for a help window associated with the trash window.
386 ************************************************************************/
391 XtPointer clientData,
395 DtHelpDialogCallbackStruct * hyperData;
397 hyperData = (DtHelpDialogCallbackStruct *)callData;
398 if (hyperData->hyperType == DtHELP_LINK_JUMP_NEW)
400 ShowTrashHelpDialog(trashShell, HYPER_HELP_DIALOG, NULL,
401 hyperData->locationId, hyperData->helpVolume);
406 /************************************************************************
409 * Used to display a primary or a hyperlink help dialog
411 ************************************************************************/
418 DialogData *dialogData,
432 * DialogData is not NULL, if doing a restore session */
433 if (dialogData == NULL)
435 /* We are not restoring a session, so get the default values */
436 dialogData = _DtGetDefaultDialogData(help_dialog);
438 /* Add to the array of visible help annotation dialogs for this view */
439 if (dialogType == MAIN_HELP_DIALOG)
441 desktop_data->workspaceData[workspaceNum]->primaryHelpDialog =
446 WorkspaceRec * wsInfo;
448 /* Hyperlink help window */
449 wsInfo = desktop_data->workspaceData[workspaceNum];
450 _DtAddOneSubdialog (dialogData,
451 &wsInfo->secondaryHelpDialogList,
452 &wsInfo->secondaryHelpDialogCount);
455 helpData = (HelpData *)dialogData->data;
456 helpData->idString = XtNewString(idString);
457 helpData->volString = XtNewString(volString);
458 helpData->topicTitle = XtNewString(topicTitle);
459 helpData->fileType = XtNewString(fileType);
460 helpData->helpType = helpType;
463 _DtShowDialog(parentShell, NULL, NULL, dialogData, NULL, NULL,
464 DTHelpClose, (XtPointer)workspaceNum,
465 desktop_data->workspaceData[workspaceNum]->name,
466 False, False, NULL, NULL);
468 /* lets set the title appropriately */
469 XtSetArg(args[0], XmNtitle, (GETMESSAGE(29,1, "File Manager Help")));
470 helpRec = (HelpRec *)_DtGetDialogInstance(dialogData);
471 XtSetValues(XtParent(helpRec->helpDialog), args, 1);
473 /* Add hyperlink callback */
474 helpRec = (HelpRec *)_DtGetDialogInstance(dialogData);
475 XtRemoveAllCallbacks(helpRec->helpDialog, DtNhyperLinkCallback);
476 XtAddCallback(helpRec->helpDialog, DtNhyperLinkCallback,
477 DTHyperLink, (XtPointer)workspaceNum);
483 /************************************************************************
486 * Callback function invoked from the help dialog's close button.
488 ************************************************************************/
492 XtPointer client_data,
493 DialogData *old_dialog_data,
494 DialogData *new_dialog_data )
497 int workspaceNum = (int) client_data;
500 WorkspaceRec * wsInfo;
502 wsInfo = desktop_data->workspaceData[workspaceNum];
504 /* Remove the dialog data from the top level window's list */
505 if (old_dialog_data == wsInfo->primaryHelpDialog)
507 wsInfo->primaryHelpDialog = NULL;
511 _DtHideOneSubdialog( old_dialog_data,
512 &wsInfo->secondaryHelpDialogList,
513 &wsInfo->secondaryHelpDialogCount);
516 _DtHideDialog(old_dialog_data, False);
517 _DtFreeDialogData(old_dialog_data);
518 _DtFreeDialogData(new_dialog_data);
523 /************************************************************************
526 * Callback function responsible for handling a hyperlink help
527 * request for a help window associated with a main window view.
529 ************************************************************************/
534 XtPointer clientData,
538 int workspaceNum = (int) clientData;
539 DtHelpDialogCallbackStruct * hyperData;
541 hyperData = (DtHelpDialogCallbackStruct *)callData;
542 if (hyperData->hyperType == DtHELP_LINK_JUMP_NEW)
544 ShowDTHelpDialog(NULL, workspaceNum, HYPER_HELP_DIALOG,
545 NULL, hyperData->locationId,
546 hyperData->helpVolume, NULL, NULL, DtHELP_TYPE_TOPIC);