diff --git a/ShiftOS.WinForms/WinformsDesktop.cs b/ShiftOS.WinForms/WinformsDesktop.cs
index 643c02a..0cfd667 100644
--- a/ShiftOS.WinForms/WinformsDesktop.cs
+++ b/ShiftOS.WinForms/WinformsDesktop.cs
@@ -70,6 +70,46 @@ namespace ShiftOS.WinForms
private int millisecondsUntilScreensaver = 300000;
+ public void LoadIcons()
+ {
+ //That shot me back to 0.0.x with that name. Whatever.
+ flnotifications.Controls.Clear(); //Clear the status tray
+
+ foreach(var itype in NotificationDaemon.GetAllStatusIcons())
+ {
+ //We have the types. No need for shiftorium calls or anything.
+ //First create the icon control...
+
+ var ic = new PictureBox();
+ //We can use the type name, in lowercase, for the icon tag.
+ ic.Tag = itype.Name.ToLower();
+ //Next get the icon data if any.
+
+ var iconattrib = itype.GetCustomAttributes(false).FirstOrDefault(x => x is DefaultIconAttribute) as DefaultIconAttribute;
+ if(iconattrib != null)
+ {
+ //We can use this attribute's ID in the skin engine to get an icon.
+ var img = GetIcon(iconattrib.ID);
+ //Make it transparent.
+ (img as Bitmap).MakeTransparent(LoadedSkin.SystemKey);
+ //Assign it to the control
+ ic.Image = img;
+ //Set the sizing mode
+ ic.SizeMode = PictureBoxSizeMode.StretchImage;
+ }
+ else
+ {
+ ic.BackColor = Color.White; //TODO: Make it skinnable.
+ }
+ ic.Size = new Size(20, 20); //TODO: make it skinnable
+ //add to the notification tray
+ flnotifications.Controls.Add(ic);
+ ic.Show();
+
+ //TODO: Settings pane on click.
+ }
+ }
+
public void PushNotification(string app, string title, string msg)
{
lbnotemsg.Text = msg;
@@ -134,6 +174,8 @@ namespace ShiftOS.WinForms
widget.OnUpgrade();
}
+ LoadIcons();
+
//Only if the DevX Legions story hasn't been experienced yet.
if (!Shiftorium.UpgradeInstalled("devx_legions"))
{
@@ -180,6 +222,7 @@ namespace ShiftOS.WinForms
SaveSystem.GameReady += () =>
{
+ this.Invoke(new Action(LoadIcons));
if (this.Visible == true)
this.Invoke(new Action(() => SetupDesktop()));
};
@@ -208,6 +251,7 @@ namespace ShiftOS.WinForms
};
SkinEngine.SkinLoaded += () =>
{
+ LoadIcons();
foreach (var widget in Widgets)
{
widget.OnSkinLoad();
diff --git a/ShiftOS_TheReturn/IStatusIcon.cs b/ShiftOS_TheReturn/IStatusIcon.cs
new file mode 100644
index 0000000..f32d1c1
--- /dev/null
+++ b/ShiftOS_TheReturn/IStatusIcon.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ShiftOS.Engine
+{
+ public interface IStatusIcon
+ {
+ void Setup();
+
+ }
+}
diff --git a/ShiftOS_TheReturn/NotificationDaemon.cs b/ShiftOS_TheReturn/NotificationDaemon.cs
index a90510a..0725782 100644
--- a/ShiftOS_TheReturn/NotificationDaemon.cs
+++ b/ShiftOS_TheReturn/NotificationDaemon.cs
@@ -25,6 +25,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
@@ -34,6 +35,35 @@ namespace ShiftOS.Engine
{
public static class NotificationDaemon
{
+ ///
+ /// Gets a list of all objects that meet their Shiftorium dependencies.
+ ///
+ /// An array of s containing the found objects.
+ public static Type[] GetAllStatusIcons()
+ {
+ List lst = new List();
+ foreach(var exec in System.IO.Directory.GetFiles(Environment.CurrentDirectory))
+ {
+ if(exec.ToLower().EndsWith(".exe") || exec.ToLower().EndsWith(".dll"))
+ {
+ try
+ {
+ var asm = Assembly.LoadFile(exec);
+ foreach(var type in asm.GetTypes().Where(x => x.GetInterfaces().Contains(typeof(IStatusIcon))))
+ {
+ if (Shiftorium.UpgradeAttributesUnlocked(type))
+ {
+ lst.Add(type);
+ }
+ }
+ }
+ catch { }
+ }
+ }
+ return lst.ToArray();
+ }
+
+
//if the notifications file already exists then get them
public static Notification[] GetAllFromFile()
{
diff --git a/ShiftOS_TheReturn/ShiftOS.Engine.csproj b/ShiftOS_TheReturn/ShiftOS.Engine.csproj
index 4cbce72..f70c41e 100644
--- a/ShiftOS_TheReturn/ShiftOS.Engine.csproj
+++ b/ShiftOS_TheReturn/ShiftOS.Engine.csproj
@@ -109,6 +109,7 @@
+