1 /***********************************************************************/
2 /* Open Visualization Data Explorer */
3 /* (C) Copyright IBM Corp. 1989,1999 */
4 /* ALL RIGHTS RESERVED */
5 /* This code licensed under the */
6 /* "IBM PUBLIC LICENSE - Open Visualization Data Explorer" */
7 /***********************************************************************/
8
9 #include <dxconfig.h>
10 #include "../base/defines.h"
11
12
13
14
15 #include "Application.h"
16 #include "DescrDialog.h"
17 #include "Node.h"
18 #include "NodeDefinition.h"
19 #include "ParameterDefinition.h"
20
21 #include <Xm/Form.h>
22 #include <Xm/Label.h>
23 #include <Xm/PushB.h>
24 #include <Xm/Separator.h>
25
26 boolean DescrDialog::ClassInitialized = FALSE;
27 String DescrDialog::DefaultResources[] =
28 {
29 "*dialogTitle: Description of %s",
30 "*descrLabel.labelString: Module Description:",
31 "*descrLabel.foreground: SteelBlue",
32 "*closeButton.labelString: Close",
33 "*closeButton.width: 70",
34 "*inputTitle.labelString: Inputs:",
35 "*inputTitle.foreground : SteelBlue",
36 "*inputNameTitle.labelString: Name",
37 "*inputNameTitle.width: 120",
38 "*inputNameTitle.foreground: SteelBlue",
39 "*inputAttributeTitle.labelString: Attributes",
40 "*inputAttributeTitle.width: 100",
41 "*inputAttributeTitle.foreground: SteelBlue",
42 "*inputDescriptionTitle.labelString: Description",
43 "*inputDescriptionTitle.foreground: SteelBlue",
44 "*outputTitle.labelString: Outputs:",
45 "*outputTitle.foreground: SteelBlue",
46 "*outputNameTitle.labelString: Name",
47 "*outputNameTitle.width: 120",
48 "*outputNameTitle.foreground: SteelBlue",
49 "*outputDescriptionTitle.labelString: Description",
50 "*outputDescriptionTitle.foreground: SteelBlue",
51 NULL
52 };
53
createDialog(Widget parent)54 Widget DescrDialog::createDialog(Widget parent)
55 {
56 int i;
57 Arg a[1];
58 XtSetArg(a[0], XmNresizePolicy, XmRESIZE_GROW);
59 // Widget dialog = XmCreateFormDialog(parent, this->name, a, 1);
60 Widget dialog = this->CreateMainForm(parent, this->name, a, 1);
61
62 NodeDefinition *def = this->node->getDefinition();
63
64 XmString titleString;
65 char *title;
66 XtVaGetValues(dialog, XmNdialogTitle, &titleString, NULL);
67 XmStringGetLtoR(titleString, XmSTRING_DEFAULT_CHARSET, &title);
68 char buffer[100];
69 sprintf(buffer, title, this->node->getNameString());
70 XtFree(title);
71 titleString = XmStringCreate(buffer, XmSTRING_DEFAULT_CHARSET);
72 XtVaSetValues(dialog, XmNdialogTitle, titleString, NULL);
73 XmStringFree(titleString);
74
75 Widget descrLabel = XtVaCreateManagedWidget(
76 "descrLabel",
77 xmLabelWidgetClass,
78 dialog,
79 XmNtopAttachment , XmATTACH_FORM,
80 XmNtopOffset , 10,
81 XmNleftAttachment , XmATTACH_FORM,
82 XmNleftOffset , 5,
83 XmNalignment , XmALIGNMENT_BEGINNING,
84 NULL);
85
86 const char *desc = this->node->getDescription();
87 if (desc)
88 {
89 XmString descriptionString = XmStringCreate((char *)desc,
90 XmSTRING_DEFAULT_CHARSET);
91 Widget description = XtVaCreateManagedWidget(
92 "description",
93 xmLabelWidgetClass,
94 dialog,
95 XmNtopAttachment , XmATTACH_FORM,
96 XmNtopOffset , 10,
97 XmNleftAttachment , XmATTACH_WIDGET,
98 XmNleftWidget , descrLabel,
99 XmNleftOffset , 10,
100 XmNrightAttachment , XmATTACH_FORM,
101 XmNrightOffset , 10,
102 XmNalignment , XmALIGNMENT_BEGINNING,
103 XmNlabelString , descriptionString,
104 NULL);
105 XmStringFree(descriptionString);
106 }
107
108 Widget buttonTop = descrLabel;
109
110 int viewableCount = 0;
111 int inputCount = def->getInputCount();
112 for (i = 1; i <= inputCount; ++i)
113 if (def->getInputDefinition(i)->isViewable())
114 ++viewableCount;
115 if (viewableCount > 0)
116 {
117 Widget inputForm = XtVaCreateManagedWidget(
118 "inputForm",
119 xmFormWidgetClass,
120 dialog,
121 XmNtopAttachment , XmATTACH_WIDGET,
122 XmNtopWidget , descrLabel,
123 XmNleftAttachment , XmATTACH_FORM,
124 XmNleftOffset , 5,
125 XmNrightAttachment , XmATTACH_FORM,
126 XmNrightOffset , 5,
127 NULL);
128 buttonTop = inputForm;
129
130 Widget inputTitle = XtVaCreateManagedWidget(
131 "inputTitle",
132 xmLabelWidgetClass,
133 inputForm,
134 XmNtopAttachment , XmATTACH_FORM,
135 XmNtopOffset , 10,
136 XmNleftAttachment , XmATTACH_FORM,
137 XmNalignment , XmALIGNMENT_BEGINNING,
138 NULL);
139
140 Widget inputNameTitle = XtVaCreateManagedWidget(
141 "inputNameTitle",
142 xmLabelWidgetClass,
143 inputForm,
144 XmNtopAttachment , XmATTACH_WIDGET,
145 XmNtopWidget , inputTitle,
146 XmNleftAttachment , XmATTACH_FORM,
147 XmNalignment , XmALIGNMENT_BEGINNING,
148 NULL);
149
150 Widget inputAttributeTitle = XtVaCreateManagedWidget(
151 "inputAttributeTitle",
152 xmLabelWidgetClass,
153 inputForm,
154 XmNtopAttachment , XmATTACH_WIDGET,
155 XmNtopWidget , inputTitle,
156 XmNrightAttachment , XmATTACH_FORM,
157 XmNalignment , XmALIGNMENT_BEGINNING,
158 NULL);
159
160 Widget inputDescriptionTitle = XtVaCreateManagedWidget(
161 "inputDescriptionTitle",
162 xmLabelWidgetClass,
163 inputForm,
164 XmNtopAttachment , XmATTACH_WIDGET,
165 XmNtopWidget , inputTitle,
166 XmNleftAttachment , XmATTACH_WIDGET,
167 XmNleftWidget , inputNameTitle,
168 XmNrightAttachment , XmATTACH_WIDGET,
169 XmNrightWidget , inputAttributeTitle,
170 XmNalignment , XmALIGNMENT_BEGINNING,
171 NULL);
172 Widget nameTop = inputNameTitle;
173 Widget attrTop = inputAttributeTitle;
174 Widget descTop = inputDescriptionTitle;
175 for (i = 1; i <= inputCount; ++i)
176 {
177 ParameterDefinition *pd = def->getInputDefinition(i);
178 if (pd->isViewable())
179 {
180 Widget name = XtVaCreateManagedWidget(
181 pd->getNameString(),
182 xmLabelWidgetClass,
183 inputForm,
184 XmNtopAttachment, XmATTACH_WIDGET,
185 XmNtopWidget, nameTop,
186 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
187 XmNleftWidget, inputNameTitle,
188 XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET,
189 XmNrightWidget, inputNameTitle,
190 XmNalignment, XmALIGNMENT_BEGINNING,
191 NULL);
192
193 Widget attr = XtVaCreateManagedWidget(
194 (pd->isRequired()? "Required":
195 (i > def->getInputCount() - def->getInputRepeatCount()?
196 "Repeatable": "-")),
197 xmLabelWidgetClass,
198 inputForm,
199 XmNtopAttachment, XmATTACH_WIDGET,
200 XmNtopWidget, attrTop,
201 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
202 XmNleftWidget, inputAttributeTitle,
203 XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET,
204 XmNrightWidget, inputAttributeTitle,
205 XmNalignment, XmALIGNMENT_BEGINNING,
206 NULL);
207
208 Widget desc = XtVaCreateManagedWidget(
209 pd->getDescription(),
210 xmLabelWidgetClass,
211 inputForm,
212 XmNtopAttachment, XmATTACH_WIDGET,
213 XmNtopWidget, descTop,
214 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
215 XmNleftWidget, inputDescriptionTitle,
216 XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET,
217 XmNrightWidget, inputDescriptionTitle,
218 XmNalignment, XmALIGNMENT_BEGINNING,
219 NULL);
220 Dimension descWidth;
221 Dimension titleWidth;
222 XtVaGetValues(desc, XmNwidth, &descWidth, NULL);
223 XtVaGetValues(inputDescriptionTitle, XmNwidth, &titleWidth,
224 NULL);
225 if (titleWidth < descWidth)
226 XtVaSetValues(inputDescriptionTitle, XmNwidth, descWidth,
227 NULL);
228 nameTop = name;
229 descTop = desc;
230 attrTop = attr;
231 }
232 }
233 }
234
235 viewableCount = 0;
236 int outputCount = def->getOutputCount();
237 for (i = 1; i <= outputCount; ++i)
238 if (def->getOutputDefinition(i)->isViewable())
239 ++viewableCount;
240 if (viewableCount > 0)
241 {
242 Widget outputForm = XtVaCreateManagedWidget(
243 "outputForm",
244 xmFormWidgetClass,
245 dialog,
246 XmNtopAttachment , XmATTACH_WIDGET,
247 XmNtopWidget , buttonTop,
248 XmNleftAttachment , XmATTACH_FORM,
249 XmNleftOffset , 5,
250 XmNrightAttachment , XmATTACH_FORM,
251 XmNrightOffset , 5,
252 NULL);
253 buttonTop = outputForm;
254
255 Widget outputTitle = XtVaCreateManagedWidget(
256 "outputTitle",
257 xmLabelWidgetClass,
258 outputForm,
259 XmNtopAttachment , XmATTACH_FORM,
260 XmNtopOffset , 10,
261 XmNleftAttachment , XmATTACH_FORM,
262 XmNalignment , XmALIGNMENT_BEGINNING,
263 NULL);
264
265 Widget outputNameTitle = XtVaCreateManagedWidget(
266 "outputNameTitle",
267 xmLabelWidgetClass,
268 outputForm,
269 XmNtopAttachment , XmATTACH_WIDGET,
270 XmNtopWidget , outputTitle,
271 XmNleftAttachment , XmATTACH_FORM,
272 XmNalignment , XmALIGNMENT_BEGINNING,
273 NULL);
274
275 Widget outputDescriptionTitle = XtVaCreateManagedWidget(
276 "outputDescriptionTitle",
277 xmLabelWidgetClass,
278 outputForm,
279 XmNtopAttachment , XmATTACH_WIDGET,
280 XmNtopWidget , outputTitle,
281 XmNleftAttachment , XmATTACH_WIDGET,
282 XmNleftWidget , outputNameTitle,
283 XmNrightAttachment , XmATTACH_FORM,
284 XmNalignment , XmALIGNMENT_BEGINNING,
285 NULL);
286 Widget nameTop = outputNameTitle;
287 Widget descTop = outputDescriptionTitle;
288 for (i = 1; i <= outputCount; ++i)
289 {
290 ParameterDefinition *pd = def->getOutputDefinition(i);
291 if (pd->isViewable())
292 {
293 Widget name = XtVaCreateManagedWidget(
294 pd->getNameString(),
295 xmLabelWidgetClass,
296 outputForm,
297 XmNtopAttachment, XmATTACH_WIDGET,
298 XmNtopWidget, nameTop,
299 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
300 XmNleftWidget, outputNameTitle,
301 XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET,
302 XmNrightWidget, outputNameTitle,
303 XmNalignment, XmALIGNMENT_BEGINNING,
304 NULL);
305
306
307 Widget desc = XtVaCreateManagedWidget(
308 pd->getDescription(),
309 xmLabelWidgetClass,
310 outputForm,
311 XmNtopAttachment, XmATTACH_WIDGET,
312 XmNtopWidget, descTop,
313 XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
314 XmNleftWidget, outputDescriptionTitle,
315 XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET,
316 XmNrightWidget, outputDescriptionTitle,
317 XmNalignment, XmALIGNMENT_BEGINNING,
318 NULL);
319
320 Dimension descWidth;
321 Dimension titleWidth;
322 XtVaGetValues(desc, XmNwidth, &descWidth, NULL);
323 XtVaGetValues(outputDescriptionTitle, XmNwidth, &titleWidth,
324 NULL);
325 if (titleWidth < descWidth)
326 XtVaSetValues(outputDescriptionTitle, XmNwidth, descWidth,
327 NULL);
328
329 nameTop = name;
330 descTop = desc;
331 }
332 }
333 }
334
335 Widget sep = XtVaCreateManagedWidget(
336 "separator",
337 xmSeparatorWidgetClass,
338 dialog,
339 XmNtopAttachment , XmATTACH_WIDGET,
340 XmNtopWidget , buttonTop,
341 XmNtopOffset , 10,
342 XmNleftAttachment , XmATTACH_FORM,
343 XmNleftOffset , 2,
344 XmNrightAttachment , XmATTACH_FORM,
345 XmNrightOffset , 2,
346 NULL);
347
348 this->cancel = XtVaCreateManagedWidget(
349 "closeButton",
350 xmPushButtonWidgetClass,
351 dialog,
352 XmNtopAttachment , XmATTACH_WIDGET,
353 XmNtopWidget , sep,
354 XmNtopOffset , 10,
355 XmNleftAttachment , XmATTACH_FORM,
356 XmNleftOffset , 10,
357 XmNbottomAttachment, XmATTACH_FORM,
358 XmNbottomOffset , 10,
359 NULL);
360
361 return dialog;
362 }
363
DescrDialog(Widget parent,Node * n)364 DescrDialog::DescrDialog(Widget parent, Node *n) :
365 Dialog("descrDialog", parent)
366 {
367
368 if (NOT DescrDialog::ClassInitialized)
369 {
370 DescrDialog::ClassInitialized = TRUE;
371 this->installDefaultResources(theApplication->getRootWidget());
372 }
373 this->node = n;
374 }
375
~DescrDialog()376 DescrDialog::~DescrDialog()
377 {
378 }
379 //
380 // Install the default resources for this class.
381 //
installDefaultResources(Widget baseWidget)382 void DescrDialog::installDefaultResources(Widget baseWidget)
383 {
384 this->setDefaultResources(baseWidget, DescrDialog::DefaultResources);
385 this->Dialog::installDefaultResources( baseWidget);
386 }
387