38 lines
1005 B
Swift
38 lines
1005 B
Swift
//
|
|
// MenuItemGroup.swift
|
|
// Adwaita
|
|
//
|
|
// Created by david-swift on 22.10.23.
|
|
//
|
|
|
|
import Libadwaita
|
|
|
|
/// A structure conforming to `MenuItemGroup` can be added to the content accepting a menu.
|
|
public protocol MenuItemGroup {
|
|
|
|
/// The menu's content.
|
|
@MenuBuilder var content: MenuContent { get }
|
|
|
|
}
|
|
|
|
extension MenuItemGroup {
|
|
|
|
/// Add the menu items described by the group to a menu.
|
|
/// - Parameter menu: The menu.
|
|
func addMenuItems(menu: Libadwaita.Menu, app: GTUIApp, window: GTUIApplicationWindow?) {
|
|
for element in content {
|
|
if let item = element as? MenuItem {
|
|
item.addMenuItem(menu: menu, app: app, window: window)
|
|
} else {
|
|
element.addMenuItems(menu: menu, app: app, window: window)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/// `MenuContent` is an array of menu item groups.
|
|
public typealias MenuContent = [MenuItemGroup]
|
|
/// A builder for the `MenuContent`
|
|
public typealias MenuBuilder = ArrayBuilder<MenuItemGroup>
|