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