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
This commit is contained in:
Manolo Gouy 2011-01-16 18:26:51 +00:00
parent 774880acc5
commit e2ddb1715c
8 changed files with 55 additions and 57 deletions

View File

@ -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.

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -74,6 +74,10 @@
<TD>"My Computer" (WIN32)<BR>
"File Systems" (all others)</TD>
</TR>
<TR>
<TD>hidden_label</TD>
<TD>"Show hidden files:"</TD>
</TR>
<TR>
<TD>manage_favorites_label</TD>
<TD>"Manage Favorites"</TD>
@ -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();

View File

@ -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$".
//

View File

@ -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));
}
//