Skip to content

Commit

Permalink
Merge pull request #243 from fabulous-dev/normalize-menu-items-widgets
Browse files Browse the repository at this point in the history
Normalize MenuItems Widgets
  • Loading branch information
edgarfgp committed May 17, 2024
2 parents 368d683 + 90e68b0 commit 86472bb
Show file tree
Hide file tree
Showing 10 changed files with 61 additions and 55 deletions.
2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Avalonia.Diagnostics" Version="11.0.10" />
<PackageVersion Include="Fabulous" Version="3.0.0-pre4" />
<PackageVersion Include="Fabulous" Version="3.0.0-pre5" />
<PackageVersion Include="FsCheck.NUnit" Version="2.16.4" />
<PackageVersion Include="FSharp.Core" Version="8.0.200" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
Expand Down
2 changes: 1 addition & 1 deletion samples/Gallery/Pages/ContextFlyoutPage.fs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ module ContextFlyoutPage =
.inputGesture(KeyGesture(Key.D, KeyModifiers.Control))
.isEnabled(false)

Separator()
MenuItem(Separator())

MenuItems("Menu with _Submenu") {
MenuItem("Submenu _1")
Expand Down
2 changes: 1 addition & 1 deletion samples/Gallery/Pages/ContextMenuPage.fs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ module ContextMenuPage =
.inputGesture(KeyGesture(Key.D, KeyModifiers.Control))
.isEnabled(false)

Separator()
MenuItem(Separator())

MenuItems("Menu with _Submenu") {
MenuItem("Submenu _1")
Expand Down
2 changes: 1 addition & 1 deletion samples/Gallery/Pages/FlyoutPage.fs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ module FlyoutPage =
.inputGesture(KeyGesture(Key.D, KeyModifiers.Control))
.isEnabled(false)

Separator()
MenuItem(Separator())

MenuItems("Menu with _Submenu") {
MenuItem("Submenu _1")
Expand Down
14 changes: 8 additions & 6 deletions samples/Gallery/Pages/MenuPage.fs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ module MenuPage =

Dock() {
(Menu() {
MenuItems'("_First") {
MenuItems(header = Image("avares://Gallery/Assets/Icons/fabulous-icon.png")) {
MenuItem("Standard _Menu Item")
.inputGesture(KeyGesture(Key.A, KeyModifiers.Control))
.enableMenuItemClickForwarding(true)
Expand All @@ -51,13 +51,15 @@ module MenuPage =
.inputGesture(KeyGesture(Key.D, KeyModifiers.Control))
.isEnabled(false)

Separator()
MenuItem(Separator())

MenuItems'("Menu with _Submenu") {
MenuItems("Menu with _Submenu") {
MenuItem("Submenu _1")
MenuItems'("Submenu _2 with Submenu") { MenuItem("Submenu Level 2") }

(MenuItems'("Submenu _3 with Submenu Disabled") { MenuItem("Submenu Level 2") })
MenuItems("Submenu _2 with Submenu") { MenuItem("Submenu Level 2") }


(MenuItems("Submenu _3 with Submenu Disabled") { MenuItem("Submenu Level 2") })
.isEnabled(false)
}

Expand All @@ -71,7 +73,7 @@ module MenuPage =
.isHitTestVisible(false)
}

MenuItems'("_Second") { MenuItem("Second _Menu Item") }
MenuItems("_Second") { MenuItem("Second _Menu Item") }
})
.dock(Dock.Top)
}
Expand Down
2 changes: 1 addition & 1 deletion src/Fabulous.Avalonia/Fabulous.Avalonia.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@
This version will be used as the lower bound in the NuGet package
-->
<PackageReference Include="Avalonia.Diagnostics" />
<PackageReference Condition="'$(UseLocalProjectReference)' != 'true'" Include="Fabulous" VersionOverride="[3.0.0-pre4]" />
<PackageReference Condition="'$(UseLocalProjectReference)' != 'true'" Include="Fabulous" VersionOverride="[3.0.0-pre5]" />
<PackageReference Include="Avalonia" VersionOverride="11.0.10" />
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
</ItemGroup>
Expand Down
10 changes: 5 additions & 5 deletions src/Fabulous.Avalonia/Views/Menu/MenuFlyout.fs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ module MenuFlyoutBuilders =

/// <summary>Creates a MenuFlyout widget.</summary>
static member inline MenuFlyout() =
CollectionBuilder<'msg, IFabMenuFlyout, IFabControl>(MenuFlyout.WidgetKey, MenuFlyout.Items)
CollectionBuilder<'msg, IFabMenuFlyout, IFabMenuItem>(MenuFlyout.WidgetKey, MenuFlyout.Items)

type MenuFlyoutModifiers =
/// <summary>Link a ViewRef to access the direct MenuFlyout control instance.</summary>
Expand All @@ -40,17 +40,17 @@ type MenuFlyoutModifiers =

type MenuFlyoutCollectionBuilderExtensions =
[<Extension>]
static member inline Yield<'msg, 'marker, 'itemType when 'itemType :> IFabControl>
static member inline Yield<'msg, 'marker, 'itemType when 'itemType :> IFabMenuItem>
(
_: CollectionBuilder<'msg, 'marker, IFabControl>,
_: CollectionBuilder<'msg, 'marker, IFabMenuItem>,
x: WidgetBuilder<'msg, 'itemType>
) : Content<'msg> =
{ Widgets = MutStackArray1.One(x.Compile()) }

[<Extension>]
static member inline Yield<'msg, 'marker, 'itemType when 'itemType :> IFabControl>
static member inline Yield<'msg, 'marker, 'itemType when 'itemType :> IFabMenuItem>
(
_: CollectionBuilder<'msg, 'marker, IFabControl>,
_: CollectionBuilder<'msg, 'marker, IFabMenuItem>,
x: WidgetBuilder<'msg, Memo.Memoized<'itemType>>
) : Content<'msg> =
{ Widgets = MutStackArray1.One(x.Compile()) }
78 changes: 41 additions & 37 deletions src/Fabulous.Avalonia/Views/MenuItems/MenuItem.fs
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,13 @@ module MenuItemBuilders =

/// <summary>Creates a MenuItem widget.</summary>
/// <param name="header">The header of the menu item.</param>
static member inline MenuItem(header: string) =
static member MenuItem(header: string) =
WidgetBuilder<'msg, IFabMenuItem>(MenuItem.WidgetKey, HeaderedContentControl.HeaderString.WithValue(header))

/// <summary>Creates a MenuItem widget.</summary>
/// <param name="header">The header of the menu item.</param>
/// <param name="onClick">Raised when the menu item is clicked.</param>
static member inline MenuItem(header: string, onClick: 'msg) =
static member MenuItem(header: string, onClick: 'msg) =
WidgetBuilder<'msg, IFabMenuItem>(
MenuItem.WidgetKey,
HeaderedContentControl.HeaderString.WithValue(header),
Expand Down Expand Up @@ -83,43 +83,63 @@ module MenuItemBuilders =
)
)

[<AutoOpen>]
module MenuItemsBuilders =
type Fabulous.Avalonia.View with

/// <summary>Creates a MenuItems widget.</summary>
/// <param name="header">The header of the menu item.</param>
static member inline MenuItems(header: string) =
CollectionBuilder<'msg, IFabMenuItem, IFabMenuItem>(MenuItem.WidgetKey, ItemsControl.Items, HeaderedContentControl.HeaderString.WithValue(header))
static member MenuItems() =
CollectionBuilder<'msg, IFabMenuItem, IFabMenuItem>(MenuItem.WidgetKey, ItemsControl.Items)

/// <summary>Creates a MenuItems widget.</summary>
/// <param name="header">The header of the menu item.</param>
static member inline MenuItems'(header: string) =
CollectionBuilder<'msg, IFabMenuItem, IFabControl>(MenuItem.WidgetKey, ItemsControl.Items, HeaderedContentControl.HeaderString.WithValue(header))
static member MenuItems(header: WidgetBuilder<'msg, #IFabControl>) =
CollectionBuilder<'msg, IFabMenuItem, IFabMenuItem>(
MenuItem.WidgetKey,
ItemsControl.Items,
AttributesBundle(StackList.empty(), ValueSome [| HeaderedContentControl.HeaderWidget.WithValue(header.Compile()) |], ValueNone)
)

/// <summary>Creates a MenuItems widget.</summary>
/// <param name="header">The header of the menu item.</param>
/// <param name="onClick">Raised when the menu item is clicked.</param>
static member inline MenuItems(header: string, onClick: 'msg) =
static member MenuItems(header: WidgetBuilder<'msg, #IFabControl>, onClick: 'msg) =
CollectionBuilder<'msg, IFabMenuItem, IFabMenuItem>(
MenuItem.WidgetKey,
ItemsControl.Items,
HeaderedContentControl.HeaderString.WithValue(header),
MenuItem.Clicked.WithValue(fun _ -> box onClick)
AttributesBundle(
StackList.one(MenuItem.Clicked.WithValue(fun _ -> box onClick)),
ValueSome [| HeaderedContentControl.HeaderWidget.WithValue(header.Compile()) |],
ValueNone
)
)

/// <summary>Creates a MenuItems widget.</summary>
/// <param name="header">The header of the menu item.</param>
static member inline MenuItems(header: WidgetBuilder<'msg, #IFabMenuItem>) =
WidgetHelpers.buildWidgets<'msg, #IFabMenuItem>
MenuItem.WidgetKey
(StackList.empty())
[| HeaderedContentControl.HeaderWidget.WithValue(header.Compile()) |]
static member MenuItems(header: string) =
CollectionBuilder<'msg, IFabMenuItem, IFabMenuItem>(
MenuItem.WidgetKey,
ItemsControl.Items,
AttributesBundle(StackList.one(HeaderedContentControl.HeaderString.WithValue(header)), ValueNone, ValueNone)
)

/// <summary>Creates a MenuItems widget.</summary>
/// <param name="header">The header of the menu item.</param>
/// <param name="onClick">Raised when the menu item is clicked.</param>
static member inline MenuItems(header: WidgetBuilder<'msg, #IFabMenuItem>, onClick: 'msg) =
WidgetHelpers.buildWidgets<'msg, #IFabMenuItem>
MenuItem.WidgetKey
(StackList.one(MenuItem.Clicked.WithValue(fun _ -> box onClick)))
[| HeaderedContentControl.HeaderWidget.WithValue(header.Compile()) |]
static member MenuItems(header: string, onClick: 'msg) =
CollectionBuilder<'msg, IFabMenuItem, IFabMenuItem>(
MenuItem.WidgetKey,
ItemsControl.Items,
AttributesBundle(
StackList.two(MenuItem.Clicked.WithValue(fun _ -> box onClick), HeaderedContentControl.HeaderString.WithValue(header)),
ValueNone,
ValueNone
)
)

/// <summary>Creates a MenuItems widget.</summary>
/// <param name="onClick">Raised when the menu item is clicked.</param>
static member inline MenuItems(onClick: 'msg) =
CollectionBuilder<'msg, IFabMenuItem, IFabMenuItem>(MenuItem.WidgetKey, ItemsControl.Items, MenuItem.Clicked.WithValue(fun _ -> box onClick))

type MenuItemModifiers =
/// <summary>Sets the HotKey property.</summary>
Expand Down Expand Up @@ -208,19 +228,3 @@ type MenuItemCollectionBuilderExtensions =
x: WidgetBuilder<'msg, Memo.Memoized<'itemType>>
) : Content<'msg> =
{ Widgets = MutStackArray1.One(x.Compile()) }

[<Extension>]
static member inline Yield<'msg, 'marker, 'itemType when 'itemType :> IFabControl>
(
_: CollectionBuilder<'msg, 'marker, IFabDecorator>,
x: WidgetBuilder<'msg, 'itemType>
) : Content<'msg> =
{ Widgets = MutStackArray1.One(x.Compile()) }

[<Extension>]
static member inline Yield<'msg, 'marker, 'itemType when 'itemType :> IFabControl>
(
_: CollectionBuilder<'msg, 'marker, IFabControl>,
x: WidgetBuilder<'msg, Memo.Memoized<'itemType>>
) : Content<'msg> =
{ Widgets = MutStackArray1.One(x.Compile()) }
2 changes: 1 addition & 1 deletion templates/content/blank/.template.config/template.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
"type": "parameter",
"dataType": "string",
"replaces": "FabulousPkgVersion",
"defaultValue": "3.0.0-pre4"
"defaultValue": "3.0.0-pre5"
},
"FabulousAvaloniaPkgVersion": {
"type": "parameter",
Expand Down
2 changes: 1 addition & 1 deletion templates/content/multi/.template.config/template.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
"type": "parameter",
"dataType": "string",
"replaces": "FabulousPkgVersion",
"defaultValue": "3.0.0-pre4"
"defaultValue": "3.0.0-pre5"
},
"FabulousAvaloniaPkgVersion": {
"type": "parameter",
Expand Down

0 comments on commit 86472bb

Please sign in to comment.