forked from aparoksha/adwaita-swift
Add support for toggles
This commit is contained in:
parent
85ca28d32f
commit
3a0897cbb5
@ -40,6 +40,7 @@
|
|||||||
- [Submenu](structs/Submenu.md)
|
- [Submenu](structs/Submenu.md)
|
||||||
- [Text](structs/Text.md)
|
- [Text](structs/Text.md)
|
||||||
- [ToastOverlay](structs/ToastOverlay.md)
|
- [ToastOverlay](structs/ToastOverlay.md)
|
||||||
|
- [Toggle](structs/Toggle.md)
|
||||||
- [ToolbarView](structs/ToolbarView.md)
|
- [ToolbarView](structs/ToolbarView.md)
|
||||||
- [VStack](structs/VStack.md)
|
- [VStack](structs/VStack.md)
|
||||||
- [Window](structs/Window.md)
|
- [Window](structs/Window.md)
|
||||||
|
|||||||
52
Documentation/Reference/structs/Toggle.md
Normal file
52
Documentation/Reference/structs/Toggle.md
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
**STRUCT**
|
||||||
|
|
||||||
|
# `Toggle`
|
||||||
|
|
||||||
|
A toggle button widget.
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
### `label`
|
||||||
|
|
||||||
|
The button's label.
|
||||||
|
|
||||||
|
### `icon`
|
||||||
|
|
||||||
|
The button's icon.
|
||||||
|
|
||||||
|
### `isOn`
|
||||||
|
|
||||||
|
Whether the toggle is on.
|
||||||
|
|
||||||
|
## Methods
|
||||||
|
### `init(_:icon:isOn:)`
|
||||||
|
|
||||||
|
Initialize a toggle button.
|
||||||
|
- Parameters:
|
||||||
|
- label: The button's label.
|
||||||
|
- icon: The button's icon.
|
||||||
|
- isOn: Whether the toggle is on.
|
||||||
|
|
||||||
|
### `init(_:isOn:)`
|
||||||
|
|
||||||
|
Initialize a toggle button.
|
||||||
|
- Parameters:
|
||||||
|
- label: The buttons label.
|
||||||
|
- isOn: Whether the toggle is on.
|
||||||
|
|
||||||
|
### `update(_:modifiers:)`
|
||||||
|
|
||||||
|
Update a toggle button's view storage.
|
||||||
|
- Parameters:
|
||||||
|
- storage: The view storage.
|
||||||
|
- modifiers: Modify views before being updated.
|
||||||
|
|
||||||
|
### `container(modifiers:)`
|
||||||
|
|
||||||
|
Get a button's view storage.
|
||||||
|
- Parameter modifiers: Modify views before being updated.
|
||||||
|
- Returns: The button's view storage.
|
||||||
|
|
||||||
|
### `updateState(toggle:)`
|
||||||
|
|
||||||
|
Update the toggle's state.
|
||||||
|
- Parameter toggle: The toggle.
|
||||||
72
Sources/Adwaita/View/Toggle.swift
Normal file
72
Sources/Adwaita/View/Toggle.swift
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
//
|
||||||
|
// Toggle.swift
|
||||||
|
// Adwaita
|
||||||
|
//
|
||||||
|
// Created by david-swift on 19.12.23.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Libadwaita
|
||||||
|
|
||||||
|
/// A toggle button widget.
|
||||||
|
public struct Toggle: Widget {
|
||||||
|
|
||||||
|
/// The button's label.
|
||||||
|
var label: String?
|
||||||
|
/// The button's icon.
|
||||||
|
var icon: Icon?
|
||||||
|
/// Whether the toggle is on.
|
||||||
|
@Binding var isOn: Bool
|
||||||
|
|
||||||
|
// swiftlint:disable function_default_parameter_at_end
|
||||||
|
/// Initialize a toggle button.
|
||||||
|
/// - Parameters:
|
||||||
|
/// - label: The button's label.
|
||||||
|
/// - icon: The button's icon.
|
||||||
|
/// - isOn: Whether the toggle is on.
|
||||||
|
public init(_ label: String? = nil, icon: Icon, isOn: Binding<Bool>) {
|
||||||
|
self.label = label
|
||||||
|
self.icon = icon
|
||||||
|
self._isOn = isOn
|
||||||
|
}
|
||||||
|
// swiftlint:enable function_default_parameter_at_end
|
||||||
|
|
||||||
|
/// Initialize a toggle button.
|
||||||
|
/// - Parameters:
|
||||||
|
/// - label: The buttons label.
|
||||||
|
/// - isOn: Whether the toggle is on.
|
||||||
|
public init(_ label: String, isOn: Binding<Bool>) {
|
||||||
|
self.label = label
|
||||||
|
self._isOn = isOn
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Update a toggle button's view storage.
|
||||||
|
/// - Parameters:
|
||||||
|
/// - storage: The view storage.
|
||||||
|
/// - modifiers: Modify views before being updated.
|
||||||
|
public func update(_ storage: ViewStorage, modifiers: [(View) -> View]) {
|
||||||
|
if let toggle = storage.view as? Libadwaita.ToggleButton {
|
||||||
|
updateState(toggle: toggle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get a button's view storage.
|
||||||
|
/// - Parameter modifiers: Modify views before being updated.
|
||||||
|
/// - Returns: The button's view storage.
|
||||||
|
public func container(modifiers: [(View) -> View]) -> ViewStorage {
|
||||||
|
let toggle: Libadwaita.ToggleButton = .init(label ?? "")
|
||||||
|
updateState(toggle: toggle)
|
||||||
|
return .init(toggle)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Update the toggle's state.
|
||||||
|
/// - Parameter toggle: The toggle.
|
||||||
|
func updateState(toggle: Libadwaita.ToggleButton) {
|
||||||
|
if let icon {
|
||||||
|
toggle.setLabel(icon: icon, label: label)
|
||||||
|
} else if let label {
|
||||||
|
toggle.setLabel(label)
|
||||||
|
}
|
||||||
|
toggle.setActive(isOn)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -10,6 +10,7 @@ This is an overview of the available widgets and other components in _Adwaita_.
|
|||||||
| Text | A widget for displaying a small amount of text. | GtkLabel |
|
| Text | A widget for displaying a small amount of text. | GtkLabel |
|
||||||
| VStack | A widget which arranges child widgets into a single column. | GtkBox |
|
| VStack | A widget which arranges child widgets into a single column. | GtkBox |
|
||||||
| HStack | A widget which arranges child widgets into a single row. | GtkBox |
|
| HStack | A widget which arranges child widgets into a single row. | GtkBox |
|
||||||
|
| Toggle | A button with two possible states, on and off. | GtkToggleButton |
|
||||||
| List | A widget which arranges child widgets vertically into rows. | GtkListBox |
|
| List | A widget which arranges child widgets vertically into rows. | GtkListBox |
|
||||||
| Menu | A widget showing a button that toggles the appearance of a menu. | GtkMenuButton |
|
| Menu | A widget showing a button that toggles the appearance of a menu. | GtkMenuButton |
|
||||||
| NavigationSplitView | A widget presenting sidebar and content side by side. | AdwNavigationSplitView |
|
| NavigationSplitView | A widget presenting sidebar and content side by side. | AdwNavigationSplitView |
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user