mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 04:40:41 +08:00
93 lines
2.9 KiB
Go
93 lines
2.9 KiB
Go
//go:build windows
|
|
// +build windows
|
|
|
|
package cfd
|
|
|
|
import (
|
|
"github.com/go-ole/go-ole"
|
|
"unsafe"
|
|
)
|
|
|
|
var (
|
|
saveFileDialogCLSID = ole.NewGUID("{C0B4E2F3-BA21-4773-8DBA-335EC946EB8B}")
|
|
saveFileDialogIID = ole.NewGUID("{84bccd23-5fde-4cdb-aea4-af64b83d78ab}")
|
|
)
|
|
|
|
type iFileSaveDialog struct {
|
|
vtbl *iFileSaveDialogVtbl
|
|
parentWindowHandle uintptr
|
|
}
|
|
|
|
type iFileSaveDialogVtbl struct {
|
|
iFileDialogVtbl
|
|
|
|
SetSaveAsItem uintptr
|
|
SetProperties uintptr
|
|
SetCollectedProperties uintptr
|
|
GetProperties uintptr
|
|
ApplyProperties uintptr
|
|
}
|
|
|
|
func newIFileSaveDialog() (*iFileSaveDialog, error) {
|
|
if unknown, err := ole.CreateInstance(saveFileDialogCLSID, saveFileDialogIID); err == nil {
|
|
return (*iFileSaveDialog)(unsafe.Pointer(unknown)), nil
|
|
} else {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) Show() error {
|
|
return fileSaveDialog.vtbl.show(unsafe.Pointer(fileSaveDialog), fileSaveDialog.parentWindowHandle)
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) SetParentWindowHandle(hwnd uintptr) {
|
|
fileSaveDialog.parentWindowHandle = hwnd
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) ShowAndGetResult() (string, error) {
|
|
if err := fileSaveDialog.Show(); err != nil {
|
|
return "", err
|
|
}
|
|
return fileSaveDialog.GetResult()
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) SetTitle(title string) error {
|
|
return fileSaveDialog.vtbl.setTitle(unsafe.Pointer(fileSaveDialog), title)
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) GetResult() (string, error) {
|
|
return fileSaveDialog.vtbl.getResultString(unsafe.Pointer(fileSaveDialog))
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) Release() error {
|
|
return fileSaveDialog.vtbl.release(unsafe.Pointer(fileSaveDialog))
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) SetDefaultFolder(defaultFolderPath string) error {
|
|
return fileSaveDialog.vtbl.setDefaultFolder(unsafe.Pointer(fileSaveDialog), defaultFolderPath)
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) SetFolder(defaultFolderPath string) error {
|
|
return fileSaveDialog.vtbl.setFolder(unsafe.Pointer(fileSaveDialog), defaultFolderPath)
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) SetFileFilters(filter []FileFilter) error {
|
|
return fileSaveDialog.vtbl.setFileTypes(unsafe.Pointer(fileSaveDialog), filter)
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) SetRole(role string) error {
|
|
return fileSaveDialog.vtbl.setClientGuid(unsafe.Pointer(fileSaveDialog), StringToUUID(role))
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) SetDefaultExtension(defaultExtension string) error {
|
|
return fileSaveDialog.vtbl.setDefaultExtension(unsafe.Pointer(fileSaveDialog), defaultExtension)
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) SetFileName(initialFileName string) error {
|
|
return fileSaveDialog.vtbl.setFileName(unsafe.Pointer(fileSaveDialog), initialFileName)
|
|
}
|
|
|
|
func (fileSaveDialog *iFileSaveDialog) SetSelectedFileFilterIndex(index uint) error {
|
|
return fileSaveDialog.vtbl.setSelectedFileFilterIndex(unsafe.Pointer(fileSaveDialog), index)
|
|
}
|