151 lines
6.6 KiB
C#
151 lines
6.6 KiB
C#
using Microsoft.Win32;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Windows;
|
|
|
|
namespace Elwig.Services {
|
|
public static class InteractionService {
|
|
|
|
public static Func<string, string, string, string?>? Override;
|
|
public static Action<string, string>? NextInformation;
|
|
public static Action<string, string>? NextWarning;
|
|
public static Action<string, string>? NextError;
|
|
public static Func<string, string, bool>? NextContinue;
|
|
public static Func<string, string, bool>? NextConfirmation;
|
|
public static Func<string, string, bool>? NextQuestion;
|
|
public static Func<string, string, string?>? NextSave;
|
|
|
|
public static readonly Dictionary<string, string> ExtensionFilters = new() {
|
|
["pdf"] = "PDF-Datei (*.pdf)|*.pdf",
|
|
["ods"] = "OpenDocument Format Spreadsheet (*.ods)|*.ods",
|
|
["vcf"] = "vCard-Datei (*.vcf)|*.vcf",
|
|
["xml"] = "EBICS-Datei (*.xml)|*.xml",
|
|
["csv"] = "CSV-Datei (*.csv)|*.csv",
|
|
["sql.zip"] = "Komprimierte SQL-Datei (*.sql.zip)|*.sql.zip",
|
|
["elwig.zip"] = "Elwig-Export-Datei (*.elwig.zip)|*.elwig.zip",
|
|
};
|
|
|
|
public static void ShowInformation(string title, string text) {
|
|
if (NextInformation != null) {
|
|
NextInformation(title, text);
|
|
NextInformation = null;
|
|
} else if (Override != null) {
|
|
Override("information", title, text);
|
|
} else {
|
|
MessageBox.Show(text, title, MessageBoxButton.OK, MessageBoxImage.Information);
|
|
}
|
|
}
|
|
|
|
public static bool AskContinue(string title, string text) {
|
|
if (NextContinue != null) {
|
|
var r = NextContinue(title, text);
|
|
NextContinue = null;
|
|
return r;
|
|
} else if (Override != null) {
|
|
return Override("continue", title, text) != null;
|
|
} else {
|
|
return MessageBox.Show(text, title, MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel) == MessageBoxResult.OK;
|
|
}
|
|
}
|
|
|
|
public static bool AskConfirmation(string title, string text) {
|
|
if (NextConfirmation != null) {
|
|
var r = NextConfirmation(title, text);
|
|
NextConfirmation = null;
|
|
return r;
|
|
} else if (Override != null) {
|
|
return Override("confirm", title, text) != null;
|
|
} else {
|
|
return MessageBox.Show(text, title, MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No) == MessageBoxResult.Yes;
|
|
}
|
|
}
|
|
|
|
public static bool AskQuestion(string title, string text, bool defaultResult) {
|
|
if (NextQuestion != null) {
|
|
var r = NextQuestion(title, text);
|
|
NextQuestion = null;
|
|
return r;
|
|
} else if (Override != null) {
|
|
return Override("question", title, text) != null;
|
|
} else {
|
|
return MessageBox.Show(text, title, MessageBoxButton.YesNo, MessageBoxImage.Question, defaultResult ? MessageBoxResult.Yes : MessageBoxResult.No) == MessageBoxResult.Yes;
|
|
}
|
|
}
|
|
|
|
public static void ShowWarning(string title, string text) {
|
|
if (NextWarning != null) {
|
|
NextWarning(title, text);
|
|
NextWarning = null;
|
|
} else if (Override != null) {
|
|
Override("warning", title, text);
|
|
} else {
|
|
MessageBox.Show(text, title, MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
}
|
|
}
|
|
|
|
public static void ShowError(string title, string text) {
|
|
if (NextError != null) {
|
|
NextError(title, text);
|
|
NextError = null;
|
|
} else if (Override != null) {
|
|
Override("error", title, text);
|
|
} else {
|
|
MessageBox.Show(text, title, MessageBoxButton.OK, MessageBoxImage.Error);
|
|
}
|
|
}
|
|
|
|
public static void ShowException(Exception exc, bool showExcType = false, bool isError = true) {
|
|
ShowException("Fehler", exc, showExcType, isError);
|
|
}
|
|
|
|
public static void ShowException(string title, Exception exc, bool showExcType = false, bool isError = true) {
|
|
ShowException(title, null, exc, showExcType, isError);
|
|
}
|
|
|
|
public static void ShowException(string title, string? text, Exception exc, bool showExcType = false, bool isError = true) {
|
|
text = text == null ? "" : text + (text.EndsWith('.') || text.EndsWith('!') || text.EndsWith('?') ? "" : ":") + "\n\n";
|
|
text += exc.Message + (showExcType ? $" ({exc.GetType().Name})" : "");
|
|
if (exc.InnerException != null) text += "\n\n" + exc.InnerException.Message;
|
|
if (isError) {
|
|
ShowError(title, text);
|
|
} else {
|
|
ShowWarning(title, text);
|
|
}
|
|
}
|
|
|
|
public static void ShowDbException(string title, Exception exc) {
|
|
ShowException(title, "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!", exc);
|
|
}
|
|
|
|
public static bool AskException(string title, string? text, Exception exc) {
|
|
text = text == null ? "" : text + (text.EndsWith('.') || text.EndsWith('!') || text.EndsWith('?') ? "" : ":") + "\n\n";
|
|
text += exc.Message;
|
|
if (exc.InnerException != null) text += "\n\n" + exc.InnerException.Message;
|
|
if (Override != null) {
|
|
return Override("error", title, text) != null;
|
|
} else {
|
|
return MessageBox.Show(text, title, MessageBoxButton.YesNo, MessageBoxImage.Error, MessageBoxResult.No) == MessageBoxResult.Yes;
|
|
}
|
|
}
|
|
|
|
public static string? SaveFile(string title, string defaultFileName, string extension) {
|
|
if (NextSave != null) {
|
|
var r = NextSave(title, $"{defaultFileName}.{extension}");
|
|
NextSave = null;
|
|
return r;
|
|
} else if (Override != null) {
|
|
return Override("save", title, $"{defaultFileName}.{extension}");
|
|
} else {
|
|
var d = new SaveFileDialog() {
|
|
FileName = $"{defaultFileName}.{extension}",
|
|
DefaultExt = extension,
|
|
Filter = ExtensionFilters.GetValueOrDefault(extension, ""),
|
|
Title = $"{title} speichern unter - Elwig",
|
|
AddExtension = !extension.Contains('.'),
|
|
};
|
|
return d.ShowDialog() == true ? d.FileName : null;
|
|
}
|
|
}
|
|
}
|
|
}
|