Mercurial > hg > pub > prymula > com
comparison DPF-Prymula-audioplugins/dpf/distrho/extra/sofd/libsofd.h @ 3:84e66ea83026
DPF-Prymula-audioplugins-0.231015-2
author | prymula <prymula76@outlook.com> |
---|---|
date | Mon, 16 Oct 2023 21:53:34 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:cf2cb71d31dd | 3:84e66ea83026 |
---|---|
1 /* libSOFD - Simple Open File Dialog [for X11 without toolkit] | |
2 * | |
3 * Copyright (C) 2014 Robin Gareus <robin@gareus.org> | |
4 * | |
5 * Permission is hereby granted, free of charge, to any person obtaining a copy | |
6 * of this software and associated documentation files (the "Software"), to deal | |
7 * in the Software without restriction, including without limitation the rights | |
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
9 * copies of the Software, and to permit persons to whom the Software is | |
10 * furnished to do so, subject to the following conditions: | |
11 * | |
12 * The above copyright notice and this permission notice shall be included in | |
13 * all copies or substantial portions of the Software. | |
14 * | |
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
21 * THE SOFTWARE. | |
22 */ | |
23 | |
24 #ifndef LIBSOFD_H | |
25 #define LIBSOFD_H 1 | |
26 | |
27 #ifdef HAVE_X11 | |
28 #include <X11/Xlib.h> | |
29 | |
30 #ifdef __cplusplus | |
31 extern "C" { | |
32 #endif | |
33 | |
34 /////////////////////////////////////////////////////////////////////////////// | |
35 /* public API */ | |
36 | |
37 /** open a file select dialog | |
38 * @param dpy X Display connection | |
39 * @param parent (optional) if not NULL, become transient for given window | |
40 * @param x if >0 set explict initial width of the window | |
41 * @param y if >0 set explict initial height of the window | |
42 * @return 0 on success | |
43 */ | |
44 int x_fib_show (Display *dpy, Window parent, int x, int y, double scalefactor); | |
45 | |
46 /** force close the dialog. | |
47 * This is normally not needed, the dialog closes itself | |
48 * when a file is selected or the user cancels selection. | |
49 * @param dpy X Display connection | |
50 */ | |
51 void x_fib_close (Display *dpy); | |
52 | |
53 /** non-blocking X11 event handler. | |
54 * It is safe to run this function even if the dialog is | |
55 * closed or was not initialized. | |
56 * | |
57 * @param dpy X Display connection | |
58 * @param event the XEvent to process | |
59 * @return status | |
60 * 0: the event was not for this window, or file-dialog still | |
61 * active, or the dialog window is not displayed. | |
62 * >0: file was selected, dialog closed | |
63 * <0: file selection was cancelled. | |
64 */ | |
65 int x_fib_handle_events (Display *dpy, XEvent *event); | |
66 | |
67 /** last status of the dialog | |
68 * @return >0: file was selected, <0: canceled or inactive. 0: active | |
69 */ | |
70 int x_fib_status (); | |
71 | |
72 /** query the selected filename | |
73 * @return NULL if none set, or allocated string to be free()ed by the called | |
74 */ | |
75 char *x_fib_filename (); | |
76 | |
77 /** customize/configure the dialog before calling \ref x_fib_show | |
78 * changes only have any effect if the dialog is not visible. | |
79 * @param k key to change | |
80 * 0: set current dir to display (must end with slash) | |
81 * 1: set title of dialog window | |
82 * 2: specify a custom X11 font to use | |
83 * 3: specify a custom 'places' file to include | |
84 * (following gtk-bookmark convention) | |
85 * @param v value | |
86 * @return 0 on success. | |
87 */ | |
88 int x_fib_configure (int k, const char *v); | |
89 | |
90 /** customize/configure the dialog before calling \ref x_fib_show | |
91 * changes only have any effect if the dialog is not visible. | |
92 * | |
93 * @param k button to change: | |
94 * 1: show hidden files | |
95 * 2: show places | |
96 * 3: show filter/list all (automatically hidden if there is no | |
97 * filter function) | |
98 * @param v <0 to hide the button >=0 show button, | |
99 * 0: set button-state to not-checked | |
100 * 1: set button-state to checked | |
101 * >1: retain current state | |
102 * @return 0 on success. | |
103 */ | |
104 int x_fib_cfg_buttons (int k, int v); | |
105 | |
106 /** set custom callback to filter file-names. | |
107 * NULL will disable the filter and hide the 'show all' button. | |
108 * changes only have any effect if the dialog is not visible. | |
109 * | |
110 * @param cb callback function to check file | |
111 * the callback function is called with the file name (basename only) | |
112 * and is expected to return 1 if the file passes the filter | |
113 * and 0 if the file should not be listed by default. | |
114 * @return 0 on success. | |
115 */ | |
116 int x_fib_cfg_filter_callback (int (*cb)(const char*)); | |
117 | |
118 #ifdef __cplusplus | |
119 } | |
120 #endif | |
121 | |
122 #endif /* END X11 specific functions */ | |
123 | |
124 #ifdef __cplusplus | |
125 extern "C" { | |
126 #endif | |
127 | |
128 /* 'recently used' API. x-platform | |
129 * NOTE: all functions use a static cache and are not reentrant. | |
130 * It is expected that none of these functions are called in | |
131 * parallel from different threads. | |
132 */ | |
133 | |
134 /** release static resources of 'recently used files' | |
135 */ | |
136 void x_fib_free_recent (); | |
137 | |
138 /** add an entry to the recently used list | |
139 * | |
140 * The dialog does not add files automatically on open, | |
141 * if the application succeeds to open a selected file, | |
142 * this function should be called. | |
143 * | |
144 * @param path complete path to file | |
145 * @param atime time of last use, 0: NOW | |
146 * @return -1 on error, number of current entries otherwise | |
147 */ | |
148 int x_fib_add_recent (const char *path, time_t atime); | |
149 | |
150 /** get a platform specific path to a good location for | |
151 * saving the recently used file list. | |
152 * (follows XDG_DATA_HOME on Unix, and CSIDL_LOCAL_APPDATA spec) | |
153 * | |
154 * @param application-name to use to include in file | |
155 * @return pointer to static path or NULL | |
156 */ | |
157 const char *x_fib_recent_file(const char *appname); | |
158 | |
159 /** save the current list of recently used files to the given filename | |
160 * (the format is one file per line, filename URL encoded and space separated | |
161 * with last-used timestamp) | |
162 * | |
163 * This function tries to creates the containing directory if it does | |
164 * not exist. | |
165 * | |
166 * @param fn file to save the list to | |
167 * @return 0: on success | |
168 */ | |
169 int x_fib_save_recent (const char *fn); | |
170 | |
171 /** load a recently used file list. | |
172 * | |
173 * @param fn file to load the list from | |
174 * @return 0: on success | |
175 */ | |
176 int x_fib_load_recent (const char *fn); | |
177 | |
178 /** get number of entries in the current list | |
179 * @return number of entries in the recently used list | |
180 */ | |
181 unsigned int x_fib_recent_count (); | |
182 | |
183 /** get recently used entry at given position | |
184 * | |
185 * @param i entry to query | |
186 * @return pointer to static string | |
187 */ | |
188 const char *x_fib_recent_at (unsigned int i); | |
189 | |
190 #ifdef __cplusplus | |
191 } | |
192 #endif | |
193 | |
194 #endif // header guard |