| |
1 /* |
| |
2 * Copyright 2021 Olaf Wintermann |
| |
3 * |
| |
4 * Permission is hereby granted, free of charge, to any person obtaining a |
| |
5 * copy of this software and associated documentation files (the "Software"), |
| |
6 * to deal in the Software without restriction, including without limitation |
| |
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| |
8 * and/or sell copies of the Software, and to permit persons to whom the |
| |
9 * Software is furnished to do so, subject to the following conditions: |
| |
10 * |
| |
11 * The above copyright notice and this permission notice shall be included in |
| |
12 * all copies or substantial portions of the Software. |
| |
13 * |
| |
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| |
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| |
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
| |
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| |
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
| |
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
| |
20 * DEALINGS IN THE SOFTWARE. |
| |
21 */ |
| |
22 |
| |
23 #ifndef FSB_H |
| |
24 #define FSB_H |
| |
25 |
| |
26 #include <X11/Intrinsic.h> |
| |
27 #include <Xm/PrimitiveP.h> |
| |
28 |
| |
29 #ifdef __cplusplus |
| |
30 extern "C" { |
| |
31 #endif |
| |
32 |
| |
33 extern WidgetClass xnFsbWidgetClass; |
| |
34 |
| |
35 #define FILEDIALOG_OPEN 1 |
| |
36 #define FILEDIALOG_SAVE 2 |
| |
37 |
| |
38 #define FILEDIALOG_OK 1 |
| |
39 #define FILEDIALOG_CANCEL 2 |
| |
40 |
| |
41 #define XnNwidgetSpacing "fsbWidgetSpacing" |
| |
42 #define XnNwindowSpacing "fsbWindowSpacing" |
| |
43 |
| |
44 #define XnNfsbType "fsbType" |
| |
45 #define XnCfsbType "fsbType" |
| |
46 |
| |
47 #define XnNshowHidden "showHidden" |
| |
48 #define XnCshowHidden "showHidden" |
| |
49 #define XnNshowHiddenButton "showHiddenButton" |
| |
50 #define XnCshowHiddenButton "showHiddenButton" |
| |
51 |
| |
52 #define XnNshowViewMenu "showViewMenu" |
| |
53 #define XnCshowViewMenu "showViewMenu" |
| |
54 |
| |
55 #define XnNselectedView "fsbSelectedView" |
| |
56 #define XnCselectedView "fsbSelectedView" |
| |
57 |
| |
58 #define XnNdirectory "directory" |
| |
59 #define XnCdirectory "directory" |
| |
60 #define XnNselectedPath "selectedPath" |
| |
61 #define XnCselectedPath "selectedPath" |
| |
62 #define XnNhomePath "homePath" |
| |
63 #define XnChomePath "homePath" |
| |
64 |
| |
65 #define XnNfilter "filter" |
| |
66 #define XnCfilter "filter" |
| |
67 |
| |
68 #define XnNfilterFunc "filterFunc" |
| |
69 #define XnCfilterFunc "filterFunc" |
| |
70 |
| |
71 #define XnNlabelListView "labelListView" |
| |
72 #define XnClabelListView "labelListView" |
| |
73 #define XnNlabelDetailView "labelDetailView" |
| |
74 #define XnClabelDetailView "labelDetailView" |
| |
75 #define XnNlabelOpenFileTitle "labelOpenFileTitle" |
| |
76 #define XnClabelOpenFileTitle "labelOpenFileTitle" |
| |
77 #define XnNlabelSaveFileTitle "labelSaveFileTitle" |
| |
78 #define XnClabelSaveFileTitle "labelSaveFileTitel" |
| |
79 #define XnNlabelDirUp "labelDirUp" |
| |
80 #define XnClabelDirUp "labelDirUp" |
| |
81 #define XnNlabelHome "labelHome" |
| |
82 #define XnClabelHome "labelHome" |
| |
83 #define XnNlabelNewFolder "labelNewFolder" |
| |
84 #define XnClabelNewFolder "labelNewFolder" |
| |
85 #define XnNlabelFilter "labelFilter" |
| |
86 #define XnClabelFilter "labelFilter" |
| |
87 #define XnNlabelFilterButton "labelFilterButton" |
| |
88 #define XnClabelFilterButton "labelFilterButton" |
| |
89 #define XnNlabelShowHiddenFiles "labelShowHiddenFiles" |
| |
90 #define XnClabelShowHiddenFiles "labelShowHiddenFiles" |
| |
91 #define XnNlabelDirectories "labelDirectories" |
| |
92 #define XnClabelDirectories "labelDirectories" |
| |
93 #define XnNlabelFiles "labelFiles" |
| |
94 #define XnClabelFiles "labelFiles" |
| |
95 #define XnNlabelRename "labelRename" |
| |
96 #define XnClabelRename "labelRename" |
| |
97 #define XnNlabelDelete "labelDelete" |
| |
98 #define XnClabelDelete "labelDelete" |
| |
99 #define XnNlabelOpen "labelOpen" |
| |
100 #define XnClabelOpen "labelOpen" |
| |
101 #define XnNlabelSave "labelSave" |
| |
102 #define XnClabelSave "labelSave" |
| |
103 #define XnNlabelOk "labelOk" |
| |
104 #define XnClabelOk "labelOk" |
| |
105 #define XnNlabelCancel "labelCancel" |
| |
106 #define XnClabelCancel "labelCancel" |
| |
107 #define XnNlabelHelp "labelHelp" |
| |
108 #define XnClabelHelp "labelHelp" |
| |
109 #define XnNlabelFileName "labelFileName" |
| |
110 #define XnClabelFileName "labelFileName" |
| |
111 #define XnNlabelDirectoryName "labelDirectoryName" |
| |
112 #define XnClabelDirectoryName "labelDirectoryName" |
| |
113 #define XnNlabelNewFileName "labelNewFileName" |
| |
114 #define XnClabelNewFileName "labelNewFileName" |
| |
115 #define XnNlabelDeleteFile "labelDeleteFile" |
| |
116 #define XnClabelDeleteFile "labelDeleteFile" |
| |
117 #define XnNdetailHeadings "detailHeadings" |
| |
118 #define XnCdetailHeadings "detailHeadings" |
| |
119 #define XnNdateFormatSameYear "dateFormatSameYear" |
| |
120 #define XnCdateFormatSameYear "dateFormatSameYear" |
| |
121 #define XnNdateFormatOtherYear "dateFormatOtherYear" |
| |
122 #define XnCdateFormatOtherYear "dateFormatOtherYear" |
| |
123 #define XnNsuffixBytes "suffixBytes" |
| |
124 #define XnCsuffixBytes "suffixBytes" |
| |
125 #define XnNsuffixKB "suffixKB" |
| |
126 #define XnCsuffixKB "suffixKB" |
| |
127 #define XnNsuffixMB "suffixMB" |
| |
128 #define XnCsuffixMB "suffixMB" |
| |
129 #define XnNsuffixGB "suffixGB" |
| |
130 #define XnCsuffixGB "suffixGB" |
| |
131 #define XnNsuffixTB "suffixTB" |
| |
132 #define XnCsuffixTB "suffixTB" |
| |
133 #define XnNerrorTitle "errorTitle" |
| |
134 #define XnCerrorTitle "errorTitle" |
| |
135 #define XnNerrorIllegalChar "errorIllegalChar" |
| |
136 #define XnCerrorIllegalChar "errorIllegalChar" |
| |
137 #define XnNerrorRename "errorRename" |
| |
138 #define XnCerrorRename "errorRename" |
| |
139 #define XnNerrorCreateFolder "errorCreateFolder" |
| |
140 #define XnCerrorCreateFolder "errorCreateFolder" |
| |
141 #define XnNerrorDelete "errorDelete" |
| |
142 #define XnCerrorDelete "errorDelete" |
| |
143 #define XnNerrorOpenDir "errorOpenDir" |
| |
144 #define XnCerrorOpenDir "errorOpenDir" |
| |
145 |
| |
146 /* |
| |
147 * int FSBFilterFunc(const char *pattern, const char *string) |
| |
148 * |
| |
149 * Checks whether the string matches the pattern |
| |
150 * |
| |
151 * Return |
| |
152 * zero if the string matches the pattern |
| |
153 * non-zero if there is no match |
| |
154 */ |
| |
155 typedef int(*FSBFilterFunc)(const char*, const char*); |
| |
156 |
| |
157 |
| |
158 typedef struct FileElm FileElm; |
| |
159 struct FileElm { |
| |
160 char *path; |
| |
161 int isDirectory; |
| |
162 unsigned long long size; |
| |
163 time_t lastModified; |
| |
164 }; |
| |
165 |
| |
166 typedef struct { |
| |
167 Widget view; |
| |
168 Widget focus; |
| |
169 } FSBViewWidgets; |
| |
170 |
| |
171 enum XnFSBChild { |
| |
172 XnFSB_DIR_UP_BUTTON = 0, |
| |
173 XnFSB_HOME_BUTTON, |
| |
174 XnFSB_NEW_FOLDER_BUTTON, |
| |
175 XnFSB_DETAIL_TOGGLE_BUTTON, |
| |
176 XnFSB_VIEW_OPTION_BUTTON, |
| |
177 XnFSB_FILTER_DROPDOWN, |
| |
178 XnFSB_FILTER_BUTTON, |
| |
179 XnFSB_SHOW_HIDDEN_TOGGLE_BUTTON, |
| |
180 XnFSB_DIRECTORIES_LABEL, |
| |
181 XnFSB_FILES_LABEL, |
| |
182 XnFSB_DIRLIST, |
| |
183 XnFSB_FILELIST, |
| |
184 XnFSB_GRID, |
| |
185 XnFSB_OK_BUTTON, |
| |
186 XnFSB_CANCEL_BUTTON, |
| |
187 XnFSB_HELP_BUTTON |
| |
188 }; |
| |
189 |
| |
190 typedef FSBViewWidgets(*FSBViewCreateProc)(Widget parent, ArgList args, int n, void *userData); |
| |
191 typedef void(*FSBViewUpdateProc)(Widget fsb, Widget view, FileElm *dirs, int dircount, FileElm *files, int filecount, const char *filter, int maxnamelen, void *userData); |
| |
192 typedef void(*FSBViewSelectProc)(Widget fsb, Widget view, const char *item); |
| |
193 typedef void(*FSBViewCleanupProc)(Widget fsb, Widget view, void *userData); |
| |
194 typedef void(*FSBViewDestroyProc)(Widget fsb, Widget view, void *userData); |
| |
195 |
| |
196 Widget XnCreateFileSelectionDialog( |
| |
197 Widget parent, |
| |
198 String name, |
| |
199 ArgList arglist, |
| |
200 Cardinal argcount); |
| |
201 |
| |
202 Widget XnCreateFileSelectionBox( |
| |
203 Widget parent, |
| |
204 String name, |
| |
205 ArgList arglist, |
| |
206 Cardinal argcount); |
| |
207 |
| |
208 void XnFileSelectionBoxAddView( |
| |
209 Widget fsb, |
| |
210 const char *name, |
| |
211 FSBViewCreateProc create, |
| |
212 FSBViewUpdateProc update, |
| |
213 FSBViewSelectProc select, |
| |
214 FSBViewCleanupProc cleanup, |
| |
215 FSBViewDestroyProc destroy, |
| |
216 Boolean useDirList, |
| |
217 void *userData); |
| |
218 |
| |
219 //void XnFileSelectionBoxSetDirList(Widget fsb, const char **dirlist, size_t nelm); |
| |
220 |
| |
221 Widget XnFileSelectionBoxWorkArea(Widget fsb); |
| |
222 |
| |
223 Widget XnFileSelectionBoxGetChild(Widget fsb, enum XnFSBChild child); |
| |
224 |
| |
225 void XnFileSelectionBoxDeleteFilters(Widget fsb); |
| |
226 |
| |
227 void XnFileSelectionBoxAddFilter(Widget fsb, const char *filter); |
| |
228 |
| |
229 #ifdef __cplusplus |
| |
230 } |
| |
231 #endif |
| |
232 |
| |
233 #endif /* FSB_H */ |