ui/motif/Fsb.c

Fri, 12 Dec 2025 12:44:03 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Fri, 12 Dec 2025 12:44:03 +0100
changeset 994
c9395b30e5c8
parent 927
b8c0f718b141
permissions
-rw-r--r--

fix uic_store_app_properties

925
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * Copyright 2021 Olaf Wintermann
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Permission is hereby granted, free of charge, to any person obtaining a
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 * copy of this software and associated documentation files (the "Software"),
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * to deal in the Software without restriction, including without limitation
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 * and/or sell copies of the Software, and to permit persons to whom the
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * Software is furnished to do so, subject to the following conditions:
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 *
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 * The above copyright notice and this permission notice shall be included in
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * all copies or substantial portions of the Software.
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 *
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * DEALINGS IN THE SOFTWARE.
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 //define FSB_ENABLE_DETAIL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 #include "Fsb.h"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 #include "FsbP.h"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28 #include <stdio.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdlib.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <string.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include <unistd.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 #include <time.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include <inttypes.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 #include <errno.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #include <sys/stat.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 #include <limits.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 #include <dirent.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 #include <fnmatch.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 #include <Xm/XmAll.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 #include <Xm/DropDown.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 #include "pathbar.h"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45
927
b8c0f718b141 move default path elm func to common
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 925
diff changeset
46 #include "../common/utils.h"
b8c0f718b141 move default path elm func to common
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 925
diff changeset
47
925
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 #ifdef FSB_ENABLE_DETAIL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 #include <XmL/Grid.h>
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 #endif
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 #define WIDGET_SPACING 5
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 #define WINDOW_SPACING 8
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 #define BUTTON_EXTRA_SPACE 4
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 #define DATE_FORMAT_SAME_YEAR "%b %d %H:%M"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 #define DATE_FORMAT_OTHER_YEAR "%b %d %Y"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 #define KB_SUFFIX "KiB"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 #define MB_SUFFIX "MiB"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 #define GB_SUFFIX "GiB"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 #define TB_SUFFIX "TiB"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 #define FSB_ERROR_TITLE "Error"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 #define FSB_ERROR_CHAR "Character '/' is not allowed in file names"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 #define FSB_ERROR_RENAME "Cannot rename file: %s"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 #define FSB_ERROR_DELETE "Cannot delete file: %s"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 #define FSB_ERROR_CREATE_FOLDER "Cannot create folder: %s"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70 #define FSB_ERROR_OPEN_DIR "Cannot open directory: %s"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 #define FSB_DETAIL_HEADINGS "Name|Size|Last Modified"
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 static void fsb_class_init(void);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 static void fsb_class_part_init (WidgetClass wc);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 static void fsb_init(Widget request, Widget neww, ArgList args, Cardinal *num_args);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77 static void fsb_resize(Widget widget);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 static void fsb_realize(Widget widget, XtValueMask *mask, XSetWindowAttributes *attributes);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 static void fsb_destroy(Widget widget);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 static Boolean fsb_set_values(Widget old, Widget request, Widget neww, ArgList args, Cardinal *num_args);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 static Boolean fsb_acceptfocus(Widget widget, Time *time);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 static void fsb_insert_child(Widget child);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 static void fsb_mapcb(Widget widget, XtPointer u, XtPointer cb);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 static int FSBGlobFilter(const char *a, const char *b);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 static void FSBUpdateTitle(Widget w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91 static void FocusInAP(Widget w, XEvent *event, String *args, Cardinal *nArgs);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
92
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 static void ErrDialog(XnFileSelectionBox w, const char *title, const char *errmsg);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 static void FSBRename(XnFileSelectionBox fsb, const char *path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96 static void FSBDelete(XnFileSelectionBox fsb, const char *path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 static void FSBSelectItem(XnFileSelectionBox fsb, const char *item);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100 static char* set_selected_path(XnFileSelectionBox data, XmString item);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 static void FileContextMenuCB(Widget item, XtPointer index, XtPointer cd);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 static Widget CreateContextMenu(XnFileSelectionBox fsb, Widget parent, XtCallbackProc callback);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 static void FileListUpdate(Widget fsb, Widget view, FileElm *dirlist, int dircount, FileElm *files, int filecount, const char *filter, int maxnamelen, void *userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107 static void FileListSelect(Widget fsb, Widget view, const char *item);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108 static void FileListCleanup(Widget fsb, Widget view, void *userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109 static void FileListDestroy(Widget fsb, Widget view, void *userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111 static void FileListActivateCB(Widget w, XnFileSelectionBox data, XmListCallbackStruct *cb);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112 static void FileListSelectCB(Widget w, XnFileSelectionBox data, XmListCallbackStruct *cb);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 static void FileListWidgetAdd(XnFileSelectionBox fsb, Widget w, int showHidden, const char *filter, FileElm *ls, int count);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 #ifdef FSB_ENABLE_DETAIL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117 static void FileListDetailUpdate(Widget fsb, Widget view, FileElm *dirlist, int dircount, FileElm *files, int filecount, const char *filter, int maxnamelen, void *userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 static void FileListDetailSelect(Widget fsb, Widget view, const char *item);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 static void FileListDetailCleanup(Widget fsb, Widget view, void *userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 static void FileListDetailDestroy(Widget fsb, Widget view, void *userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 static void FileListDetailAdjustColWidth(Widget grid);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 static void FileListDetailAdd(XnFileSelectionBox fsb, Widget grid, int showHidden, const char *filter, FileElm *ls, int count, int maxWidth);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 #endif
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125 static void FSBNewFolder(Widget w, XnFileSelectionBox data, XtPointer u);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 static void FSBHome(Widget w, XnFileSelectionBox data, XtPointer u);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
129 static void FileSelectionCallback(XnFileSelectionBox fsb, XtCallbackList cb, int reason, const char *value);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
130
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
131 static void CreateUI(XnFileSelectionBox w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132 static FSBViewWidgets CreateView(XnFileSelectionBox w, FSBViewCreateProc createProc, void *userData, Boolean useDirList);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133 static void AddViewMenuItem(XnFileSelectionBox w, const char *name, int viewIndex);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134 static void SelectView(XnFileSelectionBox f, int view);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
135
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
136 static char* FSBDialogTitle(Widget w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
137
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
138 static FSBViewWidgets CreateListView(Widget fsb, ArgList args, int n, void *userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
139 static FSBViewWidgets CreateDetailView(Widget fsb, ArgList args, int n, void *userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
141 static const char* GetHomeDir(void);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
142
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
143 static char* ConcatPath(const char *parent, const char *name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
144 static char* FileName(char *path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
145 static char* ParentPath(const char *path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146 //static int CheckFileName(const char *name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
147
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 static int filedialog_update_dir(XnFileSelectionBox data, const char *path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 static void filedialog_cleanup_filedata(XnFileSelectionBox data);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 static XtResource resources[] = {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153 {XmNokCallback, XmCCallback, XmRCallback, sizeof(XtCallbackList), XtOffset(XnFileSelectionBox, fsb.okCallback), XmRCallback, NULL},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154 {XmNcancelCallback, XmCCallback, XmRCallback, sizeof(XtCallbackList), XtOffset(XnFileSelectionBox, fsb.cancelCallback), XmRCallback, NULL},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155 {XnNwidgetSpacing, XmCSpacing, XmRDimension, sizeof(Dimension), XtOffset(XnFileSelectionBox, fsb.widgetSpacing), XmRImmediate, (XtPointer)WIDGET_SPACING},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156 {XnNwindowSpacing, XmCSpacing, XmRDimension, sizeof(Dimension), XtOffset(XnFileSelectionBox, fsb.windowSpacing), XmRImmediate, (XtPointer)WINDOW_SPACING},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157 {XnNfsbType, XnCfsbType, XmRInt, sizeof(int), XtOffset(XnFileSelectionBox, fsb.type), XmRImmediate, (XtPointer)FILEDIALOG_OPEN},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158 {XnNshowHidden, XnCshowHidden, XmRBoolean, sizeof(Boolean), XtOffset(XnFileSelectionBox, fsb.showHidden), XmRImmediate, (XtPointer)False},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 {XnNshowHiddenButton, XnCshowHiddenButton, XmRBoolean, sizeof(Boolean), XtOffset(XnFileSelectionBox, fsb.showHiddenButton), XmRImmediate, (XtPointer)True},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160 {XnNshowViewMenu, XnCshowViewMenu, XmRBoolean, sizeof(Boolean), XtOffset(XnFileSelectionBox, fsb.showViewMenu), XmRImmediate, (XtPointer)False},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161 {XnNselectedView, XnCselectedView, XmRInt, sizeof(int), XtOffset(XnFileSelectionBox, fsb.selectedview), XmRImmediate, (XtPointer)0},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163 {XnNdirectory, XnCdirectory, XmRString, sizeof(XmString), XtOffset(XnFileSelectionBox, fsb.currentPath), XmRString, NULL},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 {XnNselectedPath, XnCselectedPath, XmRString, sizeof(XmString), XtOffset(XnFileSelectionBox, fsb.selectedPath), XmRString, NULL},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
165 {XnNhomePath, XnChomePath, XmRString, sizeof(XmString), XtOffset(XnFileSelectionBox, fsb.homePath), XmRString, NULL},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167 {XnNfilter,XnCfilter,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.filterStr), XmRString, "*"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
168 {XnNfilterFunc,XnCfilterFunc,XmRFunction,sizeof(FSBFilterFunc),XtOffset(XnFileSelectionBox, fsb.filterFunc), XmRFunction, NULL},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 {XnNlabelListView,XnClabelListView,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelListView), XmRString, "List"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 {XnNlabelDetailView,XnClabelDetailView,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelDetailView), XmRString, "Detail"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172 {XnNlabelOpenFileTitle,XnClabelOpenFileTitle,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelOpenFileTitle), XmRString, "Open File"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173 {XnNlabelSaveFileTitle,XnClabelSaveFileTitle,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelSaveFileTitle), XmRString, "Save File"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174 {XnNlabelDirUp,XnClabelDirUp,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelDirUp), XmRString, "Dir Up"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 {XnNlabelHome,XnClabelHome,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelHome), XmRString, "Home"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
176 {XnNlabelNewFolder,XnClabelNewFolder,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelNewFolder), XmRString, "New Folder"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
177 {XnNlabelFilterButton,XnClabelFilterButton,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelFilterButton), XmRString, "Filter"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 {XnNlabelShowHiddenFiles,XnClabelShowHiddenFiles,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelShowHiddenFiles), XmRString, "Show hiden files"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
179 {XnNlabelDirectories,XnClabelDirectories,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelDirectories), XmRString, "Directories"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180 {XnNlabelFiles,XnClabelFiles,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelFiles), XmRString, "Files"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
181 {XnNlabelRename,XnClabelRename,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelRename), XmRString, "Rename"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
182 {XnNlabelDelete,XnClabelDelete,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelDelete), XmRString, "Delete"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
183 {XnNlabelOpen,XnClabelOpen,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelOpen), XmRString, "Open"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
184 {XnNlabelSave,XnClabelSave,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelSave), XmRString, "Save"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
185 {XnNlabelOk,XnClabelOk,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelOk), XmRString, "OK"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
186 {XnNlabelCancel,XnClabelCancel,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelCancel), XmRString, "Cancel"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
187 {XnNlabelHelp,XnClabelHelp,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelHelp), XmRString, "Help"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
188 {XnNlabelFileName,XnClabelFileName,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelFileName), XmRString, "New File Name"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
189 {XnNlabelDirectoryName,XnClabelDirectoryName,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelDirectoryName), XmRString, "Directory name:"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
190 {XnNlabelNewFileName,XnClabelNewFileName,XmRXmString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelNewFileName), XmRString, "New file name:"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
191 {XnNlabelDeleteFile,XnClabelDeleteFile,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.labelDeleteFile), XmRString, "Delete file '%s'?"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
192 {XnNdetailHeadings,XnCdetailHeadings,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.detailHeadings), XmRString,FSB_DETAIL_HEADINGS},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
193 {XnNdateFormatSameYear,XnCdateFormatSameYear,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.dateFormatSameYear), XmRString,DATE_FORMAT_SAME_YEAR},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
194 {XnNdateFormatOtherYear,XnNdateFormatOtherYear,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.dateFormatOtherYear), XmRString,DATE_FORMAT_OTHER_YEAR},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
195 {XnNsuffixBytes,XnCsuffixBytes,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.suffixBytes), XmRString,"bytes"},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
196 {XnNsuffixKB,XnCsuffixKB,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.suffixKB), XmRString,KB_SUFFIX},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
197 {XnNsuffixMB,XnCsuffixKB,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.suffixMB), XmRString,MB_SUFFIX},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
198 {XnNsuffixGB,XnCsuffixKB,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.suffixGB), XmRString,GB_SUFFIX},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
199 {XnNsuffixTB,XnCsuffixKB,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.suffixTB), XmRString,TB_SUFFIX},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
200
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
201 {XnNerrorTitle,XnCerrorTitle,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.errorTitle), XmRString,FSB_ERROR_TITLE},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
202 {XnNerrorIllegalChar,XnCerrorIllegalChar,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.errorIllegalChar), XmRString,FSB_ERROR_CHAR},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
203 {XnNerrorRename,XnCerrorRename,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.errorRename), XmRString,FSB_ERROR_RENAME},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
204 {XnNerrorCreateFolder,XnCerrorCreateFolder,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.errorFolder), XmRString,FSB_ERROR_CREATE_FOLDER},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
205 {XnNerrorDelete,XnCerrorDelete,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.errorDelete), XmRString,FSB_ERROR_DELETE},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
206 {XnNerrorOpenDir,XnCerrorOpenDir,XmRString,sizeof(XmString),XtOffset(XnFileSelectionBox, fsb.errorOpenDir), XmRString,FSB_ERROR_OPEN_DIR}
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
207 };
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
208
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
209 static XtActionsRec actionslist[] = {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
210 {"focusIn", FocusInAP},
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
211 {"NULL", NULL}
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
212 };
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
213
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
214
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
215 static char defaultTranslations[] = "<FocusIn>: focusIn()";
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
216
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
217 static XtResource constraints[] = {};
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
218
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
219 FSBClassRec fsbWidgetClassRec = {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
220 // Core Class
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
221 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
222 (WidgetClass)&xmFormClassRec,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
223 "XnFSB", // class_name
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
224 sizeof(FSBRec), // widget_size
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
225 fsb_class_init, // class_initialize
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
226 fsb_class_part_init, // class_part_initialize
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
227 FALSE, // class_inited
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
228 fsb_init, // initialize
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
229 NULL, // initialize_hook
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
230 fsb_realize, // realize
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
231 actionslist, // actions
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
232 XtNumber(actionslist), // num_actions
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
233 resources, // resources
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
234 XtNumber(resources), // num_resources
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
235 NULLQUARK, // xrm_class
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
236 True, // compress_motion
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
237 True, // compress_exposure
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
238 True, // compress_enterleave
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
239 False, // visible_interest
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
240 fsb_destroy, // destroy
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
241 fsb_resize, // resize
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
242 XtInheritExpose, // expose
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
243 fsb_set_values, // set_values
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
244 NULL, // set_values_hook
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
245 XtInheritSetValuesAlmost, // set_values_almost
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
246 NULL, // get_values_hook
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
247 fsb_acceptfocus, // accept_focus
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
248 XtVersion, // version
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
249 NULL, // callback_offsets
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
250 defaultTranslations, // tm_table
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
251 XtInheritQueryGeometry, // query_geometry
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
252 XtInheritDisplayAccelerator, // display_accelerator
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
253 NULL, // extension
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
254 },
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
255 // Composite Class
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
256 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
257 XtInheritGeometryManager, // geometry_manager
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
258 XtInheritChangeManaged, // change_managed
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
259 fsb_insert_child, // insert_child
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
260 XtInheritDeleteChild, // delete_child
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
261 NULL, // extension
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
262 },
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
263 // Constraint Class
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
264 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
265 constraints, // resources
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
266 XtNumber(constraints), // num_resources
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
267 sizeof(XmFormConstraintRec), // constraint_size
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
268 NULL, // initialize
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
269 NULL, // destroy
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
270 NULL, // set_value
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
271 NULL, // extension
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
272 },
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
273 // XmManager Class
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
274 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
275 XtInheritTranslations, // translations
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
276 NULL, // syn_resources
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
277 0, // num_syn_resources
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
278 NULL, // syn_constraint_resources
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
279 0, // num_syn_constraint_resources
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
280 XmInheritParentProcess, // parent_process
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
281 NULL // extension
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
282 },
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
283 // XmBulletinBoard
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
284 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
285 FALSE,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
286 NULL,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
287 XmInheritFocusMovedProc,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
288 NULL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
289 },
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
290 // XmForm Class
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
291 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
292 NULL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
293 },
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
294 // FSB Class
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
295 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
296 0
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
297 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
298 };
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
299
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
300 WidgetClass xnFsbWidgetClass = (WidgetClass)&fsbWidgetClassRec;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
301
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
302
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
303 static void fsb_class_init(void) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
304
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
305 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
306
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
307 static void fsb_class_part_init (WidgetClass wc) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
308 FSBClassRec *fsbClass = (FSBClassRec*)wc;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
309 XmFormClassRec *formClass = (XmFormClassRec*)xmFormWidgetClass;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
310
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
311 fsbClass->constraint_class.initialize = formClass->constraint_class.initialize;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
312 fsbClass->constraint_class.set_values = formClass->constraint_class.set_values;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
313 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
314
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
315
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
316 #define STRDUP_RES(a) if(a) a = strdup(a)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
317 #define XMS_STRDUP_RES(a) if(a) a = XmStringCopy(a)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
318
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
319 static void fsb_init(Widget request, Widget neww, ArgList args, Cardinal *num_args) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
320 XnFileSelectionBox fsb = (XnFileSelectionBox)neww;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
321 (xmFormClassRec.core_class.initialize)(request, neww, args, num_args);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
322
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
323 fsb->fsb.disable_set_values = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
324
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
325 STRDUP_RES(fsb->fsb.homePath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
326 STRDUP_RES(fsb->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
327 STRDUP_RES(fsb->fsb.currentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
328 STRDUP_RES(fsb->fsb.filterStr);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
329 STRDUP_RES(fsb->fsb.labelListView);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
330 STRDUP_RES(fsb->fsb.labelDetailView);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
331 STRDUP_RES(fsb->fsb.labelOpenFileTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
332 STRDUP_RES(fsb->fsb.labelSaveFileTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
333 XMS_STRDUP_RES(fsb->fsb.labelDirUp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
334 XMS_STRDUP_RES(fsb->fsb.labelHome);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
335 XMS_STRDUP_RES(fsb->fsb.labelNewFolder);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
336 XMS_STRDUP_RES(fsb->fsb.labelFilterButton);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
337 XMS_STRDUP_RES(fsb->fsb.labelShowHiddenFiles);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
338 XMS_STRDUP_RES(fsb->fsb.labelDirectories);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
339 XMS_STRDUP_RES(fsb->fsb.labelFiles);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
340 XMS_STRDUP_RES(fsb->fsb.labelRename);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
341 XMS_STRDUP_RES(fsb->fsb.labelDelete);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
342 XMS_STRDUP_RES(fsb->fsb.labelOpen);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
343 XMS_STRDUP_RES(fsb->fsb.labelSave);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
344 XMS_STRDUP_RES(fsb->fsb.labelCancel);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
345 XMS_STRDUP_RES(fsb->fsb.labelHelp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
346 XMS_STRDUP_RES(fsb->fsb.labelFileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
347 XMS_STRDUP_RES(fsb->fsb.labelDirectoryName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
348 XMS_STRDUP_RES(fsb->fsb.labelNewFileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
349 STRDUP_RES(fsb->fsb.labelDeleteFile);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
350 STRDUP_RES(fsb->fsb.detailHeadings);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
351 STRDUP_RES(fsb->fsb.dateFormatSameYear);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
352 STRDUP_RES(fsb->fsb.dateFormatOtherYear);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
353 STRDUP_RES(fsb->fsb.suffixBytes);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
354 STRDUP_RES(fsb->fsb.suffixKB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
355 STRDUP_RES(fsb->fsb.suffixMB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
356 STRDUP_RES(fsb->fsb.suffixGB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
357 STRDUP_RES(fsb->fsb.suffixTB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
358 STRDUP_RES(fsb->fsb.errorTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
359 STRDUP_RES(fsb->fsb.errorIllegalChar);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
360 STRDUP_RES(fsb->fsb.errorRename);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
361 STRDUP_RES(fsb->fsb.errorFolder);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
362 STRDUP_RES(fsb->fsb.errorDelete);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
363 STRDUP_RES(fsb->fsb.errorOpenDir);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
364
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
365 CreateUI((XnFileSelectionBox)fsb);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
366
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
367 XtAddCallback(neww, XmNmapCallback, fsb_mapcb, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
368 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
369
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
370 #define STR_FREE(a) if(a) free(a)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
371 #define XMSTR_FREE(a) if(a) XmStringFree(a)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
372
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
373 static void fsb_destroy(Widget widget) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
374 XnFileSelectionBox w = (XnFileSelectionBox)widget;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
375
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
376 // destroy all views
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
377 for(int i=0;i<w->fsb.numviews;i++) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
378 FSBView v = w->fsb.view[i];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
379 v.destroy(widget, v.widget, v.userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
380 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
381
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
382 STR_FREE(w->fsb.homePath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
383
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
384 // free filelists
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
385 filedialog_cleanup_filedata(w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
386 STR_FREE(w->fsb.currentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
387 STR_FREE(w->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
388 STR_FREE(w->fsb.filterStr);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
389
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
390 PathBarDestroy(w->fsb.pathBar);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
391
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
392 // free strings
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
393 STR_FREE(w->fsb.labelListView);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
394 STR_FREE(w->fsb.labelDetailView);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
395 STR_FREE(w->fsb.labelOpenFileTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
396 STR_FREE(w->fsb.labelSaveFileTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
397
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
398 XMSTR_FREE(w->fsb.labelDirUp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
399 XMSTR_FREE(w->fsb.labelHome);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
400 XMSTR_FREE(w->fsb.labelNewFolder);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
401 XMSTR_FREE(w->fsb.labelFilterButton);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
402 XMSTR_FREE(w->fsb.labelShowHiddenFiles);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
403 XMSTR_FREE(w->fsb.labelDirectories);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
404 XMSTR_FREE(w->fsb.labelFiles);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
405 XMSTR_FREE(w->fsb.labelRename);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
406 XMSTR_FREE(w->fsb.labelDelete);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
407 XMSTR_FREE(w->fsb.labelOpen);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
408 XMSTR_FREE(w->fsb.labelSave);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
409 XMSTR_FREE(w->fsb.labelCancel);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
410 XMSTR_FREE(w->fsb.labelHelp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
411 XMSTR_FREE(w->fsb.labelFileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
412 XMSTR_FREE(w->fsb.labelDirectoryName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
413 XMSTR_FREE(w->fsb.labelNewFileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
414 STR_FREE(w->fsb.labelDeleteFile);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
415 STR_FREE(w->fsb.detailHeadings);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
416
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
417 STR_FREE(w->fsb.dateFormatSameYear);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
418 STR_FREE(w->fsb.dateFormatOtherYear);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
419 STR_FREE(w->fsb.suffixBytes);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
420 STR_FREE(w->fsb.suffixKB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
421 STR_FREE(w->fsb.suffixMB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
422 STR_FREE(w->fsb.suffixGB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
423 STR_FREE(w->fsb.suffixTB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
424
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
425 STR_FREE(w->fsb.errorTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
426 STR_FREE(w->fsb.errorIllegalChar);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
427 STR_FREE(w->fsb.errorRename);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
428 STR_FREE(w->fsb.errorFolder);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
429 STR_FREE(w->fsb.errorDelete);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
430 STR_FREE(w->fsb.errorOpenDir);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
431 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
432
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
433 static void fsb_resize(Widget widget) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
434 XnFileSelectionBox w = (XnFileSelectionBox)widget;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
435 (xmFormClassRec.core_class.resize)(widget);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
436
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
437 #ifdef FSB_ENABLE_DETAIL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
438 if(w->fsb.view[w->fsb.selectedview].update == FileListDetailUpdate) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
439 FileListDetailAdjustColWidth(w->fsb.grid);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
440 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
441 #endif
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
442 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
443
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
444 static void fsb_realize(Widget widget, XtValueMask *mask, XSetWindowAttributes *attributes) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
445 XnFileSelectionBox w = (XnFileSelectionBox)widget;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
446 (xmFormClassRec.core_class.realize)(widget, mask, attributes);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
447
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
448 FSBView view = w->fsb.view[w->fsb.selectedview];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
449 XmProcessTraversal(view.focus, XmTRAVERSE_CURRENT);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
450
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
451 #ifdef FSB_ENABLE_DETAIL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
452 if(w->fsb.view[w->fsb.selectedview].update == FileListDetailUpdate) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
453 FileListDetailAdjustColWidth(w->fsb.grid);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
454 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
455 #endif
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
456 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
457
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
458 static void FSBUpdateTitle(Widget w) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
459 if(XtParent(w)->core.widget_class == xmDialogShellWidgetClass) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
460 char *title = FSBDialogTitle(w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
461 XtVaSetValues(XtParent(w), XmNtitle, title, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
462 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
463 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
464
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
465 static Boolean fsb_set_values(Widget old, Widget request, Widget neww, ArgList args, Cardinal *num_args) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
466 Boolean r = False;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
467
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
468 XnFileSelectionBox o = (XnFileSelectionBox)old;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
469 XnFileSelectionBox n = (XnFileSelectionBox)neww;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
470
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
471 int setOkBtnLabel = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
472 int ismanaged = XtIsManaged(neww);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
473 Dimension width, height;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
474 if(!ismanaged) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
475 width = n->core.width;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
476 height = n->core.height;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
477 if(n->fsb.pathBar) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
478 n->fsb.pathBar->disableResize = True;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
479 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
480 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
481
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
482 if(o->fsb.selectedview != n->fsb.selectedview) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
483 int selectedview = n->fsb.selectedview;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
484 n->fsb.selectedview = o->fsb.selectedview;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
485 SelectView(n, selectedview);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
486 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
487
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
488 char *updateDir = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
489 int selectItem = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
490 if(o->fsb.selectedPath != n->fsb.selectedPath) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
491 STR_FREE(o->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
492 STRDUP_RES(n->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
493 XmTextFieldSetString(n->fsb.name, FileName(n->fsb.selectedPath));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
494 // also update current directory
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
495 updateDir = ParentPath(n->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
496 selectItem = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
497 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
498 if(o->fsb.currentPath != n->fsb.currentPath) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
499 STR_FREE(o->fsb.currentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
500 updateDir = strdup(n->fsb.currentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
501 n->fsb.currentPath = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
502 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
503
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
504 if(o->fsb.filterStr != n->fsb.filterStr) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
505 STR_FREE(o->fsb.filterStr);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
506 STRDUP_RES(n->fsb.filterStr);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
507 XmTextFieldSetString(XmDropDownGetText(n->fsb.filter), n->fsb.filterStr);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
508 if(!updateDir) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
509 filedialog_update_dir(n, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
510 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
511 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
512
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
513 if(updateDir) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
514 filedialog_update_dir(n, updateDir);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
515 PathBarSetPath(n->fsb.pathBar, updateDir);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
516 free(updateDir);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
517 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
518
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
519 if(o->fsb.type != n->fsb.type) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
520 if(n->fsb.type == FILEDIALOG_OPEN) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
521 XtVaSetValues(n->fsb.workarea, XmNbottomWidget, n->fsb.separator, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
522 XtUnmanageChild(n->fsb.name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
523 XtUnmanageChild(n->fsb.nameLabel);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
524 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
525 XtManageChild(n->fsb.name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
526 XtManageChild(n->fsb.nameLabel);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
527 XtVaSetValues(n->fsb.workarea, XmNbottomWidget, n->fsb.nameLabel, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
528 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
529 FSBUpdateTitle(neww);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
530 setOkBtnLabel = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
531 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
532
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
533 // label strings
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
534 int updateTitle = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
535 if(o->fsb.labelListView != n->fsb.labelListView) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
536 STR_FREE(o->fsb.labelListView);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
537 STRDUP_RES(n->fsb.labelListView);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
538 XmString label = XmStringCreateLocalized(n->fsb.labelListView);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
539 XtVaSetValues(n->fsb.viewSelectorList, XmNlabelString, label, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
540 XmStringFree(label);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
541 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
542 if(o->fsb.labelDetailView != n->fsb.labelDetailView) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
543 STR_FREE(o->fsb.labelDetailView);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
544 STRDUP_RES(n->fsb.labelDetailView);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
545 XmString label = XmStringCreateLocalized(n->fsb.labelDetailView);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
546 XtVaSetValues(n->fsb.viewSelectorDetail, XmNlabelString, label, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
547 if(n->fsb.detailToggleButton) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
548 XtVaSetValues(n->fsb.detailToggleButton, XmNlabelString, label, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
549 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
550 XmStringFree(label);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
551 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
552 if(o->fsb.labelOpenFileTitle != n->fsb.labelOpenFileTitle) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
553 STR_FREE(o->fsb.labelOpenFileTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
554 STRDUP_RES(n->fsb.labelOpenFileTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
555 updateTitle = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
556 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
557 if(o->fsb.labelSaveFileTitle != n->fsb.labelSaveFileTitle) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
558 STR_FREE(o->fsb.labelSaveFileTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
559 STRDUP_RES(n->fsb.labelSaveFileTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
560 updateTitle = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
561 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
562
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
563 if(o->fsb.labelDirUp != n->fsb.labelDirUp) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
564 XMSTR_FREE(o->fsb.labelDirUp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
565 XMS_STRDUP_RES(n->fsb.labelDirUp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
566 XtVaSetValues(n->fsb.dirUp, XmNlabelString, n->fsb.labelDirUp, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
567 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
568 if(o->fsb.labelHome != n->fsb.labelHome) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
569 XMSTR_FREE(o->fsb.labelHome);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
570 XMS_STRDUP_RES(n->fsb.labelHome);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
571 XtVaSetValues(n->fsb.dirUp, XmNlabelString, n->fsb.labelHome, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
572 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
573 if(o->fsb.labelNewFolder != n->fsb.labelNewFolder) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
574 XMSTR_FREE(o->fsb.labelNewFolder);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
575 XMS_STRDUP_RES(n->fsb.labelNewFolder);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
576 XtVaSetValues(n->fsb.newFolder, XmNlabelString, n->fsb.labelNewFolder, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
577 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
578 if(o->fsb.labelFilterButton != n->fsb.labelFilterButton) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
579 XMSTR_FREE(o->fsb.labelFilterButton);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
580 XMS_STRDUP_RES(n->fsb.labelFilterButton);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
581 XtVaSetValues(n->fsb.filterButton, XmNlabelString, n->fsb.labelFilterButton, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
582 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
583 if(o->fsb.labelShowHiddenFiles != n->fsb.labelShowHiddenFiles) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
584 XMSTR_FREE(o->fsb.labelShowHiddenFiles);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
585 XMS_STRDUP_RES(n->fsb.labelShowHiddenFiles);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
586 XtVaSetValues(n->fsb.showHiddenButtonW, XmNlabelString, n->fsb.labelShowHiddenFiles, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
587 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
588 if(o->fsb.labelDirectories != n->fsb.labelDirectories) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
589 XMSTR_FREE(o->fsb.labelDirectories);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
590 XMS_STRDUP_RES(n->fsb.labelDirectories);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
591 XtVaSetValues(n->fsb.lsDirLabel, XmNlabelString, n->fsb.labelDirectories, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
592 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
593 if(o->fsb.labelFiles != n->fsb.labelFiles) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
594 XMSTR_FREE(o->fsb.labelFiles);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
595 XMS_STRDUP_RES(n->fsb.labelFiles);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
596 XtVaSetValues(n->fsb.lsFileLabel, XmNlabelString, n->fsb.labelFiles, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
597 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
598 int recreateContextMenu = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
599 if(o->fsb.labelRename != n->fsb.labelRename) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
600 XMSTR_FREE(o->fsb.labelRename);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
601 XMS_STRDUP_RES(n->fsb.labelRename);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
602 recreateContextMenu = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
603 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
604 if(o->fsb.labelDelete != n->fsb.labelDelete) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
605 XMSTR_FREE(o->fsb.labelDelete);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
606 XMS_STRDUP_RES(n->fsb.labelDelete);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
607 recreateContextMenu = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
608 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
609
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
610 if(o->fsb.labelOpen != n->fsb.labelOpen) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
611 XMSTR_FREE(o->fsb.labelOpen);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
612 XMS_STRDUP_RES(n->fsb.labelOpen);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
613 setOkBtnLabel = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
614 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
615 if(o->fsb.labelSave != n->fsb.labelSave) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
616 XMSTR_FREE(o->fsb.labelSave);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
617 XMS_STRDUP_RES(n->fsb.labelSave);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
618 setOkBtnLabel = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
619 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
620 if(o->fsb.labelCancel != n->fsb.labelCancel) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
621 XMSTR_FREE(o->fsb.labelCancel);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
622 XMS_STRDUP_RES(n->fsb.labelCancel);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
623 XtVaSetValues(n->fsb.cancelBtn, XmNlabelString, n->fsb.labelCancel, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
624 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
625 if(o->fsb.labelHelp != n->fsb.labelHelp) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
626 XMSTR_FREE(o->fsb.labelHelp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
627 XMS_STRDUP_RES(n->fsb.labelHelp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
628 XtVaSetValues(n->fsb.helpBtn, XmNlabelString, n->fsb.labelHelp, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
629 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
630 if(o->fsb.labelFileName != n->fsb.labelFileName) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
631 XMSTR_FREE(o->fsb.labelFileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
632 XMS_STRDUP_RES(n->fsb.labelFileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
633 XtVaSetValues(n->fsb.nameLabel, XmNlabelString, n->fsb.labelFileName, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
634 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
635 if(o->fsb.labelDirectoryName != n->fsb.labelDirectoryName) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
636 XMSTR_FREE(o->fsb.labelDirectoryName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
637 XMS_STRDUP_RES(n->fsb.labelDirectoryName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
638 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
639 if(o->fsb.labelNewFileName != n->fsb.labelNewFileName) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
640 XMSTR_FREE(o->fsb.labelNewFileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
641 XMS_STRDUP_RES(n->fsb.labelNewFileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
642 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
643
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
644 if(o->fsb.labelDeleteFile != n->fsb.labelDeleteFile) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
645 STR_FREE(o->fsb.labelDeleteFile);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
646 STRDUP_RES(n->fsb.labelDeleteFile);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
647 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
648 #ifdef FSB_ENABLE_DETAIL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
649 if(o->fsb.detailHeadings != n->fsb.detailHeadings) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
650 STR_FREE(o->fsb.detailHeadings);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
651 STRDUP_RES(n->fsb.detailHeadings);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
652 XtVaSetValues(n->fsb.grid, XmNsimpleHeadings, n->fsb.detailHeadings, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
653 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
654 #endif
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
655 if(o->fsb.dateFormatSameYear != n->fsb.dateFormatSameYear) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
656 STR_FREE(o->fsb.dateFormatSameYear);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
657 STRDUP_RES(n->fsb.dateFormatSameYear);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
658 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
659 if(o->fsb.dateFormatOtherYear != n->fsb.dateFormatOtherYear) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
660 STR_FREE(o->fsb.dateFormatOtherYear);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
661 STRDUP_RES(n->fsb.dateFormatOtherYear);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
662 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
663 if(o->fsb.suffixBytes != n->fsb.suffixBytes) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
664 STR_FREE(o->fsb.suffixBytes);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
665 STRDUP_RES(n->fsb.suffixBytes);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
666 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
667 if(o->fsb.suffixMB != n->fsb.suffixMB) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
668 STR_FREE(o->fsb.suffixMB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
669 STRDUP_RES(n->fsb.suffixMB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
670 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
671 if(o->fsb.suffixGB != n->fsb.suffixGB) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
672 STR_FREE(o->fsb.suffixGB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
673 STRDUP_RES(n->fsb.suffixGB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
674 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
675 if(o->fsb.suffixTB != n->fsb.suffixTB) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
676 STR_FREE(o->fsb.suffixTB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
677 STRDUP_RES(n->fsb.suffixTB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
678 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
679 if(o->fsb.errorTitle != n->fsb.errorTitle) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
680 STR_FREE(o->fsb.errorTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
681 STRDUP_RES(n->fsb.errorTitle);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
682 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
683 if(o->fsb.errorIllegalChar != n->fsb.errorIllegalChar) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
684 STR_FREE(o->fsb.errorIllegalChar);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
685 STRDUP_RES(n->fsb.errorIllegalChar);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
686 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
687 if(o->fsb.errorRename != n->fsb.errorRename) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
688 STR_FREE(o->fsb.errorRename);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
689 STRDUP_RES(n->fsb.errorRename);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
690 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
691 if(o->fsb.errorFolder != n->fsb.errorFolder) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
692 STR_FREE(o->fsb.errorFolder);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
693 STRDUP_RES(n->fsb.errorFolder);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
694 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
695 if(o->fsb.errorDelete != n->fsb.errorDelete) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
696 STR_FREE(o->fsb.errorDelete);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
697 STRDUP_RES(n->fsb.errorDelete);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
698 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
699 if(o->fsb.errorOpenDir != n->fsb.errorOpenDir) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
700 STR_FREE(o->fsb.errorOpenDir);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
701 STRDUP_RES(n->fsb.errorOpenDir);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
702 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
703
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
704 if(updateTitle) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
705 FSBUpdateTitle(neww);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
706 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
707 if(recreateContextMenu) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
708 XtDestroyWidget(n->fsb.listContextMenu);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
709 XtDestroyWidget(n->fsb.gridContextMenu);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
710 n->fsb.listContextMenu = CreateContextMenu(n, n->fsb.filelist, FileContextMenuCB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
711 n->fsb.gridContextMenu = CreateContextMenu(n, n->fsb.grid, FileContextMenuCB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
712 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
713 if(setOkBtnLabel) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
714 XtVaSetValues(n->fsb.okBtn, XmNlabelString, n->fsb.type == FILEDIALOG_OPEN ? n->fsb.labelOpen : n->fsb.labelSave, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
715 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
716
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
717 if(!ismanaged && !n->fsb.disable_set_values) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
718 n->fsb.disable_set_values = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
719 XtVaSetValues(neww, XmNwidth, width, XmNheight, height, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
720 n->fsb.disable_set_values = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
721
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
722 if(n->fsb.pathBar)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
723 n->fsb.pathBar->disableResize = False;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
724 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
725
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
726 if(selectItem) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
727 if(ismanaged) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
728 FSBSelectItem(n, FileName(n->fsb.selectedPath));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
729 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
730 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
731
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
732 Boolean fr = (xmFormClassRec.core_class.set_values)(old, request, neww, args, num_args);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
733 return fr ? fr : r;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
734 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
735
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
736 static void fsb_insert_child(Widget child) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
737 XnFileSelectionBox p = (XnFileSelectionBox)XtParent(child);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
738 (xmFormClassRec.composite_class.insert_child)(child);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
739
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
740 if(!p->fsb.gui_created) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
741 return;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
742 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
743
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
744 // custom child widget insert
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
745 XtVaSetValues(child,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
746 XmNbottomAttachment, XmATTACH_WIDGET,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
747 XmNbottomWidget, p->fsb.bottom_widget,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
748 XmNbottomOffset, p->fsb.widgetSpacing,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
749 XmNleftAttachment, XmATTACH_FORM,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
750 XmNleftOffset, p->fsb.windowSpacing,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
751 XmNrightAttachment, XmATTACH_FORM,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
752 XmNrightAttachment, XmATTACH_FORM,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
753 XmNrightOffset, p->fsb.windowSpacing,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
754 NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
755
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
756
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
757 XtVaSetValues(p->fsb.listform,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
758 XmNbottomWidget, child,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
759 XmNbottomOffset, 0,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
760 NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
761
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
762 p->fsb.workarea = child;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
763 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
764
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
765 Boolean fsb_acceptfocus(Widget widget, Time *time) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
766 return 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
767 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
768
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
769 static void fsb_mapcb(Widget widget, XtPointer u, XtPointer cb) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
770 XnFileSelectionBox w = (XnFileSelectionBox)widget;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
771 pathbar_resize(w->fsb.pathBar->widget, w->fsb.pathBar, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
772
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
773 if(w->fsb.type == FILEDIALOG_OPEN) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
774 FSBView view = w->fsb.view[w->fsb.selectedview];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
775 XmProcessTraversal(view.focus, XmTRAVERSE_CURRENT);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
776 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
777 XmProcessTraversal(w->fsb.name, XmTRAVERSE_CURRENT);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
778 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
779
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
780
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
781 if(w->fsb.selectedPath) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
782 FSBSelectItem(w, FileName(w->fsb.selectedPath));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
783 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
784 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
785
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
786 static void FocusInAP(Widget w, XEvent *event, String *args, Cardinal *nArgs) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
787
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
788 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
789
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
790 static int apply_filter(XnFileSelectionBox w, const char *pattern, const char *string) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
791 if(!pattern) return 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
792
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
793 FSBFilterFunc func = w->fsb.filterFunc ? w->fsb.filterFunc : FSBGlobFilter;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
794 return func(pattern, string);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
795 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
796
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
797 static int FSBGlobFilter(const char *a, const char *b) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
798 return fnmatch(a, b, 0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
799 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
800
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
801
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
802 static void errCB(Widget w, XtPointer d, XtPointer cbs) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
803 XtDestroyWidget(w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
804 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
805
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
806 static void ErrDialog(XnFileSelectionBox w, const char *title, const char *errmsg) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
807 Arg args[16];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
808 int n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
809
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
810 XmString titleStr = XmStringCreateLocalized((char*)title);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
811 XmString msg = XmStringCreateLocalized((char*)errmsg);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
812
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
813 XtSetArg(args[n], XmNdialogTitle, titleStr); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
814 XtSetArg(args[n], XmNselectionLabelString, msg); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
815 XtSetArg(args[n], XmNokLabelString, w->fsb.labelOk); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
816 XtSetArg(args[n], XmNcancelLabelString, w->fsb.labelCancel); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
817
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
818 Widget dialog = XmCreatePromptDialog ((Widget)w, "NewFolderPrompt", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
819
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
820 Widget help = XmSelectionBoxGetChild(dialog, XmDIALOG_HELP_BUTTON);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
821 XtUnmanageChild(help);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
822 Widget cancel = XmSelectionBoxGetChild(dialog, XmDIALOG_CANCEL_BUTTON);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
823 XtUnmanageChild(cancel);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
824 Widget text = XmSelectionBoxGetChild(dialog, XmDIALOG_TEXT);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
825 XtUnmanageChild(text);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
826
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
827 XtAddCallback(dialog, XmNokCallback, errCB, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
828
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
829 XtManageChild(dialog);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
830
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
831 XmStringFree(titleStr);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
832 XmStringFree(msg);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
833 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
834
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
835 static void rename_file_cb(Widget w, const char *path, XmSelectionBoxCallbackStruct *cb) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
836 XnFileSelectionBox fsb = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
837 XtVaGetValues(w, XmNuserData, &fsb, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
838
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
839 char *fileName = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
840 XmStringGetLtoR(cb->value, XmSTRING_DEFAULT_CHARSET, &fileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
841
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
842 // make sure the new file name doesn't contain a path separator
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
843 if(strchr(fileName, '/')) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
844 ErrDialog(fsb, fsb->fsb.errorTitle, fsb->fsb.errorIllegalChar);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
845 XtFree(fileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
846 return;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
847 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
848
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
849 char *parentPath = ParentPath(path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
850 char *newPath = ConcatPath(parentPath, fileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
851
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
852 if(rename(path, newPath)) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
853 char errmsg[256];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
854 snprintf(errmsg, 256, fsb->fsb.errorRename, strerror(errno));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
855 ErrDialog(fsb, fsb->fsb.errorTitle, errmsg);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
856 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
857 filedialog_update_dir(fsb, parentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
858 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
859
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
860 free(parentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
861 free(newPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
862 XtFree(fileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
863 XtDestroyWidget(XtParent(w));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
864 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
865
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
866 static void selectionbox_cancel(Widget w, XtPointer data, XtPointer d) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
867 XtDestroyWidget(XtParent(w));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
868 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
869
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
870 static void FSBRename(XnFileSelectionBox fsb, const char *path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
871 Arg args[16];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
872 int n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
873 Widget w = (Widget)fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
874
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
875 char *name = FileName((char*)path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
876
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
877 XmString filename = XmStringCreateLocalized(name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
878 XtSetArg(args[n], XmNselectionLabelString,fsb->fsb.labelNewFileName); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
879 XtSetArg(args[n], XmNtextString, filename); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
880 XtSetArg(args[n], XmNuserData, fsb); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
881 XtSetArg(args[n], XmNdialogTitle, fsb->fsb.labelRename); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
882 XtSetArg(args[n], XmNokLabelString, fsb->fsb.labelOk); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
883 XtSetArg(args[n], XmNcancelLabelString, fsb->fsb.labelCancel); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
884 Widget dialog = XmCreatePromptDialog (w, "RenameFilePrompt", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
885
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
886 Widget help = XmSelectionBoxGetChild(dialog, XmDIALOG_HELP_BUTTON);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
887 XtUnmanageChild(help);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
888
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
889 XtAddCallback(dialog, XmNokCallback, (XtCallbackProc)rename_file_cb, (char*)path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
890 XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)selectionbox_cancel, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
891
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
892 XmStringFree(filename);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
893 XtManageChild(dialog);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
894 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
895
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
896 static void delete_file_cb(Widget w, const char *path, XmSelectionBoxCallbackStruct *cb) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
897 XnFileSelectionBox fsb = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
898 XtVaGetValues(w, XmNuserData, &fsb, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
899
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
900 if(unlink(path)) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
901 char errmsg[256];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
902 snprintf(errmsg, 256, fsb->fsb.errorDelete, strerror(errno));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
903 ErrDialog(fsb, fsb->fsb.errorTitle, errmsg);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
904 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
905 char *parentPath = ParentPath(path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
906 filedialog_update_dir(fsb, parentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
907 free(parentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
908 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
909
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
910 XtDestroyWidget(XtParent(w));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
911 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
912
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
913 static void FSBDelete(XnFileSelectionBox fsb, const char *path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
914 Arg args[16];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
915 int n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
916 Widget w = (Widget)fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
917
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
918 char *name = FileName((char*)path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
919 size_t len = strlen(name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
920 size_t msglen = len + strlen(fsb->fsb.labelDeleteFile) + 4;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
921 char *msg = malloc(msglen);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
922 snprintf(msg, msglen, fsb->fsb.labelDeleteFile, name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
923
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
924 XmString prompt = XmStringCreateLocalized(msg);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
925 XtSetArg(args[n], XmNselectionLabelString, prompt); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
926 XtSetArg(args[n], XmNuserData, fsb); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
927 XtSetArg(args[n], XmNdialogTitle, fsb->fsb.labelDelete); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
928 XtSetArg(args[n], XmNokLabelString, fsb->fsb.labelOk); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
929 XtSetArg(args[n], XmNcancelLabelString, fsb->fsb.labelCancel); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
930 Widget dialog = XmCreatePromptDialog (w, "DeleteFilePrompt", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
931
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
932 Widget help = XmSelectionBoxGetChild(dialog, XmDIALOG_HELP_BUTTON);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
933 XtUnmanageChild(help);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
934 Widget text = XmSelectionBoxGetChild(dialog, XmDIALOG_TEXT);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
935 XtUnmanageChild(text);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
936
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
937 XtAddCallback(dialog, XmNokCallback, (XtCallbackProc)delete_file_cb, (char*)path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
938 XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)selectionbox_cancel, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
939
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
940 free(msg);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
941 XmStringFree(prompt);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
942 XtManageChild(dialog);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
943 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
944
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
945 static void FSBSelectItem(XnFileSelectionBox fsb, const char *item) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
946 FSBView view = fsb->fsb.view[fsb->fsb.selectedview];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
947 if(view.select) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
948 view.select((Widget)fsb, view.widget, item);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
949 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
950 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
951
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
952 static char* set_selected_path(XnFileSelectionBox data, XmString item)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
953 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
954 char *name = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
955 XmStringGetLtoR(item, XmFONTLIST_DEFAULT_TAG, &name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
956 if(!name) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
957 return NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
958 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
959 char *path = ConcatPath(data->fsb.currentPath, name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
960 XtFree(name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
961
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
962 if(data->fsb.selectedPath) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
963 free(data->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
964 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
965 data->fsb.selectedPath = path;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
966
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
967 return path;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
968 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
969
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
970 // item0: rename
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
971 // item1: delete
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
972 static void FileContextMenuCB(Widget item, XtPointer index, XtPointer cd) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
973 intptr_t i = (intptr_t)index;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
974 Widget parent = XtParent(item);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
975 XnFileSelectionBox fsb = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
976 XtVaGetValues(parent, XmNuserData, &fsb, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
977
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
978 const char *path = fsb->fsb.selectedPath;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
979 if(path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
980 if(i == 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
981 FSBRename(fsb, path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
982 } else if(i == 1) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
983 FSBDelete(fsb, path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
984 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
985 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
986 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
987
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
988 static Widget CreateContextMenu(XnFileSelectionBox fsb, Widget parent, XtCallbackProc callback) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
989 return XmVaCreateSimplePopupMenu(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
990 parent, "popup", callback, XmNpopupEnabled, XmPOPUP_AUTOMATIC,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
991 XmNuserData, fsb,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
992 XmVaPUSHBUTTON, fsb->fsb.labelRename, 'R', NULL, NULL,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
993 XmVaPUSHBUTTON, fsb->fsb.labelDelete, 'D', NULL, NULL,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
994 NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
995 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
996
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
997
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
998 static void FileListUpdate(Widget fsb, Widget view, FileElm *dirs, int dircount, FileElm *files, int filecount, const char *filter, int maxnamelen, void *userData) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
999 XnFileSelectionBox data = userData;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1000 FileListWidgetAdd(data, data->fsb.filelist, data->fsb.showHidden, filter, files, filecount);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1001 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1002
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1003 static void FileListSelect(Widget fsb, Widget view, const char *item) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1004 XnFileSelectionBox w = (XnFileSelectionBox)fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1005
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1006 int numItems = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1007 XmStringTable items = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1008 XtVaGetValues(w->fsb.filelist, XmNitemCount, &numItems, XmNitems, &items, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1009
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1010 for(int i=0;i<numItems;i++) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1011 char *str = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1012 XmStringGetLtoR(items[i], XmFONTLIST_DEFAULT_TAG, &str);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1013 if(!strcmp(str, item)) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1014 XmListSelectPos(w->fsb.filelist, i+1, False);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1015 break;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1016 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1017 XtFree(str);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1018 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1019 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1020
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1021 static void FileListCleanup(Widget fsb, Widget view, void *userData) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1022 XnFileSelectionBox data = userData;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1023 XmListDeleteAllItems(data->fsb.filelist);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1024 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1025
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1026 static void FileListDestroy(Widget fsb, Widget view, void *userData) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1027 // unused
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1028 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1029
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1030 static void FileListActivateCB(Widget w, XnFileSelectionBox data, XmListCallbackStruct *cb)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1031 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1032 char *path = set_selected_path(data, cb->item);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1033 if(path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1034 data->fsb.end = True;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1035 data->fsb.status = FILEDIALOG_OK;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1036 data->fsb.selIsDir = False;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1037 FileSelectionCallback(data, data->fsb.okCallback, XmCR_OK, data->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1038 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1039 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1040
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1041 static void FileListSelectCB(Widget w, XnFileSelectionBox data, XmListCallbackStruct *cb)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1042 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1043 if(data->fsb.type == FILEDIALOG_SAVE) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1044 char *name = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1045 XmStringGetLtoR(cb->item, XmFONTLIST_DEFAULT_TAG, &name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1046 XmTextFieldSetString(data->fsb.name, name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1047 XtFree(name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1048 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1049 char *path = set_selected_path(data, cb->item);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1050 if(path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1051 data->fsb.selIsDir = False;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1052 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1053 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1054 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1055
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1056
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1057 static void FileListWidgetAdd(XnFileSelectionBox fsb, Widget w, int showHidden, const char *filter, FileElm *ls, int count)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1058 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1059 if(count > 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1060 XmStringTable items = calloc(count, sizeof(XmString));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1061 int i = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1062
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1063 for(int j=0;j<count;j++) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1064 FileElm *e = &ls[j];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1065
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1066 char *name = FileName(e->path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1067 if((!showHidden && name[0] == '.') || apply_filter(fsb, filter, name)) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1068 continue;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1069 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1070
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1071 items[i] = XmStringCreateLocalized(name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1072 i++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1073 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1074 XmListAddItems(w, items, i, 0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1075 for(i=0;i<count;i++) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1076 XmStringFree(items[i]);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1077 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1078 free(items);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1079 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1080 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1081
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1082 #ifdef FSB_ENABLE_DETAIL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1083 static void FileListDetailUpdate(Widget fsb, Widget view, FileElm *dirs, int dircount, FileElm *files, int filecount, const char *filter, int maxnamelen, void *userData) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1084 XnFileSelectionBox data = userData;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1085 FileListDetailAdd(data, data->fsb.grid, data->fsb.showHidden, filter, files, filecount, maxnamelen);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1086 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1087 #endif
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1088
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1089 /*
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1090 * create file size string with kb/mb/gb/tb suffix
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1091 */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1092 static char* size_str(XnFileSelectionBox fsb, FileElm *f) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1093 char *str = malloc(16);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1094 uint64_t size = f->size;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1095
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1096 if(f->isDirectory) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1097 str[0] = '\0';
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1098 } else if(size < 0x400) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1099 snprintf(str, 16, "%d %s", (int)size, fsb->fsb.suffixBytes);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1100 } else if(size < 0x100000) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1101 float s = (float)size/0x400;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1102 int diff = (s*100 - (int)s*100);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1103 if(diff > 90) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1104 diff = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1105 s += 0.10f;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1106 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1107 if(size < 0x2800 && diff != 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1108 // size < 10 KiB
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1109 snprintf(str, 16, "%.1f %s", s, fsb->fsb.suffixKB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1110 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1111 snprintf(str, 16, "%.0f %s", s, fsb->fsb.suffixKB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1112 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1113 } else if(size < 0x40000000) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1114 float s = (float)size/0x100000;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1115 int diff = (s*100 - (int)s*100);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1116 if(diff > 90) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1117 diff = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1118 s += 0.10f;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1119 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1120 if(size < 0xa00000 && diff != 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1121 // size < 10 MiB
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1122 snprintf(str, 16, "%.1f %s", s, fsb->fsb.suffixMB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1123 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1124 snprintf(str, 16, "%.0f %s", s, fsb->fsb.suffixMB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1125 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1126 } else if(size < 0x1000000000ULL) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1127 float s = (float)size/0x40000000;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1128 int diff = (s*100 - (int)s*100);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1129 if(diff > 90) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1130 diff = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1131 s += 0.10f;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1132 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1133 if(size < 0x280000000 && diff != 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1134 // size < 10 GiB
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1135 snprintf(str, 16, "%.1f %s", s, fsb->fsb.suffixGB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1136 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1137 snprintf(str, 16, "%.0f %s", s, fsb->fsb.suffixGB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1138 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1139 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1140 size /= 1024;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1141 float s = (float)size/0x40000000;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1142 int diff = (s*100 - (int)s*100);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1143 if(diff > 90) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1144 diff = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1145 s += 0.10f;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1146 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1147 if(size < 0x280000000 && diff != 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1148 // size < 10 TiB
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1149 snprintf(str, 16, "%.1f %s", s, fsb->fsb.suffixTB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1150 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1151 snprintf(str, 16, "%.0f %s", s, fsb->fsb.suffixTB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1152 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1153 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1154 return str;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1155 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1156
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1157 static char* date_str(XnFileSelectionBox fsb, time_t tm) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1158 struct tm t;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1159 struct tm n;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1160 time_t now = time(NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1161
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1162 localtime_r(&tm, &t);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1163 localtime_r(&now, &n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1164
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1165 char *str = malloc(24);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1166 if(t.tm_year == n.tm_year) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1167 strftime(str, 24, fsb->fsb.dateFormatSameYear, &t);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1168 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1169 strftime(str, 24, fsb->fsb.dateFormatOtherYear, &t);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1170 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1171 return str;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1172 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1173
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1174 #ifdef FSB_ENABLE_DETAIL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1175 static void FileListDetailAdjustColWidth(Widget grid) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1176 XmLGridColumn column0 = XmLGridGetColumn(grid, XmCONTENT, 0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1177 XmLGridColumn column1 = XmLGridGetColumn(grid, XmCONTENT, 1);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1178 XmLGridColumn column2 = XmLGridGetColumn(grid, XmCONTENT, 2);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1179
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1180 Dimension col0Width = XmLGridColumnWidthInPixels(column0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1181 Dimension col1Width = XmLGridColumnWidthInPixels(column1);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1182 Dimension col2Width = XmLGridColumnWidthInPixels(column2);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1183
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1184 Dimension totalWidth = col0Width + col1Width + col2Width;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1185
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1186 Dimension gridWidth = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1187 Dimension gridShadow = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1188 XtVaGetValues(grid, XmNwidth, &gridWidth, XmNshadowThickness, &gridShadow, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1189
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1190 Dimension widthDiff = gridWidth - totalWidth - gridShadow - gridShadow;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1191
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1192 if(gridWidth > totalWidth) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1193 XtVaSetValues(grid,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1194 XmNcolumnRangeStart, 0,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1195 XmNcolumnRangeEnd, 0,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1196 XmNcolumnWidth, col0Width + widthDiff - XmLGridVSBWidth(grid) - 2,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1197 XmNcolumnSizePolicy, XmCONSTANT,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1198 NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1199 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1200 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1201
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1202 static void FileListDetailAdd(XnFileSelectionBox fsb, Widget grid, int showHidden, const char *filter, FileElm *ls, int count, int maxWidth)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1203 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1204 XmLGridAddRows(grid, XmCONTENT, 1, count);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1205
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1206 int row = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1207 for(int i=0;i<count;i++) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1208 FileElm *e = &ls[i];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1209
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1210 char *name = FileName(e->path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1211 if((!showHidden && name[0] == '.') || (!e->isDirectory && apply_filter(fsb, filter, name))) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1212 continue;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1213 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1214
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1215 // name
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1216 XmString str = XmStringCreateLocalized(name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1217 XtVaSetValues(grid,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1218 XmNcolumn, 0,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1219 XmNrow, row,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1220 XmNcellString, str, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1221 XmStringFree(str);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1222 // size
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1223 char *szbuf = size_str(fsb, e);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1224 str = XmStringCreateLocalized(szbuf);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1225 XtVaSetValues(grid,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1226 XmNcolumn, 1,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1227 XmNrow, row,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1228 XmNcellString, str, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1229 free(szbuf);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1230 XmStringFree(str);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1231 // date
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1232 char *datebuf = date_str(fsb, e->lastModified);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1233 str = XmStringCreateLocalized(datebuf);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1234 XtVaSetValues(grid,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1235 XmNcolumn, 2,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1236 XmNrow, row,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1237 XmNcellString, str, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1238 free(datebuf);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1239 XmStringFree(str);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1240
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1241 XtVaSetValues(grid, XmNrow, row, XmNrowUserData, e, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1242 row++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1243 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1244
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1245 // remove unused rows
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1246 if(count > row) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1247 XmLGridDeleteRows(grid, XmCONTENT, row, count-row);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1248 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1249
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1250 if(maxWidth < 16) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1251 maxWidth = 16;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1252 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1253
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1254 XtVaSetValues(grid,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1255 XmNcolumnRangeStart, 0,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1256 XmNcolumnRangeEnd, 0,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1257 XmNcolumnWidth, maxWidth,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1258 XmNcellAlignment, XmALIGNMENT_LEFT,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1259 XmNcolumnSizePolicy, XmVARIABLE,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1260 NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1261 XtVaSetValues(grid,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1262 XmNcolumnRangeStart, 1,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1263 XmNcolumnRangeEnd, 1,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1264 XmNcolumnWidth, 9,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1265 XmNcellAlignment, XmALIGNMENT_LEFT,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1266 XmNcolumnSizePolicy, XmVARIABLE,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1267 NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1268 XtVaSetValues(grid,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1269 XmNcolumnRangeStart, 2,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1270 XmNcolumnRangeEnd, 2,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1271 XmNcolumnWidth, 16,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1272 XmNcellAlignment, XmALIGNMENT_RIGHT,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1273 XmNcolumnSizePolicy, XmVARIABLE,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1274 NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1275
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1276 FileListDetailAdjustColWidth(grid);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1277 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1278
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1279 static void FileListDetailSelect(Widget fsb, Widget view, const char *item) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1280 XnFileSelectionBox w = (XnFileSelectionBox)fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1281
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1282 int numRows = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1283 XtVaGetValues(w->fsb.grid, XmNrows, &numRows, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1284
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1285 XmLGridColumn col = XmLGridGetColumn(w->fsb.grid, XmCONTENT, 0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1286 for(int i=0;i<numRows;i++) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1287 XmLGridRow row = XmLGridGetRow(w->fsb.grid, XmCONTENT, i);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1288 FileElm *elm = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1289 XtVaGetValues(w->fsb.grid, XmNrowPtr, row, XmNcolumnPtr, col, XmNrowUserData, &elm, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1290 if(elm) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1291 if(!strcmp(item, FileName(elm->path))) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1292 XmLGridSelectRow(w->fsb.grid, i, False);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1293 XmLGridFocusAndShowRow(w->fsb.grid, i+1);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1294 break;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1295 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1296 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1297 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1298 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1299
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1300 static void FileListDetailCleanup(Widget fsb, Widget view, void *userData) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1301 XnFileSelectionBox data = userData;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1302 // cleanup grid
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1303 Cardinal rows = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1304 XtVaGetValues(data->fsb.grid, XmNrows, &rows, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1305 XmLGridDeleteRows(data->fsb.grid, XmCONTENT, 0, rows);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1306 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1307
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1308 static void FileListDetailDestroy(Widget fsb, Widget view, void *userData) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1309 // unused
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1310 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1311 #endif
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1312
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1313 static void create_folder(Widget w, XnFileSelectionBox data, XmSelectionBoxCallbackStruct *cbs) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1314 char *fileName = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1315 XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &fileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1316
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1317 char *newFolder = ConcatPath(data->fsb.currentPath ? data->fsb.currentPath : "", fileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1318 if(mkdir(newFolder, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1319 char errmsg[256];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1320 snprintf(errmsg, 256, data->fsb.errorFolder, strerror(errno));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1321 ErrDialog(data, data->fsb.errorTitle, errmsg);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1322 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1323 char *p = strdup(data->fsb.currentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1324 filedialog_update_dir(data, p);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1325 free(p);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1326 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1327 free(newFolder);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1328
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1329 XtDestroyWidget(XtParent(w));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1330 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1331
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1332 static void new_folder_cancel(Widget w, XnFileSelectionBox data, XtPointer d) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1333 XtDestroyWidget(XtParent(w));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1334 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1335
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1336 static void FSBNewFolder(Widget w, XnFileSelectionBox data, XtPointer u)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1337 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1338 Arg args[16];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1339 int n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1340
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1341 XtSetArg(args[n], XmNdialogTitle, data->fsb.labelNewFolder); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1342 XtSetArg (args[n], XmNselectionLabelString, data->fsb.labelDirectoryName); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1343 XtSetArg(args[n], XmNokLabelString, data->fsb.labelOk); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1344 XtSetArg(args[n], XmNcancelLabelString, data->fsb.labelCancel); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1345 Widget dialog = XmCreatePromptDialog (w, "NewFolderPrompt", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1346
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1347 Widget help = XmSelectionBoxGetChild(dialog, XmDIALOG_HELP_BUTTON);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1348 XtUnmanageChild(help);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1349
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1350 XtAddCallback(dialog, XmNokCallback, (XtCallbackProc)create_folder, data);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1351 XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)new_folder_cancel, data);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1352
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1353 XtManageChild(dialog);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1354
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1355 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1356
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1357 static void FSBHome(Widget w, XnFileSelectionBox data, XtPointer u) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1358 const char *homePath = data->fsb.homePath ? data->fsb.homePath : GetHomeDir();
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1359 filedialog_update_dir(data, homePath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1360 PathBarSetPath(data->fsb.pathBar, homePath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1361 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1362
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1363
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1364 /*
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1365 * file_cmp_field
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1366 * 0: compare path
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1367 * 1: compare size
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1368 * 2: compare mtime
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1369 */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1370 static int file_cmp_field = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1371
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1372 /*
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1373 * 1 or -1
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1374 */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1375 static int file_cmp_order = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1376
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1377 static int filecmp(const void *f1, const void *f2)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1378 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1379 const FileElm *file1 = f1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1380 const FileElm *file2 = f2;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1381 if(file1->isDirectory != file2->isDirectory) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1382 return file1->isDirectory < file2->isDirectory;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1383 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1384
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1385 int cmp_field = file_cmp_field;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1386 int cmp_order = file_cmp_order;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1387 if(file1->isDirectory) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1388 cmp_field = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1389 cmp_order = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1390 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1391
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1392 int ret = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1393 switch(cmp_field) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1394 case 0: {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1395 ret = strcmp(FileName(file1->path), FileName(file2->path));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1396 break;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1397 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1398 case 1: {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1399 if(file1->size < file2->size) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1400 ret = -1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1401 } else if(file1->size == file2->size) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1402 ret = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1403 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1404 ret = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1405 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1406 break;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1407 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1408 case 2: {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1409 if(file1->lastModified < file2->lastModified) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1410 ret = -1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1411 } else if(file1->lastModified == file2->lastModified) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1412 ret = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1413 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1414 ret = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1415 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1416 break;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1417 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1418 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1419
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1420 return ret * cmp_order;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1421 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1422
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1423
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1424 static void free_files(FileElm *ls, int count)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1425 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1426 for(int i=0;i<count;i++) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1427 if(ls[i].path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1428 free(ls[i].path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1429 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1430 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1431 free(ls);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1432 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1433
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1434 static void filedialog_cleanup_filedata(XnFileSelectionBox data)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1435 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1436 free_files(data->fsb.dirs, data->fsb.dircount);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1437 free_files(data->fsb.files, data->fsb.filecount);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1438 data->fsb.dirs = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1439 data->fsb.files = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1440 data->fsb.dircount = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1441 data->fsb.filecount = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1442 data->fsb.maxnamelen = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1443 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1444
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1445 #define FILE_ARRAY_SIZE 1024
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1446
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1447 static void file_array_add(FileElm **files, int *alloc, int *count, FileElm elm) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1448 int c = *count;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1449 int a = *alloc;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1450 if(c >= a) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1451 a *= 2;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1452 FileElm *newarray = realloc(*files, sizeof(FileElm) * a);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1453
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1454 *files = newarray;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1455 *alloc = a;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1456 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1457
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1458 (*files)[c] = elm;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1459 c++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1460 *count = c;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1461 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1462
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1463 static int filedialog_update_dir(XnFileSelectionBox data, const char *path)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1464 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1465 DIR *dir = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1466 if(path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1467 // try to check first, if we can open the path
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1468 dir = opendir(path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1469 if(!dir) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1470 char errmsg[256];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1471 snprintf(errmsg, 256, data->fsb.errorOpenDir, strerror(errno));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1472
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1473 ErrDialog(data, data->fsb.errorTitle, errmsg);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1474 return 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1475 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1476 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1477
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1478 FSBView view = data->fsb.view[data->fsb.selectedview];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1479 view.cleanup((Widget)data, view.widget, view.userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1480
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1481 if(view.useDirList) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1482 XmListDeleteAllItems(data->fsb.dirlist);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1483 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1484
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1485 /* read dir and insert items */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1486 if(path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1487 int dircount = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1488 int filecount = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1489 size_t maxNameLen = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1490
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1491 FileElm *dirs = calloc(sizeof(FileElm), FILE_ARRAY_SIZE);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1492 FileElm *files = calloc(sizeof(FileElm), FILE_ARRAY_SIZE);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1493 int dirs_alloc = FILE_ARRAY_SIZE;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1494 int files_alloc = FILE_ARRAY_SIZE;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1495
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1496 filedialog_cleanup_filedata(data);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1497
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1498 /* dir reading complete - set the path textfield */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1499 XmTextFieldSetString(data->fsb.path, (char*)path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1500 char *oldPath = data->fsb.currentPath;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1501 data->fsb.currentPath = strdup(path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1502 if(oldPath) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1503 free(oldPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1504 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1505 path = data->fsb.currentPath;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1506
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1507 struct dirent *ent;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1508 while((ent = readdir(dir)) != NULL) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1509 if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1510 continue;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1511 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1512
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1513 char *entpath = ConcatPath(path, ent->d_name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1514
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1515 struct stat s;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1516 if(stat(entpath, &s)) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1517 free(entpath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1518 continue;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1519 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1520
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1521 FileElm new_entry;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1522 new_entry.path = entpath;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1523 new_entry.isDirectory = S_ISDIR(s.st_mode);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1524 new_entry.size = (uint64_t)s.st_size;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1525 new_entry.lastModified = s.st_mtime;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1526
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1527 size_t nameLen = strlen(ent->d_name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1528 if(nameLen > maxNameLen) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1529 maxNameLen = nameLen;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1530 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1531
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1532 if(new_entry.isDirectory) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1533 file_array_add(&dirs, &dirs_alloc, &dircount, new_entry);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1534 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1535 file_array_add(&files, &files_alloc, &filecount, new_entry);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1536 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1537 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1538 closedir(dir);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1539
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1540 data->fsb.dirs = dirs;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1541 data->fsb.files = files;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1542 data->fsb.dircount = dircount;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1543 data->fsb.filecount = filecount;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1544 data->fsb.maxnamelen = maxNameLen;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1545
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1546 // sort file arrays
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1547 qsort(dirs, dircount, sizeof(FileElm), filecmp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1548 qsort(files, filecount, sizeof(FileElm), filecmp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1549 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1550
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1551 Widget filterTF = XmDropDownGetText(data->fsb.filter);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1552 char *filter = XmTextFieldGetString(filterTF);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1553 char *filterStr = filter;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1554 if(!filter || strlen(filter) == 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1555 filterStr = "*";
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1556 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1557
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1558 if(view.useDirList) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1559 FileListWidgetAdd(data, data->fsb.dirlist, data->fsb.showHidden, NULL, data->fsb.dirs, data->fsb.dircount);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1560 view.update(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1561 (Widget)data,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1562 view.widget,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1563 NULL,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1564 0,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1565 data->fsb.files,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1566 data->fsb.filecount,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1567 filterStr,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1568 data->fsb.maxnamelen,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1569 view.userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1570 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1571 view.update(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1572 (Widget)data,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1573 view.widget,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1574 data->fsb.dirs,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1575 data->fsb.dircount,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1576 data->fsb.files,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1577 data->fsb.filecount,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1578 filterStr,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1579 data->fsb.maxnamelen,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1580 view.userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1581 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1582
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1583 if(filter) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1584 XtFree(filter);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1585 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1586
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1587 return 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1588 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1589
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1590
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1591 static void dirlist_activate(Widget w, XnFileSelectionBox data, XmListCallbackStruct *cb)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1592 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1593 char *path = set_selected_path(data, cb->item);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1594 if(path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1595 if(!filedialog_update_dir(data, path)) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1596 PathBarSetPath(data->fsb.pathBar, path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1597 data->fsb.selIsDir = TRUE;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1598 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1599 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1600 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1601
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1602 static void dirlist_select(Widget w, XnFileSelectionBox data, XmListCallbackStruct *cb)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1603 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1604 char *path = set_selected_path(data, cb->item);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1605 if(path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1606 data->fsb.selIsDir = TRUE;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1607 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1608 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1609
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1610 static void filedialog_enable_detailview(Widget w, XnFileSelectionBox data, XmToggleButtonCallbackStruct *tb) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1611 SelectView(data, tb->set); // 0: list, 1: detail
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1612 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1613
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1614
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1615 static void filedialog_setshowhidden(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1616 Widget w,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1617 XnFileSelectionBox data,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1618 XmToggleButtonCallbackStruct *tb)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1619 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1620 data->fsb.showHidden = tb->set;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1621 filedialog_update_dir(data, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1622 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1623
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1624 static void filedialog_filter(Widget w, XnFileSelectionBox data, XtPointer c)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1625 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1626 filedialog_update_dir(data, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1627 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1628
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1629 static void filedialog_update_filter(Widget w, XnFileSelectionBox data, XtPointer c)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1630 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1631 filedialog_update_dir(data, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1632
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1633 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1634
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1635 static void filedialog_goup(Widget w, XnFileSelectionBox data, XtPointer d)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1636 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1637 char *newPath = ParentPath(data->fsb.currentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1638 filedialog_update_dir(data, newPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1639 PathBarSetPath(data->fsb.pathBar, newPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1640 free(newPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1641 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1642
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1643 static void filedialog_ok(Widget w, XnFileSelectionBox data, XtPointer d)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1644 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1645 if(data->fsb.type == FILEDIALOG_SAVE) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1646 char *newName = XmTextFieldGetString(data->fsb.name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1647 if(newName) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1648 if(strchr(newName, '/')) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1649 ErrDialog(data, data->fsb.errorTitle, data->fsb.errorIllegalChar);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1650 XtFree(newName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1651 return;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1652 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1653
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1654 if(strlen(newName) > 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1655 char *selPath = ConcatPath(data->fsb.currentPath, newName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1656 if(data->fsb.selectedPath) free(data->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1657 data->fsb.selectedPath = selPath;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1658 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1659 XtFree(newName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1660
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1661 data->fsb.selIsDir = False;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1662 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1663 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1664
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1665 if(data->fsb.selectedPath) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1666 if(!data->fsb.selIsDir) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1667 data->fsb.status = FILEDIALOG_OK;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1668 data->fsb.end = True;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1669 FileSelectionCallback(data, data->fsb.okCallback, XmCR_OK, data->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1670 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1671 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1672 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1673
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1674 static void filedialog_cancel(Widget w, XnFileSelectionBox data, XtPointer d)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1675 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1676 data->fsb.end = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1677 data->fsb.status = FILEDIALOG_CANCEL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1678 FileSelectionCallback(data, data->fsb.cancelCallback, XmCR_CANCEL, data->fsb.currentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1679 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1680
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1681 static void filedialog_help(Widget w, XnFileSelectionBox data, XtPointer d)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1682 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1683 FileSelectionCallback(data, data->manager.help_callback, XmCR_HELP, data->fsb.currentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1684 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1685
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1686 static void FileSelectionCallback(XnFileSelectionBox fsb, XtCallbackList cb, int reason, const char *value) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1687 XmFileSelectionBoxCallbackStruct cbs;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1688 memset(&cbs, 0, sizeof(XmFileSelectionBoxCallbackStruct));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1689
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1690 char *dir = fsb->fsb.currentPath;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1691 size_t dirlen = dir ? strlen(dir) : 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1692 if(dir && dirlen > 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1693 char *dir2 = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1694 if(dir[dirlen-1] != '/') {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1695 // add a trailing / to the dir string
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1696 dir2 = malloc(dirlen+2);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1697 memcpy(dir2, dir, dirlen);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1698 dir2[dirlen] = '/';
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1699 dir2[dirlen+1] = '\0';
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1700 dirlen++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1701 dir = dir2;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1702 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1703 cbs.dir = XmStringCreateLocalized(dir);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1704 cbs.dir_length = dirlen;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1705 if(dir2) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1706 free(dir2);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1707 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1708 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1709 cbs.dir = XmStringCreateLocalized("");
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1710 cbs.dir_length = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1711 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1712 cbs.reason = reason;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1713
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1714 cbs.value = XmStringCreateLocalized((char*)value);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1715 cbs.length = strlen(value);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1716
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1717 XtCallCallbackList((Widget)fsb, cb, (XtPointer)&cbs);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1718
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1719 XmStringFree(cbs.dir);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1720 XmStringFree(cbs.value);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1721 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1722
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1723 static void CreateUI(XnFileSelectionBox w) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1724 Arg args[32];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1725 int n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1726 XmString str;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1727
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1728 int widget_spacing = w->fsb.widgetSpacing;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1729 int window_spacing = w->fsb.windowSpacing;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1730
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1731 Widget form = (Widget)w;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1732 int type = w->fsb.type;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1733
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1734 XtVaSetValues((Widget)w, XmNautoUnmanage, False, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1735
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1736 /* upper part of the gui */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1737
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1738 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1739 XtSetArg(args[n], XmNlabelString, w->fsb.labelDirUp); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1740 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1741 XtSetArg(args[n], XmNtopOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1742 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1743 XtSetArg(args[n], XmNleftOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1744 XtSetArg(args[n], XmNresizable, True); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1745 XtSetArg(args[n], XmNarrowDirection, XmARROW_UP); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1746 w->fsb.dirUp = XmCreatePushButton(form, "DirUp", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1747 XtManageChild(w->fsb.dirUp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1748 XtAddCallback(w->fsb.dirUp, XmNactivateCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1749 (XtCallbackProc)filedialog_goup, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1750
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1751 // View Option Menu
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1752 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1753 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1754 XtSetArg(args[n], XmNtopOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1755 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1756 XtSetArg(args[n], XmNrightOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1757 XtSetArg(args[n], XmNshadowThickness, 0); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1758 Widget viewframe = XmCreateForm(form, "vframe", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1759 XtManageChild(viewframe);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1760
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1761 w->fsb.viewMenu = XmCreatePulldownMenu(viewframe, "menu", NULL, 0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1762
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1763 Widget view;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1764 if(w->fsb.showViewMenu) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1765 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1766 XtSetArg(args[n], XmNsubMenuId, w->fsb.viewMenu); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1767 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1768 XtSetArg(args[n], XmNmarginHeight, 0); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1769 XtSetArg(args[n], XmNmarginWidth, 0); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1770 view = XmCreateOptionMenu(viewframe, "option_menu", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1771 XtManageChild(view);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1772 w->fsb.viewOption = view;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1773 w->fsb.detailToggleButton = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1774 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1775 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1776 str = XmStringCreateLocalized(w->fsb.labelDetailView);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1777 XtSetArg(args[n], XmNlabelString, str); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1778 XtSetArg(args[n], XmNfillOnSelect, True); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1779 XtSetArg(args[n], XmNindicatorOn, False); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1780 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1781 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1782 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1783 if(w->fsb.selectedview == 1) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1784 XtSetArg(args[n], XmNset, 1); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1785 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1786 w->fsb.detailToggleButton = XmCreateToggleButton(viewframe, "ToggleDetailView", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1787 XtManageChild(w->fsb.detailToggleButton);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1788 view = w->fsb.detailToggleButton;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1789 XmStringFree(str);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1790
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1791 XtAddCallback(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1792 w->fsb.detailToggleButton,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1793 XmNvalueChangedCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1794 (XtCallbackProc)filedialog_enable_detailview,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1795 w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1796
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1797 w->fsb.viewOption = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1798 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1799
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1800 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1801 XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1802 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1803 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1804 XtSetArg(args[n], XmNrightWidget, view); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1805 XtSetArg(args[n], XmNmarginHeight, 0); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1806 XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1807 XtSetArg(args[n], XmNlabelString, w->fsb.labelNewFolder); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1808 w->fsb.newFolder = XmCreatePushButton(viewframe, "NewFolder", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1809 XtManageChild(w->fsb.newFolder);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1810 XtAddCallback(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1811 w->fsb.newFolder,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1812 XmNactivateCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1813 (XtCallbackProc)FSBNewFolder,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1814 w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1815
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1816
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1817 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1818 XtSetArg(args[n], XmNlabelString, w->fsb.labelHome); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1819 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1820 XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1821 XtSetArg(args[n], XmNrightWidget, w->fsb.newFolder); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1822 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1823 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1824 w->fsb.home = XmCreatePushButton(viewframe, "Home", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1825 XtManageChild(w->fsb.home);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1826 XtAddCallback(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1827 w->fsb.home,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1828 XmNactivateCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1829 (XtCallbackProc)FSBHome,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1830 w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1831
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1832 // match visual appearance of detailToggleButton with the other buttons
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1833 if(w->fsb.detailToggleButton) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1834 Dimension highlight, shadow;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1835 XtVaGetValues(w->fsb.newFolder, XmNshadowThickness, &shadow, XmNhighlightThickness, &highlight, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1836 XtVaSetValues(w->fsb.detailToggleButton, XmNshadowThickness, shadow, XmNhighlightThickness, highlight, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1837 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1838
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1839 // pathbar
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1840 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1841 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1842 XtSetArg(args[n], XmNtopOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1843 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1844 XtSetArg(args[n], XmNleftWidget, w->fsb.dirUp); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1845 XtSetArg(args[n], XmNleftOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1846 XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1847 XtSetArg(args[n], XmNrightWidget, viewframe); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1848 XtSetArg(args[n], XmNrightOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1849 XtSetArg(args[n], XmNshadowType, XmSHADOW_IN); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1850 Widget pathBarFrame = XmCreateFrame(form, "pathbar_frame", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1851 XtManageChild(pathBarFrame);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1852 w->fsb.pathBar = CreatePathBar(pathBarFrame, args, 0);
927
b8c0f718b141 move default path elm func to common
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 925
diff changeset
1853 w->fsb.pathBar->getpathelm = ui_default_pathelm_func;
925
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1854 w->fsb.pathBar->updateDir = (updatedir_callback)filedialog_update_dir;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1855 w->fsb.pathBar->updateDirData = w;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1856 XtManageChild(w->fsb.pathBar->widget);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1857 w->fsb.path = XmCreateTextField(form, "textfield", args, 0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1858
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1859 XtVaSetValues(w->fsb.dirUp, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, pathBarFrame, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1860 if(!w->fsb.showViewMenu) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1861 XtVaSetValues(viewframe, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, pathBarFrame, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1862 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1863
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1864 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1865 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1866 XtSetArg(args[n], XmNleftOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1867 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1868 XtSetArg(args[n], XmNtopWidget, pathBarFrame); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1869 XtSetArg(args[n], XmNtopOffset, 2*widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1870 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1871 XtSetArg(args[n], XmNrightOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1872 w->fsb.filterForm = XmCreateForm(form, "filterform", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1873 XtManageChild(w->fsb.filterForm);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1874
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1875 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1876 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1877 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1878 XtSetArg(args[n], XmNlabelString, w->fsb.labelDirectories); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1879 w->fsb.lsDirLabel = XmCreateLabel(w->fsb.filterForm, "labelDirs", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1880 XtManageChild(w->fsb.lsDirLabel);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1881
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1882 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1883 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1884 XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1885 XtSetArg(args[n], XmNleftPosition, 35); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1886 XtSetArg(args[n], XmNleftOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1887 XtSetArg(args[n], XmNlabelString, w->fsb.labelFiles); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1888 w->fsb.lsFileLabel = XmCreateLabel(w->fsb.filterForm, "labelFiles", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1889 XtManageChild(w->fsb.lsFileLabel);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1890
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1891 if(w->fsb.showHiddenButton) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1892 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1893 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1894 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1895 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1896 XtSetArg(args[n], XmNlabelString, w->fsb.labelShowHiddenFiles); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1897 XtSetArg(args[n], XmNset, w->fsb.showHidden); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1898 w->fsb.showHiddenButtonW = XmCreateToggleButton(w->fsb.filterForm, "showHidden", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1899 XtManageChild(w->fsb.showHiddenButtonW);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1900 XtAddCallback(w->fsb.showHiddenButtonW, XmNvalueChangedCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1901 (XtCallbackProc)filedialog_setshowhidden, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1902 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1903
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1904 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1905 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1906 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1907 XtSetArg(args[n], XmNlabelString, w->fsb.labelFilterButton); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1908 if(w->fsb.showHiddenButton) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1909 XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1910 XtSetArg(args[n], XmNrightWidget, w->fsb.showHiddenButtonW); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1911 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1912 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1913 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1914 w->fsb.filterButton = XmCreatePushButton(w->fsb.filterForm, "filedialog_filter", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1915 XtManageChild(w->fsb.filterButton);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1916 XtAddCallback(w->fsb.filterButton, XmNactivateCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1917 (XtCallbackProc)filedialog_filter, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1918
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1919 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1920 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1921 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1922 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1923 XtSetArg(args[n], XmNleftWidget, w->fsb.lsFileLabel); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1924 XtSetArg(args[n], XmNleftOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1925 XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1926 XtSetArg(args[n], XmNrightWidget, w->fsb.filterButton); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1927 XtSetArg(args[n], XmNrightOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1928 XtSetArg(args[n], XmNshowLabel, False); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1929 XtSetArg(args[n], XmNuseTextField, True); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1930 XtSetArg(args[n], XmNverify, False); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1931 w->fsb.filter = XmCreateDropDown(w->fsb.filterForm, "filedialog_filter_textfield", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1932 XtManageChild(w->fsb.filter);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1933 XmTextFieldSetString(XmDropDownGetText(w->fsb.filter), w->fsb.filterStr);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1934 XtAddCallback(XmDropDownGetText(w->fsb.filter), XmNactivateCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1935 (XtCallbackProc)filedialog_filter, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1936 XtAddCallback(w->fsb.filter, XmNupdateTextCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1937 (XtCallbackProc)filedialog_update_filter, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1938 Widget filterList = XmDropDownGetList(w->fsb.filter);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1939 str = XmStringCreateSimple("*");
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1940 XmListAddItem(filterList, str, 0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1941 XmStringFree(str);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1942
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1943 /* lower part */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1944 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1945 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1946 XtSetArg(args[n], XmNbottomOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1947 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1948 XtSetArg(args[n], XmNleftOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1949 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1950 XtSetArg(args[n], XmNrightOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1951 XtSetArg(args[n], XmNtopOffset, widget_spacing * 2); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1952 Widget buttons = XmCreateForm(form, "buttons", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1953 XtManageChild(buttons);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1954
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1955 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1956 str = type == FILEDIALOG_OPEN ? w->fsb.labelOpen : w->fsb.labelSave;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1957 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1958 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1959 XtSetArg(args[n], XmNlabelString, str); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1960 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1961 XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1962 XtSetArg(args[n], XmNrightPosition, 14); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1963 w->fsb.okBtn = XmCreatePushButton(buttons, "filedialog_open", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1964 XtManageChild(w->fsb.okBtn);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1965 XmStringFree(str);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1966 XtAddCallback(w->fsb.okBtn, XmNactivateCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1967 (XtCallbackProc)filedialog_ok, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1968
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1969 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1970 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1971 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1972 XtSetArg(args[n], XmNlabelString, w->fsb.labelHelp); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1973 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1974 XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1975 XtSetArg(args[n], XmNleftPosition, 86); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1976 w->fsb.helpBtn = XmCreatePushButton(buttons, "filedialog_help", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1977 XtManageChild(w->fsb.helpBtn);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1978 XtAddCallback(w->fsb.helpBtn, XmNactivateCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1979 (XtCallbackProc)filedialog_help, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1980
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1981 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1982 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1983 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1984 XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1985 XtSetArg(args[n], XmNleftPosition, 43); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1986 XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1987 XtSetArg(args[n], XmNrightPosition, 57); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1988 XtSetArg(args[n], XmNlabelString, w->fsb.labelCancel); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1989 w->fsb.cancelBtn = XmCreatePushButton(buttons, "filedialog_cancel", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1990 XtManageChild(w->fsb.cancelBtn);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1991 XtAddCallback(w->fsb.cancelBtn, XmNactivateCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1992 (XtCallbackProc)filedialog_cancel, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1993
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1994 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1995 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1996 XtSetArg(args[n], XmNbottomWidget, buttons); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1997 XtSetArg(args[n], XmNbottomOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1998 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1999 XtSetArg(args[n], XmNleftOffset, 1); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2000 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2001 XtSetArg(args[n], XmNrightOffset, 1); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2002 w->fsb.separator = XmCreateSeparator(form, "ofd_separator", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2003 XtManageChild(w->fsb.separator);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2004
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2005 Widget bottomWidget = w->fsb.separator;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2006
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2007 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2008 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2009 XtSetArg(args[n], XmNbottomWidget, w->fsb.separator); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2010 XtSetArg(args[n], XmNbottomOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2011 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2012 XtSetArg(args[n], XmNleftOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2013 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2014 XtSetArg(args[n], XmNrightOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2015 w->fsb.name = XmCreateTextField(form, "textfield", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2016 XtAddCallback(w->fsb.name, XmNactivateCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2017 (XtCallbackProc)filedialog_ok, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2018
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2019 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2020 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2021 XtSetArg(args[n], XmNbottomWidget, w->fsb.name); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2022 XtSetArg(args[n], XmNbottomOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2023 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2024 XtSetArg(args[n], XmNleftOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2025 XtSetArg(args[n], XmNlabelString, w->fsb.labelFileName); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2026 w->fsb.nameLabel = XmCreateLabel(form, "label", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2027
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2028 if(type == FILEDIALOG_SAVE) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2029 bottomWidget = w->fsb.nameLabel;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2030 XtManageChild(w->fsb.name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2031 XtManageChild(w->fsb.nameLabel);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2032 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2033 w->fsb.bottom_widget = bottomWidget;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2034
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2035
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2036 // middle
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2037 // form for dir/file lists
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2038 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2039 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2040 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2041 XtSetArg(args[n], XmNtopWidget, w->fsb.filterForm); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2042 XtSetArg(args[n], XmNtopOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2043 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2044 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2045 XtSetArg(args[n], XmNbottomWidget, bottomWidget); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2046 XtSetArg(args[n], XmNleftOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2047 XtSetArg(args[n], XmNrightOffset, window_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2048 XtSetArg(args[n], XmNbottomOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2049 XtSetArg(args[n], XmNwidth, 580); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2050 XtSetArg(args[n], XmNheight, 400); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2051 w->fsb.listform = XmCreateForm(form, "fds_listform", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2052
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2053 // dir/file lists
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2054
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2055 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2056 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2057 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2058 XtSetArg(args[n], XmNtopWidget, w->fsb.lsDirLabel); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2059 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2060 XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2061 XtSetArg(args[n], XmNrightPosition, 35); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2062 w->fsb.dirlist = XmCreateScrolledList(w->fsb.listform, "dirlist", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2063 Dimension width, height;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2064 XtMakeResizeRequest(w->fsb.dirlist, 150, 200, &width, &height);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2065 XtManageChild(w->fsb.dirlist);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2066
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2067 XtAddCallback(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2068 w->fsb.dirlist,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2069 XmNdefaultActionCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2070 (XtCallbackProc)dirlist_activate,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2071 w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2072 XtAddCallback(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2073 w->fsb.dirlist,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2074 XmNbrowseSelectionCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2075 (XtCallbackProc)dirlist_select,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2076 w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2077
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2078 // FileList
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2079 XnFileSelectionBoxAddView(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2080 (Widget)w,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2081 w->fsb.labelListView,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2082 CreateListView,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2083 FileListUpdate,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2084 FileListSelect,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2085 FileListCleanup,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2086 FileListDestroy,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2087 True,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2088 w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2089
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2090 // Detail FileList
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2091 #ifdef FSB_ENABLE_DETAIL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2092 XnFileSelectionBoxAddView(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2093 (Widget)w,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2094 w->fsb.labelDetailView,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2095 CreateDetailView,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2096 FileListDetailUpdate,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2097 FileListDetailSelect,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2098 FileListDetailCleanup,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2099 FileListDetailDestroy,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2100 True,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2101 w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2102 #endif
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2103
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2104 /*
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2105 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2106 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2107 XtSetArg(args[n], XmNleftWidget, w->fsb.dirlist); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2108 XtSetArg(args[n], XmNleftOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2109 //XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2110 //XtSetArg(args[n], XmNbottomWidget, w->fsb.filelist); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2111 XtSetArg(args[n], XmNbottomOffset, widget_spacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2112 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2113 XtSetArg(args[n], XmNlabelString, w->fsb.labelFiles); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2114 w->fsb.lsFileLabel = XmCreateLabel(w->fsb.listform, "label", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2115 XtManageChild(w->fsb.lsFileLabel);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2116 */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2117
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2118 XtManageChild(w->fsb.listform);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2119
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2120 int selview = w->fsb.selectedview;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2121 if(selview < 2) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2122 XtManageChild(w->fsb.view[selview].widget);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2123 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2124 w->fsb.selectedview = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2125 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2126
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2127
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2128 if(w->fsb.selectedPath) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2129 char *parentPath = ParentPath(w->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2130 filedialog_update_dir(w, parentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2131 PathBarSetPath(w->fsb.pathBar, parentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2132 free(parentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2133
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2134 if(w->fsb.type == FILEDIALOG_SAVE) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2135 XmTextFieldSetString(w->fsb.name, FileName(w->fsb.selectedPath));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2136 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2137 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2138 char cwd[PATH_MAX];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2139 const char *currentPath = w->fsb.currentPath;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2140 if(!currentPath) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2141 if(getcwd(cwd, PATH_MAX)) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2142 currentPath = cwd;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2143 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2144 currentPath = GetHomeDir();
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2145 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2146 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2147
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2148 filedialog_update_dir(w, currentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2149 PathBarSetPath(w->fsb.pathBar, w->fsb.currentPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2150 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2151
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2152
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2153 w->fsb.selectedview = selview;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2154
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2155 XtVaSetValues((Widget)w, XmNcancelButton, w->fsb.cancelBtn, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2156
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2157 w->fsb.gui_created = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2158 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2159
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2160 static char* FSBDialogTitle(Widget widget) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2161 XnFileSelectionBox w = (XnFileSelectionBox)widget;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2162 if(w->fsb.type == FILEDIALOG_OPEN) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2163 return w->fsb.labelOpenFileTitle;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2164 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2165 return w->fsb.labelSaveFileTitle;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2166 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2167 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2168
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2169 static FSBViewWidgets CreateView(XnFileSelectionBox w, FSBViewCreateProc create, void *userData, Boolean useDirList) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2170 Arg args[64];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2171 int n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2172
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2173 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2174 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2175 if(useDirList) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2176 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2177 XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2178 XtSetArg(args[n], XmNleftWidget, w->fsb.dirlist); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2179 XtSetArg(args[n], XmNleftOffset, w->fsb.widgetSpacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2180 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2181 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2182 XtSetArg(args[n], XmNtopOffset, w->fsb.widgetSpacing); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2183 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2184 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2185
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2186 return create(w->fsb.listform, args, n, userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2187 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2188
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2189
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2190 typedef struct FSBViewSelection {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2191 XnFileSelectionBox fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2192 int index;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2193 } FSBViewSelection;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2194
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2195 static void SelectView(XnFileSelectionBox f, int view) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2196 FSBView current = f->fsb.view[f->fsb.selectedview];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2197 FSBView newview = f->fsb.view[view];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2198
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2199 XtUnmanageChild(current.widget);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2200 if(newview.useDirList != current.useDirList) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2201 if(current.useDirList) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2202 XtUnmanageChild(f->fsb.listform);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2203 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2204 XtManageChild(f->fsb.listform);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2205 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2206 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2207
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2208 current.cleanup((Widget)f, current.widget, current.userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2209 XtManageChild(newview.widget);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2210
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2211 f->fsb.selectedview = view;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2212
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2213 filedialog_update_dir(f, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2214 XmProcessTraversal(newview.focus, XmTRAVERSE_CURRENT);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2215 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2216
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2217 static void SelectViewCallback(Widget w, FSBViewSelection *data, XtPointer u) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2218 SelectView(data->fsb, data->index);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2219 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2220
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2221 static void SelectViewItemDestroy(Widget w, FSBViewSelection *data, XtPointer u) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2222 free(data);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2223 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2224
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2225 static void AddViewMenuItem(XnFileSelectionBox w, const char *name, int viewIndex) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2226 Arg args[4];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2227 int n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2228
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2229 XmString label = XmStringCreateLocalized((char*)name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2230
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2231 XtSetArg(args[n], XmNlabelString, label); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2232 XtSetArg(args[1], XmNpositionIndex, w->fsb.selectedview == w->fsb.numviews ? 0 : w->fsb.numviews+1); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2233 Widget item = XmCreatePushButton(w->fsb.viewMenu, "menuitem", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2234
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2235 if(viewIndex == 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2236 w->fsb.viewSelectorList = item;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2237 } else if(viewIndex == 1) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2238 w->fsb.viewSelectorDetail = item;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2239 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2240
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2241 XtManageChild(item);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2242 XmStringFree(label);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2243
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2244 FSBViewSelection *data = malloc(sizeof(FSBViewSelection));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2245 data->fsb = w;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2246 data->index = viewIndex;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2247
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2248 XtAddCallback(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2249 item,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2250 XmNactivateCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2251 (XtCallbackProc)SelectViewCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2252 data);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2253 XtAddCallback(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2254 item,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2255 XmNdestroyCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2256 (XtCallbackProc)SelectViewItemDestroy,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2257 data);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2258 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2259
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2260 static FSBViewWidgets CreateListView(Widget parent, ArgList args, int n, void *userData) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2261 XnFileSelectionBox fsb = (XnFileSelectionBox)userData;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2262
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2263 XtSetArg(args[n], XmNshadowThickness, 0); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2264 Widget frame = XmCreateFrame(parent, "filelistframe", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2265
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2266 fsb->fsb.filelist = XmCreateScrolledList(frame, "filelist", NULL, 0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2267 XtManageChild(fsb->fsb.filelist);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2268
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2269 XtAddCallback(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2270 fsb->fsb.filelist,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2271 XmNdefaultActionCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2272 (XtCallbackProc)FileListActivateCB,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2273 userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2274 XtAddCallback(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2275 fsb->fsb.filelist,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2276 XmNbrowseSelectionCallback,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2277 (XtCallbackProc)FileListSelectCB,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2278 userData);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2279
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2280 fsb->fsb.listContextMenu = CreateContextMenu(fsb, fsb->fsb.filelist, FileContextMenuCB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2281
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2282 FSBViewWidgets widgets;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2283 widgets.view = frame;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2284 widgets.focus = fsb->fsb.filelist;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2285 return widgets;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2286 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2287
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2288 #ifdef FSB_ENABLE_DETAIL
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2289 static void set_path_from_row(XnFileSelectionBox data, int row) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2290 FileElm *elm = NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2291 XmLGridRow rowPtr = XmLGridGetRow(data->fsb.grid, XmCONTENT, row);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2292 XtVaGetValues(data->fsb.grid, XmNrowPtr, rowPtr, XmNrowUserData, &elm, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2293 if(!elm) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2294 fprintf(stderr, "error: no row data\n");
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2295 return;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2296 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2297
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2298 char *path = strdup(elm->path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2299
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2300 data->fsb.selIsDir = False;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2301 if(data->fsb.type == FILEDIALOG_SAVE) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2302 XmTextFieldSetString(data->fsb.name, FileName(path));
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2303 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2304
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2305 if(data->fsb.selectedPath) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2306 free(data->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2307 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2308 data->fsb.selectedPath = path;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2309 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2310
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2311 static void grid_select(Widget w, XnFileSelectionBox data, XmLGridCallbackStruct *cb) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2312 set_path_from_row(data, cb->row);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2313 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2314
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2315 static void grid_activate(Widget w, XnFileSelectionBox data, XmLGridCallbackStruct *cb) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2316 set_path_from_row(data, cb->row);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2317 data->fsb.end = True;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2318 data->fsb.status = FILEDIALOG_OK;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2319
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2320 FileSelectionCallback(data, data->fsb.okCallback, XmCR_OK, data->fsb.selectedPath);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2321 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2322
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2323 static void grid_key_pressed(Widget w, XnFileSelectionBox data, XmLGridCallbackStruct *cb) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2324 char chars[16];
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2325 KeySym keysym;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2326 int nchars;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2327
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2328 nchars = XLookupString(&cb->event->xkey, chars, 15, &keysym, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2329
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2330 if(nchars == 0) return;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2331
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2332 // if data->showHidden is 0, data->files contains more items than the grid
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2333 // this means SelectedRow might not be the correct index for data->files
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2334 // we have to count files manually and increase 'row', if the file
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2335 // is actually displayed in the grid
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2336 int row = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2337 int selectedRow = XmLGridGetSelectedRow(w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2338
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2339 int match = -1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2340
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2341 for(int i=0;i<data->fsb.filecount;i++) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2342 const char *name = FileName(data->fsb.files[i].path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2343 if(!data->fsb.showHidden && name[0] == '.') continue;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2344
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2345 size_t namelen = strlen(name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2346
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2347 size_t cmplen = namelen < nchars ? namelen : nchars;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2348 if(!memcmp(name, chars, cmplen)) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2349 if(row <= selectedRow) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2350 if(match == -1) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2351 match = row;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2352 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2353 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2354 match = row;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2355 break;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2356 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2357 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2358
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2359 row++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2360 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2361
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2362 if(match > -1) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2363 XmLGridSelectRow(w, match, True);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2364 XmLGridFocusAndShowRow(w, match+1);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2365 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2366 XBell(XtDisplay(w), 0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2367 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2368 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2369
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2370 static void grid_header_clicked(Widget w, XnFileSelectionBox data, XmLGridCallbackStruct *cb) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2371 int new_cmp_field = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2372 switch(cb->column) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2373 case 0: {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2374 new_cmp_field = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2375 break;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2376 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2377 case 1: {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2378 new_cmp_field = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2379 break;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2380 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2381 case 2: {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2382 new_cmp_field = 2;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2383 break;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2384 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2385 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2386
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2387 if(new_cmp_field == file_cmp_field) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2388 file_cmp_order = -file_cmp_order; // revert sort order
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2389 } else {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2390 file_cmp_field = new_cmp_field; // change file cmp order to new field
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2391 file_cmp_order = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2392 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2393
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2394 int sort_type = file_cmp_order == 1 ? XmSORT_ASCENDING : XmSORT_DESCENDING;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2395 XmLGridSetSort(data->fsb.grid, file_cmp_field, sort_type);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2396
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2397 qsort(data->fsb.files, data->fsb.filecount, sizeof(FileElm), filecmp);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2398
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2399 // refresh widget
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2400 filedialog_update_dir(data, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2401 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2402
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2403 static FSBViewWidgets CreateDetailView(Widget parent, ArgList args, int n, void *userData) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2404 XnFileSelectionBox w = userData;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2405
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2406 XtSetArg(args[n], XmNshadowThickness, 0); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2407 Widget gridcontainer = XmCreateFrame(parent, "gridcontainer", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2408 XtManageChild(gridcontainer);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2409
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2410 n = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2411 XtSetArg(args[n], XmNcolumns, 3); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2412 XtSetArg(args[n], XmNheadingColumns, 0); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2413 XtSetArg(args[n], XmNheadingRows, 1); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2414 XtSetArg(args[n], XmNallowColumnResize, 1); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2415 XtSetArg(args[n], XmNsimpleHeadings, w->fsb.detailHeadings); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2416 XtSetArg(args[n], XmNhorizontalSizePolicy, XmCONSTANT); n++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2417
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2418 w->fsb.grid = XmLCreateGrid(gridcontainer, "grid", args, n);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2419 XmLGridSetIgnoreModifyVerify(w->fsb.grid, True);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2420 XtManageChild(w->fsb.grid);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2421
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2422 XtVaSetValues(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2423 w->fsb.grid,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2424 XmNcellDefaults, True,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2425 XtVaTypedArg, XmNblankBackground, XmRString, "white", 6,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2426 XtVaTypedArg, XmNcellBackground, XmRString, "white", 6,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2427 NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2428
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2429 XtAddCallback(w->fsb.grid, XmNselectCallback, (XtCallbackProc)grid_select, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2430 XtAddCallback(w->fsb.grid, XmNactivateCallback, (XtCallbackProc)grid_activate, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2431 XtAddCallback(w->fsb.grid, XmNheaderClickCallback, (XtCallbackProc)grid_header_clicked, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2432 XtAddCallback(w->fsb.grid, XmNgridKeyPressedCallback, (XtCallbackProc)grid_key_pressed, w);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2433
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2434 // context menu
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2435 w->fsb.gridContextMenu = CreateContextMenu(w, w->fsb.grid, FileContextMenuCB);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2436
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2437 FSBViewWidgets widgets;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2438 widgets.view = gridcontainer;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2439 widgets.focus = w->fsb.grid;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2440 return widgets;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2441 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2442 #endif
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2443
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2444
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2445 /* ------------------------------ Path Utils ------------------------------ */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2446
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2447 const char* GetHomeDir(void) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2448 char *home = getenv("HOME");
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2449 if(!home) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2450 home = getenv("USERPROFILE");
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2451 if(!home) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2452 home = "/";
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2453 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2454 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2455 return home;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2456 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2457
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2458 static char* ConcatPath(const char *parent, const char *name)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2459 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2460 size_t parentlen = strlen(parent);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2461 size_t namelen = strlen(name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2462
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2463 size_t pathlen = parentlen + namelen + 2;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2464 char *path = malloc(pathlen);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2465
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2466 memcpy(path, parent, parentlen);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2467 if(parentlen > 0 && parent[parentlen-1] != '/') {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2468 path[parentlen] = '/';
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2469 parentlen++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2470 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2471 if(name[0] == '/') {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2472 name++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2473 namelen--;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2474 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2475 memcpy(path+parentlen, name, namelen);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2476 path[parentlen+namelen] = '\0';
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2477 return path;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2478 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2479
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2480 static char* FileName(char *path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2481 int si = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2482 int osi = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2483 int i = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2484 int p = 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2485 char c;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2486 while((c = path[i]) != 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2487 if(c == '/') {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2488 osi = si;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2489 si = i;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2490 p = 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2491 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2492 i++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2493 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2494
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2495 char *name = path + si + p;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2496 if(name[0] == 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2497 name = path + osi + p;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2498 if(name[0] == 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2499 return path;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2500 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2501 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2502
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2503 return name;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2504 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2505
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2506 static char* ParentPath(const char *path) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2507 char *name = FileName((char*)path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2508 size_t namelen = strlen(name);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2509 size_t pathlen = strlen(path);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2510 size_t parentlen = pathlen - namelen;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2511 if(parentlen == 0) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2512 parentlen++;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2513 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2514 char *parent = malloc(parentlen + 1);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2515 memcpy(parent, path, parentlen);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2516 parent[parentlen] = '\0';
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2517 return parent;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2518 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2519
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2520 // unused at the moment, maybe reactivate if more illegal characters
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2521 // are defined
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2522 /*
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2523 static int CheckFileName(const char *fileName) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2524 size_t len = strlen(fileName);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2525 for(int i=0;i<len;i++) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2526 if(fileName[i] == '/') {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2527 return 0;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2528 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2529 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2530 return 1;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2531 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2532 */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2533
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2534
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2535 /* ------------------------------ public API ------------------------------ */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2536
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2537 Widget XnCreateFileSelectionDialog(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2538 Widget parent,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2539 String name,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2540 ArgList arglist,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2541 Cardinal argcount)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2542 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2543 Widget dialog = XmCreateDialogShell(parent, "FileDialog", NULL, 0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2544 Widget fsb = XnCreateFileSelectionBox(dialog, name, arglist, argcount);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2545 char *title = FSBDialogTitle(fsb);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2546 XtVaSetValues(dialog, XmNtitle, title, NULL);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2547 return fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2548 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2549
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2550 Widget XnCreateFileSelectionBox(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2551 Widget parent,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2552 String name,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2553 ArgList arglist,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2554 Cardinal argcount)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2555 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2556 Widget fsb = XtCreateWidget(name, xnFsbWidgetClass, parent, arglist, argcount);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2557 return fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2558 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2559
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2560 void XnFileSelectionBoxAddView(
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2561 Widget fsb,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2562 const char *name,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2563 FSBViewCreateProc create,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2564 FSBViewUpdateProc update,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2565 FSBViewSelectProc select,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2566 FSBViewCleanupProc cleanup,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2567 FSBViewDestroyProc destroy,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2568 Boolean useDirList,
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2569 void *userData)
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2570 {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2571 XnFileSelectionBox f = (XnFileSelectionBox)fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2572 if(f->fsb.numviews >= FSB_MAX_VIEWS) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2573 fprintf(stderr, "XnFileSelectionBox: too many views\n");
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2574 return;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2575 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2576
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2577 FSBView view;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2578 view.update = update;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2579 view.select = select;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2580 view.cleanup = cleanup;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2581 view.destroy = destroy;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2582 view.useDirList = useDirList;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2583 view.userData = userData;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2584
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2585 FSBViewWidgets widgets = CreateView(f, create, userData, useDirList);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2586 view.widget = widgets.view;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2587 view.focus = widgets.focus;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2588
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2589 AddViewMenuItem(f, name, f->fsb.numviews);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2590
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2591 f->fsb.view[f->fsb.numviews++] = view;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2592 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2593
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2594 /*
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2595 void XnFileSelectionBoxSetDirList(Widget fsb, const char **dirlist, size_t nelm) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2596 XnFileSelectionBox f = (XnFileSelectionBox)fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2597 PathBarSetDirList(f->fsb.pathBar, dirlist, nelm);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2598 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2599 */
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2600
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2601 Widget XnFileSelectionBoxWorkArea(Widget fsb) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2602 XnFileSelectionBox f = (XnFileSelectionBox)fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2603 return f->fsb.workarea;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2604 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2605
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2606 Widget XnFileSelectionBoxGetChild(Widget fsb, enum XnFSBChild child) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2607 XnFileSelectionBox w = (XnFileSelectionBox)fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2608 switch(child) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2609 case XnFSB_DIR_UP_BUTTON: return w->fsb.dirUp;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2610 case XnFSB_HOME_BUTTON: return w->fsb.home;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2611 case XnFSB_NEW_FOLDER_BUTTON: return w->fsb.newFolder;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2612 case XnFSB_DETAIL_TOGGLE_BUTTON: return w->fsb.detailToggleButton;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2613 case XnFSB_VIEW_OPTION_BUTTON: return w->fsb.viewOption;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2614 case XnFSB_FILTER_DROPDOWN: return w->fsb.filter;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2615 case XnFSB_FILTER_BUTTON: return w->fsb.filterButton;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2616 case XnFSB_SHOW_HIDDEN_TOGGLE_BUTTON: return w->fsb.showHiddenButtonW;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2617 case XnFSB_DIRECTORIES_LABEL: return w->fsb.lsDirLabel;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2618 case XnFSB_FILES_LABEL: return w->fsb.lsFileLabel;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2619 case XnFSB_DIRLIST: return w->fsb.dirlist;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2620 case XnFSB_FILELIST: return w->fsb.filelist;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2621 case XnFSB_GRID: return w->fsb.grid;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2622 case XnFSB_OK_BUTTON: return w->fsb.okBtn;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2623 case XnFSB_CANCEL_BUTTON: return w->fsb.cancelBtn;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2624 case XnFSB_HELP_BUTTON: return w->fsb.helpBtn;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2625 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2626 return NULL;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2627 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2628
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2629 void XnFileSelectionBoxDeleteFilters(Widget fsb) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2630 XnFileSelectionBox w = (XnFileSelectionBox)fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2631 Widget filterList = XmDropDownGetList(w->fsb.filter);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2632 XmListDeleteAllItems(filterList);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2633 }
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2634
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2635 void XnFileSelectionBoxAddFilter(Widget fsb, const char *filter) {
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2636 XnFileSelectionBox w = (XnFileSelectionBox)fsb;
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2637 Widget filterList = XmDropDownGetList(w->fsb.filter);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2638
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2639 XmString str = XmStringCreateSimple((char*)filter);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2640 XmListAddItem(filterList, str, 0);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2641 XmStringFree(str);
df27741d02b5 implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2642 }

mercurial