FLTK 1.3.9
Loading...
Searching...
No Matches
Fl_Native_File_Chooser.H
Go to the documentation of this file.
1//
2// "$Id$"
3//
4// FLTK native OS file chooser widget
5//
6// Copyright 1998-2014 by Bill Spitzak and others.
7// Copyright 2004 Greg Ercolano.
8//
9// This library is free software. Distribution and use rights are outlined in
10// the file "COPYING" which should have been included with this file. If this
11// file is missing or damaged, see the license at:
12//
13// http://www.fltk.org/COPYING.php
14//
15// Please report all bugs and problems on the following page:
16//
17// http://www.fltk.org/str.php
18//
19
23#ifndef FL_NATIVE_FILE_CHOOSER_H
24#define FL_NATIVE_FILE_CHOOSER_H
25
26// Use Windows' chooser
27#ifdef WIN32
28// #define _WIN32_WINNT 0x0501 // needed for OPENFILENAME's 'FlagsEx'
29#if defined(FL_LIBRARY) || FLTK_ABI_VERSION < 10304
30# include <windows.h>
31# include <commdlg.h> // OPENFILENAMEW, GetOpenFileName()
32# include <shlobj.h> // BROWSEINFOW, SHBrowseForFolder()
33typedef OPENFILENAMEW fl_OPENFILENAMEW;
34typedef BROWSEINFOW fl_BROWSEINFOW;
35#else
36typedef void fl_OPENFILENAMEW;
37typedef void fl_BROWSEINFOW;
38#endif
39#endif
40
41// Use Apple's chooser
42#ifdef __APPLE__
43# define MAXFILTERS 80
44#endif
45
46// All else falls back to FLTK's own chooser
47#if ! defined(__APPLE__) && !defined(WIN32)
48# include <FL/Fl_File_Chooser.H>
49#else
50# include <FL/filename.H> // FL_EXPORT
51#endif
52
55
111class FL_EXPORT Fl_Native_File_Chooser {
112public:
121 enum Option {
122 NO_OPTIONS = 0x0000,
123 SAVEAS_CONFIRM = 0x0001,
124 NEW_FOLDER = 0x0002,
125 PREVIEW = 0x0004,
126 USE_FILTER_EXT = 0x0008
127 };
129 static const char *file_exists_message;
130
131public:
132 Fl_Native_File_Chooser(int val=BROWSE_FILE);
134
135 // Public methods
136 void type(int t);
137 int type() const ;
138 void options(int o);
139 int options() const;
140 int count() const;
141 const char *filename() const ;
142 const char *filename(int i) const ;
143 void directory(const char *val) ;
144 const char *directory() const;
145 void title(const char *t);
146 const char* title() const;
147 const char *filter() const ;
148 void filter(const char *f);
149 int filters() const ;
150 void filter_value(int i) ;
151 int filter_value() const ;
152 void preset_file(const char*f) ;
153 const char* preset_file() const;
154 const char *errmsg() const ;
155 int show() ;
156
157#ifdef WIN32
158private:
159 int _btype; // kind-of browser to show()
160 int _options; // general options
161#if FLTK_ABI_VERSION >= 10304
162 fl_OPENFILENAMEW *_ofn_ptr; // GetOpenFileName() & GetSaveFileName() struct
163 fl_BROWSEINFOW *_binf_ptr; // SHBrowseForFolder() struct
164 WCHAR *_wpattern; // pattern buffer for filter
165#else
166 fl_OPENFILENAMEW _ofn;
167 fl_BROWSEINFOW _binf;
168#endif
169 char **_pathnames; // array of pathnames
170 int _tpathnames; // total pathnames
171 char *_directory; // default pathname to use
172 char *_title; // title for window
173 char *_filter; // user-side search filter
174 char *_parsedfilt; // filter parsed for Windows dialog
175 int _nfilters; // number of filters parse_filter counted
176 char *_preset_file; // the file to preselect
177 char *_errmsg; // error message
178
179 // Private methods
180 void errmsg(const char *msg);
181
182 void clear_pathnames();
183 void set_single_pathname(const char *s);
184 void add_pathname(const char *s);
185
186 void ClearOFN();
187 void ClearBINF();
188 void Win2Unix(char *s);
189 void Unix2Win(char *s);
190 int showfile();
191 int showdir();
192
193 void parse_filter(const char *);
194 void clear_filters();
195 void add_filter(const char *, const char *);
196#endif
197
198#ifdef __APPLE__
199private:
200 int _btype; // kind-of browser to show()
201 int _options; // general options
202 void *_panel;
203 char **_pathnames; // array of pathnames
204 int _tpathnames; // total pathnames
205 char *_directory; // default pathname to use
206 char *_title; // title for window
207 char *_preset_file; // the 'save as' filename
208
209 char *_filter; // user-side search filter, eg:
210 // C Files\t*.[ch]\nText Files\t*.txt"
211
212 char *_filt_names; // filter names (tab delimited)
213 // eg. "C Files\tText Files"
214
215 char *_filt_patt[MAXFILTERS];
216 // array of filter patterns, eg:
217 // _filt_patt[0]="*.{cxx,h}"
218 // _filt_patt[1]="*.txt"
219
220 int _filt_total; // parse_filter() # of filters loaded
221 int _filt_value; // index of the selected filter
222 char *_errmsg; // error message
223
224 // Private methods
225 void errmsg(const char *msg);
226 void clear_pathnames();
227 void set_single_pathname(const char *s);
228 int get_saveas_basename(void);
229 void clear_filters();
230 void add_filter(const char *, const char *);
231 void parse_filter(const char *from);
232 int post();
233 int runmodal();
234#endif
235
236#if ! defined(__APPLE__) && !defined(WIN32)
237private:
238#if FLTK_ABI_VERSION <= 10302
239 int _btype; // kind-of browser to show()
240 int _options; // general options
241 int _nfilters;
242 char *_filter; // user supplied filter
243 char *_parsedfilt; // parsed filter
244 int _filtvalue; // selected filter
245 char *_preset_file;
246 char *_prevvalue; // Returned filename
247 char *_directory;
248 char *_errmsg; // error message
249#endif
250 static int have_looked_for_GTK_libs;
251 union {
252 Fl_FLTK_File_Chooser *_x11_file_chooser;
253 Fl_GTK_File_Chooser *_gtk_file_chooser;
254 };
255#endif
256};
257
258#if !defined(__APPLE__) && !defined(WIN32)
259class FL_EXPORT Fl_FLTK_File_Chooser {
260 friend class Fl_Native_File_Chooser;
261protected:
262 int _btype; // kind-of browser to show()
263 int _options; // general options
264 int _nfilters;
265 char *_filter; // user supplied filter
266 char *_parsedfilt; // parsed filter
267 int _filtvalue; // selected filter
268 char *_preset_file;
269 char *_prevvalue; // Returned filename
270 char *_directory;
271 char *_errmsg; // error message
272 Fl_FLTK_File_Chooser(int val);
273 virtual ~Fl_FLTK_File_Chooser();
274 void errmsg(const char *msg);
275 int type_fl_file(int);
276 void parse_filter();
277 int exist_dialog();
278 Fl_File_Chooser *_file_chooser;
279 virtual void type(int);
280 int type() const;
281 void options(int);
282 int options() const;
283 virtual int count() const;
284 virtual const char *filename() const;
285 virtual const char *filename(int i) const;
286 void directory(const char *val);
287 const char *directory() const;
288 virtual void title(const char *);
289 virtual const char* title() const;
290 const char *filter() const;
291 void filter(const char *);
292 int filters() const;
293 void filter_value(int i);
294 int filter_value() const;
295 void preset_file(const char*);
296 const char* preset_file() const;
297 const char *errmsg() const;
298 virtual int show();
299};
300
301
303 friend class Fl_Native_File_Chooser;
304private:
305 typedef struct _GtkWidget GtkWidget;
306 typedef struct _GtkFileFilterInfo GtkFileFilterInfo;
307 struct pair {
308 Fl_GTK_File_Chooser* running; // the running Fl_GTK_File_Chooser
309 const char *filter; // a filter string of the chooser
310 pair(Fl_GTK_File_Chooser* c, const char *f) {
311 running = c;
312 filter = strdup(f);
313 };
314 ~pair() {
315 free((char*)filter);
316 };
317 };
318 GtkWidget *gtkw_ptr; // used to hold a GtkWidget* without pulling GTK into everything...
319 void *gtkw_slist; // used to hold a GLib GSList...
320 unsigned gtkw_count; // number of files read back - if any
321 mutable char *gtkw_filename; // last name we read back
322 char *gtkw_title; // the title to be applied to the dialog
323 const char *previous_filter;
324
325 int fl_gtk_chooser_wrapper(); // method that wraps the GTK widget
326 Fl_GTK_File_Chooser(int val);
327 virtual ~Fl_GTK_File_Chooser();
328 static int did_find_GTK_libs;
329 static void probe_for_GTK_libs(void);
330 virtual void type(int);
331 virtual int count() const;
332 virtual const char *filename() const;
333 virtual const char *filename(int i) const;
334 virtual void title(const char *);
335 virtual const char* title() const;
336 virtual int show();
337 void changed_output_type(const char *filter);
338
339 static int custom_gtk_filter_function(const GtkFileFilterInfo*, Fl_GTK_File_Chooser::pair*);
340 static void free_pair(pair *p);
341};
342#endif // !defined(__APPLE__) && !defined(WIN32)
343
344#endif /*FL_NATIVE_FILE_CHOOSER_H*/
345
346//
347// End of "$Id$".
348//
Definition Fl_Native_File_Chooser.H:259
The Fl_File_Chooser widget displays a standard file selection dialog that supports various selection ...
Definition Fl_File_Chooser.H:48
Definition Fl_Native_File_Chooser.H:302
This class lets an FLTK application easily and consistently access the operating system's native file...
Definition Fl_Native_File_Chooser.H:111
static const char * file_exists_message
Localizable message.
Definition Fl_Native_File_Chooser.H:129
Type
Definition Fl_Native_File_Chooser.H:113
@ BROWSE_DIRECTORY
browse directories (lets user choose one directory)
Definition Fl_Native_File_Chooser.H:115
@ BROWSE_MULTI_FILE
browse files (lets user choose multiple files)
Definition Fl_Native_File_Chooser.H:116
@ BROWSE_SAVE_FILE
browse to save a file
Definition Fl_Native_File_Chooser.H:118
@ BROWSE_MULTI_DIRECTORY
browse directories (lets user choose multiple directories)
Definition Fl_Native_File_Chooser.H:117
Option
Definition Fl_Native_File_Chooser.H:121
File names and URI utility functions.