From 39457f97247d5a4a4333ded5ac2bbc2465f7510e Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sat, 3 Feb 2024 20:07:39 +0800 Subject: [PATCH] feat: re-organize file, add IsCloseButtonVisible option. --- .../Controls/Dialog/DefaultDialogControl.cs | 23 +++++++++ .../Controls/Dialog/DefaultDialogWindow.cs | 23 +++++++++ src/Ursa/Controls/Dialog/DialogControl.cs | 48 +++++++++---------- src/Ursa/Controls/Dialog/DialogWindow.cs | 14 ++++-- .../Dialog/Options}/DialogButton.cs | 2 +- .../Dialog/{ => Options}/DialogMode.cs | 0 .../Dialog/{ => Options}/DialogOptions.cs | 4 +- .../Dialog/Options}/DialogResult.cs | 2 +- .../{ => Options}/OverlayDialogOptions.cs | 5 +- 9 files changed, 87 insertions(+), 34 deletions(-) rename src/Ursa/{Common => Controls/Dialog/Options}/DialogButton.cs (76%) rename src/Ursa/Controls/Dialog/{ => Options}/DialogMode.cs (100%) rename src/Ursa/Controls/Dialog/{ => Options}/DialogOptions.cs (87%) rename src/Ursa/{Common => Controls/Dialog/Options}/DialogResult.cs (73%) rename src/Ursa/Controls/Dialog/{ => Options}/OverlayDialogOptions.cs (88%) diff --git a/src/Ursa/Controls/Dialog/DefaultDialogControl.cs b/src/Ursa/Controls/Dialog/DefaultDialogControl.cs index 527e278..385dba1 100644 --- a/src/Ursa/Controls/Dialog/DefaultDialogControl.cs +++ b/src/Ursa/Controls/Dialog/DefaultDialogControl.cs @@ -68,6 +68,8 @@ public class DefaultDialogControl: DialogControl private void SetButtonVisibility() { + bool isCloseButtonVisible = DataContext is IDialogContext || Buttons != DialogButton.YesNo; + SetVisibility(_closeButton, isCloseButtonVisible); switch (Buttons) { case DialogButton.None: @@ -130,4 +132,25 @@ public class DefaultDialogControl: DialogControl } } } + + internal override void CloseDialog() + { + if (DataContext is IDialogContext context) + { + context.Close(); + } + else + { + DialogResult result = Buttons switch + { + DialogButton.None => DialogResult.None, + DialogButton.OK => DialogResult.OK, + DialogButton.OKCancel => DialogResult.Cancel, + DialogButton.YesNo => DialogResult.No, + DialogButton.YesNoCancel => DialogResult.Cancel, + _ => DialogResult.None + }; + OnDialogControlClosing(this, result); + } + } } \ No newline at end of file diff --git a/src/Ursa/Controls/Dialog/DefaultDialogWindow.cs b/src/Ursa/Controls/Dialog/DefaultDialogWindow.cs index 3a51c2d..123affc 100644 --- a/src/Ursa/Controls/Dialog/DefaultDialogWindow.cs +++ b/src/Ursa/Controls/Dialog/DefaultDialogWindow.cs @@ -83,6 +83,8 @@ public class DefaultDialogWindow: DialogWindow private void SetButtonVisibility() { + bool closeButtonVisible = DataContext is IDialogContext || Buttons != DialogButton.YesNo; + SetVisibility(_closeButton, closeButtonVisible); switch (Buttons) { case DialogButton.None: @@ -122,4 +124,25 @@ public class DefaultDialogWindow: DialogWindow { if (button is not null) button.IsVisible = visible; } + + protected internal override void OnCloseButtonClicked(object sender, RoutedEventArgs args) + { + if (DataContext is IDialogContext context) + { + context.Close(); + } + else + { + DialogResult result = Buttons switch + { + DialogButton.None => DialogResult.None, + DialogButton.OK => DialogResult.OK, + DialogButton.OKCancel => DialogResult.Cancel, + DialogButton.YesNo => DialogResult.No, + DialogButton.YesNoCancel => DialogResult.Cancel, + _ => DialogResult.None + }; + Close(result); + } + } } \ No newline at end of file diff --git a/src/Ursa/Controls/Dialog/DialogControl.cs b/src/Ursa/Controls/Dialog/DialogControl.cs index cb04b5b..386d58f 100644 --- a/src/Ursa/Controls/Dialog/DialogControl.cs +++ b/src/Ursa/Controls/Dialog/DialogControl.cs @@ -31,6 +31,7 @@ public class DialogControl: ContentControl internal double? HorizontalOffsetRatio { get; set; } internal double? VerticalOffsetRatio { get; set; } internal bool CanClickOnMaskToClose { get; set; } + internal bool IsCloseButtonVisible { get; set; } public event EventHandler? LayerChanged; public event EventHandler? DialogControlClosing; @@ -57,7 +58,7 @@ public class DialogControl: ContentControl protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { base.OnApplyTemplate(e); - EventHelper.UnregisterClickEvent(Close, _closeButton); + EventHelper.UnregisterClickEvent(OnCloseButtonClick, _closeButton); _titleArea?.RemoveHandler(PointerMovedEvent, OnTitlePointerMove); _titleArea?.RemoveHandler(PointerPressedEvent, OnTitlePointerPressed); @@ -65,12 +66,14 @@ public class DialogControl: ContentControl _closeButton = e.NameScope.Find