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; + } }