You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.0 KiB
37 lines
1.0 KiB
using System; |
|
using System.Globalization; |
|
using Avalonia.Data.Converters; |
|
using StabilityMatrix.Core.Extensions; |
|
|
|
namespace StabilityMatrix.Avalonia.Converters; |
|
|
|
public class FileUriConverter : IValueConverter |
|
{ |
|
/// <inheritdoc /> |
|
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) |
|
{ |
|
if (targetType != typeof(Uri)) |
|
{ |
|
return null; |
|
} |
|
|
|
return value switch |
|
{ |
|
string str when str.StartsWith("avares://") => new Uri(str), |
|
string str => new Uri("file://" + str), |
|
IFormattable formattable => new Uri("file://" + formattable.ToString(null, culture)), |
|
_ => null |
|
}; |
|
} |
|
|
|
/// <inheritdoc /> |
|
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) |
|
{ |
|
if (targetType == typeof(string) && value is Uri uri) |
|
{ |
|
return uri.ToString().StripStart("file://"); |
|
} |
|
|
|
return null; |
|
} |
|
}
|
|
|