FLTK
Fl_Native_File_Chooser.H
Go to the documentation of this file.
1 //
2 // FLTK native OS file chooser widget
3 //
4 // Copyright 1998-2016 by Bill Spitzak and others.
5 // Copyright 2004 Greg Ercolano.
6 //
7 // This library is free software. Distribution and use rights are outlined in
8 // the file "COPYING" which should have been included with this file. If this
9 // file is missing or damaged, see the license at:
10 //
11 // https://www.fltk.org/COPYING.php
12 //
13 // Please see the following page on how to report bugs and issues:
14 //
15 // https://www.fltk.org/bugs.php
16 //
17 
21 /* Implementation note:
22 
23  class Fl_Native_File_Chooser <== public API used by applications
24 
25  class Fl_Native_File_Chooser_Driver <== virtual API that a platform may implement
26  this API has a do-nothing default implementation
27 
28  class Fl_Native_File_Chooser_FLTK_Driver <== this API implementation is the default FLTK file chooser
29  class Fl_GTK_Native_File_Chooser_Driver <== this API implementation runs a GTK file chooser
30  it is determined at run-time if the GTK dynamic libraries are available
31 
32  class Fl_Quartz_Native_File_Chooser_Driver <== this API implementation runs a Mac OS X file chooser
33 
34  class Fl_WinAPI_Native_File_Chooser_Driver <== this API implementation runs a Windows file chooser
35 
36 
37  Each platform must implement the constructor of the Fl_Native_File_Chooser class.
38  This particular implementation:
39 
40  Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) {
41  platform_fnfc = new Fl_Native_File_Chooser_FLTK_Driver(val);
42  }
43 
44  can be used by any platform.
45  No more code is required. The cross-platform Fl_Native_File_Chooser_FLTK.cxx file must be compiled in libfltk,
46  and the default FLTK file chooser will be used.
47 
48  This other implementation:
49  Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) {
50  platform_fnfc = 0;
51  }
52  can be used by a platform that needs no file chooser.
53  */
54 
55 #ifndef FL_NATIVE_FILE_CHOOSER_H
56 #define FL_NATIVE_FILE_CHOOSER_H
57 
58 #include <FL/Fl_Export.H>
59 #include <FL/Fl_File_Chooser.H>
60 
61 class Fl_Native_File_Chooser_Driver;
62 
119 class FL_EXPORT Fl_Native_File_Chooser {
120 private:
121  Fl_Native_File_Chooser_Driver *platform_fnfc;
122 public:
123  enum Type {
124  BROWSE_FILE = 0,
129  BROWSE_SAVE_DIRECTORY
130  };
131  enum Option {
132  NO_OPTIONS = 0x0000,
133  SAVEAS_CONFIRM = 0x0001,
134  NEW_FOLDER = 0x0002,
135  PREVIEW = 0x0004,
136  USE_FILTER_EXT = 0x0008
137  };
138  static const char *file_exists_message;
139 
145  Fl_Native_File_Chooser(int val = BROWSE_FILE); // each platorm implements it
147  void type(int t);
148  int type() const ;
149  void options(int o);
150  int options() const;
151  int count() const;
152  const char *filename() const ;
153  const char *filename(int i) const ;
154  void directory(const char *val) ;
155  const char *directory() const;
156  void title(const char *t);
157  const char* title() const;
158  const char *filter() const ;
159  void filter(const char *f);
160  int filters() const ;
161  void filter_value(int i) ;
162  int filter_value() const ;
163  void preset_file(const char*f) ;
164  const char* preset_file() const;
165  const char *errmsg() const ;
166  int show() ;
167  };
168 
181 class Fl_Native_File_Chooser_Driver {
182 protected:
183  static void chrcat(char *s, char c);
184  static char *strapp(char *s, const char *val);
185  static char *strfree(char *val);
186  static char *strnew(const char *val);
187 public:
188  Fl_Native_File_Chooser_Driver(int val) {}
189  virtual ~Fl_Native_File_Chooser_Driver() {}
190  virtual void type(int t) {}
191  virtual int type() const {return 0;}
192  virtual void options(int o) {}
193  virtual int options() const {return 0;}
194  virtual int count() const {return 0;}
195  virtual const char *filename() const {return 0;}
196  virtual const char *filename(int i) const {return 0;}
197  virtual void directory(const char *val) {}
198  virtual const char *directory() const {return 0;}
199  virtual void title(const char *t) {}
200  virtual const char* title() const {return 0;}
201  virtual const char *filter() const {return 0;}
202  virtual void filter(const char *f) {}
203  virtual int filters() const {return 0;}
204  virtual void filter_value(int i) {}
205  virtual int filter_value() const {return 0;}
206  virtual void preset_file(const char*f) {}
207  virtual const char* preset_file() const {return 0;}
208  virtual const char *errmsg() const {return 0;}
209  virtual int show() {return 1;}
210 };
211 
223 class Fl_Native_File_Chooser_FLTK_Driver : public Fl_Native_File_Chooser_Driver {
224 private:
225  void errmsg(const char *msg);
226  int type_fl_file(int val);
227  int exist_dialog();
228  void parse_filter();
229 protected:
230  int _btype; // kind-of browser to show()
231  int _options; // general options
232  int _nfilters;
233  char *_filter; // user supplied filter
234  char *_parsedfilt; // parsed filter
235  int _filtvalue; // selected filter
236  char *_preset_file;
237  char *_prevvalue; // Returned filename
238  char *_directory;
239  char *_errmsg; // error message
240  Fl_File_Chooser *_file_chooser;
241 public:
242  Fl_Native_File_Chooser_FLTK_Driver(int val);
243  virtual ~Fl_Native_File_Chooser_FLTK_Driver();
244  virtual void type(int t);
245  virtual int type() const ;
246  virtual void options(int o);
247  virtual int options() const;
248  virtual int count() const;
249  virtual const char *filename() const ;
250  virtual const char *filename(int i) const ;
251  virtual void directory(const char *val) ;
252  virtual const char *directory() const;
253  virtual void title(const char *t);
254  virtual const char* title() const;
255  virtual const char *filter() const ;
256  virtual void filter(const char *f);
257  virtual int filters() const ;
258  virtual void filter_value(int i) ;
259  virtual int filter_value() const ;
260  virtual void preset_file(const char*f) ;
261  virtual const char* preset_file() const;
262  virtual const char *errmsg() const ;
263  virtual int show() ;
264 };
265 
272 #endif /*FL_NATIVE_FILE_CHOOSER_H*/
Option
Definition: Fl_Native_File_Chooser.H:131
This class lets an FLTK application easily and consistently access the operating system&#39;s native file...
Definition: Fl_Native_File_Chooser.H:119
Type
Definition: Fl_Native_File_Chooser.H:123
static const char * file_exists_message
Localizable message.
Definition: Fl_Native_File_Chooser.H:138
The Fl_File_Chooser widget displays a standard file selection dialog that supports various selection ...
Definition: Fl_File_Chooser.H:46
browse files (lets user choose multiple files)
Definition: Fl_Native_File_Chooser.H:126
browse directories (lets user choose multiple directories)
Definition: Fl_Native_File_Chooser.H:127
browse directories (lets user choose one directory)
Definition: Fl_Native_File_Chooser.H:125
browse to save a file
Definition: Fl_Native_File_Chooser.H:128