github.com/AlpineAIO/wails/v2@v2.0.0-beta.32.0.20240505041856-1047a8fa5fef/internal/go-common-file-dialog/cfd/CommonFileDialog_windows.go (about)

     1  //go:build windows
     2  // +build windows
     3  
     4  package cfd
     5  
     6  import "github.com/go-ole/go-ole"
     7  
     8  func initialize() {
     9  	// Swallow error
    10  	_ = ole.CoInitializeEx(0, ole.COINIT_APARTMENTTHREADED|ole.COINIT_DISABLE_OLE1DDE)
    11  }
    12  
    13  // TODO doc
    14  func NewOpenFileDialog(config DialogConfig) (OpenFileDialog, error) {
    15  	initialize()
    16  
    17  	openDialog, err := newIFileOpenDialog()
    18  	if err != nil {
    19  		return nil, err
    20  	}
    21  	err = config.apply(openDialog)
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  	return openDialog, nil
    26  }
    27  
    28  // TODO doc
    29  func NewOpenMultipleFilesDialog(config DialogConfig) (OpenMultipleFilesDialog, error) {
    30  	initialize()
    31  
    32  	openDialog, err := newIFileOpenDialog()
    33  	if err != nil {
    34  		return nil, err
    35  	}
    36  	err = config.apply(openDialog)
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  	err = openDialog.setIsMultiselect(true)
    41  	if err != nil {
    42  		return nil, err
    43  	}
    44  	return openDialog, nil
    45  }
    46  
    47  // TODO doc
    48  func NewSelectFolderDialog(config DialogConfig) (SelectFolderDialog, error) {
    49  	initialize()
    50  
    51  	openDialog, err := newIFileOpenDialog()
    52  	if err != nil {
    53  		return nil, err
    54  	}
    55  	err = config.apply(openDialog)
    56  	if err != nil {
    57  		return nil, err
    58  	}
    59  	err = openDialog.setPickFolders(true)
    60  	if err != nil {
    61  		return nil, err
    62  	}
    63  	return openDialog, nil
    64  }
    65  
    66  // TODO doc
    67  func NewSaveFileDialog(config DialogConfig) (SaveFileDialog, error) {
    68  	initialize()
    69  
    70  	saveDialog, err := newIFileSaveDialog()
    71  	if err != nil {
    72  		return nil, err
    73  	}
    74  	err = config.apply(saveDialog)
    75  	if err != nil {
    76  		return nil, err
    77  	}
    78  	return saveDialog, nil
    79  }