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;
|
Fl_Return_Button *favOkButton;
|
||||||
void cb_favOkButton_i(Fl_Return_Button*, void*);
|
void cb_favOkButton_i(Fl_Return_Button*, void*);
|
||||||
static void cb_favOkButton(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:
|
public:
|
||||||
~Fl_File_Chooser();
|
~Fl_File_Chooser();
|
||||||
void callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0);
|
void callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0);
|
||||||
@ -213,6 +216,10 @@ public:
|
|||||||
[standard text may be customized at run-time]
|
[standard text may be customized at run-time]
|
||||||
*/
|
*/
|
||||||
static const char *show_label;
|
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 sort function that is used when loading
|
||||||
the contents of a directory.
|
the contents of a directory.
|
||||||
|
@ -72,6 +72,8 @@
|
|||||||
|
|
||||||
- Under X windows, it's best if you call Fl_File_Icon::load_system_icons()
|
- 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.
|
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
|
- Some operating systems support certain OS specific options; see
|
||||||
Fl_Native_File_Chooser::options() for a list.
|
Fl_Native_File_Chooser::options() for a list.
|
||||||
|
|
||||||
@ -95,6 +97,8 @@ public:
|
|||||||
NEW_FOLDER = 0x0002, ///< Show 'New Folder' icon (if supported)
|
NEW_FOLDER = 0x0002, ///< Show 'New Folder' icon (if supported)
|
||||||
PREVIEW = 0x0004 ///< enable preview mode
|
PREVIEW = 0x0004 ///< enable preview mode
|
||||||
};
|
};
|
||||||
|
/** Localizable message */
|
||||||
|
static const char *file_exists_message;
|
||||||
private:
|
private:
|
||||||
int _btype; // kind-of browser to show()
|
int _btype; // kind-of browser to show()
|
||||||
int _options; // general options
|
int _options; // general options
|
||||||
@ -106,16 +110,8 @@ private:
|
|||||||
char *_prevvalue; // Returned filename
|
char *_prevvalue; // Returned filename
|
||||||
char *_directory;
|
char *_directory;
|
||||||
char *_errmsg; // error message
|
char *_errmsg; // error message
|
||||||
char *_old_dir;
|
|
||||||
Fl_File_Chooser *_file_chooser;
|
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
|
// Private methods
|
||||||
void errmsg(const char *msg);
|
void errmsg(const char *msg);
|
||||||
int type_fl_file(int);
|
int type_fl_file(int);
|
||||||
|
@ -49,6 +49,7 @@ public:
|
|||||||
NEW_FOLDER = 0x0002, // Show 'New Folder' icon (if supported)
|
NEW_FOLDER = 0x0002, // Show 'New Folder' icon (if supported)
|
||||||
PREVIEW = 0x0004 // enable preview mode
|
PREVIEW = 0x0004 // enable preview mode
|
||||||
};
|
};
|
||||||
|
static const char *file_exists_message;
|
||||||
private:
|
private:
|
||||||
int _btype; // kind-of browser to show()
|
int _btype; // kind-of browser to show()
|
||||||
int _options; // general options
|
int _options; // general options
|
||||||
|
@ -52,6 +52,7 @@ public:
|
|||||||
NEW_FOLDER = 0x0002, // Show 'New Folder' icon (if supported)
|
NEW_FOLDER = 0x0002, // Show 'New Folder' icon (if supported)
|
||||||
PREVIEW = 0x0004, // enable preview mode
|
PREVIEW = 0x0004, // enable preview mode
|
||||||
};
|
};
|
||||||
|
static const char *file_exists_message;
|
||||||
private:
|
private:
|
||||||
int _btype; // kind-of browser to show()
|
int _btype; // kind-of browser to show()
|
||||||
int _options; // general options
|
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);
|
((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*) {
|
void Fl_File_Chooser::cb_fileName_i(Fl_File_Input*, void*) {
|
||||||
fileNameCB();
|
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->callback((Fl_Callback*)cb_previewButton);
|
||||||
previewButton->label(preview_label);
|
previewButton->label(preview_label);
|
||||||
} // Fl_Check_Button* previewButton
|
} // 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_Box* o = new Fl_Box(115, 275, 365, 20);
|
||||||
Fl_Group::current()->resizable(o);
|
Fl_Group::current()->resizable(o);
|
||||||
} // Fl_Box* o
|
} // Fl_Box* o
|
||||||
|
@ -74,7 +74,11 @@
|
|||||||
<TD>"My Computer" (WIN32)<BR>
|
<TD>"My Computer" (WIN32)<BR>
|
||||||
"File Systems" (all others)</TD>
|
"File Systems" (all others)</TD>
|
||||||
</TR>
|
</TR>
|
||||||
<TR>
|
<TR>
|
||||||
|
<TD>hidden_label</TD>
|
||||||
|
<TD>"Show hidden files:"</TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
<TD>manage_favorites_label</TD>
|
<TD>manage_favorites_label</TD>
|
||||||
<TD>"Manage Favorites"</TD>
|
<TD>"Manage Favorites"</TD>
|
||||||
</TR>
|
</TR>
|
||||||
@ -98,7 +102,7 @@
|
|||||||
<TD>show_label</TD>
|
<TD>show_label</TD>
|
||||||
<TD>"Show:"</TD>
|
<TD>"Show:"</TD>
|
||||||
</TR>
|
</TR>
|
||||||
<TR>
|
<TR>
|
||||||
<TD>sort</TD>
|
<TD>sort</TD>
|
||||||
<TD>fl_numericsort</TD>
|
<TD>fl_numericsort</TD>
|
||||||
</TR>
|
</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::preview_label = "Preview";
|
||||||
const char *Fl_File_Chooser::save_label = "Save";
|
const char *Fl_File_Chooser::save_label = "Save";
|
||||||
const char *Fl_File_Chooser::show_label = "Show:";
|
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;
|
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);
|
showChoice->add(custom_filter_label);
|
||||||
|
|
||||||
// TODO: add a menu item to switch hidden files on and off
|
|
||||||
|
|
||||||
showChoice->value(0);
|
showChoice->value(0);
|
||||||
showChoiceCB();
|
showChoiceCB();
|
||||||
}
|
}
|
||||||
@ -1147,6 +1150,7 @@ Fl_File_Chooser::rescan()
|
|||||||
|
|
||||||
// Build the file list...
|
// Build the file list...
|
||||||
fileList->load(directory_, sort);
|
fileList->load(directory_, sort);
|
||||||
|
if (!show_hidden->value()) remove_hidden_files();
|
||||||
|
|
||||||
// Update the preview box...
|
// Update the preview box...
|
||||||
update_preview();
|
update_preview();
|
||||||
@ -1172,6 +1176,7 @@ void Fl_File_Chooser::rescan_keep_filename()
|
|||||||
|
|
||||||
// Build the file list...
|
// Build the file list...
|
||||||
fileList->load(directory_, sort);
|
fileList->load(directory_, sort);
|
||||||
|
if (!show_hidden->value()) remove_hidden_files();
|
||||||
|
|
||||||
// Update the preview box...
|
// Update the preview box...
|
||||||
update_preview();
|
update_preview();
|
||||||
@ -1297,7 +1302,6 @@ Fl_File_Chooser::update_preview()
|
|||||||
int w, h; // Width and height of preview image
|
int w, h; // Width and height of preview image
|
||||||
int set = 0; // Set this flag as soon as a decent preview is found
|
int set = 0; // Set this flag as soon as a decent preview is found
|
||||||
|
|
||||||
|
|
||||||
if (!previewButton->value()) return;
|
if (!previewButton->value()) return;
|
||||||
|
|
||||||
filename = value();
|
filename = value();
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
// Use Apple's chooser
|
// Use Apple's chooser
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
//#include "Fl_Native_File_Chooser_MAC.mm"
|
#include <FL/Fl_Native_File_Chooser_MAC.H>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// All else falls back to FLTK's own chooser
|
// All else falls back to FLTK's own chooser
|
||||||
@ -40,6 +40,8 @@
|
|||||||
#include "Fl_Native_File_Chooser_FLTK.cxx"
|
#include "Fl_Native_File_Chooser_FLTK.cxx"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Fl_Native_File_Chooser::file_exists_message = "File exists. Are you sure you want to overwrite?";
|
||||||
|
|
||||||
//
|
//
|
||||||
// End of "$Id$".
|
// 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);
|
_file_chooser = new Fl_File_Chooser(NULL, NULL, 0, NULL);
|
||||||
type(val); // do this after _file_chooser created
|
type(val); // do this after _file_chooser created
|
||||||
_nfilters = 0;
|
_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);
|
_prevvalue = strfree(_prevvalue);
|
||||||
_directory = strfree(_directory);
|
_directory = strfree(_directory);
|
||||||
_errmsg = strfree(_errmsg);
|
_errmsg = strfree(_errmsg);
|
||||||
_old_dir = strfree(_old_dir);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// PRIVATE: SET ERROR MESSAGE
|
// PRIVATE: SET ERROR MESSAGE
|
||||||
@ -198,14 +187,6 @@ int Fl_Native_File_Chooser::show() {
|
|||||||
|
|
||||||
// BLOCK WHILE BROWSER SHOWN
|
// BLOCK WHILE BROWSER SHOWN
|
||||||
while ( _file_chooser->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();
|
Fl::wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -471,32 +452,9 @@ const char* Fl_Native_File_Chooser::preset_file() const {
|
|||||||
return(_preset_file);
|
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() {
|
int Fl_Native_File_Chooser::exist_dialog() {
|
||||||
return(fl_choice("File exists. Are you sure you want to overwrite?",
|
return(fl_choice("%s", fl_cancel, fl_ok, NULL, file_exists_message));
|
||||||
"Cancel", " OK ", NULL));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
Loading…
Reference in New Issue
Block a user