00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _FL_FILEDIALOG_H_
00023 #define _FL_FILEDIALOG_H_
00024
00025 #include "Enumerations.h"
00026 #include "Fl_Image_Cache.h"
00027 #include "Fl_Input_Browser.h"
00028 #include "Fl_Item.h"
00029 #include "Fl_Dialog.h"
00030 #include "Fl_Group.h"
00031 #include "Fl_Check_Button.h"
00032 #include "Fl_Highlight_Button.h"
00033 #include "Fl_FileBrowser.h"
00034
00035 class PreviewBox;
00036
00038 class Fl_File_Chooser : public Fl_Dialog
00039 {
00040 public:
00041
00042 enum {
00043 _DEFAULT = 0,
00044 _SAVE,
00045 _DIRECTORY
00046 };
00047
00048
00049
00050 Fl_File_Chooser(int w, int h, const char *label=0, int mode=0);
00051 ~Fl_File_Chooser();
00052
00053
00054 void default_filename(const Fl_String &f) { m_default_filename = f; }
00055 void default_filename(const char *f) { m_default_filename = f; }
00056
00057
00058 void directory(const Fl_String &path);
00059 void directory(const char *path) { Fl_String tmp(path); directory(tmp); }
00060
00061
00062 const Fl_String &directory() const { return m_filebrowser->directory(); }
00063
00064 const char *file_input() const { return m_file_input->value(); }
00065 void file_input(const char *v) { m_file_input->value(v); }
00066
00067
00068 const char *pattern() const { return m_filter_input->item() ? (const char *)m_filter_input->item()->user_data() : ""; }
00069
00070
00071 const char *filter_name() const { return m_filter_input->value(); }
00072
00073
00074 int mode() const { return m_mode; }
00075
00076
00077 char **get_selected();
00078
00079
00080 void get_selected(Fl_String_List &list);
00081
00082
00083 void multi_selection(bool v) { if(v) m_filebrowser->type(m_filebrowser->type()|Fl_ListView::MULTI_SELECTION); else m_filebrowser->type(m_filebrowser->type()&~Fl_ListView::MULTI_SELECTION); }
00084 bool multi_selection() { return m_filebrowser->multi(); }
00085
00086 bool preview() const { return m_preview->value(); }
00087 void preview(bool show);
00088
00089
00090 void update_preview(const Fl_String filename);
00091
00092
00093
00094 void get_filename(Fl_String path, Fl_String &buf);
00095
00096
00097 void get_filepath(Fl_String path, Fl_String &buf);
00098
00099
00100 Fl_File_Browser *filebrowser() { return m_filebrowser; }
00101
00102
00103 void up();
00104
00105 void refresh() { directory(directory()); }
00106
00107
00108 Fl_String new_dir();
00109
00110
00111
00112 void filters(const char *filters);
00113
00114
00115 void read_dir(const char *path) { directory(path); }
00116
00117 virtual int handle(int e);
00118 virtual void layout();
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130 virtual bool save_data(Fl_Data_Source *ds=0);
00131
00132 protected:
00133
00134 void make_group();
00135
00136
00137 void parse_dirs(const Fl_String &fp);
00138
00139 Fl_Highlight_Button *m_up;
00140 Fl_Highlight_Button *m_home;
00141 Fl_Highlight_Button *m_refresh;
00142 Fl_Highlight_Button *m_new_folder;
00143
00144 Fl_Input_Browser *m_path_input;
00145 Fl_Input_Browser *m_filter_input;
00146 Fl_Input_Browser *m_file_input;
00147 Fl_Check_Button *m_preview;
00148
00149 Fl_File_Browser *m_filebrowser;
00150
00151 private:
00152 PreviewBox *m_preview_box;
00153 Fl_String m_default_filename;
00154 int m_mode;
00155
00156 void file_clicked(Fl_ListView_Item *i);
00157 void folder_clicked(Fl_ListView_Item *i);
00158
00159 static void cb_list (Fl_File_Browser *w, Fl_File_Chooser *d);
00160 static inline void cb_preview(Fl_Widget *w, Fl_File_Chooser *d) { d->preview(bool(w->value()==1)); }
00161
00162 static inline void cb_new (Fl_Widget *, Fl_File_Chooser *d) { d->new_dir(); }
00163 static inline void cb_home (Fl_Widget *, Fl_File_Chooser *d) { d->directory(fl_homedir()); }
00164 static inline void cb_refresh(Fl_Widget *, Fl_File_Chooser *d) { d->refresh(); }
00165 static inline void cb_up (Fl_Widget *, Fl_File_Chooser *d) { d->up(); }
00166
00167 static inline void cb_dirc (Fl_Input_Browser *w, Fl_File_Chooser *d) { d->directory(w->value()); }
00168 static inline void cb_filter(Fl_Input_Browser *w, Fl_File_Chooser *d) { d->filebrowser()->pattern((const char *)w->item()->user_data()); d->refresh(); }
00169 static void cb_location (Fl_Input_Browser *w, Fl_File_Chooser *d);
00170 };
00171
00172
00173
00174
00175
00176
00177 extern FL_API char *fl_select_file(const char *path=0, char *filters=0, const char *caption=0);
00178 extern FL_API char **fl_select_files(const char *path=0, char *filters=0, const char *caption=0);
00179
00180
00181 extern FL_API char *fl_save_file(const char *path=0, char *filters=0, const char *caption=0);
00182
00183
00184 extern FL_API char *fl_select_dir(const char *path=0, const char *cap=0);
00185
00186 extern FL_API int fc_initial_w;
00187 extern FL_API int fc_initial_h;
00188 extern FL_API bool fc_initial_preview;
00189
00190 #endif