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