2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
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)
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
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these libraries and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: FileDialog.c /main/7 1996/10/23 16:25:18 mustafa $ */
24 /************************************<+>*************************************
25 ****************************************************************************
29 * COMPONENT_NAME: Desktop File Manager (dtfile)
31 * Description: Simple Dialogs for file manipulation commands.
33 * FUNCTIONS: ApplyFileDone
47 * ShowRenameFileDialog
49 * (c) Copyright 1993, 1994, 1995 Hewlett-Packard Company
50 * (c) Copyright 1993, 1994, 1995 International Business Machines Corp.
51 * (c) Copyright 1993, 1994, 1995 Sun Microsystems, Inc.
52 * (c) Copyright 1993, 1994, 1995 Novell, Inc.
54 ****************************************************************************
55 ************************************<+>*************************************/
58 #include <sys/types.h>
62 #if defined(_AIX) || defined(hpux)
70 #include <Xm/DialogS.h>
73 #include <Xm/SeparatoG.h>
75 #include <Xm/LabelG.h>
76 #include <Xm/PushBG.h>
77 #include <Xm/RowColumn.h>
78 #include <Xm/MwmUtil.h>
79 #include <Xm/Protocols.h>
81 #include <X11/Shell.h>
82 #include <X11/Xatom.h>
84 #include <Dt/TitleBox.h>
87 #include <Dt/IconFile.h>
88 #include <Dt/Connect.h>
89 #include <Dt/DtNlUtils.h>
91 #include <Dt/HourGlass.h>
93 #include <Dt/SharedProcs.h>
98 #include "SharedProcs.h"
99 #include "sharedFuncs.h"
104 #include "SharedMsgs.h"
107 #define FM_TYPE_LABEL "TYPE_LABEL"
110 /******** Static Function Declarations ********/
112 static void RenameOk(
114 XtPointer client_data,
115 XtPointer call_data) ;
117 XtPointer client_data,
119 static Boolean GetToPath(
124 static void FileTypePreview(
127 XtPointer client_data,
128 XtPointer call_data) ;
129 static void FileTypePreviewCB(
131 XtPointer client_data,
132 XtPointer call_data) ;
133 static void MakeFileOk(
135 XtPointer client_data,
136 XtPointer call_data) ;
137 static void MakeFileApply(
139 XtPointer client_data,
140 XtPointer call_data) ;
141 static void MakeFileDone(
142 XtPointer client_data,
145 static void ApplyFileDone(
146 XtPointer client_data,
149 static void DialogCancel(
151 XtPointer client_data,
152 XtPointer call_data) ;
154 /******** End Static Function Declarations ********/
158 /************************************************************************
160 * ShowRenameFileDialog
161 * Callback function invoked from the File Manager menu. This
162 * function creates and displays a dialog prompting for a new
163 * name for the selected file.
165 * NOTE: The Rename File... menu item can currently be reactivated
166 * by single select on another item. Is this behavior correct?
168 ************************************************************************/
171 ShowRenameFileDialog(
173 XtPointer client_data,
174 XtPointer call_data )
176 FileMgrRec * file_mgr_rec;
177 DialogData * dialog_data;
178 FileViewData * file_view_data;
181 FileMgrData * file_mgr_data;
182 char * directory_name;
185 /* Set the menu item to insensitive to prevent multiple */
186 /* dialogs from being posted and get the area under the */
187 /* menu pane redrawn. */
193 file_view_data = (FileViewData *)client_data;
198 file_view_data = NULL;
199 mbar = XmGetPostedFromWidget(XtParent(w));
203 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
204 XtGetValues(mbar, args, 1);
206 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
207 file_mgr_data = (FileMgrData *) dialog_data->data;
210 /* Get the selected file. */
212 if( file_view_data == NULL )
213 file_view_data = file_mgr_data->selection_list[0];
215 directory_name = ((DirectorySet *) file_view_data->directory_set)->name;
217 /* Create the widget hierarchy for the dialog */
220 XtSetArg (args[n], XmNallowShellResize, True); n++;
222 /* Ignore accelerators when we're insensitive */
225 if ((file_mgr_rec->menuStates & RENAME) == 0)
227 file_mgr_rec->menuStates &= ~RENAME;
231 if(file_mgr_data->selected_file_count != 0)
232 file_mgr_rec->menuStates |= RENAME;
235 UnpostTextField (file_mgr_data);
237 CreateNameChangeDialog(file_view_data->widget, file_view_data,
238 (XtPointer)file_mgr_data, 0);
242 /************************************************************************
245 * Callback function invoked from the File Manager menu. This
246 * function creates and displays a dialog prompting for a new
247 * name for the selected file.
249 * NOTE: The Rename File... menu item can currently be reactivated
250 * by single select on another item. Is this behavior correct?
252 ************************************************************************/
257 XtPointer client_data,
258 XtPointer call_data )
260 FileMgrRec * file_mgr_rec;
261 DialogData * dialog_data;
262 FileMgrData * file_mgr_data;
263 static FileViewData * file_view_data; /* static because it is passed to RenameOk callback */
265 char name_string[18+MAX_PATH];
266 char * directory_name;
267 char * tmpStr, *tempStr;
270 Dimension f_width, d_width;
273 Widget form, dir_form, file_form;
275 Widget dir_label, dir_text;
276 Widget file_label, file_text;
277 Widget file_type_box;
284 int flag = FLAG_RESET;
286 DialogCallbackStruct * call_struct;
287 XmString label_string;
292 XtTranslations trans_table;
293 Atom delete_window_atom;
295 /* Set the menu item to insensitive to prevent multiple */
296 /* dialogs from being posted and get the area under the */
297 /* menu pane redrawn. */
303 file_view_data = (FileViewData *)client_data;
308 file_view_data = NULL;
309 mbar = XmGetPostedFromWidget(XtParent(w));
313 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
314 XtGetValues(mbar, args, 1);
316 /* Ignore accelerators when we're insensitive */
318 if ((file_mgr_rec->menuStates & DUPLICATE) == 0)
321 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
322 file_mgr_data = (FileMgrData *) dialog_data->data;
325 /* Get the selected file. */
327 if(file_view_data == NULL)
328 file_view_data = file_mgr_data->selection_list[0];
329 directory_name = ((DirectorySet *) file_view_data->directory_set)->name;
332 /* Create the widget hierarchy for the dialog */
335 XtSetArg (args[n], XmNallowShellResize, True); n++;
337 /* Adjust the decorations for the dialog shell of the dialog */
339 XtSetArg (args[n], XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE); ++n;
340 XtSetArg (args[n], XmNmwmDecorations, MWM_DECOR_BORDER | MWM_DECOR_TITLE); ++n;
342 file_mgr_rec->menuStates &= ~DUPLICATE;
343 if(file_mgr_data->title != NULL &&
344 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
346 tmpStr = GETMESSAGE(10, 44, "Copy Object");
347 tempStr = (char *)XtMalloc(strlen(tmpStr) +
348 strlen(file_mgr_data->title) + 5);
349 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
353 tmpStr = (GETMESSAGE(10,45, "File Manager - Copy Object"));
354 tempStr = XtNewString(tmpStr);
357 XtSetArg (args[n], XmNtitle, tempStr); n++;
358 shell = XmCreateDialogShell (file_mgr_rec->shell, "copy_file", args, n);
361 /* Set the useAsyncGeo on the shell */
362 XtSetArg (args[0], XmNuseAsyncGeometry, True);
363 XtSetValues (XtParent(shell), args, 1);
366 trans_table = XtParseTranslationTable(translations_space);
369 XtSetArg (args[n], XmNmarginWidth, 1); n++;
370 XtSetArg (args[n], XmNmarginHeight, 1); n++;
371 XtSetArg (args[n], XmNshadowThickness, 1); n++;
372 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
373 XtSetArg (args[n], XmNautoUnmanage, False); n++;
374 #ifdef _CHECK_FOR_SPACES
375 XtSetArg (args[n], XmNtextTranslations, trans_table); n++;
377 XtSetArg (args[n], XmNuserData, file_mgr_rec); n++;
378 form = XmCreateForm (shell, "form", args, n);
379 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
380 HELP_COPY_DIALOG_STR);
383 sprintf (name_string, "%s ", ((char *)GETMESSAGE(10, 37, "Selected object:")));
384 strcat (name_string, file_view_data->file_data->file_name);
385 label_string = XmStringCreateLocalized (name_string);
388 XtSetArg (args[n], XmNlabelString, label_string); n++;
389 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
390 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
391 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
392 XtSetArg (args[n], XmNtopOffset, 5); n++;
393 XtSetArg (args[n], XmNtraversalOn, False); n++;
394 current_name = XmCreateLabelGadget (form, "current_name", args, n);
395 XtManageChild (current_name);
396 XtAddCallback(current_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
397 HELP_COPY_DIALOG_STR);
399 XmStringFree (label_string);
401 /* Create the field displaying the file type info */
404 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
405 XtSetArg(args[n], XmNtopWidget, current_name); n++;
406 XtSetArg(args[n], XmNtopOffset, 3); n++;
407 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
408 XtSetArg(args[n], XmNrightOffset, 5); n++;
409 XtSetArg(args[n], XmNmarginHeight, 5); n++;
410 XtSetArg(args[n], XmNmarginWidth, 5); n++;
411 file_type_box = XmCreateFrame (form, "file_type_box", args, n);
412 XtManageChild (file_type_box);
413 XtAddCallback(file_type_box, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
414 HELP_COPY_DIALOG_STR);
417 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 8, "File Type")));
420 XtSetArg (args[n], XmNlabelString, label_string); n++;
421 XtSetArg (args[n], XmNshadowThickness, 0); n++;
422 XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++;
423 XtSetArg (args[n], XmNpixmapPosition, XmPIXMAP_TOP); n++;
424 XtSetArg (args[n], XmNtraversalOn, False); n++;
425 file_type = _DtCreateIcon (file_type_box, "file_type", args, n);
426 XtManageChild (file_type);
427 XtAddCallback(file_type, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
428 HELP_COPY_DIALOG_STR);
430 XmStringFree (label_string);
433 /* Adjust the colors of the icon */
434 SetToNormalColors (file_type, form, file_mgr_rec->main, 0);
437 /* ------------------------------------------------------------ */
438 /* Create a form to hold the destination label and TextField. */
439 /* The form makes sure they will always be aligned together. */
440 /* ------------------------------------------------------------ */
443 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
444 XtSetArg (args[n], XmNleftOffset, 5); n++;
445 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
446 XtSetArg (args[n], XmNtopWidget, current_name); n++;
447 XtSetArg (args[n], XmNtopOffset, 10); n++;
448 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
449 XtSetArg (args[n], XmNrightWidget, file_type_box); n++;
450 XtSetArg (args[n], XmNrightOffset, 5); n++;
452 dir_form = XmCreateForm (form, "dir_form", args, n);
453 XtManageChild (dir_form);
455 /* Create the Destination Label */
456 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 34, "Destination Folder: ")));
459 XtSetArg (args[n], XmNlabelString, label_string); n++;
460 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
461 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
462 XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
463 XtSetArg (args[n], XmNtraversalOn, False); n++;
464 dir_label = XmCreateLabelGadget (dir_form, "new_name", args, n);
465 XtManageChild (dir_label);
466 XtAddCallback(dir_label, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
467 HELP_COPY_DIALOG_STR);
469 XmStringFree (label_string);
471 /* Create the Destination TextField */
473 XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
474 XtSetArg (args[n], XmNleftOffset, 5); n++;
475 XtSetArg (args[n], XmNleftWidget, dir_label); n++;
476 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
477 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
478 XtSetArg (args[n], XmNtraversalOn, True); n++;
479 XtSetArg (args[n], XmNcursorPosition,
480 strlen(file_view_data->file_data->file_name)); n++;
481 dir_text = XmCreateTextField (dir_form, "new_text", args, n);
482 XtManageChild (dir_text);
483 XtAddCallback(dir_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
484 HELP_COPY_DIALOG_STR);
485 XmTextFieldInsert(dir_text, 0, directory_name);
487 /* -------------------------------------------------------------- */
488 /* Create a form to hold the Name for Copy label and TextField. */
489 /* The form makes sure they will always be aligned together. */
490 /* -------------------------------------------------------------- */
493 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
494 XtSetArg (args[n], XmNleftOffset, 5); n++;
495 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
496 XtSetArg (args[n], XmNtopWidget, dir_form); n++;
497 XtSetArg (args[n], XmNtopOffset, 5); n++;
498 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
499 XtSetArg (args[n], XmNrightWidget, file_type_box); n++;
500 XtSetArg (args[n], XmNrightOffset, 5); n++;
502 file_form = XmCreateForm (form, "file_form", args, n);
503 XtManageChild (file_form);
505 /* Create the Name for Copy Label */
506 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 38, "Name for copy : ")));
509 XtSetArg (args[n], XmNlabelString, label_string); n++;
510 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
511 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
512 XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
513 XtSetArg (args[n], XmNtraversalOn, False); n++;
514 file_label = XmCreateLabelGadget (file_form, "new_name", args, n);
515 XtManageChild (file_label);
516 XtAddCallback(file_label, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
517 HELP_COPY_DIALOG_STR);
519 XmStringFree (label_string);
521 /* Create the Name for Copy TextField */
523 XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
524 XtSetArg (args[n], XmNleftWidget, file_label); n++;
525 XtSetArg (args[n], XmNleftOffset, 5); n++;
526 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
527 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
528 XtSetArg (args[n], XmNtraversalOn, True); n++;
529 XtSetArg (args[n], XmNcursorPosition,
530 strlen(file_view_data->file_data->file_name)); n++;
531 file_text = XmCreateTextField (file_form, "new_text", args, n);
532 XtManageChild (file_text);
533 XtAddCallback(file_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
534 HELP_COPY_DIALOG_STR);
535 XmTextFieldInsert(file_text, 0, file_view_data->file_data->file_name);
538 /* ------------------------------------------------ */
539 /* Make the two labels the same length - maximum. */
540 /* ------------------------------------------------ */
542 XtVaGetValues(dir_label, XmNwidth, &width, NULL);
543 d_width = (Dimension)width;
544 XtVaGetValues(file_label, XmNwidth, &width, NULL);
545 f_width = (Dimension)width;
547 if (d_width > f_width)
548 XtVaSetValues(file_label, XmNwidth, d_width, NULL);
550 XtVaSetValues(dir_label, XmNwidth, f_width, NULL);
552 XtVaGetValues(dir_text, XmNwidth, &width, NULL);
553 d_width = (Dimension)width;
554 XtVaGetValues(file_text, XmNwidth, &width, NULL);
555 f_width = (Dimension)width;
557 if (d_width > f_width)
558 XtVaSetValues(file_text, XmNwidth, d_width, NULL);
560 XtVaSetValues(dir_text, XmNwidth, f_width, NULL);
563 /* The data sent to the Text, Ok and Cancel callbacks */
566 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
568 call_struct->dialog_widget = form;
569 call_struct->menu_widget = w;
570 call_struct->dir_text_widget = dir_text;
571 call_struct->file_text_widget = file_text;
572 call_struct->file_type_widget = file_type;
573 call_struct->original_physical_type =
574 file_view_data->file_data->physical_type;
575 call_struct->file_mgr_rec = file_mgr_rec;
576 call_struct->host_name = XtNewString (file_mgr_data->host);
577 call_struct->directory_name = XtNewString (directory_name);
578 call_struct->mode = COPY_FILE;
579 call_struct->file_name = XtNewString (file_view_data->file_data->file_name);
580 call_struct->original_logical_type =file_view_data->file_data->logical_type;
581 call_struct->previous_file_type = NULL;
582 call_struct->file_mgr_data = file_mgr_data;
585 /* Create a separator between the buttons */
588 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
589 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
590 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
591 XtSetArg (args[n], XmNtopWidget, file_type_box); n++;
592 XtSetArg (args[n], XmNtopOffset, 5); n++;
593 separator = XmCreateSeparatorGadget (form, "separator", args, n);
594 XtManageChild (separator);
598 /* Create the ok, cancel, preview and help buttons */
601 XtSetArg (args[n], XmNlabelString, okXmString); n++;
602 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
603 XtSetArg (args[n], XmNleftPosition, 1); n++;
604 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
605 XtSetArg (args[n], XmNrightPosition, 21); n++;
606 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
607 XtSetArg (args[n], XmNtopWidget, separator); n++;
608 XtSetArg (args[n], XmNtopOffset, 5); n++;
609 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
610 XtSetArg (args[n], XmNbottomOffset, 5); n++;
611 XtSetArg (args[n], XmNmarginWidth, 4); n++;
612 XtSetArg (args[n], XmNmarginHeight, 4); n++;
613 XtSetArg (args[n], XmNshowAsDefault, True); n++;
614 XtSetArg (args[n], XmNuserData, flag); n++;
615 ok = XmCreatePushButtonGadget (form, "ok", args, n);
618 XtAddCallback (ok, XmNactivateCallback, RenameOk, (XtPointer) call_struct);
619 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
620 HELP_COPY_DIALOG_STR);
623 /* Set the ok button to the default for the bulletin board. */
624 /* This causes the return key from the text widget to be */
625 /* properly processed. */
627 XtSetArg (args[0], XmNdefaultButton, ok);
628 XtSetValues (form, args, 1);
632 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
633 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
634 XtSetArg (args[n], XmNleftPosition, 22); n++;
635 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
636 XtSetArg (args[n], XmNrightPosition, 42); n++;
637 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
638 XtSetArg (args[n], XmNtopWidget, separator); n++;
639 XtSetArg (args[n], XmNtopOffset, 5); n++;
640 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
641 XtSetArg (args[n], XmNbottomOffset, 5); n++;
642 XtSetArg (args[n], XmNmarginWidth, 4); n++;
643 XtSetArg (args[n], XmNmarginHeight, 4); n++;
644 XtSetArg (args[n], XmNuserData, flag); n++;
645 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
646 XtManageChild (cancel);
648 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
649 (XtPointer) call_struct);
650 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
651 HELP_COPY_DIALOG_STR);
654 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 36, "Show Icon")));
657 XtSetArg (args[n], XmNlabelString, label_string); n++;
658 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
659 XtSetArg (args[n], XmNleftPosition, 43); n++;
660 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
661 XtSetArg (args[n], XmNrightPosition, 78); n++;
662 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
663 XtSetArg (args[n], XmNtopWidget, separator); n++;
664 XtSetArg (args[n], XmNtopOffset, 5); n++;
665 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
666 XtSetArg (args[n], XmNbottomOffset, 5); n++;
667 XtSetArg (args[n], XmNmarginWidth, 4); n++;
668 XtSetArg (args[n], XmNmarginHeight, 4); n++;
669 preview = XmCreatePushButtonGadget (form, "show_file_type", args, n);
670 XtManageChild (preview);
672 XmStringFree (label_string);
673 XtAddCallback (preview, XmNactivateCallback, FileTypePreviewCB,
674 (XtPointer) call_struct);
675 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
676 HELP_COPY_DIALOG_STR);
677 tmpStr = XtNewString(file_view_data->file_data->file_name);
678 FileTypePreview (preview, tmpStr, (XtPointer) call_struct, NULL);
681 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
682 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
683 XtSetArg (args[n], XmNleftPosition, 79); n++;
684 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
685 XtSetArg (args[n], XmNrightPosition, 99); n++;
686 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
687 XtSetArg (args[n], XmNtopWidget, separator); n++;
688 XtSetArg (args[n], XmNtopOffset, 5); n++;
689 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
690 XtSetArg (args[n], XmNbottomOffset, 5); n++;
691 XtSetArg (args[n], XmNmarginWidth, 4); n++;
692 XtSetArg (args[n], XmNmarginHeight, 4); n++;
693 help = XmCreatePushButtonGadget (form, "help", args, n);
694 XtManageChild (help);
696 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
697 HELP_COPY_DIALOG_STR);
698 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
699 HELP_COPY_DIALOG_STR);
703 XtSetArg (args[0], XmNcancelButton, cancel);
704 XtSetValues (form, args, 1);
706 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
707 (XtPointer) XtParent(shell));
709 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
710 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
711 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
712 (XtPointer) call_struct );
714 call_struct->Ok = ok;
715 call_struct->Cancel = cancel;
717 XtManageChild (form);
719 /* Force the focus to the text field */
720 XmProcessTraversal(dir_text, XmTRAVERSE_CURRENT);
723 /************************************************************************
726 * Callback function invoked from the File Manager menu. This
727 * function creates and displays a dialog prompting for a new
728 * name for the selected file.
730 * NOTE: The Rename File... menu item can currently be reactivated
731 * by single select on another item. Is this behavior correct?
733 ************************************************************************/
738 XtPointer client_data,
739 XtPointer call_data )
741 FileMgrRec * file_mgr_rec;
742 DialogData * dialog_data;
743 static FileMgrData * file_mgr_data; /* static because it is passed to RenameOk callback */
744 FileViewData * file_view_data;
746 char name_string[18+MAX_PATH];
747 char * directory_name;
748 char * tmpStr, *tempStr;
761 DialogCallbackStruct * call_struct;
762 XmString label_string;
767 XtTranslations trans_table;
768 Atom delete_window_atom;
770 /* Set the menu item to insensitive to prevent multiple */
771 /* dialogs from being posted and get the area under the */
772 /* menu pane redrawn. */
778 file_view_data = (FileViewData *)client_data;
783 file_view_data = NULL;
784 mbar = XmGetPostedFromWidget(XtParent(w));
788 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
789 XtGetValues(mbar, args, 1);
791 /* Ignore accelerators when we're insensitive */
793 if ((file_mgr_rec->menuStates & MOVE) == 0)
796 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
797 file_mgr_data = (FileMgrData *) dialog_data->data;
799 /* Get the selected file. */
801 if(file_view_data == NULL)
802 file_view_data = file_mgr_data->selection_list[0];
803 directory_name = ((DirectorySet *) file_view_data->directory_set)->name;
806 /* Create the widget hierarchy for the dialog */
809 XtSetArg (args[n], XmNallowShellResize, True); n++;
811 /* Adjust the decorations for the dialog shell of the dialog */
812 XtSetArg (args[n], XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE); ++n;
813 XtSetArg (args[n], XmNmwmDecorations, MWM_DECOR_BORDER | MWM_DECOR_TITLE); ++n;
815 file_mgr_rec->menuStates &= ~MOVE;
816 if(file_mgr_data->title != NULL &&
817 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
819 tmpStr = GETMESSAGE(10, 42, "Move Object");
820 tempStr = (char *)XtMalloc(strlen(tmpStr) +
821 strlen(file_mgr_data->title) + 5);
822 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
826 tmpStr = (GETMESSAGE(10,43, "File Manager - Move Object"));
827 tempStr = XtNewString(tmpStr);
829 XtSetArg (args[n], XmNtitle, tempStr); n++;
830 shell = XmCreateDialogShell (file_mgr_rec->shell, "move_file", args, n);
833 /* Set the useAsyncGeo on the shell */
834 XtSetArg (args[0], XmNuseAsyncGeometry, True);
835 XtSetValues (XtParent(shell), args, 1);
838 trans_table = XtParseTranslationTable(translations_space);
841 XtSetArg (args[n], XmNmarginWidth, 1); n++;
842 XtSetArg (args[n], XmNmarginHeight, 1); n++;
843 XtSetArg (args[n], XmNshadowThickness, 1); n++;
844 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
845 XtSetArg (args[n], XmNautoUnmanage, False); n++;
846 #ifdef _CHECK_FOR_SPACES
847 XtSetArg (args[n], XmNtextTranslations, trans_table);n++;
849 XtSetArg (args[n], XmNuserData, file_mgr_rec); n++;
850 form = XmCreateForm (shell, "form", args, n);
851 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
852 HELP_MOVE_DIALOG_STR);
855 sprintf (name_string, "%s ", ((char *)GETMESSAGE(10, 37, "Selected object:")));
856 strcat (name_string, file_view_data->file_data->file_name);
857 label_string = XmStringCreateLocalized (name_string);
860 XtSetArg (args[n], XmNlabelString, label_string); n++;
861 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
862 XtSetArg (args[n], XmNleftOffset, 5); n++;
863 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
864 XtSetArg (args[n], XmNtopOffset, 5); n++;
865 XtSetArg (args[n], XmNtraversalOn, False); n++;
866 current_name = XmCreateLabelGadget (form, "current_name", args, n);
867 XtManageChild (current_name);
868 XtAddCallback(current_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
869 HELP_MOVE_DIALOG_STR);
871 XmStringFree (label_string);
874 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 34, "Destination Folder: ")));
877 XtSetArg (args[n], XmNlabelString, label_string); n++;
878 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
879 XtSetArg (args[n], XmNleftOffset, 5); n++;
880 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
881 XtSetArg (args[n], XmNtopWidget, current_name); n++;
882 XtSetArg (args[n], XmNtopOffset, 12); n++;
883 XtSetArg (args[n], XmNtraversalOn, False); n++;
884 new_name = XmCreateLabelGadget (form, "new_name", args, n);
885 XtManageChild (new_name);
886 XtAddCallback(new_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
887 HELP_MOVE_DIALOG_STR);
889 XmStringFree (label_string);
893 XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
894 XtSetArg (args[n], XmNleftWidget, new_name); n++;
895 XtSetArg (args[n], XmNleftOffset, 0); n++;
896 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
897 XtSetArg (args[n], XmNtopWidget, current_name); n++;
898 XtSetArg (args[n], XmNtopOffset, 5); n++;
899 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
900 XtSetArg (args[n], XmNrightOffset, 5); n++;
901 XtSetArg (args[n], XmNtraversalOn, True); n++;
902 XtSetArg (args[n], XmNcursorPosition,
903 strlen(file_view_data->file_data->file_name)); n++;
904 new_text = XmCreateTextField (form, "new_text", args, n);
905 XtManageChild (new_text);
906 XtAddCallback(new_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
907 HELP_MOVE_DIALOG_STR);
909 /* The data sent to the Text, Ok and Cancel callbacks */
912 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
914 call_struct->dialog_widget = form;
915 call_struct->menu_widget = w;
916 call_struct->dir_text_widget = new_text;
917 call_struct->file_text_widget = NULL;
918 call_struct->file_type_widget = NULL;
919 call_struct->original_physical_type =
920 file_view_data->file_data->physical_type;
921 call_struct->file_mgr_rec = file_mgr_rec;
922 call_struct->host_name = XtNewString (file_mgr_data->host);
923 call_struct->directory_name = XtNewString (directory_name);
924 call_struct->file_name = XtNewString (file_view_data->file_data->file_name);
925 call_struct->mode = MOVE_FILE;
926 call_struct->original_logical_type =file_view_data->file_data->logical_type;
927 call_struct->previous_file_type = NULL;
928 call_struct->file_mgr_data = file_mgr_data;
931 /* Create a separator between the buttons */
934 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
935 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
936 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
937 XtSetArg (args[n], XmNtopWidget, new_name); n++;
938 XtSetArg (args[n], XmNtopOffset, 10); n++;
939 separator = XmCreateSeparatorGadget (form, "separator", args, n);
940 XtManageChild (separator);
944 /* Create the ok, cancel, preview and help buttons */
948 XtSetArg (args[n], XmNlabelString, okXmString); n++;
949 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
950 XtSetArg (args[n], XmNleftPosition, 2); n++;
951 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
952 XtSetArg (args[n], XmNrightPosition, 32); n++;
953 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
954 XtSetArg (args[n], XmNtopWidget, separator); n++;
955 XtSetArg (args[n], XmNtopOffset, 5); n++;
956 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
957 XtSetArg (args[n], XmNbottomOffset, 5); n++;
958 XtSetArg (args[n], XmNmarginWidth, 4); n++;
959 XtSetArg (args[n], XmNmarginHeight, 4); n++;
960 XtSetArg (args[n], XmNshowAsDefault, True); n++;
961 XtSetArg (args[n], XmNuserData, flag); n++;
962 ok = XmCreatePushButtonGadget (form, "ok", args, n);
965 XtAddCallback (ok, XmNactivateCallback, RenameOk, (XtPointer) call_struct);
966 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
967 HELP_MOVE_DIALOG_STR);
970 /* Set the ok button to the default for the bulletin board. */
971 /* This causes the return key from the text widget to be */
972 /* properly processed. */
974 XtSetArg (args[0], XmNdefaultButton, ok);
975 XtSetValues (form, args, 1);
979 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
980 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
981 XtSetArg (args[n], XmNleftPosition, 35); n++;
982 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
983 XtSetArg (args[n], XmNrightPosition, 65); n++;
984 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
985 XtSetArg (args[n], XmNtopWidget, separator); n++;
986 XtSetArg (args[n], XmNtopOffset, 5); n++;
987 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
988 XtSetArg (args[n], XmNbottomOffset, 5); n++;
989 XtSetArg (args[n], XmNmarginWidth, 4); n++;
990 XtSetArg (args[n], XmNmarginHeight, 4); n++;
991 XtSetArg (args[n], XmNuserData, flag); n++;
992 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
993 XtManageChild (cancel);
995 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
996 (XtPointer) call_struct);
997 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
998 HELP_MOVE_DIALOG_STR);
1002 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
1003 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1004 XtSetArg (args[n], XmNleftPosition, 68); n++;
1005 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1006 XtSetArg (args[n], XmNrightPosition, 98); n++;
1007 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1008 XtSetArg (args[n], XmNtopWidget, separator); n++;
1009 XtSetArg (args[n], XmNtopOffset, 5); n++;
1010 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1011 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1012 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1013 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1014 help = XmCreatePushButtonGadget (form, "help", args, n);
1015 XtManageChild (help);
1017 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
1018 HELP_MOVE_DIALOG_STR);
1019 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1020 HELP_MOVE_DIALOG_STR);
1024 XtSetArg (args[0], XmNcancelButton, cancel);
1025 XtSetValues (form, args, 1);
1027 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
1028 (XtPointer) XtParent(shell));
1030 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
1031 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
1032 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
1033 (XtPointer) call_struct );
1035 call_struct->Ok = ok;
1036 call_struct->Cancel = cancel;
1038 XtManageChild (form);
1040 /* Force the focus to the text field */
1041 XmProcessTraversal(new_text, XmTRAVERSE_CURRENT);
1045 /************************************************************************
1047 * ShowLinkFileDialog
1048 * Callback function invoked from the File Manager menu. This
1049 * function creates and displays a dialog prompting for a new
1050 * name for the selected file.
1052 * NOTE: The Rename File... menu item can currently be reactivated
1053 * by single select on another item. Is this behavior correct?
1055 ************************************************************************/
1060 XtPointer client_data,
1061 XtPointer call_data )
1063 FileMgrRec * file_mgr_rec;
1064 DialogData * dialog_data;
1065 static FileMgrData * file_mgr_data; /* static because it is passed to RenameOk callback */
1066 FileViewData * file_view_data;
1068 char name_string[18+MAX_PATH];
1069 char * directory_name;
1070 char * tmpStr, *tempStr;
1074 Widget current_name;
1075 Widget dir_label, dir_text;
1076 Widget file_label, file_text;
1077 Widget file_type_box;
1084 int flag=FLAG_RESET;
1086 DialogCallbackStruct * call_struct;
1087 XmString label_string;
1092 XtTranslations trans_table;
1093 Atom delete_window_atom;
1095 /* Set the menu item to insensitive to prevent multiple */
1096 /* dialogs from being posted and get the area under the */
1097 /* menu pane redrawn. */
1099 XmUpdateDisplay (w);
1101 if(client_data != 0)
1103 file_view_data = (FileViewData *)client_data;
1108 file_view_data = NULL;
1109 mbar = XmGetPostedFromWidget(XtParent(w));
1113 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1114 XtGetValues(mbar, args, 1);
1116 /* Ignore accelerators when we're insensitive */
1118 if ((file_mgr_rec->menuStates & LINK) == 0)
1121 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
1122 file_mgr_data = (FileMgrData *) dialog_data->data;
1125 /* Get the selected file. */
1127 if(file_view_data == NULL)
1128 file_view_data = file_mgr_data->selection_list[0];
1129 directory_name = ((DirectorySet *) file_view_data->directory_set)->name;
1132 /* Create the widget hierarchy for the dialog */
1135 XtSetArg (args[n], XmNallowShellResize, True); n++;
1137 file_mgr_rec->menuStates &= ~LINK;
1138 if(file_mgr_data->title != NULL &&
1139 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
1141 tmpStr = GETMESSAGE(10, 46, "Link Object");
1142 tempStr = (char *)XtMalloc(strlen(tmpStr) +
1143 strlen(file_mgr_data->title) + 5);
1144 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
1148 tmpStr = (GETMESSAGE(10,47, "File Manager - Link Object"));
1149 tempStr = XtNewString(tmpStr);
1151 XtSetArg (args[n], XmNtitle, tempStr); n++;
1152 shell = XmCreateDialogShell (file_mgr_rec->shell, "link_file", args, n);
1155 /* Set the useAsyncGeo on the shell */
1156 XtSetArg (args[0], XmNuseAsyncGeometry, True);
1157 XtSetValues (XtParent(shell), args, 1);
1160 trans_table = XtParseTranslationTable(translations_space);
1163 XtSetArg (args[n], XmNmarginWidth, 1); n++;
1164 XtSetArg (args[n], XmNmarginHeight, 1); n++;
1165 XtSetArg (args[n], XmNshadowThickness, 1); n++;
1166 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
1167 XtSetArg (args[n], XmNautoUnmanage, False); n++;
1168 #ifdef _CHECK_FOR_SPACES
1169 XtSetArg (args[n], XmNtextTranslations, trans_table); n++;
1171 XtSetArg (args[n], XmNuserData, file_mgr_rec); n++;
1172 form = XmCreateForm (shell, "form", args, n);
1173 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1174 HELP_LINK_DIALOG_STR);
1177 sprintf (name_string, "%s ", ((char *)GETMESSAGE(10, 37, "Selected object:")));
1178 strcat (name_string, file_view_data->file_data->file_name);
1179 label_string = XmStringCreateLocalized (name_string);
1182 XtSetArg (args[n], XmNlabelString, label_string); n++;
1183 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
1184 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
1186 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
1187 XtSetArg (args[n], XmNtopOffset, 5); n++;
1188 XtSetArg (args[n], XmNtraversalOn, False); n++;
1189 current_name = XmCreateLabelGadget (form, "current_name", args, n);
1190 XtManageChild (current_name);
1191 XtAddCallback(current_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1192 HELP_LINK_DIALOG_STR);
1194 XmStringFree (label_string);
1196 /* Create the field displaying the file type info */
1199 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
1200 XtSetArg(args[n], XmNtopOffset, 15); n++;
1201 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
1202 XtSetArg(args[n], XmNrightOffset, 5); n++;
1203 XtSetArg(args[n], XmNmarginHeight, 5); n++;
1204 XtSetArg(args[n], XmNmarginWidth, 5); n++;
1205 file_type_box = XmCreateFrame (form, "file_type_box", args, n);
1206 XtManageChild (file_type_box);
1207 XtAddCallback(file_type_box, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1208 HELP_LINK_DIALOG_STR);
1211 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 8, "File Type")));
1214 XtSetArg (args[n], XmNlabelString, label_string); n++;
1215 XtSetArg (args[n], XmNshadowThickness, 0); n++;
1216 XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++;
1217 XtSetArg (args[n], XmNpixmapPosition, XmPIXMAP_TOP); n++;
1218 XtSetArg (args[n], XmNtraversalOn, False); n++;
1219 file_type = _DtCreateIcon (file_type_box, "file_type", args, n);
1220 XtManageChild (file_type);
1221 XtAddCallback(file_type, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1222 HELP_LINK_DIALOG_STR);
1224 XmStringFree (label_string);
1227 /* Adjust the colors of the icon */
1228 SetToNormalColors (file_type, form, file_mgr_rec->main, 0);
1231 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
1232 XtSetArg (args[n], XmNrightWidget, file_type_box); n++;
1233 XtSetArg (args[n], XmNrightOffset, 5); n++;
1234 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1235 XtSetArg (args[n], XmNtopWidget, current_name); n++;
1236 XtSetArg (args[n], XmNtopOffset, 5); n++;
1237 XtSetArg (args[n], XmNtraversalOn, True); n++;
1238 XtSetArg (args[n], XmNcursorPosition,
1239 strlen(file_view_data->file_data->file_name)); n++;
1240 dir_text = XmCreateTextField (form, "new_text", args, n);
1241 XtManageChild (dir_text);
1242 XtAddCallback(dir_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1243 HELP_LINK_DIALOG_STR);
1244 XmTextFieldInsert(dir_text, 0, directory_name);
1247 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 34, "Destination Folder: ")));
1250 XtSetArg (args[n], XmNlabelString, label_string); n++;
1251 XtSetArg (args[n], XmNrightWidget, dir_text); n++;
1252 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
1253 XtSetArg (args[n], XmNrightOffset, 5); n++;
1254 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1255 XtSetArg (args[n], XmNtopWidget, current_name); n++;
1256 XtSetArg (args[n], XmNtopOffset, 12); n++;
1257 XtSetArg (args[n], XmNtraversalOn, False); n++;
1258 dir_label = XmCreateLabelGadget (form, "new_name", args, n);
1259 XtManageChild (dir_label);
1260 XtAddCallback(dir_label, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1261 HELP_LINK_DIALOG_STR);
1263 XmStringFree (label_string);
1266 XtSetArg (args[n], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
1267 XtSetArg (args[n], XmNleftWidget, dir_text); n++;
1268 XtSetArg (args[n], XmNleftOffset, 0); n++;
1269 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1270 XtSetArg (args[n], XmNtopWidget, dir_label); n++;
1271 XtSetArg (args[n], XmNtopOffset, 5); n++;
1272 XtSetArg (args[n], XmNtraversalOn, True); n++;
1273 XtSetArg (args[n], XmNcursorPosition,
1274 strlen(file_view_data->file_data->file_name)); n++;
1275 file_text = XmCreateTextField (form, "new_text", args, n);
1276 XtManageChild (file_text);
1277 XtAddCallback(file_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1278 HELP_LINK_DIALOG_STR);
1279 XmTextFieldInsert(file_text, 0, file_view_data->file_data->file_name);
1281 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 38, "Name for copy : ")));
1284 XtSetArg (args[n], XmNlabelString, label_string); n++;
1285 XtSetArg (args[n], XmNrightWidget, file_text); n++;
1286 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
1287 XtSetArg (args[n], XmNrightOffset, 5); n++;
1288 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1289 XtSetArg (args[n], XmNtopWidget, dir_label); n++;
1290 XtSetArg (args[n], XmNtopOffset, 12); n++;
1291 XtSetArg (args[n], XmNtraversalOn, False); n++;
1292 file_label = XmCreateLabelGadget (form, "new_name", args, n);
1293 XtManageChild (file_label);
1294 XtAddCallback(file_label, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1295 HELP_LINK_DIALOG_STR);
1297 XmStringFree (label_string);
1300 /* The data sent to the Text, Ok and Cancel callbacks */
1303 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
1305 call_struct->dialog_widget = form;
1306 call_struct->menu_widget = w;
1307 call_struct->dir_text_widget = dir_text;
1308 call_struct->file_text_widget = file_text;
1309 call_struct->file_type_widget = file_type;
1310 call_struct->original_physical_type =
1311 file_view_data->file_data->physical_type;
1312 call_struct->file_mgr_rec = file_mgr_rec;
1313 call_struct->host_name = XtNewString (file_mgr_data->host);
1314 call_struct->directory_name = XtNewString (directory_name);
1315 call_struct->mode = LINK_FILE;
1316 call_struct->file_name = XtNewString (file_view_data->file_data->file_name);
1317 call_struct->original_logical_type =file_view_data->file_data->logical_type;
1318 call_struct->previous_file_type = NULL;
1319 call_struct->file_mgr_data = file_mgr_data;
1322 /* Create a separator between the buttons */
1325 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
1326 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
1327 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1328 XtSetArg (args[n], XmNtopWidget, file_label); n++;
1329 XtSetArg (args[n], XmNtopOffset, 10); n++;
1330 separator = XmCreateSeparatorGadget (form, "separator", args, n);
1331 XtManageChild (separator);
1335 /* Create the ok, cancel, preview and help buttons */
1339 XtSetArg (args[n], XmNlabelString, okXmString); n++;
1340 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1341 XtSetArg (args[n], XmNleftPosition, 1); n++;
1342 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1343 XtSetArg (args[n], XmNrightPosition, 21); n++;
1344 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1345 XtSetArg (args[n], XmNtopWidget, separator); n++;
1346 XtSetArg (args[n], XmNtopOffset, 5); n++;
1347 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1348 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1349 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1350 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1351 XtSetArg (args[n], XmNshowAsDefault, True); n++;
1352 XtSetArg (args[n], XmNuserData, flag); n++;
1353 ok = XmCreatePushButtonGadget (form, "ok", args, n);
1356 XtAddCallback (ok, XmNactivateCallback, RenameOk, (XtPointer) call_struct);
1357 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1358 HELP_LINK_DIALOG_STR);
1361 /* Set the ok button to the default for the bulletin board. */
1362 /* This causes the return key from the text widget to be */
1363 /* properly processed. */
1365 XtSetArg (args[0], XmNdefaultButton, ok);
1366 XtSetValues (form, args, 1);
1370 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
1371 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1372 XtSetArg (args[n], XmNleftPosition, 22); n++;
1373 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1374 XtSetArg (args[n], XmNrightPosition, 42); n++;
1375 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1376 XtSetArg (args[n], XmNtopWidget, separator); n++;
1377 XtSetArg (args[n], XmNtopOffset, 5); n++;
1378 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1379 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1380 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1381 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1382 XtSetArg (args[n], XmNuserData, flag); n++;
1383 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
1384 XtManageChild (cancel);
1386 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
1387 (XtPointer) call_struct);
1388 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1389 HELP_LINK_DIALOG_STR);
1392 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 36, "Show Icon")));
1395 XtSetArg (args[n], XmNlabelString, label_string); n++;
1396 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1397 XtSetArg (args[n], XmNleftPosition, 43); n++;
1398 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1399 XtSetArg (args[n], XmNrightPosition, 78); n++;
1400 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1401 XtSetArg (args[n], XmNtopWidget, separator); n++;
1402 XtSetArg (args[n], XmNtopOffset, 5); n++;
1403 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1404 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1405 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1406 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1407 preview = XmCreatePushButtonGadget (form, "show_file_type", args, n);
1408 XtManageChild (preview);
1410 XmStringFree (label_string);
1411 XtAddCallback (preview, XmNactivateCallback, FileTypePreviewCB,
1412 (XtPointer) call_struct);
1413 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1414 HELP_LINK_DIALOG_STR);
1415 tmpStr = XtNewString(file_view_data->file_data->file_name);
1416 FileTypePreview (preview, tmpStr, (XtPointer) call_struct, NULL);
1419 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
1420 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1421 XtSetArg (args[n], XmNleftPosition, 79); n++;
1422 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1423 XtSetArg (args[n], XmNrightPosition, 99); n++;
1424 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1425 XtSetArg (args[n], XmNtopWidget, separator); n++;
1426 XtSetArg (args[n], XmNtopOffset, 5); n++;
1427 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1428 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1429 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1430 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1431 help = XmCreatePushButtonGadget (form, "help", args, n);
1432 XtManageChild (help);
1434 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
1435 HELP_LINK_DIALOG_STR);
1436 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1437 HELP_LINK_DIALOG_STR);
1441 XtSetArg (args[0], XmNcancelButton, cancel);
1442 XtSetValues (form, args, 1);
1444 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
1445 (XtPointer) XtParent(shell));
1447 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
1448 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
1449 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
1450 (XtPointer) call_struct );
1452 call_struct->Ok = ok;
1453 call_struct->Cancel = cancel;
1455 XtManageChild (form);
1457 /* Force the focus to the text field */
1458 XmProcessTraversal(dir_text, XmTRAVERSE_CURRENT);
1463 /************************************************************************
1466 * Get the new file name and rename the file.
1468 ************************************************************************/
1473 XtPointer client_data,
1474 XtPointer call_data )
1476 DialogCallbackStruct * call_struct = (DialogCallbackStruct *)client_data;
1479 char *new_name = NULL, *new_dir = NULL, new[MAX_PATH];
1480 unsigned int btnMask = 0;
1481 RenameDoneData *data;
1483 char to_dir[MAX_PATH];
1485 unsigned int modifiers;
1486 char *host_set[1], *file_set[1];
1489 if(RecheckFlag(call_struct->dialog_widget,w)) /* OK button */
1491 else if(RecheckFlag(NULL,call_struct->Cancel))
1494 /* currently, only one file can be moved/copied/linked using the menu */
1495 /* the following arrays can be expanded if this restriction is lifted */
1497 new_dir = XmTextFieldGetString (call_struct->dir_text_widget);
1498 new_dir = (char *) _DtStripSpaces (new_dir);
1500 if (new_dir[0] == '~')
1501 new_dir = _DtChangeTildeToHome (new_dir);
1503 switch (call_struct->mode)
1506 title = XtNewString(GetSharedMessage(FILE_MOVE_ERROR_TITLE));
1510 title = XtNewString(GetSharedMessage(FILE_COPY_ERROR_TITLE));
1511 btnMask = DUPLICATE;
1514 title = XtNewString(GetSharedMessage(FILE_LINK_ERROR_TITLE));
1519 if (strlen (new_dir) == 0)
1520 msg = XtNewString(GETMESSAGE(10, 11,
1521 "A file or folder cannot have a blank name."));
1522 #ifdef _CHECK_FOR_SPACES
1523 else if (DtStrchr (new_dir, ' ') != NULL ||
1524 DtStrchr (new_dir, '\t') != NULL)
1525 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
1528 switch (call_struct->mode)
1532 new_name = XmTextFieldGetString (call_struct->file_text_widget);
1533 new_name = (char *) _DtStripSpaces (new_name);
1534 if (strlen (new_name) == 0)
1535 msg = XtNewString(GETMESSAGE(10, 11,
1536 "A file or folder cannot have a blank name."));
1537 #ifdef _CHECK_FOR_SPACES
1538 else if (DtStrchr (new_name, ' ') != NULL ||
1539 DtStrchr (new_name, '\t') != NULL)
1540 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
1542 sprintf(new, "%s/%s", new_dir, new_name );
1545 sprintf(new, "%s/%s", new_dir, call_struct->file_name);
1551 _DtMessage(XtParent (w), title, msg, NULL, HelpRequestCB);
1554 if(new_name) XtFree(new_name);
1555 if(new_dir) XtFree(new_dir);
1556 ResetFlag(call_struct->dialog_widget,w);
1557 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
1563 if(new_name) XtFree(new_name);
1564 if(new_dir) XtFree(new_dir);
1566 /* set up data for RenameDone callback */
1567 data = (RenameDoneData *)XtMalloc(sizeof(RenameDoneData));
1569 data->call_struct = call_struct;
1570 data->mode = call_struct->mode;
1571 data->btnMask = btnMask;
1574 * Do the rename/copy/...
1575 * This operation is performed in a background process; when the
1576 * background process finishes, the RenameDone callback will be
1577 * called with a return code indicating success or failure.
1580 /* get host & path of the target file */
1581 GetTarget(call_struct->host_name, call_struct->directory_name, new,
1582 to_host, to_dir, to_file);
1583 /* get host & path of source file */
1584 host_set[0] = call_struct->host_name;
1585 file_set[0] = build_path(call_struct->directory_name, call_struct->file_name);
1586 /* set up modifiers depending on operation */
1587 switch (call_struct->mode)
1593 modifiers = ControlMask;
1596 modifiers = ShiftMask;
1600 FileMoveCopy(call_struct->file_mgr_data,
1601 to_file, to_dir, to_host,
1602 host_set, file_set, file_count,
1603 modifiers, RenameDone, (XtPointer)data);
1605 XtFree(file_set[0]);
1610 /************************************************************************
1613 * This routine is called when the file move/copy/link is finished.
1615 ************************************************************************/
1619 XtPointer client_data,
1622 RenameDoneData *data = (RenameDoneData *)client_data;
1623 DialogCallbackStruct *call_struct = data->call_struct;
1627 XtUnmanageChild(call_struct->dialog_widget);
1628 XmUpdateDisplay(call_struct->dialog_widget);
1629 XtDestroyWidget(XtParent(call_struct->dialog_widget));
1630 call_struct->file_mgr_rec->menuStates |= data->btnMask;
1632 XtFree(call_struct->host_name);
1633 XtFree(call_struct->directory_name);
1634 XtFree(call_struct->file_name);
1635 if(call_struct->previous_file_type)
1636 XtFree(call_struct->previous_file_type);
1638 XtFree((char *) call_struct);
1641 XtFree((char *)data);
1645 /************************************************************************
1648 * Build a directory,filename path to be used as the destination
1649 * of a create, copy or move operation.
1651 ************************************************************************/
1662 char *directory_name;
1664 Tt_status tt_status;
1666 if (strncmp (new_name, "/", 1) == 0)
1668 if ((path = (char *) ResolveLocalPathName (host_in,
1672 &tt_status )) == NULL)
1677 if (strcmp(dir_in, "/") == 0)
1678 sprintf(to, "%s%s", dir_in, new_name);
1680 sprintf(to, "%s/%s", dir_in, new_name);
1682 if ((path = (char *) ResolveLocalPathName (host_in,
1686 &tt_status )) == NULL)
1698 /************************************************************************
1701 * Get the text field file name, find out what the file type is
1702 * for the file name and display the name and icon for the
1705 ************************************************************************/
1710 XtPointer client_data,
1711 XtPointer call_data )
1713 DialogCallbackStruct * call_struct;
1716 call_struct = (DialogCallbackStruct *) client_data;
1718 new_name = XmTextFieldGetString (call_struct->file_text_widget);
1719 FileTypePreview(w, new_name, client_data, call_data);
1723 /************************************************************************
1726 * Find out what the file type is for the specified file name and
1727 * display the name and icon for the file type.
1729 ************************************************************************/
1735 XtPointer client_data,
1736 XtPointer call_data )
1738 DialogCallbackStruct * call_struct;
1743 char whole_name[MAX_PATH];
1746 char * new_link_path;
1747 PixmapData *pixmapData;
1748 Tt_status tt_status;
1749 Boolean Flag = ((Boolean)(XtArgVal)call_data == True)?True:False;
1751 call_struct = (DialogCallbackStruct *) client_data;
1752 new_name = (char *) _DtStripSpaces (new_name);
1754 if (new_name[0] == '~')
1755 new_name = _DtChangeTildeToHome (new_name);
1757 if (GetToPath (whole_name, new_name, call_struct->host_name,
1758 call_struct->directory_name) == False)
1759 strcpy(whole_name, " ");
1761 orig_name = ResolveLocalPathName( call_struct->host_name,
1762 call_struct->directory_name,
1763 call_struct->file_name,
1764 home_host_name, &tt_status);
1766 /* Check for broken links so we get the proper file_type */
1767 if (call_struct->original_logical_type != NULL &&
1768 strcmp(call_struct->original_logical_type, LT_BROKEN_LINK) == 0)
1769 file_type = XtNewString(call_struct->original_logical_type);
1770 else if (call_struct->original_physical_type == DtDIRECTORY)
1771 file_type = XtNewString(LT_DIRECTORY);
1772 else if ( *new_name == 0x0 &&
1773 call_struct->original_physical_type == DtDATA )
1774 file_type = XtNewString(LT_DATA);
1775 else if (link_path = _DtFollowLink(whole_name))
1777 if (strcmp(orig_name, whole_name) == 0)
1778 file_type = (char *) DtDtsDataToDataType(orig_name, NULL, 0, NULL,
1782 if (call_struct->menu_widget == *renameBtn)
1784 new_link_path = XtNewString(link_path);
1786 if ((link_path = _DtFollowLink(orig_name)) &&
1787 (strcmp(link_path, orig_name) == 0))
1789 file_type = (char *) DtDtsDataToDataType(new_link_path, NULL, 0,
1790 NULL, NULL, NULL, NULL);
1794 /* Links are typed according to what they are linked to */
1795 file_type = call_struct->original_logical_type;
1798 XtFree(new_link_path);
1802 /* We want to find out the possible filetype of a file that has
1803 such name (stored in link_path). However, the file does not even
1804 existed yet. In order for the file typing code to work correctly,
1805 we have to pass in a dummy stat structure indicates that if the
1806 file is created, this is its mode.
1808 struct stat fileStat;
1809 unsigned int creationMask = umask( DtFILE_DATA_CREATION_MASK );
1811 memset( &fileStat, 0, sizeof( struct stat ) );
1812 fileStat.st_mode = creationMask | S_IFREG;
1814 file_type = (char *) DtDtsDataToDataType( link_path, NULL, 0,
1817 umask( creationMask );
1822 file_type = XtNewString(LT_RECURSIVE_LINK);
1830 if( call_struct->previous_file_type
1831 && strcmp( call_struct->previous_file_type, file_type ) == 0 )
1833 char *tmpStr, *title, *msg;
1837 tmpStr = GETMESSAGE(10, 36, "Show Icon");
1838 title = XtNewString(tmpStr);
1839 tmpStr = GETMESSAGE(10, 41, "The correct icon for this datatype is already shown.");
1840 msg = XtNewString(tmpStr);
1842 _DtMessage(XtParent(w), title, msg, NULL, HelpRequestCB);
1846 XtFree ((char *) file_type);
1847 XtFree ((char *) new_name);
1848 XtFree ((char *) orig_name);
1853 call_struct->previous_file_type = file_type;
1855 if (DtActionExists(file_type))
1857 char *str = (char *)DtActionLabel(file_type);
1859 string = XmStringCreateLocalized(str);
1861 string = XmStringCreateLocalized(file_type);
1866 char *str = (char *)DtDtsDataTypeToAttributeValue(file_type,
1871 string = XmStringCreateLocalized(str);
1872 DtDtsFreeAttributeValue(str);
1876 string = XmStringCreateLocalized(file_type);
1880 XtSetArg (args[n], XmNstring, string); n++;
1882 pixmapData = _DtRetrievePixmapData(file_type,
1883 call_struct->file_name,
1884 call_struct->directory_name,
1888 XtSetArg (args[n], XmNimageName, pixmapData->iconFileName);
1890 XtSetArg (args[n], XmNimageName, NULL); n++;
1891 XtSetValues (call_struct->file_type_widget, args, n);
1893 _DtCheckAndFreePixmapData(file_type,
1895 (DtIconGadget) (call_struct->file_type_widget),
1900 XtSetArg (args[n], XmNimageName, NULL); n++;
1901 XtSetValues (call_struct->file_type_widget, args, n);
1902 if (call_struct->previous_file_type)
1904 XtFree((char *)call_struct->previous_file_type );
1905 call_struct->previous_file_type = NULL;
1910 XmStringFree (string);
1912 XtFree ((char *) new_name);
1913 XtFree ((char *) orig_name);
1917 /************************************************************************
1920 * Callback function invoked from the File Manager menu. This
1921 * function creates and displays a dialog prompting for a file name
1922 * to be used to create a directory, executable, or normal file.
1924 ************************************************************************/
1929 XtPointer client_data,
1930 XtPointer call_data )
1932 FileMgrRec * file_mgr_rec;
1933 DialogData * dialog_data;
1934 FileMgrData * file_mgr_data;
1936 Widget shell = NULL;
1940 Widget file_type_box;
1948 int flag=FLAG_RESET;
1950 DialogCallbackStruct * call_struct;
1951 char * tmpStr = NULL, *tempStr = NULL;
1952 XmString label_string = NULL;
1956 Widget mbar = XmGetPostedFromWidget(XtParent(w));
1957 Atom delete_window_atom;
1961 /* Set the menu item to insensitive to prevent multiple */
1962 /* dialogs from being posted and get the area under the */
1963 /* menu pane redrawn. */
1965 XmUpdateDisplay (w);
1967 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1968 XtGetValues(mbar, args, 1);
1970 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
1971 file_mgr_data = (FileMgrData *) dialog_data->data;
1975 XtSetArg (args[n], XmNallowShellResize, True); n++;
1976 /* Adjust the decorations for the dialog shell of the dialog */
1977 XtSetArg (args[n], XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE); ++n;
1978 XtSetArg (args[n], XmNmwmDecorations, MWM_DECOR_BORDER | MWM_DECOR_TITLE); ++n;
1980 if (w == *create_directoryBtn)
1982 /* Ignore accelerators when we're insensitive */
1983 if (file_mgr_rec->create_directoryBtn_child)
1985 XSetInputFocus(XtDisplay(w),
1986 XtWindow(file_mgr_rec->create_directoryBtn_child),
1987 RevertToParent, CurrentTime);
1991 file_mgr_rec->menuStates &= ~CREATE_DIR;
1993 if(file_mgr_data->title != NULL &&
1994 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
1996 tmpStr = GETMESSAGE(10, 14, "New Folder");
1997 tempStr = (char *)XtMalloc(strlen(tmpStr) +
1998 strlen(file_mgr_data->title) + 5);
1999 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
2003 tmpStr = (GETMESSAGE(10,28, "File Manager - New Folder"));
2004 tempStr = XtNewString(tmpStr);
2007 XtSetArg (args[n], XmNtitle, tempStr); n++;
2008 shell =XmCreateDialogShell(file_mgr_rec->shell, "new_folder", args, n);
2009 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 16, "New Folder Name: ")));
2011 else if (w == *create_dataBtn)
2013 /* Ignore accelerators when we're insensitive */
2014 if ( file_mgr_rec->create_dataBtn_child )
2016 XSetInputFocus(XtDisplay(w),
2017 XtWindow(file_mgr_rec->create_dataBtn_child),
2018 RevertToParent, CurrentTime);
2022 file_mgr_rec->menuStates &= ~CREATE_FILE;
2024 if(file_mgr_data->title != NULL &&
2025 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
2027 tmpStr = (GETMESSAGE(10,26, "New File"));
2028 tempStr = (char *)XtMalloc(strlen(tmpStr) +
2029 strlen(file_mgr_data->title) + 5);
2030 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
2034 tmpStr = (GETMESSAGE(10,29, "File Manager - New File"));
2035 tempStr = XtNewString(tmpStr);
2037 XtSetArg (args[n], XmNtitle, tempStr); n++;
2038 shell =XmCreateDialogShell(file_mgr_rec->shell, "new_data_file", args, n);
2039 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 7, "New File Name: ")));
2045 /* shouldn't happen, but... */
2047 XmStringFree(label_string);
2051 /* Set the useAsyncGeo on the shell */
2052 XtSetArg (args[0], XmNuseAsyncGeometry, True);
2053 XtSetValues (XtParent(shell), args, 1);
2055 /* Create the widget hierarchy for the dialog */
2058 XtSetArg (args[n], XmNmarginWidth, 1); n++;
2059 XtSetArg (args[n], XmNmarginHeight, 1); n++;
2060 XtSetArg (args[n], XmNshadowThickness, 1); n++;
2061 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
2062 XtSetArg (args[n], XmNautoUnmanage, False); n++;
2063 XtSetArg (args[n], XmNuserData, file_mgr_rec); n++;
2064 form = XmCreateForm (shell, "form", args, n);
2068 XtSetArg (args[n], XmNlabelString, label_string); n++;
2069 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2070 XtSetArg (args[n], XmNleftPosition, 15); n++;
2072 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
2073 XtSetArg (args[n], XmNleftOffset, 5); n++;
2075 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
2076 XtSetArg (args[n], XmNtopOffset, 30); n++;
2077 XtSetArg (args[n], XmNtraversalOn, False); n++;
2078 new_name = XmCreateLabelGadget (form, "new_name", args, n);
2079 XtManageChild (new_name);
2081 XmStringFree (label_string);
2085 XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
2086 XtSetArg (args[n], XmNleftWidget, new_name); n++;
2087 XtSetArg (args[n], XmNleftOffset, 0); n++;
2088 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
2089 XtSetArg (args[n], XmNtopOffset, 30); n++;
2090 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2091 XtSetArg (args[n], XmNrightPosition, 70); n++;
2092 XtSetArg (args[n], XmNtraversalOn, True); n++;
2093 new_text = XmCreateTextField (form, "new_text", args, n);
2095 XtManageChild (new_text);
2097 /* Create the field displaying the file type info */
2100 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
2101 XtSetArg(args[n], XmNtopOffset, 5); n++;
2103 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
2104 XtSetArg(args[n], XmNleftWidget, new_text); n++;
2105 XtSetArg(args[n], XmNleftOffset, 20); n++;
2107 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2108 XtSetArg (args[n], XmNleftPosition, 75); n++;
2110 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
2111 XtSetArg(args[n], XmNrightOffset, 5); n++;
2113 XtSetArg(args[n], XmNmarginHeight, 5); n++;
2114 XtSetArg(args[n], XmNmarginWidth, 5); n++;
2115 file_type_box = XmCreateFrame (form, "file_type_box", args, n);
2116 XtManageChild (file_type_box);
2118 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 8, "File Type")));
2121 XtSetArg (args[n], XmNlabelString, label_string); n++;
2122 XtSetArg(args[n], XmNshadowThickness, 0); n++;
2123 XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++;
2124 XtSetArg(args[n], XmNpixmapPosition, XmPIXMAP_TOP); n++;
2125 XtSetArg (args[n], XmNtraversalOn, False); n++;
2126 file_type = _DtCreateIcon (file_type_box, "file_type", args, n);
2127 XtManageChild (file_type);
2129 XmStringFree (label_string);
2132 /* Adjust the colors of the icon */
2133 SetToNormalColors (file_type, form, file_mgr_rec->main, 0);
2135 /* The data sent to the Text, Ok and Cancel callbacks */
2138 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
2140 if(w == *create_directoryBtn)
2142 file_mgr_rec->create_directoryBtn_child = form;
2143 call_struct->original_physical_type = DtDIRECTORY;
2145 if(w == *create_dataBtn)
2147 file_mgr_rec->create_dataBtn_child = form;
2148 call_struct->original_physical_type = DtDATA;
2151 call_struct->dialog_widget = form;
2152 call_struct->menu_widget = w;
2153 call_struct->dir_text_widget = NULL;
2154 call_struct->file_text_widget = new_text;
2155 call_struct->file_type_widget = file_type;
2156 call_struct->file_mgr_rec = file_mgr_rec;
2157 call_struct->host_name = XtNewString (file_mgr_data->host);
2158 call_struct->directory_name = XtNewString(file_mgr_data->current_directory);
2159 call_struct->file_name = NULL;
2160 call_struct->original_logical_type = NULL;
2161 call_struct->previous_file_type = NULL;
2162 call_struct->file_mgr_data = file_mgr_data;
2165 /* Create a separator between the buttons */
2168 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
2169 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
2170 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2171 XtSetArg (args[n], XmNtopWidget, file_type_box); n++;
2172 XtSetArg (args[n], XmNtopOffset, 5); n++;
2173 separator = XmCreateSeparatorGadget (form, "separator", args, n);
2174 XtManageChild (separator);
2178 /* Create the ok, apply, cancel, and help buttons */
2181 XtSetArg (args[n], XmNlabelString, okXmString); n++;
2182 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2183 XtSetArg (args[n], XmNleftPosition, 1); n++;
2184 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2185 XtSetArg (args[n], XmNrightPosition, 19); n++;
2186 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2187 XtSetArg (args[n], XmNtopWidget, separator); n++;
2188 XtSetArg (args[n], XmNtopOffset, 5); n++;
2189 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2190 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2191 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2192 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2193 XtSetArg (args[n], XmNshowAsDefault, True); n++;
2194 XtSetArg (args[n], XmNuserData, flag); n++;
2195 ok = XmCreatePushButtonGadget (form, "ok", args, n);
2198 XtAddCallback (ok, XmNactivateCallback, MakeFileOk, (XtPointer) call_struct);
2200 /* Set the ok button to the default for the bulletin board. */
2201 /* This causes the return key from the text widget to be */
2202 /* properly processed. */
2204 XtSetArg (args[0], XmNdefaultButton, ok);
2205 XtSetValues (form, args, 1);
2208 XtSetArg (args[n], XmNlabelString, applyXmString); n++;
2209 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2210 XtSetArg (args[n], XmNleftPosition, 20); n++;
2211 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2212 XtSetArg (args[n], XmNrightPosition, 39); n++;
2213 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2214 XtSetArg (args[n], XmNtopWidget, separator); n++;
2215 XtSetArg (args[n], XmNtopOffset, 5); n++;
2216 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2217 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2218 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2219 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2220 apply = XmCreatePushButtonGadget (form, "apply", args, n);
2221 XtManageChild (apply);
2223 XtAddCallback (apply, XmNactivateCallback, MakeFileApply, (XtPointer) call_struct);
2226 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
2227 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2228 XtSetArg (args[n], XmNleftPosition, 40); n++;
2229 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2230 XtSetArg (args[n], XmNrightPosition, 59); n++;
2231 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2232 XtSetArg (args[n], XmNtopWidget, separator); n++;
2233 XtSetArg (args[n], XmNtopOffset, 5); n++;
2234 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2235 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2236 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2237 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2238 XtSetArg (args[n], XmNuserData, flag); n++;
2239 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
2240 XtManageChild (cancel);
2242 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
2243 (XtPointer) call_struct);
2246 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 36, "Show Icon")));
2249 XtSetArg (args[n], XmNlabelString, label_string); n++;
2250 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2251 XtSetArg (args[n], XmNleftPosition, 60); n++;
2252 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2253 XtSetArg (args[n], XmNrightPosition, 79); n++;
2254 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2255 XtSetArg (args[n], XmNtopWidget, separator); n++;
2256 XtSetArg (args[n], XmNtopOffset, 5); n++;
2257 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2258 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2259 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2260 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2261 preview = XmCreatePushButtonGadget (form, "show_file_type", args, n);
2262 XtManageChild (preview);
2264 XmStringFree (label_string);
2265 XtAddCallback (preview, XmNactivateCallback, FileTypePreviewCB,
2266 (XtPointer) call_struct);
2268 FileTypePreviewCB (preview, (XtPointer) call_struct, NULL);
2271 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
2272 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2273 XtSetArg (args[n], XmNleftPosition, 80); n++;
2274 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2275 XtSetArg (args[n], XmNrightPosition, 99); n++;
2276 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2277 XtSetArg (args[n], XmNtopWidget, separator); n++;
2278 XtSetArg (args[n], XmNtopOffset, 5); n++;
2279 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2280 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2281 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2282 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2283 help = XmCreatePushButtonGadget (form, "help", args, n);
2284 XtManageChild (help);
2286 if (w == *create_directoryBtn)
2288 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2289 HELP_CREATE_DIR_DIALOG_STR);
2290 XtAddCallback(new_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2291 HELP_CREATE_DIR_DIALOG_STR);
2292 XtAddCallback(new_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2293 HELP_CREATE_DIR_DIALOG_STR);
2294 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
2295 HELP_CREATE_DIR_DIALOG_STR);
2296 XtAddCallback(file_type_box,XmNhelpCallback,(XtCallbackProc)HelpRequestCB,
2297 HELP_CREATE_DIR_DIALOG_STR);
2298 XtAddCallback(file_type, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2299 HELP_CREATE_DIR_DIALOG_STR);
2300 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2301 HELP_CREATE_DIR_DIALOG_STR);
2302 XtAddCallback(apply, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2303 HELP_CREATE_DIR_DIALOG_STR);
2304 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2305 HELP_CREATE_DIR_DIALOG_STR);
2306 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2307 HELP_CREATE_DIR_DIALOG_STR);
2308 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2309 HELP_CREATE_DIR_DIALOG_STR);
2313 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2314 HELP_CREATE_FILE_DIALOG_STR);
2315 XtAddCallback(new_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2316 HELP_CREATE_FILE_DIALOG_STR);
2317 XtAddCallback(new_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2318 HELP_CREATE_FILE_DIALOG_STR);
2319 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
2320 HELP_CREATE_FILE_DIALOG_STR);
2321 XtAddCallback(file_type_box,XmNhelpCallback,(XtCallbackProc)HelpRequestCB,
2322 HELP_CREATE_FILE_DIALOG_STR);
2323 XtAddCallback(file_type, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2324 HELP_CREATE_FILE_DIALOG_STR);
2325 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2326 HELP_CREATE_FILE_DIALOG_STR);
2327 XtAddCallback(apply, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2328 HELP_CREATE_FILE_DIALOG_STR);
2329 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2330 HELP_CREATE_FILE_DIALOG_STR);
2331 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2332 HELP_CREATE_FILE_DIALOG_STR);
2333 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2334 HELP_CREATE_FILE_DIALOG_STR);
2338 XtSetArg (args[0], XmNcancelButton, cancel);
2339 XtSetValues (form, args, 1);
2341 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
2342 (XtPointer) XtParent(shell));
2344 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
2345 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
2346 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
2347 (XtPointer) call_struct );
2349 call_struct->Ok = ok;
2350 call_struct->Cancel = cancel;
2352 XtManageChild (form);
2354 /* Force the focus to the text field */
2355 XmProcessTraversal(new_text, XmTRAVERSE_CURRENT);
2360 /************************************************************************
2363 * Get the new file name and create the file.
2365 ************************************************************************/
2370 XtPointer client_data,
2371 XtPointer call_data )
2373 DialogCallbackStruct * call_struct = (DialogCallbackStruct *) client_data;
2379 int dirNameLength = strlen (call_struct->directory_name);
2380 int maxFileNameLength = pathconf (call_struct->directory_name, _PC_NAME_MAX);
2381 unsigned int btnMask;
2382 MakeFileDoneData *data;
2384 if(RecheckFlag(call_struct->dialog_widget,w))
2386 else if(RecheckFlag(NULL,call_struct->Cancel))
2389 /* see if this is a create file or directory */
2390 if (call_struct->menu_widget == *create_directoryBtn)
2392 call_struct->file_mgr_rec->create_directoryBtn_child = NULL;
2394 btnMask = CREATE_DIR;
2398 call_struct->file_mgr_rec->create_dataBtn_child = NULL;
2400 btnMask = CREATE_FILE;
2403 /* get the new name */
2404 new_name = XmTextFieldGetString (call_struct->file_text_widget);
2405 new_name = (char *) _DtStripSpaces (new_name);
2408 if (new_name[0] == '~')
2409 new_name = _DtChangeTildeToHome (new_name);
2411 length = strlen (new_name);
2415 msg = XtNewString(GETMESSAGE(10, 22,
2416 "Cannot create a file or folder with a blank name."));
2418 /* Ensure the new name has length less than or equal to the maximum
2419 length that the system allows.
2420 If maxFileNameLength == -1 the file system is not supporting POSIX, use MAXNAMLEN
2422 else if( maxFileNameLength < -1 || ( maxFileNameLength == -1 && ( length > MAXNAMLEN || length + dirNameLength > MAX_PATH ) ) || ( maxFileNameLength > 0 && length > maxFileNameLength ) )
2424 if (type == DtDIRECTORY)
2426 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2427 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2431 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2432 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2435 #ifdef _CHECK_FOR_SPACES
2436 else if (DtStrchr (new_name, ' ') != NULL ||
2437 DtStrchr (new_name, '\t') != NULL)
2439 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
2445 if (type == DtDIRECTORY)
2446 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2448 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2449 _DtMessage (XtParent (w), title, msg, NULL, HelpRequestCB);
2453 ResetFlag(call_struct->dialog_widget,w);
2454 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
2458 /* set up data for MakeFileDone callback */
2459 data = (MakeFileDoneData *)XtMalloc(sizeof(MakeFileDoneData));
2461 data->call_struct = call_struct;
2463 data->btnMask = btnMask;
2464 data->new_name = new_name;
2467 * Create the file/directory.
2468 * This operation is performed in a background process; when the
2469 * background process finishes, the MakeFileDone callback will be
2470 * called with a return code indicating success or failure.
2473 MakeFile (w, call_struct->host_name, call_struct->directory_name,
2474 new_name, type, MakeFileDone, (XtPointer)data);
2478 /************************************************************************
2481 * This routine is called when the file creation is finished.
2483 ************************************************************************/
2487 XtPointer client_data,
2491 MakeFileDoneData *data = (MakeFileDoneData *)client_data;
2492 DialogCallbackStruct *call_struct = data->call_struct;
2493 FileMgrRec *file_mgr_rec = (FileMgrRec *) call_struct->file_mgr_rec;
2497 FileViewData *file_view_data;
2498 FileMgrData *file_mgr_data;
2499 DialogData *dialog_data;
2500 DirectorySet *directory_set;
2504 * If the file/directory create was successful, unmanage the dialog
2505 * and free up any allocated data space. Otherwise, just return
2506 * to allow the user to try a different name or cancel the dialog.
2512 if (data->type == DtDIRECTORY)
2514 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2515 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2519 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2520 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2522 _DtMessage (XtParent(data->w), title, msg, NULL, HelpRequestCB);
2523 ResetFlag(call_struct->dialog_widget,call_struct->Ok);
2524 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
2530 /* some other error */
2532 msg = XtNewString(GetSharedMessage(CANT_OVERWRITE_ERROR));
2534 msg = XtNewString(GetSharedMessage(CANT_CREATE_ERROR));
2535 FileOperationError (XtParent(data->w), msg, to);
2536 ResetFlag(call_struct->dialog_widget,call_struct->Ok);
2537 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
2542 /* create was successful: close the dialog */
2543 XtUnmanageChild (call_struct->dialog_widget);
2544 XtDestroyWidget (XtParent (call_struct->dialog_widget));
2545 file_mgr_rec->menuStates |= data->btnMask;
2550 /* free the call data */
2551 XtFree(call_struct->host_name);
2552 XtFree(call_struct->directory_name);
2553 if (call_struct->previous_file_type)
2554 XtFree((char *) call_struct->previous_file_type);
2555 XtFree((char *) call_struct);
2559 * The code below wants to make the file that was just created
2560 * be selected and scroll the view so the new file is visible.
2561 * But: since we made directory updates asynchronous, this code
2562 * won't work anymore, because at this point, we won't yet be able
2563 * to find the new file in the cached directory.
2565 * Possible solutions:
2566 * Somewhere (e.g., in the file_mgr_data structure) log our
2567 * intention to select the new file; when it finally shows up,
2570 dialog_data = _DtGetInstanceData (file_mgr_rec);
2571 file_mgr_data = (FileMgrData *) dialog_data->data;
2572 for (i = 0; i < file_mgr_data->directory_count; i++)
2574 directory_set = (DirectorySet *)file_mgr_data->directory_set[i];
2575 if (strcmp(directory_set->name, call_struct->directory_name) == 0)
2579 file_view_data = NULL;
2580 for (i = 0; i < directory_set->file_count; i++)
2582 if (strcmp(directory_set->order_list[i]->file_data->file_name,
2583 data->new_name) == 0)
2585 file_view_data = directory_set->order_list[i];
2590 if (file_view_data != NULL)
2592 if (file_view_data->widget != NULL)
2594 DeselectAllFiles(file_mgr_data);
2595 SelectFile (file_mgr_data, file_view_data);
2596 PositionFileView(file_view_data, file_mgr_data);
2597 ActivateSingleSelect ((FileMgrRec *) file_mgr_data->file_mgr_rec,
2598 file_mgr_data->selection_list[0]->file_data->logical_type);
2604 XtFree(data->new_name);
2605 XtFree((char *)data);
2610 /************************************************************************
2613 * Get the new file name and create the file.
2615 ************************************************************************/
2620 XtPointer client_data,
2621 XtPointer call_data )
2623 DialogCallbackStruct * call_struct = (DialogCallbackStruct *) client_data;
2629 int dirNameLength = strlen (call_struct->directory_name);
2630 int maxFileNameLength = pathconf (call_struct->directory_name, _PC_NAME_MAX);
2631 unsigned int btnMask;
2632 MakeFileDoneData *data;
2634 /* see if this is a create file or directory */
2635 if (call_struct->menu_widget == *create_directoryBtn)
2637 call_struct->file_mgr_rec->create_directoryBtn_child = NULL;
2639 btnMask = CREATE_DIR;
2643 call_struct->file_mgr_rec->create_dataBtn_child = NULL;
2645 btnMask = CREATE_FILE;
2648 /* get the new name */
2649 new_name = XmTextFieldGetString (call_struct->file_text_widget);
2650 new_name = (char *) _DtStripSpaces (new_name);
2653 if (new_name[0] == '~')
2654 new_name = _DtChangeTildeToHome (new_name);
2656 length = strlen (new_name);
2660 msg = XtNewString(GETMESSAGE(10, 22,
2661 "Cannot create a file or folder with a blank name."));
2663 /* Ensure the new name has length less than or equal to the maximum
2664 length that the system allows.
2665 If maxFileNameLength == -1 the file system is not supporting POSIX, use MAXNAMLEN
2667 else if( maxFileNameLength < -1 || ( maxFileNameLength == -1 && ( length > MAXNAMLEN || length + dirNameLength > MAX_PATH ) ) || ( maxFileNameLength > 0 && length > maxFileNameLength ) )
2669 if (type == DtDIRECTORY)
2671 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2672 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2676 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2677 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2680 #ifdef _CHECK_FOR_SPACES
2681 else if (DtStrchr (new_name, ' ') != NULL ||
2682 DtStrchr (new_name, '\t') != NULL)
2684 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
2690 if (type == DtDIRECTORY)
2691 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2693 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2694 _DtMessage (XtParent (w), title, msg, NULL, HelpRequestCB);
2701 /* set up data for MakeFileDone callback */
2702 data = (MakeFileDoneData *)XtMalloc(sizeof(MakeFileDoneData));
2704 data->call_struct = call_struct;
2706 data->btnMask = btnMask;
2707 data->new_name = new_name;
2710 * Create the file/directory.
2711 * This operation is performed in a background process; when the
2712 * background process finishes, the MakeFileDone callback will be
2713 * called with a return code indicating success or failure.
2716 MakeFile (w, call_struct->host_name, call_struct->directory_name,
2717 new_name, type, ApplyFileDone, (XtPointer)data);
2718 FileTypePreviewCB (w, client_data, (XtPointer) True);
2722 /************************************************************************
2725 * This routine is called when the file creation is finished.
2727 ************************************************************************/
2731 XtPointer client_data,
2735 MakeFileDoneData *data = (MakeFileDoneData *)client_data;
2736 DialogCallbackStruct *call_struct = data->call_struct;
2737 FileMgrRec *file_mgr_rec = (FileMgrRec *) call_struct->file_mgr_rec;
2741 FileViewData *file_view_data;
2742 FileMgrData *file_mgr_data;
2743 DialogData *dialog_data;
2744 DirectorySet *directory_set;
2748 * If the file/directory create was successful, unmanage the dialog
2749 * and free up any allocated data space. Otherwise, just return
2750 * to allow the user to try a different name or cancel the dialog.
2756 if (data->type == DtDIRECTORY)
2758 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2759 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2763 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2764 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2766 _DtMessage (XtParent(data->w), title, msg, NULL, HelpRequestCB);
2772 /* some other error */
2774 msg = XtNewString(GetSharedMessage(CANT_OVERWRITE_ERROR));
2776 msg = XtNewString(GetSharedMessage(CANT_CREATE_ERROR));
2777 FileOperationError (XtParent(data->w), msg, to);
2784 /************************************************************************
2787 * Unmanage and destroy the dialog
2789 ************************************************************************/
2794 XtPointer client_data,
2795 XtPointer call_data )
2797 DialogCallbackStruct * call_struct = (DialogCallbackStruct *) client_data;
2798 DialogData *dialog_data;
2799 FileMgrData *file_mgr_data;
2800 unsigned int btnMask = 0;
2802 if(RecheckFlag(NULL,w))
2805 dialog_data = _DtGetInstanceData ((XtPointer)call_struct->file_mgr_rec);
2806 file_mgr_data = (FileMgrData *) dialog_data->data;
2808 XtUnmanageChild (call_struct->dialog_widget);
2809 XtDestroyWidget (XtParent (call_struct->dialog_widget));
2811 if (file_mgr_data->selected_file_count == 1 )
2813 /* If the selection count is 1 then
2814 resensitize the appropriate menu button.
2815 Otherwise, ignore it.
2817 if (call_struct->menu_widget == *renameBtn)
2819 else if (call_struct->menu_widget == *moveBtn)
2821 else if (call_struct->menu_widget == *duplicateBtn)
2822 btnMask = DUPLICATE;
2823 else if (call_struct->menu_widget == *linkBtn)
2827 if (call_struct->menu_widget == *create_directoryBtn)
2829 btnMask = CREATE_DIR;
2830 call_struct->file_mgr_rec->create_directoryBtn_child = NULL;
2832 else if (call_struct->menu_widget == *create_dataBtn)
2834 btnMask = CREATE_FILE;
2835 call_struct->file_mgr_rec->create_dataBtn_child = NULL;
2838 call_struct->file_mgr_rec->menuStates |= btnMask;
2842 if (call_struct->host_name != NULL)
2843 XtFree ((char *) call_struct->host_name);
2845 if (call_struct->directory_name != NULL)
2846 XtFree ((char *) call_struct->directory_name);
2848 if (call_struct->file_name != NULL)
2849 XtFree ((char *) call_struct->file_name);
2851 if (call_struct->previous_file_type)
2852 XtFree ((char *) call_struct->previous_file_type);
2854 XtFree ((char *) call_struct);
2865 XtSetArg (args[0], XmNuserData, &flag);
2866 XtGetValues(w,args,1);
2867 if(flag == FLAG_SET)
2869 else if(flag != FLAG_RESET)
2872 XtSetArg (args[0], XmNuserData, flag);
2873 XtSetValues(w,args,1);
2875 _DtTurnOnHourGlass(parent);
2887 XtSetArg (args[0], XmNuserData, &flag0);
2888 XtGetValues(w,args,1);
2890 if(flag != FLAG_SET)
2893 XtSetArg (args[0], XmNuserData, flag);
2894 XtSetValues(w,args,1);
2896 _DtTurnOffHourGlass(parent);