2026-01-26 14:51:28 +09:00

167 lines
6.6 KiB
C#

/*
* Copyright (c) 2022 LG Electronics Inc.
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
*/
using MahApps.Metro.IconPacks;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
namespace AuroraUIComponent.Util
{
public class IconUtil
{
private static T GetMatchingEnum<T>(string strKind)
{
if (string.IsNullOrEmpty(strKind)) {
return default(T);
}
// 완전 일치
if (Enum.GetValues(typeof(T)).Cast<T>().Any(x => x.ToString().ToLower() == strKind.ToLower())) {
return Enum.GetValues(typeof(T)).Cast<T>().FirstOrDefault(x => x.ToString().ToLower() == strKind.ToLower());
}
// 포함된 string
if (Enum.GetValues(typeof(T)).Cast<T>().Any(x => x.ToString().ToLower().Contains(strKind.ToLower()))) {
return Enum.GetValues(typeof(T)).Cast<T>().FirstOrDefault(x => x.ToString().ToLower().Contains(strKind.ToLower()));
}
return default(T);
}
private static List<T> GetMatchingEnumList<T>(string strKind)
{
if (string.IsNullOrEmpty(strKind)) {
return Enum.GetValues(typeof(T)).Cast<T>().ToList();
}
return Enum.GetValues(typeof(T)).Cast<T>().Where(x => x.ToString().ToLower().Contains(strKind.ToLower())).ToList();
}
public static DrawingImage GetIconFromMetro(PackIconUniconsKind kind, SolidColorBrush brush)
{
var packIcon = new MahApps.Metro.IconPacks.PackIconUnicons() { Kind = kind };
GeometryDrawing gd = new GeometryDrawing();
gd.Geometry = Geometry.Parse(packIcon.Data);
gd.Brush = brush;
DrawingImage image = new DrawingImage(gd);
image.Freeze();
return image;
}
public static (string, DrawingImage) GetIconFromMetroUnicons(string strKind, SolidColorBrush brush) // package reference dependency를 끊기 위해 string으로 제공
{
PackIconUniconsKind kind = GetMatchingEnum<PackIconUniconsKind>(strKind);
if (kind != default(PackIconUniconsKind)) {
return (kind.ToString(), GetIconFromMetro(kind, brush));
} else {
return (null, null);
}
}
public static List<string> GetMetroUniconsList(string strKind) // package reference dependency를 끊기 위해 string으로 제공
{
var newList = new List<string>();
GetMatchingEnumList<PackIconUniconsKind>(strKind).ForEach(x => newList.Add(x.ToString()));
return newList;
}
public static DrawingImage GetIconFromMetro(PackIconMaterialKind kind, SolidColorBrush brush)
{
var packIcon = new MahApps.Metro.IconPacks.PackIconMaterial() { Kind = kind };
GeometryDrawing gd = new GeometryDrawing();
gd.Geometry = Geometry.Parse(packIcon.Data);
gd.Brush = brush;
DrawingImage image = new DrawingImage(gd);
image.Freeze();
return image;
}
public static (string, DrawingImage) GetIconFromMetroMaterial(string strKind, SolidColorBrush brush) // package reference dependency를 끊기 위해 string으로 제공
{
PackIconMaterialKind kind = GetMatchingEnum<PackIconMaterialKind>(strKind);
if (kind != default(PackIconMaterialKind)) {
return (kind.ToString(), GetIconFromMetro(kind, brush));
} else {
return (null, null);
}
}
public static List<string> GetMetroMaterialList(string strKind) // package reference dependency를 끊기 위해 string으로 제공
{
var newList = new List<string>();
GetMatchingEnumList<PackIconMaterialKind>(strKind).ForEach(x => newList.Add(x.ToString()));
return newList;
}
public static DrawingImage GetIconFromMetro(PackIconRemixIconKind kind, SolidColorBrush brush)
{
var packIcon = new MahApps.Metro.IconPacks.PackIconRemixIcon() { Kind = kind };
GeometryDrawing gd = new GeometryDrawing();
gd.Geometry = Geometry.Parse(packIcon.Data);
gd.Brush = brush;
DrawingImage image = new DrawingImage(gd);
image.Freeze();
return image;
}
public static (string, DrawingImage) GetIconFromMetroRemix(string strKind, SolidColorBrush brush) // package reference dependency를 끊기 위해 string으로 제공
{
PackIconRemixIconKind kind = GetMatchingEnum<PackIconRemixIconKind>(strKind);
if (kind != default(PackIconRemixIconKind)) {
return (kind.ToString(), GetIconFromMetro(kind, brush));
} else {
return (null, null);
}
}
public static List<string> GetMetroRemixIconList(string strKind) // package reference dependency를 끊기 위해 string으로 제공
{
var newList = new List<string>();
GetMatchingEnumList<PackIconRemixIconKind>(strKind).ForEach(x => newList.Add(x.ToString()));
return newList;
}
public static DrawingImage GetIconFromMetro(PackIconFontAwesomeKind kind, SolidColorBrush brush)
{
var packIcon = new MahApps.Metro.IconPacks.PackIconFontAwesome() { Kind = kind };
GeometryDrawing gd = new GeometryDrawing();
gd.Geometry = Geometry.Parse(packIcon.Data);
gd.Brush = brush;
DrawingImage image = new DrawingImage(gd);
image.Freeze();
return image;
}
public static (string, DrawingImage) GetIconFromMetroFontAwesome(string strKind, SolidColorBrush brush) // package reference dependency를 끊기 위해 string으로 제공
{
PackIconFontAwesomeKind kind = GetMatchingEnum<PackIconFontAwesomeKind>(strKind);
if (kind != default(PackIconFontAwesomeKind)) {
return (kind.ToString(), GetIconFromMetro(kind, brush));
} else {
return (null, null);
}
}
public static List<string> GetMetroFontAwesomeList(string strKind) // package reference dependency를 끊기 위해 string으로 제공
{
var newList = new List<string>();
GetMatchingEnumList<PackIconFontAwesomeKind>(strKind).ForEach(x => newList.Add(x.ToString()));
return newList;
}
}
}