1 /*****************************************************************************
2 FILE : $Source: /projects/higgs1/SNNS/CVS/SNNS/xgui/sources/d3_pannels.c,v $
3 SHORTNAME : pannels.c
4 SNNS VERSION : 4.2
5
6 PURPOSE : this module creates the control pannel
7 NOTES :
8
9 AUTHOR : Ralf Huebner
10 DATE : 1.12.1991
11
12 CHANGED BY :
13 RCS VERSION : $Revision: 2.12 $
14 LAST CHANGE : $Date: 1998/03/13 16:31:49 $
15
16 Copyright (c) 1990-1995 SNNS Group, IPVR, Univ. Stuttgart, FRG
17 Copyright (c) 1996-1998 SNNS Group, WSI, Univ. Tuebingen, FRG
18
19 ******************************************************************************/
20 #include <config.h>
21
22
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <ctype.h>
26 #include <math.h>
27 #include <string.h>
28 #include <X11/Xlib.h>
29 #include <X11/Xutil.h>
30 #include <X11/Intrinsic.h>
31 #include <X11/StringDefs.h>
32 #include <X11/Shell.h>
33 #include <X11/Xaw3d/Box.h>
34 #include <X11/Xaw3d/Simple.h>
35 #include <X11/Xaw3d/Form.h>
36 #include <X11/Xaw3d/Viewport.h>
37 #include <X11/Xaw3d/Label.h>
38 #include <X11/Xaw3d/Toggle.h>
39 #include <X11/Xaw3d/Command.h>
40 #include <X11/Xaw3d/Cardinals.h>
41 #include <X11/Xaw3d/AsciiText.h>
42
43 #include "ui.h"
44 #include "ui_xWidgets.h"
45 #include "ui_key.h"
46
47 #include "d3_global.h"
48 #include "d3_draw.h"
49 #include "d3_disp.h"
50 #include "d3_graph.h"
51 #include "d3_fonts.h"
52 #include "d3_move.h"
53 #include "d3_xUtils.h"
54 #include "d3_setup.h"
55 #include "d3_units.h"
56 #include "d3_links.h"
57 #include "d3_model.h"
58 #include "d3_project.h"
59 #include "d3_light.h"
60 #include "d3_main.h"
61 #include "o_graph.h"
62 #include "d3_zgraph.h"
63 #include "d3_zValue.h"
64
65 #include "d3_pannels.ph"
66
67
68 /*****************************************************************************
69 FUNCTION : d3_doneProc
70
71 PURPOSE : finishes the 3D View and closes all windows
72 RETURNS : void
73 NOTES :
74
75 UPDATE :
76 ******************************************************************************/
d3_doneProc(void)77 static void d3_doneProc (void)
78
79 {
80 if (d3_displayIsReady)
81 XtDestroyWidget (d3_displayMainWidget);;
82 XtDestroyWidget (d3_controlWidget);;
83 d3_displayIsReady = FALSE;
84 d3_controlIsReady = FALSE;
85 }
86
87
88 /*****************************************************************************
89 FUNCTION : d3_toggleFreezeButton
90
91 PURPOSE : toggles the freeze button
92 RETURNS : void
93 NOTES :
94
95 UPDATE :
96 ******************************************************************************/
d3_toggleFreezeButton(Widget w,Widget button,caddr_t call_data)97 static void d3_toggleFreezeButton (Widget w, Widget button, caddr_t call_data)
98
99 {
100 d3_freeze ^= 1;
101 ui_xSetToggleState (button, d3_freeze);
102 }
103
104
105 /*****************************************************************************
106 FUNCTION : d3_createButtonPannel
107
108 PURPOSE : creates the pannel for the setup, model, light... buttons
109 RETURNS : void
110 NOTES :
111
112 UPDATE :
113 ******************************************************************************/
d3_createButtonPannel(Widget parent)114 static void d3_createButtonPannel (Widget parent)
115
116 {
117 Widget box, setup, model, project, light, units, links;
118 Widget freeze, display, done, box2, reset;
119 int n;
120 Arg arg[10];
121
122 n = 0;
123 XtSetArg(arg[n], XtNwidth, 250); n++;
124 XtSetArg(arg[n], XtNleft , XtChainLeft); n++;
125 XtSetArg(arg[n], XtNright , XtChainLeft); n++;
126 XtSetArg(arg[n], XtNtop , XtChainTop); n++;
127 XtSetArg(arg[n], XtNbottom, XtChainTop); n++;
128 box = XtCreateManagedWidget("box", boxWidgetClass, parent, arg, (unsigned int) n);
129
130 setup = d3_xCreateButtonItem ("setup", box, NULL, NULL);
131 model = d3_xCreateButtonItem ("model", box, setup, NULL);
132 project = d3_xCreateButtonItem ("project", box, model, NULL);
133 light = d3_xCreateButtonItem ("light", box, project, NULL);
134 units = d3_xCreateButtonItem ("units", box, NULL, setup);
135 links = d3_xCreateButtonItem ("links", box, units, model);
136 reset = d3_xCreateButtonItem ("reset", box, links, project);
137 freeze = d3_xCreateButtonItem ("freeze", box, reset, light);
138
139 XtAddCallback (reset, XtNcallback, (XtCallbackProc) d3_resetDisplay, NULL);
140 XtAddCallback (project, XtNcallback,
141 (XtCallbackProc) d3_createProjectPannel, (caddr_t) project);
142 XtAddCallback (units, XtNcallback,
143 (XtCallbackProc) d3_createUnitPannel, (caddr_t) units);
144 XtAddCallback (links, XtNcallback,
145 (XtCallbackProc) d3_createLinkPannel, (caddr_t) links);
146 XtAddCallback (setup, XtNcallback,
147 (XtCallbackProc) d3_createSetupPannel, (caddr_t) setup);
148 XtAddCallback (model, XtNcallback,
149 (XtCallbackProc) d3_createModelPannel, (caddr_t) model);
150 XtAddCallback (light, XtNcallback,
151 (XtCallbackProc) d3_createLightPannel, (caddr_t) light);
152 XtAddCallback (freeze, XtNcallback,
153 (XtCallbackProc) d3_toggleFreezeButton, (caddr_t) freeze);
154
155 n = 0;
156 XtSetArg(arg[n], XtNwidth, 50); n++;
157 XtSetArg(arg[n], XtNleft , XtChainLeft); n++;
158 XtSetArg(arg[n], XtNright , XtChainLeft); n++;
159 XtSetArg(arg[n], XtNtop , XtChainTop); n++;
160 XtSetArg(arg[n], XtNbottom, XtChainTop); n++;
161 box2 = XtCreateManagedWidget("box2", boxWidgetClass, parent,
162 arg, (unsigned int) n);
163
164 display = d3_xCreateButtonItem ("display", box2, NULL, NULL);
165 done = d3_xCreateButtonItem ("done2", box2, NULL, display);
166
167 XtAddCallback(display, XtNcallback,
168 (XtCallbackProc) d3_createDisplayWindow, NULL);
169 XtAddCallback(done, XtNcallback, (XtCallbackProc) d3_doneProc, NULL);
170
171 if (d3_state.model_mode == solid)
172 d3_initZbuffer ();
173 }
174
175
176 /*****************************************************************************
177 FUNCTION : d3_createControlPannel
178
179 PURPOSE : creates subpannels of the control pannel
180 RETURNS : void
181 NOTES :
182
183 UPDATE :
184 ******************************************************************************/
d3_createControlPannel(Widget parent)185 static void d3_createControlPannel (Widget parent)
186
187 {
188 d3_createMovePannel (parent);
189 d3_createButtonPannel (parent);
190 d3_createZvaluePannel (parent);
191 }
192
193
194 /*****************************************************************************
195 FUNCTION : d3_displayGraphic
196
197 PURPOSE : creates the control pannel
198 RETURNS : void
199 NOTES : !!! this is entry point from the XGUI !!!
200 the function is a callback from
201 ui_xCreatePanel in module ui_main.c
202
203 UPDATE :
204 ******************************************************************************/
d3_displayGraphic(void)205 void d3_displayGraphic (void)
206
207 {
208
209 Widget d3_frameWidget;
210 Arg arg[25];
211 Cardinal n;
212 char buf[40];
213
214 if (d3_controlIsReady){
215 XRaiseWindow(XtDisplay(d3_controlWidget), XtWindow(d3_controlWidget));
216 return;
217 }
218
219 sprintf (buf, "SNNS 3D-control");
220 n = 0;
221 d3_controlWidget = XtCreatePopupShell (buf, topLevelShellWidgetClass,
222 ui_toplevel, arg, n);
223
224 n = 0;
225 XtSetArg (arg[n], XtNwidth, 300); n++;
226 XtSetArg (arg[n], XtNleft , XtChainLeft); n++;
227 XtSetArg (arg[n], XtNright , XtChainRight); n++;
228 XtSetArg (arg[n], XtNtop , XtChainTop); n++;
229 XtSetArg (arg[n], XtNbottom, XtChainBottom); n++;
230
231 d3_frameWidget = XtCreateManagedWidget ("form", boxWidgetClass,
232 d3_controlWidget, arg, n);
233 d3_createControlPannel (d3_frameWidget);
234
235 ui_checkWindowPosition(d3_controlWidget);
236 XtAddEventHandler(d3_frameWidget,KeyPressMask,FALSE,
237 (XtEventHandler)ui_key_control,(Cardinal *) 0);
238 XtPopup (d3_controlWidget, XtGrabNone);
239 ui_xDontResizeWidget(d3_controlWidget);
240
241 d3_controlIsReady = TRUE;
242 }
243 /* end of file */
244