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>
99 #include "SharedProcs.h"
100 #include "sharedFuncs.h"
105 #include "SharedMsgs.h"
108 #define FM_TYPE_LABEL "TYPE_LABEL"
111 /******** Static Function Declarations ********/
113 static void RenameOk(
115 XtPointer client_data,
116 XtPointer call_data) ;
118 XtPointer client_data,
120 static Boolean GetToPath(
125 static void FileTypePreview(
128 XtPointer client_data,
129 XtPointer call_data) ;
130 static void FileTypePreviewCB(
132 XtPointer client_data,
133 XtPointer call_data) ;
134 static void MakeFileOk(
136 XtPointer client_data,
137 XtPointer call_data) ;
138 static void MakeFileApply(
140 XtPointer client_data,
141 XtPointer call_data) ;
142 static void MakeFileDone(
143 XtPointer client_data,
146 static void ApplyFileDone(
147 XtPointer client_data,
150 static void DialogCancel(
152 XtPointer client_data,
153 XtPointer call_data) ;
155 /******** End Static Function Declarations ********/
159 /************************************************************************
161 * ShowRenameFileDialog
162 * Callback function invoked from the File Manager menu. This
163 * function creates and displays a dialog prompting for a new
164 * name for the selected file.
166 * NOTE: The Rename File... menu item can currently be reactivated
167 * by single select on another item. Is this behavior correct?
169 ************************************************************************/
172 ShowRenameFileDialog(
174 XtPointer client_data,
175 XtPointer call_data )
177 FileMgrRec * file_mgr_rec;
178 DialogData * dialog_data;
179 FileViewData * file_view_data;
182 FileMgrData * file_mgr_data;
183 char * directory_name;
186 /* Set the menu item to insensitive to prevent multiple */
187 /* dialogs from being posted and get the area under the */
188 /* menu pane redrawn. */
192 if((int)client_data != 0)
194 file_view_data = (FileViewData *)client_data;
199 file_view_data = NULL;
200 mbar = XmGetPostedFromWidget(XtParent(w));
204 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
205 XtGetValues(mbar, args, 1);
207 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
208 file_mgr_data = (FileMgrData *) dialog_data->data;
211 /* Get the selected file. */
213 if( file_view_data == NULL )
214 file_view_data = file_mgr_data->selection_list[0];
216 directory_name = ((DirectorySet *) file_view_data->directory_set)->name;
218 /* Create the widget hierarchy for the dialog */
221 XtSetArg (args[n], XmNallowShellResize, True); n++;
223 /* Ignore accelerators when we're insensitive */
224 if((int)client_data == 0)
226 if ((file_mgr_rec->menuStates & RENAME) == 0)
228 file_mgr_rec->menuStates &= ~RENAME;
232 if(file_mgr_data->selected_file_count != 0)
233 file_mgr_rec->menuStates |= RENAME;
236 UnpostTextField (file_mgr_data);
238 CreateNameChangeDialog(file_view_data->widget, file_view_data,
239 (XtPointer)file_mgr_data, 0);
243 /************************************************************************
246 * Callback function invoked from the File Manager menu. This
247 * function creates and displays a dialog prompting for a new
248 * name for the selected file.
250 * NOTE: The Rename File... menu item can currently be reactivated
251 * by single select on another item. Is this behavior correct?
253 ************************************************************************/
258 XtPointer client_data,
259 XtPointer call_data )
261 FileMgrRec * file_mgr_rec;
262 DialogData * dialog_data;
263 FileMgrData * file_mgr_data;
264 static FileViewData * file_view_data; /* static because it is passed to RenameOk callback */
266 char name_string[18+MAX_PATH];
267 char * directory_name;
268 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. */
301 if((int)client_data != 0)
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, &d_width, NULL);
543 XtVaGetValues(file_label, XmNwidth, &f_width, NULL);
545 if (d_width > f_width)
546 XtVaSetValues(file_label, XmNwidth, d_width, NULL);
548 XtVaSetValues(dir_label, XmNwidth, f_width, NULL);
550 XtVaGetValues(dir_text, XmNwidth, &d_width, NULL);
551 XtVaGetValues(file_text, XmNwidth, &f_width, NULL);
553 if (d_width > f_width)
554 XtVaSetValues(file_text, XmNwidth, d_width, NULL);
556 XtVaSetValues(dir_text, XmNwidth, f_width, NULL);
559 /* The data sent to the Text, Ok and Cancel callbacks */
562 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
564 call_struct->dialog_widget = form;
565 call_struct->menu_widget = w;
566 call_struct->dir_text_widget = dir_text;
567 call_struct->file_text_widget = file_text;
568 call_struct->file_type_widget = file_type;
569 call_struct->original_physical_type =
570 file_view_data->file_data->physical_type;
571 call_struct->file_mgr_rec = file_mgr_rec;
572 call_struct->host_name = XtNewString (file_mgr_data->host);
573 call_struct->directory_name = XtNewString (directory_name);
574 call_struct->mode = COPY_FILE;
575 call_struct->file_name = XtNewString (file_view_data->file_data->file_name);
576 call_struct->original_logical_type =file_view_data->file_data->logical_type;
577 call_struct->previous_file_type = NULL;
578 call_struct->file_mgr_data = file_mgr_data;
581 /* Create a separator between the buttons */
584 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
585 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
586 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
587 XtSetArg (args[n], XmNtopWidget, file_type_box); n++;
588 XtSetArg (args[n], XmNtopOffset, 5); n++;
589 separator = XmCreateSeparatorGadget (form, "separator", args, n);
590 XtManageChild (separator);
594 /* Create the ok, cancel, preview and help buttons */
597 XtSetArg (args[n], XmNlabelString, okXmString); n++;
598 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
599 XtSetArg (args[n], XmNleftPosition, 1); n++;
600 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
601 XtSetArg (args[n], XmNrightPosition, 21); n++;
602 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
603 XtSetArg (args[n], XmNtopWidget, separator); n++;
604 XtSetArg (args[n], XmNtopOffset, 5); n++;
605 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
606 XtSetArg (args[n], XmNbottomOffset, 5); n++;
607 XtSetArg (args[n], XmNmarginWidth, 4); n++;
608 XtSetArg (args[n], XmNmarginHeight, 4); n++;
609 XtSetArg (args[n], XmNshowAsDefault, True); n++;
610 XtSetArg (args[n], XmNuserData, flag); n++;
611 ok = XmCreatePushButtonGadget (form, "ok", args, n);
614 XtAddCallback (ok, XmNactivateCallback, RenameOk, (XtPointer) call_struct);
615 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
616 HELP_COPY_DIALOG_STR);
619 /* Set the ok button to the default for the bulletin board. */
620 /* This causes the return key from the text widget to be */
621 /* properly processed. */
623 XtSetArg (args[0], XmNdefaultButton, ok);
624 XtSetValues (form, args, 1);
628 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
629 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
630 XtSetArg (args[n], XmNleftPosition, 22); n++;
631 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
632 XtSetArg (args[n], XmNrightPosition, 42); n++;
633 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
634 XtSetArg (args[n], XmNtopWidget, separator); n++;
635 XtSetArg (args[n], XmNtopOffset, 5); n++;
636 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
637 XtSetArg (args[n], XmNbottomOffset, 5); n++;
638 XtSetArg (args[n], XmNmarginWidth, 4); n++;
639 XtSetArg (args[n], XmNmarginHeight, 4); n++;
640 XtSetArg (args[n], XmNuserData, flag); n++;
641 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
642 XtManageChild (cancel);
644 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
645 (XtPointer) call_struct);
646 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
647 HELP_COPY_DIALOG_STR);
650 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 36, "Show Icon")));
653 XtSetArg (args[n], XmNlabelString, label_string); n++;
654 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
655 XtSetArg (args[n], XmNleftPosition, 43); n++;
656 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
657 XtSetArg (args[n], XmNrightPosition, 78); n++;
658 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
659 XtSetArg (args[n], XmNtopWidget, separator); n++;
660 XtSetArg (args[n], XmNtopOffset, 5); n++;
661 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
662 XtSetArg (args[n], XmNbottomOffset, 5); n++;
663 XtSetArg (args[n], XmNmarginWidth, 4); n++;
664 XtSetArg (args[n], XmNmarginHeight, 4); n++;
665 preview = XmCreatePushButtonGadget (form, "show_file_type", args, n);
666 XtManageChild (preview);
668 XmStringFree (label_string);
669 XtAddCallback (preview, XmNactivateCallback, FileTypePreviewCB,
670 (XtPointer) call_struct);
671 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
672 HELP_COPY_DIALOG_STR);
673 tmpStr = XtNewString(file_view_data->file_data->file_name);
674 FileTypePreview (preview, tmpStr, (XtPointer) call_struct, NULL);
677 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
678 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
679 XtSetArg (args[n], XmNleftPosition, 79); n++;
680 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
681 XtSetArg (args[n], XmNrightPosition, 99); n++;
682 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
683 XtSetArg (args[n], XmNtopWidget, separator); n++;
684 XtSetArg (args[n], XmNtopOffset, 5); n++;
685 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
686 XtSetArg (args[n], XmNbottomOffset, 5); n++;
687 XtSetArg (args[n], XmNmarginWidth, 4); n++;
688 XtSetArg (args[n], XmNmarginHeight, 4); n++;
689 help = XmCreatePushButtonGadget (form, "help", args, n);
690 XtManageChild (help);
692 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
693 HELP_COPY_DIALOG_STR);
694 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
695 HELP_COPY_DIALOG_STR);
699 XtSetArg (args[0], XmNcancelButton, cancel);
700 XtSetValues (form, args, 1);
702 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
703 (XtPointer) XtParent(shell));
705 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
706 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
707 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
708 (XtPointer) call_struct );
710 call_struct->Ok = ok;
711 call_struct->Cancel = cancel;
713 XtManageChild (form);
715 /* Force the focus to the text field */
716 XmProcessTraversal(dir_text, XmTRAVERSE_CURRENT);
719 /************************************************************************
722 * Callback function invoked from the File Manager menu. This
723 * function creates and displays a dialog prompting for a new
724 * name for the selected file.
726 * NOTE: The Rename File... menu item can currently be reactivated
727 * by single select on another item. Is this behavior correct?
729 ************************************************************************/
734 XtPointer client_data,
735 XtPointer call_data )
737 FileMgrRec * file_mgr_rec;
738 DialogData * dialog_data;
739 static FileMgrData * file_mgr_data; /* static because it is passed to RenameOk callback */
740 FileViewData * file_view_data;
742 char name_string[18+MAX_PATH];
743 char * directory_name;
744 char * tmpStr, *tempStr;
757 DialogCallbackStruct * call_struct;
758 XmString label_string;
763 XtTranslations trans_table;
764 Atom delete_window_atom;
766 /* Set the menu item to insensitive to prevent multiple */
767 /* dialogs from being posted and get the area under the */
768 /* menu pane redrawn. */
772 if((int)client_data != 0)
774 file_view_data = (FileViewData *)client_data;
779 file_view_data = NULL;
780 mbar = XmGetPostedFromWidget(XtParent(w));
784 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
785 XtGetValues(mbar, args, 1);
787 /* Ignore accelerators when we're insensitive */
789 if ((file_mgr_rec->menuStates & MOVE) == 0)
792 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
793 file_mgr_data = (FileMgrData *) dialog_data->data;
795 /* Get the selected file. */
797 if(file_view_data == NULL)
798 file_view_data = file_mgr_data->selection_list[0];
799 directory_name = ((DirectorySet *) file_view_data->directory_set)->name;
802 /* Create the widget hierarchy for the dialog */
805 XtSetArg (args[n], XmNallowShellResize, True); n++;
807 /* Adjust the decorations for the dialog shell of the dialog */
808 XtSetArg (args[n], XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE); ++n;
809 XtSetArg (args[n], XmNmwmDecorations, MWM_DECOR_BORDER | MWM_DECOR_TITLE); ++n;
811 file_mgr_rec->menuStates &= ~MOVE;
812 if(file_mgr_data->title != NULL &&
813 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
815 tmpStr = GETMESSAGE(10, 42, "Move Object");
816 tempStr = (char *)XtMalloc(strlen(tmpStr) +
817 strlen(file_mgr_data->title) + 5);
818 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
822 tmpStr = (GETMESSAGE(10,43, "File Manager - Move Object"));
823 tempStr = XtNewString(tmpStr);
825 XtSetArg (args[n], XmNtitle, tempStr); n++;
826 shell = XmCreateDialogShell (file_mgr_rec->shell, "move_file", args, n);
829 /* Set the useAsyncGeo on the shell */
830 XtSetArg (args[0], XmNuseAsyncGeometry, True);
831 XtSetValues (XtParent(shell), args, 1);
834 trans_table = XtParseTranslationTable(translations_space);
837 XtSetArg (args[n], XmNmarginWidth, 1); n++;
838 XtSetArg (args[n], XmNmarginHeight, 1); n++;
839 XtSetArg (args[n], XmNshadowThickness, 1); n++;
840 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
841 XtSetArg (args[n], XmNautoUnmanage, False); n++;
842 #ifdef _CHECK_FOR_SPACES
843 XtSetArg (args[n], XmNtextTranslations, trans_table);n++;
845 XtSetArg (args[n], XmNuserData, file_mgr_rec); n++;
846 form = XmCreateForm (shell, "form", args, n);
847 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
848 HELP_MOVE_DIALOG_STR);
851 sprintf (name_string, "%s ", ((char *)GETMESSAGE(10, 37, "Selected object:")));
852 strcat (name_string, file_view_data->file_data->file_name);
853 label_string = XmStringCreateLocalized (name_string);
856 XtSetArg (args[n], XmNlabelString, label_string); n++;
857 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
858 XtSetArg (args[n], XmNleftOffset, 5); n++;
859 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
860 XtSetArg (args[n], XmNtopOffset, 5); n++;
861 XtSetArg (args[n], XmNtraversalOn, False); n++;
862 current_name = XmCreateLabelGadget (form, "current_name", args, n);
863 XtManageChild (current_name);
864 XtAddCallback(current_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
865 HELP_MOVE_DIALOG_STR);
867 XmStringFree (label_string);
870 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 34, "Destination Folder: ")));
873 XtSetArg (args[n], XmNlabelString, label_string); n++;
874 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
875 XtSetArg (args[n], XmNleftOffset, 5); n++;
876 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
877 XtSetArg (args[n], XmNtopWidget, current_name); n++;
878 XtSetArg (args[n], XmNtopOffset, 12); n++;
879 XtSetArg (args[n], XmNtraversalOn, False); n++;
880 new_name = XmCreateLabelGadget (form, "new_name", args, n);
881 XtManageChild (new_name);
882 XtAddCallback(new_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
883 HELP_MOVE_DIALOG_STR);
885 XmStringFree (label_string);
889 XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
890 XtSetArg (args[n], XmNleftWidget, new_name); n++;
891 XtSetArg (args[n], XmNleftOffset, 0); n++;
892 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
893 XtSetArg (args[n], XmNtopWidget, current_name); n++;
894 XtSetArg (args[n], XmNtopOffset, 5); n++;
895 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
896 XtSetArg (args[n], XmNrightOffset, 5); n++;
897 XtSetArg (args[n], XmNtraversalOn, True); n++;
898 XtSetArg (args[n], XmNcursorPosition,
899 strlen(file_view_data->file_data->file_name)); n++;
900 new_text = XmCreateTextField (form, "new_text", args, n);
901 XtManageChild (new_text);
902 XtAddCallback(new_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
903 HELP_MOVE_DIALOG_STR);
905 /* The data sent to the Text, Ok and Cancel callbacks */
908 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
910 call_struct->dialog_widget = form;
911 call_struct->menu_widget = w;
912 call_struct->dir_text_widget = new_text;
913 call_struct->file_text_widget = NULL;
914 call_struct->file_type_widget = NULL;
915 call_struct->original_physical_type =
916 file_view_data->file_data->physical_type;
917 call_struct->file_mgr_rec = file_mgr_rec;
918 call_struct->host_name = XtNewString (file_mgr_data->host);
919 call_struct->directory_name = XtNewString (directory_name);
920 call_struct->file_name = XtNewString (file_view_data->file_data->file_name);
921 call_struct->mode = MOVE_FILE;
922 call_struct->original_logical_type =file_view_data->file_data->logical_type;
923 call_struct->previous_file_type = NULL;
924 call_struct->file_mgr_data = file_mgr_data;
927 /* Create a separator between the buttons */
930 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
931 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
932 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
933 XtSetArg (args[n], XmNtopWidget, new_name); n++;
934 XtSetArg (args[n], XmNtopOffset, 10); n++;
935 separator = XmCreateSeparatorGadget (form, "separator", args, n);
936 XtManageChild (separator);
940 /* Create the ok, cancel, preview and help buttons */
944 XtSetArg (args[n], XmNlabelString, okXmString); n++;
945 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
946 XtSetArg (args[n], XmNleftPosition, 2); n++;
947 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
948 XtSetArg (args[n], XmNrightPosition, 32); n++;
949 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
950 XtSetArg (args[n], XmNtopWidget, separator); n++;
951 XtSetArg (args[n], XmNtopOffset, 5); n++;
952 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
953 XtSetArg (args[n], XmNbottomOffset, 5); n++;
954 XtSetArg (args[n], XmNmarginWidth, 4); n++;
955 XtSetArg (args[n], XmNmarginHeight, 4); n++;
956 XtSetArg (args[n], XmNshowAsDefault, True); n++;
957 XtSetArg (args[n], XmNuserData, flag); n++;
958 ok = XmCreatePushButtonGadget (form, "ok", args, n);
961 XtAddCallback (ok, XmNactivateCallback, RenameOk, (XtPointer) call_struct);
962 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
963 HELP_MOVE_DIALOG_STR);
966 /* Set the ok button to the default for the bulletin board. */
967 /* This causes the return key from the text widget to be */
968 /* properly processed. */
970 XtSetArg (args[0], XmNdefaultButton, ok);
971 XtSetValues (form, args, 1);
975 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
976 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
977 XtSetArg (args[n], XmNleftPosition, 35); n++;
978 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
979 XtSetArg (args[n], XmNrightPosition, 65); n++;
980 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
981 XtSetArg (args[n], XmNtopWidget, separator); n++;
982 XtSetArg (args[n], XmNtopOffset, 5); n++;
983 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
984 XtSetArg (args[n], XmNbottomOffset, 5); n++;
985 XtSetArg (args[n], XmNmarginWidth, 4); n++;
986 XtSetArg (args[n], XmNmarginHeight, 4); n++;
987 XtSetArg (args[n], XmNuserData, flag); n++;
988 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
989 XtManageChild (cancel);
991 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
992 (XtPointer) call_struct);
993 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
994 HELP_MOVE_DIALOG_STR);
998 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
999 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1000 XtSetArg (args[n], XmNleftPosition, 68); n++;
1001 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1002 XtSetArg (args[n], XmNrightPosition, 98); n++;
1003 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1004 XtSetArg (args[n], XmNtopWidget, separator); n++;
1005 XtSetArg (args[n], XmNtopOffset, 5); n++;
1006 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1007 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1008 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1009 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1010 help = XmCreatePushButtonGadget (form, "help", args, n);
1011 XtManageChild (help);
1013 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
1014 HELP_MOVE_DIALOG_STR);
1015 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1016 HELP_MOVE_DIALOG_STR);
1020 XtSetArg (args[0], XmNcancelButton, cancel);
1021 XtSetValues (form, args, 1);
1023 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
1024 (XtPointer) XtParent(shell));
1026 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
1027 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
1028 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
1029 (XtPointer) call_struct );
1031 call_struct->Ok = ok;
1032 call_struct->Cancel = cancel;
1034 XtManageChild (form);
1036 /* Force the focus to the text field */
1037 XmProcessTraversal(new_text, XmTRAVERSE_CURRENT);
1041 /************************************************************************
1043 * ShowLinkFileDialog
1044 * Callback function invoked from the File Manager menu. This
1045 * function creates and displays a dialog prompting for a new
1046 * name for the selected file.
1048 * NOTE: The Rename File... menu item can currently be reactivated
1049 * by single select on another item. Is this behavior correct?
1051 ************************************************************************/
1056 XtPointer client_data,
1057 XtPointer call_data )
1059 FileMgrRec * file_mgr_rec;
1060 DialogData * dialog_data;
1061 static FileMgrData * file_mgr_data; /* static because it is passed to RenameOk callback */
1062 FileViewData * file_view_data;
1064 char name_string[18+MAX_PATH];
1065 char * directory_name;
1066 char * tmpStr, *tempStr;
1070 Widget current_name;
1071 Widget dir_label, dir_text;
1072 Widget file_label, file_text;
1073 Widget file_type_box;
1080 int flag=FLAG_RESET;
1082 DialogCallbackStruct * call_struct;
1083 XmString label_string;
1088 XtTranslations trans_table;
1089 Atom delete_window_atom;
1091 /* Set the menu item to insensitive to prevent multiple */
1092 /* dialogs from being posted and get the area under the */
1093 /* menu pane redrawn. */
1095 XmUpdateDisplay (w);
1097 if((int)client_data != 0)
1099 file_view_data = (FileViewData *)client_data;
1104 file_view_data = NULL;
1105 mbar = XmGetPostedFromWidget(XtParent(w));
1109 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1110 XtGetValues(mbar, args, 1);
1112 /* Ignore accelerators when we're insensitive */
1114 if ((file_mgr_rec->menuStates & LINK) == 0)
1117 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
1118 file_mgr_data = (FileMgrData *) dialog_data->data;
1121 /* Get the selected file. */
1123 if(file_view_data == NULL)
1124 file_view_data = file_mgr_data->selection_list[0];
1125 directory_name = ((DirectorySet *) file_view_data->directory_set)->name;
1128 /* Create the widget hierarchy for the dialog */
1131 XtSetArg (args[n], XmNallowShellResize, True); n++;
1133 file_mgr_rec->menuStates &= ~LINK;
1134 if(file_mgr_data->title != NULL &&
1135 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
1137 tmpStr = GETMESSAGE(10, 46, "Link Object");
1138 tempStr = (char *)XtMalloc(strlen(tmpStr) +
1139 strlen(file_mgr_data->title) + 5);
1140 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
1144 tmpStr = (GETMESSAGE(10,47, "File Manager - Link Object"));
1145 tempStr = XtNewString(tmpStr);
1147 XtSetArg (args[n], XmNtitle, tempStr); n++;
1148 shell = XmCreateDialogShell (file_mgr_rec->shell, "link_file", args, n);
1151 /* Set the useAsyncGeo on the shell */
1152 XtSetArg (args[0], XmNuseAsyncGeometry, True);
1153 XtSetValues (XtParent(shell), args, 1);
1156 trans_table = XtParseTranslationTable(translations_space);
1159 XtSetArg (args[n], XmNmarginWidth, 1); n++;
1160 XtSetArg (args[n], XmNmarginHeight, 1); n++;
1161 XtSetArg (args[n], XmNshadowThickness, 1); n++;
1162 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
1163 XtSetArg (args[n], XmNautoUnmanage, False); n++;
1164 #ifdef _CHECK_FOR_SPACES
1165 XtSetArg (args[n], XmNtextTranslations, trans_table); n++;
1167 XtSetArg (args[n], XmNuserData, file_mgr_rec); n++;
1168 form = XmCreateForm (shell, "form", args, n);
1169 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1170 HELP_LINK_DIALOG_STR);
1173 sprintf (name_string, "%s ", ((char *)GETMESSAGE(10, 37, "Selected object:")));
1174 strcat (name_string, file_view_data->file_data->file_name);
1175 label_string = XmStringCreateLocalized (name_string);
1178 XtSetArg (args[n], XmNlabelString, label_string); n++;
1179 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
1180 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
1182 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
1183 XtSetArg (args[n], XmNtopOffset, 5); n++;
1184 XtSetArg (args[n], XmNtraversalOn, False); n++;
1185 current_name = XmCreateLabelGadget (form, "current_name", args, n);
1186 XtManageChild (current_name);
1187 XtAddCallback(current_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1188 HELP_LINK_DIALOG_STR);
1190 XmStringFree (label_string);
1192 /* Create the field displaying the file type info */
1195 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
1196 XtSetArg(args[n], XmNtopOffset, 15); n++;
1197 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
1198 XtSetArg(args[n], XmNrightOffset, 5); n++;
1199 XtSetArg(args[n], XmNmarginHeight, 5); n++;
1200 XtSetArg(args[n], XmNmarginWidth, 5); n++;
1201 file_type_box = XmCreateFrame (form, "file_type_box", args, n);
1202 XtManageChild (file_type_box);
1203 XtAddCallback(file_type_box, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1204 HELP_LINK_DIALOG_STR);
1207 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 8, "File Type")));
1210 XtSetArg (args[n], XmNlabelString, label_string); n++;
1211 XtSetArg (args[n], XmNshadowThickness, 0); n++;
1212 XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++;
1213 XtSetArg (args[n], XmNpixmapPosition, XmPIXMAP_TOP); n++;
1214 XtSetArg (args[n], XmNtraversalOn, False); n++;
1215 file_type = _DtCreateIcon (file_type_box, "file_type", args, n);
1216 XtManageChild (file_type);
1217 XtAddCallback(file_type, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1218 HELP_LINK_DIALOG_STR);
1220 XmStringFree (label_string);
1223 /* Adjust the colors of the icon */
1224 SetToNormalColors (file_type, form, file_mgr_rec->main, 0);
1227 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
1228 XtSetArg (args[n], XmNrightWidget, file_type_box); n++;
1229 XtSetArg (args[n], XmNrightOffset, 5); n++;
1230 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1231 XtSetArg (args[n], XmNtopWidget, current_name); n++;
1232 XtSetArg (args[n], XmNtopOffset, 5); n++;
1233 XtSetArg (args[n], XmNtraversalOn, True); n++;
1234 XtSetArg (args[n], XmNcursorPosition,
1235 strlen(file_view_data->file_data->file_name)); n++;
1236 dir_text = XmCreateTextField (form, "new_text", args, n);
1237 XtManageChild (dir_text);
1238 XtAddCallback(dir_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1239 HELP_LINK_DIALOG_STR);
1240 XmTextFieldInsert(dir_text, 0, directory_name);
1243 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 34, "Destination Folder: ")));
1246 XtSetArg (args[n], XmNlabelString, label_string); n++;
1247 XtSetArg (args[n], XmNrightWidget, dir_text); n++;
1248 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
1249 XtSetArg (args[n], XmNrightOffset, 5); n++;
1250 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1251 XtSetArg (args[n], XmNtopWidget, current_name); n++;
1252 XtSetArg (args[n], XmNtopOffset, 12); n++;
1253 XtSetArg (args[n], XmNtraversalOn, False); n++;
1254 dir_label = XmCreateLabelGadget (form, "new_name", args, n);
1255 XtManageChild (dir_label);
1256 XtAddCallback(dir_label, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1257 HELP_LINK_DIALOG_STR);
1259 XmStringFree (label_string);
1262 XtSetArg (args[n], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
1263 XtSetArg (args[n], XmNleftWidget, dir_text); n++;
1264 XtSetArg (args[n], XmNleftOffset, 0); n++;
1265 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1266 XtSetArg (args[n], XmNtopWidget, dir_label); n++;
1267 XtSetArg (args[n], XmNtopOffset, 5); n++;
1268 XtSetArg (args[n], XmNtraversalOn, True); n++;
1269 XtSetArg (args[n], XmNcursorPosition,
1270 strlen(file_view_data->file_data->file_name)); n++;
1271 file_text = XmCreateTextField (form, "new_text", args, n);
1272 XtManageChild (file_text);
1273 XtAddCallback(file_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1274 HELP_LINK_DIALOG_STR);
1275 XmTextFieldInsert(file_text, 0, file_view_data->file_data->file_name);
1277 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 38, "Name for copy : ")));
1280 XtSetArg (args[n], XmNlabelString, label_string); n++;
1281 XtSetArg (args[n], XmNrightWidget, file_text); n++;
1282 XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
1283 XtSetArg (args[n], XmNrightOffset, 5); n++;
1284 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1285 XtSetArg (args[n], XmNtopWidget, dir_label); n++;
1286 XtSetArg (args[n], XmNtopOffset, 12); n++;
1287 XtSetArg (args[n], XmNtraversalOn, False); n++;
1288 file_label = XmCreateLabelGadget (form, "new_name", args, n);
1289 XtManageChild (file_label);
1290 XtAddCallback(file_label, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1291 HELP_LINK_DIALOG_STR);
1293 XmStringFree (label_string);
1296 /* The data sent to the Text, Ok and Cancel callbacks */
1299 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
1301 call_struct->dialog_widget = form;
1302 call_struct->menu_widget = w;
1303 call_struct->dir_text_widget = dir_text;
1304 call_struct->file_text_widget = file_text;
1305 call_struct->file_type_widget = file_type;
1306 call_struct->original_physical_type =
1307 file_view_data->file_data->physical_type;
1308 call_struct->file_mgr_rec = file_mgr_rec;
1309 call_struct->host_name = XtNewString (file_mgr_data->host);
1310 call_struct->directory_name = XtNewString (directory_name);
1311 call_struct->mode = LINK_FILE;
1312 call_struct->file_name = XtNewString (file_view_data->file_data->file_name);
1313 call_struct->original_logical_type =file_view_data->file_data->logical_type;
1314 call_struct->previous_file_type = NULL;
1315 call_struct->file_mgr_data = file_mgr_data;
1318 /* Create a separator between the buttons */
1321 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
1322 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
1323 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1324 XtSetArg (args[n], XmNtopWidget, file_label); n++;
1325 XtSetArg (args[n], XmNtopOffset, 10); n++;
1326 separator = XmCreateSeparatorGadget (form, "separator", args, n);
1327 XtManageChild (separator);
1331 /* Create the ok, cancel, preview and help buttons */
1335 XtSetArg (args[n], XmNlabelString, okXmString); n++;
1336 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1337 XtSetArg (args[n], XmNleftPosition, 1); n++;
1338 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1339 XtSetArg (args[n], XmNrightPosition, 21); n++;
1340 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1341 XtSetArg (args[n], XmNtopWidget, separator); n++;
1342 XtSetArg (args[n], XmNtopOffset, 5); n++;
1343 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1344 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1345 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1346 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1347 XtSetArg (args[n], XmNshowAsDefault, True); n++;
1348 XtSetArg (args[n], XmNuserData, flag); n++;
1349 ok = XmCreatePushButtonGadget (form, "ok", args, n);
1352 XtAddCallback (ok, XmNactivateCallback, RenameOk, (XtPointer) call_struct);
1353 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1354 HELP_LINK_DIALOG_STR);
1357 /* Set the ok button to the default for the bulletin board. */
1358 /* This causes the return key from the text widget to be */
1359 /* properly processed. */
1361 XtSetArg (args[0], XmNdefaultButton, ok);
1362 XtSetValues (form, args, 1);
1366 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
1367 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1368 XtSetArg (args[n], XmNleftPosition, 22); n++;
1369 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1370 XtSetArg (args[n], XmNrightPosition, 42); n++;
1371 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1372 XtSetArg (args[n], XmNtopWidget, separator); n++;
1373 XtSetArg (args[n], XmNtopOffset, 5); n++;
1374 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1375 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1376 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1377 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1378 XtSetArg (args[n], XmNuserData, flag); n++;
1379 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
1380 XtManageChild (cancel);
1382 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
1383 (XtPointer) call_struct);
1384 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1385 HELP_LINK_DIALOG_STR);
1388 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 36, "Show Icon")));
1391 XtSetArg (args[n], XmNlabelString, label_string); n++;
1392 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1393 XtSetArg (args[n], XmNleftPosition, 43); n++;
1394 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1395 XtSetArg (args[n], XmNrightPosition, 78); n++;
1396 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1397 XtSetArg (args[n], XmNtopWidget, separator); n++;
1398 XtSetArg (args[n], XmNtopOffset, 5); n++;
1399 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1400 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1401 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1402 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1403 preview = XmCreatePushButtonGadget (form, "show_file_type", args, n);
1404 XtManageChild (preview);
1406 XmStringFree (label_string);
1407 XtAddCallback (preview, XmNactivateCallback, FileTypePreviewCB,
1408 (XtPointer) call_struct);
1409 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1410 HELP_LINK_DIALOG_STR);
1411 tmpStr = XtNewString(file_view_data->file_data->file_name);
1412 FileTypePreview (preview, tmpStr, (XtPointer) call_struct, NULL);
1415 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
1416 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
1417 XtSetArg (args[n], XmNleftPosition, 79); n++;
1418 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
1419 XtSetArg (args[n], XmNrightPosition, 99); n++;
1420 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
1421 XtSetArg (args[n], XmNtopWidget, separator); n++;
1422 XtSetArg (args[n], XmNtopOffset, 5); n++;
1423 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
1424 XtSetArg (args[n], XmNbottomOffset, 5); n++;
1425 XtSetArg (args[n], XmNmarginWidth, 4); n++;
1426 XtSetArg (args[n], XmNmarginHeight, 4); n++;
1427 help = XmCreatePushButtonGadget (form, "help", args, n);
1428 XtManageChild (help);
1430 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
1431 HELP_LINK_DIALOG_STR);
1432 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
1433 HELP_LINK_DIALOG_STR);
1437 XtSetArg (args[0], XmNcancelButton, cancel);
1438 XtSetValues (form, args, 1);
1440 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
1441 (XtPointer) XtParent(shell));
1443 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
1444 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
1445 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
1446 (XtPointer) call_struct );
1448 call_struct->Ok = ok;
1449 call_struct->Cancel = cancel;
1451 XtManageChild (form);
1453 /* Force the focus to the text field */
1454 XmProcessTraversal(dir_text, XmTRAVERSE_CURRENT);
1459 /************************************************************************
1462 * Get the new file name and rename the file.
1464 ************************************************************************/
1469 XtPointer client_data,
1470 XtPointer call_data )
1472 DialogCallbackStruct * call_struct = (DialogCallbackStruct *)client_data;
1475 char *new_name = NULL, *new_dir = NULL, new[MAX_PATH];
1476 unsigned int btnMask;
1477 RenameDoneData *data;
1479 char to_dir[MAX_PATH];
1481 unsigned int modifiers;
1482 char *host_set[1], *file_set[1];
1485 if(RecheckFlag(call_struct->dialog_widget,w)) /* OK button */
1487 else if(RecheckFlag(NULL,call_struct->Cancel))
1490 /* currently, only one file can be moved/copied/linked using the menu */
1491 /* the following arrays can be expanded if this restriction is lifted */
1493 new_dir = XmTextFieldGetString (call_struct->dir_text_widget);
1494 new_dir = (char *) _DtStripSpaces (new_dir);
1496 if (new_dir[0] == '~')
1497 new_dir = _DtChangeTildeToHome (new_dir);
1499 switch (call_struct->mode)
1502 title = XtNewString(GetSharedMessage(FILE_MOVE_ERROR_TITLE));
1506 title = XtNewString(GetSharedMessage(FILE_COPY_ERROR_TITLE));
1507 btnMask = DUPLICATE;
1510 title = XtNewString(GetSharedMessage(FILE_LINK_ERROR_TITLE));
1515 if (strlen (new_dir) == 0)
1516 msg = XtNewString(GETMESSAGE(10, 11,
1517 "A file or folder cannot have a blank name."));
1518 #ifdef _CHECK_FOR_SPACES
1519 else if (DtStrchr (new_dir, ' ') != NULL ||
1520 DtStrchr (new_dir, '\t') != NULL)
1521 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
1524 switch (call_struct->mode)
1528 new_name = XmTextFieldGetString (call_struct->file_text_widget);
1529 new_name = (char *) _DtStripSpaces (new_name);
1530 if (strlen (new_name) == 0)
1531 msg = XtNewString(GETMESSAGE(10, 11,
1532 "A file or folder cannot have a blank name."));
1533 #ifdef _CHECK_FOR_SPACES
1534 else if (DtStrchr (new_name, ' ') != NULL ||
1535 DtStrchr (new_name, '\t') != NULL)
1536 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
1538 sprintf(new, "%s/%s", new_dir, new_name );
1541 sprintf(new, "%s/%s", new_dir, call_struct->file_name);
1547 _DtMessage(XtParent (w), title, msg, NULL, HelpRequestCB);
1550 if(new_name) XtFree(new_name);
1551 if(new_dir) XtFree(new_dir);
1552 ResetFlag(call_struct->dialog_widget,w);
1553 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
1559 if(new_name) XtFree(new_name);
1560 if(new_dir) XtFree(new_dir);
1562 /* set up data for RenameDone callback */
1563 data = (RenameDoneData *)XtMalloc(sizeof(RenameDoneData));
1565 data->call_struct = call_struct;
1566 data->mode = call_struct->mode;
1567 data->btnMask = btnMask;
1570 * Do the rename/copy/...
1571 * This operation is performed in a background process; when the
1572 * background process finishes, the RenameDone callback will be
1573 * called with a return code indicating success or failure.
1576 /* get host & path of the target file */
1577 GetTarget(call_struct->host_name, call_struct->directory_name, new,
1578 to_host, to_dir, to_file);
1579 /* get host & path of source file */
1580 host_set[0] = call_struct->host_name;
1581 file_set[0] = build_path(call_struct->directory_name, call_struct->file_name);
1582 /* set up modifiers depending on operation */
1583 switch (call_struct->mode)
1589 modifiers = ControlMask;
1592 modifiers = ShiftMask;
1596 FileMoveCopy(call_struct->file_mgr_data,
1597 to_file, to_dir, to_host,
1598 host_set, file_set, file_count,
1599 modifiers, RenameDone, (XtPointer)data);
1601 XtFree(file_set[0]);
1606 /************************************************************************
1609 * This routine is called when the file move/copy/link is finished.
1611 ************************************************************************/
1615 XtPointer client_data,
1618 RenameDoneData *data = (RenameDoneData *)client_data;
1619 DialogCallbackStruct *call_struct = data->call_struct;
1623 XtUnmanageChild(call_struct->dialog_widget);
1624 XmUpdateDisplay(call_struct->dialog_widget);
1625 XtDestroyWidget(XtParent(call_struct->dialog_widget));
1626 call_struct->file_mgr_rec->menuStates |= data->btnMask;
1628 XtFree(call_struct->host_name);
1629 XtFree(call_struct->directory_name);
1630 XtFree(call_struct->file_name);
1631 if(call_struct->previous_file_type)
1632 XtFree(call_struct->previous_file_type);
1634 XtFree((char *) call_struct);
1637 XtFree((char *)data);
1641 /************************************************************************
1644 * Build a directory,filename path to be used as the destination
1645 * of a create, copy or move operation.
1647 ************************************************************************/
1658 char *directory_name;
1660 Tt_status tt_status;
1662 if (strncmp (new_name, "/", 1) == 0)
1664 if ((path = (char *) ResolveLocalPathName (host_in,
1668 &tt_status )) == NULL)
1673 if (strcmp(dir_in, "/") == 0)
1674 sprintf(to, "%s%s", dir_in, new_name);
1676 sprintf(to, "%s/%s", dir_in, new_name);
1678 if ((path = (char *) ResolveLocalPathName (host_in,
1682 &tt_status )) == NULL)
1694 /************************************************************************
1697 * Get the text field file name, find out what the file type is
1698 * for the file name and display the name and icon for the
1701 ************************************************************************/
1706 XtPointer client_data,
1707 XtPointer call_data )
1709 DialogCallbackStruct * call_struct;
1712 call_struct = (DialogCallbackStruct *) client_data;
1714 new_name = XmTextFieldGetString (call_struct->file_text_widget);
1715 FileTypePreview(w, new_name, client_data, call_data);
1719 /************************************************************************
1722 * Find out what the file type is for the specified file name and
1723 * display the name and icon for the file type.
1725 ************************************************************************/
1731 XtPointer client_data,
1732 XtPointer call_data )
1734 DialogCallbackStruct * call_struct;
1739 char whole_name[MAX_PATH];
1742 char * new_link_path;
1743 PixmapData *pixmapData;
1744 Tt_status tt_status;
1745 Boolean Flag = ((Boolean)call_data == True)?True:False;
1747 call_struct = (DialogCallbackStruct *) client_data;
1748 new_name = (char *) _DtStripSpaces (new_name);
1750 if (new_name[0] == '~')
1751 new_name = _DtChangeTildeToHome (new_name);
1753 if (GetToPath (whole_name, new_name, call_struct->host_name,
1754 call_struct->directory_name) == False)
1755 strcpy(whole_name, " ");
1757 orig_name = ResolveLocalPathName( call_struct->host_name,
1758 call_struct->directory_name,
1759 call_struct->file_name,
1760 home_host_name, &tt_status);
1762 /* Check for broken links so we get the proper file_type */
1763 if (call_struct->original_logical_type != NULL &&
1764 strcmp(call_struct->original_logical_type, LT_BROKEN_LINK) == 0)
1765 file_type = XtNewString(call_struct->original_logical_type);
1766 else if (call_struct->original_physical_type == DtDIRECTORY)
1767 file_type = XtNewString(LT_DIRECTORY);
1768 else if ( *new_name == 0x0 &&
1769 call_struct->original_physical_type == DtDATA )
1770 file_type = XtNewString(LT_DATA);
1771 else if (link_path = _DtFollowLink(whole_name))
1773 if (strcmp(orig_name, whole_name) == 0)
1774 file_type = (char *) DtDtsDataToDataType(orig_name, NULL, 0, NULL,
1778 if (call_struct->menu_widget == *renameBtn)
1780 new_link_path = XtNewString(link_path);
1782 if ((link_path = _DtFollowLink(orig_name)) &&
1783 (strcmp(link_path, orig_name) == 0))
1785 file_type = (char *) DtDtsDataToDataType(new_link_path, NULL, 0,
1786 NULL, NULL, NULL, NULL);
1790 /* Links are typed according to what they are linked to */
1791 file_type = call_struct->original_logical_type;
1794 XtFree(new_link_path);
1798 /* We want to find out the possible filetype of a file that has
1799 such name (stored in link_path). However, the file does not even
1800 existed yet. In order for the file typing code to work correctly,
1801 we have to pass in a dummy stat structure indicates that if the
1802 file is created, this is its mode.
1804 struct stat fileStat;
1805 unsigned int creationMask = umask( DtFILE_DATA_CREATION_MASK );
1807 memset( &fileStat, 0, sizeof( struct stat ) );
1808 fileStat.st_mode = creationMask | S_IFREG;
1810 file_type = (char *) DtDtsDataToDataType( link_path, NULL, 0,
1813 umask( creationMask );
1818 file_type = XtNewString(LT_RECURSIVE_LINK);
1826 if( call_struct->previous_file_type
1827 && strcmp( call_struct->previous_file_type, file_type ) == 0 )
1829 char *tmpStr, *title, *msg;
1833 tmpStr = GETMESSAGE(10, 36, "Show Icon");
1834 title = XtNewString(tmpStr);
1835 tmpStr = GETMESSAGE(10, 41, "The correct icon for this datatype is already shown.");
1836 msg = XtNewString(tmpStr);
1838 _DtMessage(XtParent(w), title, msg, NULL, HelpRequestCB);
1842 XtFree ((char *) file_type);
1843 XtFree ((char *) new_name);
1844 XtFree ((char *) orig_name);
1849 call_struct->previous_file_type = file_type;
1851 if (DtActionExists(file_type))
1853 char *str = (char *)DtActionLabel(file_type);
1855 string = XmStringCreateLocalized(str);
1857 string = XmStringCreateLocalized(file_type);
1862 char *str = (char *)DtDtsDataTypeToAttributeValue(file_type,
1867 string = XmStringCreateLocalized(str);
1868 DtDtsFreeAttributeValue(str);
1872 string = XmStringCreateLocalized(file_type);
1876 XtSetArg (args[n], XmNstring, string); n++;
1878 pixmapData = _DtRetrievePixmapData(file_type,
1879 call_struct->file_name,
1880 call_struct->directory_name,
1884 XtSetArg (args[n], XmNimageName, pixmapData->iconFileName);
1886 XtSetArg (args[n], XmNimageName, NULL); n++;
1887 XtSetValues (call_struct->file_type_widget, args, n);
1889 _DtCheckAndFreePixmapData(file_type,
1891 (DtIconGadget) (call_struct->file_type_widget),
1896 XtSetArg (args[n], XmNimageName, NULL); n++;
1897 XtSetValues (call_struct->file_type_widget, args, n);
1898 if (call_struct->previous_file_type)
1900 XtFree((char *)call_struct->previous_file_type );
1901 call_struct->previous_file_type = NULL;
1906 XmStringFree (string);
1908 XtFree ((char *) new_name);
1909 XtFree ((char *) orig_name);
1913 /************************************************************************
1916 * Callback function invoked from the File Manager menu. This
1917 * function creates and displays a dialog prompting for a file name
1918 * to be used to create a directory, executable, or normal file.
1920 ************************************************************************/
1925 XtPointer client_data,
1926 XtPointer call_data )
1928 FileMgrRec * file_mgr_rec;
1929 DialogData * dialog_data;
1930 FileMgrData * file_mgr_data;
1936 Widget file_type_box;
1944 int flag=FLAG_RESET;
1946 DialogCallbackStruct * call_struct;
1947 char * tmpStr, *tempStr;
1948 XmString label_string;
1952 Widget mbar = XmGetPostedFromWidget(XtParent(w));
1953 Atom delete_window_atom;
1957 /* Set the menu item to insensitive to prevent multiple */
1958 /* dialogs from being posted and get the area under the */
1959 /* menu pane redrawn. */
1961 XmUpdateDisplay (w);
1963 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1964 XtGetValues(mbar, args, 1);
1966 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
1967 file_mgr_data = (FileMgrData *) dialog_data->data;
1971 XtSetArg (args[n], XmNallowShellResize, True); n++;
1972 /* Adjust the decorations for the dialog shell of the dialog */
1973 XtSetArg (args[n], XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE); ++n;
1974 XtSetArg (args[n], XmNmwmDecorations, MWM_DECOR_BORDER | MWM_DECOR_TITLE); ++n;
1976 if (w == *create_directoryBtn)
1978 /* Ignore accelerators when we're insensitive */
1979 if (file_mgr_rec->create_directoryBtn_child)
1981 XSetInputFocus(XtDisplay(w),
1982 XtWindow(file_mgr_rec->create_directoryBtn_child),
1983 RevertToParent, CurrentTime);
1987 file_mgr_rec->menuStates &= ~CREATE_DIR;
1989 if(file_mgr_data->title != NULL &&
1990 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
1992 tmpStr = GETMESSAGE(10, 14, "New Folder");
1993 tempStr = (char *)XtMalloc(strlen(tmpStr) +
1994 strlen(file_mgr_data->title) + 5);
1995 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
1999 tmpStr = (GETMESSAGE(10,28, "File Manager - New Folder"));
2000 tempStr = XtNewString(tmpStr);
2003 XtSetArg (args[n], XmNtitle, tempStr); n++;
2004 shell =XmCreateDialogShell(file_mgr_rec->shell, "new_folder", args, n);
2005 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 16, "New Folder Name: ")));
2007 else if (w == *create_dataBtn)
2009 /* Ignore accelerators when we're insensitive */
2010 if ( file_mgr_rec->create_dataBtn_child )
2012 XSetInputFocus(XtDisplay(w),
2013 XtWindow(file_mgr_rec->create_dataBtn_child),
2014 RevertToParent, CurrentTime);
2018 file_mgr_rec->menuStates &= ~CREATE_FILE;
2020 if(file_mgr_data->title != NULL &&
2021 strcmp(file_mgr_data->helpVol, DTFILE_HELP_NAME) != 0)
2023 tmpStr = (GETMESSAGE(10,26, "New File"));
2024 tempStr = (char *)XtMalloc(strlen(tmpStr) +
2025 strlen(file_mgr_data->title) + 5);
2026 sprintf(tempStr, "%s - %s", file_mgr_data->title, tmpStr);
2030 tmpStr = (GETMESSAGE(10,29, "File Manager - New File"));
2031 tempStr = XtNewString(tmpStr);
2033 XtSetArg (args[n], XmNtitle, tempStr); n++;
2034 shell =XmCreateDialogShell(file_mgr_rec->shell, "new_data_file", args, n);
2035 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 7, "New File Name: ")));
2039 /* Set the useAsyncGeo on the shell */
2040 XtSetArg (args[0], XmNuseAsyncGeometry, True);
2041 XtSetValues (XtParent(shell), args, 1);
2043 /* Create the widget hierarchy for the dialog */
2046 XtSetArg (args[n], XmNmarginWidth, 1); n++;
2047 XtSetArg (args[n], XmNmarginHeight, 1); n++;
2048 XtSetArg (args[n], XmNshadowThickness, 1); n++;
2049 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
2050 XtSetArg (args[n], XmNautoUnmanage, False); n++;
2051 XtSetArg (args[n], XmNuserData, file_mgr_rec); n++;
2052 form = XmCreateForm (shell, "form", args, n);
2056 XtSetArg (args[n], XmNlabelString, label_string); n++;
2057 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2058 XtSetArg (args[n], XmNleftPosition, 15); n++;
2060 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
2061 XtSetArg (args[n], XmNleftOffset, 5); n++;
2063 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
2064 XtSetArg (args[n], XmNtopOffset, 30); n++;
2065 XtSetArg (args[n], XmNtraversalOn, False); n++;
2066 new_name = XmCreateLabelGadget (form, "new_name", args, n);
2067 XtManageChild (new_name);
2069 XmStringFree (label_string);
2073 XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
2074 XtSetArg (args[n], XmNleftWidget, new_name); n++;
2075 XtSetArg (args[n], XmNleftOffset, 0); n++;
2076 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
2077 XtSetArg (args[n], XmNtopOffset, 30); n++;
2078 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2079 XtSetArg (args[n], XmNrightPosition, 70); n++;
2080 XtSetArg (args[n], XmNtraversalOn, True); n++;
2081 new_text = XmCreateTextField (form, "new_text", args, n);
2083 XtManageChild (new_text);
2085 /* Create the field displaying the file type info */
2088 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
2089 XtSetArg(args[n], XmNtopOffset, 5); n++;
2091 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
2092 XtSetArg(args[n], XmNleftWidget, new_text); n++;
2093 XtSetArg(args[n], XmNleftOffset, 20); n++;
2095 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2096 XtSetArg (args[n], XmNleftPosition, 75); n++;
2098 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
2099 XtSetArg(args[n], XmNrightOffset, 5); n++;
2101 XtSetArg(args[n], XmNmarginHeight, 5); n++;
2102 XtSetArg(args[n], XmNmarginWidth, 5); n++;
2103 file_type_box = XmCreateFrame (form, "file_type_box", args, n);
2104 XtManageChild (file_type_box);
2106 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 8, "File Type")));
2109 XtSetArg (args[n], XmNlabelString, label_string); n++;
2110 XtSetArg(args[n], XmNshadowThickness, 0); n++;
2111 XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++;
2112 XtSetArg(args[n], XmNpixmapPosition, XmPIXMAP_TOP); n++;
2113 XtSetArg (args[n], XmNtraversalOn, False); n++;
2114 file_type = _DtCreateIcon (file_type_box, "file_type", args, n);
2115 XtManageChild (file_type);
2117 XmStringFree (label_string);
2120 /* Adjust the colors of the icon */
2121 SetToNormalColors (file_type, form, file_mgr_rec->main, 0);
2123 /* The data sent to the Text, Ok and Cancel callbacks */
2126 (DialogCallbackStruct *) XtMalloc (sizeof (DialogCallbackStruct));
2128 if(w == *create_directoryBtn)
2130 file_mgr_rec->create_directoryBtn_child = form;
2131 call_struct->original_physical_type = DtDIRECTORY;
2133 if(w == *create_dataBtn)
2135 file_mgr_rec->create_dataBtn_child = form;
2136 call_struct->original_physical_type = DtDATA;
2139 call_struct->dialog_widget = form;
2140 call_struct->menu_widget = w;
2141 call_struct->dir_text_widget = NULL;
2142 call_struct->file_text_widget = new_text;
2143 call_struct->file_type_widget = file_type;
2144 call_struct->file_mgr_rec = file_mgr_rec;
2145 call_struct->host_name = XtNewString (file_mgr_data->host);
2146 call_struct->directory_name = XtNewString(file_mgr_data->current_directory);
2147 call_struct->file_name = NULL;
2148 call_struct->original_logical_type = NULL;
2149 call_struct->previous_file_type = NULL;
2150 call_struct->file_mgr_data = file_mgr_data;
2153 /* Create a separator between the buttons */
2156 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
2157 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
2158 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2159 XtSetArg (args[n], XmNtopWidget, file_type_box); n++;
2160 XtSetArg (args[n], XmNtopOffset, 5); n++;
2161 separator = XmCreateSeparatorGadget (form, "separator", args, n);
2162 XtManageChild (separator);
2166 /* Create the ok, apply, cancel, and help buttons */
2169 XtSetArg (args[n], XmNlabelString, okXmString); n++;
2170 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2171 XtSetArg (args[n], XmNleftPosition, 1); n++;
2172 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2173 XtSetArg (args[n], XmNrightPosition, 19); n++;
2174 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2175 XtSetArg (args[n], XmNtopWidget, separator); n++;
2176 XtSetArg (args[n], XmNtopOffset, 5); n++;
2177 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2178 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2179 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2180 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2181 XtSetArg (args[n], XmNshowAsDefault, True); n++;
2182 XtSetArg (args[n], XmNuserData, flag); n++;
2183 ok = XmCreatePushButtonGadget (form, "ok", args, n);
2186 XtAddCallback (ok, XmNactivateCallback, MakeFileOk, (XtPointer) call_struct);
2188 /* Set the ok button to the default for the bulletin board. */
2189 /* This causes the return key from the text widget to be */
2190 /* properly processed. */
2192 XtSetArg (args[0], XmNdefaultButton, ok);
2193 XtSetValues (form, args, 1);
2196 XtSetArg (args[n], XmNlabelString, applyXmString); n++;
2197 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2198 XtSetArg (args[n], XmNleftPosition, 20); n++;
2199 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2200 XtSetArg (args[n], XmNrightPosition, 39); n++;
2201 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2202 XtSetArg (args[n], XmNtopWidget, separator); n++;
2203 XtSetArg (args[n], XmNtopOffset, 5); n++;
2204 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2205 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2206 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2207 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2208 apply = XmCreatePushButtonGadget (form, "apply", args, n);
2209 XtManageChild (apply);
2211 XtAddCallback (apply, XmNactivateCallback, MakeFileApply, (XtPointer) call_struct);
2214 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
2215 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2216 XtSetArg (args[n], XmNleftPosition, 40); n++;
2217 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2218 XtSetArg (args[n], XmNrightPosition, 59); n++;
2219 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2220 XtSetArg (args[n], XmNtopWidget, separator); n++;
2221 XtSetArg (args[n], XmNtopOffset, 5); n++;
2222 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2223 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2224 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2225 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2226 XtSetArg (args[n], XmNuserData, flag); n++;
2227 cancel = XmCreatePushButtonGadget (form, "cancel", args, n);
2228 XtManageChild (cancel);
2230 XtAddCallback (cancel, XmNactivateCallback, DialogCancel,
2231 (XtPointer) call_struct);
2234 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(10, 36, "Show Icon")));
2237 XtSetArg (args[n], XmNlabelString, label_string); n++;
2238 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2239 XtSetArg (args[n], XmNleftPosition, 60); n++;
2240 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2241 XtSetArg (args[n], XmNrightPosition, 79); n++;
2242 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2243 XtSetArg (args[n], XmNtopWidget, separator); n++;
2244 XtSetArg (args[n], XmNtopOffset, 5); n++;
2245 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2246 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2247 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2248 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2249 preview = XmCreatePushButtonGadget (form, "show_file_type", args, n);
2250 XtManageChild (preview);
2252 XmStringFree (label_string);
2253 XtAddCallback (preview, XmNactivateCallback, FileTypePreviewCB,
2254 (XtPointer) call_struct);
2256 FileTypePreviewCB (preview, (XtPointer) call_struct, NULL);
2259 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
2260 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
2261 XtSetArg (args[n], XmNleftPosition, 80); n++;
2262 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
2263 XtSetArg (args[n], XmNrightPosition, 99); n++;
2264 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
2265 XtSetArg (args[n], XmNtopWidget, separator); n++;
2266 XtSetArg (args[n], XmNtopOffset, 5); n++;
2267 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
2268 XtSetArg (args[n], XmNbottomOffset, 5); n++;
2269 XtSetArg (args[n], XmNmarginWidth, 4); n++;
2270 XtSetArg (args[n], XmNmarginHeight, 4); n++;
2271 help = XmCreatePushButtonGadget (form, "help", args, n);
2272 XtManageChild (help);
2274 if (w == *create_directoryBtn)
2276 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2277 HELP_CREATE_DIR_DIALOG_STR);
2278 XtAddCallback(new_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2279 HELP_CREATE_DIR_DIALOG_STR);
2280 XtAddCallback(new_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2281 HELP_CREATE_DIR_DIALOG_STR);
2282 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
2283 HELP_CREATE_DIR_DIALOG_STR);
2284 XtAddCallback(file_type_box,XmNhelpCallback,(XtCallbackProc)HelpRequestCB,
2285 HELP_CREATE_DIR_DIALOG_STR);
2286 XtAddCallback(file_type, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2287 HELP_CREATE_DIR_DIALOG_STR);
2288 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2289 HELP_CREATE_DIR_DIALOG_STR);
2290 XtAddCallback(apply, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2291 HELP_CREATE_DIR_DIALOG_STR);
2292 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2293 HELP_CREATE_DIR_DIALOG_STR);
2294 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2295 HELP_CREATE_DIR_DIALOG_STR);
2296 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2297 HELP_CREATE_DIR_DIALOG_STR);
2301 XtAddCallback(form, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2302 HELP_CREATE_FILE_DIALOG_STR);
2303 XtAddCallback(new_name, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2304 HELP_CREATE_FILE_DIALOG_STR);
2305 XtAddCallback(new_text, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2306 HELP_CREATE_FILE_DIALOG_STR);
2307 XtAddCallback(help, XmNactivateCallback, (XtCallbackProc)HelpRequestCB,
2308 HELP_CREATE_FILE_DIALOG_STR);
2309 XtAddCallback(file_type_box,XmNhelpCallback,(XtCallbackProc)HelpRequestCB,
2310 HELP_CREATE_FILE_DIALOG_STR);
2311 XtAddCallback(file_type, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2312 HELP_CREATE_FILE_DIALOG_STR);
2313 XtAddCallback(ok, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2314 HELP_CREATE_FILE_DIALOG_STR);
2315 XtAddCallback(apply, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2316 HELP_CREATE_FILE_DIALOG_STR);
2317 XtAddCallback(cancel, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2318 HELP_CREATE_FILE_DIALOG_STR);
2319 XtAddCallback(preview, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2320 HELP_CREATE_FILE_DIALOG_STR);
2321 XtAddCallback(help, XmNhelpCallback, (XtCallbackProc)HelpRequestCB,
2322 HELP_CREATE_FILE_DIALOG_STR);
2326 XtSetArg (args[0], XmNcancelButton, cancel);
2327 XtSetValues (form, args, 1);
2329 XtAddCallback (shell, XmNpopupCallback, (XtCallbackProc)_DtmapCB,
2330 (XtPointer) XtParent(shell));
2332 delete_window_atom = XmInternAtom (XtDisplay(shell), "WM_DELETE_WINDOW", True);
2333 XmRemoveWMProtocols( shell, &delete_window_atom, 1 );
2334 XmAddWMProtocolCallback( shell, delete_window_atom, DialogCancel,
2335 (XtPointer) call_struct );
2337 call_struct->Ok = ok;
2338 call_struct->Cancel = cancel;
2340 XtManageChild (form);
2342 /* Force the focus to the text field */
2343 XmProcessTraversal(new_text, XmTRAVERSE_CURRENT);
2348 /************************************************************************
2351 * Get the new file name and create the file.
2353 ************************************************************************/
2358 XtPointer client_data,
2359 XtPointer call_data )
2361 DialogCallbackStruct * call_struct = (DialogCallbackStruct *) client_data;
2367 int dirNameLength = strlen (call_struct->directory_name);
2368 int maxFileNameLength = pathconf (call_struct->directory_name, _PC_NAME_MAX);
2369 unsigned int btnMask;
2370 MakeFileDoneData *data;
2372 if(RecheckFlag(call_struct->dialog_widget,w))
2374 else if(RecheckFlag(NULL,call_struct->Cancel))
2377 /* see if this is a create file or directory */
2378 if (call_struct->menu_widget == *create_directoryBtn)
2380 call_struct->file_mgr_rec->create_directoryBtn_child = NULL;
2382 btnMask = CREATE_DIR;
2386 call_struct->file_mgr_rec->create_dataBtn_child = NULL;
2388 btnMask = CREATE_FILE;
2391 /* get the new name */
2392 new_name = XmTextFieldGetString (call_struct->file_text_widget);
2393 new_name = (char *) _DtStripSpaces (new_name);
2396 if (new_name[0] == '~')
2397 new_name = _DtChangeTildeToHome (new_name);
2399 length = strlen (new_name);
2403 msg = XtNewString(GETMESSAGE(10, 22,
2404 "Cannot create a file or folder with a blank name."));
2406 /* Ensure the new name has length less than or equal to the maximum
2407 length that the system allows.
2408 If maxFileNameLength == -1 the file system is not supporting POSIX, use MAXNAMLEN
2410 else if( maxFileNameLength < -1 || ( maxFileNameLength == -1 && ( length > MAXNAMLEN || length + dirNameLength > MAX_PATH ) ) || ( maxFileNameLength > 0 && length > maxFileNameLength ) )
2412 if (type == DtDIRECTORY)
2414 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2415 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2419 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2420 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2423 #ifdef _CHECK_FOR_SPACES
2424 else if (DtStrchr (new_name, ' ') != NULL ||
2425 DtStrchr (new_name, '\t') != NULL)
2427 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
2433 if (type == DtDIRECTORY)
2434 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2436 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2437 _DtMessage (XtParent (w), title, msg, NULL, HelpRequestCB);
2441 ResetFlag(call_struct->dialog_widget,w);
2442 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
2446 /* set up data for MakeFileDone callback */
2447 data = (MakeFileDoneData *)XtMalloc(sizeof(MakeFileDoneData));
2449 data->call_struct = call_struct;
2451 data->btnMask = btnMask;
2452 data->new_name = new_name;
2455 * Create the file/directory.
2456 * This operation is performed in a background process; when the
2457 * background process finishes, the MakeFileDone callback will be
2458 * called with a return code indicating success or failure.
2461 MakeFile (w, call_struct->host_name, call_struct->directory_name,
2462 new_name, type, MakeFileDone, (XtPointer)data);
2466 /************************************************************************
2469 * This routine is called when the file creation is finished.
2471 ************************************************************************/
2475 XtPointer client_data,
2479 MakeFileDoneData *data = (MakeFileDoneData *)client_data;
2480 DialogCallbackStruct *call_struct = data->call_struct;
2481 FileMgrRec *file_mgr_rec = (FileMgrRec *) call_struct->file_mgr_rec;
2485 FileViewData *file_view_data;
2486 FileMgrData *file_mgr_data;
2487 DialogData *dialog_data;
2488 DirectorySet *directory_set;
2492 * If the file/directory create was successful, unmanage the dialog
2493 * and free up any allocated data space. Otherwise, just return
2494 * to allow the user to try a different name or cancel the dialog.
2500 if (data->type == DtDIRECTORY)
2502 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2503 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2507 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2508 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2510 _DtMessage (XtParent(data->w), title, msg, NULL, HelpRequestCB);
2511 ResetFlag(call_struct->dialog_widget,call_struct->Ok);
2512 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
2518 /* some other error */
2520 msg = XtNewString(GetSharedMessage(CANT_OVERWRITE_ERROR));
2522 msg = XtNewString(GetSharedMessage(CANT_CREATE_ERROR));
2523 FileOperationError (XtParent(data->w), msg, to);
2524 ResetFlag(call_struct->dialog_widget,call_struct->Ok);
2525 ResetFlag(call_struct->dialog_widget,call_struct->Cancel);
2530 /* create was successful: close the dialog */
2531 XtUnmanageChild (call_struct->dialog_widget);
2532 XtDestroyWidget (XtParent (call_struct->dialog_widget));
2533 file_mgr_rec->menuStates |= data->btnMask;
2538 /* free the call data */
2539 XtFree(call_struct->host_name);
2540 XtFree(call_struct->directory_name);
2541 if (call_struct->previous_file_type)
2542 XtFree((char *) call_struct->previous_file_type);
2543 XtFree((char *) call_struct);
2547 * The code below wants to make the file that was just created
2548 * be selected and scroll the view so the new file is visible.
2549 * But: since we made directory updates asynchronous, this code
2550 * won't work anymore, because at this point, we won't yet be able
2551 * to find the new file in the cached directory.
2553 * Possible solutions:
2554 * Somewhere (e.g., in the file_mgr_data structure) log our
2555 * intention to select the new file; when it finally shows up,
2558 dialog_data = _DtGetInstanceData (file_mgr_rec);
2559 file_mgr_data = (FileMgrData *) dialog_data->data;
2560 for (i = 0; i < file_mgr_data->directory_count; i++)
2562 directory_set = (DirectorySet *)file_mgr_data->directory_set[i];
2563 if (strcmp(directory_set->name, call_struct->directory_name) == 0)
2567 file_view_data = NULL;
2568 for (i = 0; i < directory_set->file_count; i++)
2570 if (strcmp(directory_set->order_list[i]->file_data->file_name,
2571 data->new_name) == 0)
2573 file_view_data = directory_set->order_list[i];
2578 if (file_view_data != NULL)
2580 if (file_view_data->widget != NULL)
2582 DeselectAllFiles(file_mgr_data);
2583 SelectFile (file_mgr_data, file_view_data);
2584 PositionFileView(file_view_data, file_mgr_data);
2585 ActivateSingleSelect ((FileMgrRec *) file_mgr_data->file_mgr_rec,
2586 file_mgr_data->selection_list[0]->file_data->logical_type);
2592 XtFree(data->new_name);
2593 XtFree((char *)data);
2598 /************************************************************************
2601 * Get the new file name and create the file.
2603 ************************************************************************/
2608 XtPointer client_data,
2609 XtPointer call_data )
2611 DialogCallbackStruct * call_struct = (DialogCallbackStruct *) client_data;
2617 int dirNameLength = strlen (call_struct->directory_name);
2618 int maxFileNameLength = pathconf (call_struct->directory_name, _PC_NAME_MAX);
2619 unsigned int btnMask;
2620 MakeFileDoneData *data;
2622 /* see if this is a create file or directory */
2623 if (call_struct->menu_widget == *create_directoryBtn)
2625 call_struct->file_mgr_rec->create_directoryBtn_child = NULL;
2627 btnMask = CREATE_DIR;
2631 call_struct->file_mgr_rec->create_dataBtn_child = NULL;
2633 btnMask = CREATE_FILE;
2636 /* get the new name */
2637 new_name = XmTextFieldGetString (call_struct->file_text_widget);
2638 new_name = (char *) _DtStripSpaces (new_name);
2641 if (new_name[0] == '~')
2642 new_name = _DtChangeTildeToHome (new_name);
2644 length = strlen (new_name);
2648 msg = XtNewString(GETMESSAGE(10, 22,
2649 "Cannot create a file or folder with a blank name."));
2651 /* Ensure the new name has length less than or equal to the maximum
2652 length that the system allows.
2653 If maxFileNameLength == -1 the file system is not supporting POSIX, use MAXNAMLEN
2655 else if( maxFileNameLength < -1 || ( maxFileNameLength == -1 && ( length > MAXNAMLEN || length + dirNameLength > MAX_PATH ) ) || ( maxFileNameLength > 0 && length > maxFileNameLength ) )
2657 if (type == DtDIRECTORY)
2659 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2660 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2664 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2665 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2668 #ifdef _CHECK_FOR_SPACES
2669 else if (DtStrchr (new_name, ' ') != NULL ||
2670 DtStrchr (new_name, '\t') != NULL)
2672 msg = XtNewString(GetSharedMessage(NO_SPACES_ALLOWED_ERROR));
2678 if (type == DtDIRECTORY)
2679 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2681 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2682 _DtMessage (XtParent (w), title, msg, NULL, HelpRequestCB);
2689 /* set up data for MakeFileDone callback */
2690 data = (MakeFileDoneData *)XtMalloc(sizeof(MakeFileDoneData));
2692 data->call_struct = call_struct;
2694 data->btnMask = btnMask;
2695 data->new_name = new_name;
2698 * Create the file/directory.
2699 * This operation is performed in a background process; when the
2700 * background process finishes, the MakeFileDone callback will be
2701 * called with a return code indicating success or failure.
2704 MakeFile (w, call_struct->host_name, call_struct->directory_name,
2705 new_name, type, ApplyFileDone, (XtPointer)data);
2706 FileTypePreviewCB (w, client_data, (XtPointer) True);
2710 /************************************************************************
2713 * This routine is called when the file creation is finished.
2715 ************************************************************************/
2719 XtPointer client_data,
2723 MakeFileDoneData *data = (MakeFileDoneData *)client_data;
2724 DialogCallbackStruct *call_struct = data->call_struct;
2725 FileMgrRec *file_mgr_rec = (FileMgrRec *) call_struct->file_mgr_rec;
2729 FileViewData *file_view_data;
2730 FileMgrData *file_mgr_data;
2731 DialogData *dialog_data;
2732 DirectorySet *directory_set;
2736 * If the file/directory create was successful, unmanage the dialog
2737 * and free up any allocated data space. Otherwise, just return
2738 * to allow the user to try a different name or cancel the dialog.
2744 if (data->type == DtDIRECTORY)
2746 title = XtNewString(GETMESSAGE(10, 20, "Create Folder Error"));
2747 msg = XtNewString(GETMESSAGE(10, 23, "Invalid folder name."));
2751 title = XtNewString(GETMESSAGE(10, 21, "Create File Error"));
2752 msg = XtNewString(GETMESSAGE(10, 24, "Invalid file name."));
2754 _DtMessage (XtParent(data->w), title, msg, NULL, HelpRequestCB);
2760 /* some other error */
2762 msg = XtNewString(GetSharedMessage(CANT_OVERWRITE_ERROR));
2764 msg = XtNewString(GetSharedMessage(CANT_CREATE_ERROR));
2765 FileOperationError (XtParent(data->w), msg, to);
2772 /************************************************************************
2775 * Unmanage and destroy the dialog
2777 ************************************************************************/
2782 XtPointer client_data,
2783 XtPointer call_data )
2785 DialogCallbackStruct * call_struct = (DialogCallbackStruct *) client_data;
2786 DialogData *dialog_data;
2787 FileMgrData *file_mgr_data;
2788 unsigned int btnMask = 0;
2790 if(RecheckFlag(NULL,w))
2793 dialog_data = _DtGetInstanceData ((XtPointer)call_struct->file_mgr_rec);
2794 file_mgr_data = (FileMgrData *) dialog_data->data;
2796 XtUnmanageChild (call_struct->dialog_widget);
2797 XtDestroyWidget (XtParent (call_struct->dialog_widget));
2799 if (file_mgr_data->selected_file_count == 1 )
2801 /* If the selection count is 1 then
2802 resensitize the appropriate menu button.
2803 Otherwise, ignore it.
2805 if (call_struct->menu_widget == *renameBtn)
2807 else if (call_struct->menu_widget == *moveBtn)
2809 else if (call_struct->menu_widget == *duplicateBtn)
2810 btnMask = DUPLICATE;
2811 else if (call_struct->menu_widget == *linkBtn)
2815 if (call_struct->menu_widget == *create_directoryBtn)
2817 btnMask = CREATE_DIR;
2818 call_struct->file_mgr_rec->create_directoryBtn_child = NULL;
2820 else if (call_struct->menu_widget == *create_dataBtn)
2822 btnMask = CREATE_FILE;
2823 call_struct->file_mgr_rec->create_dataBtn_child = NULL;
2826 call_struct->file_mgr_rec->menuStates |= btnMask;
2830 if (call_struct->host_name != NULL)
2831 XtFree ((char *) call_struct->host_name);
2833 if (call_struct->directory_name != NULL)
2834 XtFree ((char *) call_struct->directory_name);
2836 if (call_struct->file_name != NULL)
2837 XtFree ((char *) call_struct->file_name);
2839 if (call_struct->previous_file_type)
2840 XtFree ((char *) call_struct->previous_file_type);
2842 XtFree ((char *) call_struct);
2853 XtSetArg (args[0], XmNuserData, &flag);
2854 XtGetValues(w,args,1);
2855 if(flag == FLAG_SET)
2857 else if(flag != FLAG_RESET)
2860 XtSetArg (args[0], XmNuserData, flag);
2861 XtSetValues(w,args,1);
2863 _DtTurnOnHourGlass(parent);
2874 XtSetArg (args[0], XmNuserData, &flag);
2875 XtGetValues(w,args,1);
2876 if(flag != FLAG_SET)
2879 XtSetArg (args[0], XmNuserData, flag);
2880 XtSetValues(w,args,1);
2882 _DtTurnOffHourGlass(parent);