Don't use fstat for readable pipe chars in dtexec.
[oweals/cde.git] / cde / programs / dtcreate / AddFiletype.c
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $TOG: AddFiletype.c /main/8 1999/09/17 15:43:02 mgreess $ */
24 /***************************************************************************/
25 /*                                                                         */
26 /*  AddFiletype.c                                                          */
27 /*                                                                         */
28 /*    Associated Header file:  AddFiletype.h                               */
29 /*                                                                         */
30 /*                                                                         */
31 /***************************************************************************/
32
33 #include <stdio.h>
34 #include <sys/stat.h>
35
36 #include <Xm/Xm.h>
37 #include <Xm/MwmUtil.h>
38 #include <Xm/DialogS.h>
39 #include <Xm/MenuShell.h>
40 #include <Xm/Separator.h>
41 #include <Xm/Text.h>
42 #include <Xm/ScrolledW.h>
43 #include <Xm/PushB.h>
44 #include <Xm/Form.h>
45 #include <Xm/Text.h>
46 #include <Xm/PushBG.h>
47 #include <Xm/TextF.h>
48 #include <Xm/Label.h>
49 #include <Xm/Form.h>
50
51 #include <Dt/Icon.h>
52
53 #include "UxXt.h"
54 #include "dtcreate.h"
55 #include "af_aux.h"
56 #include "CreateActionAppShell.h"
57 #include "cmncbs.h"
58
59 #define CONTEXT_MACRO_ACCESS 1
60 #include "AddFiletype.h"
61 #undef CONTEXT_MACRO_ACCESS
62
63 /*******************************************************************************
64        Global declarations.
65 *******************************************************************************/
66 /*
67 enum mode {NONE, NEW, SAVE, QUIT};
68 Widget activateField;
69 Widget Licon2;
70 extern int do_which;
71 enum icon_size_range filetype_icon_size = None_Selected;
72 */
73 enum icon_size_range filetype_icon_size;
74
75
76 /*******************************************************************************
77        The following are callback functions.
78 *******************************************************************************/
79
80 #if 0
81 /******************************************************************************/
82 /*                                                                            */
83 /* LayoutCB_AddFiletype                                                       */
84 /*                                                                            */
85 /* INPUT:  Widget    wid       - window id                                    */
86 /*         XtPointer cdata     - client data                                  */
87 /*         XtPointer *cbstruct - callback data                                */
88 /* OUTPUT: none                                                               */
89 /*                                                                            */
90 /******************************************************************************/
91 void LayoutCB_AddFiletype(Widget wid, XtPointer cdata, XtPointer cbs)
92 {
93   printf("In layout callback of AddFiletype\n");
94 }
95 #endif
96
97 /******************************************************************************/
98 /* activateCB_edit_id_characteristics - bring up file characteristics dialog  */
99 /* INPUT:  Widget filesel - edit button id                                    */
100 /*         XtPointer cdata - client data                                      */
101 /*         XtPointer *cbstruct - callback data                                */
102 /* OUTPUT: none                                                               */
103 /******************************************************************************/
104 void activateCB_edit_id_characteristics (Widget filesel, XtPointer cdata,
105                    XmFileSelectionBoxCallbackStruct *cbstruct)
106 {
107   FiletypeData  *pFtD;
108
109   XtVaGetValues (AddFiletype,
110                  XmNuserData, &pFtD,
111                  NULL);
112
113 /*FileCharacteristics = create_FileCharacteristics();*/
114
115   XtVaSetValues (FileCharacteristics,
116                  XmNuserData, pFtD,
117                  NULL);
118   clear_FileCharacteristics_dialog_fields();
119   init_FileCharacteristics_dialog_fields(pFtD);
120   UxPopupInterface (FILE_CHARACTERISTICS, no_grab);
121   return;
122 }
123
124 static  void    activateCB_AF_OkButton( Widget  UxWidget,
125                                        XtPointer UxClientData,
126                                        XtPointer UxCallbackArg)
127 {
128   FiletypeData  *pFtD;
129   FiletypeData  **papArray;
130   int           i;
131
132   /**************************************************************************/
133   /* Check if fields are valid.                                             */
134   /**************************************************************************/
135   if (!AddFiletypeCheckFields()) {
136
137      /***********************************************************************/
138      /* Get FiletypeData structure that was allocated when Add button on    */
139      /* the CreateActionAppShell interface was activated.                   */
140      /***********************************************************************/
141      XtVaGetValues(AddFiletype, XmNuserData, &pFtD, NULL);
142
143      /***********************************************************************/
144      /* Get all values from gui                                             */
145      /***********************************************************************/
146      readAFFromGUI(pFtD);
147
148      /***********************************************************************/
149      /* If in edit mode, then don't do add type things.                     */
150      /***********************************************************************/
151      if (!(pFtD->fsInternal & CA_FT_EDIT)) {
152
153         /********************************************************************/
154         /* Update the Filetype listbox with this new filetype               */
155         /********************************************************************/
156         AddFiletypeToList();
157
158         /********************************************************************/
159         /* Update FiletypeData array within the ActionData structure        */
160         /********************************************************************/
161         UpdateFiletypeDataArray(pFtD);
162
163      }
164
165      /***********************************************************************/
166      /* Unset previous set values.                                          */
167      /***********************************************************************/
168      pFtD->fsInternal &= (~(CA_FT_APPLY));
169      pFtD->fsInternal &= (~(CA_FT_EDIT));
170
171      /***********************************************************************/
172      /* Pop down the AddFiletype interface                                  */
173      /***********************************************************************/
174      UxPopdownInterface(AddFiletype);
175   }
176 }
177
178 static  void    activateCB_AF_ApplyButton( Widget UxWidget,
179                                           XtPointer UxClientData,
180                                           XtPointer UxCallbackArg)
181 {
182   FiletypeData  *pFtD;
183
184   /**************************************************************************/
185   /* Check if fields are valid.                                             */
186   /**************************************************************************/
187   if (!AddFiletypeCheckFields()) {
188
189      /***********************************************************************/
190      /* Get FiletypeData structure that was allocated when Add button on    */
191      /* the CreateActionAppShell interface was activated.                   */
192      /***********************************************************************/
193      XtVaGetValues(AddFiletype, XmNuserData, &pFtD, NULL);
194
195      /***********************************************************************/
196      /* Get all values from gui                                             */
197      /***********************************************************************/
198      readAFFromGUI(pFtD);
199
200      /***********************************************************************/
201      /* Set the variable that indicates that Apply button was used.         */
202      /***********************************************************************/
203      pFtD->fsInternal |= CA_FT_APPLY;
204
205      /***********************************************************************/
206      /* If in edit mode, then don't do apply type things.                   */
207      /***********************************************************************/
208      if (!(pFtD->fsInternal & CA_FT_EDIT)) {
209
210         /********************************************************************/
211         /* Update the Filetype listbox with this new filetype               */
212         /********************************************************************/
213         if (XmListItemExists(CA_FiletypesList, XmStringCreateSimple("NONE"))) {
214           XmListDeleteItem(CA_FiletypesList, XmStringCreateSimple("NONE"));
215         }
216         AddFiletypeToList();
217
218         /********************************************************************/
219         /* Update FiletypeData array within the ActionData structure        */
220         /********************************************************************/
221         UpdateFiletypeDataArray(pFtD);
222
223      }
224   }
225 }
226
227 static  void    activateCB_AF_CancelButton( Widget UxWidget,
228                                            XtPointer UxClientData,
229                                            XtPointer UxCallbackArg)
230 {
231    FiletypeData *pFtD;
232
233    UxPopdownInterface(AddFiletype);
234    XtVaGetValues(AddFiletype, XmNuserData, &pFtD, NULL);
235    if (!((pFtD->fsInternal & CA_FT_APPLY) || (pFtD->fsInternal & CA_FT_EDIT))) {
236       free_Filetypedata(pFtD);
237    } else {
238       pFtD->fsInternal &= (~(CA_FT_APPLY));
239       pFtD->fsInternal &= (~(CA_FT_EDIT));
240    }
241 }
242
243 /*******************************************************************************
244        The 'build_' function creates all the widgets
245        using the resource values specified in the Property Editor.
246 *******************************************************************************/
247
248 static Widget   _Uxbuild_AddFiletype(void)
249 {
250         Widget                _UxParent;
251         char                  *UxTmp0;
252         Widget                AF_CharacteristicsWindow;
253         Widget                ActionAreaForm;
254         int                   ntotalbuttons = 4;
255         int                   nbutton = 0;
256         Widget                AF_ScrolledWindow;
257         Widget                AF_BigForm;
258         Dimension             dim1, dim2, dim3;
259         Widget                AF_MED_IconForm, AF_TINY_IconForm;
260         IconData             *pIconData;
261         char                 *pre, *suf, *title;
262
263         XmString              emptyString;
264     size_t len;
265
266 #define TIGHTNESS             20
267 #define ICON_MIN_HEIGHT       83
268 #define FINDEDIT_SPACING       6
269 #define BORDER_OFFSET          3
270
271         /* Creation of AddFiletype */
272         _UxParent = UxParent;
273         if ( _UxParent == NULL )
274         {
275              _UxParent = UxTopLevel;
276         }
277
278         pre = GETMESSAGE(3, 10, "Create Action");
279         suf = GETMESSAGE(7, 10, "Add Datatype");
280         len = strlen(pre) + strlen(suf) + 4;
281         title = XtMalloc(len);
282         snprintf(title,len - 1, "%s - %s", pre, suf);
283
284         _UxParent = XtVaCreatePopupShell( "AddFiletype_shell",
285                         xmDialogShellWidgetClass, _UxParent,
286                         XmNx, 422,
287                         XmNy, 148,
288                         XmNshellUnitType, XmPIXELS,
289                         XmNtitle, title,
290                         NULL );
291         /*
292         XtAddCallback(_UxParent, XmNpopupCallback, LayoutCB_AddFiletype, NULL);
293         */
294
295         if (bLowRes) {
296            AF_BigForm = XtVaCreateWidget( "AF_BigForm",
297                            xmFormWidgetClass,
298                            _UxParent,
299                            XmNunitType, XmPIXELS,
300                            XmNdialogStyle, XmDIALOG_APPLICATION_MODAL,
301                            RES_CONVERT( XmNdialogTitle, title ),
302                            XmNautoUnmanage, FALSE,
303                            NULL );
304            AF_ScrolledWindow = XtVaCreateManagedWidget( "AF_ScrolledWindow",
305                            xmScrolledWindowWidgetClass,
306                            AF_BigForm,
307                            XmNscrollingPolicy, XmAUTOMATIC,
308                            XmNleftAttachment, XmATTACH_FORM,
309                            XmNrightAttachment, XmATTACH_FORM,
310                            XmNbottomAttachment, XmATTACH_FORM,
311                            XmNtopAttachment, XmATTACH_FORM,
312                            NULL );
313            XtVaSetValues(AF_BigForm, XmNuserData, AF_ScrolledWindow, NULL);
314
315            AddFiletype = XtVaCreateManagedWidget( "AddFiletype",
316                            xmFormWidgetClass,
317                            AF_ScrolledWindow,
318                            NULL );
319         } else {
320            AddFiletype = XtVaCreateWidget( "AddFiletype",
321                            xmFormWidgetClass,
322                            _UxParent,
323                            XmNunitType, XmPIXELS,
324                            XmNdialogStyle, XmDIALOG_APPLICATION_MODAL,
325                            RES_CONVERT( XmNdialogTitle, title ),
326                            XmNautoUnmanage, FALSE,
327                            NULL );
328         }
329
330         XtFree(title);
331
332         XtAddCallback( AddFiletype, XmNhelpCallback,
333                 (XtCallbackProc) helpCB_general,
334                 (XtPointer) HELP_ADDFILETYPE );
335
336         /* Creation of AF_FiletypeFamilyNameLabel */
337         AF_FiletypeFamilyNameLabel = XtVaCreateManagedWidget( "AF_FiletypeFamilyNameLabel",
338                         xmLabelWidgetClass,
339                         AddFiletype,
340                         RES_CONVERT( XmNlabelString, GETMESSAGE(7, 14, "Name of Datatype Family:")),
341                         XmNalignment, XmALIGNMENT_BEGINNING,
342                         XmNtopOffset, 15,
343                         XmNtopAttachment, XmATTACH_FORM,
344                         XmNleftOffset, 10,
345                         XmNleftAttachment, XmATTACH_FORM,
346                         XmNrightOffset, 10,
347                         XmNrightAttachment, XmATTACH_FORM,
348                         NULL );
349
350         /* Creation of AF_FileTypeNameTextField */
351         AF_FileTypeNameTextField = XtVaCreateManagedWidget( "AF_FileTypeNameTextField",
352                         xmTextFieldWidgetClass,
353                         AddFiletype,
354                         XmNtopOffset, 0,
355                         XmNtopWidget, AF_FiletypeFamilyNameLabel,
356                         XmNtopAttachment, XmATTACH_WIDGET,
357                         XmNleftOffset, 10,
358                         XmNleftAttachment, XmATTACH_FORM,
359                         XmNrightOffset, 10,
360                         XmNrightAttachment, XmATTACH_FORM,
361                         NULL );
362
363         ActionAreaForm = XtVaCreateManagedWidget( "ActionAreaForm",
364                         xmFormWidgetClass,
365                         AddFiletype,
366                         XmNnavigationType, XmTAB_GROUP,
367                         XmNskipAdjust, TRUE,
368                         XmNfractionBase, ((TIGHTNESS * ntotalbuttons) - 1),
369                         XmNleftOffset, 10,
370                         XmNleftAttachment, XmATTACH_FORM,
371                         XmNrightOffset, 10,
372                         XmNrightAttachment, XmATTACH_FORM,
373                         XmNbottomOffset, 20,
374                         XmNbottomAttachment, XmATTACH_FORM,
375                         NULL );
376
377         /* Creation of AF_OkButton */
378         AF_OkButton = XtVaCreateManagedWidget( "AF_OkButton",
379                         xmPushButtonGadgetClass,
380                         ActionAreaForm,
381                         RES_CONVERT( XmNlabelString, GETMESSAGE(6, 10, "OK")),
382                         XmNmultiClick, XmMULTICLICK_DISCARD,
383                         XmNleftAttachment, nbutton ?
384                                             XmATTACH_POSITION : XmATTACH_FORM,
385                         XmNleftPosition, TIGHTNESS * nbutton,
386                         XmNrightAttachment, nbutton != (ntotalbuttons - 1) ?
387                                              XmATTACH_POSITION : XmATTACH_FORM,
388                         XmNrightPosition, (TIGHTNESS * nbutton)+(TIGHTNESS - 1),
389                         NULL );
390         nbutton++;
391         XtAddCallback( AF_OkButton, XmNactivateCallback,
392                 (XtCallbackProc) activateCB_AF_OkButton,
393                 (XtPointer) NULL );
394
395         /* Creation of AF_ApplyButton */
396         AF_ApplyButton = XtVaCreateManagedWidget( "AF_ApplyButton",
397                         xmPushButtonGadgetClass,
398                         ActionAreaForm,
399                         RES_CONVERT( XmNlabelString, GETMESSAGE(6, 11, "Apply")),
400                         XmNleftAttachment, nbutton ?
401                                             XmATTACH_POSITION : XmATTACH_FORM,
402                         XmNleftPosition, TIGHTNESS * nbutton,
403                         XmNrightAttachment, nbutton != (ntotalbuttons - 1) ?
404                                              XmATTACH_POSITION : XmATTACH_FORM,
405                         XmNrightPosition, (TIGHTNESS * nbutton)+(TIGHTNESS - 1),
406                         NULL );
407         nbutton++;
408         XtAddCallback( AF_ApplyButton, XmNactivateCallback,
409                 (XtCallbackProc) activateCB_AF_ApplyButton,
410                 (XtPointer) NULL );
411
412         /* Creation of AF_CancelButton */
413         AF_CancelButton = XtVaCreateManagedWidget( "AF_CancelButton",
414                         xmPushButtonGadgetClass,
415                         ActionAreaForm,
416                         RES_CONVERT( XmNlabelString, GETMESSAGE(6, 12, "Cancel")),
417                         XmNleftAttachment, nbutton ?
418                                             XmATTACH_POSITION : XmATTACH_FORM,
419                         XmNleftPosition, TIGHTNESS * nbutton,
420                         XmNrightAttachment, nbutton != (ntotalbuttons - 1) ?
421                                              XmATTACH_POSITION : XmATTACH_FORM,
422                         XmNrightPosition, (TIGHTNESS * nbutton)+(TIGHTNESS - 1),
423                         NULL );
424         nbutton++;
425         XtAddCallback( AF_CancelButton, XmNactivateCallback,
426                 (XtCallbackProc) activateCB_AF_CancelButton,
427                 (XtPointer) NULL );
428
429         /* Creation of AF_HelpButton */
430         AF_HelpButton = XtVaCreateManagedWidget( "AF_HelpButton",
431                         xmPushButtonGadgetClass,
432                         ActionAreaForm,
433                         RES_CONVERT( XmNlabelString, GETMESSAGE(6, 13, "Help")),
434                         XmNuserData, AddFiletype,
435                         XmNleftAttachment, nbutton ?
436                                             XmATTACH_POSITION : XmATTACH_FORM,
437                         XmNleftPosition, TIGHTNESS * nbutton,
438                         XmNrightAttachment, nbutton != (ntotalbuttons - 1) ?
439                                              XmATTACH_POSITION : XmATTACH_FORM,
440                         XmNrightPosition, (TIGHTNESS * nbutton)+(TIGHTNESS - 1),
441                         NULL );
442         nbutton++;
443         XtAddCallback( AF_HelpButton, XmNactivateCallback,
444                 (XtCallbackProc) helpCB_general,
445                 (XtPointer) HELP_ADDFILETYPE );
446
447         /* Creation of AF_IdCharacteristicsLabel */
448         AF_IdCharacteristicsLabel = XtVaCreateManagedWidget( "AF_IdCharacteristicsLabel",
449                         xmLabelWidgetClass,
450                         AddFiletype,
451                         RES_CONVERT( XmNlabelString, GETMESSAGE(7, 15, "Identifying Characteristics:")),
452                         XmNalignment, XmALIGNMENT_BEGINNING,
453                         XmNtopOffset, 10,
454                         XmNtopWidget, AF_FileTypeNameTextField,
455                         XmNtopAttachment, XmATTACH_WIDGET,
456                         XmNleftOffset, 10,
457                         XmNleftAttachment, XmATTACH_FORM,
458                         XmNrightOffset, 10,
459                         XmNrightAttachment, XmATTACH_FORM,
460                         NULL );
461
462         /* Creation of AF_IdCharacteristicsText */
463         AF_IdCharacteristicsText = XtVaCreateManagedWidget( "AF_IdCharacteristicsText",
464                         xmTextWidgetClass,
465                         AddFiletype,
466                         XmNheight, 90,
467                         XmNeditMode, XmMULTI_LINE_EDIT ,
468                         XmNeditable, FALSE,
469                         XmNrows, 3,
470                         XmNleftOffset, 10,
471                         XmNleftAttachment, XmATTACH_FORM,
472                         XmNtopOffset, 0,
473                         XmNtopWidget, AF_IdCharacteristicsLabel,
474                         XmNtopAttachment, XmATTACH_WIDGET,
475                         NULL );
476 #ifdef DEBUG
477         printf("AF_IdCharacteristicsText = %p\n", AF_IdCharacteristicsText);
478 #endif
479
480         /* Creation of AF_IdCharacteristicsEdit */
481         AF_IdCharacteristicsEdit = XtVaCreateManagedWidget( "AF_IdCharacteristicsEdit",
482                         xmPushButtonGadgetClass,
483                         AddFiletype,
484                         RES_CONVERT( XmNlabelString, GETMESSAGE(7, 16, "Edit...")),
485                         XmNalignment, XmALIGNMENT_BEGINNING,
486                         XmNmultiClick, XmMULTICLICK_DISCARD,
487                         XmNnavigationType, XmTAB_GROUP,
488                         XmNtraversalOn, TRUE,
489                         XmNrightOffset, 10,
490                         XmNrightAttachment, XmATTACH_FORM,
491                         XmNbottomWidget, AF_IdCharacteristicsText,
492                         XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
493                         NULL );
494         XtAddCallback( AF_IdCharacteristicsEdit, XmNactivateCallback,
495                 (XtCallbackProc) activateCB_edit_id_characteristics,
496                 (XtPointer) NULL );
497         XtRealizeWidget(AF_IdCharacteristicsEdit);
498         XtVaGetValues(AF_IdCharacteristicsEdit, XmNwidth, &dim1, NULL);
499
500         XtVaSetValues(AF_IdCharacteristicsText,
501                       XmNrightOffset, dim1 + 25,
502                       XmNrightAttachment, XmATTACH_FORM,
503                       NULL);
504
505         /* Creation of AF_FiletypeIconHelpLabel */
506         AF_FiletypeIconHelpLabel = XtVaCreateManagedWidget( "AF_FiletypeIconHelpLabel",
507                       xmLabelWidgetClass,
508                       AddFiletype,
509                       RES_CONVERT( XmNlabelString, GETMESSAGE(7, 17, "Help Text for this Datatype Icon:")),
510                       XmNalignment, XmALIGNMENT_BEGINNING,
511                       XmNleftOffset, 10,
512                       XmNleftAttachment, XmATTACH_FORM,
513                       XmNrightOffset, 10,
514                       XmNrightAttachment, XmATTACH_FORM,
515                       XmNtopOffset, 10,
516                       XmNtopWidget, AF_IdCharacteristicsText,
517                       XmNtopAttachment, XmATTACH_WIDGET,
518                       NULL );
519
520         /*
521         XtVaSetValues(AF_IdCharacteristicsText,
522                       XmNrightWidget, AF_IdCharacteristicsEdit,
523                       XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET,
524                       NULL);
525         */
526
527         /* Creation of AF_FiletypePrintCmdTextField */
528         AF_FiletypePrintCmdTextField = XtVaCreateManagedWidget( "AF_FiletypePrintCmdTextField",
529                         xmTextFieldWidgetClass,
530                         AddFiletype,
531                         XmNbottomOffset, 15,
532                         XmNbottomWidget, AF_OkButton,
533                         XmNbottomAttachment, XmATTACH_WIDGET,
534                         XmNleftOffset, 10,
535                         XmNleftAttachment, XmATTACH_FORM,
536                         XmNrightOffset, 10,
537                         XmNrightAttachment, XmATTACH_FORM,
538                         NULL );
539
540         /* Creation of AF_FiletypePrintCmdLabel */
541         AF_FiletypePrintCmdLabel = XtVaCreateManagedWidget( "AF_FiletypePrintCmdLabel",
542                         xmLabelWidgetClass,
543                         AddFiletype,
544                         RES_CONVERT( XmNlabelString, GETMESSAGE(7, 23, "Command to Print this Datatype:")),
545                         XmNalignment, XmALIGNMENT_BEGINNING,
546                         XmNbottomOffset, 0,
547                         XmNbottomWidget, AF_FiletypePrintCmdTextField,
548                         XmNbottomAttachment, XmATTACH_WIDGET,
549                         XmNleftOffset, 10,
550                         XmNleftAttachment, XmATTACH_FORM,
551                         XmNrightOffset, 10,
552                         XmNrightAttachment, XmATTACH_FORM,
553                         NULL );
554
555         /* Creation of AF_OpenCmdText */
556         AF_OpenCmdText = XtVaCreateManagedWidget( "AF_OpenCmdText",
557                         xmTextWidgetClass,
558                         AddFiletype,
559                         XmNeditable, FALSE,
560                         XmNbottomOffset, 15,
561                         XmNbottomWidget, AF_FiletypePrintCmdLabel,
562                         XmNbottomAttachment, XmATTACH_WIDGET,
563                         XmNleftOffset, 10,
564                         XmNleftAttachment, XmATTACH_FORM,
565                         XmNrightOffset, 10,
566                         XmNrightAttachment, XmATTACH_FORM,
567                         XmNrows, 1,
568                         XmNeditMode, XmMULTI_LINE_EDIT ,
569                         NULL );
570
571         /* Creation of AF_OpenFiletypeCmdLabel */
572         AF_OpenFiletypeCmdLabel = XtVaCreateManagedWidget( "AF_OpenFiletypeCmdLabel",
573                         xmLabelWidgetClass,
574                         AddFiletype,
575                         RES_CONVERT( XmNlabelString, GETMESSAGE(7, 22, "Command to Open this Datatype:")),
576                         XmNalignment, XmALIGNMENT_BEGINNING,
577                         XmNbottomOffset, 0,
578                         XmNbottomWidget, AF_OpenCmdText,
579                         XmNbottomAttachment, XmATTACH_WIDGET,
580                         XmNleftOffset, 10,
581                         XmNleftAttachment, XmATTACH_FORM,
582                         XmNrightOffset, 10,
583                         XmNrightAttachment, XmATTACH_FORM,
584                         NULL );
585
586         /* Creation of AF_CommandsLabel */
587         AF_CommandsLabel = XtVaCreateManagedWidget( "AF_CommandsLabel",
588                         xmLabelWidgetClass,
589                         AddFiletype,
590                         XmNalignment, XmALIGNMENT_BEGINNING,
591                         RES_CONVERT( XmNlabelString, GETMESSAGE(7, 21, "Commands")),
592                         XmNleftOffset, 10,
593                         XmNleftAttachment, XmATTACH_FORM,
594                         XmNbottomOffset, 15,
595                         XmNbottomWidget, AF_OpenFiletypeCmdLabel,
596                         XmNbottomAttachment, XmATTACH_WIDGET,
597                         NULL );
598
599         /* Creation of AF_FiletypeIconForm */
600         AF_FiletypeIconForm = XtVaCreateManagedWidget( "AF_FiletypeIconForm",
601                         xmFormWidgetClass,
602                         AddFiletype,
603                         XmNresizePolicy, XmRESIZE_NONE,
604                         XmNborderWidth, 0,
605                         XmNbottomOffset, 20,
606                         XmNbottomWidget, AF_CommandsLabel,
607                         XmNbottomAttachment, XmATTACH_WIDGET,
608                         XmNleftOffset, 10,
609                         XmNleftAttachment, XmATTACH_FORM,
610                         XmNrightOffset, 10,
611                         XmNrightAttachment, XmATTACH_FORM,
612                         XmNshadowType, XmSHADOW_ETCHED_IN,
613                         XmNshadowThickness, 3,
614                         XmNheight, 90,
615                         NULL );
616
617         AF_MED_IconForm = XtVaCreateManagedWidget( "AF_MED_IconForm",
618                         xmFormWidgetClass,
619                         AF_FiletypeIconForm,
620                         XmNresizePolicy, XmRESIZE_NONE,
621                         XmNborderWidth, ICON_BORDER_WIDTH,
622                         XmNleftPosition, 16,
623                         XmNleftOffset, 0,
624                         XmNleftAttachment, XmATTACH_POSITION,
625                         XmNbottomPosition, 88,
626                         XmNbottomOffset, 0,
627                         XmNbottomAttachment, XmATTACH_POSITION,
628                         NULL );
629
630         /* Creation of AF_MED_IconGadget */
631         emptyString = XmStringCreateLocalized("");
632
633         pIconData = (IconData *)XtMalloc(sizeof(IconData));
634         memset(pIconData, 0, sizeof(IconData));
635         IconDataList[AF_MED] = pIconData;
636         AF_MED_IconGadget = XtVaCreateManagedWidget( "AF_MED_IconGadget",
637                         dtIconGadgetClass,
638                         AF_MED_IconForm,
639                         XmNalignment, XmALIGNMENT_CENTER,
640                         XmNuserData, pIconData,
641                         XmNrecomputeSize, TRUE,
642                         XmNstring, emptyString,
643                         XmNleftOffset, BORDER_OFFSET,
644                         XmNleftAttachment, XmATTACH_FORM,
645                         XmNrightOffset, BORDER_OFFSET,
646                         XmNrightAttachment, XmATTACH_FORM,
647                         XmNtopOffset, BORDER_OFFSET,
648                         XmNtopAttachment, XmATTACH_FORM,
649                         XmNbottomOffset, BORDER_OFFSET,
650                         XmNbottomAttachment, XmATTACH_FORM,
651                         NULL );
652         pIconData->wid = AF_MED_IconGadget;
653         pIconData->size = Medium_Icon;
654         XtAddCallback( AF_MED_IconGadget, XmNcallback,
655                 (XtCallbackProc) activateCB_filetype_icon,
656                 (XtPointer) NULL );
657         createCB_IconGadget(AF_MED_IconGadget, FALSE, Medium_Icon);
658         last_filetype_pushed = AF_MED_IconGadget;
659
660         AF_TINY_IconForm = XtVaCreateManagedWidget( "AF_TINY_IconForm",
661                         xmFormWidgetClass,
662                         AF_FiletypeIconForm,
663                         XmNresizePolicy, XmRESIZE_NONE,
664                         XmNleftPosition, 41,
665                         XmNleftOffset, -1,
666                         XmNleftAttachment, XmATTACH_POSITION,
667                         XmNbottomPosition, 86,
668                         XmNbottomOffset, 0,
669                         XmNbottomAttachment, XmATTACH_POSITION,
670                         NULL );
671
672         /* Creation of AF_TINY_IconGadget */
673         pIconData = (IconData *)XtMalloc(sizeof(IconData));
674         memset(pIconData, 0, sizeof(IconData));
675         IconDataList[AF_TINY] = pIconData;
676         AF_TINY_IconGadget = XtVaCreateManagedWidget( "AF_TINY_IconGadget",
677                         dtIconGadgetClass,
678                         AF_TINY_IconForm,
679                         XmNalignment, XmALIGNMENT_CENTER,
680                         XmNuserData, pIconData,
681                         XmNrecomputeSize, TRUE,
682                         XmNstring, emptyString,
683                         XmNleftOffset, BORDER_OFFSET,
684                         XmNleftAttachment, XmATTACH_FORM,
685                         XmNrightOffset, BORDER_OFFSET,
686                         XmNrightAttachment, XmATTACH_FORM,
687                         XmNtopOffset, BORDER_OFFSET,
688                         XmNtopAttachment, XmATTACH_FORM,
689                         XmNbottomOffset, BORDER_OFFSET,
690                         XmNbottomAttachment, XmATTACH_FORM,
691                         NULL );
692         pIconData->wid = AF_TINY_IconGadget;
693         pIconData->size = Tiny_Icon;
694         XtAddCallback( AF_TINY_IconGadget, XmNcallback,
695                 (XtCallbackProc) activateCB_filetype_icon,
696                 (XtPointer) NULL );
697         createCB_IconGadget(AF_TINY_IconGadget, FALSE, Tiny_Icon);
698
699         XmStringFree(emptyString);
700
701         /* Creation of AF_FiletypeIconsEditButton */
702         AF_FiletypeIconsEditButton = XtVaCreateManagedWidget( "AF_FiletypeIconsEditButton",
703                         xmPushButtonGadgetClass,
704                         AF_FiletypeIconForm,
705                         RES_CONVERT( XmNlabelString, GETMESSAGE(6, 20, "Edit Icon...")),
706                         XmNalignment, XmALIGNMENT_BEGINNING,
707                         XmNmultiClick, XmMULTICLICK_DISCARD,
708                         /*XmNnavigationType, XmTAB_GROUP,*/
709                         XmNleftPosition, 64,
710                         XmNleftOffset, -1,
711                         XmNleftAttachment, XmATTACH_POSITION,
712                         NULL );
713         XtAddCallback( AF_FiletypeIconsEditButton, XmNactivateCallback,
714                 (XtCallbackProc) activateCB_edit_icon,
715                 (XtPointer) CA_FILETYPE_ICONS );
716
717         /* Creation of AF_FiletypeIconFindSetButton */
718         AF_FiletypeIconFindSetButton = XtVaCreateManagedWidget( "AF_FiletypeIconFindSetButton",
719                         xmPushButtonGadgetClass,
720                         AF_FiletypeIconForm,
721                         XmNx, 290,
722                         XmNy, 20,
723                         RES_CONVERT( XmNlabelString, GETMESSAGE(6, 19, "Find Set...")),
724                         XmNalignment, XmALIGNMENT_BEGINNING,
725                         /*XmNnavigationType, XmTAB_GROUP,*/
726                         XmNmultiClick, XmMULTICLICK_DISCARD,
727                         XmNleftPosition, 64,
728                         XmNleftOffset, -1,
729                         XmNleftAttachment, XmATTACH_POSITION,
730                         NULL );
731         XtAddCallback( AF_FiletypeIconFindSetButton, XmNactivateCallback,
732                 (XtCallbackProc) activateCB_open_FindSet,
733                 (XtPointer) CA_FILETYPE_ICONS );
734
735         /******************************************************************/
736         /* Determine which button is wider, attach the short one onto it  */
737         /******************************************************************/
738         XtVaGetValues(AF_FiletypeIconsEditButton, XmNwidth, &dim1, NULL);
739         XtVaGetValues(AF_FiletypeIconFindSetButton, XmNwidth, &dim2, NULL);
740         if (dim1 > dim2) {
741            XtVaSetValues(AF_FiletypeIconFindSetButton,
742                          XmNwidth, dim1,
743                          NULL);
744         } else {
745            XtVaSetValues(AF_FiletypeIconsEditButton,
746                          XmNwidth, dim2,
747                          NULL);
748         }
749         /******************************************************************/
750         /* Determine vertical positioning for findset and edit buttons    */
751         /******************************************************************/
752         /*XtRealizeWidget(AF_FiletypeIconForm);*/
753         XtVaGetValues(AF_FiletypeIconForm, XmNheight, &dim3, NULL);
754         XtVaGetValues(AF_FiletypeIconsEditButton, XmNheight, &dim1, NULL);
755         XtVaGetValues(AF_FiletypeIconFindSetButton, XmNheight, &dim2, NULL);
756 #ifdef DEBUG
757         printf("find set size = %d\n", dim2);
758         printf("edit size = %d\n", dim1);
759         printf("icon area form size = %d\n", dim3);
760 #endif
761         if ((int)(dim1 + dim2) + 3*(FINDEDIT_SPACING) > (int)dim3) {
762            XtVaSetValues(AF_FiletypeIconsEditButton,
763                          XmNbottomOffset, FINDEDIT_SPACING,
764                          XmNbottomAttachment, XmATTACH_FORM,
765                          NULL);
766            XtVaSetValues(AF_FiletypeIconFindSetButton,
767                          XmNbottomOffset, FINDEDIT_SPACING,
768                          XmNbottomWidget, AF_FiletypeIconsEditButton,
769                          XmNbottomAttachment, XmATTACH_WIDGET,
770                          XmNtopOffset, FINDEDIT_SPACING,
771                          XmNtopAttachment, XmATTACH_FORM,
772                          NULL);
773         } else {
774            XtVaSetValues(AF_FiletypeIconsEditButton,
775                          XmNtopPosition, 50,
776                          XmNtopOffset, (int)(FINDEDIT_SPACING / 2),
777                          XmNtopAttachment, XmATTACH_POSITION,
778                          NULL);
779            XtVaSetValues(AF_FiletypeIconFindSetButton,
780                          XmNbottomPosition, 50,
781                          XmNbottomOffset, (int)(FINDEDIT_SPACING / 2),
782                          XmNbottomAttachment, XmATTACH_POSITION,
783                          NULL);
784         }
785
786         /******************************************************************/
787         /* Creation of AF_FiletypeIconsBoxLabel                           */
788         /******************************************************************/
789         AF_FiletypeIconsBoxLabel = XtVaCreateManagedWidget( "AF_FiletypeIconsBoxLabel",
790                         xmLabelWidgetClass,
791                         AddFiletype,
792                         RES_CONVERT( XmNlabelString, GETMESSAGE(7, 18, "Datatype Icons:")),
793                         XmNalignment, XmALIGNMENT_BEGINNING,
794                         XmNbottomOffset, 0,
795                         XmNbottomWidget, AF_FiletypeIconForm,
796                         XmNbottomAttachment, XmATTACH_WIDGET,
797                         XmNleftOffset, 10,
798                         XmNleftAttachment, XmATTACH_FORM,
799                         XmNrightOffset, 10,
800                         XmNrightAttachment, XmATTACH_FORM,
801                         NULL );
802
803         /* Creation of AF_FiletypeHelpScrolledWindow */
804         AF_FiletypeHelpScrolledWindow = XtVaCreateManagedWidget( "AF_FiletypeHelpScrolledWindow",
805                         xmScrolledWindowWidgetClass,
806                         AddFiletype,
807                         XmNscrollingPolicy, XmAPPLICATION_DEFINED,
808                         XmNx, 10,
809                         XmNy, 226,
810                         XmNvisualPolicy, XmVARIABLE,
811                         XmNscrollBarDisplayPolicy, XmSTATIC,
812                         XmNshadowThickness, 0,
813                         XmNtopOffset, 0,
814                         XmNtopWidget, AF_FiletypeIconHelpLabel,
815                         XmNtopAttachment, XmATTACH_WIDGET,
816                         XmNbottomOffset, 10,
817                         XmNbottomWidget, AF_FiletypeIconsBoxLabel,
818                         XmNbottomAttachment, XmATTACH_WIDGET,
819                         XmNleftOffset, 10,
820                         XmNleftAttachment, XmATTACH_FORM,
821                         XmNrightOffset, 10,
822                         XmNrightAttachment, XmATTACH_FORM,
823                         XmNheight, 94,
824                         NULL );
825
826         /* Creation of AF_FiletypeHelpText */
827         AF_FiletypeHelpText = XtVaCreateManagedWidget( "AF_FiletypeHelpText",
828                         xmTextWidgetClass,
829                         AF_FiletypeHelpScrolledWindow,
830                         XmNscrollHorizontal, FALSE,
831                         XmNscrollVertical, TRUE,
832                         XmNeditMode, XmMULTI_LINE_EDIT ,
833                         XmNwordWrap, TRUE,
834                         XmNx, 19,
835                         XmNy, 0,
836                         XmNheight, 80,
837                         NULL );
838
839         /* Creation of AF_separator2 */
840         AF_separator2 = XtVaCreateManagedWidget( "AF_separator2",
841                         xmSeparatorWidgetClass,
842                         AddFiletype,
843                         XmNleftOffset, 0,
844                         XmNleftWidget, AF_CommandsLabel,
845                         XmNleftAttachment, XmATTACH_WIDGET,
846                         XmNrightOffset, 10,
847                         XmNrightAttachment, XmATTACH_FORM,
848                         XmNbottomOffset, 10,
849                         XmNbottomWidget, AF_CommandsLabel,
850                         XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
851                         NULL );
852
853 #if 0
854         /* Creation of AF_separator1 */
855         AF_separator1 = XtVaCreateManagedWidget( "AF_separator1",
856                         xmSeparatorWidgetClass,
857                         AddFiletype,
858                         XmNbottomOffset, 0,
859                         XmNbottomWidget, AF_separator2,
860                         XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
861                         XmNleftOffset, 10,
862                         XmNleftAttachment, XmATTACH_FORM,
863                         XmNrightOffset, 0,
864                         XmNrightWidget, AF_CommandsLabel,
865                         XmNrightAttachment, XmATTACH_WIDGET,
866                         NULL );
867 #endif
868
869         XtVaSetValues(AddFiletype,
870                         XmNcancelButton, AF_CancelButton,
871                         XmNdefaultButton, AF_OkButton,
872                         XmNinitialFocus, AF_FileTypeNameTextField,
873                         NULL );
874
875         XtAddCallback( AddFiletype, XmNdestroyCallback,
876                 (XtCallbackProc) UxDestroyContextCB,
877                 (XtPointer) UxAddFiletypeContext);
878
879         if (bLowRes) {
880            return ( AF_BigForm );
881         } else {
882            return ( AddFiletype );
883         }
884 }
885
886 /*******************************************************************************
887        The following is the 'Interface function' which is the
888        external entry point for creating this interface.
889        This function should be called from your application or from
890        a callback function.
891 *******************************************************************************/
892
893 Widget  create_AddFiletype(swidget _UxUxParent)
894 {
895         Widget                  rtrn;
896         _UxCAddFiletype         *UxContext;
897         Dimension               dimHeight;
898         Dimension               dimWidth;
899         Dimension               dimTmp;
900         Widget                  widScrolledWindow;
901         Widget                  widTmp;
902
903         UxAddFiletypeContext = UxContext =
904                 (_UxCAddFiletype *) UxNewContext( sizeof(_UxCAddFiletype), False );
905
906         UxParent = _UxUxParent;
907
908         rtrn = _Uxbuild_AddFiletype();
909         if (bLowRes) {
910            XtRealizeWidget(rtrn);
911            XtVaGetValues (AddFiletype,
912                           XmNheight, &dimHeight,
913                           XmNwidth, &dimWidth,
914                           NULL);
915            XtVaGetValues (rtrn,
916                           XmNuserData, &widScrolledWindow,
917                           NULL);
918            XtVaGetValues (widScrolledWindow,
919                           XmNverticalScrollBar, &widTmp,
920                           NULL);
921            XtVaGetValues (widTmp,
922                           XmNwidth, &dimTmp,
923                           NULL);
924            dimHeight += dimTmp;
925            dimWidth += dimTmp;
926
927            XtVaSetValues (rtrn,
928                           XmNheight, dimHeight,
929                           XmNwidth, dimWidth,
930                           NULL);
931         }
932         return(rtrn);
933 }
934
935 /*******************************************************************************
936        END OF FILE
937 *******************************************************************************/
938