Author: manolo
Date: 2011-06-03 03:06:27 -0700 (Fri, 03 Jun 2011)
New Revision: 8774
Log:
Fix STR #2653: (Mac OS only) filters in file chooser panels have now the form 
filter_name (pattern)

Modified:
   branches/branch-1.3/src/Fl_Native_File_Chooser_MAC.mm

Modified: branches/branch-1.3/src/Fl_Native_File_Chooser_MAC.mm
===================================================================
--- branches/branch-1.3/src/Fl_Native_File_Chooser_MAC.mm       2011-06-03 
09:12:07 UTC (rev 8773)
+++ branches/branch-1.3/src/Fl_Native_File_Chooser_MAC.mm       2011-06-03 
10:06:27 UTC (rev 8774)
@@ -373,6 +373,45 @@
 void Fl_Native_File_Chooser::type(int val) {
   _btype = val;
 }
+
+/* Input
+ filter=  "C files\t*.{c,h}\nText files\t*.txt\n"
+ patterns[0] = "*.{c,h}"
+ patterns[1] = "*.txt"
+ count = 2
+ Return:
+ "C files (*.{c,h})\nText files (*.txt)\n"
+ */
+static char *prepareMacFilter(int count, const char *filter, char **patterns) {
+  int rank = 0, l = 0;
+  for (int i = 0; i < count; i++) {
+    l += strlen(patterns[i]) + 3;
+    }
+  const char *p = filter;
+  char *q; q = new char[strlen(p) + l + 1];
+  const char *r, *s;
+  char *t;
+  t = q;
+  do { // copy to t what is in filter removing what is between \t and \n, if 
any
+    r = strchr(p, '\n');
+    if (!r) r = p + strlen(p);
+    s = strchr(p, '\t');
+    if (s && s < r) { 
+      memcpy(q, p, s - p); 
+      q += s - p; 
+      if (rank < count) { sprintf(q, " (%s)", patterns[rank]); q += strlen(q); 
}
+    }
+    else { 
+      memcpy(q, p, r - p); 
+      q += r - p; 
+    }
+    rank++;
+    *(q++) = '\n'; 
+    if (*p) p = r + 1;
+  } while(*p);
+  *q = 0;
+  return t;
+}
   
 @interface FLopenDelegate : NSObject 
 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
@@ -503,19 +542,7 @@
   if ( [(NSSavePanel*)_panel isKindOfClass:[NSOpenPanel class]] ) {
     NSPopUpButton *popup = nil;
     if (_filt_total) {
-      char *p; p = _filter;
-      char *q; q = new char[strlen(p) + 1];
-      char *r, *s, *t;
-      t = q;
-      do {     // copy to t what is in _filter removing what is between \t and 
\n, if any
-       r = strchr(p, '\n');
-       if (!r) r = p + strlen(p) - 1;
-       s = strchr(p, '\t');
-       if (s && s < r) { memcpy(q, p, s - p); q += s - p; *(q++) = '\n'; }
-       else { memcpy(q, p, r - p + 1); q += r - p + 1; }
-       *q = 0;
-       p = r + 1;
-      } while(*p);
+      char *t = prepareMacFilter(_filt_total, _filter, _filt_patt);
       popup = createPopupAccessory((NSSavePanel*)_panel, t, "Enable:", 0);
       delete[] t;
       [[popup menu] addItem:[NSMenuItem separatorItem]];
@@ -576,7 +603,9 @@
     }
     if (_directory && !dir) dir = [[NSString alloc] 
initWithUTF8String:_directory];
     if (_filt_total) {
-      popup = createPopupAccessory((NSSavePanel*)_panel, _filter, "Format:", 
_filt_value);
+      char *t = prepareMacFilter(_filt_total, _filter, _filt_patt);
+      popup = createPopupAccessory((NSSavePanel*)_panel, t, "Format:", 
_filt_value);
+      delete[] t;
     }
     retval = [(NSSavePanel*)_panel runModalForDirectory:dir file:fname];
     if (_filt_total) {

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to