WinWorkstation.st
changeset 8531 f5f493a957da
parent 8530 4b7259e14175
child 8532 6e9a6ab05e75
--- a/WinWorkstation.st	Tue Oct 23 10:18:37 2018 +0200
+++ b/WinWorkstation.st	Tue Oct 23 11:02:04 2018 +0200
@@ -947,6 +947,7 @@
 
 typedef struct fileDialogDataStruct {
     wchar_t filename[MAX_PATH];
+    wchar_t directory[MAX_PATH];
     wchar_t title[MAX_PATH];
     HWND owningWindow;
     wchar_t filter[MAX_PATH];
@@ -968,6 +969,7 @@
 
     ofn.lStructSize = sizeof(OPENFILENAMEW);
     ofn.lpstrFile = pFdd->filename;
+    ofn.lpstrInitialDir = pFdd->directory;
     ofn.nMaxFile = MAX_PATH;
     ofn.lpstrTitle = pFdd->title;
     ofn.lpstrFilter = pFdd->filter;
@@ -16585,19 +16587,25 @@
      returns nil or the full path to the selected file
      see example at the end of the method code"
 
-    |dialogTitle defaultFilename owningViewId windowGroup filterString null 
+    |dialogTitle defaultBaseName defaultDirectory owningViewId windowGroup filterString null 
      dataAddressAndThreadAddress dataAddress returnValue|
 
     dialogTitleArg notEmptyOrNil ifTrue:[
         dialogTitle := dialogTitleArg asUnicode16String.
     ].
 
-    defaultFilename := defaultFilenameArg.
-    defaultFilename isFilename ifTrue:[
-        defaultFilename := defaultFilename pathName.
-    ].
-    defaultFilename notNil ifTrue:[
-        defaultFilename := defaultFilename asUnicode16String.
+    defaultFilenameArg notNil ifTrue:[
+        |defaultFilename|    
+
+        defaultFilename := defaultFilenameArg asFilename.
+        defaultFilename isDirectory ifTrue:[
+            defaultDirectory := defaultFilename.
+        ] ifFalse:[
+            defaultDirectory := defaultFilename directory.
+            defaultBaseName := defaultFilename baseName asUnicode16String.
+        ].
+
+        defaultDirectory := defaultDirectory pathName asUnicode16String.
     ].    
 
     owningTopView notNil ifTrue:[
@@ -16623,7 +16631,8 @@
     [
         dataAddressAndThreadAddress := self 
             primNativeFileDialogWithTitle:dialogTitle
-            defaultFilename:defaultFilename
+            defaultBaseName:defaultBaseName
+            defaultDirectory:defaultDirectory
             owningViewId:owningViewId
             filterString:filterString
             filterIndex:filterIndexArg ? 1 
@@ -16671,7 +16680,7 @@
 
         Display 
             nativeFileDialogWithTitle:'Hello World' 
-            defaultFilename:'D:\sadasdsad'   
+            defaultFilename:OperatingSystem pathOfSTXExecutable asFilename directory directory
             owningTopView:nil
             filter:
                 'expecco Testsuite', null, '*.ets', null, 
@@ -16751,6 +16760,7 @@
     "
 
     "Created: / 23-10-2018 / 09:58:25 / sr"
+    "Modified (format): / 23-10-2018 / 11:00:40 / sr"
 !
 
 primCloseNativeFileDialogByDataAddress:dataAddress
@@ -16806,7 +16816,8 @@
 !
 
 primNativeFileDialogWithTitle:dialogTitle
-    defaultFilename:defaultFilename
+    defaultBaseName:defaultBaseName
+    defaultDirectory:defaultDirectory
     owningViewId:owningViewId
     filterString:filterString
     filterIndex:filterIndexArg
@@ -16821,12 +16832,18 @@
     fileDialogData *pFdd = malloc(sizeof(fileDialogData));
     ZeroMemory(pFdd, sizeof(fileDialogData)); 
 
-    if (__isUnicode16String(defaultFilename)) {
-        for (i = 0; i < __unicode16StringSize(defaultFilename); i++) {
-            pFdd->filename[i] = __unicode16StringVal(defaultFilename)[i];
+    if (__isUnicode16String(defaultBaseName)) {
+        for (i = 0; i < __unicode16StringSize(defaultBaseName); i++) {
+            pFdd->filename[i] = __unicode16StringVal(defaultBaseName)[i];
         }
         pFdd->filename[i] = 0;
-    };        
+    };       
+    if (__isUnicode16String(defaultDirectory)) {
+        for (i = 0; i < __unicode16StringSize(defaultDirectory); i++) {
+            pFdd->directory[i] = __unicode16StringVal(defaultDirectory)[i];
+        }
+        pFdd->directory[i] = 0;
+    };      
     if (__isUnicode16String(dialogTitle)) {
         for (i = 0; i < __unicode16StringSize(dialogTitle); i++) {
             pFdd->title[i] = __unicode16StringVal(dialogTitle)[i];
@@ -16856,8 +16873,7 @@
         with:fileDialogDataAddress
         with:fileDialogThreadHandle
 
-    "Created: / 22-10-2018 / 13:31:46 / sr"
-    "Modified: / 22-10-2018 / 15:11:47 / sr"
+    "Created: / 23-10-2018 / 10:59:50 / sr"
 ! !
 
 !WinWorkstation methodsFor:'native widget support'!