diff options
| -rw-r--r-- | FL/Fl_File_Chooser.H | 23 | ||||
| -rw-r--r-- | src/Fl_File_Chooser.cxx | 147 | ||||
| -rw-r--r-- | src/Fl_File_Chooser.fl | 27 | ||||
| -rw-r--r-- | src/Fl_File_Chooser2.cxx | 39 |
4 files changed, 126 insertions, 110 deletions
diff --git a/FL/Fl_File_Chooser.H b/FL/Fl_File_Chooser.H index 6dcd480db..9fdd1246e 100644 --- a/FL/Fl_File_Chooser.H +++ b/FL/Fl_File_Chooser.H @@ -95,6 +95,11 @@ public: private: void cb_previewButton_i(Fl_Check_Button*, void*); static void cb_previewButton(Fl_Check_Button*, void*); +public: + Fl_Check_Button *showHiddenButton; +private: + void cb_showHiddenButton_i(Fl_Check_Button*, void*); + static void cb_showHiddenButton(Fl_Check_Button*, void*); Fl_File_Input *fileName; void cb_fileName_i(Fl_File_Input*, void*); static void cb_fileName(Fl_File_Input*, void*); @@ -123,11 +128,6 @@ private: Fl_Return_Button *favOkButton; void cb_favOkButton_i(Fl_Return_Button*, void*); static void cb_favOkButton(Fl_Return_Button*, void*); -#ifndef WIN32 - Fl_Check_Button *show_hidden; - static void show_hidden_cb(Fl_Check_Button*, void*); - void remove_hidden_files(); -#endif public: ~Fl_File_Chooser(); void callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0); @@ -149,9 +149,13 @@ public: const char * ok_label(); void preview(int e); int preview() const { return previewButton->value(); }; +private: + void showHidden(int e); + void remove_hidden_files(); +public: void rescan(); void rescan_keep_filename(); - void show(); + void show(); int shown(); void textcolor(Fl_Color c); Fl_Color textcolor(); @@ -218,10 +222,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; + */ + static const char *hidden_label; /** the sort function that is used when loading the contents of a directory. @@ -231,7 +235,6 @@ private: Fl_Widget* ext_group; public: Fl_Widget* add_extra(Fl_Widget* gr); - Fl_File_Browser *browser(void) {return fileList; }; }; FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname,int relative=0); FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname,int relative=0); diff --git a/src/Fl_File_Chooser.cxx b/src/Fl_File_Chooser.cxx index 75718cdd1..8ef6e15ca 100644 --- a/src/Fl_File_Chooser.cxx +++ b/src/Fl_File_Chooser.cxx @@ -87,27 +87,14 @@ void Fl_File_Chooser::cb_previewButton_i(Fl_Check_Button*, void*) { 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); } -#ifndef WIN32 -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(); - } -} -#endif + +void Fl_File_Chooser::cb_showHiddenButton_i(Fl_Check_Button*, void*) { + showHidden(showHiddenButton->value()); +} +void Fl_File_Chooser::cb_showHiddenButton(Fl_Check_Button* o, void* v) { + ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_showHiddenButton_i(o,v); +} + void Fl_File_Chooser::cb_fileName_i(Fl_File_Input*, void*) { fileNameCB(); } @@ -228,15 +215,11 @@ 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 -#ifndef WIN32 - { 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 -#endif + { showHiddenButton = new Fl_Check_Button(115, 275, 165, 20, "Show hidden files"); + showHiddenButton->down_box(FL_DOWN_BOX); + showHiddenButton->callback((Fl_Callback*)cb_showHiddenButton); + showHiddenButton->label(hidden_label); + } // Fl_Check_Button* showHiddenButton { Fl_Box* o = new Fl_Box(115, 275, 365, 20); Fl_Group::current()->resizable(o); } // Fl_Box* o @@ -315,31 +298,31 @@ Fl_File_Chooser::Fl_File_Chooser(const char *d, const char *p, int t, const char favWindow->end(); } // Fl_Double_Window* favWindow callback_ = 0; -data_ = 0; -directory_[0] = 0; -window->size_range(window->w(), window->h(), Fl::w(), Fl::h()); -type(t); -filter(p); -update_favorites(); -value(d); -type(t); -int e; -prefs_.get("preview", e, 1); -preview(e); -Fl_Group::current(prev_current); + data_ = 0; + directory_[0] = 0; + window->size_range(window->w(), window->h(), Fl::w(), Fl::h()); + type(t); + filter(p); + update_favorites(); + value(d); + type(t); + int e; + prefs_.get("preview", e, 1); + preview(e); + Fl_Group::current(prev_current); ext_group=(Fl_Widget*)0; } Fl_File_Chooser::~Fl_File_Chooser() { Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this); -if(ext_group)window->remove(ext_group); -delete window; -delete favWindow; + if(ext_group)window->remove(ext_group); + delete window; + delete favWindow; } void Fl_File_Chooser::callback(void (*cb)(Fl_File_Chooser *, void *), void *d ) { callback_ = cb; -data_ = d; + data_ = d; } void Fl_File_Chooser::color(Fl_Color c) { @@ -364,7 +347,7 @@ int Fl_File_Chooser::filter_value() { void Fl_File_Chooser::filter_value(int f) { showChoice->value(f); -showChoiceCB(); + showChoiceCB(); } void Fl_File_Chooser::hide() { @@ -389,27 +372,17 @@ const char * Fl_File_Chooser::label() { void Fl_File_Chooser::ok_label(const char *l) { okButton->label(l); -int w=0, h=0; -okButton->measure_label(w, h); -okButton->resize(cancelButton->x() - 50 - w, cancelButton->y(), - w + 40, 25); -okButton->parent()->init_sizes(); + int w=0, h=0; + okButton->measure_label(w, h); + okButton->resize(cancelButton->x() - 50 - w, cancelButton->y(), + w + 40, 25); + okButton->parent()->init_sizes(); } const char * Fl_File_Chooser::ok_label() { return (okButton->label()); } -void Fl_File_Chooser::show() { - window->hotspot(fileList); -window->show(); -Fl::flush(); -fl_cursor(FL_CURSOR_WAIT); -rescan_keep_filename(); -fl_cursor(FL_CURSOR_DEFAULT); -fileName->take_focus(); -} - int Fl_File_Chooser::shown() { return window->shown(); } @@ -440,18 +413,18 @@ Fl_Fontsize Fl_File_Chooser::textsize() { void Fl_File_Chooser::type(int t) { type_ = t; -if (t & MULTI) - fileList->type(FL_MULTI_BROWSER); -else - fileList->type(FL_HOLD_BROWSER); -if (t & CREATE) - newButton->activate(); -else - newButton->deactivate(); -if (t & DIRECTORY) - fileList->filetype(Fl_File_Browser::DIRECTORIES); -else - fileList->filetype(Fl_File_Browser::FILES); + if (t & MULTI) + fileList->type(FL_MULTI_BROWSER); + else + fileList->type(FL_HOLD_BROWSER); + if (t & CREATE) + newButton->activate(); + else + newButton->deactivate(); + if (t & DIRECTORY) + fileList->filetype(Fl_File_Browser::DIRECTORIES); + else + fileList->filetype(Fl_File_Browser::FILES); } int Fl_File_Chooser::type() { @@ -477,22 +450,22 @@ Fl_Widget* Fl_File_Chooser::add_extra(Fl_Widget* gr) { } if (ext_group) { int sh=ext_group->h()+4; -Fl_Widget* svres=window->resizable(); -window->resizable(NULL); -window->size(window->w(),window->h()-sh); -window->remove(ext_group); -ext_group=NULL; -window->resizable(svres); + Fl_Widget* svres=window->resizable(); + window->resizable(NULL); + window->size(window->w(),window->h()-sh); + window->remove(ext_group); + ext_group=NULL; + window->resizable(svres); } if (gr) { int nh=window->h()+gr->h()+4; -Fl_Widget* svres=window->resizable(); -window->resizable(NULL); -window->size(window->w(),nh); -gr->position(2,okButton->y()+okButton->h()+2); -window->add(gr); -ext_group=gr; -window->resizable(svres); + Fl_Widget* svres=window->resizable(); + window->resizable(NULL); + window->size(window->w(),nh); + gr->position(2,okButton->y()+okButton->h()+2); + window->add(gr); + ext_group=gr; + window->resizable(svres); } return ret; } diff --git a/src/Fl_File_Chooser.fl b/src/Fl_File_Chooser.fl index bf1980dd2..c0d14fe3f 100644 --- a/src/Fl_File_Chooser.fl +++ b/src/Fl_File_Chooser.fl @@ -40,8 +40,8 @@ class FL_EXPORT Fl_File_Chooser {open decl {static Fl_Preferences prefs_;} {} decl {void (*callback_)(Fl_File_Chooser*, void *);} {} decl {void *data_;} {} - decl {char directory_[1024];} {} - decl {char pattern_[1024];} {} + decl {char directory_[FL_PATH_MAX];} {} + decl {char pattern_[FL_PATH_MAX];} {} decl {char preview_text_[2048];} {} decl {int type_;} {} decl {void favoritesButtonCB();} {} @@ -115,6 +115,12 @@ window->hide();} open xywh {10 275 73 20} down_box DOWN_BOX shortcut 0x80070 value 1 code0 {previewButton->label(preview_label);} } + Fl_Check_Button showHiddenButton { + label {Show hidden files} + callback {showHidden(showHiddenButton->value());} + xywh {115 275 165 20} down_box DOWN_BOX + code0 {showHiddenButton->label(hidden_label);} + } Fl_Box {} { private xywh {115 275 365 20} resizable } @@ -301,19 +307,15 @@ okButton->parent()->init_sizes();} {} } decl {int preview() const { return previewButton->value(); }} {public } + decl {void showHidden(int e);} {private + } + decl {void remove_hidden_files();} {private + } decl {void rescan();} {public } decl {void rescan_keep_filename();} {public } - Function {show()} {open return_type void - } { - code {window->hotspot(fileList); -window->show(); -Fl::flush(); -fl_cursor(FL_CURSOR_WAIT); -rescan_keep_filename(); -fl_cursor(FL_CURSOR_DEFAULT); -fileName->take_focus();} {} + decl {void show();} {public } Function {shown()} {return_type int } { @@ -418,6 +420,9 @@ else decl {static const char *show_label;} { comment {[standard text may be customized at run-time]} public } + decl {static const char *hidden_label;} { + comment {[standard text may be customized at run-time]} public + } decl {static Fl_File_Sort_F *sort;} { comment {the sort function that is used when loading the contents of a directory.} public diff --git a/src/Fl_File_Chooser2.cxx b/src/Fl_File_Chooser2.cxx index 7b9105e00..37a788145 100644 --- a/src/Fl_File_Chooser2.cxx +++ b/src/Fl_File_Chooser2.cxx @@ -347,6 +347,7 @@ #include <FL/fl_ask.H> #include <FL/x.H> #include <FL/Fl_Shared_Image.H> +#include <FL/fl_draw.H> #include <stdio.h> #include <stdlib.h> @@ -1151,7 +1152,7 @@ Fl_File_Chooser::rescan() // Build the file list... fileList->load(directory_, sort); #ifndef WIN32 - if (!show_hidden->value()) remove_hidden_files(); + if (!showHiddenButton->value()) remove_hidden_files(); #endif // Update the preview box... update_preview(); @@ -1178,7 +1179,7 @@ void Fl_File_Chooser::rescan_keep_filename() // Build the file list... fileList->load(directory_, sort); #ifndef WIN32 - if (!show_hidden->value()) remove_hidden_files(); + if (!showHiddenButton->value()) remove_hidden_files(); #endif // Update the preview box... update_preview(); @@ -1576,8 +1577,42 @@ Fl_File_Chooser::value(const char *filename) break; } } + +void Fl_File_Chooser::show() +{ + window->hotspot(fileList); + window->show(); + Fl::flush(); + fl_cursor(FL_CURSOR_WAIT); + rescan_keep_filename(); + fl_cursor(FL_CURSOR_DEFAULT); + fileName->take_focus(); +#ifdef WIN32 + showHiddenButton->hide(); +#endif +} +void Fl_File_Chooser::showHidden(int value) +{ + if (value) { + fileList->load(directory()); + } else { + remove_hidden_files(); + fileList->redraw(); + } +} + +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); +} + // // 'compare_dirnames()' - Compare two directory names. // |
