2026-06-05 13:44:39 +09:00

236 lines
8.9 KiB
C#

/*
* Copyright (c) 2022 LG Electronics Inc.
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
*/
using Aurora;
using Aurora.Api;
using Aurora.Api.Control;
using MahApps.Metro.Controls;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace AuroraUIComponent.Dialog
{
/// <summary>
/// Interaction logic for UCMessageDialogEx.xaml
/// </summary>
public partial class UCMessageDialogEx : MetroWindow
{
public UCMessageDialogEx()
{
InitializeComponent();
}
public string ButtonName1 { get; private set; }
public static readonly DependencyProperty DisplayButtonName1Property
= DependencyProperty.Register(
nameof(DisplayButtonName1),
typeof(string),
typeof(UCMessageDialogEx),
new FrameworkPropertyMetadata(
string.Empty,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public string DisplayButtonName1 {
get { return (string)GetValue(DisplayButtonName1Property); }
set { SetValue(DisplayButtonName1Property, value); }
}
public string ButtonName2 { get; private set; }
public static readonly DependencyProperty DisplayButtonName2Property
= DependencyProperty.Register(
nameof(DisplayButtonName2),
typeof(string),
typeof(UCMessageDialogEx),
new FrameworkPropertyMetadata(
string.Empty,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public string DisplayButtonName2 {
get { return (string)GetValue(DisplayButtonName2Property); }
set { SetValue(DisplayButtonName2Property, value); }
}
public string ButtonName3 { get; private set; }
public static readonly DependencyProperty DisplayButtonName3Property
= DependencyProperty.Register(
nameof(DisplayButtonName3),
typeof(string),
typeof(UCMessageDialogEx),
new FrameworkPropertyMetadata(
string.Empty,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public string DisplayButtonName3 {
get { return (string)GetValue(DisplayButtonName3Property); }
set { SetValue(DisplayButtonName3Property, value); }
}
public bool ApplyTranslateForButtonName = true;
public string TitleText { get; private set; }
public static readonly DependencyProperty DisplayTitleProperty
= DependencyProperty.Register(
nameof(DisplayTitle),
typeof(string),
typeof(UCMessageDialogEx),
new FrameworkPropertyMetadata(
string.Empty,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public string DisplayTitle {
get { return (string)GetValue(DisplayTitleProperty); }
set { SetValue(DisplayTitleProperty, value); }
}
public bool ApplyTranslateForTitle = true;
public string Message { get; private set; }
public static readonly DependencyProperty DisplayMessageProperty
= DependencyProperty.Register(
nameof(DisplayMessage),
typeof(string),
typeof(UCMessageDialogEx),
new FrameworkPropertyMetadata(
string.Empty,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public string DisplayMessage {
get { return (string)GetValue(DisplayMessageProperty); }
set { SetValue(DisplayMessageProperty, value); }
}
public bool ApplyTranslateForMessage = true;
public Visibility MessageVisiblility {
get => string.IsNullOrEmpty(Message)
? Visibility.Collapsed
: Visibility.Visible;
}
public Visibility ControlVisiblility { get; private set; }
private string mResult = null;
private void UpdateToken()
{
if (ApplyTranslateForTitle) {
DisplayTitle = Application.Current.FindStrToken(TitleText);
} else {
DisplayTitle = TitleText;
}
if (ApplyTranslateForButtonName) {
DisplayButtonName1 = Application.Current.FindStrToken(ButtonName1);
DisplayButtonName2 = Application.Current.FindStrToken(ButtonName2);
DisplayButtonName3 = Application.Current.FindStrToken(ButtonName3);
} else {
DisplayButtonName1 = ButtonName1;
DisplayButtonName2 = ButtonName2;
DisplayButtonName3 = ButtonName3;
}
if (ApplyTranslateForMessage) {
DisplayMessage = Application.Current.FindStrToken(Message);
} else {
DisplayMessage = Message;
}
//Binding으로 처리
mTxtTitle.Text = DisplayTitle;
mBtn1.Content = DisplayButtonName1;
mBtn2.Content = DisplayButtonName2;
mBtn3.Content = DisplayButtonName3;
mTxtMessage.Text = DisplayMessage;
}
protected UCMessageDialogEx(string title, string message = "", ContentControl control = null,
string buttonName1 = "", string buttonName2 = "", string buttonName3 = "",
bool translateTitle = true, bool translateButtonName = true, bool translateMessage = true, double messageFontSize = 14)
{
InitializeComponent();
TitleText = title;
ApplyTranslateForTitle = translateTitle;
ApplyTranslateForButtonName = translateButtonName;
ApplyTranslateForMessage = translateMessage;
ButtonName1 = buttonName1;
ButtonName2 = buttonName2;
ButtonName3 = buttonName3;
mResult = null;
if (control != null) {
mBorderControl.Child = control;
}
Message = message;
mBtn1.Visibility = !String.IsNullOrEmpty(buttonName1) ? Visibility.Visible : Visibility.Collapsed;
mBtn2.Visibility = !String.IsNullOrEmpty(buttonName2) ? Visibility.Visible : Visibility.Collapsed;
mBtn3.Visibility = !String.IsNullOrEmpty(buttonName3) ? Visibility.Visible : Visibility.Collapsed;
mBorderControl.Visibility = (control != null || !String.IsNullOrEmpty(Message)) ? Visibility.Visible : Visibility.Collapsed;
mTxtMessage.Visibility = !string.IsNullOrEmpty(message) ? Visibility.Visible : Visibility.Collapsed;
mTxtMessage.FontSize = messageFontSize;
UpdateToken();
Application.Current.AuroraEnv().EventObservable.AsObservable(AuroraSysEvent.SYS_LANGUAGE_CHANGED).Subscribe(_ => {
Application.Current.Dispatcher.Invoke(delegate {
UpdateToken();
});
});
}
private string Show(Window parent)
{
DialogUtil.ShowDlg(this, parent);
return mResult;
}
public static string Show(Window parent, string title, string message = "", ContentControl control = null,
string buttonName1 = "", string buttonName2 = "", string buttonName3 = "",
bool translateTitle = true, bool translateButtonName = true, bool translateMessage = true, double messageFontSize = 14)
{
return new UCMessageDialogEx(title, message, control, buttonName1, buttonName2, buttonName3,
translateTitle, translateButtonName, translateMessage, messageFontSize).Show(parent);
}
private void Click_Button1(object sender, RoutedEventArgs e)
{
// Default : OK
mResult = ButtonName1;
Close();
}
private void Click_Button2(object sender, RoutedEventArgs e)
{
// Default : Cancel
mResult = ButtonName2;
Close();
}
private void Click_Button3(object sender, RoutedEventArgs e)
{
// Default : Optional
mResult = ButtonName3;
Close();
}
}
}