using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using ShiftOS.Engine; using ShiftOS.Objects.ShiftFS; namespace ShiftOS.WinForms { public static class WidgetManager { public static Dictionary GetAllWidgetTypes() { var ret = new Dictionary(); var types = Array.FindAll(ReflectMan.Types, t => t.GetInterfaces().Contains(typeof(IDesktopWidget)) && Shiftorium.UpgradeAttributesUnlocked(t)); foreach (var type in types) foreach (var attrib in Array.FindAll(type.GetCustomAttributes(false), a => a is DesktopWidgetAttribute)) ret.Add(attrib as DesktopWidgetAttribute, type); return ret; } internal static void SaveDetails(Type type, WidgetDetails location) { var dict = new Dictionary(); var attrib = type.GetCustomAttributes(false).FirstOrDefault(x => x is DesktopWidgetAttribute) as DesktopWidgetAttribute; try { dict = JsonConvert.DeserializeObject>(Utils.ReadAllText(Paths.GetPath("widgets.dat"))); dict[attrib.ToString()] = location; } catch { dict.Add(attrib.ToString(), location); } finally { Utils.WriteAllText(Paths.GetPath("widgets.dat"), JsonConvert.SerializeObject(dict)); } } internal static WidgetDetails LoadDetails(Type type) { var dict = new Dictionary(); var attrib = type.GetCustomAttributes(false).FirstOrDefault(x => x is DesktopWidgetAttribute) as DesktopWidgetAttribute; try { dict = JsonConvert.DeserializeObject>(Utils.ReadAllText(Paths.GetPath("widgets.dat"))); return dict[attrib.ToString()]; } catch { var details = new WinForms.WidgetDetails { Location = new Point(-1, -1), IsVisible = false }; if (dict.ContainsKey(attrib.ToString())) dict[attrib.ToString()] = details; else dict.Add(attrib.ToString(), details); Utils.WriteAllText(Paths.GetPath("widgets.dat"), JsonConvert.SerializeObject(dict)); return details; } finally { } } } public class WidgetDetails { public WidgetDetails() { IsVisible = true; } public Point Location { get; set; } public bool IsVisible { get; set; } } }