/* * Copyright (c) 2022 LG Electronics Inc. * SPDX-License-Identifier: LicenseRef-LGE-Proprietary */ using System; using System.Globalization; using System.Windows.Data; namespace AuroraUIComponent.UIConverter { /// /// 지정한 값 (CommandParameter)과의 비교 /// public class EqualConverter : IValueConverter, IMultiValueConverter { public object TrueValue { get; set; } = true; public object FalseValue { get; set; } = false; public enum ConverterType { OBJECT, STRING, INT, DOUBLE, FLOAT} public object CompareValue { get; set; } public ConverterType CompareValueType { get; set; } = ConverterType.OBJECT; public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (CompareValue == null) { return value == null; } switch (CompareValueType) { case ConverterType.OBJECT: return CompareValue.Equals(value) ? TrueValue : FalseValue; case ConverterType.STRING: return CompareValue.ToString().Equals(value.ToString()) ? TrueValue : FalseValue; case ConverterType.INT: return System.Convert.ToInt32(CompareValue).Equals(System.Convert.ToInt32(value)) ? TrueValue : FalseValue; case ConverterType.DOUBLE: return System.Convert.ToDouble(CompareValue).Equals(System.Convert.ToDouble(value)) ? TrueValue : FalseValue; case ConverterType.FLOAT: return System.Convert.ToSingle(CompareValue).Equals(System.Convert.ToSingle(value)) ? TrueValue : FalseValue; default: return CompareValue.Equals(value) ? TrueValue : FalseValue; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values == null || values.Length < 2) { throw new NotImplementedException(); } if (values[0] == null || values[1] == null) { return FalseValue; } CompareValue = values[1]; switch (CompareValueType) { case ConverterType.OBJECT: return CompareValue.Equals(values[0]) ? TrueValue : FalseValue; case ConverterType.STRING: return CompareValue.ToString().Equals(values[0].ToString()) ? TrueValue : FalseValue; case ConverterType.INT: return System.Convert.ToInt32(CompareValue).Equals(System.Convert.ToInt32(values[0])) ? TrueValue : FalseValue; case ConverterType.DOUBLE: return System.Convert.ToDouble(CompareValue).Equals(System.Convert.ToDouble(values[0])) ? TrueValue : FalseValue; case ConverterType.FLOAT: return System.Convert.ToSingle(CompareValue).Equals(System.Convert.ToSingle(values[0])) ? TrueValue : FalseValue; default: return CompareValue.Equals(values[0]) ? TrueValue : FalseValue; } } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } /// /// MultiValueBinding으로 들어온 2개 value 간의 동일성 체크 /// public class EqualConverter2 : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values == null || values.Length < 2) { throw new NotImplementedException(); } if (values[0] is string strValue0 && values[1] is string strValue1 && strValue0 == strValue1) { return true; } if (values[0] is double doubleValue0 && values[1] is double doubleValue1 && doubleValue0 == doubleValue1) { return true; } if (values[0] is float floatValue0 && values[1] is float floatValue1 && floatValue0 == floatValue1) { return true; } if (values[0] is int intValue0 && values[1] is int intValue1 && intValue0 == intValue1) { return true; } if (values[0] is bool boolValue0 && values[1] is bool boolValue1 && boolValue0 == boolValue1) { return true; } return false; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } public class LTConverter : IValueConverter, IMultiValueConverter { public object TrueValue { get; set; } = true; public object FalseValue { get; set; } = false; public enum ConverterType { INT, DOUBLE, FLOAT } public object CompareValue { get; set; } public ConverterType CompareValueType { get; set; } = ConverterType.DOUBLE; public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return Convert(value); } private object Convert(object value) { if (CompareValue == null) { throw new NotImplementedException(); } switch (CompareValueType) { case ConverterType.INT: return System.Convert.ToInt32(CompareValue) < System.Convert.ToInt32(value) ? TrueValue : FalseValue; case ConverterType.DOUBLE: return System.Convert.ToDouble(CompareValue) < System.Convert.ToDouble(value) ? TrueValue : FalseValue; case ConverterType.FLOAT: return System.Convert.ToSingle(CompareValue) < System.Convert.ToSingle(value) ? TrueValue : FalseValue; default: return CompareValue.Equals(value) ? TrueValue : FalseValue; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values == null || values.Length < 2) { throw new NotImplementedException(); } CompareValue = values[1]; return Convert(values[0]); } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } public class GTConverter : IValueConverter, IMultiValueConverter { public object TrueValue { get; set; } = true; public object FalseValue { get; set; } = false; public enum ConverterType { INT, DOUBLE, FLOAT } public object CompareValue { get; set; } public ConverterType CompareValueType { get; set; } = ConverterType.DOUBLE; public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return Convert(value); } private object Convert(object value) { if (CompareValue == null) { throw new NotImplementedException(); } switch (CompareValueType) { case ConverterType.INT: return System.Convert.ToInt32(CompareValue) > System.Convert.ToInt32(value) ? TrueValue : FalseValue; case ConverterType.DOUBLE: return System.Convert.ToDouble(CompareValue) > System.Convert.ToDouble(value) ? TrueValue : FalseValue; case ConverterType.FLOAT: return System.Convert.ToSingle(CompareValue) > System.Convert.ToSingle(value) ? TrueValue : FalseValue; default: return CompareValue.Equals(value) ? TrueValue : FalseValue; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values == null || values.Length < 2) { throw new NotImplementedException(); } CompareValue = values[1]; return Convert(values[0]); } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } /// /// 범위 내에 들어있는지 체크 (CompareValueLow <= value && value <= CompareValueHigh) -- EQ 포함 여부는 CompareValueLow / CompareValueHigh로 세팅 (default 포함) /// public class InRangeConverter : IValueConverter, IMultiValueConverter { public object TrueValue { get; set; } = true; public object FalseValue { get; set; } = false; public enum ConverterType { INT, DOUBLE, FLOAT } public object CompareValueLow { get; set; } public object CompareValueHigh { get; set; } public bool IncludeLowEq { get; set; } = true; public bool IncludeHighEq { get; set; } = true; public ConverterType CompareValueType { get; set; } = ConverterType.DOUBLE; public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return Convert(value); } private object Convert(object value) { if (CompareValueLow == null && CompareValueHigh == null) { throw new NotImplementedException(); } bool result = true; switch (CompareValueType) { case ConverterType.INT: { bool ltCheck = CompareValueLow == null || (IncludeLowEq ? (System.Convert.ToInt32(CompareValueLow) <= System.Convert.ToInt32(value)) : (System.Convert.ToInt32(CompareValueLow) < System.Convert.ToInt32(value))); bool gtCheck = CompareValueHigh == null || (IncludeHighEq ? (System.Convert.ToInt32(CompareValueHigh) >= System.Convert.ToInt32(value)) : (System.Convert.ToInt32(CompareValueHigh) > System.Convert.ToInt32(value))); result = ltCheck && gtCheck; break; } case ConverterType.DOUBLE: { bool ltCheck = CompareValueLow == null || (IncludeLowEq ? (System.Convert.ToDouble(CompareValueLow) <= System.Convert.ToDouble(value)) : (System.Convert.ToDouble(CompareValueLow) < System.Convert.ToDouble(value))); bool gtCheck = CompareValueHigh == null || (IncludeHighEq ? (System.Convert.ToDouble(CompareValueHigh) >= System.Convert.ToDouble(value)) : (System.Convert.ToDouble(CompareValueHigh) > System.Convert.ToDouble(value))); result = ltCheck && gtCheck; break; } case ConverterType.FLOAT: { bool ltCheck = CompareValueLow == null || (IncludeLowEq ? (System.Convert.ToSingle(CompareValueLow) <= System.Convert.ToSingle(value)) : (System.Convert.ToSingle(CompareValueLow) < System.Convert.ToSingle(value))); bool gtCheck = CompareValueHigh == null || (IncludeHighEq ? (System.Convert.ToSingle(CompareValueHigh) >= System.Convert.ToSingle(value)) : (System.Convert.ToSingle(CompareValueHigh) > System.Convert.ToSingle(value))); result = ltCheck && gtCheck; break; } default: throw new NotImplementedException(); } return result ? TrueValue : FalseValue; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values == null || values.Length < 3) { throw new NotImplementedException(); } CompareValueLow = values[1]; CompareValueHigh = values[2]; return Convert(values[0]); } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } public class MinConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values != null && values.Length > 0) { if (targetType == typeof(double)) { double result = (double)values[0]; for (int i = 1; i < values.Length; i++) { if ((double)values[i] < result) result = (double)values[i]; } return result; } if (targetType == typeof(int)) { int result = (int)values[0]; for (int i = 1; i < values.Length; i++) { if ((int)values[i] < result) result = (int)values[i]; } return result; } } return null; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } public class NullCheckConverter : EqualConverter { public new object CompareValue { get; set; } = null; } }