440 lines
11 KiB
C
440 lines
11 KiB
C
/*
|
|
* 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
|
|
*/
|
|
/*
|
|
*+SNOTICE
|
|
*
|
|
* $XConsortium: Help.C /main/7 1996/10/11 20:04:16 cde-hp $
|
|
*
|
|
* RESTRICTED CONFIDENTIAL INFORMATION:
|
|
*
|
|
* The information in this document is subject to special
|
|
* restrictions in a confidential disclosure agreement between
|
|
* HP, IBM, Sun, USL, SCO and Univel. Do not distribute this
|
|
* document outside HP, IBM, Sun, USL, SCO, or Univel without
|
|
* Sun's specific written approval. This document and all copies
|
|
* and derivative works thereof must be returned or destroyed at
|
|
* Sun's request.
|
|
*
|
|
* Copyright 1993 Sun Microsystems, Inc. All rights reserved.
|
|
*
|
|
*+ENOTICE
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <ctype.h>
|
|
#include <Xm/Xm.h>
|
|
#include <Dt/HelpDialog.h>
|
|
#include <Dt/HelpQuickD.h>
|
|
#include <Dt/Help.h>
|
|
#include <Dt/Editor.h>
|
|
#include "Help.hh"
|
|
|
|
#include <Dt/MsgCatP.h>
|
|
extern nl_catd catd;
|
|
|
|
void DisplayMain( Widget, char *, char *);
|
|
static Widget helpMain = NULL;
|
|
static Widget helpError = NULL;
|
|
static Widget versionMain = NULL;
|
|
|
|
Widget
|
|
getErrorHelpWidget(void)
|
|
{
|
|
return (helpError);
|
|
}
|
|
|
|
void
|
|
clearErrorHelpWidget(void)
|
|
{
|
|
helpError = NULL;
|
|
}
|
|
|
|
char *
|
|
getHelpId (Widget w)
|
|
{
|
|
char *helpId;
|
|
char *buf;
|
|
char *index;
|
|
int i = 0, j = 0;
|
|
|
|
if (XtParent(w) == NULL) {
|
|
helpId = (char *) malloc(1000);
|
|
index = helpId;
|
|
buf = XtName(w);
|
|
while(*buf) {
|
|
if (isalnum(*buf)) {
|
|
*index++ = toupper(*buf);
|
|
} else if ('_' == *buf) {
|
|
*index++ = '-';
|
|
}
|
|
buf++;
|
|
}
|
|
*index++ = '\0';
|
|
return (helpId);
|
|
} else {
|
|
helpId = getHelpId (XtParent(w));
|
|
i = strlen(helpId);
|
|
buf = XtName(w);
|
|
while(*buf) {
|
|
if (isalnum(*buf)) {
|
|
helpId[i++] = toupper(*buf);
|
|
} else if ('_' == *buf) {
|
|
helpId[i++] = '-';
|
|
}
|
|
buf++;
|
|
}
|
|
helpId[i++] = '\0';
|
|
return (helpId);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
void
|
|
DisplayVersion (
|
|
Widget parent,
|
|
char *helpVolume,
|
|
char *locationId )
|
|
{
|
|
Arg args[10];
|
|
int n;
|
|
Widget printWidget;
|
|
Widget helpWidget;
|
|
|
|
if (versionMain != NULL) {
|
|
n = 0;
|
|
XtSetArg (args[n], XmNtitle, CATGETS(catd, 1, 4,
|
|
"DtMail Version Dialog")); n++;
|
|
if (helpVolume != NULL) {
|
|
XtSetArg (args[n], DtNhelpVolume, helpVolume); n++;
|
|
}
|
|
XtSetArg (args[n], DtNlocationId, locationId); n++;
|
|
XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
|
|
XtSetValues(versionMain, args, n);
|
|
XtManageChild(versionMain);
|
|
} else {
|
|
while (!XtIsSubclass(parent, applicationShellWidgetClass))
|
|
parent = XtParent(parent);
|
|
|
|
// Build a new one in our cached list
|
|
n = 0;
|
|
XtSetArg (args[n], XmNtitle, CATGETS(catd, 1, 5,
|
|
"DtMail Version Dialog")); n++;
|
|
if (helpVolume != NULL) {
|
|
XtSetArg (args[n], DtNhelpVolume, helpVolume); n++;
|
|
}
|
|
XtSetArg (args[n], DtNlocationId, locationId); n++;
|
|
XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
|
|
versionMain = DtCreateQuickHelpDialog(parent, "versionWidget", args, n);
|
|
XtAddCallback(versionMain, XmNokCallback,
|
|
CloseMainCB, (XtPointer) versionMain);
|
|
|
|
// We do not want a print button for now so we unmap it
|
|
printWidget = DtHelpQuickDialogGetChild (versionMain,
|
|
DtHELP_QUICK_PRINT_BUTTON);
|
|
XtUnmanageChild (printWidget);
|
|
|
|
// We do not want a help button for now so we unmap it
|
|
|
|
helpWidget = DtHelpQuickDialogGetChild (versionMain,
|
|
DtHELP_QUICK_PRINT_BUTTON);
|
|
XtUnmanageChild (helpWidget);
|
|
XtManageChild(versionMain);
|
|
}
|
|
}
|
|
|
|
|
|
// Callback to process JUMP-NEW and APP-LINK hypertext requests in a
|
|
// given Help Dialog Window.
|
|
//
|
|
// This is the callback used for the DtNhyperLinkCallback
|
|
// on each of the help dialog widgets created.
|
|
|
|
static void
|
|
ProcessLinkCB (
|
|
Widget,
|
|
XtPointer,
|
|
XtPointer callData)
|
|
{
|
|
// Arg args[20];
|
|
// Position xPos, yPos;
|
|
int appLinkNum = 0;
|
|
|
|
DtHelpDialogCallbackStruct * hyperData =
|
|
(DtHelpDialogCallbackStruct *) callData;
|
|
|
|
}
|
|
|
|
|
|
void
|
|
DisplayMain(
|
|
Widget parent,
|
|
char *helpVolume,
|
|
char *locationId)
|
|
{
|
|
Arg args[10];
|
|
int n;
|
|
|
|
if (helpMain != NULL) {
|
|
n = 0;
|
|
#ifdef undef
|
|
XtSetArg (args[n], XmNtitle, CATGETS(catd, 1, 7, "DtMail Help")); n++;
|
|
#endif
|
|
XtSetArg (args[n], XmNtitle, CATGETS(catd, 1, 12, "Mailer : Help")); n++;
|
|
if (helpVolume != NULL) {
|
|
XtSetArg (args[n], DtNhelpVolume, helpVolume); n++;
|
|
}
|
|
XtSetArg (args[n], DtNlocationId, locationId); n++;
|
|
XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
|
|
XtSetValues (helpMain, args, n);
|
|
XtUnmanageChild(helpMain);
|
|
XtManageChild(helpMain);
|
|
} else {
|
|
while (!XtIsSubclass(parent, applicationShellWidgetClass))
|
|
parent = XtParent(parent);
|
|
|
|
// Build a new one in our cached list
|
|
n = 0;
|
|
XtSetArg (args[n], XmNtitle, CATGETS(catd, 1, 12, "Mailer : Help")); n++;
|
|
if (helpVolume != NULL) {
|
|
XtSetArg (args[n], DtNhelpVolume, helpVolume); n++;
|
|
}
|
|
XtSetArg (args[n], DtNlocationId, locationId); n++;
|
|
XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
|
|
helpMain = DtCreateHelpDialog(parent, "Mailer", args, n);
|
|
|
|
XtAddCallback(helpMain, DtNhyperLinkCallback, ProcessLinkCB, NULL);
|
|
XtAddCallback(
|
|
helpMain,
|
|
DtNcloseCallback, CloseMainCB, (XtPointer) helpMain);
|
|
|
|
XtManageChild(helpMain);
|
|
}
|
|
}
|
|
|
|
void
|
|
DisplayErrorHelp(
|
|
Widget parent,
|
|
char *helpVolume,
|
|
char *locationId)
|
|
{
|
|
Arg args[10];
|
|
int n;
|
|
|
|
if (helpError) {
|
|
n = 0;
|
|
#ifdef undef
|
|
XtSetArg (args[n], XmNtitle, CATGETS(catd, 1, 7, "DtMail Help")); n++;
|
|
#endif
|
|
XtSetArg (args[n], XmNtitle, CATGETS(catd, 1, 12, "Mailer : Help")); n++;
|
|
if (helpVolume != NULL) {
|
|
XtSetArg (args[n], DtNhelpVolume, helpVolume); n++;
|
|
}
|
|
XtSetArg (args[n], DtNlocationId, locationId); n++;
|
|
XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
|
|
//XtSetArg (args[n], DtNlocationId, "DTMAILVIEWMAINWINDOWWORK-AREA"); n++;
|
|
XtSetValues (helpError, args, n);
|
|
XtManageChild(helpError);
|
|
} else {
|
|
|
|
// Create a new help on the error dialogs each time, destroy it
|
|
// when done.
|
|
n = 0;
|
|
#ifdef undef
|
|
XtSetArg (args[n], XmNtitle, CATGETS(catd, 1, 8, "DtMail Help")); n++;
|
|
#endif
|
|
XtSetArg (args[n], XmNtitle, CATGETS(catd, 1, 12, "Mailer : Help")); n++;
|
|
if (helpVolume != NULL) {
|
|
XtSetArg (args[n], DtNhelpVolume, helpVolume); n++;
|
|
}
|
|
//XtSetArg (args[n], DtNlocationId, "DTMAILVIEWMAINWINDOWWORK-AREAPANEDWFORM2ROWCOLUMNPREVIOUS"); n++;
|
|
XtSetArg (args[n], DtNlocationId, locationId); n++;
|
|
XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
|
|
helpError = DtCreateHelpDialog(parent, "Mailer", args, n);
|
|
|
|
XtAddCallback(helpError, DtNhyperLinkCallback, ProcessLinkCB, NULL);
|
|
|
|
XtAddCallback(helpError, DtNcloseCallback,
|
|
CloseMainCB, (XtPointer) helpError);
|
|
|
|
XtUnmanageChild(helpError);
|
|
XtManageChild(helpError);
|
|
}
|
|
}
|
|
|
|
|
|
// The Help Callback for when the F1 key is pressed or when On Item
|
|
// Help is selected from the Help menu.
|
|
|
|
void
|
|
HelpCB (
|
|
Widget w,
|
|
XtPointer clientData,
|
|
XtPointer)
|
|
{
|
|
char *locationId = (char *) clientData;
|
|
|
|
// printf("locationId = %s\n", locationId);
|
|
// Just display the proper help based on the id string passed in.
|
|
|
|
// We pass in a NULL for our helpVolume and let the value defined
|
|
// in the app-defaults file be used.
|
|
|
|
DisplayMain (w, "Mailer", locationId);
|
|
}
|
|
|
|
void
|
|
HelpErrorCB (
|
|
Widget w,
|
|
XtPointer clientData,
|
|
XtPointer)
|
|
{
|
|
char *locationId = (char *) clientData;
|
|
|
|
// printf("locationId = %s\n", locationId);
|
|
// Just display the proper help based on the id string passed in.
|
|
|
|
// We pass in a NULL for our helpVolume and let the value defined
|
|
// in the app-defaults file be used.
|
|
|
|
DisplayErrorHelp (w, "Mailer", locationId);
|
|
}
|
|
|
|
void
|
|
HelpTexteditCB (
|
|
Widget w,
|
|
XtPointer clientData,
|
|
XtPointer callData )
|
|
{
|
|
|
|
char *locationId = NULL;
|
|
Widget wEditor = (Widget) clientData;
|
|
DtEditorHelpCallbackStruct *editorHelp =
|
|
(DtEditorHelpCallbackStruct *) callData;
|
|
|
|
switch (editorHelp->reason) {
|
|
|
|
/* -----> edit area */
|
|
case DtEDITOR_HELP_EDIT_WINDOW:
|
|
locationId = EDIT_AREA_HELP;
|
|
break;
|
|
|
|
/* -----> status line area and fields */
|
|
case DtEDITOR_HELP_STATUS_LINE:
|
|
locationId = STATUS_LINE_HELP;
|
|
break;
|
|
case DtEDITOR_HELP_STATUS_CURRENT_LINE:
|
|
locationId = STATUS_CURRENT_LINE_HELP;
|
|
break;
|
|
case DtEDITOR_HELP_STATUS_TOTAL_LINES:
|
|
locationId = STATUS_TOTAL_LINES_HELP;
|
|
break;
|
|
case DtEDITOR_HELP_STATUS_MESSAGE:
|
|
locationId = STATUS_MESSAGE_HELP;
|
|
break;
|
|
case DtEDITOR_HELP_STATUS_OVERSTRIKE:
|
|
locationId = STATUS_OVERSTRIKE_HELP;
|
|
|
|
/* -----> Format Settings dialog and dialog fields */
|
|
case DtEDITOR_HELP_FORMAT_DIALOG:
|
|
locationId = FORMAT_SETTINGS_HELP;
|
|
break;
|
|
case DtEDITOR_HELP_FORMAT_LEFT_MARGIN:
|
|
locationId = FORMAT_LEFT_MARGIN_HELP;
|
|
break;
|
|
case DtEDITOR_HELP_FORMAT_RIGHT_MARGIN:
|
|
locationId = FORMAT_RIGHT_MARGIN_HELP;
|
|
break;
|
|
case DtEDITOR_HELP_FORMAT_ALIGNMENT:
|
|
locationId = FORMAT_ALIGNMENT_HELP;
|
|
break;
|
|
|
|
/* -----> Find/Change dialog and dialog fields */
|
|
case DtEDITOR_HELP_CHANGE_DIALOG:
|
|
locationId = FINDCHANGE_HELP;
|
|
break;
|
|
case DtEDITOR_HELP_CHANGE_FIND:
|
|
locationId = FINDCHANGE_FIND_HELP;
|
|
break;
|
|
case DtEDITOR_HELP_CHANGE_CHANGE:
|
|
locationId = FINDCHANGE_CHANGETO_HELP;
|
|
break;
|
|
|
|
/* -----> Check Spelling dialog and dialog fields */
|
|
case DtEDITOR_HELP_SPELL_DIALOG:
|
|
locationId = SPELL_HELP;
|
|
break;
|
|
case DtEDITOR_HELP_SPELL_MISSPELLED_WORDS:
|
|
locationId = SPELL_MISSPELLED_WORDS_HELP;
|
|
break;
|
|
case DtEDITOR_HELP_SPELL_CHANGE:
|
|
locationId = SPELL_CHANGETO_HELP;
|
|
break;
|
|
|
|
default:
|
|
;
|
|
|
|
} /* switch (editorHelp->reason) */
|
|
|
|
DisplayMain (w, "Textedit", locationId);
|
|
}
|
|
|
|
|
|
// Callback to process close requests on our main help dialog.
|
|
|
|
static void
|
|
CloseMainCB (
|
|
Widget,
|
|
XtPointer clientData,
|
|
XtPointer)
|
|
{
|
|
Widget currentDialog = (Widget) clientData;
|
|
|
|
// Unmap and clean up help widget
|
|
|
|
XtUnmanageChild(currentDialog);
|
|
}
|
|
|
|
#if defined(PRINT_HELPIDS)
|
|
|
|
void
|
|
printHelpId (char *w_name, Widget w)
|
|
{
|
|
char *helpId;
|
|
|
|
helpId = getHelpId (w);
|
|
printf("%s = %s\n", w_name, helpId);
|
|
free(helpId);
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
void
|
|
printHelpId (char *, Widget)
|
|
{
|
|
}
|
|
|
|
#endif
|