cdesktopenv/cde/programs/dthelp/dthelpdemo/Main.c

1096 lines
30 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
*/
/* $TOG: Main.c /main/4 1998/08/05 11:46:03 mgreess $ */
/*************************************<+>*************************************
*****************************************************************************
**
** File: Main.c
**
** Project: CDE dthelpdemo sample program.
**
** Description: This file contains the demo source for the helpdemo
** application.
**
**
** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994
** Hewlett-Packard Company
** (c) Copyright 1993, 1994 International Business Machines Corp.
** (c) Copyright 1993, 1994 Sun Microsystems, Inc.
** (c) Copyright 1993, 1994 Unix System Labs, Inc., a subsidiary of
** Novell, Inc.
**
****************************************************************************
************************************<+>*************************************/
#include <stdlib.h>
#include <stdio.h>
#include <Xm/Xm.h>
#include <Xm/RowColumn.h>
#include <Xm/PushB.h>
#include <Xm/PushBG.h>
#include <Xm/CascadeB.h>
#include <Xm/CascadeBG.h>
#include <Xm/MainW.h>
#include <Xm/Frame.h>
#include <Xm/Form.h>
#include <Xm/Scale.h>
#include <Xm/ToggleBG.h>
#include <Xm/RowColumn.h>
#include <Xm/LabelG.h>
/* DtHelp include header file section */
#include <Dt/HelpQuickD.h>
/* Local header file include section */
#include "Main.h"
#include "HelpEntry.h"
#include "HelpCacheI.h"
#include "HourGlassI.h"
/* Internal Static Functions */
static Widget BuildMenus(Widget parent);
static void CreateMainWindow(Widget parent);
static void HelpMenuCB(
Widget widget,
XtPointer clientData,
XtPointer callData);
static void CloseCB (
Widget w,
XtPointer clientData,
XtPointer callData);
static void ManageButtonsCB(
Widget parent,
XtPointer clientData,
XtPointer callData);
static void Control1ButtonsCB(
Widget parent,
XtPointer clientData,
XtPointer callData);
static void HelpCB(
Widget widget,
XtPointer clientData,
XtPointer callData);
static void DisplayMoreCB (
Widget w,
XtPointer clientData,
XtPointer callData);
static void CloseAndDestroyCB (
Widget w,
XtPointer clientData,
XtPointer callData);
/* Global variables for the Main module */
char *appName;
Widget topLevel;
Widget mainShell;
Widget manWidget = NULL;
Widget quickWidget = NULL;
Widget createSampleWidgetBtn, destroySampleWidgetBtn;
Widget controlBtn1, controlBtn2, controlBtn3, controlBtn4;
Widget moreButton=NULL;
/* toggle button status flags */
Boolean addMoreButton=TRUE;
Boolean goBigger=TRUE;
Boolean changeTopic=TRUE;
char HelpdemoHelpVol[] = "helpdemo";
/************************************************************************
*
* helpdemo
* The main program for the helpdemo.
*
************************************************************************/
void main (
int argc,
char *argv[])
{
Display *appDisplay;
appName = strrchr(argv[0], '/');
if (appName != NULL)
appName++;
else
appName = argv[0];
/* Initialize toolkit and open the display */
topLevel = XtInitialize(appName, "Dthelpdemo", NULL, 0, &argc, argv);
appDisplay = XtDisplay(topLevel);
if (!appDisplay)
{
XtWarning ("Dialogs: Can't open display, exiting...");
exit (0);
}
/* Build up the Widget UI for the demo app */
CreateMainWindow(topLevel);
XtMainLoop();
}
/************************************************************************
* Function: CreateMainWindow
*
* This function creates a main window, calls the routine to build our
* menubar.
*
*************************************************************************/
static void CreateMainWindow(
Widget parent)
{
Widget main_window;
Widget menuBar;
Widget frame;
Widget form;
Widget manageFrame, manageForm, manageTitle, radioBox;
Widget control1Frame, control1Form, control1Title, controlBox1;
Widget control2Frame, control2Form, control2Title, controlBox2;
Arg args[10];
int n;
char name[15];
int len;
XmString labelString;
/* Create a Main Window Widget */
n = 0;
main_window = XmCreateMainWindow (parent, "mainwindow1", args, n);
XtManageChild (main_window);
/* Build the Menus via our BuildMenus function */
menuBar = BuildMenus(main_window);
/* Create Frame in the MainWindow */
n = 0;
XtSetArg (args[n], XmNmarginWidth, 2); n++;
XtSetArg (args[n], XmNmarginHeight, 2); n++;
XtSetArg (args[n], XmNshadowThickness, 1); n++;
XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
frame = XmCreateFrame (main_window, "frame", args, n);
XtManageChild (frame);
/* Create the form */
n = 0;
form = XmCreateForm(frame, "form", args, n);
XtManageChild(form);
/****** Create the Management section Frame ******/
n = 0;
XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNtopOffset, 5); n++;
XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNrightOffset, 5); n++;
XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNleftOffset, 5); n++;
XtSetArg (args[n], XmNmarginWidth, 5); n++;
XtSetArg (args[n], XmNmarginHeight, 2); n++;
XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
manageFrame = XmCreateFrame(form, "manageFrame", args, n);
XtManageChild (manageFrame);
manageForm = XmCreateForm (manageFrame,"manageForm", NULL, 0);
XtManageChild (manageForm);
XtAddCallback(manageForm, XmNhelpCallback,
HelpCB, CREATE_FRAME);
/* create the frame title */
labelString = XmStringCreateLocalized("Help Widget Management");
n = 0;
XtSetArg (args[n], XmNlabelString, labelString); n++;
XtSetArg (args[n], XmNchildType, XmFRAME_TITLE_CHILD); n++;
XtSetArg (args[n], XmNtraversalOn, False); n++;
manageTitle = XmCreateLabelGadget(manageFrame,"manageTitle",args,n);
XtManageChild (manageTitle);
XmStringFree (labelString);
/* Create the Radio Box widget to hold the toggle buttons */
n = 0;
XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
radioBox = XmCreateRadioBox(manageForm, "radioBox", args, n);
XtManageChild (radioBox);
/* Create the Create Widget button */
labelString = XmStringCreateLocalized("Create Sample Help Widget");
n = 0;
XtSetArg (args[n], XmNlabelString, labelString); n++;
createSampleWidgetBtn =
XmCreateToggleButtonGadget(radioBox,"createSampleWidgetBtn",args,n);
XtManageChild (createSampleWidgetBtn);
XmStringFree (labelString);
XtAddCallback(createSampleWidgetBtn, XmNarmCallback,
ManageButtonsCB, (XtPointer)CREATE_SAMPLE);
/* Create the Create Widget button */
labelString = XmStringCreateLocalized("Destroy Sample Help Widget");
n = 0;
XtSetArg (args[n], XmNlabelString, labelString); n++;
destroySampleWidgetBtn =
XmCreateToggleButtonGadget(radioBox,"destroySampleWidgetBtn",args,n);
XtManageChild (destroySampleWidgetBtn);
XmStringFree (labelString);
XtSetSensitive(destroySampleWidgetBtn, FALSE);
XtAddCallback(destroySampleWidgetBtn, XmNarmCallback,
ManageButtonsCB, (XtPointer)DESTROY_SAMPLE);
/****** Create the Control1 section Frame ******/
n = 0;
XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg (args[n], XmNtopWidget, manageFrame); n++;
XtSetArg (args[n], XmNtopOffset, 5); n++;
XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNrightOffset, 5); n++;
XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNleftOffset, 5); n++;
XtSetArg (args[n], XmNmarginWidth, 5); n++;
XtSetArg (args[n], XmNmarginHeight, 2); n++;
XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
control1Frame = XmCreateFrame(form, "control1Frame", args, n);
XtManageChild (control1Frame);
control1Form = XmCreateForm (control1Frame,"control1Form", NULL, 0);
XtManageChild (control1Form);
XtAddCallback(control1Form, XmNhelpCallback,
HelpCB, CONTROL1_FRAME);
/* create the frame title */
labelString = XmStringCreateLocalized("Controlling the Help Widgets");
n = 0;
XtSetArg (args[n], XmNlabelString, labelString); n++;
XtSetArg (args[n], XmNchildType, XmFRAME_TITLE_CHILD); n++;
XtSetArg (args[n], XmNtraversalOn, False); n++;
control1Title = XmCreateLabelGadget(control1Frame,"control1Title",args,n);
XtManageChild (control1Title);
XmStringFree (labelString);
/* Create the Radio Box widget to hold the toggle buttons */
n = 0;
XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
controlBox1 = XmCreateRowColumn(control1Form, "controlBox1", args, n);
XtManageChild (controlBox1);
/* Create the Create Widget button */
labelString = XmStringCreateLocalized("Change the Content");
n = 0;
XtSetArg (args[n], XmNlabelString, labelString); n++;
controlBtn1 =
XmCreateToggleButtonGadget(controlBox1,"controlBtn1",args,n);
XtManageChild (controlBtn1);
XmStringFree (labelString);
XtSetSensitive(controlBtn1, FALSE);
XtAddCallback(controlBtn1, XmNarmCallback,
Control1ButtonsCB, (XtPointer)CHANGE_CONTENT);
/* Change Size button*/
labelString = XmStringCreateLocalized("Change the Size");
n = 0;
XtSetArg (args[n], XmNlabelString, labelString); n++;
controlBtn2 =
XmCreateToggleButtonGadget(controlBox1,"controlBtn2",args,n);
XtManageChild (controlBtn2);
XmStringFree (labelString);
XtSetSensitive(controlBtn2, FALSE);
XtAddCallback(controlBtn2, XmNarmCallback,
Control1ButtonsCB, (XtPointer)CHANGE_SIZE);
/* Control the GUI*/
labelString = XmStringCreateLocalized("Control the User Interface");
n = 0;
XtSetArg (args[n], XmNlabelString, labelString); n++;
controlBtn3 =
XmCreateToggleButtonGadget(controlBox1,"controlBtn3",args,n);
XtManageChild (controlBtn3);
XmStringFree (labelString);
XtSetSensitive(controlBtn3, FALSE);
XtAddCallback(controlBtn3, XmNarmCallback,
Control1ButtonsCB, (XtPointer)CHANGE_GUI);
/****** Create the Control2 section Frame ******/
n = 0;
XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg (args[n], XmNtopWidget, control1Frame); n++;
XtSetArg (args[n], XmNtopOffset, 5); n++;
XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNrightOffset, 5); n++;
XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNleftOffset, 5); n++;
XtSetArg (args[n], XmNmarginWidth, 5); n++;
XtSetArg (args[n], XmNmarginHeight, 2); n++;
XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
control2Frame = XmCreateFrame(form, "control2Frame", args, n);
XtManageChild (control2Frame);
control2Form = XmCreateForm (control2Frame,"control2Form", NULL, 0);
XtManageChild (control2Form);
XtAddCallback(control2Form, XmNhelpCallback,
HelpCB, CONTROL2_FRAME);
/* create the frame title */
labelString =
XmStringCreateLocalized ("Controlling the Client Via Help Widgets");
n = 0;
XtSetArg (args[n], XmNlabelString, labelString); n++;
XtSetArg (args[n], XmNchildType, XmFRAME_TITLE_CHILD); n++;
XtSetArg (args[n], XmNtraversalOn, False); n++;
control2Title = XmCreateLabelGadget(control2Frame,"control2Title",args,n);
XtManageChild (control2Title);
XmStringFree (labelString);
/* Create the Radio Box widget to hold the toggle buttons */
n = 0;
XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
controlBox2 = XmCreateRowColumn(control2Form, "controlBox2", args, n);
XtManageChild (controlBox2);
/* Create the Create Widget button */
labelString = XmStringCreateLocalized("Client controled hypertext links");
n = 0;
XtSetArg (args[n], XmNlabelString, labelString); n++;
controlBtn4 =
XmCreatePushButtonGadget(controlBox2,"controlBtn4",args,n);
XtManageChild (controlBtn4);
XmStringFree (labelString);
XtAddCallback(controlBtn4, XmNarmCallback,
Control1ButtonsCB, (XtPointer)SHOW_APP_DEFINED_LINKS);
/* Set MainWindow areas */
XmMainWindowSetAreas (main_window, menuBar, NULL, NULL, NULL, frame);
/* Force a size to the form */
/*
n = 0;
XtSetArg(args[n], XmNwidth, 400); n++;
XtSetArg(args[n], XmNheight, 200); n++;
XtSetValues(form, args, n);
*/
XtRealizeWidget (parent);
} /* End CreateMainWindow */
/*********************************************************************
* Function: BuildMenus
*
* This procedure builds the menubar pulldows for our demo program
*
*********************************************************************/
static Widget BuildMenus(
Widget parent)
{
Widget menuBar;
Widget c[10];
Widget cascadeB2;
Widget menupane1, menupane2;
Widget fileBtn1;
Widget helpBtn1, helpBtn2, helpBtn3;
Arg args[10];
int n;
XmString accText;
XmString labelStr;
char * mnemonic;
menuBar = XmCreateMenuBar (parent, "menuBar", args, 0);
XtManageChild (menuBar);
/*******************************************************
* Menupane: Exit, and related buttons
*******************************************************/
n = 0;
XtSetArg(args[n], XmNmarginWidth, 0); ++n;
XtSetArg(args[n], XmNmarginHeight, 0); ++n;
menupane1 = XmCreatePulldownMenu(menuBar, "menupane1", args, n);
/* Exit button */
labelStr = XmStringCreateLocalized("Exit");
accText = XmStringCreateLocalized("<Ctrl>X");
mnemonic = "x";
n = 0;
XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>X"); n++;
XtSetArg(args[n], XmNlabelString, labelStr); n++;
XtSetArg(args[n], XmNacceleratorText ,accText); n++;
XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
c[0] = fileBtn1 =
XmCreatePushButtonGadget(menupane1,"fileBtn1", args, n);
XtAddCallback(fileBtn1, XmNactivateCallback, CloseCB,(XtPointer) NULL);
XmStringFree(accText);
XmStringFree(labelStr);
XtManageChildren(c, 1);
/*******************************************************
* Menupane: Help, and related buttons
*******************************************************/
n = 0;
XtSetArg(args[n], XmNmarginWidth, 0); ++n;
XtSetArg(args[n], XmNmarginHeight, 0); ++n;
menupane2 = XmCreatePulldownMenu(menuBar, "menupane2", args, n);
/* Item help button */
labelStr = XmStringCreateLocalized("On Item");
accText = XmStringCreateLocalized("<Ctrl>I");
mnemonic = "I";
n = 0;
XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>I"); n++;
XtSetArg(args[n], XmNlabelString, labelStr); n++;
XtSetArg(args[n], XmNacceleratorText ,accText); n++;
XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
c[0] = helpBtn1 = XmCreatePushButtonGadget(menupane2,"helpBtn1", args, n);
XtAddCallback(helpBtn1, XmNactivateCallback,
HelpMenuCB, (XtPointer)HELP_ON_ITEM);
XmStringFree(accText);
XmStringFree(labelStr);
/* On application button */
labelStr = XmStringCreateLocalized("On Application");
accText = XmStringCreateLocalized("<Ctrl>A");
mnemonic = "A";
n = 0;
XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>A"); n++;
XtSetArg(args[n], XmNlabelString, labelStr); n++;
XtSetArg(args[n], XmNacceleratorText ,accText); n++;
XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
c[1] = helpBtn2 = XmCreatePushButtonGadget(menupane2,
"helpBtn2", args, n);
XmStringFree(accText);
XmStringFree(labelStr);
XtAddCallback(helpBtn2, XmNactivateCallback,
HelpMenuCB, (XtPointer)HELP_ON_TOPIC);
/* On Version button */
labelStr = XmStringCreateLocalized("On Version");
accText = XmStringCreateLocalized("<Ctrl>V");
mnemonic = "V";
n = 0;
XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>V"); n++;
XtSetArg(args[n], XmNlabelString, labelStr); n++;
XtSetArg(args[n], XmNacceleratorText ,accText); n++;
XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
c[2] = helpBtn3 = XmCreatePushButtonGadget(menupane2,
"helpBtn3",args, n);
XtAddCallback(helpBtn3, XmNactivateCallback,
HelpMenuCB, (XtPointer)HELP_ON_VERSION);
XmStringFree(accText);
XmStringFree(labelStr);
XtManageChildren(c, 3);
/* Create Cascade buttons for menubar */
labelStr = XmStringCreateLocalized("File");
mnemonic = "F";
n = 0;
XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
XtSetArg(args[n], XmNsubMenuId, menupane1); n++;
XtSetArg(args[n], XmNlabelString, labelStr); n++;
c[0] = XmCreateCascadeButton(menuBar,"cascadeB1",args, n);
XmStringFree(labelStr);
labelStr = XmStringCreateLocalized("Help");
mnemonic = "H";
n = 0;
XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
XtSetArg(args[n], XmNsubMenuId, menupane2); n++;
XtSetArg(args[n], XmNlabelString, labelStr); n++;
c[1] = cascadeB2 = XmCreateCascadeButton(menuBar, "cascadeB2",
args, n);
XmStringFree(labelStr);
XtManageChildren(c, 2);
/* Attaches the Help menupane to the right side */
n = 0;
XtSetArg (args[n], XmNmenuHelpWidget, cascadeB2); n++;
XtSetValues (menuBar, args, n);
return(menuBar);
} /* End BuildMenus */
/*********************************************************************
* Function: ManageButtonsCallback
*
* Description:
*
*********************************************************************/
static void ManageButtonsCB(
Widget parent,
XtPointer clientData,
XtPointer callData)
{
int n;
Arg args[10];
Widget helpWidget, printWidget;
TurnOnHourGlass(topLevel);
switch ((long)clientData)
{
case CREATE_SAMPLE:
XtSetSensitive(destroySampleWidgetBtn, TRUE);
XtSetSensitive(createSampleWidgetBtn, FALSE);
XtSetSensitive(controlBtn1, TRUE);
XtSetSensitive(controlBtn2, TRUE);
XtSetSensitive(controlBtn3, TRUE);
/* Set the state of our toggle buttons */
XmToggleButtonSetState(destroySampleWidgetBtn, FALSE, FALSE);
if (quickWidget==NULL)
{
Widget dp = parent;
while (!XtIsSubclass(dp, applicationShellWidgetClass))
dp = XtParent(dp);
n =0;
XtSetArg (args[n], XmNtitle, "Quick Dialog Sample"); n++;
XtSetArg (args[n], DtNhelpVolume,HelpdemoHelpVol); n++;
XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
XtSetArg (args[n], DtNlocationId, APP_MENU_ID); n++;
quickWidget = DtCreateHelpQuickDialog(dp,"quickWidget",args, n);
XtAddCallback(quickWidget, DtNcloseCallback,
CloseAndDestroyCB, (XtPointer)NULL);
/* Add the popup position callback to our main help dialog */
XtAddCallback (XtParent(quickWidget), XmNpopupCallback,
(XtCallbackProc)HelpMapCB,
(XtPointer)dp);
/* Add our hypertext callback here */
XtAddCallback(quickWidget, DtNhyperLinkCallback,
ProcessLinkCB, NULL);
/* We do not want a print button for now so we unmap it */
printWidget = DtHelpQuickDialogGetChild (quickWidget,
DtHELP_QUICK_PRINT_BUTTON);
XtUnmanageChild (printWidget);
/* We do not want a help button for now so we unmap it */
helpWidget = DtHelpQuickDialogGetChild (quickWidget,
DtHELP_QUICK_HELP_BUTTON);
XtUnmanageChild (helpWidget);
XtManageChild(quickWidget);
}
break;
case DESTROY_SAMPLE:
XtSetSensitive(destroySampleWidgetBtn, FALSE);
XtSetSensitive(createSampleWidgetBtn, TRUE);
XtSetSensitive(controlBtn1, FALSE);
XtSetSensitive(controlBtn2, FALSE);
XtSetSensitive(controlBtn3, FALSE);
/* Set the state of our toggle buttons */
XmToggleButtonSetState(createSampleWidgetBtn, FALSE, FALSE);
XmToggleButtonSetState(controlBtn1, FALSE, FALSE);
XmToggleButtonSetState(controlBtn2, FALSE, FALSE);
XmToggleButtonSetState(controlBtn3, FALSE, FALSE);
/* Reinitialize our toggle button state flags */
addMoreButton=TRUE;
goBigger=TRUE;
changeTopic=TRUE;
if (quickWidget != NULL)
XtDestroyWidget(quickWidget);
quickWidget = NULL;
moreButton = NULL;
break;
default:
break;
} /* End of switch statement */
TurnOffHourGlass(topLevel);
}
/*********************************************************************
* Function: ManageButtonsCallback
*
* Description:
*
*********************************************************************/
static void Control1ButtonsCB(
Widget parent,
XtPointer clientData,
XtPointer callData)
{
int n;
Arg args[10];
static Dimension columns=0;
static Dimension rows=0;
TurnOnHourGlass(topLevel);
switch ((long)clientData)
{
case CHANGE_CONTENT:
/* Show a man page */
if (changeTopic)
{
n =0;
XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
XtSetArg (args[n], DtNlocationId, CREATE_FRAME); n++;
XtSetValues(quickWidget, args, n);
changeTopic = FALSE;
}
else
{
/* Show Topic */
n = 0;
XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC); n++;
XtSetArg (args[n], DtNlocationId, APP_MENU_ID); n++;
XtSetValues(quickWidget, args, n);
changeTopic = TRUE;
}
break;
case CHANGE_GUI:
if (moreButton == NULL)
{
/* Get the more buttion child */
moreButton = DtHelpQuickDialogGetChild(quickWidget,
DtHELP_QUICK_MORE_BUTTON);
XtAddCallback(moreButton, XmNactivateCallback,
DisplayMoreCB, (XtPointer)NULL);
}
if (addMoreButton)
{
/* manage the child */
XtManageChild(moreButton);
addMoreButton = FALSE;
}
else
{
/* unmanage more button */
XtUnmanageChild(moreButton);
addMoreButton = TRUE;
}
break;
case CHANGE_SIZE:
if (rows == 0)
{
/* Get the current dialog size */
n =0;
XtSetArg (args[n], DtNcolumns, &columns); n++;
XtSetArg (args[n], DtNrows, &rows); n++;
XtGetValues(quickWidget, args, n);
}
if (goBigger)
{
n =0;
XtSetArg (args[n], DtNcolumns, columns+5); n++;
XtSetArg (args[n], DtNrows, rows+5); n++;
XtSetValues(quickWidget, args, n);
goBigger = FALSE;
}
else
{
/* Go smaller */
n =0;
XtSetArg (args[n], DtNcolumns, columns); n++;
XtSetArg (args[n], DtNrows, rows); n++;
XtSetValues(quickWidget, args, n);
goBigger = TRUE;
}
break;
case SHOW_APP_DEFINED_LINKS:
/* display the general dialog w/more help in it */
DisplayMain (parent, HelpdemoHelpVol, CONTROL2_FRAME);
break;
default:
break;
} /* End of switch statement */
TurnOffHourGlass(topLevel);
}
/*********************************************************************
* Function: HelpMenuCB
*
* Description: This is the callback that is called when the user selects
* any of the help menu items.
*
*********************************************************************/
static void HelpMenuCB(
Widget widget,
XtPointer clientData,
XtPointer callData)
{
Widget selWidget=NULL;
String name;
Arg argList[10];
Cardinal argCount;
int n;
int status=DtHELP_SELECT_ERROR;
TurnOnHourGlass(topLevel);
/* Determine which help button was activated and display the
* appropriate help information */
switch ((long)clientData)
{
case HELP_ON_ITEM:
while (!XtIsSubclass(widget, applicationShellWidgetClass))
widget = XtParent(widget);
status = DtHelpReturnSelectedWidgetId(widget, 0, &selWidget);
switch ((int)status)
{
case DtHELP_SELECT_ERROR:
printf("Selection Error, cannot continue\n");
break;
case DtHELP_SELECT_VALID:
while (selWidget != NULL)
{
if ((XtHasCallbacks(selWidget, XmNhelpCallback)
== XtCallbackHasSome))
{
XtCallCallbacks((Widget)selWidget,
XmNhelpCallback,NULL);
break;
}
else
selWidget = XtParent(selWidget);
}
break;
case DtHELP_SELECT_ABORT:
printf("Selection Aborted by user.\n");
break;
case DtHELP_SELECT_INVALID:
printf("You must select a component within your app.\n");
break;
}
break;
case HELP_ON_TOPIC:
DisplayMain (widget, HelpdemoHelpVol, APP_MENU_ID);
break;
case HELP_ON_VERSION:
DisplayVersion (widget, HelpdemoHelpVol, VER_MENU_ID);
break;
default:
break;
} /* End of switch statement */
TurnOffHourGlass(topLevel);
}
/*********************************************************************
* Function: HelpCB
*
* Description: This is the callback that is called when the user selects
* item help or F1 key help
*
*********************************************************************/
static void HelpCB(
Widget widget,
XtPointer clientData,
XtPointer callData)
{
char * locationId = (char *) clientData;
/* Just display the proper help based on the id string passed in */
/* We pass in a NULL for our helpVolume because and let the value
* defined in the app-defaults file be used.
*/
DisplayMain (widget, HelpdemoHelpVol, locationId);
}
/*********************************************************************
* Function: CloseCB
*
* Description: This is the callback that is called when the user selects
* the Exit menu button.
*
*********************************************************************/
static void CloseCB (
Widget w,
XtPointer clientData,
XtPointer callData)
{
/* Now we go away */
exit(0);
}
/*********************************************************************
* Function: DisplayMoreCB
*
* Description: Handles the selection of the more button added to the
* sample quick help dialog widget. It causes a
* general help dialog to be posted w/more informaion in it.
*
*********************************************************************/
static void DisplayMoreCB (
Widget w,
XtPointer clientData,
XtPointer callData)
{
/* display the general dialog w/more help in it */
DisplayMain (w, HelpdemoHelpVol, MORE_BTN_ID);
}
/*********************************************************************
* Function: CloseAndDestroyCB
*
* Description: Closes and destroys our sample quick help dialog widget.
*
*********************************************************************/
static void CloseAndDestroyCB (
Widget w,
XtPointer clientData,
XtPointer callData)
{
/* Close and destroy the our quick dialog test widget */
XtUnmanageChild (quickWidget);
XtDestroyWidget(quickWidget);
/* reinitialize our global sample widget, and associated moreButton */
quickWidget = NULL;
moreButton=NULL;
addMoreButton=TRUE;
XtSetSensitive(destroySampleWidgetBtn, FALSE);
XtSetSensitive(createSampleWidgetBtn, TRUE);
XtSetSensitive(controlBtn1, FALSE);
XtSetSensitive(controlBtn2, FALSE);
XtSetSensitive(controlBtn3, FALSE);
/* Set the state of our toggle buttons */
XmToggleButtonSetState(createSampleWidgetBtn, FALSE, FALSE);
XmToggleButtonSetState(controlBtn1, FALSE, FALSE);
XmToggleButtonSetState(controlBtn2, FALSE, FALSE);
XmToggleButtonSetState(controlBtn3, FALSE, FALSE);
/* Reinitialize our toggle button state flags */
addMoreButton=TRUE;
goBigger=TRUE;
changeTopic=TRUE;
}