Fl_File_Chooser was slow with large directories (STR #654)
FL/Fl_File_Browser.H:
- Don't reload the directory view unless asked to.
FL/Fl_File_Chooser.H:
- Rebuilt using current FLUID.
src/Fl_File_Browser.cxx:
- Don't reload the directory view unless asked to.
src/Fl_File_Chooser.cxx:
- Fl_File_Chooser::show() calls rescan().
src/Fl_File_Chooser.fl:
- Fl_File_Chooser::show() calls rescan().
src/Fl_File_Chooser2.cxx:
- Only call rescan() when chooser is shown.
src/Fl_File_Icon.cxx:
- Add optimization for Windows - filenames with trailing slash are
directories.
test/file_chooser.cxx:
- Only call show() once...
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4010 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
b601fdc3bc
commit
3124794f1f
2
CHANGES
2
CHANGES
@ -1,5 +1,7 @@
|
||||
CHANGES IN FLTK 1.1.7
|
||||
|
||||
- Fl_File_Chooser was slow with large directories (STR
|
||||
#654)
|
||||
- FLUID didn't add xclass() calls to windows (STR #718)
|
||||
- The X11 DND code did not correctly select a text
|
||||
format for incoming data (STR #711)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// "$Id: Fl_File_Browser.H,v 1.1.2.7 2004/04/11 04:38:54 easysw Exp $"
|
||||
// "$Id$"
|
||||
//
|
||||
// FileBrowser definitions.
|
||||
//
|
||||
@ -69,11 +69,11 @@ public:
|
||||
void textsize(uchar s) { Fl_Browser::textsize(s); iconsize_ = (uchar)(3 * s / 2); };
|
||||
|
||||
int filetype() const { return (filetype_); };
|
||||
void filetype(int t) { filetype_ = t; load(directory_); };
|
||||
void filetype(int t) { filetype_ = t; };
|
||||
};
|
||||
|
||||
#endif // !_Fl_File_Browser_H_
|
||||
|
||||
//
|
||||
// End of "$Id: Fl_File_Browser.H,v 1.1.2.7 2004/04/11 04:38:54 easysw Exp $".
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// generated by Fast Light User Interface Designer (fluid) version 1.0105
|
||||
// generated by Fast Light User Interface Designer (fluid) version 1.0107
|
||||
|
||||
#ifndef Fl_File_Chooser_H
|
||||
#define Fl_File_Chooser_H
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// "$Id: Fl_File_Browser.cxx,v 1.1.2.28 2004/04/11 04:38:57 easysw Exp $"
|
||||
// "$Id$"
|
||||
//
|
||||
// Fl_File_Browser routines.
|
||||
//
|
||||
@ -584,34 +584,31 @@ Fl_File_Browser::load(const char *directory,// I - Directory to load
|
||||
if (num_files <= 0)
|
||||
return (0);
|
||||
|
||||
for (i = 0, num_dirs = 0; i < num_files; i ++)
|
||||
{
|
||||
for (i = 0, num_dirs = 0; i < num_files; i ++) {
|
||||
if (strcmp(files[i]->d_name, ".") &&
|
||||
strcmp(files[i]->d_name, "./"))
|
||||
{
|
||||
strcmp(files[i]->d_name, "./")) {
|
||||
snprintf(filename, sizeof(filename), "%s/%s", directory_,
|
||||
files[i]->d_name);
|
||||
|
||||
#if defined(WIN32) && !defined(__CYGWIN__)
|
||||
if (files[i]->d_name[strlen(files[i]->d_name) - 1] == '/')
|
||||
{
|
||||
icon = Fl_File_Icon::find(filename);
|
||||
if (icon->type() == Fl_File_Icon::DIRECTORY) {
|
||||
num_dirs ++;
|
||||
insert(num_dirs, files[i]->d_name, Fl_File_Icon::find(filename));
|
||||
}
|
||||
|
||||
#if defined(WIN32) && !defined(__CYGWIN__)
|
||||
// WIN32 already has the trailing slash... :)
|
||||
insert(num_dirs, files[i]->d_name, icon);
|
||||
#else
|
||||
if (fl_filename_isdir(filename))
|
||||
{
|
||||
// Add a trailing slash to directory names...
|
||||
char name[1024]; // Temporary directory name
|
||||
|
||||
snprintf(name, sizeof(name), "%s/", files[i]->d_name);
|
||||
|
||||
num_dirs ++;
|
||||
insert(num_dirs, name, Fl_File_Icon::find(filename));
|
||||
}
|
||||
insert(num_dirs, name, icon);
|
||||
#endif // WIN32 && !__CYGWIN__
|
||||
else if (filetype_ == FILES &&
|
||||
fl_filename_match(files[i]->d_name, pattern_))
|
||||
add(files[i]->d_name, Fl_File_Icon::find(filename));
|
||||
} else if (filetype_ == FILES &&
|
||||
fl_filename_match(files[i]->d_name, pattern_)) {
|
||||
add(files[i]->d_name, icon);
|
||||
}
|
||||
}
|
||||
|
||||
free(files[i]);
|
||||
@ -636,12 +633,9 @@ Fl_File_Browser::filter(const char *pattern) // I - Pattern string
|
||||
pattern_ = pattern;
|
||||
else
|
||||
pattern_ = "*";
|
||||
|
||||
// Reload the current directory...
|
||||
load(directory_);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// End of "$Id: Fl_File_Browser.cxx,v 1.1.2.28 2004/04/11 04:38:57 easysw Exp $".
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// generated by Fast Light User Interface Designer (fluid) version 1.0105
|
||||
// generated by Fast Light User Interface Designer (fluid) version 1.0107
|
||||
|
||||
#include "../FL/Fl_File_Chooser.H"
|
||||
|
||||
@ -317,6 +317,7 @@ const char * Fl_File_Chooser::label() {
|
||||
void Fl_File_Chooser::show() {
|
||||
window->hotspot(fileList);
|
||||
window->show();
|
||||
rescan();
|
||||
fileName->take_focus();
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# data file for the Fltk User Interface Designer (fluid)
|
||||
version 1.0105
|
||||
version 1.0107
|
||||
header_name {../FL/Fl_File_Chooser.H}
|
||||
code_name {.cxx}
|
||||
class FL_EXPORT Fl_File_Chooser {open
|
||||
@ -107,7 +107,7 @@ window->hide();} open
|
||||
if (callback_)
|
||||
(*callback_)(this, data_);
|
||||
|
||||
window->hide();} selected
|
||||
window->hide();}
|
||||
private xywh {300 345 85 25}
|
||||
code0 {\#include <FL/fl_ask.H>}
|
||||
code1 {okButton->label(fl_ok);}
|
||||
@ -245,11 +245,13 @@ showChoiceCB();} {}
|
||||
}
|
||||
decl {void rescan();} {public
|
||||
}
|
||||
Function {show()} {return_type void
|
||||
Function {show()} {open return_type void
|
||||
} {
|
||||
code {window->hotspot(fileList);
|
||||
window->show();
|
||||
fileName->take_focus();} {}
|
||||
rescan();
|
||||
fileName->take_focus();} {selected
|
||||
}
|
||||
}
|
||||
Function {shown()} {return_type int
|
||||
} {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// "$Id: Fl_File_Chooser2.cxx,v 1.1.2.38 2004/09/07 20:59:16 easysw Exp $"
|
||||
// "$Id$"
|
||||
//
|
||||
// More Fl_File_Chooser routines.
|
||||
//
|
||||
@ -196,8 +196,10 @@ Fl_File_Chooser::directory(const char *d)// I - Directory to change to
|
||||
else
|
||||
directory_[0] = '\0';
|
||||
|
||||
// Rescan the directory...
|
||||
rescan();
|
||||
if (shown()) {
|
||||
// Rescan the directory...
|
||||
rescan();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -834,7 +836,11 @@ Fl_File_Chooser::showChoiceCB()
|
||||
}
|
||||
|
||||
fileList->filter(pattern_);
|
||||
rescan();
|
||||
|
||||
if (shown()) {
|
||||
// Rescan the directory...
|
||||
rescan();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1160,5 +1166,5 @@ unquote_pathname(char *dst, // O - Destination string
|
||||
|
||||
|
||||
//
|
||||
// End of "$Id: Fl_File_Chooser2.cxx,v 1.1.2.38 2004/09/07 20:59:16 easysw Exp $".
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// "$Id: Fl_File_Icon.cxx,v 1.1.2.17 2004/06/14 15:58:52 easysw Exp $"
|
||||
// "$Id$"
|
||||
//
|
||||
// Fl_File_Icon routines.
|
||||
//
|
||||
@ -193,8 +193,10 @@ Fl_File_Icon::find(const char *filename,// I - Name of file */
|
||||
// Get file information if needed...
|
||||
if (filetype == ANY)
|
||||
{
|
||||
#ifdef WIN32
|
||||
if (fl_filename_isdir(filename))
|
||||
#ifdef WIN32
|
||||
if (filename[strlen(filename) - 1] == '/')
|
||||
filetype = DIRECTORY;
|
||||
else if (fl_filename_isdir(filename))
|
||||
filetype = DIRECTORY;
|
||||
else
|
||||
filetype = PLAIN;
|
||||
@ -477,5 +479,5 @@ Fl_File_Icon::labeltype(const Fl_Label *o, // I - Label data
|
||||
|
||||
|
||||
//
|
||||
// End of "$Id: Fl_File_Icon.cxx,v 1.1.2.17 2004/06/14 15:58:52 easysw Exp $".
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// "$Id: file_chooser.cxx,v 1.4.2.3.2.11 2004/04/11 04:39:01 easysw Exp $"
|
||||
// "$Id$"
|
||||
//
|
||||
// File chooser test program.
|
||||
//
|
||||
@ -307,7 +307,6 @@ show_callback(void)
|
||||
char relative[1024]; // Relative filename
|
||||
|
||||
|
||||
fc->show();
|
||||
if (filter->value()[0])
|
||||
fc->filter(filter->value());
|
||||
|
||||
@ -338,5 +337,5 @@ show_callback(void)
|
||||
|
||||
|
||||
//
|
||||
// End of "$Id: file_chooser.cxx,v 1.4.2.3.2.11 2004/04/11 04:39:01 easysw Exp $".
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
Loading…
Reference in New Issue
Block a user