diff options
| author | Manolo Gouy <Manolo> | 2011-01-16 18:26:51 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2011-01-16 18:26:51 +0000 |
| commit | e2ddb1715c659dac6b8e751c2b5a772e229ebf57 (patch) | |
| tree | f1e164ebef308e8b6f4bc81102c5c733a15a218d | |
| parent | 774880acc5baa5ad24857a184f225a351c637e23 (diff) | |
Fl_File_Chooser: added a "Show hidden files" button. Hidden files aren't shown
by default now. This removes a TODO clause.
Fl_Native_File_Chooser: removed the hack that added the "Show hidden files" button, and
made the "file already exists" warning message localizable.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8282 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | FL/Fl_File_Chooser.H | 7 | ||||
| -rw-r--r-- | FL/Fl_Native_File_Chooser_FLTK.H | 12 | ||||
| -rw-r--r-- | FL/Fl_Native_File_Chooser_MAC.H | 1 | ||||
| -rw-r--r-- | FL/Fl_Native_File_Chooser_WIN32.H | 1 | ||||
| -rw-r--r-- | src/Fl_File_Chooser.cxx | 29 | ||||
| -rw-r--r-- | src/Fl_File_Chooser2.cxx | 14 | ||||
| -rw-r--r-- | src/Fl_Native_File_Chooser.cxx | 4 | ||||
| -rw-r--r-- | src/Fl_Native_File_Chooser_FLTK.cxx | 44 |
8 files changed, 55 insertions, 57 deletions
diff --git a/FL/Fl_File_Chooser.H b/FL/Fl_File_Chooser.H index 3b8777d97..21fa8ddd8 100644 --- a/FL/Fl_File_Chooser.H +++ b/FL/Fl_File_Chooser.H @@ -123,6 +123,9 @@ private: Fl_Return_Button *favOkButton; void cb_favOkButton_i(Fl_Return_Button*, void*); static void cb_favOkButton(Fl_Return_Button*, void*); + Fl_Check_Button *show_hidden; + static void show_hidden_cb(Fl_Check_Button*, void*); + void remove_hidden_files(); public: ~Fl_File_Chooser(); void callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0); @@ -213,6 +216,10 @@ public: [standard text may be customized at run-time] */ static const char *show_label; + /** + [standard text may be customized at run-time] + */ + static const char *hidden_label; /** the sort function that is used when loading the contents of a directory. diff --git a/FL/Fl_Native_File_Chooser_FLTK.H b/FL/Fl_Native_File_Chooser_FLTK.H index e97ffb037..5176ab77d 100644 --- a/FL/Fl_Native_File_Chooser_FLTK.H +++ b/FL/Fl_Native_File_Chooser_FLTK.H @@ -72,6 +72,8 @@ - Under X windows, it's best if you call Fl_File_Icon::load_system_icons() at the start of main(), to enable the nicer looking file browser widgets. + Use the static public attributes of class Fl_File_Chooser to localize + the browser. - Some operating systems support certain OS specific options; see Fl_Native_File_Chooser::options() for a list. @@ -95,6 +97,8 @@ public: NEW_FOLDER = 0x0002, ///< Show 'New Folder' icon (if supported) PREVIEW = 0x0004 ///< enable preview mode }; + /** Localizable message */ + static const char *file_exists_message; private: int _btype; // kind-of browser to show() int _options; // general options @@ -106,16 +110,8 @@ private: char *_prevvalue; // Returned filename char *_directory; char *_errmsg; // error message - char *_old_dir; Fl_File_Chooser *_file_chooser; - // added by MG - Fl_File_Browser *my_fileList; - Fl_Check_Button *show_hidden; - int prev_filtervalue; - static void show_hidden_cb(Fl_Check_Button *o, void *data); - static void remove_hidden_files(Fl_File_Browser *my_fileList); - // Private methods void errmsg(const char *msg); int type_fl_file(int); diff --git a/FL/Fl_Native_File_Chooser_MAC.H b/FL/Fl_Native_File_Chooser_MAC.H index 0a980e182..b34dcf118 100644 --- a/FL/Fl_Native_File_Chooser_MAC.H +++ b/FL/Fl_Native_File_Chooser_MAC.H @@ -49,6 +49,7 @@ public: NEW_FOLDER = 0x0002, // Show 'New Folder' icon (if supported) PREVIEW = 0x0004 // enable preview mode }; + static const char *file_exists_message; private: int _btype; // kind-of browser to show() int _options; // general options diff --git a/FL/Fl_Native_File_Chooser_WIN32.H b/FL/Fl_Native_File_Chooser_WIN32.H index 00f64e235..505136e7e 100644 --- a/FL/Fl_Native_File_Chooser_WIN32.H +++ b/FL/Fl_Native_File_Chooser_WIN32.H @@ -52,6 +52,7 @@ public: NEW_FOLDER = 0x0002, // Show 'New Folder' icon (if supported) PREVIEW = 0x0004, // enable preview mode }; + static const char *file_exists_message; private: int _btype; // kind-of browser to show() int _options; // general options diff --git a/src/Fl_File_Chooser.cxx b/src/Fl_File_Chooser.cxx index b71a778a3..d3a43e1cf 100644 --- a/src/Fl_File_Chooser.cxx +++ b/src/Fl_File_Chooser.cxx @@ -88,6 +88,26 @@ void Fl_File_Chooser::cb_previewButton(Fl_Check_Button* o, void* v) { ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_previewButton_i(o,v); } +void Fl_File_Chooser::remove_hidden_files() +{ + int count = fileList->size(); + for(int num = count; num >= 1; num--) { + const char *p = fileList->text(num); + if (*p == '.' && strcmp(p, "../") != 0) fileList->remove(num); + } + fileList->topline(1); +} + +void Fl_File_Chooser::show_hidden_cb(Fl_Check_Button* o, void* data) { + Fl_File_Chooser *mychooser = (Fl_File_Chooser *)data; + if (o->value()) { + mychooser->browser()->load(mychooser->directory()); + } else { + mychooser->remove_hidden_files(); + mychooser->browser()->redraw(); + } +} + void Fl_File_Chooser::cb_fileName_i(Fl_File_Input*, void*) { fileNameCB(); } @@ -208,6 +228,15 @@ Fl_File_Chooser::Fl_File_Chooser(const char *d, const char *p, int t, const char previewButton->callback((Fl_Callback*)cb_previewButton); previewButton->label(preview_label); } // Fl_Check_Button* previewButton + + { show_hidden = new Fl_Check_Button( + previewButton->x() + previewButton->w() + 30, 275, 140, 20, "Show hidden files"); + show_hidden->down_box(FL_DOWN_BOX); + show_hidden->value(0); + show_hidden->callback((Fl_Callback*)show_hidden_cb, this); + show_hidden->label(hidden_label); + } // Fl_Check_Button* show_hidden + { Fl_Box* o = new Fl_Box(115, 275, 365, 20); Fl_Group::current()->resizable(o); } // Fl_Box* o diff --git a/src/Fl_File_Chooser2.cxx b/src/Fl_File_Chooser2.cxx index d3d0d05cb..1237735ed 100644 --- a/src/Fl_File_Chooser2.cxx +++ b/src/Fl_File_Chooser2.cxx @@ -74,7 +74,11 @@ <TD>"My Computer" (WIN32)<BR> "File Systems" (all others)</TD> </TR> - <TR> + <TR> + <TD>hidden_label</TD> + <TD>"Show hidden files:"</TD> + </TR> + <TR> <TD>manage_favorites_label</TD> <TD>"Manage Favorites"</TD> </TR> @@ -98,7 +102,7 @@ <TD>show_label</TD> <TD>"Show:"</TD> </TR> - <TR> + <TR> <TD>sort</TD> <TD>fl_numericsort</TD> </TR> @@ -392,6 +396,7 @@ const char *Fl_File_Chooser::new_directory_tooltip = "Create a new directory."; const char *Fl_File_Chooser::preview_label = "Preview"; const char *Fl_File_Chooser::save_label = "Save"; const char *Fl_File_Chooser::show_label = "Show:"; +const char *Fl_File_Chooser::hidden_label = "Show hidden files"; Fl_File_Sort_F *Fl_File_Chooser::sort = fl_numericsort; @@ -1033,8 +1038,6 @@ Fl_File_Chooser::filter(const char *p) // I - Pattern(s) showChoice->add(custom_filter_label); - // TODO: add a menu item to switch hidden files on and off - showChoice->value(0); showChoiceCB(); } @@ -1147,6 +1150,7 @@ Fl_File_Chooser::rescan() // Build the file list... fileList->load(directory_, sort); + if (!show_hidden->value()) remove_hidden_files(); // Update the preview box... update_preview(); @@ -1172,6 +1176,7 @@ void Fl_File_Chooser::rescan_keep_filename() // Build the file list... fileList->load(directory_, sort); + if (!show_hidden->value()) remove_hidden_files(); // Update the preview box... update_preview(); @@ -1297,7 +1302,6 @@ Fl_File_Chooser::update_preview() int w, h; // Width and height of preview image int set = 0; // Set this flag as soon as a decent preview is found - if (!previewButton->value()) return; filename = value(); diff --git a/src/Fl_Native_File_Chooser.cxx b/src/Fl_Native_File_Chooser.cxx index 02f3ab9c1..418120e19 100644 --- a/src/Fl_Native_File_Chooser.cxx +++ b/src/Fl_Native_File_Chooser.cxx @@ -32,7 +32,7 @@ // Use Apple's chooser #ifdef __APPLE__ -//#include "Fl_Native_File_Chooser_MAC.mm" +#include <FL/Fl_Native_File_Chooser_MAC.H> #endif // All else falls back to FLTK's own chooser @@ -40,6 +40,8 @@ #include "Fl_Native_File_Chooser_FLTK.cxx" #endif +const char *Fl_Native_File_Chooser::file_exists_message = "File exists. Are you sure you want to overwrite?"; + // // End of "$Id$". // diff --git a/src/Fl_Native_File_Chooser_FLTK.cxx b/src/Fl_Native_File_Chooser_FLTK.cxx index d7bed1bc9..86968c61d 100644 --- a/src/Fl_Native_File_Chooser_FLTK.cxx +++ b/src/Fl_Native_File_Chooser_FLTK.cxx @@ -64,16 +64,6 @@ Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) { _file_chooser = new Fl_File_Chooser(NULL, NULL, 0, NULL); type(val); // do this after _file_chooser created _nfilters = 0; - - // Added by MG - Fl_Button *b = _file_chooser->previewButton; - Fl_Window *w = b->window(); - Fl_Group::current(w); // adds a "Show hidden files" check button in _file_chooser's window - show_hidden = new Fl_Check_Button(b->x() + b->w() + 10, b->y(), 145, b->h(), "Show hidden files"); - show_hidden->callback((Fl_Callback*)show_hidden_cb, this); - my_fileList = _file_chooser->browser(); - _old_dir = 0; // to detect directory changes - prev_filtervalue = _file_chooser->filter_value(); // to detect filter changes } /** @@ -88,7 +78,6 @@ Fl_Native_File_Chooser::~Fl_Native_File_Chooser() { _prevvalue = strfree(_prevvalue); _directory = strfree(_directory); _errmsg = strfree(_errmsg); - _old_dir = strfree(_old_dir); } // PRIVATE: SET ERROR MESSAGE @@ -198,14 +187,6 @@ int Fl_Native_File_Chooser::show() { // BLOCK WHILE BROWSER SHOWN while ( _file_chooser->shown() ) { - if (_old_dir==0 || strcmp(_old_dir, _file_chooser->directory()) != 0) { - _old_dir = strfree(_old_dir); - _old_dir = strnew(_file_chooser->directory()); - if (!show_hidden->value()) remove_hidden_files(my_fileList); - } else if (prev_filtervalue != _file_chooser->filter_value() ) { - prev_filtervalue = _file_chooser->filter_value(); - if (!show_hidden->value() ) remove_hidden_files(my_fileList); - } Fl::wait(); } @@ -471,32 +452,9 @@ const char* Fl_Native_File_Chooser::preset_file() const { return(_preset_file); } -void Fl_Native_File_Chooser::show_hidden_cb(Fl_Check_Button *o, void *data) -{ - Fl_Native_File_Chooser *mychooser = (Fl_Native_File_Chooser *)data; - if (o->value()) { - mychooser->my_fileList->load(mychooser->_file_chooser->directory()); - } else { - remove_hidden_files(mychooser->my_fileList); - mychooser->my_fileList->redraw(); - } -} - -// PRIVATE: Don't show hidden files -void Fl_Native_File_Chooser::remove_hidden_files(Fl_File_Browser *my_fileList) -{ - int count = my_fileList->size(); - for(int num = count; num >= 1; num--) { - const char *p = my_fileList->text(num); - if (*p == '.' && strcmp(p, "../") != 0) my_fileList->remove(num); - } - my_fileList->topline(1); -} -// PRIVATE: Don't show hidden files int Fl_Native_File_Chooser::exist_dialog() { - return(fl_choice("File exists. Are you sure you want to overwrite?", - "Cancel", " OK ", NULL)); + return(fl_choice("%s", fl_cancel, fl_ok, NULL, file_exists_message)); } // |
