ui/motif/Fsb.c

Sun, 23 Nov 2025 08:35:40 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 23 Nov 2025 08:35:40 +0100
changeset 925
df27741d02b5
child 927
b8c0f718b141
permissions
-rw-r--r--

implement ui_openfiledialog (Motif)

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

mercurial