changeset 628:7d93356f250a

Fixed dw_file_browse(); filters now work on extension passed in.
author mhessling@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 12 Apr 2008 12:22:09 +0000
parents 77cc62375fee
children a5deb87b26e4
files win/dw.c
diffstat 1 files changed, 34 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/win/dw.c	Sat Apr 12 11:01:29 2008 +0000
+++ b/win/dw.c	Sat Apr 12 12:22:09 2008 +0000
@@ -9122,6 +9122,7 @@
 {
    OPENFILENAME of;
    char filenamebuf[1001] = "";
+   char filterbuf[1000] = "";
    int rc;
 
    BROWSEINFO bi;
@@ -9158,13 +9159,25 @@
    }
    else
    {
-      if(ext)
-      {
-         strcpy(filenamebuf, "*.");
-         strcat(filenamebuf, ext);
-      }
-
-      memset(&of, 0, sizeof(OPENFILENAME));
+      if (ext)
+      {
+         /*
+          * The following mess is because sprintf() trunates at first \0
+          * and format of filter is eg: "c files (*.c)\0*.c\0All Files\0*.*\0\0"
+          */
+         int len;
+         char *ptr = filterbuf;
+         memset( filterbuf, 0, sizeof(filterbuf) );
+         len = sprintf( ptr, "%s Files (*.%s)", ext, ext );
+         ptr = ptr + len + 1; // past first \0
+         len = sprintf( ptr, "*.%s", ext );
+         ptr = ptr + len + 1; // past next \0
+         len = sprintf( ptr, "All Files" );
+         ptr = ptr + len + 1; // past next \0
+         len = sprintf( ptr, "*.*" );
+      }
+
+      memset( &of, 0, sizeof(OPENFILENAME) );
 
       of.lStructSize = sizeof(OPENFILENAME);
       of.hwndOwner = HWND_DESKTOP;
@@ -9172,16 +9185,24 @@
       of.lpstrInitialDir = defpath;
       of.lpstrTitle = title;
       of.lpstrFile = filenamebuf;
+      of.lpstrFilter = filterbuf;
+      of.nFilterIndex = 1;
       of.nMaxFile = 1000;
-      of.lpstrDefExt = ext;
-      of.Flags = 0;
-
-      if(flags & DW_FILE_SAVE)
+      //of.lpstrDefExt = ext;
+      of.Flags = OFN_NOCHANGEDIR;
+
+      if (flags & DW_FILE_SAVE)
+      {
+         of.Flags |= OFN_OVERWRITEPROMPT;
          rc = GetSaveFileName(&of);
+      }
       else
+      {
+         of.Flags |= OFN_FILEMUSTEXIST;
          rc = GetOpenFileName(&of);
-
-      if(rc)
+      }
+
+      if (rc)
          return strdup(of.lpstrFile);
    }
    return NULL;