Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / yagle / xyagle / XTB_panel.c
1 /*------------------------------------------------------------\
2 | |
3 | Tool : XYAG |
4 | |
5 | File : panel.c |
6 | |
7 | Authors : Jacomme Ludovic |
8 | Lester Anthony |
9 | |
10 \------------------------------------------------------------*/
11
12 #include <stdio.h>
13 #include <X11/Intrinsic.h>
14 #include <Xm/Xm.h>
15 #include <Xm/Frame.h>
16 #include <Xm/Form.h>
17 #include <Xm/List.h>
18 #include <Xm/Text.h>
19 #include <Xm/PushB.h>
20 #include <Xm/DialogS.h>
21
22 #include MUT_H
23 #include MLO_H
24 #include XTB_H
25 #include XSB_H
26
27 #include "XTB_panel.h"
28 #include "XTB_dialog.h"
29
30 static char *XyagPanelButtonDisable = "xxxx";
31
32 /*------------------------------------------------------------\
33 | XyagBuildPanel |
34 \------------------------------------------------------------*/
35
36 void
37 XyagBuildPanel(Father, Panel)
38 Widget Father;
39 XyagPanelItem *Panel;
40 {
41 Arg Args[13];
42 XyagPanelButtonItem *Button;
43 char *Label;
44 int Counter;
45 int Fraction;
46 int X1;
47 int Y1;
48 int X2;
49 int Y2;
50 Pixmap ButtonPixmap;
51
52 Fraction = Panel->ROW * Panel->COLUMN;
53
54 XtSetArg(Args[0], XmNshadowType, XmSHADOW_ETCHED_IN);
55 XtSetArg(Args[1], XmNdeleteResponse, XmDO_NOTHING);
56 XtSetArg(Args[2], XmNtitle, Panel->TITLE);
57
58 Panel->PANEL = XmCreateFormDialog(Father, Panel->TITLE, Args, 3);
59
60 XtAddCallback(Panel->PANEL, XmNdestroyCallback,
61 XyagDestroyDialogCallback, NULL);
62
63 Panel->PANEL_FORM = XtVaCreateManagedWidget("",
64 xmFormWidgetClass,
65 Panel->PANEL,
66 XmNtopAttachment, XmATTACH_FORM,
67 XmNbottomAttachment, XmATTACH_FORM,
68 XmNleftAttachment, XmATTACH_FORM,
69 XmNrightAttachment, XmATTACH_FORM,
70 XmNfractionBase, 100,
71 NULL);
72
73 Panel->FRAME = XtVaCreateManagedWidget("",
74 xmFrameWidgetClass,
75 Panel->PANEL_FORM,
76 XmNtopAttachment, XmATTACH_FORM,
77 XmNbottomAttachment, XmATTACH_FORM,
78 XmNleftAttachment, XmATTACH_FORM,
79 XmNrightAttachment, XmATTACH_FORM,
80 NULL);
81
82 Panel->FORM = XtVaCreateManagedWidget("",
83 xmFormWidgetClass,
84 Panel->FRAME,
85 XmNtopAttachment, XmATTACH_FORM,
86 XmNbottomAttachment, XmATTACH_FORM,
87 XmNleftAttachment, XmATTACH_FORM,
88 XmNrightAttachment, XmATTACH_FORM,
89 XmNfractionBase, Fraction,
90 NULL);
91 Button = Panel->LIST;
92
93 for (Counter = 0; Button[Counter].LABEL != NULL; Counter++) {
94 X1 = Button[Counter].X * Panel->ROW;
95 Y1 = Button[Counter].Y * Panel->COLUMN;
96 X2 = X1 + Button[Counter].DX * Panel->ROW;
97 Y2 = Y1 + Button[Counter].DY * Panel->COLUMN;
98
99 if (*Button[Counter].LABEL[0] != '\0') {
100 Label = *Button[Counter].LABEL;
101 }
102 else {
103 Label = XyagPanelButtonDisable;
104 }
105
106 if ((Button[Counter].TEXT != (char *) NULL) &&
107 (Button[Counter].BITMAP != (char *) NULL)) {
108 XtSetArg(Args[0], XmNtopAttachment, XmATTACH_POSITION);
109 XtSetArg(Args[1], XmNtopPosition, Y1);
110 XtSetArg(Args[2], XmNbottomAttachment, XmATTACH_POSITION);
111 XtSetArg(Args[3], XmNbottomPosition, Y2);
112 XtSetArg(Args[4], XmNrightAttachment, XmATTACH_POSITION);
113 XtSetArg(Args[5], XmNrightPosition, X2);
114 XtSetArg(Args[6], XmNleftAttachment, XmATTACH_POSITION);
115 XtSetArg(Args[7], XmNleftPosition, X1);
116 XtSetArg(Args[8], XmNscrollBarDisplayPolicy, XmSTATIC);
117 XtSetArg(Args[9], XmNscrollHorizontal, True);
118 XtSetArg(Args[10], XmNscrollVertical, True);
119 XtSetArg(Args[11], XmNlistSizePolicy, XmCONSTANT);
120 XtSetArg(Args[12], XmNselectionPolicy, XmMULTIPLE_SELECT);
121
122 Button[Counter].BUTTON = XmCreateScrolledList(Panel->FORM, Button[Counter].TEXT, Args, 13);
123
124 XtManageChild(Button[Counter].BUTTON);
125 }
126 else if (Button[Counter].TEXT != (char *) NULL) {
127 XtSetArg(Args[0], XmNrows, 10);
128 XtSetArg(Args[1], XmNeditable, False);
129 XtSetArg(Args[2], XmNeditMode, XmMULTI_LINE_EDIT);
130 XtSetArg(Args[3], XmNcursorPositionVisible, False);
131 XtSetArg(Args[4], XmNtopAttachment, XmATTACH_POSITION);
132 XtSetArg(Args[5], XmNtopPosition, Y1);
133 XtSetArg(Args[6], XmNleftAttachment, XmATTACH_POSITION);
134 XtSetArg(Args[7], XmNleftPosition, X1);
135 XtSetArg(Args[8], XmNbottomAttachment, XmATTACH_POSITION);
136 XtSetArg(Args[9], XmNbottomPosition, Y2);
137 XtSetArg(Args[10], XmNrightAttachment, XmATTACH_POSITION);
138 XtSetArg(Args[11], XmNrightPosition, X2);
139
140 Button[Counter].BUTTON = XmCreateScrolledText(Panel->FORM, Button[Counter].TEXT, Args, 12);
141
142 XtManageChild(Button[Counter].BUTTON);
143 }
144 else if (Button[Counter].BITMAP != (char *) NULL) {
145 ButtonPixmap = XyagCreatePixmap(Father,
146 Button[Counter].BITMAP,
147 Button[Counter].WIDTH,
148 Button[Counter].HEIGHT);
149
150 Button[Counter].BUTTON = XtVaCreateManagedWidget(Label,
151 xmPushButtonWidgetClass,
152 Panel->FORM,
153 XmNlabelType, XmPIXMAP,
154 XmNlabelPixmap, ButtonPixmap,
155 XmNleftAttachment, XmATTACH_POSITION,
156 XmNleftPosition, X1,
157 XmNrightAttachment, XmATTACH_POSITION,
158 XmNrightPosition, X2,
159 XmNtopAttachment, XmATTACH_POSITION,
160 XmNtopPosition, Y1,
161 XmNbottomAttachment, XmATTACH_POSITION,
162 XmNbottomPosition, Y2,
163 NULL);
164 }
165 else {
166 Button[Counter].BUTTON = XtVaCreateManagedWidget(Label,
167 xmPushButtonWidgetClass,
168 Panel->FORM,
169 XmNleftAttachment, XmATTACH_POSITION,
170 XmNleftPosition, X1,
171 XmNrightAttachment, XmATTACH_POSITION,
172 XmNrightPosition, X2,
173 XmNtopAttachment, XmATTACH_POSITION,
174 XmNtopPosition, Y1,
175 XmNbottomAttachment, XmATTACH_POSITION,
176 XmNbottomPosition, Y2,
177 NULL);
178 }
179
180
181 if (Label != XyagPanelButtonDisable) {
182 if (Button[Counter].FOREGROUND != NULL) {
183 XtVaSetValues(Button[Counter].BUTTON,
184 XtVaTypedArg, XmNforeground,
185 XmRString,
186 *Button[Counter].FOREGROUND,
187 strlen(*Button[Counter].FOREGROUND) + 1,
188 NULL);
189 }
190
191 if (Button[Counter].BACKGROUND != NULL) {
192 XtVaSetValues(Button[Counter].BUTTON,
193 XtVaTypedArg, XmNbackground,
194 XmRString,
195 *Button[Counter].BACKGROUND,
196 strlen(*Button[Counter].BACKGROUND) + 1,
197 NULL
198 );
199 }
200
201 if (Button[Counter].CALLBACK != NULL) {
202 if ((Button[Counter].TEXT != (char *) NULL) &&
203 (Button[Counter].BITMAP != (char *) NULL)) {
204 XtAddCallback(Button[Counter].BUTTON,
205 XmNdefaultActionCallback,
206 Button[Counter].CALLBACK,
207 (XtPointer) NULL);
208
209 XtAddCallback(Button[Counter].BUTTON,
210 XmNmultipleSelectionCallback,
211 Button[Counter].CALLBACK,
212 Button[Counter].CALLDATA);
213
214 }
215 else {
216 XtAddCallback(Button[Counter].BUTTON,
217 XmNactivateCallback,
218 Button[Counter].CALLBACK,
219 Button[Counter].CALLDATA);
220 }
221 }
222 }
223 else {
224 Button[Counter].BUTTON = NULL;
225 }
226 }
227
228 XtVaSetValues(Panel->PANEL,
229 XmNresizable, False,
230 XmNx, Panel->X,
231 XmNy, Panel->Y,
232 XmNheight, Panel->HEIGHT,
233 XmNwidth, Panel->WIDTH,
234 NULL);
235 }
236
237 /*------------------------------------------------------------\
238 | XyagEnterPanel |
239 \------------------------------------------------------------*/
240
241 void
242 XyagEnterPanel(Panel)
243 XyagPanelItem *Panel;
244 {
245 XtManageChild(Panel->PANEL);
246 XtPopup(XtParent(Panel->PANEL), XtGrabNone);
247
248 if (Panel->COMPUTE == 1) {
249 // XtVaSetValues(Panel->PANEL,
250 // XmNresizable, False,
251 // XmNx, Panel->X,
252 // XmNy, Panel->Y,
253 // XmNheight, Panel->HEIGHT,
254 // XmNwidth, Panel->WIDTH,
255 // NULL);
256 //
257 Panel->COMPUTE = 0;
258 }
259
260 Panel->MANAGED = 1;
261 }
262
263 /*------------------------------------------------------------\
264 | XyagExitPanel |
265 \------------------------------------------------------------*/
266
267 void
268 XyagExitPanel(Panel)
269 XyagPanelItem *Panel;
270 {
271 XtUnmanageChild(Panel->PANEL);
272 Panel->MANAGED = 0;
273 }