portico/Sources/Portico/Generated/Assistant.swift

281 lines
16 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Generated by PorticoGen. DO NOT EDIT. See Sources/PorticoGen to make changes.
import Adw
import Gtk
import Gio
import Gdk
// PorticoGen: generateStruct | source: Gtk.Assistant
/// `GtkAssistant` is used to represent a complex as a series of steps.
///
/// <picture>
/// <source srcset="assistant-dark.png" media="(prefers-color-scheme: dark)">
/// <img alt="An example GtkAssistant" src="assistant.png">
/// </picture>
///
/// Each step consists of one or more pages. `GtkAssistant` guides the user
/// through the pages, and controls the page flow to collect the data needed
/// for the operation.
///
/// `GtkAssistant` handles which buttons to show and to make sensitive based
/// on page sequence knowledge and the [enum`Gtk`.AssistantPageType] of each
/// page in addition to state information like the *completed* and *committed*
/// page statuses.
///
/// If you have a case that doesnt quite fit in `GtkAssistant`s way of
/// handling buttons, you can use the `GTK_ASSISTANT_PAGE_CUSTOM` page
/// type and handle buttons yourself.
///
/// `GtkAssistant` maintains a `GtkAssistantPage` object for each added
/// child, which holds additional per-child properties. You
/// obtain the `GtkAssistantPage` for a child with [method`Gtk`.Assistant.get_page].
///
/// # GtkAssistant as GtkBuildable
///
/// The `GtkAssistant` implementation of the `GtkBuildable` interface
/// exposes the `action_area` as internal children with the name
/// action_area.
///
/// To add pages to an assistant in `GtkBuilder`, simply add it as a
/// child to the `GtkAssistant` object. If you need to set per-object
/// properties, create a `GtkAssistantPage` object explicitly, and
/// set the child widget as a property on it.
///
/// # CSS nodes
///
/// `GtkAssistant` has a single CSS node with the name window and style
/// class .assistant.
///
/// A Portico view that mounts a `Gtk.Assistant`.
@MainActor public struct Assistant: View {
private let make: (MountContext) -> Gtk.Assistant
private var configure: [(Gtk.Assistant, MountContext) -> Void] = []
public var body: Never { fatalError() }
// PorticoGen: generateInits(static) | source: Gtk.Assistant.init()
/// Creates a new `GtkAssistant`.
///
/// Applied once at mount; use the `Binding` or closure overload for values that change.
/// Each closure is evaluated once; children are added in order and slot closures mount their first view.
/// An empty closure adds no children and leaves slots unset.
/// Optional value parameters are applied only when non-`nil`; a `nil` argument leaves the widget's own default in place and cannot clear a nullable property - use the matching modifier for that.
///
/// - Parameter application: The `GtkApplication` associated with the window.
/// - Parameter decorated: Whether the window should have a frame (also known as *decorations*).
/// - Parameter deletable: Whether the window frame should have a close button.
/// - Parameter destroyWithParent: If this window should be destroyed when the parent is destroyed.
/// - Parameter display: The display that will display this window.
/// - Parameter focusVisible: Whether 'focus rectangles' are currently visible in this window.
/// - Parameter gravity: The gravity to use when resizing the window programmatically.
/// - Parameter handleMenubarAccel: Whether the window frame should handle <kbd>F10</kbd> for activating menubars.
/// - Parameter hideOnClose: If this window should be hidden instead of destroyed when the user clicks the close button.
/// - Parameter iconName: Specifies the name of the themed icon to use as the window icon.
/// - Parameter mnemonicsVisible: Whether mnemonics are currently visible in this window.
/// - Parameter modal: If true, the window is modal.
/// - Parameter resizable: If true, users can resize the window.
/// - Parameter startupId: A write-only property for setting window's startup notification identifier.
/// - Parameter title: The title of the window.
/// - Parameter transientFor: The transient parent of the window.
/// - Parameter child: A `ViewBuilder` closure whose first view is mounted into the `child` slot.
/// - Parameter defaultWidget: A `ViewBuilder` closure whose first view is mounted into the `defaultWidget` slot.
/// - Parameter focusWidget: A `ViewBuilder` closure whose first view is mounted into the `focusWidget` slot.
/// - Parameter titlebar: A `ViewBuilder` closure whose first view is mounted into the `titlebar` slot.
/// - Parameter onApply: Invoked when the widget emits the `apply` signal.
/// - Parameter onCancel: Invoked when the widget emits the `cancel` signal.
/// - Parameter onClose: Invoked when the widget emits the `close` signal.
/// - Parameter onEscape: Invoked when the widget emits the `escape` signal.
/// - Parameter onPrepare: Invoked when the widget emits the `prepare` signal. The closure receives the signal's arguments in order.
/// - Parameter onActivateDefault: Invoked when the widget emits the `activate-default` signal.
/// - Parameter onActivateFocus: Invoked when the widget emits the `activate-focus` signal.
/// - Parameter onCloseRequest: Invoked when the widget emits the `close-request` signal. Its return value is forwarded to GTK as the signal's result.
/// - Parameter onEnableDebugging: Invoked when the widget emits the `enable-debugging` signal. The closure receives the signal's arguments in order. Its return value is forwarded to GTK as the signal's result.
/// - Parameter onKeysChanged: Invoked when the widget emits the `keys-changed` signal.
public init(application: Gtk.Application? = nil, decorated: Bool? = nil, deletable: Bool? = nil, destroyWithParent: Bool? = nil, display: Gtk.Display? = nil, focusVisible: Bool? = nil, gravity: Gtk.WindowGravity? = nil, handleMenubarAccel: Bool? = nil, hideOnClose: Bool? = nil, iconName: String? = nil, mnemonicsVisible: Bool? = nil, modal: Bool? = nil, resizable: Bool? = nil, startupId: String? = nil, title: String? = nil, transientFor: Gtk.Window? = nil, @ViewBuilder child: @escaping () -> [AnyView] = { [] }, @ViewBuilder defaultWidget: @escaping () -> [AnyView] = { [] }, @ViewBuilder focusWidget: @escaping () -> [AnyView] = { [] }, @ViewBuilder titlebar: @escaping () -> [AnyView] = { [] }, onApply: (() -> Void)? = nil, onCancel: (() -> Void)? = nil, onClose: (() -> Void)? = nil, onEscape: (() -> Void)? = nil, onPrepare: ((Gtk.Widget) -> Void)? = nil, onActivateDefault: (() -> Void)? = nil, onActivateFocus: (() -> Void)? = nil, onCloseRequest: (() -> Bool)? = nil, onEnableDebugging: ((Bool) -> Bool)? = nil, onKeysChanged: (() -> Void)? = nil) {
make = { _ in Gtk.Assistant() }
configure.append { w, ctx in
if let application { w.setApplication(application: application) }
if let decorated { w.setDecorated(setting: decorated) }
if let deletable { w.setDeletable(setting: deletable) }
if let destroyWithParent { w.setDestroyWithParent(setting: destroyWithParent) }
if let display { w.setDisplay(display: display) }
if let focusVisible { w.setFocusVisible(setting: focusVisible) }
if let gravity { w.setGravity(gravity: gravity) }
if let handleMenubarAccel { w.setHandleMenubarAccel(handleMenubarAccel: handleMenubarAccel) }
if let hideOnClose { w.setHideOnClose(setting: hideOnClose) }
if let iconName { w.setIconName(name: iconName) }
if let mnemonicsVisible { w.setMnemonicsVisible(setting: mnemonicsVisible) }
if let modal { w.setModal(modal: modal) }
if let resizable { w.setResizable(resizable: resizable) }
if let startupId { w.setStartupId(startupId: startupId) }
if let title { w.setTitle(title: title) }
if let transientFor { w.setTransientFor(parent: transientFor) }
if let v = Portico.mountSlotChild(child, ctx, onUpdate: { v in w.setChild(child: v) }) { w.setChild(child: v) }
if let v = Portico.mountSlotChild(defaultWidget, ctx, onUpdate: { v in w.setDefaultWidget(defaultWidget: v) }) { w.setDefaultWidget(defaultWidget: v) }
if let v = Portico.mountSlotChild(focusWidget, ctx, onUpdate: { v in w.setFocus(focus: v) }) { w.setFocus(focus: v) }
if let v = Portico.mountSlotChild(titlebar, ctx, onUpdate: { v in w.setTitlebar(titlebar: v) }) { w.setTitlebar(titlebar: v) }
if let onApply { ctx.registry.add(w.connectApply { _ in onApply() }) }
if let onCancel { ctx.registry.add(w.connectCancel { _ in onCancel() }) }
if let onClose { ctx.registry.add(w.connectClose { _ in onClose() }) }
if let onEscape { ctx.registry.add(w.connectEscape { _ in onEscape() }) }
if let onPrepare { ctx.registry.add(w.connectPrepare { _, a0 in onPrepare(a0) }) }
if let onActivateDefault { ctx.registry.add(w.connectActivateDefault { _ in onActivateDefault() }) }
if let onActivateFocus { ctx.registry.add(w.connectActivateFocus { _ in onActivateFocus() }) }
if let onCloseRequest { ctx.registry.add(w.connectCloseRequest { _ in onCloseRequest() }) }
if let onEnableDebugging { ctx.registry.add(w.connectEnableDebugging { _, a0 in onEnableDebugging(a0) }) }
if let onKeysChanged { ctx.registry.add(w.connectKeysChanged { _ in onKeysChanged() }) }
}
}
}
extension Assistant: WidgetView {
public typealias Target = Gtk.Assistant
@_spi(Portico) public func appending(
_ step: @escaping (Gtk.Assistant, MountContext) -> Void
) -> Self {
var c = self
c.configure.append(step)
return c
}
}
@_spi(Portico) extension Assistant: Mountable {
@_spi(Portico) public func mount(_ ctx: MountContext) -> Gtk.Widget {
let w = make(ctx)
for step in configure { step(w, ctx) }
return w
}
}
// PorticoGen: generateModifierExtension | source: Gtk.Assistant
/// Modifiers for `Gtk.Assistant`, available on every Portico view whose
/// backing widget is `Gtk.Assistant` or one of its subclasses.
extension WidgetView where Target: Gtk.Assistant {
// PorticoGen: generateModifierExtension -> generateChildAdderModifiers(static) | source: Gtk.Assistant.addActionWidget(child:)
/// Adds a widget to the action area of a `GtkAssistant`.
///
/// Applied once at mount; use the `@ViewBuilder` overload for multiple children.
///
/// - Parameter child: A child widget to add.
/// - Returns: A copy of this view with the modifier applied.
public func addActionWidget(_ child: Gtk.Widget) -> Self {
appending { w, _ in
w.addActionWidget(child: child)
}
}
// PorticoGen: generateModifierExtension -> generateChildAdderModifiers(viewBuilder) | source: Gtk.Assistant.addActionWidget(child:)
/// Adds a widget to the action area of a `GtkAssistant`.
///
/// Every view the closure produces is added at mount, in order.
///
/// - Parameter child: A closure producing child views.
/// - Returns: A copy of this view with the modifier applied.
public func addActionWidget(@ViewBuilder _ child: () -> [AnyView]) -> Self {
let childViews = child()
return appending { w, ctx in
for v in childViews { w.addActionWidget(child: v.makeWidget(ctx)) }
}
}
// PorticoGen: generateModifierExtension -> generateChildAdderModifiers(static) | source: Gtk.Assistant.appendPage(page:)
/// Appends a page to the `assistant`.
///
/// Applied once at mount; use the `@ViewBuilder` overload for multiple children.
///
/// - Parameter child: A child widget to add.
/// - Returns: A copy of this view with the modifier applied.
public func appendPage(_ child: Gtk.Widget) -> Self {
appending { w, _ in
_ = w.appendPage(page: child)
}
}
// PorticoGen: generateModifierExtension -> generateChildAdderModifiers(viewBuilder) | source: Gtk.Assistant.appendPage(page:)
/// Appends a page to the `assistant`.
///
/// Every view the closure produces is added at mount, in order.
///
/// - Parameter child: A closure producing child views.
/// - Returns: A copy of this view with the modifier applied.
public func appendPage(@ViewBuilder _ child: () -> [AnyView]) -> Self {
let childViews = child()
return appending { w, ctx in
for v in childViews { _ = w.appendPage(page: v.makeWidget(ctx)) }
}
}
// PorticoGen: generateModifierExtension -> generateSignalModifier | source: Gtk.Assistant.connectApply(_:)
/// Emitted when the apply button is clicked.
///
/// The default behavior of the `GtkAssistant` is to switch to the page
/// after the current page, unless the current page is the last one.
///
/// A handler for the ::apply signal should carry out the actions for
/// which the wizard has collected data. If the action takes a long time
/// to complete, you might consider putting a page of type
/// `GTK_ASSISTANT_PAGE_PROGRESS` after the confirmation page and handle
/// this operation within the [signal`Gtk`.Assistant::prepare] signal of
/// the progress page.
///
/// - Parameter handler: Invoked when the widget emits the `apply` signal.
/// - Returns: A copy of this view with the modifier applied.
public func onApply(_ handler: @escaping () -> Void) -> Self {
appending { w, ctx in
ctx.registry.add(w.connectApply { _ in handler() })
}
}
// PorticoGen: generateModifierExtension -> generateSignalModifier | source: Gtk.Assistant.connectCancel(_:)
/// Emitted when then the cancel button is clicked.
///
/// - Parameter handler: Invoked when the widget emits the `cancel` signal.
/// - Returns: A copy of this view with the modifier applied.
public func onCancel(_ handler: @escaping () -> Void) -> Self {
appending { w, ctx in
ctx.registry.add(w.connectCancel { _ in handler() })
}
}
// PorticoGen: generateModifierExtension -> generateSignalModifier | source: Gtk.Assistant.connectClose(_:)
/// Emitted either when the close button of a summary page is clicked,
/// or when the apply button in the last page in the flow (of type
/// `GTK_ASSISTANT_PAGE_CONFIRM`) is clicked.
///
/// - Parameter handler: Invoked when the widget emits the `close` signal.
/// - Returns: A copy of this view with the modifier applied.
public func onClose(_ handler: @escaping () -> Void) -> Self {
appending { w, ctx in
ctx.registry.add(w.connectClose { _ in handler() })
}
}
// PorticoGen: generateModifierExtension -> generateSignalModifier | source: Gtk.Assistant.connectEscape(_:)
/// The action signal for the Escape binding.
///
/// - Parameter handler: Invoked when the widget emits the `escape` signal.
/// - Returns: A copy of this view with the modifier applied.
public func onEscape(_ handler: @escaping () -> Void) -> Self {
appending { w, ctx in
ctx.registry.add(w.connectEscape { _ in handler() })
}
}
// PorticoGen: generateModifierExtension -> generateSignalModifier | source: Gtk.Assistant.connectPrepare(_:)
/// Emitted when a new page is set as the assistant's current page,
/// before making the new page visible.
///
/// A handler for this signal can do any preparations which are
/// necessary before showing `page`.
///
/// - Parameter handler: Invoked when the widget emits the `prepare` signal. The closure receives the signal's arguments in order.
/// - Returns: A copy of this view with the modifier applied.
public func onPrepare(_ handler: @escaping (Gtk.Widget) -> Void) -> Self {
appending { w, ctx in
ctx.registry.add(w.connectPrepare { _, a0 in handler(a0) })
}
}
}