diff --git a/Dalamud.CorePlugin/PluginImpl.cs b/Dalamud.CorePlugin/PluginImpl.cs
index cb9b4368a..afeaad426 100644
--- a/Dalamud.CorePlugin/PluginImpl.cs
+++ b/Dalamud.CorePlugin/PluginImpl.cs
@@ -56,15 +56,16 @@ namespace Dalamud.CorePlugin
///
/// Dalamud plugin interface.
/// Logging service.
- public PluginImpl(DalamudPluginInterface pluginInterface, IPluginLog log)
+ public PluginImpl(DalamudPluginInterface pluginInterface, IPluginLog log, INotificationManager notificationManager)
{
+ this.NotificationManager = notificationManager;
try
{
// this.InitLoc();
this.Interface = pluginInterface;
this.pluginLog = log;
- this.windowSystem.AddWindow(new PluginWindow());
+ this.windowSystem.AddWindow(new PluginWindow(this));
this.Interface.UiBuilder.Draw += this.OnDraw;
this.Interface.UiBuilder.OpenConfigUi += this.OnOpenConfigUi;
@@ -84,6 +85,8 @@ namespace Dalamud.CorePlugin
}
}
+ public INotificationManager NotificationManager { get; }
+
///
/// Gets the plugin interface.
///
diff --git a/Dalamud.CorePlugin/PluginWindow.cs b/Dalamud.CorePlugin/PluginWindow.cs
index 27be82f41..33b8505c4 100644
--- a/Dalamud.CorePlugin/PluginWindow.cs
+++ b/Dalamud.CorePlugin/PluginWindow.cs
@@ -1,7 +1,9 @@
using System;
using System.Numerics;
+using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.Windowing;
+
using ImGuiNET;
namespace Dalamud.CorePlugin
@@ -14,15 +16,19 @@ namespace Dalamud.CorePlugin
///
/// Initializes a new instance of the class.
///
- public PluginWindow()
+ ///
+ public PluginWindow(PluginImpl pluginImpl)
: base("CorePlugin")
{
+ this.PluginImpl = pluginImpl;
this.IsOpen = true;
this.Size = new Vector2(810, 520);
this.SizeCondition = ImGuiCond.FirstUseEver;
}
+ public PluginImpl PluginImpl { get; }
+
///
public void Dispose()
{
@@ -36,6 +42,72 @@ namespace Dalamud.CorePlugin
///
public override void Draw()
{
+ if (ImGui.Button("Legacy"))
+ this.PluginImpl.Interface.UiBuilder.AddNotification("asdf");
+ if (ImGui.Button("Test"))
+ {
+ const string text =
+ "Bla bla bla bla bla bla bla bla bla bla bla.\nBla bla bla bla bla bla bla bla bla bla bla bla bla bla.";
+
+ NewRandom(out var title, out var type);
+ var n = this.PluginImpl.NotificationManager.AddNotification(
+ new()
+ {
+ Content = text,
+ Title = title,
+ Type = type,
+ Interactible = true,
+ Expiry = DateTime.MaxValue,
+ });
+
+ var nclick = 0;
+ n.Click += _ => nclick++;
+ n.DrawActions += an =>
+ {
+ if (ImGui.Button("Update in place"))
+ {
+ NewRandom(out title, out type);
+ an.Update(an.CloneNotification() with { Title = title, Type = type });
+ }
+
+ if (an.IsMouseHovered)
+ {
+ ImGui.SameLine();
+ if (ImGui.Button("Dismiss"))
+ an.DismissNow();
+ }
+
+ ImGui.AlignTextToFramePadding();
+ ImGui.SameLine();
+ ImGui.TextUnformatted($"Clicked {nclick} time(s)");
+ };
+ }
+ }
+
+ private static void NewRandom(out string? title, out NotificationType type)
+ {
+ var rand = new Random();
+
+ title = rand.Next(0, 7) switch
+ {
+ 0 => "This is a toast",
+ 1 => "Truly, a toast",
+ 2 => "I am testing this toast",
+ 3 => "I hope this looks right",
+ 4 => "Good stuff",
+ 5 => "Nice",
+ _ => null,
+ };
+
+ type = rand.Next(0, 5) switch
+ {
+ 0 => NotificationType.Error,
+ 1 => NotificationType.Warning,
+ 2 => NotificationType.Info,
+ 3 => NotificationType.Success,
+ 4 => NotificationType.None,
+ _ => NotificationType.None,
+ };
}
}
}
diff --git a/Dalamud/Game/ChatHandlers.cs b/Dalamud/Game/ChatHandlers.cs
index 836fb5ec8..5dd6ed3ba 100644
--- a/Dalamud/Game/ChatHandlers.cs
+++ b/Dalamud/Game/ChatHandlers.cs
@@ -11,6 +11,7 @@ using Dalamud.Game.Gui;
using Dalamud.Game.Text;
using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Game.Text.SeStringHandling.Payloads;
+using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal;
using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.Internal.Windows;
diff --git a/Dalamud/Interface/ImGuiNotification/IActiveNotification.cs b/Dalamud/Interface/ImGuiNotification/IActiveNotification.cs
index d1aa1d95b..2e0c62783 100644
--- a/Dalamud/Interface/ImGuiNotification/IActiveNotification.cs
+++ b/Dalamud/Interface/ImGuiNotification/IActiveNotification.cs
@@ -1,8 +1,6 @@
using System.Threading;
using System.Threading.Tasks;
-using Dalamud.Game.Text;
-using Dalamud.Interface.Internal;
using Dalamud.Interface.Internal.Notifications;
namespace Dalamud.Interface.ImGuiNotification;
diff --git a/Dalamud/Interface/ImGuiNotification/INotification.cs b/Dalamud/Interface/ImGuiNotification/INotification.cs
index cbd8ad633..a5d56d783 100644
--- a/Dalamud/Interface/ImGuiNotification/INotification.cs
+++ b/Dalamud/Interface/ImGuiNotification/INotification.cs
@@ -35,7 +35,7 @@ public interface INotification
/// Set to to make the notification not have an expiry time
/// (sticky, indeterminate, permanent, or persistent).
DateTime Expiry { get; }
-
+
/// Gets a value indicating whether this notification may be interacted.
///
/// Set this value to true if you want to respond to user inputs from
@@ -52,7 +52,7 @@ public interface INotification
/// This property is applicable regardless of .
///
TimeSpan HoverExtendDuration { get; }
-
+
/// Gets the progress for the progress bar of the notification.
/// The progress should either be in the range between 0 and 1 or be a negative value.
/// Specifying a negative value will show an indeterminate progress bar.
diff --git a/Dalamud/Interface/Internal/Notifications/ActiveNotification.cs b/Dalamud/Interface/ImGuiNotification/Internal/ActiveNotification.cs
similarity index 99%
rename from Dalamud/Interface/Internal/Notifications/ActiveNotification.cs
rename to Dalamud/Interface/ImGuiNotification/Internal/ActiveNotification.cs
index c1fecdd3b..963b74b6c 100644
--- a/Dalamud/Interface/Internal/Notifications/ActiveNotification.cs
+++ b/Dalamud/Interface/ImGuiNotification/Internal/ActiveNotification.cs
@@ -7,6 +7,7 @@ using Dalamud.Interface.Animation;
using Dalamud.Interface.Animation.EasingFunctions;
using Dalamud.Interface.Colors;
using Dalamud.Interface.ImGuiNotification;
+using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal.Windows;
using Dalamud.Interface.ManagedFontAtlas;
using Dalamud.Interface.Utility;
diff --git a/Dalamud/Interface/Internal/Notifications/NotificationConstants.cs b/Dalamud/Interface/ImGuiNotification/Internal/NotificationConstants.cs
similarity index 98%
rename from Dalamud/Interface/Internal/Notifications/NotificationConstants.cs
rename to Dalamud/Interface/ImGuiNotification/Internal/NotificationConstants.cs
index 3592c2a00..a16fb904d 100644
--- a/Dalamud/Interface/Internal/Notifications/NotificationConstants.cs
+++ b/Dalamud/Interface/ImGuiNotification/Internal/NotificationConstants.cs
@@ -2,7 +2,7 @@ using System.Numerics;
using Dalamud.Interface.Utility;
-namespace Dalamud.Interface.Internal.Notifications;
+namespace Dalamud.Interface.ImGuiNotification.Internal;
///
/// Constants for drawing notification windows.
@@ -94,7 +94,7 @@ internal static class NotificationConstants
/// Gets the scaled size of the icon.
public static float ScaledIconSize => MathF.Round(IconSize * ImGuiHelpers.GlobalScale);
-
+
/// Gets the height of the expiry progress bar.
public static float ScaledExpiryProgressBarHeight => MathF.Round(2 * ImGuiHelpers.GlobalScale);
diff --git a/Dalamud/Interface/Internal/Notifications/NotificationManager.cs b/Dalamud/Interface/ImGuiNotification/Internal/NotificationManager.cs
similarity index 98%
rename from Dalamud/Interface/Internal/Notifications/NotificationManager.cs
rename to Dalamud/Interface/ImGuiNotification/Internal/NotificationManager.cs
index fd92c30df..b67605541 100644
--- a/Dalamud/Interface/Internal/Notifications/NotificationManager.cs
+++ b/Dalamud/Interface/ImGuiNotification/Internal/NotificationManager.cs
@@ -2,7 +2,7 @@ using System.Collections.Concurrent;
using System.Collections.Generic;
using Dalamud.Interface.GameFonts;
-using Dalamud.Interface.ImGuiNotification;
+using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.ManagedFontAtlas;
using Dalamud.Interface.ManagedFontAtlas.Internals;
using Dalamud.Interface.Utility;
@@ -11,7 +11,7 @@ using Dalamud.IoC.Internal;
using Dalamud.Plugin.Internal.Types;
using Dalamud.Plugin.Services;
-namespace Dalamud.Interface.Internal.Notifications;
+namespace Dalamud.Interface.ImGuiNotification.Internal;
///
/// Class handling notifications/toasts in ImGui.
diff --git a/Dalamud/Interface/ImGuiNotification/Notification.cs b/Dalamud/Interface/ImGuiNotification/Notification.cs
index ccfb250c3..bab6f6f23 100644
--- a/Dalamud/Interface/ImGuiNotification/Notification.cs
+++ b/Dalamud/Interface/ImGuiNotification/Notification.cs
@@ -1,5 +1,6 @@
using System.Threading.Tasks;
+using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal.Notifications;
namespace Dalamud.Interface.ImGuiNotification;
diff --git a/Dalamud/Interface/ImGuiNotification/NotificationDismissReason.cs b/Dalamud/Interface/ImGuiNotification/NotificationDismissReason.cs
index 6e2fa338e..47e52b142 100644
--- a/Dalamud/Interface/ImGuiNotification/NotificationDismissReason.cs
+++ b/Dalamud/Interface/ImGuiNotification/NotificationDismissReason.cs
@@ -1,22 +1,16 @@
namespace Dalamud.Interface.ImGuiNotification;
-///
-/// Specifies the reason of dismissal for a notification.
-///
+/// Specifies the reason of dismissal for a notification.
public enum NotificationDismissReason
{
- ///
- /// The notification is dismissed because the expiry specified from is met.
- ///
+ /// The notification is dismissed because the expiry specified from is
+ /// met.
Timeout = 1,
-
- ///
- /// The notification is dismissed because the user clicked on the close button on a notification window.
+
+ /// The notification is dismissed because the user clicked on the close button on a notification window.
///
Manual = 2,
-
- ///
- /// The notification is dismissed from calling .
- ///
+
+ /// The notification is dismissed from calling .
Programmatical = 3,
}
diff --git a/Dalamud/Interface/ImGuiNotification/NotificationDismissedDelegate.cs b/Dalamud/Interface/ImGuiNotification/NotificationDismissedDelegate.cs
index 5e899c32c..09d6fd818 100644
--- a/Dalamud/Interface/ImGuiNotification/NotificationDismissedDelegate.cs
+++ b/Dalamud/Interface/ImGuiNotification/NotificationDismissedDelegate.cs
@@ -1,8 +1,6 @@
namespace Dalamud.Interface.ImGuiNotification;
-///
-/// Delegate representing the dismissal of an active notification.
-///
+/// Delegate representing the dismissal of an active notification.
/// The notification being dismissed.
/// The reason of dismissal.
public delegate void NotificationDismissedDelegate(
diff --git a/Dalamud/Interface/Internal/InterfaceManager.cs b/Dalamud/Interface/Internal/InterfaceManager.cs
index 3db799be0..c811e9287 100644
--- a/Dalamud/Interface/Internal/InterfaceManager.cs
+++ b/Dalamud/Interface/Internal/InterfaceManager.cs
@@ -14,6 +14,7 @@ using Dalamud.Game.ClientState.Keys;
using Dalamud.Game.Internal.DXGI;
using Dalamud.Hooking;
using Dalamud.Hooking.WndProcHook;
+using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal.ManagedAsserts;
using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.ManagedFontAtlas;
diff --git a/Dalamud/Interface/Internal/Notifications/NotificationType.cs b/Dalamud/Interface/Internal/Notifications/NotificationType.cs
index 1885ec809..5fffbe9af 100644
--- a/Dalamud/Interface/Internal/Notifications/NotificationType.cs
+++ b/Dalamud/Interface/Internal/Notifications/NotificationType.cs
@@ -1,32 +1,23 @@
-namespace Dalamud.Interface.Internal.Notifications;
+using Dalamud.Utility;
-///
-/// Possible notification types.
-///
+namespace Dalamud.Interface.Internal.Notifications;
+
+/// Possible notification types.
+[Api10ToDo(Api10ToDoAttribute.MoveNamespace, nameof(ImGuiNotification.Internal))]
public enum NotificationType
{
- ///
- /// No special type.
- ///
+ /// No special type.
None,
- ///
- /// Type indicating success.
- ///
+ /// Type indicating success.
Success,
- ///
- /// Type indicating a warning.
- ///
+ /// Type indicating a warning.
Warning,
- ///
- /// Type indicating an error.
- ///
+ /// Type indicating an error.
Error,
- ///
- /// Type indicating generic information.
- ///
+ /// Type indicating generic information.
Info,
}
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/DataShareWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/DataShareWidget.cs
index 92f340a7b..346255dfe 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/DataShareWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/DataShareWidget.cs
@@ -5,6 +5,7 @@ using System.Numerics;
using System.Reflection;
using System.Text;
+using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/ImGuiWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/ImGuiWidget.cs
index 060498ba7..67a65f74f 100644
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/ImGuiWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/ImGuiWidget.cs
@@ -1,5 +1,6 @@
using System.Threading.Tasks;
+using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.Windowing;
diff --git a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs
index 95c227662..210290f17 100644
--- a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs
+++ b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs
@@ -15,6 +15,7 @@ using Dalamud.Game.Command;
using Dalamud.Interface.Animation.EasingFunctions;
using Dalamud.Interface.Colors;
using Dalamud.Interface.Components;
+using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
diff --git a/Dalamud/Interface/Internal/Windows/PluginInstaller/ProfileManagerWidget.cs b/Dalamud/Interface/Internal/Windows/PluginInstaller/ProfileManagerWidget.cs
index eafea9d16..857002771 100644
--- a/Dalamud/Interface/Internal/Windows/PluginInstaller/ProfileManagerWidget.cs
+++ b/Dalamud/Interface/Internal/Windows/PluginInstaller/ProfileManagerWidget.cs
@@ -7,6 +7,7 @@ using CheapLoc;
using Dalamud.Configuration.Internal;
using Dalamud.Interface.Colors;
using Dalamud.Interface.Components;
+using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
diff --git a/Dalamud/Interface/Internal/Windows/PluginStatWindow.cs b/Dalamud/Interface/Internal/Windows/PluginStatWindow.cs
index a1d93bb8c..bfa30cafd 100644
--- a/Dalamud/Interface/Internal/Windows/PluginStatWindow.cs
+++ b/Dalamud/Interface/Internal/Windows/PluginStatWindow.cs
@@ -7,6 +7,7 @@ using System.Reflection;
using Dalamud.Game;
using Dalamud.Hooking.Internal;
using Dalamud.Interface.Components;
+using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.Windowing;
using Dalamud.Plugin.Internal;
diff --git a/Dalamud/Interface/UiBuilder.cs b/Dalamud/Interface/UiBuilder.cs
index 6da6ebc4a..64ff0cc45 100644
--- a/Dalamud/Interface/UiBuilder.cs
+++ b/Dalamud/Interface/UiBuilder.cs
@@ -11,6 +11,7 @@ using Dalamud.Game.Gui;
using Dalamud.Interface.FontIdentifier;
using Dalamud.Interface.GameFonts;
using Dalamud.Interface.ImGuiNotification;
+using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal;
using Dalamud.Interface.Internal.ManagedAsserts;
using Dalamud.Interface.Internal.Notifications;
diff --git a/Dalamud/Plugin/Internal/Types/LocalDevPlugin.cs b/Dalamud/Plugin/Internal/Types/LocalDevPlugin.cs
index 580d5c161..1f9f503e0 100644
--- a/Dalamud/Plugin/Internal/Types/LocalDevPlugin.cs
+++ b/Dalamud/Plugin/Internal/Types/LocalDevPlugin.cs
@@ -5,6 +5,7 @@ using System.Threading;
using System.Threading.Tasks;
using Dalamud.Configuration.Internal;
+using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal.Notifications;
using Dalamud.Logging.Internal;
using Dalamud.Plugin.Internal.Types.Manifest;
diff --git a/Dalamud/Utility/Api10ToDoAttribute.cs b/Dalamud/Utility/Api10ToDoAttribute.cs
index f397f8f0c..a13aaead5 100644
--- a/Dalamud/Utility/Api10ToDoAttribute.cs
+++ b/Dalamud/Utility/Api10ToDoAttribute.cs
@@ -11,9 +11,19 @@ internal sealed class Api10ToDoAttribute : Attribute
///
public const string DeleteCompatBehavior = "Delete. This is for making API 9 plugins work.";
+ ///
+ /// Marks that this should be moved to an another namespace.
+ ///
+ public const string MoveNamespace = "Move to another namespace.";
+
///
/// Initializes a new instance of the class.
///
/// The explanation.
- public Api10ToDoAttribute(string what) => _ = what;
+ /// The explanation 2.
+ public Api10ToDoAttribute(string what, string what2 = "")
+ {
+ _ = what;
+ _ = what2;
+ }
}