Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

Fl_File_Dialog.h

00001 /*
00002  * $Id: Fl_File_Dialog.h,v 1.18 2003/05/29 23:27:28 leka Exp $
00003  *
00004  * Extended Fast Light Toolkit (EFLTK)
00005  * Copyright (C) 2002-2003 by EDE-Team
00006  * WWW: http://www.sourceforge.net/projects/ede
00007  *
00008  * Fast Light Toolkit (FLTK)
00009  * Copyright (C) 1998-2003 by Bill Spitzak and others.
00010  * WWW: http://www.fltk.org
00011  *
00012  * This library is distributed under the GNU LIBRARY GENERAL PUBLIC LICENSE
00013  * version 2. See COPYING for details.
00014  *
00015  * Author : Mikko Lahteenmaki
00016  * Email  : mikko@fltk.net
00017  *
00018  * Please report all bugs and problems to "efltk-bugs@fltk.net"
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     // Modes:
00042     enum {
00043         _DEFAULT = 0,
00044         _SAVE,
00045         _DIRECTORY
00046     };
00047 
00048     // ctor / dtor
00049     //Fl_File_Chooser(int x, int y, int w, int h, const char *label=0, int mode=0);
00050     Fl_File_Chooser(int w, int h, const char *label=0, int mode=0);
00051     ~Fl_File_Chooser();
00052 
00053     // When Opening directory, it tries to find 'default filename' and mark item as selected.
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     // Change directory to 'path'
00058     void directory(const Fl_String &path);
00059     void directory(const char *path) { Fl_String tmp(path); directory(tmp); }
00060 
00061     // Get current path
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     // Get current pattern, e.g. "*.xpm"
00068     const char *pattern() const { return m_filter_input->item() ? (const char *)m_filter_input->item()->user_data() : ""; }
00069 
00070     // Get current filter name, e.g. "Xpm Files"
00071     const char *filter_name() const { return m_filter_input->value(); }
00072 
00073     // Returns mode of file chooser
00074     int mode() const { return m_mode; }
00075 
00076     // Returns NULL terminated list of selected files.
00077     char **get_selected();
00078 
00079     // Store selected files to 'list'
00080     void get_selected(Fl_String_List &list);
00081 
00082     // Set / Get multi selection
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     // Updates preview box
00090     void update_preview(const Fl_String filename);
00091 
00092     // Stores full path to file 'buf'. Includes filename, path could be e.g. 'filename.ext' or 'c:\filename.ext'.
00093     // Prepends directory(), if needed.
00094     void get_filename(Fl_String path, Fl_String &buf);
00095 
00096     // Stores full path to directory w/o filename to 'buf'. Path could be e.g. 'c:\dir\somef' then 'c:\dir\' is returned
00097     void get_filepath(Fl_String path, Fl_String &buf);
00098 
00099     // Get file listview object
00100     Fl_File_Browser *filebrowser() { return m_filebrowser; }
00101 
00102     // Go one dir up
00103     void up();
00104     // Refresh contents
00105     void refresh() { directory(directory()); }
00106     // Create new dir. Popup dialog, for asking dirname.
00107     // Returns fullpath to created dir or empty string in error
00108     Fl_String new_dir();
00109 
00110     // Set new filters.
00111     // Format e.g. "All Files, *, Cpp Files, *.{cpp|cxx|C}";
00112     void filters(const char *filters);
00113 
00114     // Backward compatibility:
00115     void read_dir(const char *path) { directory(path); }
00116 
00117     virtual int handle(int e);
00118     virtual void layout();
00119 
00120     /* BROKEN, for now..
00121      #ifdef _WIN32
00122      // MS Windows network stuff:
00123      bool enum_netresources(Fl_Callback *cb, LPNETRESOURCE lpnr, DWORD scope);
00124      void read_network(LPNETRESOURCE net=0);
00125      void add_netitem(LPNETRESOURCE net);
00126      DWORD scope;
00127      #endif
00128      */
00129 
00130     virtual bool save_data(Fl_Data_Source *ds=0);
00131 
00132 protected:
00133     // Creates group
00134     void make_group();
00135 
00136     //Parses 'fp' to 'm_path_input'
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 // Filter string format:
00173 // char *filters = "All Files, *, Cpp Files, *.{cpp|cxx|C}";
00174 // There MUST be always 'Typename' and 'Pattern'!
00175 
00176 // File select dialogs
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 // Save file dialog
00181 extern FL_API char *fl_save_file(const char *path=0, char *filters=0, const char *caption=0);
00182 
00183 // Directory select dialog
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

Generated on Thu Jul 31 15:33:43 2003 for eFLTK by doxygen1.2.15