Convert uses of XKeycodeToKeysym (deprecated) to XkbKeycodeToKeysym
[oweals/cde.git] / cde / programs / dthelp / dthelpdemo / Main.c
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
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)
10  * any later version.
11  *
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
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these libraries and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $TOG: Main.c /main/4 1998/08/05 11:46:03 mgreess $ */
24 /*************************************<+>*************************************
25  *****************************************************************************
26  **
27  **  File:         Main.c
28  **
29  **  Project:      CDE dthelpdemo sample program.
30  **
31  **  Description:  This file contains the demo source for the helpdemo 
32  **                application.
33  **          
34  **
35  **  (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994
36  **      Hewlett-Packard Company
37  **  (c) Copyright 1993, 1994 International Business Machines Corp.
38  **  (c) Copyright 1993, 1994 Sun Microsystems, Inc.
39  **  (c) Copyright 1993, 1994 Unix System Labs, Inc., a subsidiary of
40  **      Novell, Inc.
41  **
42  ****************************************************************************
43  ************************************<+>*************************************/
44
45 #include <stdlib.h>
46 #include <stdio.h>
47
48 #include <Xm/Xm.h>
49 #include <Xm/RowColumn.h>
50 #include <Xm/PushB.h>
51 #include <Xm/PushBG.h>
52 #include <Xm/CascadeB.h>
53 #include <Xm/CascadeBG.h>
54 #include <Xm/MainW.h>
55 #include <Xm/Frame.h>
56 #include <Xm/Form.h>
57 #include <Xm/Scale.h>
58 #include <Xm/ToggleBG.h>
59 #include <Xm/RowColumn.h>
60 #include <Xm/LabelG.h>
61
62 /* DtHelp include header file section */
63 #include <Dt/HelpQuickD.h>
64
65 /* Local header file include section */
66 #include "Main.h"
67 #include "HelpEntry.h"
68 #include "HelpCacheI.h"
69 #include "HourGlassI.h"
70
71 /*  Internal Static Functions  */
72 static Widget BuildMenus(Widget parent);
73 static void CreateMainWindow(Widget parent);
74 static void HelpMenuCB(
75     Widget  widget,
76     XtPointer clientData,
77     XtPointer callData);
78 static void CloseCB (
79     Widget      w,
80     XtPointer   clientData,
81     XtPointer   callData);
82 static void ManageButtonsCB(
83     Widget  parent,
84     XtPointer clientData,
85     XtPointer callData);
86 static void Control1ButtonsCB(
87     Widget  parent,
88     XtPointer clientData,
89     XtPointer callData);
90 static void HelpCB(
91     Widget  widget,
92     XtPointer clientData,
93     XtPointer callData);
94 static void DisplayMoreCB (
95     Widget      w,
96     XtPointer   clientData,
97     XtPointer   callData);
98 static void CloseAndDestroyCB (
99     Widget      w,
100     XtPointer   clientData,
101     XtPointer   callData);
102
103
104
105
106 /* Global variables for the Main module */
107 char   *appName;
108 Widget topLevel;
109 Widget mainShell;
110 Widget manWidget = NULL;
111 Widget quickWidget = NULL;
112
113 Widget createSampleWidgetBtn, destroySampleWidgetBtn;
114 Widget controlBtn1, controlBtn2, controlBtn3, controlBtn4;
115 Widget moreButton=NULL;
116
117
118 /* toggle button status flags */
119 Boolean    addMoreButton=TRUE;
120 Boolean    goBigger=TRUE;
121 Boolean    changeTopic=TRUE;
122
123
124 char HelpdemoHelpVol[] = "helpdemo";
125
126 /************************************************************************
127  *
128  *  helpdemo
129  *      The main program for the helpdemo.
130  *
131  ************************************************************************/
132 void main (
133     int argc,
134     char *argv[])
135 {
136  
137    Display  *appDisplay;
138    
139    appName = strrchr(argv[0], '/');
140    if (appName != NULL)
141      appName++;
142    else
143      appName = argv[0];
144    
145    /* Initialize toolkit and open the display */
146    topLevel = XtInitialize(appName, "Dthelpdemo", NULL, 0, &argc, argv);
147    appDisplay = XtDisplay(topLevel);
148
149    if (!appDisplay) 
150      {
151        XtWarning ("Dialogs: Can't open display, exiting...");
152        exit (0);
153      }
154   
155
156    
157    /* Build up the Widget UI for the demo app */
158    CreateMainWindow(topLevel);
159
160    XtMainLoop(); 
161 }
162
163
164
165 /************************************************************************
166  * Function:  CreateMainWindow
167  *
168  *   This function creates a main window, calls the routine to build our
169  * menubar.
170  *
171  *************************************************************************/
172 static void CreateMainWindow(
173     Widget parent)
174 {
175
176   Widget        main_window;
177   Widget        menuBar;
178   Widget        frame;
179   Widget        form;
180   Widget        manageFrame, manageForm, manageTitle, radioBox;
181   Widget        control1Frame, control1Form, control1Title, controlBox1;
182   Widget        control2Frame, control2Form, control2Title, controlBox2;
183   Arg           args[10];
184   int           n;
185   char          name[15];
186   int           len;
187
188        
189   XmString labelString;
190         
191   /* Create a Main Window Widget */
192         
193   n = 0;
194   main_window = XmCreateMainWindow (parent, "mainwindow1", args, n);
195   XtManageChild (main_window);
196
197   /* Build the Menus via our BuildMenus function */
198   menuBar = BuildMenus(main_window);
199
200
201   /*    Create Frame in the MainWindow  */
202   n = 0;
203   XtSetArg (args[n], XmNmarginWidth, 2);  n++;
204   XtSetArg (args[n], XmNmarginHeight, 2);  n++;
205   XtSetArg (args[n], XmNshadowThickness, 1);  n++;
206   XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT);  n++;
207   frame = XmCreateFrame (main_window, "frame", args, n);
208   XtManageChild (frame);
209
210         
211   /*    Create the form */
212   n = 0;
213   form = XmCreateForm(frame, "form", args, n);
214   XtManageChild(form);
215
216
217    /****** Create the Management section Frame ******/
218    n = 0;
219    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM);         n++;
220    XtSetArg (args[n], XmNtopOffset, 5);                                 n++;
221    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);               n++;
222    XtSetArg (args[n], XmNrightOffset, 5);                               n++;
223    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);                n++;
224    XtSetArg (args[n], XmNleftOffset, 5);                                n++;
225    XtSetArg (args[n], XmNmarginWidth, 5);                               n++;
226    XtSetArg (args[n], XmNmarginHeight, 2);                              n++;
227    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING);             n++;
228    manageFrame = XmCreateFrame(form, "manageFrame", args, n);
229    XtManageChild (manageFrame);
230
231    manageForm = XmCreateForm (manageFrame,"manageForm", NULL, 0);
232    XtManageChild (manageForm);
233
234    XtAddCallback(manageForm, XmNhelpCallback, 
235                  HelpCB, CREATE_FRAME);
236
237    /* create the frame title */
238    labelString = XmStringCreateLocalized("Help Widget Management");
239    n = 0;
240    XtSetArg (args[n], XmNlabelString, labelString);             n++;
241    XtSetArg (args[n], XmNchildType, XmFRAME_TITLE_CHILD);       n++;
242    XtSetArg (args[n], XmNtraversalOn, False);                   n++;
243    manageTitle = XmCreateLabelGadget(manageFrame,"manageTitle",args,n);
244    XtManageChild (manageTitle);
245    XmStringFree (labelString);
246
247    /* Create the Radio Box widget to hold the toggle buttons */
248    n = 0;
249    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM);            n++;
250    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);              n++;
251    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);             n++;
252    radioBox = XmCreateRadioBox(manageForm, "radioBox", args, n);
253    XtManageChild (radioBox);
254   
255
256    /* Create the Create Widget button */
257    labelString = XmStringCreateLocalized("Create Sample Help Widget");
258    n = 0;
259    XtSetArg (args[n], XmNlabelString, labelString);                   n++;
260    createSampleWidgetBtn = 
261            XmCreateToggleButtonGadget(radioBox,"createSampleWidgetBtn",args,n);
262    XtManageChild (createSampleWidgetBtn);
263    XmStringFree (labelString);
264
265    XtAddCallback(createSampleWidgetBtn, XmNarmCallback,
266                  ManageButtonsCB, (XtPointer)CREATE_SAMPLE);
267   
268
269
270    /* Create the Create Widget button */
271    labelString = XmStringCreateLocalized("Destroy Sample Help Widget");
272    n = 0;
273    XtSetArg (args[n], XmNlabelString, labelString);                   n++;
274    destroySampleWidgetBtn = 
275           XmCreateToggleButtonGadget(radioBox,"destroySampleWidgetBtn",args,n);
276    XtManageChild (destroySampleWidgetBtn);
277    XmStringFree (labelString);
278
279    XtSetSensitive(destroySampleWidgetBtn, FALSE);
280
281
282    XtAddCallback(destroySampleWidgetBtn, XmNarmCallback,
283                  ManageButtonsCB, (XtPointer)DESTROY_SAMPLE);
284   
285
286
287    /****** Create the Control1 section Frame ******/
288    n = 0;
289    XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET);               n++;
290    XtSetArg (args[n], XmNtopWidget, manageFrame);                 n++; 
291    XtSetArg (args[n], XmNtopOffset, 5);                                 n++;
292    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);               n++;
293    XtSetArg (args[n], XmNrightOffset, 5);                               n++;
294    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);                n++;
295    XtSetArg (args[n], XmNleftOffset, 5);                                n++;
296    XtSetArg (args[n], XmNmarginWidth, 5);                               n++;
297    XtSetArg (args[n], XmNmarginHeight, 2);                              n++;
298    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING);             n++;
299    control1Frame = XmCreateFrame(form, "control1Frame", args, n);
300    XtManageChild (control1Frame);
301
302    control1Form = XmCreateForm (control1Frame,"control1Form", NULL, 0);
303    XtManageChild (control1Form);
304
305
306    XtAddCallback(control1Form, XmNhelpCallback, 
307                  HelpCB, CONTROL1_FRAME);
308
309    /* create the frame title */
310    labelString = XmStringCreateLocalized("Controlling the Help Widgets");
311    n = 0;
312    XtSetArg (args[n], XmNlabelString, labelString);             n++;
313    XtSetArg (args[n], XmNchildType, XmFRAME_TITLE_CHILD);       n++;
314    XtSetArg (args[n], XmNtraversalOn, False);                   n++;
315    control1Title = XmCreateLabelGadget(control1Frame,"control1Title",args,n);
316    XtManageChild (control1Title);
317    XmStringFree (labelString);
318
319    /* Create the Radio Box widget to hold the toggle buttons */
320    n = 0;
321    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM);            n++;
322    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);              n++;
323    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);             n++;
324    controlBox1 = XmCreateRowColumn(control1Form, "controlBox1", args, n);
325    XtManageChild (controlBox1);
326   
327
328    /* Create the Create Widget button */
329    labelString = XmStringCreateLocalized("Change the Content");
330    n = 0;
331    XtSetArg (args[n], XmNlabelString, labelString);                   n++;
332    controlBtn1 = 
333           XmCreateToggleButtonGadget(controlBox1,"controlBtn1",args,n);
334    XtManageChild (controlBtn1);
335    XmStringFree (labelString);
336    XtSetSensitive(controlBtn1, FALSE);
337
338    XtAddCallback(controlBtn1, XmNarmCallback,
339                  Control1ButtonsCB, (XtPointer)CHANGE_CONTENT);
340
341    /* Change Size button*/
342    labelString = XmStringCreateLocalized("Change the Size");
343    n = 0;
344    XtSetArg (args[n], XmNlabelString, labelString);                   n++;
345    controlBtn2 = 
346         XmCreateToggleButtonGadget(controlBox1,"controlBtn2",args,n);
347    XtManageChild (controlBtn2);
348    XmStringFree (labelString);
349    XtSetSensitive(controlBtn2, FALSE);
350
351
352
353    XtAddCallback(controlBtn2, XmNarmCallback,
354                  Control1ButtonsCB, (XtPointer)CHANGE_SIZE);
355
356
357
358    /* Control the GUI*/
359    labelString = XmStringCreateLocalized("Control the User Interface");
360    n = 0;
361    XtSetArg (args[n], XmNlabelString, labelString);                   n++;
362    controlBtn3 = 
363         XmCreateToggleButtonGadget(controlBox1,"controlBtn3",args,n);
364    XtManageChild (controlBtn3);
365    XmStringFree (labelString);
366    XtSetSensitive(controlBtn3, FALSE);
367
368
369    XtAddCallback(controlBtn3, XmNarmCallback,
370                  Control1ButtonsCB, (XtPointer)CHANGE_GUI);
371   
372
373
374    /****** Create the Control2 section Frame ******/
375    n = 0;
376    XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET);               n++;
377    XtSetArg (args[n], XmNtopWidget, control1Frame);                       n++; 
378    XtSetArg (args[n], XmNtopOffset, 5);                                 n++;
379    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);               n++;
380    XtSetArg (args[n], XmNrightOffset, 5);                               n++;
381    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);                n++;
382    XtSetArg (args[n], XmNleftOffset, 5);                                n++;
383    XtSetArg (args[n], XmNmarginWidth, 5);                               n++;
384    XtSetArg (args[n], XmNmarginHeight, 2);                              n++;
385    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING);             n++;
386    control2Frame = XmCreateFrame(form, "control2Frame", args, n);
387    XtManageChild (control2Frame);
388
389    control2Form = XmCreateForm (control2Frame,"control2Form", NULL, 0);
390    XtManageChild (control2Form);
391
392    XtAddCallback(control2Form, XmNhelpCallback, 
393                  HelpCB, CONTROL2_FRAME);
394
395
396    /* create the frame title */
397    labelString =
398      XmStringCreateLocalized ("Controlling the Client Via Help Widgets");
399    n = 0;
400    XtSetArg (args[n], XmNlabelString, labelString);             n++;
401    XtSetArg (args[n], XmNchildType, XmFRAME_TITLE_CHILD);       n++;
402    XtSetArg (args[n], XmNtraversalOn, False);                   n++;
403    control2Title = XmCreateLabelGadget(control2Frame,"control2Title",args,n);
404    XtManageChild (control2Title);
405    XmStringFree (labelString);
406
407    /* Create the Radio Box widget to hold the toggle buttons */
408    n = 0;
409    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM);            n++;
410    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);              n++;
411    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);             n++;
412    controlBox2 = XmCreateRowColumn(control2Form, "controlBox2", args, n);
413    XtManageChild (controlBox2);
414   
415
416    /* Create the Create Widget button */
417    labelString = XmStringCreateLocalized("Client controled hypertext links");
418    n = 0;
419    XtSetArg (args[n], XmNlabelString, labelString);                   n++;
420    controlBtn4 = 
421           XmCreatePushButtonGadget(controlBox2,"controlBtn4",args,n);
422    XtManageChild (controlBtn4);
423    XmStringFree (labelString);
424   
425    XtAddCallback(controlBtn4, XmNarmCallback,
426                  Control1ButtonsCB, (XtPointer)SHOW_APP_DEFINED_LINKS);
427   
428
429
430
431
432   /* Set MainWindow areas */
433   XmMainWindowSetAreas (main_window, menuBar, NULL, NULL, NULL, frame);
434       
435
436   /* Force a size to the form */
437 /*
438   n = 0;
439   XtSetArg(args[n], XmNwidth, 400); n++;
440   XtSetArg(args[n], XmNheight, 200); n++;      
441   XtSetValues(form, args, n);
442 */
443   XtRealizeWidget (parent);
444
445
446 } /* End CreateMainWindow */
447
448
449
450 /*********************************************************************
451  * Function:  BuildMenus
452  *
453  *   This procedure builds the menubar pulldows for our demo program
454  *
455   *********************************************************************/
456 static Widget BuildMenus(
457     Widget parent)
458
459 {
460    Widget       menuBar;
461    Widget       c[10];
462    Widget       cascadeB2;
463    Widget       menupane1, menupane2; 
464    Widget       fileBtn1;
465    Widget       helpBtn1, helpBtn2, helpBtn3;
466    Arg          args[10];       
467    int          n;
468    XmString     accText;
469    XmString     labelStr;
470    char       * mnemonic;
471
472    menuBar = XmCreateMenuBar (parent, "menuBar", args, 0); 
473    XtManageChild (menuBar);
474
475
476   /*******************************************************
477    * Menupane:  Exit, and related buttons 
478    *******************************************************/
479    
480   n = 0;
481   XtSetArg(args[n], XmNmarginWidth, 0);         ++n;
482   XtSetArg(args[n], XmNmarginHeight, 0);                ++n;
483   menupane1 = XmCreatePulldownMenu(menuBar, "menupane1", args, n);
484   
485
486   /* Exit button */
487   labelStr = XmStringCreateLocalized("Exit");
488   accText = XmStringCreateLocalized("<Ctrl>X");
489   mnemonic = "x";
490
491   n = 0;
492   XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>X"); n++;
493   XtSetArg(args[n], XmNlabelString, labelStr); n++;
494   XtSetArg(args[n], XmNacceleratorText ,accText); n++;
495   XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
496   c[0] = fileBtn1 =
497            XmCreatePushButtonGadget(menupane1,"fileBtn1", args, n);
498    
499   XtAddCallback(fileBtn1, XmNactivateCallback, CloseCB,(XtPointer) NULL);
500    
501
502   XmStringFree(accText);
503   XmStringFree(labelStr); 
504
505   XtManageChildren(c, 1);
506  
507
508   /*******************************************************
509    * Menupane:  Help, and related buttons 
510    *******************************************************/
511   n = 0;
512   XtSetArg(args[n], XmNmarginWidth, 0);         ++n;
513   XtSetArg(args[n], XmNmarginHeight, 0);                ++n;
514   menupane2 = XmCreatePulldownMenu(menuBar, "menupane2", args, n);
515
516   
517   /* Item help button */
518   labelStr = XmStringCreateLocalized("On Item");
519   accText = XmStringCreateLocalized("<Ctrl>I");
520   mnemonic = "I";
521    
522   n = 0;
523   XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>I"); n++;
524   XtSetArg(args[n], XmNlabelString, labelStr); n++;
525   XtSetArg(args[n], XmNacceleratorText ,accText); n++;
526   XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
527   c[0] = helpBtn1 = XmCreatePushButtonGadget(menupane2,"helpBtn1", args, n);
528   XtAddCallback(helpBtn1, XmNactivateCallback,
529                 HelpMenuCB, (XtPointer)HELP_ON_ITEM);
530     
531   XmStringFree(accText);
532   XmStringFree(labelStr); 
533    
534
535
536   /* On application button */
537   labelStr = XmStringCreateLocalized("On Application");
538   accText = XmStringCreateLocalized("<Ctrl>A");
539   mnemonic = "A";
540
541   n = 0; 
542   XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>A"); n++;
543   XtSetArg(args[n], XmNlabelString, labelStr); n++;
544   XtSetArg(args[n], XmNacceleratorText ,accText); n++;
545   XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
546   c[1] = helpBtn2 = XmCreatePushButtonGadget(menupane2,
547                                             "helpBtn2", args, n);
548   XmStringFree(accText);
549   XmStringFree(labelStr); 
550  
551   XtAddCallback(helpBtn2, XmNactivateCallback,
552                 HelpMenuCB, (XtPointer)HELP_ON_TOPIC);
553
554
555   /* On Version button */
556   labelStr = XmStringCreateLocalized("On Version");
557   accText = XmStringCreateLocalized("<Ctrl>V");
558   mnemonic = "V";
559
560   n = 0;
561   XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>V"); n++;
562   XtSetArg(args[n], XmNlabelString, labelStr); n++;
563   XtSetArg(args[n], XmNacceleratorText ,accText); n++;
564   XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
565   c[2] = helpBtn3 = XmCreatePushButtonGadget(menupane2,
566                                           "helpBtn3",args, n);
567   XtAddCallback(helpBtn3, XmNactivateCallback, 
568                 HelpMenuCB, (XtPointer)HELP_ON_VERSION);
569   
570    XmStringFree(accText);
571    XmStringFree(labelStr); 
572  
573    XtManageChildren(c, 3);
574  
575
576    /* Create Cascade buttons for menubar */
577    labelStr = XmStringCreateLocalized("File");
578    mnemonic = "F";
579    n = 0;
580    XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
581    XtSetArg(args[n], XmNsubMenuId, menupane1); n++;
582    XtSetArg(args[n], XmNlabelString, labelStr); n++;
583    c[0] = XmCreateCascadeButton(menuBar,"cascadeB1",args, n); 
584    XmStringFree(labelStr); 
585
586
587    labelStr = XmStringCreateLocalized("Help");
588    mnemonic = "H";
589    n = 0;
590    XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
591    XtSetArg(args[n], XmNsubMenuId, menupane2); n++;
592    XtSetArg(args[n], XmNlabelString, labelStr); n++;
593    c[1] = cascadeB2 = XmCreateCascadeButton(menuBar, "cascadeB2",
594                                             args, n); 
595    XmStringFree(labelStr); 
596
597    XtManageChildren(c, 2);
598
599   
600    /* Attaches the Help menupane to the right side */
601    n = 0;
602    XtSetArg (args[n], XmNmenuHelpWidget, cascadeB2);  n++;
603    XtSetValues (menuBar, args, n);
604
605    return(menuBar);
606
607
608 }  /* End BuildMenus */
609
610
611
612 /*********************************************************************
613  * Function: ManageButtonsCallback
614  *
615  * Description: 
616  *
617  *********************************************************************/
618 static void ManageButtonsCB(
619     Widget  parent,
620     XtPointer clientData,
621     XtPointer callData)
622 {
623
624   int      n;
625   Arg      args[10];    
626   Widget   helpWidget, printWidget;
627
628   TurnOnHourGlass(topLevel);
629
630   switch ((long)clientData)
631     {
632       case CREATE_SAMPLE:
633    
634       XtSetSensitive(destroySampleWidgetBtn, TRUE);
635       XtSetSensitive(createSampleWidgetBtn, FALSE);
636       XtSetSensitive(controlBtn1, TRUE);
637       XtSetSensitive(controlBtn2, TRUE);
638       XtSetSensitive(controlBtn3, TRUE);
639
640       /* Set the state of our toggle buttons */
641       XmToggleButtonSetState(destroySampleWidgetBtn, FALSE, FALSE);
642
643      if (quickWidget==NULL)
644         {
645             Widget dp = parent;
646             while (!XtIsSubclass(dp, applicationShellWidgetClass))
647                     dp = XtParent(dp);
648   
649             n =0;
650             XtSetArg (args[n], XmNtitle, "Quick Dialog Sample");  n++;
651             XtSetArg (args[n], DtNhelpVolume,HelpdemoHelpVol);   n++;
652             XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC);  n++;
653             XtSetArg (args[n], DtNlocationId, APP_MENU_ID);  n++;
654             quickWidget = DtCreateHelpQuickDialog(dp,"quickWidget",args, n);
655             
656
657             XtAddCallback(quickWidget, DtNcloseCallback,
658                           CloseAndDestroyCB, (XtPointer)NULL);
659
660             /* Add the popup position callback to our main help dialog */
661             XtAddCallback (XtParent(quickWidget), XmNpopupCallback,
662                           (XtCallbackProc)HelpMapCB, 
663                           (XtPointer)dp);
664  
665             /* Add our hypertext callback here */
666             XtAddCallback(quickWidget, DtNhyperLinkCallback,
667                        ProcessLinkCB, NULL);
668
669
670
671             /* We do not want a print button for now so we unmap it */     
672             printWidget = DtHelpQuickDialogGetChild (quickWidget, 
673                                          DtHELP_QUICK_PRINT_BUTTON);
674             XtUnmanageChild (printWidget);
675   
676
677             /* We do not want a help button for now so we unmap it */     
678             helpWidget = DtHelpQuickDialogGetChild (quickWidget, 
679                                         DtHELP_QUICK_HELP_BUTTON);
680             XtUnmanageChild (helpWidget);
681
682             XtManageChild(quickWidget);
683
684           }
685         break;
686
687       case DESTROY_SAMPLE:
688
689         XtSetSensitive(destroySampleWidgetBtn, FALSE);
690         XtSetSensitive(createSampleWidgetBtn, TRUE);
691         XtSetSensitive(controlBtn1, FALSE);
692         XtSetSensitive(controlBtn2, FALSE);
693         XtSetSensitive(controlBtn3, FALSE);
694
695
696         /* Set the state of our toggle buttons */
697         XmToggleButtonSetState(createSampleWidgetBtn, FALSE, FALSE);
698         XmToggleButtonSetState(controlBtn1, FALSE, FALSE);
699         XmToggleButtonSetState(controlBtn2, FALSE, FALSE);
700         XmToggleButtonSetState(controlBtn3, FALSE, FALSE);
701
702
703         /* Reinitialize our toggle button state flags */
704         addMoreButton=TRUE;
705         goBigger=TRUE;
706         changeTopic=TRUE;
707
708
709         if (quickWidget != NULL)
710         XtDestroyWidget(quickWidget);
711
712         quickWidget = NULL;
713         moreButton = NULL;
714
715         break;
716      
717       default:
718
719         break;
720     } /* End of switch statement */
721
722   TurnOffHourGlass(topLevel);
723
724
725 }
726
727
728
729
730
731 /*********************************************************************
732  * Function: ManageButtonsCallback
733  *
734  * Description: 
735  *
736  *********************************************************************/
737 static void Control1ButtonsCB(
738     Widget  parent,
739     XtPointer clientData,
740     XtPointer callData)
741 {
742
743   int               n;
744   Arg               args[10];   
745   static Dimension  columns=0;
746   static Dimension  rows=0;
747   
748
749   TurnOnHourGlass(topLevel);
750
751   switch ((long)clientData)
752     {
753       case CHANGE_CONTENT:
754          
755         /* Show a man page */
756         if (changeTopic)
757           {
758             n =0;
759             XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC);  n++;
760             XtSetArg (args[n], DtNlocationId, CREATE_FRAME);  n++;
761             XtSetValues(quickWidget, args, n);
762             changeTopic = FALSE;
763           }
764         else
765           {
766             /* Show Topic */
767             n = 0;
768             XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC);  n++;
769             XtSetArg (args[n], DtNlocationId, APP_MENU_ID);      n++;
770             XtSetValues(quickWidget, args, n);
771             changeTopic = TRUE;
772            }
773
774         break;
775
776       case CHANGE_GUI:
777     
778         if (moreButton == NULL)
779           {
780             /* Get the more buttion child */
781             moreButton = DtHelpQuickDialogGetChild(quickWidget, 
782                                                    DtHELP_QUICK_MORE_BUTTON);
783
784             XtAddCallback(moreButton, XmNactivateCallback,
785                  DisplayMoreCB, (XtPointer)NULL);
786   
787  
788           }
789         
790         if (addMoreButton)
791           {
792
793               /* manage the child */
794               XtManageChild(moreButton);
795               addMoreButton = FALSE;
796           }
797         else
798           {
799             /* unmanage more button */
800             XtUnmanageChild(moreButton);
801             addMoreButton = TRUE;
802
803           }
804  
805         break;
806
807       case CHANGE_SIZE:
808
809         if (rows == 0)
810           {
811             /* Get the current dialog size */
812             n =0;
813             XtSetArg (args[n], DtNcolumns, &columns);  n++;
814             XtSetArg (args[n], DtNrows, &rows);   n++;
815             XtGetValues(quickWidget, args, n);
816           }
817
818         if (goBigger)
819           {
820             n =0;
821             XtSetArg (args[n], DtNcolumns, columns+5);  n++;
822             XtSetArg (args[n], DtNrows, rows+5);   n++;
823             XtSetValues(quickWidget, args, n);
824             goBigger = FALSE;
825           }
826         else
827           {
828             /* Go smaller */
829             n =0;
830             XtSetArg (args[n], DtNcolumns, columns);  n++;
831             XtSetArg (args[n], DtNrows, rows);   n++;
832             XtSetValues(quickWidget, args, n);
833             goBigger = TRUE;
834           }
835
836       
837         break;
838       
839       case SHOW_APP_DEFINED_LINKS:
840          
841          /* display the general dialog w/more help in it */
842          DisplayMain (parent, HelpdemoHelpVol, CONTROL2_FRAME);
843
844  
845         break;
846
847       default:
848
849         break;
850     } /* End of switch statement */
851
852
853   TurnOffHourGlass(topLevel);
854
855
856 }
857
858
859 /*********************************************************************
860  * Function: HelpMenuCB
861  *
862  * Description: This is the callback that is called when the user selects
863  *              any of the help menu items.
864  *
865  *********************************************************************/
866 static void HelpMenuCB(
867     Widget  widget,
868     XtPointer clientData,
869     XtPointer callData)
870
871 {
872   Widget selWidget=NULL;
873   String name;
874   Arg  argList[10];
875   Cardinal argCount;
876   int           n;
877   int  status=DtHELP_SELECT_ERROR;
878
879
880
881   TurnOnHourGlass(topLevel);
882
883
884   /* Determine which help button was activated and display the
885    * appropriate help information */
886
887    switch ((long)clientData)
888            {
889              case HELP_ON_ITEM:
890                while (!XtIsSubclass(widget, applicationShellWidgetClass))
891                    widget = XtParent(widget);
892
893
894                status = DtHelpReturnSelectedWidgetId(widget, 0, &selWidget);
895
896                 switch ((int)status)
897                   {
898                     case DtHELP_SELECT_ERROR:
899                       printf("Selection Error, cannot continue\n");
900                     break;
901                     case DtHELP_SELECT_VALID:
902                       while (selWidget != NULL)
903                         {
904                           if ((XtHasCallbacks(selWidget, XmNhelpCallback) 
905                                             == XtCallbackHasSome))
906                             {
907                                XtCallCallbacks((Widget)selWidget, 
908                                                XmNhelpCallback,NULL);
909                                break;
910                             }
911                           else
912                            selWidget = XtParent(selWidget);
913                         }
914                     break;
915                     case DtHELP_SELECT_ABORT:
916                       printf("Selection Aborted by user.\n");
917                     break;
918                     case DtHELP_SELECT_INVALID:
919                       printf("You must select a component within your app.\n");
920                     break;
921
922                   }
923
924                break;
925
926              case HELP_ON_TOPIC:
927                DisplayMain (widget, HelpdemoHelpVol, APP_MENU_ID);
928
929                break;
930  
931              case HELP_ON_VERSION:
932                DisplayVersion (widget, HelpdemoHelpVol, VER_MENU_ID);
933                break;
934
935            
936              default:
937
938              break;
939            } /* End of switch statement */
940
941   TurnOffHourGlass(topLevel);
942
943
944 }
945
946
947
948
949 /*********************************************************************
950  * Function: HelpCB
951  *
952  * Description: This is the callback that is called when the user selects
953  *              item help or F1 key help
954  *
955  *********************************************************************/
956 static void HelpCB(
957     Widget  widget,
958     XtPointer clientData,
959     XtPointer callData)
960 {
961
962   char * locationId = (char *) clientData;
963
964
965
966   /* Just display the proper help based on the id string passed in */
967   /* We pass in a NULL for our helpVolume because and let the value
968    * defined in the app-defaults file be used.
969    */
970
971   DisplayMain (widget, HelpdemoHelpVol, locationId);
972
973
974 }
975
976
977
978
979 /*********************************************************************
980  * Function: CloseCB
981  *
982  * Description: This is the callback that is called when the user selects
983  *              the Exit menu button.
984  *
985  *********************************************************************/
986 static void CloseCB (
987     Widget      w,
988     XtPointer   clientData,
989     XtPointer   callData)
990
991 {
992   /* Now we go away */
993   exit(0);
994
995 }
996
997
998
999
1000 /*********************************************************************
1001  * Function: DisplayMoreCB
1002  *
1003  * Description: Handles the selection of the more button added to the 
1004  *              sample quick help dialog widget.  It causes a 
1005  *              general help dialog to be posted w/more informaion in it.
1006  *
1007  *********************************************************************/
1008 static void DisplayMoreCB (
1009     Widget      w,
1010     XtPointer   clientData,
1011     XtPointer   callData)
1012
1013 {
1014
1015   /* display the general dialog w/more help in it */
1016   DisplayMain (w, HelpdemoHelpVol, MORE_BTN_ID);
1017
1018
1019
1020
1021
1022 }
1023
1024
1025 /*********************************************************************
1026  * Function: CloseAndDestroyCB
1027  *
1028  * Description: Closes and destroys our sample quick help dialog widget.
1029  *
1030  *********************************************************************/
1031 static void CloseAndDestroyCB (
1032     Widget      w,
1033     XtPointer   clientData,
1034     XtPointer   callData)
1035
1036 {
1037
1038   /* Close and destroy the our quick dialog test widget */
1039   XtUnmanageChild (quickWidget);
1040   XtDestroyWidget(quickWidget);
1041
1042
1043   /* reinitialize our global sample widget, and associated moreButton */
1044   quickWidget = NULL;
1045   moreButton=NULL; 
1046   addMoreButton=TRUE;
1047
1048
1049   XtSetSensitive(destroySampleWidgetBtn, FALSE);
1050   XtSetSensitive(createSampleWidgetBtn, TRUE);
1051   XtSetSensitive(controlBtn1, FALSE);
1052   XtSetSensitive(controlBtn2, FALSE);
1053   XtSetSensitive(controlBtn3, FALSE);
1054   
1055   /* Set the state of our toggle buttons */
1056   XmToggleButtonSetState(createSampleWidgetBtn, FALSE, FALSE);
1057
1058   XmToggleButtonSetState(controlBtn1, FALSE, FALSE);
1059   XmToggleButtonSetState(controlBtn2, FALSE, FALSE);
1060   XmToggleButtonSetState(controlBtn3, FALSE, FALSE);
1061
1062
1063   /* Reinitialize our toggle button state flags */
1064   addMoreButton=TRUE;
1065   goBigger=TRUE;
1066   changeTopic=TRUE;
1067
1068
1069   
1070 }
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095