adwaita-swift/user-manual/Information/AutoGeneratedWidgets.md
2024-01-23 07:26:58 +01:00

91 lines
2.2 KiB
Markdown

# Auto-Generated Widgets
Visit the [Libadwaita](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/1-latest/) or [Gtk](https://docs.gtk.org/gtk4/index.html) docs
and find the widget you want to implement.
There is an auto-generated interface available for many Libadwaita and Gtk widgets.
This page shows how to use them, using [AdwSplitButton](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/1-latest/class.SplitButton.html) as an example.
## The Initializer
The type name is the original type name without the prefix, in that case `SplitButton`.
Most of the widgets enable initialization with an empty initializer.
Exceptions will cause a helpful error message when trying with an empty initializer.
```swift
var view: Body {
SplitButton()
}
```
## Simple Properties
Properties with "simple" types, such as strings (and most other types), have
a Swift equivalent with the same name in camel case.
For example, you will find the properties `label` and `dropdown-tooltip` in the docs.
They can be used in the following way:
```swift
var view: Body {
SplitButton()
.label("Hello")
.dropdownTooltip("World")
}
```
Properties that are booleans can be set implicitly to `true`:
```swift
var view: Body {
SplitButton()
.label("Hello")
.canShrink()
}
```
## Signals
You can connect to signals using their names.
```swift
var view: Body {
SplitButton()
.label("Hello")
.clicked {
print("Clicked")
}
}
```
## Views and Menu Models
Properties of the type `GtkWidget` can be used in the following way:
```swift
SplitButton()
.child {
ButtonContent()
.label("Hello")
.iconName("zoom-original-symbolic")
}
}
```
`GMenuModel` is treated similarly:
```swift
var view: Body {
SplitButton()
.label("Hello")
.menuModel(app: app) {
MenuButton("Test") {
print("Test")
}
MenuButton("World") {
print("World")
}
}
}
```
## Bindings
Some properties can be changed by a user action (e.g. toggles).
They expect a binding instead of a "normal" value.
Compilation error messages will be helpful in spotting those properties.