diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 2002-05-01 12:41:21 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 2002-05-01 12:41:21 +0000 |
| commit | 94a9fb879f3bb31785ddca44c6bbaba5283da136 (patch) | |
| tree | 6be38779406339f510975a43d8bb967ac3a4960d | |
| parent | 3a33fc7d818cb336bad2cc81a1dc821f6b75f5d0 (diff) | |
Fix backspace "bug" in file chooser - now treat delete and backspace the
same, eliminating any filename completion value.
Added relative argument to fl_file_chooser() and fl_dir_chooser(); both
default to 0 (return absolute paths)
Give focus to the filename field in the chooser when show() is called.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@2157 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | CHANGES | 6 | ||||
| -rw-r--r-- | FL/Fl_File_Chooser.H | 4 | ||||
| -rw-r--r-- | documentation/functions.html | 46 | ||||
| -rw-r--r-- | src/Fl_File_Chooser.cxx | 5 | ||||
| -rw-r--r-- | src/Fl_File_Chooser.fl | 8 | ||||
| -rw-r--r-- | src/Fl_File_Chooser2.cxx | 24 | ||||
| -rw-r--r-- | src/fl_file_dir.cxx | 38 |
7 files changed, 99 insertions, 32 deletions
@@ -1,5 +1,11 @@ CHANGES IN FLTK 1.1.0rc1 + - The fl_file_chooser() and fl_dir_chooser() functions + now support an optional "relative" argument to get + relative pathnames; the default is to return absolute + pathnames. + - The backspace and delete keys now work as expected in + the file chooser when doing filename completion. - FLUID now supports running shell commands. - New Fl_File_Input widget that shows directory separators with filename in input field. diff --git a/FL/Fl_File_Chooser.H b/FL/Fl_File_Chooser.H index 702482618..b778587a1 100644 --- a/FL/Fl_File_Chooser.H +++ b/FL/Fl_File_Chooser.H @@ -84,7 +84,7 @@ public: static const char *filename_label; static const char *filter_label; }; -extern FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname); -extern FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname); +extern FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname,int relative=0); +extern FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname,int relative=0); extern FL_EXPORT void fl_file_chooser_callback(void (*cb)(const char*)); #endif diff --git a/documentation/functions.html b/documentation/functions.html index 6dd68e13e..24d42a23d 100644 --- a/documentation/functions.html +++ b/documentation/functions.html @@ -17,6 +17,7 @@ A</A>. <LI><A HREF="#fl_choice2"><TT>fl_choice</TT></A></LI> <LI><A HREF="#fl_color_chooser_func"><TT>fl_color_chooser</TT></A></LI> <LI><A HREF="#fl_color_cube"><TT>fl_color_cube</TT></A></LI> + <LI><A HREF="#fl_dir_chooser"><TT>fl_dir_chooser</TT></A></LI> <LI><A HREF="#fl_file_chooser2"><TT>fl_file_chooser</TT></A></LI> <LI><A HREF="#fl_file_chooser_callback"><TT>fl_file_chooser_callback</TT></A></LI> <LI><A HREF="#fl_filename_absolute"><TT>fl_filename_absolute</TT></A></LI> @@ -50,6 +51,7 @@ A</A>. <LI><A HREF="#fl_beep"><TT>fl_beep</TT></A></LI> <LI><A HREF="#fl_choice2"><TT>fl_choice</TT></A></LI> <LI><A HREF="#fl_color_chooser_func"><TT>fl_color_chooser</TT></A></LI> + <LI><A HREF="#fl_dir_chooser"><TT>fl_dir_chooser</TT></A></LI> <LI><A HREF="#fl_file_chooser2"><TT>fl_file_chooser</TT></A></LI> <LI><A HREF="#fl_file_chooser_callback"><TT>fl_file_chooser_callback</TT></A></LI> <LI><A HREF="#fl_input2"><TT>fl_input</TT></A></LI> @@ -327,6 +329,44 @@ fl_color_cube(R * (FL_NUM_RED - 1) / 255, <!-- NEED 4in --> +<H2><A NAME="fl_dir_chooser">fl_dir_chooser</A></H2> + +<HR> + +<H3>Include Files</H3> + +<UL><PRE> +#include <FL/Fl_File_Chooser.H> +</PRE></UL> + +<H3>Prototype</H3> + +<UL><PRE> +char *fl_dir_chooser(const char * message, const char *fname, int relative = 0); +</PRE></UL> + +<H3>Description</H3> + +<P>The <tt>fl_dir_chooser()</tt> function displays a <A +HREF="Fl_File_Chooser.html"><tt>Fl_File_Chooser</tt></A> dialog +so that the user can choose a directory. + +<P><tt>message</tt> is a string used to title the window. + +<P><tt>fname</tt> is a default filename to fill in the chooser +with. If this is <tt>NULL</tt> then the last filename that was +choosen is used. The first time the file chooser is called this +defaults to a blank string. + +<P><tt>relative</tt> specifies whether the returned filename +should be relative (any non-zero value) or absolute (0). The +default is to return absolute paths. + +<P>The returned value points at a static buffer that is only +good until the next time <tt>fl_dir_chooser()</tt> is called. + + +<!-- NEED 4in --> <H2><A NAME="fl_file_chooser2">fl_file_chooser</A></H2> <HR> @@ -340,7 +380,7 @@ fl_color_cube(R * (FL_NUM_RED - 1) / 255, <H3>Prototype</H3> <UL><PRE> -char *fl_file_chooser(const char * message, const char *pattern, const char *fname); +char *fl_file_chooser(const char * message, const char *pattern, const char *fname, int relative = 0); </PRE></UL> <H3>Description</H3> @@ -371,6 +411,10 @@ choosen is used (unless that had a different pattern, in which case just the last directory with no name is used). The first time the file chooser is called this defaults to a blank string. +<P><tt>relative</tt> specifies whether the returned filename +should be relative (any non-zero value) or absolute (0). The +default is to return absolute paths. + <P>The returned value points at a static buffer that is only good until the next time <tt>fl_file_chooser()</tt> is called. diff --git a/src/Fl_File_Chooser.cxx b/src/Fl_File_Chooser.cxx index ca734ae1e..932690caf 100644 --- a/src/Fl_File_Chooser.cxx +++ b/src/Fl_File_Chooser.cxx @@ -211,6 +211,7 @@ const char * Fl_File_Chooser::label() { void Fl_File_Chooser::show() { window->hotspot(fileList); window->show(); +fileName->take_focus(); } int Fl_File_Chooser::shown() { @@ -264,6 +265,6 @@ int Fl_File_Chooser::type() { int Fl_File_Chooser::visible() { return window->visible(); } -FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname); -FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname); +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); FL_EXPORT void fl_file_chooser_callback(void (*cb)(const char*)); diff --git a/src/Fl_File_Chooser.fl b/src/Fl_File_Chooser.fl index f78da0404..56f9175c9 100644 --- a/src/Fl_File_Chooser.fl +++ b/src/Fl_File_Chooser.fl @@ -150,8 +150,8 @@ rescan();} {} Function {show()} {open return_type void } { code {window->hotspot(fileList); -window->show();} {selected - } +window->show(); +fileName->take_focus();} {} } Function {shown()} {return_type int } { @@ -217,10 +217,10 @@ else } } -decl {FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname);} {public +decl {FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname,int relative=0);} {public } -decl {FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname);} {public +decl {FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname,int relative=0);} {selected public } decl {FL_EXPORT void fl_file_chooser_callback(void (*cb)(const char*));} {public diff --git a/src/Fl_File_Chooser2.cxx b/src/Fl_File_Chooser2.cxx index 57696eb11..9a08dbb01 100644 --- a/src/Fl_File_Chooser2.cxx +++ b/src/Fl_File_Chooser2.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_File_Chooser2.cxx,v 1.1.2.10 2002/05/01 08:51:59 easysw Exp $" +// "$Id: Fl_File_Chooser2.cxx,v 1.1.2.11 2002/05/01 12:41:21 easysw Exp $" // // More Fl_File_Chooser routines. // @@ -575,7 +575,8 @@ Fl_File_Chooser::fileNameCB() fl_alert("Please choose an existing file!"); } } - else if (Fl::event_key() != FL_Delete) + else if (Fl::event_key() != FL_Delete && + Fl::event_key() != FL_BackSpace) { // Check to see if the user has entered a directory... if ((slash = strrchr(pathname, '/')) == NULL) @@ -673,17 +674,11 @@ Fl_File_Chooser::fileNameCB() fileName->replace(filename - pathname, filename - pathname + min_match, matchname); - // Highlight it; if the user just pressed the backspace - // key, position the cursor at the start of the selection. - // Otherwise, put the cursor at the end of the selection so + // Highlight it with the cursor at the end of the selection so // s/he can press the right arrow to accept the selection // (Tab and End also do this for both cases.) - if (Fl::event_key() == FL_BackSpace) - fileName->position(filename - pathname + min_match - 1, - filename - pathname + max_match); - else - fileName->position(filename - pathname + max_match, - filename - pathname + min_match); + fileName->position(filename - pathname + max_match, + filename - pathname + min_match); } else if (max_match == 0) { fileList->deselect(0); @@ -696,10 +691,15 @@ Fl_File_Chooser::fileNameCB() okButton->activate(); else okButton->deactivate(); + } else { + // FL_Delete or FL_BackSpace + fileList->deselect(0); + fileList->redraw(); + okButton->deactivate(); } } // -// End of "$Id: Fl_File_Chooser2.cxx,v 1.1.2.10 2002/05/01 08:51:59 easysw Exp $". +// End of "$Id: Fl_File_Chooser2.cxx,v 1.1.2.11 2002/05/01 12:41:21 easysw Exp $". // diff --git a/src/fl_file_dir.cxx b/src/fl_file_dir.cxx index c1d0f6d4f..089d1d3ce 100644 --- a/src/fl_file_dir.cxx +++ b/src/fl_file_dir.cxx @@ -1,5 +1,5 @@ // -// "$Id: fl_file_dir.cxx,v 1.1.2.9 2002/04/28 08:42:33 easysw Exp $" +// "$Id: fl_file_dir.cxx,v 1.1.2.10 2002/05/01 12:41:21 easysw Exp $" // // File chooser widget for the Fast Light Tool Kit (FLTK). // @@ -43,9 +43,16 @@ void fl_file_chooser_callback(void (*cb)(const char*)) { } -char* fl_file_chooser(const char* message, const char* pat, const char* fname) -{ - static char retname[1024]; +// +// 'fl_file_chooser()' - Show a file chooser dialog and get a filename. +// + +char * // O - Filename or NULL +fl_file_chooser(const char *message, // I - Message in titlebar + const char *pat, // I - Filename pattern + const char *fname, // I - Initial filename selection + int relative) { // I - 0 for absolute path + static char retname[1024]; // Returned filename if (!fc) { if (!fname || !*fname) fname = "."; @@ -88,17 +95,25 @@ char* fl_file_chooser(const char* message, const char* pat, const char* fname) while (fc->shown()) Fl::wait(); - if (fc->value()) { + if (fc->value() && relative) { fl_filename_relative(retname, sizeof(retname), fc->value()); return retname; - } else return 0; + } else if (fc->value()) return fc->value(); + else return 0; } -char* fl_dir_chooser(const char* message, const char* fname) +// +// 'fl_dir_chooser()' - Show a file chooser dialog and get a directory. +// + +char * // O - Directory or NULL +fl_dir_chooser(const char *message, // I - Message for titlebar + const char *fname, // I - Initial directory name + int relative) // I - 0 for absolute { - static char retname[1024]; + static char retname[1024]; // Returned directory name if (!fname || !*fname) fname = "."; @@ -118,14 +133,15 @@ char* fl_dir_chooser(const char* message, const char* fname) while (fc->shown()) Fl::wait(); - if (fc->value()) { + if (fc->value() && relative) { fl_filename_relative(retname, sizeof(retname), fc->value()); return retname; - } else return 0; + } else if (fc->value) return fc->value(); + else return 0; } // -// End of "$Id: fl_file_dir.cxx,v 1.1.2.9 2002/04/28 08:42:33 easysw Exp $". +// End of "$Id: fl_file_dir.cxx,v 1.1.2.10 2002/05/01 12:41:21 easysw Exp $". // |
