Initial import of the CDE 2.1.30 sources from the Open Group.
[oweals/cde.git] / cde / examples / motif / dogs / dogs.c
1 /* 
2  * (c) Copyright 1989, 1990, 1991, 1992 OPEN SOFTWARE FOUNDATION, INC. 
3  * ALL RIGHTS RESERVED 
4 */ 
5 /* 
6  * Motif Release 1.2
7 */ 
8 #ifdef REV_INFO
9 #ifndef lint
10 static char rcsid[] = "$XConsortium: dogs.c /main/3 1995/10/27 10:43:03 rswiston $"
11 #endif
12 #endif
13
14 /*****************************************************************************
15 *
16 *  dogs.c - Square & Dog widget demo source file.
17 *  
18 ******************************************************************************/
19
20 #include <stdio.h>
21 #include <Xm/Xm.h>
22 #include <Mrm/MrmPublic.h>
23 #include "Square.h"
24 #include "Dog.h"
25
26 XtAppContext  app_context;
27
28 #define k_dog1_id 1
29 #define k_dog2_id 2
30 #define k_dog3_id 3
31 #define k_help_id 4
32
33 static void create_cb();
34 static void bark_cb();
35 static void tb_cb();
36 static void scale_cb();
37 static void help_cb();
38 static void exit_cb();
39
40 static MrmHierarchy mrm_id = 0;
41 static char *mrm_vec[]={"dogs.uid", NULL};
42 static MrmCode mrm_class;
43 static MRMRegisterArg mrm_names[] = {
44         {"create_cb", (XtPointer)create_cb },
45         {"bark_cb", (XtPointer)bark_cb },
46         {"tb_cb", (XtPointer)tb_cb },
47         {"scale_cb", (XtPointer)scale_cb },
48         {"help_cb", (XtPointer)help_cb },
49         {"exit_cb", (XtPointer)exit_cb }
50 };
51
52 static Widget dog1_id;
53 static Widget dog2_id;
54 static Widget dog3_id;
55 static Widget help_id;
56
57 main(argc, argv)
58     int argc;
59     char **argv;
60 {
61     Widget shell;
62     Display *display;
63     Widget app_main = NULL;
64     Arg args[3];
65
66     MrmInitialize ();
67     SquareMrmInitialize();
68     DogMrmInitialize();
69
70     XtToolkitInitialize();
71     app_context = XtCreateApplicationContext();
72     display = XtOpenDisplay(app_context, NULL, argv[0], "Dogs",
73                         NULL, 0, &argc, argv);
74     
75     if (display == NULL) {
76             fprintf(stderr, "%s:  Can't open display\n", argv[0]);
77             exit(1);
78     }
79
80     XtSetArg (args[0], XtNallowShellResize, True);
81     XtSetArg (args[1], XtNminWidth, 620);
82     XtSetArg (args[2], XtNminHeight, 370);
83     shell = XtAppCreateShell(argv[0], NULL, applicationShellWidgetClass,
84                           display, args, 3);
85
86     if (MrmOpenHierarchy(1, mrm_vec, NULL, &mrm_id) != MrmSUCCESS) exit(0);
87     MrmRegisterNames(mrm_names, XtNumber(mrm_names));
88     MrmFetchWidget (mrm_id, "app_main", shell, &app_main, &mrm_class);
89
90     XtManageChild(app_main);
91     XtRealizeWidget(shell);
92     XtAppMainLoop(app_context);
93 }
94
95 static void create_cb(w, id, reason)
96     Widget w;
97     int *id;
98     unsigned long *reason;
99 {
100     switch (*id) {
101         case k_dog1_id: dog1_id = w; break;
102         case k_dog2_id: dog2_id = w; break;
103         case k_dog3_id: dog3_id = w; break;
104         case k_help_id:
105             help_id = w;
106             XtUnmanageChild((Widget)XmMessageBoxGetChild(help_id,
107                                 XmDIALOG_CANCEL_BUTTON));
108             XtUnmanageChild((Widget)XmMessageBoxGetChild(help_id,
109                                 XmDIALOG_HELP_BUTTON));
110             break;
111     }
112 }
113
114 static void bark_cb (w, volume, cb)
115     Widget w;
116     int *volume;
117     XtPointer cb;
118 {
119     XBell(XtDisplay(w), *volume);
120 }
121
122 static void tb_cb (w, tag, cb)
123     Widget w;
124     int *tag;
125     XmToggleButtonCallbackStruct *cb;
126 {
127     Arg args[1];
128     Widget dog;
129
130     switch (*tag) {
131         case(1) : dog = dog1_id; break;
132         case(2) : dog = dog2_id; break; 
133         case(3) : dog = dog3_id; break; 
134     }
135     XtSetArg(args[0], SquareNmakeSquare, cb->set);
136     XtSetValues(dog, args, 1);
137 }
138
139 static void scale_cb(w, tag, cb)
140     Widget w;
141     int *tag;
142     XmScaleCallbackStruct *cb;
143 {
144     Arg args[1];
145     Widget dog;
146
147     switch (*tag) {
148         case(1) : dog = dog1_id; break;
149         case(2) : dog = dog2_id; break; 
150         case(3) : dog = dog3_id; break; 
151     }
152     XtSetArg(args[0], DogNwagTime, cb->value);
153     XtSetValues(dog, args, 1);
154 }
155
156 static void help_cb (w, name, cb)
157     Widget w;
158     XmString name;
159     XtPointer cb;
160 {
161     Arg args[1];
162
163     if (name == NULL) return;
164     XtSetArg (args[0], XmNmessageString, name);
165     XtSetValues(help_id, args, 1);
166     XtManageChild(help_id);
167 }
168
169 static void exit_cb (w, name, cb)
170     Widget w;
171     XmString name;
172     XtPointer cb;
173 {
174     exit(0);
175 }
176