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: Filter.c /main/8 1996/10/30 11:10:48 drk $ */
24 /************************************<+>*************************************
25 ****************************************************************************
29 * COMPONENT_NAME: Desktop File Manager (dtfile)
31 * Description: Source file for the file filter dialog.
33 * FUNCTIONS: ApplyCallback
51 * UpdateFilterAfterDBReread
55 * (c) Copyright 1993, 1994, 1995 Hewlett-Packard Company
56 * (c) Copyright 1993, 1994, 1995 International Business Machines Corp.
57 * (c) Copyright 1993, 1994, 1995 Sun Microsystems, Inc.
58 * (c) Copyright 1993, 1994, 1995 Novell, Inc.
60 ****************************************************************************
61 ************************************<+>*************************************/
70 #include <Xm/DialogS.h>
71 #include <Xm/DrawingA.h>
73 #include <Xm/LabelG.h>
75 #include <Xm/MessageB.h>
76 #include <Xm/PushBG.h>
77 #include <Xm/RowColumn.h>
79 #include <Xm/ToggleBG.h>
80 #include <Xm/ScrollBar.h>
81 #include <Xm/ScrolledW.h>
82 #include <Xm/SeparatoG.h>
83 #include <Xm/VendorSEP.h>
84 #include <Xm/MwmUtil.h>
85 #include <Xm/Protocols.h>
87 #include <Dt/TitleBox.h>
90 #include <Dt/IconFile.h>
92 #include <X11/ShellP.h>
93 #include <X11/Shell.h>
94 #include <X11/Xatom.h>
97 #include <Dt/DtNlUtils.h>
100 #include "SharedProcs.h"
110 static char * FILE_FILTER = "FileFilter";
113 static DialogResource resources[] =
115 { "matchFilter", XmRBoolean, sizeof(Boolean),
116 XtOffset(FilterDataPtr, match_flag),
117 (XtPointer) True, _DtBooleanToString },
119 { "name", XmRString, sizeof(String),
120 XtOffset(FilterDataPtr, filter),
121 (XtPointer) "", _DtStringToString },
123 { "showHidden", XmRBoolean, sizeof(Boolean),
124 XtOffset(FilterDataPtr, show_hidden),
125 (XtPointer) False, _DtBooleanToString },
127 { "filetypesFilteredCount", XmRInt, sizeof(int),
128 XtOffset(FilterDataPtr, filetypesFilteredCount),
129 (XtPointer) 3, _DtIntToString },
131 { "filetypesFiltered", XmRString, sizeof(String),
132 XtOffset(FilterDataPtr, filetypesFiltered),
133 (XtPointer) DEFAULT_FILTER, _DtStringToString },
137 #define FM_TYPE_LABEL "TYPE_LABEL"
140 /******** Static Function Declarations ********/
145 Widget *return_widget,
147 static void InstallChange(
148 FilterRec *filter_rec,
149 XtCallbackProc callback,
150 XtPointer client_data) ;
151 static void InstallClose(
152 FilterRec *filter_rec,
153 XtCallbackProc callback,
154 XtPointer client_data) ;
156 FilterRec *filter_rec) ;
157 static XtPointer GetValues(
158 FilterRec *filter_rec) ;
159 static XtPointer GetDefaultValues( void ) ;
160 static XtPointer GetResourceValues(
161 XrmDatabase data_base,
163 static void SetValues(
164 FilterRec *filter_rec,
165 FilterData *filter_data) ;
166 static void WriteResourceValues(
170 static void FreeValues(
171 FilterData *filter_data) ;
172 static void DefaultCallback(
174 XtPointer client_data,
175 XtPointer call_data) ;
176 static void CancelCallback(
178 XtPointer client_data,
179 XtPointer call_data) ;
180 static void OkCallback(
182 XtPointer client_data,
183 XtPointer call_data) ;
184 static void ApplyCallback(
186 XtPointer client_data,
187 XtPointer call_data) ;
188 static Boolean GetFilterValues(
189 FilterRec *filter_rec,
190 FilterData *filter_data) ;
191 static void filterTypeChanged(
193 XtPointer client_data,
194 XtPointer call_data ) ;
195 static int FileTypeAscending(
198 static void SelectAllFilter(
202 Cardinal *num_params );
203 static void DeselectAllFilter(
207 Cardinal *num_params );
208 /******** End Static Function Declarations ********/
213 static DialogClass filterClassRec =
218 (DialogInstallChangeProc) InstallChange,
219 (DialogInstallCloseProc) InstallClose,
220 (DialogDestroyProc) Destroy,
221 (DialogGetValuesProc) GetValues,
224 (DialogSetValuesProc) SetValues,
226 (DialogFreeValuesProc) FreeValues,
227 (DialogMapWindowProc) _DtGenericMapWindow,
231 DialogClass * filterClass = (DialogClass *) &filterClassRec;
233 static XtActionsRec FilterAction[] = {
234 { "SelectAllFilter", SelectAllFilter },
235 { "DeselectAllFilter", DeselectAllFilter }
238 static char FilterTranslationString[] = "\
239 Ctrl<Key>slash:SelectAllFilter(@)\n\
240 Ctrl<Key>backslash:DeselectAllFilter(@)";
242 /************************************************************************
246 ************************************************************************/
252 Widget *return_widget,
255 FilterRec * filter_rec;
256 Widget shell, form, fileNameFilter;
257 Widget tog_frame, tog_form, fileTypeScrollWin, file_window;
258 Widget labelPt2, hidden, separator, sel_form;
259 Widget ok, apply, reset, close, help;
260 Widget selectAll, unselectAll;
261 Widget hiddenPulldown;
262 XmString label_string;
263 XtTranslations filterTranslationTable;
268 char * tmpStr, * resolvedFilterTranslationString;
270 /* Allocate the file filter dialog instance record. */
271 filter_rec = (FilterRec *) XtMalloc (sizeof (FilterRec));
273 /* Create the shell and form used for the dialog. */
275 XtSetArg (args[n], XmNmwmFunctions, MWM_FUNC_MOVE |
276 MWM_FUNC_CLOSE); ++n;
277 XtSetArg (args[n], XmNmwmDecorations, MWM_DECOR_BORDER |
278 MWM_DECOR_TITLE); ++n;
279 XtSetArg (args[n], XmNallowShellResize, True); ++n;
280 shell = XmCreateDialogShell (parent, "filter_files", args, n);
282 /* Set the useAsyncGeo on the shell */
283 XtSetArg (args[0], XmNuseAsyncGeometry, True);
284 XtSetValues (XtParent(shell), args, 1);
287 XtSetArg (args[n], XmNmarginWidth, 1); n++;
288 XtSetArg (args[n], XmNmarginHeight, 1); n++;
289 XtSetArg (args[n], XmNshadowThickness, 1); n++;
290 XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT); n++;
291 XtSetArg (args[n], XmNautoUnmanage, False); n++;
292 form = XmCreateForm (shell, "form", args, n);
293 XtAddCallback(form, XmNhelpCallback, HelpRequestCB,
294 HELP_FILTER_DIALOG_STR);
296 XtAppAddActions( XtWidgetToApplicationContext(form),
298 XtNumber(FilterAction));
299 resolvedFilterTranslationString = ResolveTranslationString(
300 FilterTranslationString,
301 (char *)filter_rec );
302 filterTranslationTable = XtParseTranslationTable(
303 resolvedFilterTranslationString );
304 XtFree( resolvedFilterTranslationString );
305 resolvedFilterTranslationString = NULL;
306 XtOverrideTranslations(form, filterTranslationTable);
308 hiddenPulldown = XmCreatePulldownMenu(form, "hiddenPD", args, 0);
310 label_string = XmStringCreateLocalized ((GETMESSAGE(13,27, "Shown")));
311 XtSetArg(args[0], XmNmarginHeight, 1);
312 XtSetArg(args[1], XmNmarginWidth, 1);
313 XtSetArg(args[2], XmNlabelString, label_string);
314 XtSetArg(args[3], XmNuserData, SHOWN);
315 filter_rec->hidArray[SHOWN] =
316 XmCreatePushButtonGadget(hiddenPulldown, "shown", args, 4);
317 XmStringFree(label_string);
318 XtAddCallback(filter_rec->hidArray[SHOWN], XmNactivateCallback,
319 filterTypeChanged, (XtPointer) filter_rec);
321 label_string = XmStringCreateLocalized ((GETMESSAGE(13,28, "Hidden")));
322 XtSetArg(args[2], XmNlabelString, label_string);
323 XtSetArg(args[3], XmNuserData, HIDDEN);
324 filter_rec->hidArray[HIDDEN] =
325 XmCreatePushButtonGadget(hiddenPulldown, "hidden", args, 4);
326 XmStringFree(label_string);
327 XtAddCallback(filter_rec->hidArray[HIDDEN], XmNactivateCallback,
328 filterTypeChanged, (XtPointer) filter_rec);
329 XtManageChildren(filter_rec->hidArray, 2);
331 /* create the Option Menu and attach it to the Pulldown MenuPane */
332 label_string = XmStringCreateLocalized ((GETMESSAGE(13,31,
333 "Select Datatypes to be:")));
335 XtSetArg (args[n], XmNlabelString, label_string); n++;
336 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
337 XtSetArg (args[n], XmNleftOffset, 5); n++;
338 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
339 XtSetArg (args[n], XmNtopOffset, 10); n++;
340 XtSetArg (args[n], XmNsubMenuId, hiddenPulldown); n++;
341 XtSetArg (args[n], XmNmenuHistory, filter_rec->hidArray[HIDDEN]); n++;
342 hidden = XmCreateOptionMenu(form, "file_name_label", args, n);
343 XtManageChild (hidden);
344 XmStringFree (label_string);
345 XtAddCallback(hidden, XmNhelpCallback, HelpRequestCB,
346 HELP_FILTER_DIALOG_STR);
348 /* Create the Scrolled Window For the filetype display area */
349 /* and set the scrollbars colors correctly */
351 XtSetArg (args[n], XmNspacing, 2); n++;
352 XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++;
353 XtSetArg (args[n], XmNscrollBarDisplayPolicy, XmAS_NEEDED); n++;
354 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
355 XtSetArg (args[n], XmNleftOffset, 10); n++;
356 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
357 XtSetArg (args[n], XmNrightOffset, 10); n++;
358 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
359 XtSetArg (args[n], XmNtopWidget, hidden); n++;
360 XtSetArg (args[n], XmNtopOffset, 5); n++;
361 fileTypeScrollWin = XmCreateScrolledWindow(form, "filetypeSWin", args, n);
362 XtManageChild (fileTypeScrollWin);
363 XtAddCallback(fileTypeScrollWin, XmNhelpCallback, HelpRequestCB,
364 HELP_FILTER_DIALOG_STR);
366 /* Create a drawing area as a child of the scrolled window */
369 XtSetArg (args[n], XmNmarginWidth, 4); n++;
370 XtSetArg (args[n], XmNmarginHeight, 4); n++;
371 XtSetArg (args[n], XmNresizePolicy, XmRESIZE_ANY); n++;
372 file_window = XmCreateDrawingArea (fileTypeScrollWin, "file_window",
374 XtManageChild (file_window);
377 XtSetArg (args[n], XmNmarginWidth, 1); n++;
378 XtSetArg (args[n], XmNmarginHeight, 1); n++;
379 XtSetArg (args[n], XmNshadowThickness, 0); n++;
380 XtSetArg (args[n], XmNautoUnmanage, False); n++;
381 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
382 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
383 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
384 XtSetArg (args[n], XmNtopWidget, fileTypeScrollWin); n++;
385 XtSetArg (args[n], XmNtopOffset, 10); n++;
386 sel_form = XmCreateForm (form, "sel_form", args, n);
387 XtManageChild(sel_form);
389 label_string = XmStringCreateLocalized ((GETMESSAGE(13,21, "Select All")));
391 XtSetArg (args[n], XmNlabelString, label_string); n++;
392 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
393 XtSetArg (args[n], XmNleftPosition, 15); n++;
394 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
395 XtSetArg (args[n], XmNtopOffset, 5); n++;
396 XtSetArg (args[n], XmNmarginHeight, 4); n++;
397 XtSetArg (args[n], XmNmarginWidth, 10); n++;
398 selectAll = XmCreatePushButtonGadget (sel_form, "selectAll", args, n);
399 XtManageChild (selectAll);
400 XtAddCallback (selectAll, XmNactivateCallback, SelectAllFileTypes,
401 (XtPointer) filter_rec);
402 XtAddCallback(selectAll, XmNhelpCallback, HelpRequestCB,
403 HELP_FILTER_DIALOG_STR);
404 XmStringFree (label_string);
405 XtSetArg (args[0], XmNdefaultButton, selectAll);
406 XtSetValues (sel_form, args, 1);
408 label_string = XmStringCreateLocalized ((GETMESSAGE(13,22, "Deselect All")));
410 XtSetArg (args[n], XmNlabelString, label_string); n++;
411 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
412 XtSetArg (args[n], XmNleftPosition, 55); n++;
413 XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
414 XtSetArg (args[n], XmNtopOffset, 5); n++;
415 XtSetArg (args[n], XmNmarginHeight, 4); n++;
416 XtSetArg (args[n], XmNmarginWidth, 10); n++;
417 unselectAll = XmCreatePushButtonGadget (sel_form, "deselectAll", args, n);
418 XtManageChild (unselectAll);
419 XtAddCallback (unselectAll, XmNactivateCallback, UnselectAllFileTypes,
420 (XtPointer) filter_rec);
421 XtAddCallback(unselectAll, XmNhelpCallback, HelpRequestCB,
422 HELP_FILTER_DIALOG_STR);
423 XmStringFree (label_string);
425 /* Create the file name filter label and text fields. */
426 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(13,26,
427 "Also hide (Optional): ")));
429 XtSetArg (args[n], XmNlabelString, label_string); n++;
430 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
431 XtSetArg (args[n], XmNleftOffset, 5); n++;
432 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
433 XtSetArg (args[n], XmNtopWidget, sel_form); n++;
434 XtSetArg (args[n], XmNtopOffset, 18); n++;
435 XtSetArg (args[n], XmNtraversalOn, False); n++;
436 labelPt2 = XmCreateLabelGadget (form, "file_name_label", args, n);
437 XtManageChild (labelPt2);
438 XmStringFree (label_string);
439 XtAddCallback(labelPt2, XmNhelpCallback, HelpRequestCB,
440 HELP_FILTER_DIALOG_STR);
444 XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
445 XtSetArg (args[n], XmNleftWidget, labelPt2); n++;
446 XtSetArg (args[n], XmNleftOffset, 0); n++;
447 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
448 XtSetArg (args[n], XmNtopWidget, sel_form); n++;
449 XtSetArg (args[n], XmNtopOffset, 10); n++;
450 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
451 XtSetArg (args[n], XmNrightOffset, 10); n++;
452 fileNameFilter = XmCreateTextField (form, "file_name_text", args, n);
453 XtManageChild (fileNameFilter);
454 XtAddCallback(fileNameFilter, XmNhelpCallback, HelpRequestCB,
455 HELP_FILTER_DIALOG_STR);
457 /* Create a separator between the buttons */
460 XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
461 XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
462 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
463 XtSetArg (args[n], XmNtopWidget, fileNameFilter); n++;
464 XtSetArg (args[n], XmNtopOffset, 10); n++;
465 separator = XmCreateSeparatorGadget (form, "separator", args, n);
466 XtManageChild (separator);
469 /* Create the ok, apply, reset, cancel and help buttons */
472 XtSetArg (args[n], XmNlabelString, okXmString); n++;
473 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
474 XtSetArg (args[n], XmNleftPosition, 1); n++;
475 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
476 XtSetArg (args[n], XmNrightPosition, 19); n++;
477 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
478 XtSetArg (args[n], XmNtopWidget, separator); n++;
479 XtSetArg (args[n], XmNtopOffset, 5); n++;
480 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
481 XtSetArg (args[n], XmNbottomOffset, 5); n++;
482 XtSetArg (args[n], XmNmarginWidth, 4); n++;
483 XtSetArg (args[n], XmNmarginHeight, 4); n++;
484 XtSetArg (args[n], XmNmultiClick, XmMULTICLICK_DISCARD); n++;
485 XtSetArg (args[n], XmNuserData, flag); n++;
486 ok = XmCreatePushButtonGadget (form, "ok", args, n);
488 XtAddCallback(ok, XmNhelpCallback, HelpRequestCB,
489 HELP_FILTER_DIALOG_STR);
492 XtSetArg (args[n], XmNlabelString, applyXmString); n++;
493 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
494 XtSetArg (args[n], XmNleftPosition, 21); n++;
495 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
496 XtSetArg (args[n], XmNrightPosition, 39); n++;
497 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
498 XtSetArg (args[n], XmNtopWidget, separator); n++;
499 XtSetArg (args[n], XmNtopOffset, 5); n++;
500 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
501 XtSetArg (args[n], XmNbottomOffset, 5); n++;
502 XtSetArg (args[n], XmNmarginWidth, 4); n++;
503 XtSetArg (args[n], XmNmarginHeight, 4); n++;
504 apply = XmCreatePushButtonGadget (form, "apply", args, n);
505 XtManageChild (apply);
506 XtAddCallback(apply, XmNhelpCallback, HelpRequestCB,
507 HELP_FILTER_DIALOG_STR);
509 XtSetArg (args[0], XmNdefaultButton, apply);
510 XtSetValues (form, args, 1);
512 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(13, 11, "Defaults")));
514 XtSetArg (args[n], XmNlabelString, label_string); n++;
515 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
516 XtSetArg (args[n], XmNleftPosition, 41); n++;
517 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
518 XtSetArg (args[n], XmNrightPosition, 59); n++;
519 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
520 XtSetArg (args[n], XmNtopWidget, separator); n++;
521 XtSetArg (args[n], XmNtopOffset, 5); n++;
522 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
523 XtSetArg (args[n], XmNbottomOffset, 5); n++;
524 XtSetArg (args[n], XmNmarginWidth, 4); n++;
525 XtSetArg (args[n], XmNmarginHeight, 4); n++;
526 reset = XmCreatePushButtonGadget (form, "reset", args, n);
527 XtManageChild (reset);
528 XtAddCallback (reset, XmNactivateCallback, DefaultCallback, (XtPointer) filter_rec);
529 XtAddCallback(reset, XmNhelpCallback, HelpRequestCB,
530 HELP_FILTER_DIALOG_STR);
531 XmStringFree (label_string);
535 XtSetArg (args[n], XmNlabelString, cancelXmString); n++;
536 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
537 XtSetArg (args[n], XmNleftPosition, 61); n++;
538 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
539 XtSetArg (args[n], XmNrightPosition, 79); n++;
540 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
541 XtSetArg (args[n], XmNtopWidget, separator); n++;
542 XtSetArg (args[n], XmNtopOffset, 5); n++;
543 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
544 XtSetArg (args[n], XmNbottomOffset, 5); n++;
545 XtSetArg (args[n], XmNmarginWidth, 4); n++;
546 XtSetArg (args[n], XmNmarginHeight, 4); n++;
547 XtSetArg (args[n], XmNmultiClick, XmMULTICLICK_DISCARD); n++;
548 XtSetArg (args[n], XmNuserData, flag ); n++;
549 close = XmCreatePushButtonGadget (form, "close", args, n);
550 XtAddCallback (close, XmNactivateCallback, CancelCallback, (XtPointer) filter_rec);
551 XtManageChild (close);
552 XtAddCallback(close, XmNhelpCallback, HelpRequestCB,
553 HELP_FILTER_DIALOG_STR);
557 XtSetArg (args[n], XmNlabelString, helpXmString); n++;
558 XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
559 XtSetArg (args[n], XmNleftPosition, 81); n++;
560 XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
561 XtSetArg (args[n], XmNrightPosition, 99); n++;
562 XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
563 XtSetArg (args[n], XmNtopWidget, separator); n++;
564 XtSetArg (args[n], XmNtopOffset, 5); n++;
565 XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
566 XtSetArg (args[n], XmNbottomOffset, 5); n++;
567 XtSetArg (args[n], XmNmarginWidth, 4); n++;
568 XtSetArg (args[n], XmNmarginHeight, 4); n++;
569 help = XmCreatePushButtonGadget (form, "help", args, n);
570 XtManageChild (help);
571 XtAddCallback(help, XmNactivateCallback, HelpRequestCB,
572 HELP_FILTER_DIALOG_STR);
573 XtAddCallback(help, XmNhelpCallback, HelpRequestCB,
574 HELP_FILTER_DIALOG_STR);
577 XtSetArg (args[0], XmNcancelButton, close);
578 XtSetValues (form, args, 1);
580 /* Fill in our instance structure */
582 filter_rec->shell = shell;
583 filter_rec->form = form;
584 filter_rec->fileNameFilter = fileNameFilter;
585 filter_rec->hidden = hidden;
586 filter_rec->scrolled_window = fileTypeScrollWin;
587 filter_rec->file_window = file_window;
588 filter_rec->select_all = selectAll;
589 filter_rec->unselect_all = unselectAll;
590 filter_rec->label = labelPt2;
591 filter_rec->cancel = 0x0;
592 filter_rec->previous_filter_data = NULL;
595 filter_rec->apply = apply;
596 filter_rec->reset = reset;
597 filter_rec->close = close;
598 filter_rec->help = help;
600 /* Set the return values for the dialog widget and dialog instance. */
602 *return_widget = form;
603 *dialog = (XtPointer) filter_rec;
609 /************************************************************************
613 ************************************************************************/
617 FilterRec *filter_rec,
618 XtCallbackProc callback,
619 XtPointer client_data )
621 FilterApply * apply_data;
624 /* Setup the callback data to be sent to the Ok callback. */
625 /* This contains the encapsulation callback to invoke upon */
626 /* the data within the dialog being changed. */
628 apply_data = (FilterApply *) XtMalloc (sizeof (FilterApply));
629 apply_data->callback = callback;
630 apply_data->client_data = client_data;
631 apply_data->filter_rec = (XtPointer) filter_rec;
632 filter_rec->apply_data = apply_data;
635 XtAddCallback (filter_rec->apply, XmNactivateCallback,
636 ApplyCallback, (XtPointer) apply_data);
638 XtAddCallback (filter_rec->ok, XmNactivateCallback,
639 OkCallback, (XtPointer) apply_data);
645 /************************************************************************
649 ************************************************************************/
653 FilterRec *filter_rec,
654 XtCallbackProc callback,
655 XtPointer client_data )
657 Atom delete_window_atom;
659 XtAddCallback(filter_rec->close, XmNactivateCallback, callback, client_data);
661 delete_window_atom = XmInternAtom (XtDisplay(filter_rec->shell), "WM_DELETE_WINDOW", True);
662 XmRemoveWMProtocols( filter_rec->shell, &delete_window_atom, 1 );
663 XmAddWMProtocolCallback( filter_rec->shell, delete_window_atom, callback,
664 (XtPointer) client_data );
670 /************************************************************************
674 ************************************************************************/
678 FilterRec *filter_rec )
680 XtDestroyWidget (filter_rec->shell);
681 XtFree ((char *) filter_rec->apply_data);
682 XtFree ((char *) filter_rec);
688 /************************************************************************
692 ************************************************************************/
696 FilterRec *filter_rec )
698 FilterData * filter_data;
700 if( filter_rec->cancel
701 && filter_rec->previous_filter_data )
704 filter_data = filter_rec->previous_filter_data;
705 filter_rec->previous_filter_data = NULL;
711 /* Allocate and initialize the file filter dialog data. */
713 filter_data = (FilterData *) XtMalloc (sizeof (FilterData));
715 filter_data->displayed = True;
717 XtSetArg (args[0], XmNx, &filter_data->x);
718 XtSetArg (args[1], XmNy, &filter_data->y);
719 XtSetArg (args[2], XmNwidth, &filter_data->width);
720 XtSetArg (args[3], XmNheight, &filter_data->height);
721 XtGetValues (filter_rec->shell, args, 4);
723 (void) GetFilterValues (filter_rec, filter_data);
726 filter_rec->cancel = 0x0;
728 return ((XtPointer) filter_data);
734 /************************************************************************
738 ************************************************************************/
741 GetDefaultValues( void )
743 FilterData * filter_data;
745 /* Allocate and initialize the default file filter dialog data. */
747 filter_data = (FilterData *) XtMalloc (sizeof (FilterData));
749 filter_data->displayed = False;
752 filter_data->height = 0;
753 filter_data->width = 0;
754 filter_data->match_flag = True;
755 filter_data->filter = XtNewString(".*");
756 filter_data->show_hidden = False;
757 filter_data->filetypesFilteredCount = 3;
758 filter_data->filetypesFiltered = XtNewString(DEFAULT_FILTER);
759 filter_data->user_data = NULL;
760 filter_data->count = ReadInFiletypes(filter_data);
762 return ((XtPointer) filter_data);
768 /************************************************************************
772 ************************************************************************/
776 XrmDatabase data_base,
779 FilterData * filter_data;
780 static Boolean convertersAdded = False;
783 /* Allocate and get the resources for file filter dialog data. */
785 filter_data = (FilterData *) XtMalloc (sizeof (FilterData));
786 filter_data->user_data = NULL;
788 _DtDialogGetResources (data_base, name_list, FILE_FILTER, (char *)filter_data,
789 resources, filterClass->resource_count);
792 /* Create new strings for any string value we read in from our
796 filter_data->filter = XtNewString(filter_data->filter);
797 filter_data->filetypesFiltered = XtNewString(filter_data->filetypesFiltered);
799 filter_data->count = ReadInFiletypes(filter_data);
801 return ((XtPointer) filter_data);
807 FilterData *filter_data )
809 FilterData * CopiedFilterData;
812 CopiedFilterData = (FilterData *) XtMalloc (sizeof (FilterData));
813 CopiedFilterData->displayed = filter_data->displayed;
814 CopiedFilterData->show_hidden = filter_data->show_hidden;
815 CopiedFilterData->match_flag = filter_data->match_flag;
816 CopiedFilterData->filter = XtNewString( filter_data->filter );
817 CopiedFilterData->filetypesFilteredCount = filter_data->filetypesFilteredCount;
818 CopiedFilterData->filetypesFiltered = XtNewString( filter_data->filetypesFiltered );
819 CopiedFilterData->count = filter_data->count;
820 CopiedFilterData->user_data = (FTData **) XtMalloc(sizeof(FTData *) *
822 for( i = 0; i < filter_data->count; ++i )
824 CopiedFilterData->user_data[i] = (FTData *)XtMalloc(sizeof(FTData));
825 CopiedFilterData->user_data[i]->filetype =
826 XtNewString( filter_data->user_data[i]->filetype );
827 CopiedFilterData->user_data[i]->index =
828 filter_data->user_data[i]->index;
829 CopiedFilterData->user_data[i]->selected =
830 filter_data->user_data[i]->selected;
832 return CopiedFilterData;
835 /************************************************************************
839 ************************************************************************/
843 FilterRec *filter_rec,
844 FilterData *filter_data )
848 XmManagerWidget mgr = (XmManagerWidget)filter_rec->file_window;
849 int num_children = mgr->composite.num_children;
850 Pixel background_color;
851 Pixel foreground_color;
852 Pixel pixmap_background;
853 Pixel pixmap_foreground;
859 XtWidgetGeometry desired, preferred;
861 PixmapData *pixmapData;
863 filter_rec->cancel = 0x0;
864 if( filter_rec->previous_filter_data )
865 FreeValues( filter_rec->previous_filter_data );
866 filter_rec->previous_filter_data = CopyFilterData( filter_data );
868 XmTextFieldSetString (filter_rec->fileNameFilter, filter_data->filter);
870 if(XmToggleButtonGadgetGetState (*showHiddenMenu))
871 filter_data->show_hidden = True;
873 filter_data->show_hidden = False;
875 if(filter_data->match_flag)
876 XtSetArg (args[0], XmNmenuHistory, filter_rec->hidArray[HIDDEN]);
878 XtSetArg (args[0], XmNmenuHistory, filter_rec->hidArray[SHOWN]);
879 XtSetValues(filter_rec->hidden, args, 1);
881 XtSetArg (args[0], XmNbackground, &background_color);
882 XtSetArg (args[1], XmNforeground, &foreground_color);
883 XtSetArg (args[2], XmNtopShadowColor, &pixmap_background);
884 XtSetArg (args[3], XmNbottomShadowColor, &pixmap_foreground);
885 XtGetValues((Widget)mgr, args, 4);
887 for (i = 0, x = 5, count = 0; i < filter_data->count; i++)
891 user_data = filter_data->user_data[i];
893 if (ptr = (char *)DtDtsDataTypeToAttributeValue(user_data->filetype,
897 icon_label = XmStringCreateLocalized(ptr);
898 DtDtsFreeAttributeValue(ptr);
902 icon_label = XmStringCreateLocalized(user_data->filetype);
905 pixmapData = _DtRetrievePixmapData(user_data->filetype,
908 filter_rec->file_window,
912 XtSetArg (args[n], XmNstring, icon_label); n++;
914 XtSetArg (args[n], XmNimageName, pixmapData->iconFileName);
916 XtSetArg (args[n], XmNimageName, NULL); n++;
917 XtSetArg (args[n], XmNunderline, False); n++;
919 XtSetArg (args[n], XmNpixmapPosition, XmPIXMAP_TOP); n++;
920 XtSetArg (args[n], XmNbehavior, XmICON_BUTTON); n++;
921 XtSetArg (args[n], XmNfillMode, XmFILL_PARENT); n++;
923 XtSetArg (args[n], XmNforeground, foreground_color); n++;
924 XtSetArg (args[n], XmNarmColor, white_pixel); n++;
925 if (background_color == white_pixel)
927 XtSetArg (args[n], XmNbackground, white_pixel); n++;
928 XtSetArg (args[n], XmNpixmapBackground, white_pixel); n++;
929 XtSetArg (args[n], XmNpixmapForeground, black_pixel); n++;
931 else if (background_color == black_pixel)
933 XtSetArg (args[n], XmNbackground, black_pixel); n++;
934 XtSetArg (args[n], XmNpixmapBackground, white_pixel); n++;
935 XtSetArg (args[n], XmNpixmapForeground, black_pixel); n++;
939 XtSetArg (args[n], XmNbackground, background_color); n++;
940 XtSetArg (args[n], XmNpixmapBackground, pixmap_background); n++;
941 XtSetArg (args[n], XmNpixmapForeground, pixmap_foreground); n++;
944 if (i - count < num_children)
946 icon_widget = mgr->composite.children[i - count];
947 XtSetArg (args[n], XmNx, x); n++;
948 XtSetArg (args[n], XmNy, 5); n++;
949 XtSetArg (args[n], XmNuserData, user_data); n++;
950 XtSetValues(icon_widget, args, n);
951 XtRemoveAllCallbacks (icon_widget, XmNcallback);
956 XtSetArg (args[n], XmNx, x); n++;
957 XtSetArg (args[n], XmNy, 5); n++;
958 XtSetArg (args[n], XmNshadowThickness, 2); n++;
959 XtSetArg (args[n], XmNfontList, user_font); n++;
960 if(keybdFocusPolicy == XmEXPLICIT)
962 XtSetArg (args[n], XmNtraversalOn, True); n++;
966 XtSetArg (args[n], XmNtraversalOn, False); n++;
967 XtSetArg (args[n], XmNhighlightThickness, 0); n++;
969 XtSetArg (args[n], XmNborderType, DtNON_RECTANGLE); n++;
970 if (mgr->composite.num_children == 0)
972 XtSetArg (args[n], XmNuserData, user_data); n++;
973 icon_widget= _DtCreateIcon ((Widget)mgr, "icon", args, n);
977 icon_widget = _DtDuplicateIcon((Widget)mgr,
978 mgr->composite.children[0],
979 (XmString)args[0].value, (String)args[1].value,
980 (XtPointer)user_data, (Boolean)args[2].value);
982 XtSetArg (args[n], XmNx, x); n++;
983 XtSetArg (args[n], XmNy, 5); n++;
984 XtSetValues(icon_widget, args, n);
986 XtAddCallback(icon_widget, XmNhelpCallback,
987 (XtCallbackProc)HelpRequestCB, NULL);
989 XtAddCallback (icon_widget, XmNcallback, NewFileTypeSelected,
990 (XtPointer)filter_rec);
992 _DtCheckAndFreePixmapData(user_data->filetype,
993 filter_rec->file_window,
994 (DtIconGadget) icon_widget,
997 XtManageChild(icon_widget);
998 x += 5 + icon_widget->core.width;
999 if (icon_widget->core.height > max)
1000 max = icon_widget->core.height;
1002 XmStringFree(icon_label);
1005 for (i = 0, count = 0; i < filter_data->count; i++)
1008 user_data = filter_data->user_data[i];
1010 icon_widget = mgr->composite.children[i - count];
1012 if(filter_data->user_data[i]->selected == True)
1015 /* Draw the selected icon as selected */
1016 if (background_color == white_pixel)
1018 XtSetArg (args[n], XmNbackground, black_pixel); n++;
1019 XtSetArg (args[n], XmNforeground, white_pixel); n++;
1023 XtSetArg (args[n], XmNbackground, white_pixel); n++;
1024 XtSetArg (args[n], XmNforeground, black_pixel); n++;
1027 XtSetArg (args[n], XmNpixmapBackground, white_pixel); n++;
1028 XtSetArg (args[n], XmNpixmapForeground, black_pixel); n++;
1029 XtSetArg (args[n], XmNarmColor, white_pixel); n++;
1030 XtSetValues(icon_widget, args, n);
1035 /* Unmanage any icons left over */
1036 while (i < num_children)
1038 XtUnmanageChild(mgr->composite.children[i]);
1042 /* Line up the titles in all of the icons */
1043 num_children = mgr->composite.num_children;
1044 for (i = 0; i < num_children; i++)
1046 if (XtIsManaged(mgr->composite.children[i]))
1048 if (mgr->composite.children[i]->core.height != max)
1051 XtSetArg(args[n], XmNy,
1052 5 + (max - mgr->composite.children[i]->core.height)); n++;
1053 XtSetValues(mgr->composite.children[i], args, n);
1058 /* Set the height of the scrolled window */
1059 desired.x = filter_rec->scrolled_window->core.x;
1060 desired.y = filter_rec->scrolled_window->core.y;
1061 desired.width = filter_rec->scrolled_window->core.width;
1062 desired.request_mode = (CWWidth);
1063 XtQueryGeometry(filter_rec->scrolled_window, &desired, &preferred);
1065 if (preferred.request_mode & CWWidth)
1067 XtSetArg(args[n], XmNwidth, (XtArgVal) preferred.width);
1070 if (preferred.request_mode & CWHeight)
1072 XtSetArg(args[n], XmNheight, (XtArgVal) preferred.height);
1075 XtSetValues(filter_rec->scrolled_window, args, n);
1082 /************************************************************************
1084 * WriteResourceValues
1086 ************************************************************************/
1089 WriteResourceValues(
1094 FilterData * filter_data = (FilterData *) values->data;
1095 FilterRec * filter_rec;
1099 /* If the dialog is currently displayed, update the geometry */
1100 /* fields to their current values. */
1102 if (filter_data->displayed == True)
1104 _DtGenericUpdateWindowPosition(values);
1105 filter_rec = (FilterRec *) _DtGetDialogInstance (values);
1108 _DtDialogPutResources (fd, name_list, FILE_FILTER, values->data,
1109 resources, filterClass->resource_count);
1115 /************************************************************************
1119 ************************************************************************/
1123 FilterData *filter_data )
1127 for( i = 0; i < filter_data->count; i++)
1129 if(filter_data->user_data[i]->filetype)
1130 XtFree ((char *)filter_data->user_data[i]->filetype);
1131 XtFree ((char *)filter_data->user_data[i]);
1133 XtFree ((char *)filter_data->user_data);
1134 XtFree ((char *) filter_data->filter);
1135 XtFree ((char *) filter_data->filetypesFiltered);
1136 XtFree ((char *) filter_data);
1141 /************************************************************************
1145 ************************************************************************/
1150 XtPointer client_data,
1151 XtPointer call_data )
1153 FilterRec * filter_rec = (FilterRec *) client_data;
1154 DialogData * dialog_data;
1155 FilterData * filter_data;
1160 /* Get the instance and data for the dialog */
1162 dialog_data = _DtGetInstanceData ((XtPointer)filter_rec);
1163 filter_data = (FilterData *) dialog_data->data;
1165 filter_data->show_hidden = False;
1167 XtSetArg (args[0], XmNmenuHistory, filter_rec->hidArray[HIDDEN]);
1168 XtSetValues(filter_rec->hidden, args, 1);
1169 filter_data->match_flag = True;
1171 XmToggleButtonGadgetSetState(*showHiddenMenu, False, False);
1173 XtFree( filter_data->filter );
1174 filter_data->filter = XtNewString(".*");
1176 filter_data->filetypesFilteredCount = 3;
1177 XtFree( filter_data->filetypesFiltered );
1178 filter_data->filetypesFiltered = XtNewString( DEFAULT_FILTER );
1180 filter_data->count = ReadInFiletypes(filter_data);
1182 /* Display the new type */
1183 SetValues (filter_rec, filter_data);
1186 /************************************************************************
1190 ************************************************************************/
1195 XtPointer client_data,
1196 XtPointer call_data )
1198 FilterRec * filter_rec = (FilterRec *) client_data;
1200 filter_rec->cancel = 0x1;
1203 /************************************************************************
1206 * This is a callback function called when the (Ok) button
1207 * is pressed. It saves the new file filter data internally and
1208 * then calls the encapsulations callback function. It then closes
1211 ************************************************************************/
1216 XtPointer client_data,
1217 XtPointer call_data )
1219 FilterRec * filter_rec = (FilterRec *) ((FilterApply *)client_data)->filter_rec;
1220 DialogData * dialog_data;
1221 Widget close = filter_rec->close;
1223 if(RecheckFlag(NULL,w))
1225 else if(RecheckFlag(NULL,close))
1228 ApplyCallback(w, client_data, call_data);
1229 dialog_data = _DtGetInstanceData ((XtPointer)filter_rec);
1230 ResetFlag(NULL,close);
1231 XtCallCallbacks(filter_rec->close, XmNactivateCallback,
1232 (XtPointer)dialog_data);
1236 /************************************************************************
1239 * This is a callback function called when the (Apply) button
1240 * is pressed. It saves the new file filter data internally and
1241 * then calls the encapsulations callback function.
1243 ************************************************************************/
1248 XtPointer client_data,
1249 XtPointer call_data )
1251 FilterRec * filter_rec;
1252 DialogData * dialog_data;
1253 FilterData * filter_data;
1254 FilterData * new_filter_data;
1255 XmManagerWidget mgr;
1261 filter_rec = (FilterRec *) ((FilterApply *) client_data)->filter_rec;
1262 dialog_data = _DtGetInstanceData ((XtPointer)filter_rec);
1263 filter_data = (FilterData *) dialog_data->data;
1264 new_filter_data = (FilterData *) XtMalloc (sizeof (FilterData));
1265 mgr = (XmManagerWidget)filter_rec->file_window;
1266 num_children = mgr->composite.num_children;
1268 GetFilterValues (filter_rec, new_filter_data);
1269 FreeValues (filter_data);
1270 dialog_data->data = (XtPointer) new_filter_data;
1272 if( filter_rec->previous_filter_data )
1273 FreeValues( filter_rec->previous_filter_data );
1274 filter_rec->previous_filter_data = CopyFilterData( new_filter_data );
1276 /* Need to update 'userData' for each of the icons */
1277 for (i = 0, count = 0; i < num_children &&
1278 i + count < new_filter_data->count; i++)
1280 XtSetArg (args[0], XmNuserData, new_filter_data->user_data[i + count]);
1281 XtSetValues(mgr->composite.children[i], args, 1);
1283 (*(((FilterApply *)client_data)->callback)) (w, ((FilterApply *)client_data)->client_data, NULL);
1288 /************************************************************************
1291 * Update the current file filter values within the data structure
1292 * from the current toggle button values.
1294 ************************************************************************/
1298 FilterRec *filter_rec,
1299 FilterData *filter_data )
1304 DialogData * dialog_data;
1305 FilterData * old_filter_data;
1307 filter_data->displayed = True;
1309 filter_data->filter = XmTextFieldGetString (filter_rec->fileNameFilter);
1311 XmToggleButtonGadgetSetState(*showHiddenMenu, False, False);
1312 filter_data->show_hidden = False;
1314 XtSetArg (args[0], XmNmenuHistory, &menuHistory);
1315 XtGetValues (filter_rec->hidden, args, 1);
1317 if(menuHistory == filter_rec->hidArray[HIDDEN])
1318 filter_data->match_flag = True;
1320 filter_data->match_flag = False;
1322 filter_data->filetypesFiltered = NULL;
1323 filter_data->filetypesFilteredCount = 0;
1324 dialog_data = _DtGetInstanceData ((XtPointer)filter_rec);
1325 if(dialog_data != NULL)
1327 old_filter_data = (FilterData *) dialog_data->data;
1328 filter_data->count = old_filter_data->count;
1329 filter_data->user_data = (FTData **) XtMalloc(sizeof(FTData *) *
1330 filter_data->count);
1332 for( i = 0; i < filter_data->count; i++)
1334 /* Copy current value from the old dialog values */
1335 filter_data->user_data[i] = (FTData *)XtMalloc(sizeof(FTData));
1336 filter_data->user_data[i]->filetype =
1337 XtNewString(old_filter_data->user_data[i]->filetype);
1338 filter_data->user_data[i]->index =
1339 old_filter_data->user_data[i]->index;
1340 filter_data->user_data[i]->selected =
1341 old_filter_data->user_data[i]->selected;
1343 if((filter_data->user_data[i]->selected == True &&
1344 filter_data->match_flag) ||
1345 (filter_data->user_data[i]->selected == False &&
1346 !filter_data->match_flag))
1348 if(filter_data->filetypesFiltered == NULL)
1350 filter_data->filetypesFiltered =
1351 XtNewString(filter_data->user_data[i]->filetype);
1355 filter_data->filetypesFiltered = (char *)XtRealloc(
1356 (char *)filter_data->filetypesFiltered,
1357 strlen(filter_data->filetypesFiltered) +
1358 strlen(filter_data->user_data[i]->filetype) + 2);
1360 strcat(filter_data->filetypesFiltered, ",");
1361 strcat(filter_data->filetypesFiltered,
1362 filter_data->user_data[i]->filetype);
1364 filter_data->filetypesFilteredCount++;
1377 XtPointer client_data,
1381 FilterData *filter_data;
1382 FileMgrData *file_mgr_data;
1383 FileMgrRec *file_mgr_rec;
1384 FilterRec *filter_rec;
1385 DialogData *dialog_data;
1389 if ((int)client_data == FM_POPUP)
1392 mbar = (Widget)XmGetPostedFromWidget(XtParent(w));
1393 XmUpdateDisplay (w);
1395 XtSetArg(args[0], XmNuserData, &file_mgr_rec);
1396 XtGetValues(mbar, args, 1);
1398 dialog_data = _DtGetInstanceData ((XtPointer)file_mgr_rec);
1399 file_mgr_data = (FileMgrData *) dialog_data->data;
1401 filter_data = (FilterData *)(file_mgr_data->filter_active->data);
1402 if (file_mgr_data->show_hid_enabled)
1404 filter_data->show_hidden = False;
1405 file_mgr_data->show_hid_enabled = False;
1409 filter_data->show_hidden = True;
1410 file_mgr_data->show_hid_enabled = True;
1413 filter_rec = (FilterRec *)_DtGetDialogInstance( file_mgr_data->filter_edit );
1415 /* Refilter the contents of the current directory */
1417 FileMgrRedisplayFiles (file_mgr_rec, file_mgr_data, False);
1424 FilterData *filter_data)
1431 char *filtered_types, *file_type;
1434 if (filter_data->user_data)
1436 for(i=0; i<filter_data->count; i++)
1438 XtFree(filter_data->user_data[i]->filetype);
1439 XtFree((char *)filter_data->user_data[i]);
1441 XtFree((char *)filter_data->user_data);
1442 filter_data->user_data = NULL;
1443 filter_data->count = 0;
1446 file_types = (char **) DtDtsDataTypeNames();
1448 while(file_types[i])
1450 /* filter out invisible types and actions */
1451 if((_DtCheckForDataTypeProperty(file_types[i], "invisible")) ||
1452 (DtDtsDataTypeIsAction(file_types[i])))
1458 if (count == count_size)
1462 filter_data->user_data =
1463 (FTData **) XtRealloc ((char *)filter_data->user_data,
1464 sizeof (FTData *) * count_size);
1467 user_data = (FTData *)XtMalloc(sizeof(FTData));
1468 user_data->index = count;
1469 user_data->selected = False;
1470 user_data->filetype = XtNewString(file_types[i]);
1472 filter_data->user_data[count] = user_data;
1477 DtDtsFreeDataTypeNames(file_types);
1479 qsort( filter_data->user_data, count, sizeof( FTData *), (int (*)())FileTypeAscending );
1481 filtered_types = filter_data->filetypesFiltered;
1482 for(i = 0; i < filter_data->filetypesFilteredCount; i++)
1484 file_type = filtered_types;
1485 filtered_types = DtStrchr(filtered_types, ',');
1487 if(filter_data->filetypesFilteredCount - 1 != i)
1488 *filtered_types = '\0';
1490 for(j = 0; j < count; j++)
1492 if(strcmp(file_type, filter_data->user_data[j]->filetype) == 0)
1494 filter_data->user_data[j]->selected = True;
1499 if(filter_data->filetypesFilteredCount - 1 != i)
1501 *filtered_types = ',';
1505 if(!filter_data->match_flag)
1507 for(j = 0; j < count; j++)
1509 if(filter_data->user_data[j]->selected == True)
1510 filter_data->user_data[j]->selected = False;
1512 filter_data->user_data[j]->selected = True;
1521 * Whenever the database files are reread, we must update the filter
1522 * values, since the indices of the filetypes may have changed.
1526 UpdateFilterAfterDBReread (
1527 DialogData * dialog_data )
1532 XmManagerWidget mgr;
1534 FilterData * new_filter_data;
1535 FilterData * filter_data;
1536 FilterRec * filter_rec;
1539 filter_data = (FilterData *) dialog_data->data;
1540 new_filter_data = (FilterData *) XtMalloc (sizeof (FilterData));
1542 if (filter_rec = (FilterRec *) _DtGetDialogInstance(dialog_data))
1544 /* Dialog is posted */
1545 result = GetFilterValues (filter_rec, new_filter_data);
1548 XtFree(new_filter_data->filetypesFiltered);
1549 new_filter_data->filetypesFiltered =
1550 XtNewString(filter_data->filetypesFiltered);
1551 new_filter_data->filetypesFilteredCount =
1552 filter_data->filetypesFilteredCount;
1553 FreeValues (filter_data);
1554 dialog_data->data = (XtPointer) new_filter_data;
1555 filter_data = new_filter_data;
1559 /* Reload the filetype information */
1560 filter_data->count = ReadInFiletypes(filter_data);
1562 if (filter_rec && result)
1564 /* Need to update 'userData' for each of the icons */
1565 mgr = (XmManagerWidget)filter_rec->file_window;
1566 num_children = mgr->composite.num_children;
1567 for (i = 0, count = 0; i < num_children &&
1568 i + count < filter_data->count; i++)
1570 XtSetArg (args[0], XmNuserData, new_filter_data->user_data[i]);
1571 XtSetValues(mgr->composite.children[i], args, 1);
1573 /* Display the new type */
1574 SetValues (filter_rec, filter_data);
1581 XtPointer client_data,
1582 XtPointer call_data )
1585 FilterRec * filter_rec = (FilterRec *) client_data;
1586 DialogData * dialog_data;
1587 FilterData * filter_data;
1589 XmString label_string;
1591 /* Get the instance and data for the dialog */
1592 dialog_data = _DtGetInstanceData ((XtPointer)filter_rec);
1593 filter_data = (FilterData *) dialog_data->data;
1595 XtSetArg (args[0], XmNmenuHistory, &menuHistory);
1596 XtGetValues (filter_rec->hidden, args, 1);
1598 if(menuHistory == filter_rec->hidArray[HIDDEN])
1600 filter_data->match_flag = True;
1601 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(13,26,
1602 "Also hide (Optional): ")));
1606 filter_data->match_flag = False;
1607 label_string = XmStringCreateLocalized (((char *)GETMESSAGE(13,29,
1608 "Also show (Optional): ")));
1610 XtSetArg (args[0], XmNlabelString, label_string);
1611 XtSetValues( filter_rec->label, args, 1 );
1613 XmStringFree( label_string );
1614 XmUpdateDisplay( filter_rec->label );
1622 return strcmp( (*t1)->filetype, (*t2)->filetype );
1630 Cardinal *num_params )
1632 FilterRec * filterRec;
1634 sscanf( params[0], "%p", &filterRec );
1635 SelectAllFileTypes( w, (XtPointer)filterRec, NULL );
1644 Cardinal *num_params )
1646 FilterRec * filterRec;
1648 sscanf( params[0], "%p", &filterRec );
1649 UnselectAllFileTypes( w, (XtPointer)filterRec, NULL );