**STRUCT**

# `Window`

A structure representing an application window type.

Note that multiple instances of a window can be opened at the same time.

## Properties
### `id`

The window's identifier.

### `content`

The window's content.

### `open`

Whether an instance of the window type should be opened when the app is starting up.

### `parentID`

The identifier of the window's parent.

### `shortcuts`

The keyboard shortcuts.

### `appShortcuts`

The keyboard shortcuts on the app level.

### `fileImporter`

The signal for the file importer.

### `fileExporter`

The signal for the file exporter.

### `initialImporterFolder`

The initial folder for the file importer.

### `initialExporterFolder`

The initial folder for the file exporter.

### `initialName`

The initial file name for the file exporter.

### `extensions`

The accepted extensions for the file importer.

### `folders`

Whether folders are accepted in the file importer.

### `importerResult`

The closure to run when the import is successful.

### `exporterResult`

The closure to run when the export is successful.

### `importerCancel`

The closure to run when the import is not successful.

### `exporterCancel`

The closure to run when the export is not successful.

## Methods
### `init(id:open:content:)`

Create a window type with a certain identifier and user interface.
- Parameters:
  - id: The identifier.
  - open: The number of instances of the window type when the app is starting.
  - content: The window's content.

### `createWindow(app:)`

Get the storage for the window.
- Parameter app: The application.
- Returns: The storage.

### `createGTUIWindow(app:)`

Get the window.
- Parameter app: The application.
- Returns: The window.

### `getViewStorage(window:)`

Get the storage of the content view.
- Parameter window: The window.
- Returns: The storage of the content of the window.

### `update(_:app:)`

Update a window storage's content.
- Parameter storage: The storage to update.

### `overlay(windows:)`

Add windows that overlay the last instance of this window if presented.
- Parameter windows: The windows.
- Returns: The new windows and this window.

### `fileImporter(_:initialFolder:extensions:folders:onOpen:onClose:)`

Add an importer file dialog to the window.
- Parameters:
    - signal: The signal for opening the dialog.
    - initialFolder: The URL to the folder open when being opened.
    - extensions: The accepted file extensions.
    - folders: Whether folders are accepted.
    - onOpen: Run this when a file for importing has been chosen.
    - onClose: Run this when the user cancelled the action.

### `fileExporter(_:initialFolder:initialName:onSave:onClose:)`

Add an exporter file dialog to the window.
- Parameters:
    - signal: The signal for opening the dialog.
    - initialFolder: The URL to the folder open when being opened.
    - initialName: The default file name.
    - onSave: Run this when a path for exporting has been chosen.
    - onClose: Run this when the user cancelled the action.

### `keyboardShortcut(_:action:)`

Add a keyboard shortcut.
- Parameters:
    - shortcut: The keyboard shortcut.
    - action: The closure to execute when the keyboard shortcut is pressed.
- Returns: The window.

### `updateShortcuts(window:)`

Update the keyboard shortcuts.
- Parameter window: The application window.

### `updateFileDialog(storage:)`

Open a file importer or exporter if a signal has been activated and update changes.
- Parameter storage: The window storage.

### `closeShortcut()`

Add the shortcut "<Ctrl>w" which closes the window.
- Returns: The window.
