Dialog

Dialog

This part of the runtime provides access to native dialogs, such as File Selectors and Message boxes.

Dialog - 图1 JavaScript

Dialog is currently unsupported in the JS runtime.

OpenDirectoryDialog

Opens a dialog that prompts the user to select a directory. Can be customised using OpenDialogOptions.

Go: OpenDirectoryDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)

Returns: Selected directory (blank if the user cancelled) or an error

OpenFileDialog

Opens a dialog that prompts the user to select a file. Can be customised using OpenDialogOptions.

Go: OpenFileDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)

Returns: Selected file (blank if the user cancelled) or an error

OpenMultipleFilesDialog

Opens a dialog that prompts the user to select multiple files. Can be customised using OpenDialogOptions.

Go: OpenMultipleFilesDialog(ctx context.Context, dialogOptions OpenDialogOptions) ([]string, error)

Returns: Selected files (nil if the user cancelled) or an error

SaveFileDialog

Opens a dialog that prompts the user to select a filename for the purposes of saving. Can be customised using SaveDialogOptions.

Go: SaveFileDialog(ctx context.Context, dialogOptions SaveDialogOptions) (string, error)

Returns: The selected file (blank if the user cancelled) or an error

MessageDialog

Displays a message using a message dialog. Can be customised using MessageDialogOptions.

Go: MessageDialog(ctx context.Context, dialogOptions MessageDialogOptions) (string, error)

Returns: The text of the selected button or an error

Options

OpenDialogOptions

type OpenDialogOptions struct {
    DefaultDirectory           string
    DefaultFilename            string
    Title                      string
    Filters                    []FileFilter
    ShowHiddenFiles            bool
    CanCreateDirectories       bool
    ResolvesAliases            bool
    TreatPackagesAsDirectories bool
}
``` Field| Description| Win| Mac| Lin  
---|---|---|---|---  
DefaultDirectory| The directory the dialog will show when opened| ✅| ✅| ✅  
DefaultFilename| The default filename| ✅| ✅| ✅  
Title| Title for the dialog| ✅| ✅| ✅  
Filters| A list of file filters| ✅| ✅| ✅  
ShowHiddenFiles| Show files hidden by the system| | ✅| ✅  
CanCreateDirectories| Allow user to create directories| | ✅|   
ResolvesAliases| If true, returns the file not the alias| | ✅|   
TreatPackagesAsDirectories| Allow navigating into packages| | ✅|   

### SaveDialogOptions

type SaveDialogOptions struct { DefaultDirectory string DefaultFilename string Title string Filters []FileFilter ShowHiddenFiles bool CanCreateDirectories bool TreatPackagesAsDirectories bool } ``` Field| Description| Win| Mac| Lin
---|---|---|---|---
DefaultDirectory| The directory the dialog will show when opened| ✅| ✅| ✅
DefaultFilename| The default filename| ✅| ✅| ✅
Title| Title for the dialog| ✅| ✅| ✅
Filters| A list of file filters| ✅| ✅| ✅
ShowHiddenFiles| Show files hidden by the system| | ✅| ✅
CanCreateDirectories| Allow user to create directories| | ✅|
TreatPackagesAsDirectories| Allow navigating into packages| | ✅|

MessageDialogOptions

type MessageDialogOptions struct {
    Type          DialogType
    Title         string
    Message       string
    Buttons       []string
    DefaultButton string
    CancelButton  string
}
``` Field| Description| Win| Mac| Lin  
---|---|---|---|---  
Type| The type of message dialog, eg question, info…| ✅| ✅| ✅  
Title| Title for the dialog| ✅| ✅| ✅  
Message| The message to show the user| ✅| ✅| ✅  
Buttons| A list of button titles| | ✅|   
DefaultButton| The button with this text should be treated as default. Bound to `return`.| ✅*| ✅|   
CancelButton| The button with this text should be treated as cancel. Bound to `escape`| | ✅|   

#### Windows

Windows has standard dialog types in which the buttons are not customisable. The value returned will be one of: “Ok”, “Cancel”, “Abort”, “Retry”, “Ignore”, “Yes”, “No”, “Try Again” or “Continue”.

For Question dialogs, the default button is “Yes” and the cancel button is “No”. This can be changed by setting the `DefaultButton` value to `"No"`.

Example:

result, err := runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{
    Type:          runtime.QuestionDialog,
    Title:         "Question",
    Message:       "Do you want to continue?",
    DefaultButton: "No",
})

#### Linux

Linux has standard dialog types in which the buttons are not customisable. The value returned will be one of: “Ok”, “Cancel”, “Yes”, “No”

#### Mac

A message dialog on Mac may specify up to 4 buttons. If no `DefaultButton` or `CancelButton` is given, the first button is considered default and is bound to the `return` key.

For the following code:

selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ Title: "It's your turn!", Message: "Select a number", Buttons: []string{"one", "two", "three", "four"}, })


the first button is shown as default:

![Dialog - 图2](https://static.bookstack.cn/projects/wails-2.10-en/0721b01051963af07b0be4d69370b9a9.png) 

And if we specify `DefaultButton` to be “two”:

selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ Title: "It's your turn!", Message: "Select a number", Buttons: []string{"one", "two", "three", "four"}, DefaultButton: "two", })


the second button is shown as default. When `return` is pressed, the value “two” is returned.

![Dialog - 图3](https://static.bookstack.cn/projects/wails-2.10-en/671e1c45ce2deda6d1046674330bf7a1.png) 

If we now specify `CancelButton` to be “three”:

selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ Title: "It's your turn!", Message: "Select a number", Buttons: []string{"one", "two", "three", "four"}, DefaultButton: "two", CancelButton: "three", })


the button with “three” is shown at the bottom of the dialog. When `escape` is pressed, the value “three” is returned:

![Dialog - 图4](https://static.bookstack.cn/projects/wails-2.10-en/7630edaadfee4d8a5a820add42d53584.png)

#### DialogType

const ( InfoDialog DialogType = "info" WarningDialog DialogType = "warning" ErrorDialog DialogType = "error" QuestionDialog DialogType = "question" )


### FileFilter

type FileFilter struct { DisplayName string // Filter information EG: "Image Files (.jpg, .png)" Pattern string // semi-colon separated list of extensions, EG: ".jpg;.png" }


#### Windows

Windows allows you to use multiple file filters in dialog boxes. Each FileFilter will show up as a separate entry in the dialog:

![Dialog - 图5](https://static.bookstack.cn/projects/wails-2.10-en/9c25078bce2f15af6a8888d2060f4afd.png)

#### Linux

Linux allows you to use multiple file filters in dialog boxes. Each FileFilter will show up as a separate entry in the dialog:

![Dialog - 图6](https://static.bookstack.cn/projects/wails-2.10-en/65a2a71dd9d130401f60c349a4281268.png)

#### Mac

Mac dialogs only have the concept of a single set of patterns to filter files. If multiple FileFilters are provided, Wails will use all the Patterns defined.

Example:

selection, err := runtime.OpenFileDialog(b.ctx, runtime.OpenDialogOptions{
    Title: "Select File",
    Filters: []runtime.FileFilter{
        {
            DisplayName: "Images (*.png;*.jpg)",
            Pattern:     "*.png;*.jpg",
        }, {
            DisplayName: "Videos (*.mov;*.mp4)",
            Pattern:     "*.mov;*.mp4",
        },
    },
})

```

This will result in the Open File dialog using *.png,*.jpg,*.mov,*.mp4 as a filter.