123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- /*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
- /* $XConsortium: HelpAccess.c /main/6 1996/08/28 16:46:12 drk $ */
- /************************************<+>*************************************
- ****************************************************************************
- **
- ** File: HelpAccess.c
- **
- ** Project: Cache Creek (Rivers) Project
- **
- ** Description: This module handles all the help requests within a given
- ** help dialog widget.
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 Hewlett-Packard Company
- **
- ** (c) Copyright 1993, 1994 Hewlett-Packard Company
- ** (c) Copyright 1993, 1994 International Business Machines Corp.
- ** (c) Copyright 1993, 1994 Sun Microsystems, Inc.
- ** (c) Copyright 1993, 1994 Novell, Inc.
- **
- **
- **
- ****************************************************************************
- ************************************<+>*************************************/
- #include <stdio.h>
- #include <signal.h>
- #include <X11/Intrinsic.h>
- #include <X11/Shell.h>
- #include <Xm/RowColumnP.h>
- #include <Xm/LabelG.h>
- #include <Xm/PushBG.h>
- #include <Xm/CascadeB.h>
- #include <Xm/CascadeBG.h>
- /* Help Library Includes */
- #include "DisplayAreaI.h"
- #include "Access.h"
- #include "StringFuncsI.h"
- #include "HelpDialogI.h"
- #include "HelpDialogP.h"
- #include <Dt/Help.h>
- #include "HelpI.h"
- #include "HelposI.h"
- #include "HelpUtilI.h"
- #include "HelpQuickD.h"
- #include "HelpQuickDP.h"
- #include "HelpQuickDI.h"
- /******** Static Function Declarations ********/
- static void CloseOnHelpCB(
- Widget w,
- XtPointer client_data,
- XtPointer call_data);
- static void SetupHelpDialog(
- Widget parent,
- char *helpOnHelpVolume,
- Widget *helpWidget,
- char *locationId);
- /******** End Static Function Declarations ********/
- /*****************************************************************************
- * Function: static void CloseOnHelpCB(
- * Widget w,
- * XtPointer client_data,
- * XtPointer call_data);
- *
- * Parameters:
- *
- * Return Value:
- *
- * Purpose: This routine closes the onhelp dialog Widget that we
- * created for our help on help stuff.
- *
- ****************************************************************************/
- static void CloseOnHelpCB(
- Widget w,
- XtPointer client_data,
- XtPointer call_data )
- {
- XtUnmanageChild(w);
- }
- /****************************************************************************
- * Function: void _DtHelpCB ()
- *
- * Parameters: widget
- * clientData
- * callData
- *
- *
- * Return Value: Void.
- *
- * Purpose: Called when any "F1" key is pressed in a help dialog
- * widget, or a user selects any of the help buttons in
- * any of the help dialogs dialogs.
- *
- ***************************************************************************/
- void _DtHelpCB(
- Widget widget,
- XtPointer clientData,
- XtPointer callData)
- {
- char *errorStr;
-
- DtHelpListStruct * pHelpInfo = (DtHelpListStruct *) clientData;
- _DtHelpCommonHelpStuff * help = pHelpInfo->help;
- /* If helpOnHelp resource is set use it, else post an error dialog */
- if (help->helpOnHelpVolume != NULL)
- {
- SetupHelpDialog((Widget)pHelpInfo->widget, help->helpOnHelpVolume,
- &(help->onHelpDialog), pHelpInfo->locationId);
- }
- else
- {
- /* We have no help available for the help stuff so generate an error */
- /* Do NOT EVER provide a help button */
- /* ??? ERROR */
- errorStr = XtNewString(((char *) _DTGETMESSAGE(6, 4,
- "Help On Help not provided for this application!")));
- _DtHelpErrorDialog(XtParent(pHelpInfo->widget), errorStr);
- XtFree(errorStr);
- }
- }
- /*****************************************************************************
- * Function: void SetupHelpDialog ();
- *
- *
- * Parameters:
- *
- * Return Value: Void.
- *
- * Purpose: Creates or re-uses a help on help quick help widget.
- *
- *****************************************************************************/
- static void SetupHelpDialog(
- Widget parent,
- char *helpOnHelpVolume,
- Widget *helpDialog,
- char *locationId)
- {
- Arg args[10];
- int n;
- XmString printString;
- XmString closeString;
- XmString backString;
- XmString helpString;
- char *title;
- if (*helpDialog == NULL)
- {
- /* Create the QuickHelpDialog widget for help on help */
- title = XtNewString(((char *)_DTGETMESSAGE(6, 1, "Help On Help")));
- printString = XmStringCreateLocalized(((char *)_DTGETMESSAGE
- (6, 2,"Print ...")));
- closeString = XmStringCreateLocalized(((char *)_DTGETMESSAGE
- (6, 3,"Close")));
- backString = XmStringCreateLocalized(((char *)_DTGETMESSAGE
- (6, 5,"Backtrack")));
- helpString = XmStringCreateLocalized(((char *)_DTGETMESSAGE
- (6, 6,"Help ...")));
- n =0;
- XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
- XtSetArg (args[n], XmNtitle, title); n++;
- XtSetArg (args[n], DtNprintLabelString, printString); n++;
- XtSetArg (args[n], DtNcloseLabelString, closeString); n++;
- XtSetArg (args[n], DtNbackLabelString, backString); n++;
- XtSetArg (args[n], DtNhelpLabelString, helpString); n++;
- XtSetArg (args[n], DtNhelpVolume,helpOnHelpVolume); n++;
- XtSetArg (args[n], DtNlocationId, locationId); n++;
- *helpDialog = DtCreateHelpQuickDialog((Widget)parent,
- "onHelpDialog", args, n);
- XmStringFree(printString);
- XmStringFree(closeString);
- XmStringFree(backString);
- XmStringFree(helpString);
- XtFree((char*) title);
- /* Catch the close callback so we can destroy the widget */
- XtAddCallback(*helpDialog, DtNcloseCallback,
- CloseOnHelpCB, (XtPointer) NULL);
- /* Add the popup position callback to our history dialog */
- XtAddCallback (XtParent(*helpDialog), XmNpopupCallback,
- (XtCallbackProc)_DtHelpMapCB,
- (XtPointer)XtParent(parent));
-
- }
- else
- {
- n = 0;
- XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
- XtSetArg (args[n], DtNhelpVolume,helpOnHelpVolume); n++;
- XtSetArg (args[n], DtNlocationId, locationId); n++;
- XtSetValues(*helpDialog, args, n);
-
- }
- /* Display the dialog */
- XtManageChild(*helpDialog);
- XtMapWidget(XtParent((Widget)*helpDialog));
- }
- /*****************************************************************************
- * Function: void _DtHelpListFree (DtHelpListStruct * * pHead);
- *
- *
- * Parameters: pHead Specifies the head pointer to the help list.
- *
- * Return Value: Void.
- *
- * Purpose: Frees all elements in a Help List.
- *
- *****************************************************************************/
- void _DtHelpListFree(
- DtHelpListStruct * * pHead)
- {
- DtHelpListStruct *pTemp = NULL;
- DtHelpListStruct *pTmpHead = *pHead;
- while (pTmpHead != NULL)
- {
- /* Free up each element in the current node */
- pTemp = pTmpHead;
- pTmpHead = pTmpHead->pNext;
- pTemp->pNext = NULL;
-
- /* Free the id String */
- XtFree(pTemp->locationId);
-
- /* Now, free the whole node */
- XtFree((char *)pTemp);
- }
- *pHead = NULL; /* reset pointer */
- }
- /*****************************************************************************
- * Function: DtHelpListStruct * _DtHelpListAdd(
- * char *locationId,
- * Widget new,
- * DtHelpListStruct **pHead)
- *
- *
- *
- * Parameters:
- *
- * Return Value: Void.
- *
- * Purpose: Adds an element to the top of the given topicList.
- *
- *****************************************************************************/
- DtHelpListStruct * _DtHelpListAdd(
- char *locationId,
- Widget widget,
- _DtHelpCommonHelpStuff * help,
- DtHelpListStruct **pHead)
- {
- DtHelpListStruct *pTemp=NULL;
- /* Add locationId as first element if pHead = NULL */
- if (*pHead == NULL)
- {
- *pHead = (DtHelpListStruct *) XtMalloc((sizeof(DtHelpListStruct)));
-
- /* Assign the passed in values to our first element */
- (*pHead)->locationId = XtNewString(locationId);
- (*pHead)->widget = widget;
- (*pHead)->help = help;
- (*pHead)->pNext = NULL;
- (*pHead)->pPrevious = NULL;
-
- }
- else
- { /* We have a list so add the new Help item to the top */
- pTemp = (DtHelpListStruct *) XtMalloc((sizeof(DtHelpListStruct)));
-
- pTemp->pNext = (*pHead);
- pTemp->pPrevious = NULL;
- (*pHead)->pPrevious = pTemp;
- pTemp->locationId = XtNewString(locationId);
- pTemp->widget = widget;
- pTemp->help = help;
- /* Re-Assign our head pointer to point to the new head of the list */
- (*pHead) = pTemp;
- }
- return (*pHead);
- }
|