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