--- 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'!