UNIXworkcode

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 */ 234