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