button builder

This commit is contained in:
Lightczx
2024-04-07 14:49:36 +08:00
parent 6c9a98c2c9
commit 0ede5b158f
6 changed files with 76 additions and 6 deletions

View File

@@ -0,0 +1,10 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Control.Builder.ButtonBase;
internal sealed class ButtonBaseBuilder<TButton> : IButtonBaseBuilder<TButton>
where TButton : Microsoft.UI.Xaml.Controls.Primitives.ButtonBase, new()
{
public TButton Button { get; } = new();
}

View File

@@ -0,0 +1,28 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Snap.Hutao.Core.Abstraction;
using Snap.Hutao.Core.Abstraction.Extension;
namespace Snap.Hutao.Control.Builder.ButtonBase;
internal static class ButtonBaseBuilderExtension
{
public static TBuilder SetContent<TBuilder, TButton>(this TBuilder builder, object? content)
where TBuilder : IButtonBaseBuilder<TButton>
where TButton : Microsoft.UI.Xaml.Controls.Primitives.ButtonBase
{
builder.Configure(builder => builder.Button.Content = content);
return builder;
}
public static TBuilder SetCommand<TBuilder, TButton>(this TBuilder builder, ICommand command)
where TBuilder : IButtonBaseBuilder<TButton>
where TButton : Microsoft.UI.Xaml.Controls.Primitives.ButtonBase
{
builder.Configure(builder => builder.Button.Command = command);
return builder;
}
}

View File

@@ -0,0 +1,12 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Core.Abstraction;
namespace Snap.Hutao.Control.Builder.ButtonBase;
internal interface IButtonBaseBuilder<TButton> : IBuilder
where TButton : Microsoft.UI.Xaml.Controls.Primitives.ButtonBase
{
TButton Button { get; }
}

View File

@@ -2,6 +2,7 @@
// Licensed under the MIT license.
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Microsoft.UI.Xaml.Media.Animation;
using Snap.Hutao.Core.Abstraction;
using Snap.Hutao.Core.Abstraction.Extension;
@@ -20,5 +21,7 @@ internal sealed class InfoBarOptions
public object? Content { get; set; }
public ButtonBase? ActionButton { get; set; }
public int MilliSecondsDelay { get; set; }
}

View File

@@ -2,39 +2,55 @@
// Licensed under the MIT license.
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Snap.Hutao.Control.Builder.ButtonBase;
using Snap.Hutao.Core.Abstraction.Extension;
namespace Snap.Hutao.Service.Notification;
internal static class InfoBarOptionsBuilderExtension
{
public static IInfoBarOptionsBuilder SetSeverity(this IInfoBarOptionsBuilder builder, InfoBarSeverity severity)
public static TBuilder SetSeverity<TBuilder>(this TBuilder builder, InfoBarSeverity severity)
where TBuilder : IInfoBarOptionsBuilder
{
builder.Configure(builder => builder.Options.Severity = severity);
return builder;
}
public static IInfoBarOptionsBuilder SetTitle(this IInfoBarOptionsBuilder builder, string? title)
public static TBuilder SetTitle<TBuilder>(this TBuilder builder, string? title)
where TBuilder : IInfoBarOptionsBuilder
{
builder.Configure(builder => builder.Options.Title = title);
return builder;
}
public static IInfoBarOptionsBuilder SetMessage(this IInfoBarOptionsBuilder builder, string? message)
public static IInfoBarOptionsBuilder SetMessage<TBuilder>(this TBuilder builder, string? message)
where TBuilder : IInfoBarOptionsBuilder
{
builder.Configure(builder => builder.Options.Message = message);
return builder;
}
public static IInfoBarOptionsBuilder SetContent(this IInfoBarOptionsBuilder builder, object? content)
public static IInfoBarOptionsBuilder SetContent<TBuilder>(this TBuilder builder, object? content)
where TBuilder : IInfoBarOptionsBuilder
{
builder.Configure(builder => builder.Options.Content = content);
return builder;
}
public static IInfoBarOptionsBuilder SetDelay(this IInfoBarOptionsBuilder builder, int milliSeconds)
public static IInfoBarOptionsBuilder SetActionButton<TBuilder, TButton>(this TBuilder builder, Action<ButtonBaseBuilder<TButton>> configureButton)
where TBuilder : IInfoBarOptionsBuilder
where TButton : ButtonBase, new()
{
ButtonBaseBuilder<TButton> buttonBaseBuilder = new ButtonBaseBuilder<TButton>().Configure(configureButton);
builder.Configure(builder => builder.Options.ActionButton = buttonBaseBuilder.Button);
return builder;
}
public static IInfoBarOptionsBuilder SetDelay<TBuilder>(this TBuilder builder, int milliSeconds)
where TBuilder : IInfoBarOptionsBuilder
{
builder.Configure(builder => builder.Options.MilliSecondsDelay = milliSeconds);
return builder;
}
}
}

View File

@@ -58,6 +58,7 @@ internal sealed class InfoBarService : IInfoBarService
Message = builder.Options.Message,
Content = builder.Options.Content,
IsOpen = true,
ActionButton = builder.Options.ActionButton,
Transitions = [new AddDeleteThemeTransition()],
};