summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2005-03-25 16:11:07 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>2005-03-25 16:11:07 +0000
commita343b0d4e40d6dd295cfea1a6bc66940b7edff34 (patch)
tree8694e94efffe3d725471039f6f99a0b46b7ef086 /src
parentce40d4a0e67b79b48471d6328f46817d2e064544 (diff)
Pressing Enter in the file chooser when selecting a directory
will choose that directory if it is currently shown (STR #746) Added a fl_file_chooser_ok_label() function to set the "OK" button label for the fl_file_chooser() and fl_dir_chooser() functions. Added Fl_File_Chooser::ok_label() methods to set the "OK" button label. The fl_ask() function is now deprecated since it does not conform to the FLTK Human Interface Guidelines. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4188 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/Fl_File_Chooser.fl5
-rw-r--r--src/Fl_File_Chooser2.cxx42
-rw-r--r--src/fl_ask.cxx8
-rw-r--r--src/fl_file_dir.cxx14
4 files changed, 61 insertions, 8 deletions
diff --git a/src/Fl_File_Chooser.fl b/src/Fl_File_Chooser.fl
index 656b5e987..cccbbd3e4 100644
--- a/src/Fl_File_Chooser.fl
+++ b/src/Fl_File_Chooser.fl
@@ -150,7 +150,7 @@ window->hide();}
private xywh {408 345 72 25}
code0 {o->label(fl_cancel);}
}
- Fl_Box {} {selected
+ Fl_Box {} {
private xywh {10 345 30 25} resizable
}
}
@@ -399,6 +399,9 @@ decl {FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const
decl {FL_EXPORT void fl_file_chooser_callback(void (*cb)(const char*));} {public
}
+decl {FL_EXPORT void fl_file_chooser_ok_label(const char*l);} {selected public
+}
+
comment {
//
// End of "$Id$".
diff --git a/src/Fl_File_Chooser2.cxx b/src/Fl_File_Chooser2.cxx
index 196d0eee3..6590395ec 100644
--- a/src/Fl_File_Chooser2.cxx
+++ b/src/Fl_File_Chooser2.cxx
@@ -20,7 +20,9 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
-// Please report all bugs and problems to "fltk-bugs@fltk.org".
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
//
// Contents:
//
@@ -35,6 +37,7 @@
// in the Fl_File_Browser.
// Fl_File_Chooser::fileNameCB() - Handle text entry in the FileBrowser.
// Fl_File_Chooser::showChoiceCB() - Handle show selections.
+// compare_dirnames() - Compare two directory names.
// quote_pathname() - Quote a pathname for a menu.
// unquote_pathname() - Unquote a pathname from a menu.
//
@@ -100,6 +103,7 @@ Fl_File_Sort_F *Fl_File_Chooser::sort = fl_numericsort;
// Local functions...
//
+static int compare_dirnames(const char *a, const char *b);
static void quote_pathname(char *, const char *, int);
static void unquote_pathname(char *, const char *, int);
@@ -499,9 +503,11 @@ Fl_File_Chooser::fileNameCB()
// Enter pressed - select or change directory...
#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
if ((isalpha(pathname[0] & 255) && pathname[1] == ':' && !pathname[2]) ||
- fl_filename_isdir(pathname)) {
+ fl_filename_isdir(pathname) &&
+ compare_dirnames(pathname, directory_)) {
#else
- if (fl_filename_isdir(pathname)) {
+ if (fl_filename_isdir(pathname) &&
+ compare_dirnames(pathname, directory_)) {
#endif /* WIN32 || __EMX__ */
directory(pathname);
} else if ((type_ & CREATE) || access(pathname, 0) == 0) {
@@ -1121,6 +1127,36 @@ Fl_File_Chooser::value(const char *filename) // I - Filename + directory
//
+// 'compare_dirnames()' - Compare two directory names.
+//
+
+static int
+compare_dirnames(const char *a, const char *b) {
+ int alen, blen;
+
+ // Get length of each string...
+ alen = strlen(a) - 1;
+ blen = strlen(b) - 1;
+
+ if (alen < 0 || blen < 0) return alen - blen;
+
+ // Check for trailing slashes...
+ if (a[alen] != '/') alen ++;
+ if (b[blen] != '/') blen ++;
+
+ // If the lengths aren't the same, then return the difference...
+ if (alen != blen) return alen - blen;
+
+ // Do a comparison of the first N chars (alen == blen at this point)...
+#ifdef WIN32
+ return strnicmp(a, b, alen);
+#else
+ return strncmp(a, b, alen);
+#endif // WIN32
+}
+
+
+//
// 'quote_pathname()' - Quote a pathname for a menu.
//
diff --git a/src/fl_ask.cxx b/src/fl_ask.cxx
index 016b52495..454ecff77 100644
--- a/src/fl_ask.cxx
+++ b/src/fl_ask.cxx
@@ -20,7 +20,9 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
-// Please report all bugs and problems to "fltk-bugs@fltk.org".
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
//
// Implementation of fl_message, fl_ask, fl_choice, fl_input
@@ -273,7 +275,7 @@ void fl_message(const char *fmt, ...) {
va_start(ap, fmt);
iconlabel = "i";
- innards(fmt, ap, 0, fl_ok, 0);
+ innards(fmt, ap, 0, fl_close, 0);
va_end(ap);
iconlabel = "?";
}
@@ -285,7 +287,7 @@ void fl_alert(const char *fmt, ...) {
va_start(ap, fmt);
iconlabel = "!";
- innards(fmt, ap, 0, fl_ok, 0);
+ innards(fmt, ap, 0, fl_close, 0);
va_end(ap);
iconlabel = "?";
}
diff --git a/src/fl_file_dir.cxx b/src/fl_file_dir.cxx
index 432a7f83e..401008e10 100644
--- a/src/fl_file_dir.cxx
+++ b/src/fl_file_dir.cxx
@@ -26,23 +26,34 @@
#include "flstring.h"
#include <FL/filename.H>
#include <FL/Fl_File_Chooser.H>
-#include <FL/Fl_File_Chooser.H>
+#include <FL/fl_ask.H>
+
static Fl_File_Chooser *fc = (Fl_File_Chooser *)0;
static void (*current_callback)(const char*) = 0;
+static const char *current_label = fl_ok;
+// Do a file chooser callback...
static void callback(Fl_File_Chooser *, void*) {
if (current_callback && fc->value())
(*current_callback)(fc->value());
}
+// Set the file chooser callback
void fl_file_chooser_callback(void (*cb)(const char*)) {
current_callback = cb;
}
+// Set the "OK" button label
+void fl_file_chooser_ok_label(const char *l) {
+ if (l) current_label = l;
+ else current_label = fl_ok;
+}
+
+
//
// 'fl_file_chooser()' - Show a file chooser dialog and get a filename.
//
@@ -89,6 +100,7 @@ fl_file_chooser(const char *message, // I - Message in titlebar
fc->value(fname);
}
+ fc->ok_label(current_label);
fc->show();
while (fc->shown())