portico/Sources/PorticoGtk/Generated/ApplicationWindow.swift

176 lines
10 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
@_spi(Portico) import Portico
// PorticoGen: generateStruct | source: Gtk.ApplicationWindow
/// A `GtkWindow` subclass that integrates with `GtkApplication`.
///
/// Notably, `GtkApplicationWindow` can handle an application menubar.
///
/// This class implements the [iface`Gio`.ActionGroup] and [iface`Gio`.ActionMap]
/// interfaces, to let you add window-specific actions that will be exported
/// by the associated [class`Gtk`.Application], together with its application-wide
/// actions. Window-specific actions are prefixed with the win.
/// prefix and application-wide actions are prefixed with the app.
/// prefix. Actions must be addressed with the prefixed name when
/// referring to them from a menu model.
///
/// Note that widgets that are placed inside a `GtkApplicationWindow`
/// can also activate these actions, if they implement the
/// [iface`Gtk`.Actionable] interface.
///
/// The settings [property`Gtk`.Settings:gtk-shell-shows-app-menu] and
/// [property`Gtk`.Settings:gtk-shell-shows-menubar] tell GTK whether the
/// desktop environment is showing the application menu and menubar
/// models outside the application as part of the desktop shell.
/// For instance, on OS X, both menus will be displayed remotely;
/// on Windows neither will be.
///
/// If the desktop environment does not display the menubar, it can be shown in
/// the `GtkApplicationWindow` by setting the
/// [property`Gtk`.ApplicationWindow:show-menubar] property to true. If the
/// desktop environment does not display the application menu, then it will
/// automatically be included in the menubar or in the windows client-side
/// decorations.
///
/// See [class`Gtk`.PopoverMenu] for information about the XML language
/// used by `GtkBuilder` for menu models.
///
/// See also: [method`Gtk`.Application.set_menubar].
///
/// ## A GtkApplicationWindow with a menubar
///
/// The code sample below shows how to set up a `GtkApplicationWindow`
/// with a menu bar defined on the [class`Gtk`.Application]:
///
/// ```c
/// GtkApplication *app = gtk_application_new ("org.gtk.test", 0);
///
/// GtkBuilder *builder = gtk_builder_new_from_string (
/// "<interface>"
/// " <menu id='menubar'>"
/// " <submenu>"
/// " <attribute name='label' translatable='yes'>_Edit</attribute>"
/// " <item>"
/// " <attribute name='label' translatable='yes'>_Copy</attribute>"
/// " <attribute name='action'>win.copy</attribute>"
/// " </item>"
/// " <item>"
/// " <attribute name='label' translatable='yes'>_Paste</attribute>"
/// " <attribute name='action'>win.paste</attribute>"
/// " </item>"
/// " </submenu>"
/// " </menu>"
/// "</interface>",
/// -1);
///
/// GMenuModel *menubar = G_MENU_MODEL (gtk_builder_get_object (builder, "menubar"));
/// gtk_application_set_menubar (GTK_APPLICATION (app), menubar);
/// g_object_unref (builder);
///
/// // ...
///
/// GtkWidget *window = gtk_application_window_new (app);
/// ```
///
/// A Portico view that mounts a `Gtk.ApplicationWindow`.
@MainActor public struct ApplicationWindow: View {
private let make: (MountContext) -> Gtk.ApplicationWindow
private var configure: [(Gtk.ApplicationWindow, MountContext) -> Void] = []
public var body: Never { fatalError() }
// PorticoGen: generateInits(static) | source: Gtk.ApplicationWindow.init(application:)
/// Creates a new `GtkApplicationWindow`.
///
/// 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 `application` value forwarded to `Gtk.ApplicationWindow`.
/// - Parameter showMenubar: If this property is true, the window will display a menubar unless it is shown by the desktop shell.
/// - 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 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, showMenubar: Bool? = 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: () -> [AnyView] = { [] }, @ViewBuilder defaultWidget: () -> [AnyView] = { [] }, @ViewBuilder focusWidget: () -> [AnyView] = { [] }, @ViewBuilder titlebar: () -> [AnyView] = { [] }, onActivateDefault: (() -> Void)? = nil, onActivateFocus: (() -> Void)? = nil, onCloseRequest: (() -> Bool)? = nil, onEnableDebugging: ((Bool) -> Bool)? = nil, onKeysChanged: (() -> Void)? = nil) {
let childViews = child()
let defaultWidgetViews = defaultWidget()
let focusWidgetViews = focusWidget()
let titlebarViews = titlebar()
make = { _ in Gtk.ApplicationWindow(application: application) }
configure.append { w, ctx in
if let showMenubar { w.setShowMenubar(showMenubar: showMenubar) }
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 = childViews.first { w.setChild(child: v.makeWidget(ctx)) }
if let v = defaultWidgetViews.first { w.setDefaultWidget(defaultWidget: v.makeWidget(ctx)) }
if let v = focusWidgetViews.first { w.setFocus(focus: v.makeWidget(ctx)) }
if let v = titlebarViews.first { w.setTitlebar(titlebar: v.makeWidget(ctx)) }
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 ApplicationWindow: WidgetView {
public typealias Target = Gtk.ApplicationWindow
@_spi(Portico) public func appending(
_ step: @escaping (Gtk.ApplicationWindow, MountContext) -> Void
) -> Self {
var c = self
c.configure.append(step)
return c
}
}
@_spi(Portico) extension ApplicationWindow: Mountable {
@_spi(Portico) public func mount(_ ctx: MountContext) -> Gtk.Widget {
let w = make(ctx)
for step in configure { step(w, ctx) }
return w
}
}