1 /*****************************************************************************
2 FILE : $Source: /projects/higgs1/SNNS/CVS/SNNS/xgui/sources/d3_units.c,v $
3 SHORTNAME : units.c
4 SNNS VERSION : 4.2
5
6 PURPOSE : controls the unit pannel
7 NOTES :
8
9 AUTHOR : Ralf Huebner
10 DATE : 1.12.1991
11
12 CHANGED BY :
13 RCS VERSION : $Revision: 2.7 $
14 LAST CHANGE : $Date: 1998/03/03 14:10:04 $
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 <memory.h>
25
26 #include <X11/Xlib.h>
27 #include <X11/Xutil.h>
28 #include <X11/Intrinsic.h>
29 #include <X11/StringDefs.h>
30 #include <X11/Shell.h>
31 #include <X11/Xaw3d/Simple.h>
32 #include <X11/Xaw3d/Box.h>
33 #include <X11/Xaw3d/Form.h>
34 #include <X11/Xaw3d/Toggle.h>
35
36 #include "ui.h"
37 #include "glob_typ.h"
38 #include "ui_xWidgets.h"
39 #include "d3_global.h"
40 #include "d3_xUtils.h"
41 #include "d3_main.h"
42
43 #include "d3_units.ph"
44
45
46 /*****************************************************************************
47 FUNCTION : d3_closeUnitPannel
48
49 PURPOSE : closes the unit pannel
50 RETURNS : void
51 NOTES :
52
53 UPDATE :
54 ******************************************************************************/
55
d3_closeUnitPannel(Widget w,Widget pannel,caddr_t call_data)56 static void d3_closeUnitPannel (Widget w, Widget pannel, caddr_t call_data)
57
58 {
59 XtDestroyWidget (pannel);
60 if (memcmp (&d3_state.unit_mode, &temp_unit_mode,
61 sizeof (d3_unit_mode_type)) != 0) {
62 memcpy (&d3_state.unit_mode, &temp_unit_mode,
63 sizeof (d3_unit_mode_type));
64 d3_drawNet ();
65 }
66 }
67
68
69 /*****************************************************************************
70 FUNCTION : d3_setUnitMode
71
72 PURPOSE : sets the toggles in the lower part of the unit pannel
73 RETURNS : void
74 NOTES : return if monochrome display and color selected
75
76 UPDATE :
77 ******************************************************************************/
78
d3_setUnitMode(Widget w,int mode,caddr_t call_data)79 static void d3_setUnitMode (Widget w, int mode, caddr_t call_data)
80
81 {
82 Boolean activflag, initflag, outflag, biasflag;
83 Boolean nameflag, numflag, zflag, noneflag;
84
85 if ((d3_state.color_mode == mono_mode) && (mode == select_color))
86 return;
87 activflag = initflag = outflag = biasflag = FALSE;
88 nameflag = numflag = zflag = noneflag = FALSE;
89 toggled_unit_mode = mode;
90 switch (mode) {
91 case activation_on : activflag = TRUE;
92 break;
93 case init_act_on : initflag = TRUE;
94 break;
95 case output_on : outflag = TRUE;
96 break;
97 case bias_on : biasflag = TRUE;
98 break;
99 case name_on : nameflag = TRUE;
100 break;
101 case number_on : numflag = TRUE;
102 break;
103 case zvalue_on : zflag = TRUE;
104 break;
105 case nothing_on : noneflag = TRUE;
106 break;
107 }
108 ui_xSetToggleState (activation, activflag);
109 ui_xSetToggleState (initact, initflag);
110 ui_xSetToggleState (output, outflag);
111 ui_xSetToggleState (bias, biasflag);
112 ui_xSetToggleState (name, nameflag);
113 ui_xSetToggleState (number, numflag);
114 ui_xSetToggleState (zvalue, zflag);
115 ui_xSetToggleState (nothing, noneflag);
116 switch (selected_unit_mode) {
117 case select_size : temp_unit_mode.size = mode;
118 break;
119 case select_color : if (d3_state.color_mode == mono_mode)
120 break;
121 temp_unit_mode.color = mode;
122 break;
123 case select_toplabel : temp_unit_mode.top_label = mode;
124 break;
125 case select_bottlabel : temp_unit_mode.bottom_label = mode;
126 break;
127 }
128 }
129
130
131 /*****************************************************************************
132 FUNCTION : d3_selectUnitMode
133
134 PURPOSE : sets the toggles in the upper part of the unit pannel
135 RETURNS : void
136 NOTES : return if monochrome display and color selected
137
138 UPDATE :
139 ******************************************************************************/
140
d3_selectUnitMode(Widget w,int selected,caddr_t call_data)141 static void d3_selectUnitMode (Widget w, int selected, caddr_t call_data)
142
143 {
144 Boolean sizeflag, colorflag, toplabelflag, bottlabelflag;
145
146 if ((d3_state.color_mode == mono_mode) && (selected == select_color)) {
147 ui_xSetToggleState (color, FALSE);
148 return;
149 }
150 sizeflag = colorflag = toplabelflag = bottlabelflag = FALSE;
151 selected_unit_mode = selected;
152 switch (selected) {
153 case select_size : sizeflag = TRUE;
154 d3_setUnitMode (w, temp_unit_mode.size, NULL);
155 break;
156 case select_color : colorflag = TRUE;
157 d3_setUnitMode (w, temp_unit_mode.color, NULL);
158 break;
159 case select_toplabel : toplabelflag = TRUE;
160 d3_setUnitMode (w, temp_unit_mode.top_label, NULL);
161 break;
162 case select_bottlabel : bottlabelflag = TRUE;
163 d3_setUnitMode (w, temp_unit_mode.bottom_label, NULL);
164 break;
165 }
166 ui_xSetToggleState (size, sizeflag);
167 ui_xSetToggleState (color, colorflag);
168 ui_xSetToggleState (toplabel, toplabelflag);
169 ui_xSetToggleState (bottlabel, bottlabelflag);
170 }
171
172
173 /*****************************************************************************
174 FUNCTION : d3_createUnitPannel
175
176 PURPOSE : creates the unit pannel
177 RETURNS : void
178 NOTES :
179
180 UPDATE :
181 ******************************************************************************/
182
d3_createUnitPannel(Widget w,Widget button,caddr_t call_data)183 void d3_createUnitPannel (Widget w, Widget button, caddr_t call_data)
184
185 {
186 int n;
187 Arg arg[10];
188 Position xPos, yPos;
189 Dimension width, height;
190 Widget unitPannel, border, pannel1, pannel2, done, dummy;
191 static Boolean first_call = TRUE;
192
193 n = 0;
194 XtSetArg (arg[n], XtNwidth, &width); n++;
195 XtSetArg (arg[n], XtNheight, &height); n++;
196 XtGetValues (button, arg, (unsigned int) n);
197
198 XtTranslateCoords (button,
199 (Position) (width / 2), (Position) (height / 2), &xPos, &yPos);
200
201 n = 0;
202
203 XtSetArg(arg[n], XtNx, xPos); n++;
204 XtSetArg(arg[n], XtNy, yPos); n++;
205
206 unitPannel = XtCreatePopupShell ("units", transientShellWidgetClass,
207 button, arg, (unsigned int) n);
208
209 border = XtCreateManagedWidget("border", boxWidgetClass,
210 unitPannel, NULL, ZERO);
211
212 pannel1 = XtCreateManagedWidget("pannel1", boxWidgetClass, border, NULL, ZERO);
213
214 size = d3_xCreateToggleItem ("size", pannel1, NULL, NULL, NULL);
215 color = d3_xCreateToggleItem ("color", pannel1, NULL, NULL, NULL);
216 toplabel = d3_xCreateToggleItem ("toplabel", pannel1, NULL, NULL, NULL);
217 bottlabel = d3_xCreateToggleItem ("bottlabel", pannel1, NULL, NULL, NULL);
218
219 XtAddCallback(size, XtNcallback, (XtCallbackProc) d3_selectUnitMode, (caddr_t) select_size);
220 XtAddCallback(color, XtNcallback, (XtCallbackProc) d3_selectUnitMode, (caddr_t) select_color);
221 XtAddCallback(toplabel, XtNcallback, (XtCallbackProc) d3_selectUnitMode, (caddr_t) select_toplabel);
222 XtAddCallback(bottlabel, XtNcallback, (XtCallbackProc) d3_selectUnitMode, (caddr_t) select_bottlabel);
223
224 dummy = ui_xCreateLabelItem (" ", border, d3_fontWidth, NULL, NULL);
225
226 pannel2 = XtCreateManagedWidget("pannel2", boxWidgetClass, border, NULL, ZERO);
227
228 activation = d3_xCreateToggleItem ("activation", pannel2, NULL, NULL, NULL);
229 initact = d3_xCreateToggleItem ("initact", pannel2, NULL, NULL, NULL);
230 output = d3_xCreateToggleItem ("output", pannel2, NULL, NULL, NULL);
231 bias = d3_xCreateToggleItem ("bias", pannel2, NULL, NULL, NULL);
232 name = d3_xCreateToggleItem ("name", pannel2, NULL, NULL, NULL);
233 number = d3_xCreateToggleItem ("number", pannel2, NULL, NULL, NULL);
234 zvalue = d3_xCreateToggleItem ("zvalue", pannel2, NULL, NULL, NULL);
235 nothing = d3_xCreateToggleItem ("nothing", pannel2, NULL, NULL, NULL);
236
237 XtAddCallback(activation, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) activation_on);
238 XtAddCallback(initact, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) init_act_on);
239 XtAddCallback(output, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) output_on);
240 XtAddCallback(bias, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) bias_on);
241 XtAddCallback(name, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) name_on);
242 XtAddCallback(number, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) number_on);
243 XtAddCallback(zvalue, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) zvalue_on);
244 XtAddCallback(nothing, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) nothing_on);
245
246 done = d3_xCreateButtonItem ("done", border, NULL, NULL);
247 XtAddCallback(done, XtNcallback, (XtCallbackProc) d3_closeUnitPannel, (caddr_t) unitPannel);
248
249 memcpy (&temp_unit_mode, &d3_state.unit_mode,
250 sizeof (d3_unit_mode_type));
251
252 if (first_call) {
253 selected_unit_mode = select_size;
254 toggled_unit_mode = temp_unit_mode.size;
255 first_call = FALSE;
256 }
257
258 d3_selectUnitMode (pannel1, selected_unit_mode, NULL);
259 d3_setUnitMode (pannel1, toggled_unit_mode, NULL);
260
261 ui_checkWindowPosition(unitPannel);
262 XtPopup (unitPannel, XtGrabExclusive);
263 ui_xDontResizeWidget(unitPannel);
264 }
265
266
267 /* end of file */
268 /* lines: 301 */
269