using System;
using System.Collections;
using System.Windows;
using HandyControl.Controls;
using HandyControl.Data;
using TeamAAS.Dialogs.Dialogs;
namespace TeamAAS
{
///
/// Unified notification helper for toasts, dialogs, and small input flows.
///
public static class DialogHelper
{
public static void Success(string message)
{
AppLogger.Info(message, nameof(DialogHelper));
ShowGrowl(() => Growl.Success(message));
}
public static void Success(string message, int waitTime)
{
AppLogger.Info(message, nameof(DialogHelper));
ShowGrowl(() => Growl.Success(new GrowlInfo { Message = message, WaitTime = waitTime }));
}
public static void Info(string message)
{
AppLogger.Info(message, nameof(DialogHelper));
ShowGrowl(() => Growl.Info(message));
}
public static void Info(string message, int waitTime)
{
AppLogger.Info(message, nameof(DialogHelper));
ShowGrowl(() => Growl.Info(new GrowlInfo { Message = message, WaitTime = waitTime }));
}
public static void Warning(string message)
{
AppLogger.Warning(message, nameof(DialogHelper));
ShowGrowl(() => Growl.Warning(message));
}
public static void Warning(string message, int waitTime)
{
AppLogger.Warning(message, nameof(DialogHelper));
ShowGrowl(() => Growl.Warning(new GrowlInfo { Message = message, WaitTime = waitTime }));
}
public static void Error(string message)
{
AppLogger.Error(message, nameof(DialogHelper));
ShowGrowl(() => Growl.Error(message));
}
public static void Error(string message, int waitTime)
{
AppLogger.Error(message, nameof(DialogHelper));
ShowGrowl(() => Growl.Error(new GrowlInfo { Message = message, WaitTime = waitTime }));
}
public static void Error(string prefix, Exception ex)
{
var msg = ex != null ? $"{prefix}: {ex.Message}" : prefix;
AppLogger.Error(prefix, ex, nameof(DialogHelper));
ShowGrowl(() => Growl.Error(msg));
}
public static void Fatal(string message)
{
AppLogger.Error(message, nameof(DialogHelper));
ShowGrowl(() => Growl.Fatal(message));
}
public static void Show(string message, string title = "提示")
{
AppLogger.Info($"{title}: {message}", nameof(DialogHelper));
ShowDialog(dialog => dialog.SetupInfo(message, title));
}
public static void ShowWarning(string message, string title = "警告")
{
AppLogger.Warning($"{title}: {message}", nameof(DialogHelper));
ShowDialog(dialog => dialog.SetupWarning(message, title));
}
public static void ShowError(string message, string title = "错误")
{
AppLogger.Error($"{title}: {message}", nameof(DialogHelper));
ShowDialog(dialog => dialog.SetupError(message, title));
}
public static void ShowError(string prefix, Exception ex, string title = "错误")
{
var msg = ex != null ? $"{prefix}: {ex.Message}" : prefix;
AppLogger.Error(prefix, ex, nameof(DialogHelper));
ShowDialog(dialog => dialog.SetupError(msg, title, ex?.ToString()));
}
public static bool Confirm(string message, string title = "确认")
{
AppLogger.Info($"{title}: {message}", nameof(DialogHelper));
return ShowDialog(dialog => dialog.SetupConfirm(message, title));
}
public static bool ConfirmYesNo(string message, string title = "确认")
{
AppLogger.Info($"{title}: {message}", nameof(DialogHelper));
return ShowDialog(dialog => dialog.SetupAskYesNo(message, title));
}
/// 是/否/取消三键确认。返回 true=是, false=否, null=取消。
public static bool? ConfirmYesNoCancel(string message, string title = "确认")
{
AppLogger.Info($"{title}: {message}", nameof(DialogHelper));
bool? result = null;
void ShowCore()
{
var dialog = new MessageDialog();
SetOwner(dialog);
dialog.SetupAskYesNoCancel(message, title);
dialog.ShowDialog();
result = dialog.YesNoCancelResult;
}
InvokeOnUi(ShowCore);
return result;
}
public static string Input(string label, string title = "输入", string defaultText = "", string placeholder = "请输入...")
{
string result = null;
void ShowCore()
{
var dialog = new InputDialog();
SetOwner(dialog);
dialog.Setup(label, title, defaultText, placeholder);
dialog.ShowDialog();
if (dialog.Result)
result = dialog.InputText;
}
InvokeOnUi(ShowCore);
return result;
}
public static object Select(string label, IEnumerable items, string title = "选择", object defaultItem = null)
{
object result = null;
void ShowCore()
{
var dialog = new SelectDialog();
SetOwner(dialog);
dialog.Setup(label, items, title, defaultItem);
dialog.ShowDialog();
if (dialog.Result)
result = dialog.SelectedItem;
}
InvokeOnUi(ShowCore);
return result;
}
public static bool EditProperties(object obj, string title = null)
{
bool result = false;
void ShowCore()
{
var dialog = new PropertyGridDialog();
SetOwner(dialog);
dialog.Setup(obj, title);
dialog.ShowDialog();
result = dialog.Result;
}
InvokeOnUi(ShowCore);
return result;
}
public static bool EditProperties(object obj, string title, Action