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 librararies 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)
74 #include <Xm/DialogS.h>
77 #include <Xm/SeparatoG.h>
79 #include <Xm/LabelG.h>
80 #include <Xm/PushBG.h>
81 #include <Xm/RowColumn.h>
82 #include <Xm/MwmUtil.h>
83 #include <Xm/Protocols.h>
85 #include <X11/Shell.h>
86 #include <X11/Xatom.h>
88 #include <Dt/TitleBox.h>
91 #include <Dt/IconFile.h>
92 #include <Dt/Connect.h>
93 #include <Dt/DtNlUtils.h>
95 #include <Dt/HourGlass.h>
97 #include <Dt/SharedProcs.h>
102 #include "SharedProcs.h"
103 #include "sharedFuncs.h"
108 #include "SharedMsgs.h"
111 #define FM_TYPE_LABEL "TYPE_LABEL"
114 /******** Static Function Declarations ********/
116 static void RenameOk(
118 XtPointer client_data,
119 XtPointer call_data) ;
121 XtPointer client_data,
123 static Boolean GetToPath(
128 static void FileTypePreview(
131 XtPointer client_data,
132 XtPointer call_data) ;
133 static void FileTypePreviewCB(
135 XtPointer client_data,
136 XtPointer call_data) ;
137 static void MakeFileOk(
139 XtPointer client_data,
140 XtPointer call_data) ;
141 static void MakeFileApply(
143 XtPointer client_data,
144 XtPointer call_data) ;
145 static void MakeFileDone(
146 XtPointer client_data,
149 static void ApplyFileDone(
150 XtPointer client_data,
153 static void DialogCancel(
155 XtPointer client_data,
156 XtPointer call_data) ;
158 /******** End Static Function Declarations ********/
162 /************************************************************************
164 * ShowRenameFileDialog
165 * Callback function invoked from the File Manager menu. This
166 * function creates and displays a dialog prompting for a new
167 * name for the selected file.
169 * NOTE: The Rename File... menu item can currently be reactivated
170 * by single select on another item. Is this behavior correct?
172 ************************************************************************/
175 ShowRenameFileDialog(
177 XtPointer client_data,
178 XtPointer call_data )
180 FileMgrRec * file_mgr_rec;
181 DialogData * dialog_data;
182 FileViewData * file_view_data;
185 FileMgrData * file_mgr_data;
186 char * directory_name;
189 /* Set the menu item to insensitive to prevent multiple */
190 /* dialogs from being posted and get the area under the */
191 /* menu pane redrawn. */
197 file_view_data = (FileViewData *)client_data;
202 file_view_data = NULL;
203 mbar = XmGetPostedFromWidget(XtParent(w));
207 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
208 XtGetValues(mbar, args, 1);
210 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
211 file_mgr_data = (FileMgrData *) dialog_data->data;
214 /* Get the selected file. */
216 if( file_view_data == NULL )
217 file_view_data = file_mgr_data->selection_list[0];
219 directory_name = ((DirectorySet *) file_view_data->directory_set)->name;
221 /* Create the widget hierarchy for the dialog */
224 XtSetArg (args[n], XmNallowShellResize, True); n++;
226 /* Ignore accelerators when we're insensitive */
229 if ((file_mgr_rec->menuStates & RENAME) == 0)
231 file_mgr_rec->menuStates &= ~RENAME;
235 if(file_mgr_data->selected_file_count != 0)
236 file_mgr_rec->menuStates |= RENAME;
239 UnpostTextField (file_mgr_data);
241 CreateNameChangeDialog(file_view_data->widget, file_view_data,
242 (XtPointer)file_mgr_data, 0);
246 /************************************************************************
249 * Callback function invoked from the File Manager menu. This
250 * function creates and displays a dialog prompting for a new
251 * name for the selected file.
253 * NOTE: The Rename File... menu item can currently be reactivated
254 * by single select on another item. Is this behavior correct?
256 ************************************************************************/
261 XtPointer client_data,
262 XtPointer call_data )
264 FileMgrRec * file_mgr_rec;
265 DialogData * dialog_data;
266 FileMgrData * file_mgr_data;
267 static FileViewData * file_view_data; /* static because it is passed to RenameOk callback */
269 char name_string[18+MAX_PATH];
270 char * directory_name;
271 char * tmpStr, *tempStr;
274 Dimension f_width, d_width;
277 Widget form, dir_form, file_form;
279 Widget dir_label, dir_text;
280 Widget file_label, file_text;
281 Widget file_type_box;
288 int flag = FLAG_RESET;
290 DialogCallbackStruct * call_struct;
291 XmString label_string;
296 XtTranslations trans_table;
297 Atom delete_window_atom;
299 /* Set the menu item to insensitive to prevent multiple */
300 /* dialogs from being posted and get the area under the */
301 /* menu pane redrawn. */
307 file_view_data = (FileViewData *)client_data;
312 file_view_data = NULL;
313 mbar = XmGetPostedFromWidget(XtParent(w));
317 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
318 XtGetValues(mbar, args, 1);
320 /* Ignore accelerators when we're insensitive */
322 if ((file_mgr_rec->menuStates & DUPLICATE) == 0)
325 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
326 file_mgr_data = (FileMgrData *) dialog_data->data;
329 /* Get the selected file. */
331 if(file_view_data == NULL)
332 file_view_data = file_mgr_data->selection_list[0];
333 directory_name = ((DirectorySet *) file_view_data->directory_set)->name;
336 /* Create the widget hierarchy for the dialog */
339 XtSetArg (args[n], XmNallowShellResize, True); n++;
341 /* Adjust the decorations for the dialog shell of the dialog */
343 XtSetArg (args[n], XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE); ++n;
344 XtSetArg (args[n], XmNmwmDecorations, MWM_DECOR_BORDER | MWM_DECOR_TITLE); ++n;
346 file_mgr_rec->menuStates &= ~DUPLICATE;
347 if(file_mgr_data->title != NULL &&
348 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
350 tmpStr = GETMESSAGE(10, 44, "Copy Object");
351 tempStr = (char *)XtMalloc(strlen(tmpStr) +
352 strlen(file_mgr_data->title) + 5);
353 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
357 tmpStr = (GETMESSAGE(10,45, "File Manager - Copy Object"));
358 tempStr = XtNewString(tmpStr);
361 XtSetArg (args[n], XmNtitle, tempStr); n++;
362 shell = XmCreateDialogShell (file_mgr_rec->shell, "copy_file", args, n);
365 /* Set the useAsyncGeo on the shell */
366 XtSetArg (args[0], XmNuseAsyncGeometry, True);
367 XtSetValues (XtParent(shell), args, 1);
370 trans_table = XtParseTranslationTable(translations_space);
373 XtSetArg (args[n], XmNmarginWidth, 1); n++;
374 XtSetArg (args[n], XmNmarginHeight, 1); n++;
375 XtSetArg (args[n], XmNshadowThickness, 1); n++;
376 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
377 XtSetArg (args[n], XmNautoUnmanage, False); n++;
378 #ifdef _CHECK_FOR_SPACES
379 XtSetArg (args[n], XmNtextTranslations, trans_table); n++;
381 XtSetArg (args[n], XmNuserData, file_mgr_rec); n++;
382 form = XmCreateForm (shell, "form", args, n);
383 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
384 HELP_COPY_DIALOG_STR);
387 sprintf (name_string, "%s ", ((char *)GETMESSAGE(10, 37, "Selected object:")));
388 strcat (name_string, file_view_data->file_data->file_name);
389 label_string = XmStringCreateLocalized (name_string);
392 XtSetArg (args[n], XmNlabelString, label_string); n++;
393 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
394 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
395 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
396 XtSetArg (args[n], XmNtopOffset, 5); n++;
397 XtSetArg (args[n], XmNtraversalOn, False); n++;
398 current_name = XmCreateLabelGadget (form, "current_name", args, n);
399 XtManageChild (current_name);
400 XtAddCallback(current_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
401 HELP_COPY_DIALOG_STR);
403 XmStringFree (label_string);
405 /* Create the field displaying the file type info */
408 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
409 XtSetArg(args[n], XmNtopWidget, current_name); n++;
410 XtSetArg(args[n], XmNtopOffset, 3); n++;
411 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
412 XtSetArg(args[n], XmNrightOffset, 5); n++;
413 XtSetArg(args[n], XmNmarginHeight, 5); n++;
414 XtSetArg(args[n], XmNmarginWidth, 5); n++;
415 file_type_box = XmCreateFrame (form, "file_type_box", args, n);
416 XtManageChild (file_type_box);
417 XtAddCallback(file_type_box, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
418 HELP_COPY_DIALOG_STR);
421 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 8, "File Type")));
424 XtSetArg (args[n], XmNlabelString, label_string); n++;
425 XtSetArg (args[n], XmNshadowThickness, 0); n++;
426 XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++;
427 XtSetArg (args[n], XmNpixmapPosition, XmPIXMAP_TOP); n++;
428 XtSetArg (args[n], XmNtraversalOn, False); n++;
429 file_type = _DtCreateIcon (file_type_box, "file_type", args, n);
430 XtManageChild (file_type);
431 XtAddCallback(file_type, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
432 HELP_COPY_DIALOG_STR);
434 XmStringFree (label_string);
437 /* Adjust the colors of the icon */
438 SetToNormalColors (file_type, form, file_mgr_rec->main, 0);
441 /* ------------------------------------------------------------ */
442 /* Create a form to hold the destination label and TextField. */
443 /* The form makes sure they will always be aligned together. */
444 /* ------------------------------------------------------------ */
447 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
448 XtSetArg (args[n], XmNleftOffset, 5); n++;
449 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
450 XtSetArg (args[n], XmNtopWidget, current_name); n++;
451 XtSetArg (args[n], XmNtopOffset, 10); n++;
452 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
453 XtSetArg (args[n], XmNrightWidget, file_type_box); n++;
454 XtSetArg (args[n], XmNrightOffset, 5); n++;
456 dir_form = XmCreateForm (form, "dir_form", args, n);
457 XtManageChild (dir_form);
459 /* Create the Destination Label */
460 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 34, "Destination Folder: ")));
463 XtSetArg (args[n], XmNlabelString, label_string); n++;
464 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
465 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
466 XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
467 XtSetArg (args[n], XmNtraversalOn, False); n++;
468 dir_label = XmCreateLabelGadget (dir_form, "new_name", args, n);
469 XtManageChild (dir_label);
470 XtAddCallback(dir_label, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
471 HELP_COPY_DIALOG_STR);
473 XmStringFree (label_string);
475 /* Create the Destination TextField */
477 XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
478 XtSetArg (args[n], XmNleftOffset, 5); n++;
479 XtSetArg (args[n], XmNleftWidget, dir_label); n++;
480 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
481 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
482 XtSetArg (args[n], XmNtraversalOn, True); n++;
483 XtSetArg (args[n], XmNcursorPosition,
484 strlen(file_view_data->file_data->file_name)); n++;
485 dir_text = XmCreateTextField (dir_form, "new_text", args, n);
486 XtManageChild (dir_text);
487 XtAddCallback(dir_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
488 HELP_COPY_DIALOG_STR);
489 XmTextFieldInsert(dir_text, 0, directory_name);
491 /* -------------------------------------------------------------- */
492 /* Create a form to hold the Name for Copy label and TextField. */
493 /* The form makes sure they will always be aligned together. */
494 /* -------------------------------------------------------------- */
497 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
498 XtSetArg (args[n], XmNleftOffset, 5); n++;
499 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
500 XtSetArg (args[n], XmNtopWidget, dir_form); n++;
501 XtSetArg (args[n], XmNtopOffset, 5); n++;
502 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
503 XtSetArg (args[n], XmNrightWidget, file_type_box); n++;
504 XtSetArg (args[n], XmNrightOffset, 5); n++;
506 file_form = XmCreateForm (form, "file_form", args, n);
507 XtManageChild (file_form);
509 /* Create the Name for Copy Label */
510 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 38, "Name for copy : ")));
513 XtSetArg (args[n], XmNlabelString, label_string); n++;
514 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
515 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
516 XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++;
517 XtSetArg (args[n], XmNtraversalOn, False); n++;
518 file_label = XmCreateLabelGadget (file_form, "new_name", args, n);
519 XtManageChild (file_label);
520 XtAddCallback(file_label, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
521 HELP_COPY_DIALOG_STR);
523 XmStringFree (label_string);
525 /* Create the Name for Copy TextField */
527 XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
528 XtSetArg (args[n], XmNleftWidget, file_label); n++;
529 XtSetArg (args[n], XmNleftOffset, 5); n++;
530 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
531 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
532 XtSetArg (args[n], XmNtraversalOn, True); n++;
533 XtSetArg (args[n], XmNcursorPosition,
534 strlen(file_view_data->file_data->file_name)); n++;
535 file_text = XmCreateTextField (file_form, "new_text", args, n);
536 XtManageChild (file_text);
537 XtAddCallback(file_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
538 HELP_COPY_DIALOG_STR);
539 XmTextFieldInsert(file_text, 0, file_view_data->file_data->file_name);
542 /* ------------------------------------------------ */
543 /* Make the two labels the same length - maximum. */
544 /* ------------------------------------------------ */
546 XtVaGetValues(dir_label, XmNwidth, &width, NULL);
547 d_width = (Dimension)width;
548 XtVaGetValues(file_label, XmNwidth, &width, NULL);
549 f_width = (Dimension)width;
551 if (d_width > f_width)
552 XtVaSetValues(file_label, XmNwidth, d_width, NULL);
554 XtVaSetValues(dir_label, XmNwidth, f_width, NULL);
556 XtVaGetValues(dir_text, XmNwidth, &width, NULL);
557 d_width = (Dimension)width;
558 XtVaGetValues(file_text, XmNwidth, &width, NULL);
559 f_width = (Dimension)width;
561 if (d_width > f_width)
562 XtVaSetValues(file_text, XmNwidth, d_width, NULL);
564 XtVaSetValues(dir_text, XmNwidth, f_width, NULL);
567 /* The data sent to the Text, Ok and Cancel callbacks */
570 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
572 call_struct->dialog_widget = form;
573 call_struct->menu_widget = w;
574 call_struct->dir_text_widget = dir_text;
575 call_struct->file_text_widget = file_text;
576 call_struct->file_type_widget = file_type;
577 call_struct->original_physical_type =
578 file_view_data->file_data->physical_type;
579 call_struct->file_mgr_rec = file_mgr_rec;
580 call_struct->host_name = XtNewString (file_mgr_data->host);
581 call_struct->directory_name = XtNewString (directory_name);
582 call_struct->mode = COPY_FILE;
583 call_struct->file_name = XtNewString (file_view_data->file_data->file_name);
584 call_struct->original_logical_type =file_view_data->file_data->logical_type;
585 call_struct->previous_file_type = NULL;
586 call_struct->file_mgr_data = file_mgr_data;
589 /* Create a separator between the buttons */
592 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
593 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
594 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
595 XtSetArg (args[n], XmNtopWidget, file_type_box); n++;
596 XtSetArg (args[n], XmNtopOffset, 5); n++;
597 separator = XmCreateSeparatorGadget (form, "separator", args, n);
598 XtManageChild (separator);
602 /* Create the ok, cancel, preview and help buttons */
605 XtSetArg (args[n], XmNlabelString, okXmString); n++;
606 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
607 XtSetArg (args[n], XmNleftPosition, 1); n++;
608 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
609 XtSetArg (args[n], XmNrightPosition, 21); n++;
610 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
611 XtSetArg (args[n], XmNtopWidget, separator); n++;
612 XtSetArg (args[n], XmNtopOffset, 5); n++;
613 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
614 XtSetArg (args[n], XmNbottomOffset, 5); n++;
615 XtSetArg (args[n], XmNmarginWidth, 4); n++;
616 XtSetArg (args[n], XmNmarginHeight, 4); n++;
617 XtSetArg (args[n], XmNshowAsDefault, True); n++;
618 XtSetArg (args[n], XmNuserData, flag); n++;
619 ok = XmCreatePushButtonGadget (form, "ok", args, n);
622 XtAddCallback (ok, XmNactivateCallback, RenameOk, (XtPointer) call_struct);
623 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
624 HELP_COPY_DIALOG_STR);
627 /* Set the ok button to the default for the bulletin board. */
628 /* This causes the return key from the text widget to be */
629 /* properly processed. */
631 XtSetArg (args[0], XmNdefaultButton, ok);
632 XtSetValues (form, args, 1);
636 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
637 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
638 XtSetArg (args[n], XmNleftPosition, 22); n++;
639 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
640 XtSetArg (args[n], XmNrightPosition, 42); n++;
641 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
642 XtSetArg (args[n], XmNtopWidget, separator); n++;
643 XtSetArg (args[n], XmNtopOffset, 5); n++;
644 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
645 XtSetArg (args[n], XmNbottomOffset, 5); n++;
646 XtSetArg (args[n], XmNmarginWidth, 4); n++;
647 XtSetArg (args[n], XmNmarginHeight, 4); n++;
648 XtSetArg (args[n], XmNuserData, flag); n++;
649 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
650 XtManageChild (cancel);
652 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
653 (XtPointer) call_struct);
654 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
655 HELP_COPY_DIALOG_STR);
658 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 36, "Show Icon")));
661 XtSetArg (args[n], XmNlabelString, label_string); n++;
662 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
663 XtSetArg (args[n], XmNleftPosition, 43); n++;
664 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
665 XtSetArg (args[n], XmNrightPosition, 78); n++;
666 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
667 XtSetArg (args[n], XmNtopWidget, separator); n++;
668 XtSetArg (args[n], XmNtopOffset, 5); n++;
669 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
670 XtSetArg (args[n], XmNbottomOffset, 5); n++;
671 XtSetArg (args[n], XmNmarginWidth, 4); n++;
672 XtSetArg (args[n], XmNmarginHeight, 4); n++;
673 preview = XmCreatePushButtonGadget (form, "show_file_type", args, n);
674 XtManageChild (preview);
676 XmStringFree (label_string);
677 XtAddCallback (preview, XmNactivateCallback, FileTypePreviewCB,
678 (XtPointer) call_struct);
679 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
680 HELP_COPY_DIALOG_STR);
681 tmpStr = XtNewString(file_view_data->file_data->file_name);
682 FileTypePreview (preview, tmpStr, (XtPointer) call_struct, NULL);
685 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
686 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
687 XtSetArg (args[n], XmNleftPosition, 79); n++;
688 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
689 XtSetArg (args[n], XmNrightPosition, 99); n++;
690 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
691 XtSetArg (args[n], XmNtopWidget, separator); n++;
692 XtSetArg (args[n], XmNtopOffset, 5); n++;
693 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
694 XtSetArg (args[n], XmNbottomOffset, 5); n++;
695 XtSetArg (args[n], XmNmarginWidth, 4); n++;
696 XtSetArg (args[n], XmNmarginHeight, 4); n++;
697 help = XmCreatePushButtonGadget (form, "help", args, n);
698 XtManageChild (help);
700 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
701 HELP_COPY_DIALOG_STR);
702 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
703 HELP_COPY_DIALOG_STR);
707 XtSetArg (args[0], XmNcancelButton, cancel);
708 XtSetValues (form, args, 1);
710 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
711 (XtPointer) XtParent(shell));
713 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
714 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
715 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
716 (XtPointer) call_struct );
718 call_struct->Ok = ok;
719 call_struct->Cancel = cancel;
721 XtManageChild (form);
723 /* Force the focus to the text field */
724 XmProcessTraversal(dir_text, XmTRAVERSE_CURRENT);
727 /************************************************************************
730 * Callback function invoked from the File Manager menu. This
731 * function creates and displays a dialog prompting for a new
732 * name for the selected file.
734 * NOTE: The Rename File... menu item can currently be reactivated
735 * by single select on another item. Is this behavior correct?
737 ************************************************************************/
742 XtPointer client_data,
743 XtPointer call_data )
745 FileMgrRec * file_mgr_rec;
746 DialogData * dialog_data;
747 static FileMgrData * file_mgr_data; /* static because it is passed to RenameOk callback */
748 FileViewData * file_view_data;
750 char name_string[18+MAX_PATH];
751 char * directory_name;
752 char * tmpStr, *tempStr;
765 DialogCallbackStruct * call_struct;
766 XmString label_string;
771 XtTranslations trans_table;
772 Atom delete_window_atom;
774 /* Set the menu item to insensitive to prevent multiple */
775 /* dialogs from being posted and get the area under the */
776 /* menu pane redrawn. */
782 file_view_data = (FileViewData *)client_data;
787 file_view_data = NULL;
788 mbar = XmGetPostedFromWidget(XtParent(w));
792 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
793 XtGetValues(mbar, args, 1);
795 /* Ignore accelerators when we're insensitive */
797 if ((file_mgr_rec->menuStates & MOVE) == 0)
800 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
801 file_mgr_data = (FileMgrData *) dialog_data->data;
803 /* Get the selected file. */
805 if(file_view_data == NULL)
806 file_view_data = file_mgr_data->selection_list[0];
807 directory_name = ((DirectorySet *) file_view_data->directory_set)->name;
810 /* Create the widget hierarchy for the dialog */
813 XtSetArg (args[n], XmNallowShellResize, True); n++;
815 /* Adjust the decorations for the dialog shell of the dialog */
816 XtSetArg (args[n], XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE); ++n;
817 XtSetArg (args[n], XmNmwmDecorations, MWM_DECOR_BORDER | MWM_DECOR_TITLE); ++n;
819 file_mgr_rec->menuStates &= ~MOVE;
820 if(file_mgr_data->title != NULL &&
821 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
823 tmpStr = GETMESSAGE(10, 42, "Move Object");
824 tempStr = (char *)XtMalloc(strlen(tmpStr) +
825 strlen(file_mgr_data->title) + 5);
826 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
830 tmpStr = (GETMESSAGE(10,43, "File Manager - Move Object"));
831 tempStr = XtNewString(tmpStr);
833 XtSetArg (args[n], XmNtitle, tempStr); n++;
834 shell = XmCreateDialogShell (file_mgr_rec->shell, "move_file", args, n);
837 /* Set the useAsyncGeo on the shell */
838 XtSetArg (args[0], XmNuseAsyncGeometry, True);
839 XtSetValues (XtParent(shell), args, 1);
842 trans_table = XtParseTranslationTable(translations_space);
845 XtSetArg (args[n], XmNmarginWidth, 1); n++;
846 XtSetArg (args[n], XmNmarginHeight, 1); n++;
847 XtSetArg (args[n], XmNshadowThickness, 1); n++;
848 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
849 XtSetArg (args[n], XmNautoUnmanage, False); n++;
850 #ifdef _CHECK_FOR_SPACES
851 XtSetArg (args[n], XmNtextTranslations, trans_table);n++;
853 XtSetArg (args[n], XmNuserData, file_mgr_rec); n++;
854 form = XmCreateForm (shell, "form", args, n);
855 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
856 HELP_MOVE_DIALOG_STR);
859 sprintf (name_string, "%s ", ((char *)GETMESSAGE(10, 37, "Selected object:")));
860 strcat (name_string, file_view_data->file_data->file_name);
861 label_string = XmStringCreateLocalized (name_string);
864 XtSetArg (args[n], XmNlabelString, label_string); n++;
865 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
866 XtSetArg (args[n], XmNleftOffset, 5); n++;
867 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
868 XtSetArg (args[n], XmNtopOffset, 5); n++;
869 XtSetArg (args[n], XmNtraversalOn, False); n++;
870 current_name = XmCreateLabelGadget (form, "current_name", args, n);
871 XtManageChild (current_name);
872 XtAddCallback(current_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
873 HELP_MOVE_DIALOG_STR);
875 XmStringFree (label_string);
878 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 34, "Destination Folder: ")));
881 XtSetArg (args[n], XmNlabelString, label_string); n++;
882 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
883 XtSetArg (args[n], XmNleftOffset, 5); n++;
884 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
885 XtSetArg (args[n], XmNtopWidget, current_name); n++;
886 XtSetArg (args[n], XmNtopOffset, 12); n++;
887 XtSetArg (args[n], XmNtraversalOn, False); n++;
888 new_name = XmCreateLabelGadget (form, "new_name", args, n);
889 XtManageChild (new_name);
890 XtAddCallback(new_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
891 HELP_MOVE_DIALOG_STR);
893 XmStringFree (label_string);
897 XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
898 XtSetArg (args[n], XmNleftWidget, new_name); n++;
899 XtSetArg (args[n], XmNleftOffset, 0); n++;
900 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
901 XtSetArg (args[n], XmNtopWidget, current_name); n++;
902 XtSetArg (args[n], XmNtopOffset, 5); n++;
903 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
904 XtSetArg (args[n], XmNrightOffset, 5); n++;
905 XtSetArg (args[n], XmNtraversalOn, True); n++;
906 XtSetArg (args[n], XmNcursorPosition,
907 strlen(file_view_data->file_data->file_name)); n++;
908 new_text = XmCreateTextField (form, "new_text", args, n);
909 XtManageChild (new_text);
910 XtAddCallback(new_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
911 HELP_MOVE_DIALOG_STR);
913 /* The data sent to the Text, Ok and Cancel callbacks */
916 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
918 call_struct->dialog_widget = form;
919 call_struct->menu_widget = w;
920 call_struct->dir_text_widget = new_text;
921 call_struct->file_text_widget = NULL;
922 call_struct->file_type_widget = NULL;
923 call_struct->original_physical_type =
924 file_view_data->file_data->physical_type;
925 call_struct->file_mgr_rec = file_mgr_rec;
926 call_struct->host_name = XtNewString (file_mgr_data->host);
927 call_struct->directory_name = XtNewString (directory_name);
928 call_struct->file_name = XtNewString (file_view_data->file_data->file_name);
929 call_struct->mode = MOVE_FILE;
930 call_struct->original_logical_type =file_view_data->file_data->logical_type;
931 call_struct->previous_file_type = NULL;
932 call_struct->file_mgr_data = file_mgr_data;
935 /* Create a separator between the buttons */
938 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
939 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
940 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
941 XtSetArg (args[n], XmNtopWidget, new_name); n++;
942 XtSetArg (args[n], XmNtopOffset, 10); n++;
943 separator = XmCreateSeparatorGadget (form, "separator", args, n);
944 XtManageChild (separator);
948 /* Create the ok, cancel, preview and help buttons */
952 XtSetArg (args[n], XmNlabelString, okXmString); n++;
953 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
954 XtSetArg (args[n], XmNleftPosition, 2); n++;
955 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
956 XtSetArg (args[n], XmNrightPosition, 32); n++;
957 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
958 XtSetArg (args[n], XmNtopWidget, separator); n++;
959 XtSetArg (args[n], XmNtopOffset, 5); n++;
960 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
961 XtSetArg (args[n], XmNbottomOffset, 5); n++;
962 XtSetArg (args[n], XmNmarginWidth, 4); n++;
963 XtSetArg (args[n], XmNmarginHeight, 4); n++;
964 XtSetArg (args[n], XmNshowAsDefault, True); n++;
965 XtSetArg (args[n], XmNuserData, flag); n++;
966 ok = XmCreatePushButtonGadget (form, "ok", args, n);
969 XtAddCallback (ok, XmNactivateCallback, RenameOk, (XtPointer) call_struct);
970 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
971 HELP_MOVE_DIALOG_STR);
974 /* Set the ok button to the default for the bulletin board. */
975 /* This causes the return key from the text widget to be */
976 /* properly processed. */
978 XtSetArg (args[0], XmNdefaultButton, ok);
979 XtSetValues (form, args, 1);
983 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
984 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
985 XtSetArg (args[n], XmNleftPosition, 35); n++;
986 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
987 XtSetArg (args[n], XmNrightPosition, 65); n++;
988 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
989 XtSetArg (args[n], XmNtopWidget, separator); n++;
990 XtSetArg (args[n], XmNtopOffset, 5); n++;
991 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
992 XtSetArg (args[n], XmNbottomOffset, 5); n++;
993 XtSetArg (args[n], XmNmarginWidth, 4); n++;
994 XtSetArg (args[n], XmNmarginHeight, 4); n++;
995 XtSetArg (args[n], XmNuserData, flag); n++;
996 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
997 XtManageChild (cancel);
999 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
1000 (XtPointer) call_struct);
1001 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1002 HELP_MOVE_DIALOG_STR);
1006 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
1007 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1008 XtSetArg (args[n], XmNleftPosition, 68); n++;
1009 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1010 XtSetArg (args[n], XmNrightPosition, 98); n++;
1011 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1012 XtSetArg (args[n], XmNtopWidget, separator); n++;
1013 XtSetArg (args[n], XmNtopOffset, 5); n++;
1014 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1015 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1016 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1017 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1018 help = XmCreatePushButtonGadget (form, "help", args, n);
1019 XtManageChild (help);
1021 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
1022 HELP_MOVE_DIALOG_STR);
1023 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1024 HELP_MOVE_DIALOG_STR);
1028 XtSetArg (args[0], XmNcancelButton, cancel);
1029 XtSetValues (form, args, 1);
1031 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
1032 (XtPointer) XtParent(shell));
1034 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
1035 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
1036 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
1037 (XtPointer) call_struct );
1039 call_struct->Ok = ok;
1040 call_struct->Cancel = cancel;
1042 XtManageChild (form);
1044 /* Force the focus to the text field */
1045 XmProcessTraversal(new_text, XmTRAVERSE_CURRENT);
1049 /************************************************************************
1051 * ShowLinkFileDialog
1052 * Callback function invoked from the File Manager menu. This
1053 * function creates and displays a dialog prompting for a new
1054 * name for the selected file.
1056 * NOTE: The Rename File... menu item can currently be reactivated
1057 * by single select on another item. Is this behavior correct?
1059 ************************************************************************/
1064 XtPointer client_data,
1065 XtPointer call_data )
1067 FileMgrRec * file_mgr_rec;
1068 DialogData * dialog_data;
1069 static FileMgrData * file_mgr_data; /* static because it is passed to RenameOk callback */
1070 FileViewData * file_view_data;
1072 char name_string[18+MAX_PATH];
1073 char * directory_name;
1074 char * tmpStr, *tempStr;
1078 Widget current_name;
1079 Widget dir_label, dir_text;
1080 Widget file_label, file_text;
1081 Widget file_type_box;
1088 int flag=FLAG_RESET;
1090 DialogCallbackStruct * call_struct;
1091 XmString label_string;
1096 XtTranslations trans_table;
1097 Atom delete_window_atom;
1099 /* Set the menu item to insensitive to prevent multiple */
1100 /* dialogs from being posted and get the area under the */
1101 /* menu pane redrawn. */
1103 XmUpdateDisplay (w);
1105 if(client_data != 0)
1107 file_view_data = (FileViewData *)client_data;
1112 file_view_data = NULL;
1113 mbar = XmGetPostedFromWidget(XtParent(w));
1117 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1118 XtGetValues(mbar, args, 1);
1120 /* Ignore accelerators when we're insensitive */
1122 if ((file_mgr_rec->menuStates & LINK) == 0)
1125 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
1126 file_mgr_data = (FileMgrData *) dialog_data->data;
1129 /* Get the selected file. */
1131 if(file_view_data == NULL)
1132 file_view_data = file_mgr_data->selection_list[0];
1133 directory_name = ((DirectorySet *) file_view_data->directory_set)->name;
1136 /* Create the widget hierarchy for the dialog */
1139 XtSetArg (args[n], XmNallowShellResize, True); n++;
1141 file_mgr_rec->menuStates &= ~LINK;
1142 if(file_mgr_data->title != NULL &&
1143 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
1145 tmpStr = GETMESSAGE(10, 46, "Link Object");
1146 tempStr = (char *)XtMalloc(strlen(tmpStr) +
1147 strlen(file_mgr_data->title) + 5);
1148 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
1152 tmpStr = (GETMESSAGE(10,47, "File Manager - Link Object"));
1153 tempStr = XtNewString(tmpStr);
1155 XtSetArg (args[n], XmNtitle, tempStr); n++;
1156 shell = XmCreateDialogShell (file_mgr_rec->shell, "link_file", args, n);
1159 /* Set the useAsyncGeo on the shell */
1160 XtSetArg (args[0], XmNuseAsyncGeometry, True);
1161 XtSetValues (XtParent(shell), args, 1);
1164 trans_table = XtParseTranslationTable(translations_space);
1167 XtSetArg (args[n], XmNmarginWidth, 1); n++;
1168 XtSetArg (args[n], XmNmarginHeight, 1); n++;
1169 XtSetArg (args[n], XmNshadowThickness, 1); n++;
1170 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
1171 XtSetArg (args[n], XmNautoUnmanage, False); n++;
1172 #ifdef _CHECK_FOR_SPACES
1173 XtSetArg (args[n], XmNtextTranslations, trans_table); n++;
1175 XtSetArg (args[n], XmNuserData, file_mgr_rec); n++;
1176 form = XmCreateForm (shell, "form", args, n);
1177 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1178 HELP_LINK_DIALOG_STR);
1181 sprintf (name_string, "%s ", ((char *)GETMESSAGE(10, 37, "Selected object:")));
1182 strcat (name_string, file_view_data->file_data->file_name);
1183 label_string = XmStringCreateLocalized (name_string);
1186 XtSetArg (args[n], XmNlabelString, label_string); n++;
1187 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
1188 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
1190 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
1191 XtSetArg (args[n], XmNtopOffset, 5); n++;
1192 XtSetArg (args[n], XmNtraversalOn, False); n++;
1193 current_name = XmCreateLabelGadget (form, "current_name", args, n);
1194 XtManageChild (current_name);
1195 XtAddCallback(current_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1196 HELP_LINK_DIALOG_STR);
1198 XmStringFree (label_string);
1200 /* Create the field displaying the file type info */
1203 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
1204 XtSetArg(args[n], XmNtopOffset, 15); n++;
1205 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
1206 XtSetArg(args[n], XmNrightOffset, 5); n++;
1207 XtSetArg(args[n], XmNmarginHeight, 5); n++;
1208 XtSetArg(args[n], XmNmarginWidth, 5); n++;
1209 file_type_box = XmCreateFrame (form, "file_type_box", args, n);
1210 XtManageChild (file_type_box);
1211 XtAddCallback(file_type_box, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1212 HELP_LINK_DIALOG_STR);
1215 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 8, "File Type")));
1218 XtSetArg (args[n], XmNlabelString, label_string); n++;
1219 XtSetArg (args[n], XmNshadowThickness, 0); n++;
1220 XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++;
1221 XtSetArg (args[n], XmNpixmapPosition, XmPIXMAP_TOP); n++;
1222 XtSetArg (args[n], XmNtraversalOn, False); n++;
1223 file_type = _DtCreateIcon (file_type_box, "file_type", args, n);
1224 XtManageChild (file_type);
1225 XtAddCallback(file_type, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1226 HELP_LINK_DIALOG_STR);
1228 XmStringFree (label_string);
1231 /* Adjust the colors of the icon */
1232 SetToNormalColors (file_type, form, file_mgr_rec->main, 0);
1235 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
1236 XtSetArg (args[n], XmNrightWidget, file_type_box); n++;
1237 XtSetArg (args[n], XmNrightOffset, 5); n++;
1238 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1239 XtSetArg (args[n], XmNtopWidget, current_name); n++;
1240 XtSetArg (args[n], XmNtopOffset, 5); n++;
1241 XtSetArg (args[n], XmNtraversalOn, True); n++;
1242 XtSetArg (args[n], XmNcursorPosition,
1243 strlen(file_view_data->file_data->file_name)); n++;
1244 dir_text = XmCreateTextField (form, "new_text", args, n);
1245 XtManageChild (dir_text);
1246 XtAddCallback(dir_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1247 HELP_LINK_DIALOG_STR);
1248 XmTextFieldInsert(dir_text, 0, directory_name);
1251 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 34, "Destination Folder: ")));
1254 XtSetArg (args[n], XmNlabelString, label_string); n++;
1255 XtSetArg (args[n], XmNrightWidget, dir_text); n++;
1256 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
1257 XtSetArg (args[n], XmNrightOffset, 5); n++;
1258 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1259 XtSetArg (args[n], XmNtopWidget, current_name); n++;
1260 XtSetArg (args[n], XmNtopOffset, 12); n++;
1261 XtSetArg (args[n], XmNtraversalOn, False); n++;
1262 dir_label = XmCreateLabelGadget (form, "new_name", args, n);
1263 XtManageChild (dir_label);
1264 XtAddCallback(dir_label, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1265 HELP_LINK_DIALOG_STR);
1267 XmStringFree (label_string);
1270 XtSetArg (args[n], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
1271 XtSetArg (args[n], XmNleftWidget, dir_text); n++;
1272 XtSetArg (args[n], XmNleftOffset, 0); n++;
1273 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1274 XtSetArg (args[n], XmNtopWidget, dir_label); n++;
1275 XtSetArg (args[n], XmNtopOffset, 5); n++;
1276 XtSetArg (args[n], XmNtraversalOn, True); n++;
1277 XtSetArg (args[n], XmNcursorPosition,
1278 strlen(file_view_data->file_data->file_name)); n++;
1279 file_text = XmCreateTextField (form, "new_text", args, n);
1280 XtManageChild (file_text);
1281 XtAddCallback(file_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1282 HELP_LINK_DIALOG_STR);
1283 XmTextFieldInsert(file_text, 0, file_view_data->file_data->file_name);
1285 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 38, "Name for copy : ")));
1288 XtSetArg (args[n], XmNlabelString, label_string); n++;
1289 XtSetArg (args[n], XmNrightWidget, file_text); n++;
1290 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
1291 XtSetArg (args[n], XmNrightOffset, 5); n++;
1292 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1293 XtSetArg (args[n], XmNtopWidget, dir_label); n++;
1294 XtSetArg (args[n], XmNtopOffset, 12); n++;
1295 XtSetArg (args[n], XmNtraversalOn, False); n++;
1296 file_label = XmCreateLabelGadget (form, "new_name", args, n);
1297 XtManageChild (file_label);
1298 XtAddCallback(file_label, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1299 HELP_LINK_DIALOG_STR);
1301 XmStringFree (label_string);
1304 /* The data sent to the Text, Ok and Cancel callbacks */
1307 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
1309 call_struct->dialog_widget = form;
1310 call_struct->menu_widget = w;
1311 call_struct->dir_text_widget = dir_text;
1312 call_struct->file_text_widget = file_text;
1313 call_struct->file_type_widget = file_type;
1314 call_struct->original_physical_type =
1315 file_view_data->file_data->physical_type;
1316 call_struct->file_mgr_rec = file_mgr_rec;
1317 call_struct->host_name = XtNewString (file_mgr_data->host);
1318 call_struct->directory_name = XtNewString (directory_name);
1319 call_struct->mode = LINK_FILE;
1320 call_struct->file_name = XtNewString (file_view_data->file_data->file_name);
1321 call_struct->original_logical_type =file_view_data->file_data->logical_type;
1322 call_struct->previous_file_type = NULL;
1323 call_struct->file_mgr_data = file_mgr_data;
1326 /* Create a separator between the buttons */
1329 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
1330 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
1331 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1332 XtSetArg (args[n], XmNtopWidget, file_label); n++;
1333 XtSetArg (args[n], XmNtopOffset, 10); n++;
1334 separator = XmCreateSeparatorGadget (form, "separator", args, n);
1335 XtManageChild (separator);
1339 /* Create the ok, cancel, preview and help buttons */
1343 XtSetArg (args[n], XmNlabelString, okXmString); n++;
1344 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1345 XtSetArg (args[n], XmNleftPosition, 1); n++;
1346 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1347 XtSetArg (args[n], XmNrightPosition, 21); n++;
1348 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1349 XtSetArg (args[n], XmNtopWidget, separator); n++;
1350 XtSetArg (args[n], XmNtopOffset, 5); n++;
1351 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1352 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1353 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1354 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1355 XtSetArg (args[n], XmNshowAsDefault, True); n++;
1356 XtSetArg (args[n], XmNuserData, flag); n++;
1357 ok = XmCreatePushButtonGadget (form, "ok", args, n);
1360 XtAddCallback (ok, XmNactivateCallback, RenameOk, (XtPointer) call_struct);
1361 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1362 HELP_LINK_DIALOG_STR);
1365 /* Set the ok button to the default for the bulletin board. */
1366 /* This causes the return key from the text widget to be */
1367 /* properly processed. */
1369 XtSetArg (args[0], XmNdefaultButton, ok);
1370 XtSetValues (form, args, 1);
1374 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
1375 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1376 XtSetArg (args[n], XmNleftPosition, 22); n++;
1377 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1378 XtSetArg (args[n], XmNrightPosition, 42); n++;
1379 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1380 XtSetArg (args[n], XmNtopWidget, separator); n++;
1381 XtSetArg (args[n], XmNtopOffset, 5); n++;
1382 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1383 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1384 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1385 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1386 XtSetArg (args[n], XmNuserData, flag); n++;
1387 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
1388 XtManageChild (cancel);
1390 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
1391 (XtPointer) call_struct);
1392 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1393 HELP_LINK_DIALOG_STR);
1396 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 36, "Show Icon")));
1399 XtSetArg (args[n], XmNlabelString, label_string); n++;
1400 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1401 XtSetArg (args[n], XmNleftPosition, 43); n++;
1402 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1403 XtSetArg (args[n], XmNrightPosition, 78); n++;
1404 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1405 XtSetArg (args[n], XmNtopWidget, separator); n++;
1406 XtSetArg (args[n], XmNtopOffset, 5); n++;
1407 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1408 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1409 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1410 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1411 preview = XmCreatePushButtonGadget (form, "show_file_type", args, n);
1412 XtManageChild (preview);
1414 XmStringFree (label_string);
1415 XtAddCallback (preview, XmNactivateCallback, FileTypePreviewCB,
1416 (XtPointer) call_struct);
1417 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1418 HELP_LINK_DIALOG_STR);
1419 tmpStr = XtNewString(file_view_data->file_data->file_name);
1420 FileTypePreview (preview, tmpStr, (XtPointer) call_struct, NULL);
1423 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
1424 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1425 XtSetArg (args[n], XmNleftPosition, 79); n++;
1426 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1427 XtSetArg (args[n], XmNrightPosition, 99); n++;
1428 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1429 XtSetArg (args[n], XmNtopWidget, separator); n++;
1430 XtSetArg (args[n], XmNtopOffset, 5); n++;
1431 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1432 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1433 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1434 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1435 help = XmCreatePushButtonGadget (form, "help", args, n);
1436 XtManageChild (help);
1438 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
1439 HELP_LINK_DIALOG_STR);
1440 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1441 HELP_LINK_DIALOG_STR);
1445 XtSetArg (args[0], XmNcancelButton, cancel);
1446 XtSetValues (form, args, 1);
1448 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
1449 (XtPointer) XtParent(shell));
1451 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
1452 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
1453 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
1454 (XtPointer) call_struct );
1456 call_struct->Ok = ok;
1457 call_struct->Cancel = cancel;
1459 XtManageChild (form);
1461 /* Force the focus to the text field */
1462 XmProcessTraversal(dir_text, XmTRAVERSE_CURRENT);
1467 /************************************************************************
1470 * Get the new file name and rename the file.
1472 ************************************************************************/
1477 XtPointer client_data,
1478 XtPointer call_data )
1480 DialogCallbackStruct * call_struct = (DialogCallbackStruct *)client_data;
1483 char *new_name = NULL, *new_dir = NULL, new[MAX_PATH];
1484 unsigned int btnMask = 0;
1485 RenameDoneData *data;
1487 char to_dir[MAX_PATH];
1489 unsigned int modifiers;
1490 char *host_set[1], *file_set[1];
1493 if(RecheckFlag(call_struct->dialog_widget,w)) /* OK button */
1495 else if(RecheckFlag(NULL,call_struct->Cancel))
1498 /* currently, only one file can be moved/copied/linked using the menu */
1499 /* the following arrays can be expanded if this restriction is lifted */
1501 new_dir = XmTextFieldGetString (call_struct->dir_text_widget);
1502 new_dir = (char *) _DtStripSpaces (new_dir);
1504 if (new_dir[0] == '~')
1505 new_dir = _DtChangeTildeToHome (new_dir);
1507 switch (call_struct->mode)
1510 title = XtNewString(GetSharedMessage(FILE_MOVE_ERROR_TITLE));
1514 title = XtNewString(GetSharedMessage(FILE_COPY_ERROR_TITLE));
1515 btnMask = DUPLICATE;
1518 title = XtNewString(GetSharedMessage(FILE_LINK_ERROR_TITLE));
1523 if (strlen (new_dir) == 0)
1524 msg = XtNewString(GETMESSAGE(10, 11,
1525 "A file or folder cannot have a blank name."));
1526 #ifdef _CHECK_FOR_SPACES
1527 else if (DtStrchr (new_dir, ' ') != NULL ||
1528 DtStrchr (new_dir, '\t') != NULL)
1529 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
1532 switch (call_struct->mode)
1536 new_name = XmTextFieldGetString (call_struct->file_text_widget);
1537 new_name = (char *) _DtStripSpaces (new_name);
1538 if (strlen (new_name) == 0)
1539 msg = XtNewString(GETMESSAGE(10, 11,
1540 "A file or folder cannot have a blank name."));
1541 #ifdef _CHECK_FOR_SPACES
1542 else if (DtStrchr (new_name, ' ') != NULL ||
1543 DtStrchr (new_name, '\t') != NULL)
1544 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
1546 sprintf(new, "%s/%s", new_dir, new_name );
1549 sprintf(new, "%s/%s", new_dir, call_struct->file_name);
1555 _DtMessage(XtParent (w), title, msg, NULL, HelpRequestCB);
1558 if(new_name) XtFree(new_name);
1559 if(new_dir) XtFree(new_dir);
1560 ResetFlag(call_struct->dialog_widget,w);
1561 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
1567 if(new_name) XtFree(new_name);
1568 if(new_dir) XtFree(new_dir);
1570 /* set up data for RenameDone callback */
1571 data = (RenameDoneData *)XtMalloc(sizeof(RenameDoneData));
1573 data->call_struct = call_struct;
1574 data->mode = call_struct->mode;
1575 data->btnMask = btnMask;
1578 * Do the rename/copy/...
1579 * This operation is performed in a background process; when the
1580 * background process finishes, the RenameDone callback will be
1581 * called with a return code indicating success or failure.
1584 /* get host & path of the target file */
1585 GetTarget(call_struct->host_name, call_struct->directory_name, new,
1586 to_host, to_dir, to_file);
1587 /* get host & path of source file */
1588 host_set[0] = call_struct->host_name;
1589 file_set[0] = build_path(call_struct->directory_name, call_struct->file_name);
1590 /* set up modifiers depending on operation */
1591 switch (call_struct->mode)
1597 modifiers = ControlMask;
1600 modifiers = ShiftMask;
1604 FileMoveCopy(call_struct->file_mgr_data,
1605 to_file, to_dir, to_host,
1606 host_set, file_set, file_count,
1607 modifiers, RenameDone, (XtPointer)data);
1609 XtFree(file_set[0]);
1614 /************************************************************************
1617 * This routine is called when the file move/copy/link is finished.
1619 ************************************************************************/
1623 XtPointer client_data,
1626 RenameDoneData *data = (RenameDoneData *)client_data;
1627 DialogCallbackStruct *call_struct = data->call_struct;
1631 XtUnmanageChild(call_struct->dialog_widget);
1632 XmUpdateDisplay(call_struct->dialog_widget);
1633 XtDestroyWidget(XtParent(call_struct->dialog_widget));
1634 call_struct->file_mgr_rec->menuStates |= data->btnMask;
1636 XtFree(call_struct->host_name);
1637 XtFree(call_struct->directory_name);
1638 XtFree(call_struct->file_name);
1639 if(call_struct->previous_file_type)
1640 XtFree(call_struct->previous_file_type);
1642 XtFree((char *) call_struct);
1645 XtFree((char *)data);
1649 /************************************************************************
1652 * Build a directory,filename path to be used as the destination
1653 * of a create, copy or move operation.
1655 ************************************************************************/
1666 char *directory_name;
1668 Tt_status tt_status;
1670 if (strncmp (new_name, "/", 1) == 0)
1672 if ((path = (char *) ResolveLocalPathName (host_in,
1676 &tt_status )) == NULL)
1681 if (strcmp(dir_in, "/") == 0)
1682 sprintf(to, "%s%s", dir_in, new_name);
1684 sprintf(to, "%s/%s", dir_in, new_name);
1686 if ((path = (char *) ResolveLocalPathName (host_in,
1690 &tt_status )) == NULL)
1702 /************************************************************************
1705 * Get the text field file name, find out what the file type is
1706 * for the file name and display the name and icon for the
1709 ************************************************************************/
1714 XtPointer client_data,
1715 XtPointer call_data )
1717 DialogCallbackStruct * call_struct;
1720 call_struct = (DialogCallbackStruct *) client_data;
1722 new_name = XmTextFieldGetString (call_struct->file_text_widget);
1723 FileTypePreview(w, new_name, client_data, call_data);
1727 /************************************************************************
1730 * Find out what the file type is for the specified file name and
1731 * display the name and icon for the file type.
1733 ************************************************************************/
1739 XtPointer client_data,
1740 XtPointer call_data )
1742 DialogCallbackStruct * call_struct;
1747 char whole_name[MAX_PATH];
1750 char * new_link_path;
1751 PixmapData *pixmapData;
1752 Tt_status tt_status;
1753 Boolean Flag = ((Boolean)(XtArgVal)call_data == True)?True:False;
1755 call_struct = (DialogCallbackStruct *) client_data;
1756 new_name = (char *) _DtStripSpaces (new_name);
1758 if (new_name[0] == '~')
1759 new_name = _DtChangeTildeToHome (new_name);
1761 if (GetToPath (whole_name, new_name, call_struct->host_name,
1762 call_struct->directory_name) == False)
1763 strcpy(whole_name, " ");
1765 orig_name = ResolveLocalPathName( call_struct->host_name,
1766 call_struct->directory_name,
1767 call_struct->file_name,
1768 home_host_name, &tt_status);
1770 /* Check for broken links so we get the proper file_type */
1771 if (call_struct->original_logical_type != NULL &&
1772 strcmp(call_struct->original_logical_type, LT_BROKEN_LINK) == 0)
1773 file_type = XtNewString(call_struct->original_logical_type);
1774 else if (call_struct->original_physical_type == DtDIRECTORY)
1775 file_type = XtNewString(LT_DIRECTORY);
1776 else if ( *new_name == 0x0 &&
1777 call_struct->original_physical_type == DtDATA )
1778 file_type = XtNewString(LT_DATA);
1779 else if (link_path = _DtFollowLink(whole_name))
1781 if (strcmp(orig_name, whole_name) == 0)
1782 file_type = (char *) DtDtsDataToDataType(orig_name, NULL, 0, NULL,
1786 if (call_struct->menu_widget == *renameBtn)
1788 new_link_path = XtNewString(link_path);
1790 if ((link_path = _DtFollowLink(orig_name)) &&
1791 (strcmp(link_path, orig_name) == 0))
1793 file_type = (char *) DtDtsDataToDataType(new_link_path, NULL, 0,
1794 NULL, NULL, NULL, NULL);
1798 /* Links are typed according to what they are linked to */
1799 file_type = call_struct->original_logical_type;
1802 XtFree(new_link_path);
1806 /* We want to find out the possible filetype of a file that has
1807 such name (stored in link_path). However, the file does not even
1808 existed yet. In order for the file typing code to work correctly,
1809 we have to pass in a dummy stat structure indicates that if the
1810 file is created, this is its mode.
1812 struct stat fileStat;
1813 unsigned int creationMask = umask( DtFILE_DATA_CREATION_MASK );
1815 memset( &fileStat, 0, sizeof( struct stat ) );
1816 fileStat.st_mode = creationMask | S_IFREG;
1818 file_type = (char *) DtDtsDataToDataType( link_path, NULL, 0,
1821 umask( creationMask );
1826 file_type = XtNewString(LT_RECURSIVE_LINK);
1834 if( call_struct->previous_file_type
1835 && strcmp( call_struct->previous_file_type, file_type ) == 0 )
1837 char *tmpStr, *title, *msg;
1841 tmpStr = GETMESSAGE(10, 36, "Show Icon");
1842 title = XtNewString(tmpStr);
1843 tmpStr = GETMESSAGE(10, 41, "The correct icon for this datatype is already shown.");
1844 msg = XtNewString(tmpStr);
1846 _DtMessage(XtParent(w), title, msg, NULL, HelpRequestCB);
1850 XtFree ((char *) file_type);
1851 XtFree ((char *) new_name);
1852 XtFree ((char *) orig_name);
1857 call_struct->previous_file_type = file_type;
1859 if (DtActionExists(file_type))
1861 char *str = (char *)DtActionLabel(file_type);
1863 string = XmStringCreateLocalized(str);
1865 string = XmStringCreateLocalized(file_type);
1870 char *str = (char *)DtDtsDataTypeToAttributeValue(file_type,
1875 string = XmStringCreateLocalized(str);
1876 DtDtsFreeAttributeValue(str);
1880 string = XmStringCreateLocalized(file_type);
1884 XtSetArg (args[n], XmNstring, string); n++;
1886 pixmapData = _DtRetrievePixmapData(file_type,
1887 call_struct->file_name,
1888 call_struct->directory_name,
1892 XtSetArg (args[n], XmNimageName, pixmapData->iconFileName);
1894 XtSetArg (args[n], XmNimageName, NULL); n++;
1895 XtSetValues (call_struct->file_type_widget, args, n);
1897 _DtCheckAndFreePixmapData(file_type,
1899 (DtIconGadget) (call_struct->file_type_widget),
1904 XtSetArg (args[n], XmNimageName, NULL); n++;
1905 XtSetValues (call_struct->file_type_widget, args, n);
1906 if (call_struct->previous_file_type)
1908 XtFree((char *)call_struct->previous_file_type );
1909 call_struct->previous_file_type = NULL;
1914 XmStringFree (string);
1916 XtFree ((char *) new_name);
1917 XtFree ((char *) orig_name);
1921 /************************************************************************
1924 * Callback function invoked from the File Manager menu. This
1925 * function creates and displays a dialog prompting for a file name
1926 * to be used to create a directory, executable, or normal file.
1928 ************************************************************************/
1933 XtPointer client_data,
1934 XtPointer call_data )
1936 FileMgrRec * file_mgr_rec;
1937 DialogData * dialog_data;
1938 FileMgrData * file_mgr_data;
1940 Widget shell = NULL;
1944 Widget file_type_box;
1952 int flag=FLAG_RESET;
1954 DialogCallbackStruct * call_struct;
1955 char * tmpStr = NULL, *tempStr = NULL;
1956 XmString label_string;
1960 Widget mbar = XmGetPostedFromWidget(XtParent(w));
1961 Atom delete_window_atom;
1965 /* Set the menu item to insensitive to prevent multiple */
1966 /* dialogs from being posted and get the area under the */
1967 /* menu pane redrawn. */
1969 XmUpdateDisplay (w);
1971 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1972 XtGetValues(mbar, args, 1);
1974 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
1975 file_mgr_data = (FileMgrData *) dialog_data->data;
1979 XtSetArg (args[n], XmNallowShellResize, True); n++;
1980 /* Adjust the decorations for the dialog shell of the dialog */
1981 XtSetArg (args[n], XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE); ++n;
1982 XtSetArg (args[n], XmNmwmDecorations, MWM_DECOR_BORDER | MWM_DECOR_TITLE); ++n;
1984 if (w == *create_directoryBtn)
1986 /* Ignore accelerators when we're insensitive */
1987 if (file_mgr_rec->create_directoryBtn_child)
1989 XSetInputFocus(XtDisplay(w),
1990 XtWindow(file_mgr_rec->create_directoryBtn_child),
1991 RevertToParent, CurrentTime);
1995 file_mgr_rec->menuStates &= ~CREATE_DIR;
1997 if(file_mgr_data->title != NULL &&
1998 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
2000 tmpStr = GETMESSAGE(10, 14, "New Folder");
2001 tempStr = (char *)XtMalloc(strlen(tmpStr) +
2002 strlen(file_mgr_data->title) + 5);
2003 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
2007 tmpStr = (GETMESSAGE(10,28, "File Manager - New Folder"));
2008 tempStr = XtNewString(tmpStr);
2011 XtSetArg (args[n], XmNtitle, tempStr); n++;
2012 shell =XmCreateDialogShell(file_mgr_rec->shell, "new_folder", args, n);
2013 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 16, "New Folder Name: ")));
2015 else if (w == *create_dataBtn)
2017 /* Ignore accelerators when we're insensitive */
2018 if ( file_mgr_rec->create_dataBtn_child )
2020 XSetInputFocus(XtDisplay(w),
2021 XtWindow(file_mgr_rec->create_dataBtn_child),
2022 RevertToParent, CurrentTime);
2026 file_mgr_rec->menuStates &= ~CREATE_FILE;
2028 if(file_mgr_data->title != NULL &&
2029 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
2031 tmpStr = (GETMESSAGE(10,26, "New File"));
2032 tempStr = (char *)XtMalloc(strlen(tmpStr) +
2033 strlen(file_mgr_data->title) + 5);
2034 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
2038 tmpStr = (GETMESSAGE(10,29, "File Manager - New File"));
2039 tempStr = XtNewString(tmpStr);
2041 XtSetArg (args[n], XmNtitle, tempStr); n++;
2042 shell =XmCreateDialogShell(file_mgr_rec->shell, "new_data_file", args, n);
2043 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 7, "New File Name: ")));
2047 /* Set the useAsyncGeo on the shell */
2048 XtSetArg (args[0], XmNuseAsyncGeometry, True);
2049 XtSetValues (XtParent(shell), args, 1);
2051 /* Create the widget hierarchy for the dialog */
2054 XtSetArg (args[n], XmNmarginWidth, 1); n++;
2055 XtSetArg (args[n], XmNmarginHeight, 1); n++;
2056 XtSetArg (args[n], XmNshadowThickness, 1); n++;
2057 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
2058 XtSetArg (args[n], XmNautoUnmanage, False); n++;
2059 XtSetArg (args[n], XmNuserData, file_mgr_rec); n++;
2060 form = XmCreateForm (shell, "form", args, n);
2064 XtSetArg (args[n], XmNlabelString, label_string); n++;
2065 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2066 XtSetArg (args[n], XmNleftPosition, 15); n++;
2068 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
2069 XtSetArg (args[n], XmNleftOffset, 5); n++;
2071 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
2072 XtSetArg (args[n], XmNtopOffset, 30); n++;
2073 XtSetArg (args[n], XmNtraversalOn, False); n++;
2074 new_name = XmCreateLabelGadget (form, "new_name", args, n);
2075 XtManageChild (new_name);
2077 XmStringFree (label_string);
2081 XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
2082 XtSetArg (args[n], XmNleftWidget, new_name); n++;
2083 XtSetArg (args[n], XmNleftOffset, 0); n++;
2084 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
2085 XtSetArg (args[n], XmNtopOffset, 30); n++;
2086 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2087 XtSetArg (args[n], XmNrightPosition, 70); n++;
2088 XtSetArg (args[n], XmNtraversalOn, True); n++;
2089 new_text = XmCreateTextField (form, "new_text", args, n);
2091 XtManageChild (new_text);
2093 /* Create the field displaying the file type info */
2096 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
2097 XtSetArg(args[n], XmNtopOffset, 5); n++;
2099 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
2100 XtSetArg(args[n], XmNleftWidget, new_text); n++;
2101 XtSetArg(args[n], XmNleftOffset, 20); n++;
2103 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2104 XtSetArg (args[n], XmNleftPosition, 75); n++;
2106 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
2107 XtSetArg(args[n], XmNrightOffset, 5); n++;
2109 XtSetArg(args[n], XmNmarginHeight, 5); n++;
2110 XtSetArg(args[n], XmNmarginWidth, 5); n++;
2111 file_type_box = XmCreateFrame (form, "file_type_box", args, n);
2112 XtManageChild (file_type_box);
2114 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 8, "File Type")));
2117 XtSetArg (args[n], XmNlabelString, label_string); n++;
2118 XtSetArg(args[n], XmNshadowThickness, 0); n++;
2119 XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++;
2120 XtSetArg(args[n], XmNpixmapPosition, XmPIXMAP_TOP); n++;
2121 XtSetArg (args[n], XmNtraversalOn, False); n++;
2122 file_type = _DtCreateIcon (file_type_box, "file_type", args, n);
2123 XtManageChild (file_type);
2125 XmStringFree (label_string);
2128 /* Adjust the colors of the icon */
2129 SetToNormalColors (file_type, form, file_mgr_rec->main, 0);
2131 /* The data sent to the Text, Ok and Cancel callbacks */
2134 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
2136 if(w == *create_directoryBtn)
2138 file_mgr_rec->create_directoryBtn_child = form;
2139 call_struct->original_physical_type = DtDIRECTORY;
2141 if(w == *create_dataBtn)
2143 file_mgr_rec->create_dataBtn_child = form;
2144 call_struct->original_physical_type = DtDATA;
2147 call_struct->dialog_widget = form;
2148 call_struct->menu_widget = w;
2149 call_struct->dir_text_widget = NULL;
2150 call_struct->file_text_widget = new_text;
2151 call_struct->file_type_widget = file_type;
2152 call_struct->file_mgr_rec = file_mgr_rec;
2153 call_struct->host_name = XtNewString (file_mgr_data->host);
2154 call_struct->directory_name = XtNewString(file_mgr_data->current_directory);
2155 call_struct->file_name = NULL;
2156 call_struct->original_logical_type = NULL;
2157 call_struct->previous_file_type = NULL;
2158 call_struct->file_mgr_data = file_mgr_data;
2161 /* Create a separator between the buttons */
2164 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
2165 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
2166 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2167 XtSetArg (args[n], XmNtopWidget, file_type_box); n++;
2168 XtSetArg (args[n], XmNtopOffset, 5); n++;
2169 separator = XmCreateSeparatorGadget (form, "separator", args, n);
2170 XtManageChild (separator);
2174 /* Create the ok, apply, cancel, and help buttons */
2177 XtSetArg (args[n], XmNlabelString, okXmString); n++;
2178 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2179 XtSetArg (args[n], XmNleftPosition, 1); n++;
2180 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2181 XtSetArg (args[n], XmNrightPosition, 19); n++;
2182 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2183 XtSetArg (args[n], XmNtopWidget, separator); n++;
2184 XtSetArg (args[n], XmNtopOffset, 5); n++;
2185 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2186 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2187 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2188 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2189 XtSetArg (args[n], XmNshowAsDefault, True); n++;
2190 XtSetArg (args[n], XmNuserData, flag); n++;
2191 ok = XmCreatePushButtonGadget (form, "ok", args, n);
2194 XtAddCallback (ok, XmNactivateCallback, MakeFileOk, (XtPointer) call_struct);
2196 /* Set the ok button to the default for the bulletin board. */
2197 /* This causes the return key from the text widget to be */
2198 /* properly processed. */
2200 XtSetArg (args[0], XmNdefaultButton, ok);
2201 XtSetValues (form, args, 1);
2204 XtSetArg (args[n], XmNlabelString, applyXmString); n++;
2205 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2206 XtSetArg (args[n], XmNleftPosition, 20); n++;
2207 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2208 XtSetArg (args[n], XmNrightPosition, 39); n++;
2209 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2210 XtSetArg (args[n], XmNtopWidget, separator); n++;
2211 XtSetArg (args[n], XmNtopOffset, 5); n++;
2212 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2213 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2214 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2215 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2216 apply = XmCreatePushButtonGadget (form, "apply", args, n);
2217 XtManageChild (apply);
2219 XtAddCallback (apply, XmNactivateCallback, MakeFileApply, (XtPointer) call_struct);
2222 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
2223 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2224 XtSetArg (args[n], XmNleftPosition, 40); n++;
2225 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2226 XtSetArg (args[n], XmNrightPosition, 59); n++;
2227 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2228 XtSetArg (args[n], XmNtopWidget, separator); n++;
2229 XtSetArg (args[n], XmNtopOffset, 5); n++;
2230 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2231 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2232 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2233 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2234 XtSetArg (args[n], XmNuserData, flag); n++;
2235 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
2236 XtManageChild (cancel);
2238 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
2239 (XtPointer) call_struct);
2242 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 36, "Show Icon")));
2245 XtSetArg (args[n], XmNlabelString, label_string); n++;
2246 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2247 XtSetArg (args[n], XmNleftPosition, 60); n++;
2248 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2249 XtSetArg (args[n], XmNrightPosition, 79); n++;
2250 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2251 XtSetArg (args[n], XmNtopWidget, separator); n++;
2252 XtSetArg (args[n], XmNtopOffset, 5); n++;
2253 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2254 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2255 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2256 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2257 preview = XmCreatePushButtonGadget (form, "show_file_type", args, n);
2258 XtManageChild (preview);
2260 XmStringFree (label_string);
2261 XtAddCallback (preview, XmNactivateCallback, FileTypePreviewCB,
2262 (XtPointer) call_struct);
2264 FileTypePreviewCB (preview, (XtPointer) call_struct, NULL);
2267 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
2268 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2269 XtSetArg (args[n], XmNleftPosition, 80); n++;
2270 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2271 XtSetArg (args[n], XmNrightPosition, 99); n++;
2272 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2273 XtSetArg (args[n], XmNtopWidget, separator); n++;
2274 XtSetArg (args[n], XmNtopOffset, 5); n++;
2275 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2276 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2277 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2278 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2279 help = XmCreatePushButtonGadget (form, "help", args, n);
2280 XtManageChild (help);
2282 if (w == *create_directoryBtn)
2284 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2285 HELP_CREATE_DIR_DIALOG_STR);
2286 XtAddCallback(new_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2287 HELP_CREATE_DIR_DIALOG_STR);
2288 XtAddCallback(new_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2289 HELP_CREATE_DIR_DIALOG_STR);
2290 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
2291 HELP_CREATE_DIR_DIALOG_STR);
2292 XtAddCallback(file_type_box,XmNhelpCallback,(XtCallbackProc)HelpRequestCB,
2293 HELP_CREATE_DIR_DIALOG_STR);
2294 XtAddCallback(file_type, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2295 HELP_CREATE_DIR_DIALOG_STR);
2296 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2297 HELP_CREATE_DIR_DIALOG_STR);
2298 XtAddCallback(apply, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2299 HELP_CREATE_DIR_DIALOG_STR);
2300 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2301 HELP_CREATE_DIR_DIALOG_STR);
2302 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2303 HELP_CREATE_DIR_DIALOG_STR);
2304 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2305 HELP_CREATE_DIR_DIALOG_STR);
2309 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2310 HELP_CREATE_FILE_DIALOG_STR);
2311 XtAddCallback(new_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2312 HELP_CREATE_FILE_DIALOG_STR);
2313 XtAddCallback(new_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2314 HELP_CREATE_FILE_DIALOG_STR);
2315 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
2316 HELP_CREATE_FILE_DIALOG_STR);
2317 XtAddCallback(file_type_box,XmNhelpCallback,(XtCallbackProc)HelpRequestCB,
2318 HELP_CREATE_FILE_DIALOG_STR);
2319 XtAddCallback(file_type, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2320 HELP_CREATE_FILE_DIALOG_STR);
2321 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2322 HELP_CREATE_FILE_DIALOG_STR);
2323 XtAddCallback(apply, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2324 HELP_CREATE_FILE_DIALOG_STR);
2325 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2326 HELP_CREATE_FILE_DIALOG_STR);
2327 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2328 HELP_CREATE_FILE_DIALOG_STR);
2329 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2330 HELP_CREATE_FILE_DIALOG_STR);
2334 XtSetArg (args[0], XmNcancelButton, cancel);
2335 XtSetValues (form, args, 1);
2337 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
2338 (XtPointer) XtParent(shell));
2340 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
2341 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
2342 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
2343 (XtPointer) call_struct );
2345 call_struct->Ok = ok;
2346 call_struct->Cancel = cancel;
2348 XtManageChild (form);
2350 /* Force the focus to the text field */
2351 XmProcessTraversal(new_text, XmTRAVERSE_CURRENT);
2356 /************************************************************************
2359 * Get the new file name and create the file.
2361 ************************************************************************/
2366 XtPointer client_data,
2367 XtPointer call_data )
2369 DialogCallbackStruct * call_struct = (DialogCallbackStruct *) client_data;
2375 int dirNameLength = strlen (call_struct->directory_name);
2376 int maxFileNameLength = pathconf (call_struct->directory_name, _PC_NAME_MAX);
2377 unsigned int btnMask;
2378 MakeFileDoneData *data;
2380 if(RecheckFlag(call_struct->dialog_widget,w))
2382 else if(RecheckFlag(NULL,call_struct->Cancel))
2385 /* see if this is a create file or directory */
2386 if (call_struct->menu_widget == *create_directoryBtn)
2388 call_struct->file_mgr_rec->create_directoryBtn_child = NULL;
2390 btnMask = CREATE_DIR;
2394 call_struct->file_mgr_rec->create_dataBtn_child = NULL;
2396 btnMask = CREATE_FILE;
2399 /* get the new name */
2400 new_name = XmTextFieldGetString (call_struct->file_text_widget);
2401 new_name = (char *) _DtStripSpaces (new_name);
2404 if (new_name[0] == '~')
2405 new_name = _DtChangeTildeToHome (new_name);
2407 length = strlen (new_name);
2411 msg = XtNewString(GETMESSAGE(10, 22,
2412 "Cannot create a file or folder with a blank name."));
2414 /* Ensure the new name has length less than or equal to the maximum
2415 length that the system allows.
2416 If maxFileNameLength == -1 the file system is not supporting POSIX, use MAXNAMLEN
2418 else if( maxFileNameLength < -1 || ( maxFileNameLength == -1 && ( length > MAXNAMLEN || length + dirNameLength > MAX_PATH ) ) || ( maxFileNameLength > 0 && length > maxFileNameLength ) )
2420 if (type == DtDIRECTORY)
2422 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2423 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2427 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2428 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2431 #ifdef _CHECK_FOR_SPACES
2432 else if (DtStrchr (new_name, ' ') != NULL ||
2433 DtStrchr (new_name, '\t') != NULL)
2435 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
2441 if (type == DtDIRECTORY)
2442 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2444 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2445 _DtMessage (XtParent (w), title, msg, NULL, HelpRequestCB);
2449 ResetFlag(call_struct->dialog_widget,w);
2450 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
2454 /* set up data for MakeFileDone callback */
2455 data = (MakeFileDoneData *)XtMalloc(sizeof(MakeFileDoneData));
2457 data->call_struct = call_struct;
2459 data->btnMask = btnMask;
2460 data->new_name = new_name;
2463 * Create the file/directory.
2464 * This operation is performed in a background process; when the
2465 * background process finishes, the MakeFileDone callback will be
2466 * called with a return code indicating success or failure.
2469 MakeFile (w, call_struct->host_name, call_struct->directory_name,
2470 new_name, type, MakeFileDone, (XtPointer)data);
2474 /************************************************************************
2477 * This routine is called when the file creation is finished.
2479 ************************************************************************/
2483 XtPointer client_data,
2487 MakeFileDoneData *data = (MakeFileDoneData *)client_data;
2488 DialogCallbackStruct *call_struct = data->call_struct;
2489 FileMgrRec *file_mgr_rec = (FileMgrRec *) call_struct->file_mgr_rec;
2493 FileViewData *file_view_data;
2494 FileMgrData *file_mgr_data;
2495 DialogData *dialog_data;
2496 DirectorySet *directory_set;
2500 * If the file/directory create was successful, unmanage the dialog
2501 * and free up any allocated data space. Otherwise, just return
2502 * to allow the user to try a different name or cancel the dialog.
2508 if (data->type == DtDIRECTORY)
2510 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2511 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2515 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2516 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2518 _DtMessage (XtParent(data->w), title, msg, NULL, HelpRequestCB);
2519 ResetFlag(call_struct->dialog_widget,call_struct->Ok);
2520 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
2526 /* some other error */
2528 msg = XtNewString(GetSharedMessage(CANT_OVERWRITE_ERROR));
2530 msg = XtNewString(GetSharedMessage(CANT_CREATE_ERROR));
2531 FileOperationError (XtParent(data->w), msg, to);
2532 ResetFlag(call_struct->dialog_widget,call_struct->Ok);
2533 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
2538 /* create was successful: close the dialog */
2539 XtUnmanageChild (call_struct->dialog_widget);
2540 XtDestroyWidget (XtParent (call_struct->dialog_widget));
2541 file_mgr_rec->menuStates |= data->btnMask;
2546 /* free the call data */
2547 XtFree(call_struct->host_name);
2548 XtFree(call_struct->directory_name);
2549 if (call_struct->previous_file_type)
2550 XtFree((char *) call_struct->previous_file_type);
2551 XtFree((char *) call_struct);
2555 * The code below wants to make the file that was just created
2556 * be selected and scroll the view so the new file is visible.
2557 * But: since we made directory updates asynchronous, this code
2558 * won't work anymore, because at this point, we won't yet be able
2559 * to find the new file in the cached directory.
2561 * Possible solutions:
2562 * Somewhere (e.g., in the file_mgr_data structure) log our
2563 * intention to select the new file; when it finally shows up,
2566 dialog_data = _DtGetInstanceData (file_mgr_rec);
2567 file_mgr_data = (FileMgrData *) dialog_data->data;
2568 for (i = 0; i < file_mgr_data->directory_count; i++)
2570 directory_set = (DirectorySet *)file_mgr_data->directory_set[i];
2571 if (strcmp(directory_set->name, call_struct->directory_name) == 0)
2575 file_view_data = NULL;
2576 for (i = 0; i < directory_set->file_count; i++)
2578 if (strcmp(directory_set->order_list[i]->file_data->file_name,
2579 data->new_name) == 0)
2581 file_view_data = directory_set->order_list[i];
2586 if (file_view_data != NULL)
2588 if (file_view_data->widget != NULL)
2590 DeselectAllFiles(file_mgr_data);
2591 SelectFile (file_mgr_data, file_view_data);
2592 PositionFileView(file_view_data, file_mgr_data);
2593 ActivateSingleSelect ((FileMgrRec *) file_mgr_data->file_mgr_rec,
2594 file_mgr_data->selection_list[0]->file_data->logical_type);
2600 XtFree(data->new_name);
2601 XtFree((char *)data);
2606 /************************************************************************
2609 * Get the new file name and create the file.
2611 ************************************************************************/
2616 XtPointer client_data,
2617 XtPointer call_data )
2619 DialogCallbackStruct * call_struct = (DialogCallbackStruct *) client_data;
2625 int dirNameLength = strlen (call_struct->directory_name);
2626 int maxFileNameLength = pathconf (call_struct->directory_name, _PC_NAME_MAX);
2627 unsigned int btnMask;
2628 MakeFileDoneData *data;
2630 /* see if this is a create file or directory */
2631 if (call_struct->menu_widget == *create_directoryBtn)
2633 call_struct->file_mgr_rec->create_directoryBtn_child = NULL;
2635 btnMask = CREATE_DIR;
2639 call_struct->file_mgr_rec->create_dataBtn_child = NULL;
2641 btnMask = CREATE_FILE;
2644 /* get the new name */
2645 new_name = XmTextFieldGetString (call_struct->file_text_widget);
2646 new_name = (char *) _DtStripSpaces (new_name);
2649 if (new_name[0] == '~')
2650 new_name = _DtChangeTildeToHome (new_name);
2652 length = strlen (new_name);
2656 msg = XtNewString(GETMESSAGE(10, 22,
2657 "Cannot create a file or folder with a blank name."));
2659 /* Ensure the new name has length less than or equal to the maximum
2660 length that the system allows.
2661 If maxFileNameLength == -1 the file system is not supporting POSIX, use MAXNAMLEN
2663 else if( maxFileNameLength < -1 || ( maxFileNameLength == -1 && ( length > MAXNAMLEN || length + dirNameLength > MAX_PATH ) ) || ( maxFileNameLength > 0 && length > maxFileNameLength ) )
2665 if (type == DtDIRECTORY)
2667 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2668 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2672 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2673 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2676 #ifdef _CHECK_FOR_SPACES
2677 else if (DtStrchr (new_name, ' ') != NULL ||
2678 DtStrchr (new_name, '\t') != NULL)
2680 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
2686 if (type == DtDIRECTORY)
2687 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2689 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2690 _DtMessage (XtParent (w), title, msg, NULL, HelpRequestCB);
2697 /* set up data for MakeFileDone callback */
2698 data = (MakeFileDoneData *)XtMalloc(sizeof(MakeFileDoneData));
2700 data->call_struct = call_struct;
2702 data->btnMask = btnMask;
2703 data->new_name = new_name;
2706 * Create the file/directory.
2707 * This operation is performed in a background process; when the
2708 * background process finishes, the MakeFileDone callback will be
2709 * called with a return code indicating success or failure.
2712 MakeFile (w, call_struct->host_name, call_struct->directory_name,
2713 new_name, type, ApplyFileDone, (XtPointer)data);
2714 FileTypePreviewCB (w, client_data, (XtPointer) True);
2718 /************************************************************************
2721 * This routine is called when the file creation is finished.
2723 ************************************************************************/
2727 XtPointer client_data,
2731 MakeFileDoneData *data = (MakeFileDoneData *)client_data;
2732 DialogCallbackStruct *call_struct = data->call_struct;
2733 FileMgrRec *file_mgr_rec = (FileMgrRec *) call_struct->file_mgr_rec;
2737 FileViewData *file_view_data;
2738 FileMgrData *file_mgr_data;
2739 DialogData *dialog_data;
2740 DirectorySet *directory_set;
2744 * If the file/directory create was successful, unmanage the dialog
2745 * and free up any allocated data space. Otherwise, just return
2746 * to allow the user to try a different name or cancel the dialog.
2752 if (data->type == DtDIRECTORY)
2754 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2755 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2759 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2760 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2762 _DtMessage (XtParent(data->w), title, msg, NULL, HelpRequestCB);
2768 /* some other error */
2770 msg = XtNewString(GetSharedMessage(CANT_OVERWRITE_ERROR));
2772 msg = XtNewString(GetSharedMessage(CANT_CREATE_ERROR));
2773 FileOperationError (XtParent(data->w), msg, to);
2780 /************************************************************************
2783 * Unmanage and destroy the dialog
2785 ************************************************************************/
2790 XtPointer client_data,
2791 XtPointer call_data )
2793 DialogCallbackStruct * call_struct = (DialogCallbackStruct *) client_data;
2794 DialogData *dialog_data;
2795 FileMgrData *file_mgr_data;
2796 unsigned int btnMask = 0;
2798 if(RecheckFlag(NULL,w))
2801 dialog_data = _DtGetInstanceData ((XtPointer)call_struct->file_mgr_rec);
2802 file_mgr_data = (FileMgrData *) dialog_data->data;
2804 XtUnmanageChild (call_struct->dialog_widget);
2805 XtDestroyWidget (XtParent (call_struct->dialog_widget));
2807 if (file_mgr_data->selected_file_count == 1 )
2809 /* If the selection count is 1 then
2810 resensitize the appropriate menu button.
2811 Otherwise, ignore it.
2813 if (call_struct->menu_widget == *renameBtn)
2815 else if (call_struct->menu_widget == *moveBtn)
2817 else if (call_struct->menu_widget == *duplicateBtn)
2818 btnMask = DUPLICATE;
2819 else if (call_struct->menu_widget == *linkBtn)
2823 if (call_struct->menu_widget == *create_directoryBtn)
2825 btnMask = CREATE_DIR;
2826 call_struct->file_mgr_rec->create_directoryBtn_child = NULL;
2828 else if (call_struct->menu_widget == *create_dataBtn)
2830 btnMask = CREATE_FILE;
2831 call_struct->file_mgr_rec->create_dataBtn_child = NULL;
2834 call_struct->file_mgr_rec->menuStates |= btnMask;
2838 if (call_struct->host_name != NULL)
2839 XtFree ((char *) call_struct->host_name);
2841 if (call_struct->directory_name != NULL)
2842 XtFree ((char *) call_struct->directory_name);
2844 if (call_struct->file_name != NULL)
2845 XtFree ((char *) call_struct->file_name);
2847 if (call_struct->previous_file_type)
2848 XtFree ((char *) call_struct->previous_file_type);
2850 XtFree ((char *) call_struct);
2861 XtSetArg (args[0], XmNuserData, &flag);
2862 XtGetValues(w,args,1);
2863 if(flag == FLAG_SET)
2865 else if(flag != FLAG_RESET)
2868 XtSetArg (args[0], XmNuserData, flag);
2869 XtSetValues(w,args,1);
2871 _DtTurnOnHourGlass(parent);
2883 XtSetArg (args[0], XmNuserData, &flag0);
2884 XtGetValues(w,args,1);
2886 if(flag != FLAG_SET)
2889 XtSetArg (args[0], XmNuserData, flag);
2890 XtSetValues(w,args,1);
2892 _DtTurnOffHourGlass(parent);