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:
parent
774880acc5
commit
e2ddb1715c
@ -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.
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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$".
|
||||
//
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user