aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.WinForms/WidgetManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ShiftOS.WinForms/WidgetManager.cs')
-rw-r--r--ShiftOS.WinForms/WidgetManager.cs50
1 files changed, 50 insertions, 0 deletions
diff --git a/ShiftOS.WinForms/WidgetManager.cs b/ShiftOS.WinForms/WidgetManager.cs
new file mode 100644
index 0000000..125c804
--- /dev/null
+++ b/ShiftOS.WinForms/WidgetManager.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using ShiftOS.Engine;
+
+namespace ShiftOS.WinForms
+{
+ public static class WidgetManager
+ {
+ public static Dictionary<DesktopWidgetAttribute, Type> GetAllWidgetTypes()
+ {
+ Dictionary<DesktopWidgetAttribute, Type> types = new Dictionary<WinForms.DesktopWidgetAttribute, Type>();
+ foreach(var exe in Directory.GetFiles(Environment.CurrentDirectory))
+ {
+ if(exe.EndsWith(".exe") || exe.EndsWith(".dll"))
+ {
+ try
+ {
+ var asm = Assembly.LoadFile(exe);
+ foreach(var type in asm.GetTypes())
+ {
+ if (type.GetInterfaces().Contains(typeof(IDesktopWidget)))
+ {
+ if (Shiftorium.UpgradeAttributesUnlocked(type))
+ {
+ foreach (var attrib in type.GetCustomAttributes(false))
+ {
+ if (attrib is DesktopWidgetAttribute)
+ {
+ var dw = attrib as DesktopWidgetAttribute;
+ types.Add(dw, type);
+ }
+ }
+ }
+ }
+ }
+ }
+ catch { }
+ }
+ }
+ return types;
+ }
+
+
+ }
+}