github.com/AlpineAIO/wails/v2@v2.0.0-beta.32.0.20240505041856-1047a8fa5fef/internal/go-common-file-dialog/cfd/iFileSaveDialog.go (about) 1 //go:build windows 2 // +build windows 3 4 package cfd 5 6 import ( 7 "github.com/AlpineAIO/wails/v2/internal/go-common-file-dialog/util" 8 "github.com/go-ole/go-ole" 9 "unsafe" 10 ) 11 12 var ( 13 saveFileDialogCLSID = ole.NewGUID("{C0B4E2F3-BA21-4773-8DBA-335EC946EB8B}") 14 saveFileDialogIID = ole.NewGUID("{84bccd23-5fde-4cdb-aea4-af64b83d78ab}") 15 ) 16 17 type iFileSaveDialog struct { 18 vtbl *iFileSaveDialogVtbl 19 parentWindowHandle uintptr 20 } 21 22 type iFileSaveDialogVtbl struct { 23 iFileDialogVtbl 24 25 SetSaveAsItem uintptr 26 SetProperties uintptr 27 SetCollectedProperties uintptr 28 GetProperties uintptr 29 ApplyProperties uintptr 30 } 31 32 func newIFileSaveDialog() (*iFileSaveDialog, error) { 33 if unknown, err := ole.CreateInstance(saveFileDialogCLSID, saveFileDialogIID); err == nil { 34 return (*iFileSaveDialog)(unsafe.Pointer(unknown)), nil 35 } else { 36 return nil, err 37 } 38 } 39 40 func (fileSaveDialog *iFileSaveDialog) Show() error { 41 return fileSaveDialog.vtbl.show(unsafe.Pointer(fileSaveDialog), fileSaveDialog.parentWindowHandle) 42 } 43 44 func (fileSaveDialog *iFileSaveDialog) SetParentWindowHandle(hwnd uintptr) { 45 fileSaveDialog.parentWindowHandle = hwnd 46 } 47 48 func (fileSaveDialog *iFileSaveDialog) ShowAndGetResult() (string, error) { 49 if err := fileSaveDialog.Show(); err != nil { 50 return "", err 51 } 52 return fileSaveDialog.GetResult() 53 } 54 55 func (fileSaveDialog *iFileSaveDialog) SetTitle(title string) error { 56 return fileSaveDialog.vtbl.setTitle(unsafe.Pointer(fileSaveDialog), title) 57 } 58 59 func (fileSaveDialog *iFileSaveDialog) GetResult() (string, error) { 60 return fileSaveDialog.vtbl.getResultString(unsafe.Pointer(fileSaveDialog)) 61 } 62 63 func (fileSaveDialog *iFileSaveDialog) Release() error { 64 return fileSaveDialog.vtbl.release(unsafe.Pointer(fileSaveDialog)) 65 } 66 67 func (fileSaveDialog *iFileSaveDialog) SetDefaultFolder(defaultFolderPath string) error { 68 return fileSaveDialog.vtbl.setDefaultFolder(unsafe.Pointer(fileSaveDialog), defaultFolderPath) 69 } 70 71 func (fileSaveDialog *iFileSaveDialog) SetFolder(defaultFolderPath string) error { 72 return fileSaveDialog.vtbl.setFolder(unsafe.Pointer(fileSaveDialog), defaultFolderPath) 73 } 74 75 func (fileSaveDialog *iFileSaveDialog) SetFileFilters(filter []FileFilter) error { 76 return fileSaveDialog.vtbl.setFileTypes(unsafe.Pointer(fileSaveDialog), filter) 77 } 78 79 func (fileSaveDialog *iFileSaveDialog) SetRole(role string) error { 80 return fileSaveDialog.vtbl.setClientGuid(unsafe.Pointer(fileSaveDialog), util.StringToUUID(role)) 81 } 82 83 func (fileSaveDialog *iFileSaveDialog) SetDefaultExtension(defaultExtension string) error { 84 return fileSaveDialog.vtbl.setDefaultExtension(unsafe.Pointer(fileSaveDialog), defaultExtension) 85 } 86 87 func (fileSaveDialog *iFileSaveDialog) SetFileName(initialFileName string) error { 88 return fileSaveDialog.vtbl.setFileName(unsafe.Pointer(fileSaveDialog), initialFileName) 89 } 90 91 func (fileSaveDialog *iFileSaveDialog) SetSelectedFileFilterIndex(index uint) error { 92 return fileSaveDialog.vtbl.setSelectedFileFilterIndex(unsafe.Pointer(fileSaveDialog), index) 93 }