diff --git a/Dalamud/Dalamud.cs b/Dalamud/Dalamud.cs
index 7c13ae542..8855b7e85 100644
--- a/Dalamud/Dalamud.cs
+++ b/Dalamud/Dalamud.cs
@@ -231,17 +231,12 @@ namespace Dalamud
Log.Verbose("[START] PREPO OK!");
- this.DalamudUi = new DalamudInterface(this);
-
- Log.Verbose("[START] DUI OK!");
-
var isInterfaceLoaded = false;
if (!bool.Parse(Environment.GetEnvironmentVariable("DALAMUD_NOT_HAVE_INTERFACE") ?? "false"))
{
try
{
this.InterfaceManager = new InterfaceManager(this, this.SigScanner);
- this.InterfaceManager.OnDraw += this.DalamudUi.Draw;
this.InterfaceManager.Enable();
isInterfaceLoaded = true;
@@ -313,6 +308,11 @@ namespace Dalamud
this.ClientState.Enable();
Log.Verbose("[START] CS ENABLE!");
+ this.DalamudUi = new DalamudInterface(this);
+ this.InterfaceManager.OnDraw += this.DalamudUi.Draw;
+
+ Log.Verbose("[START] DUI OK!");
+
this.IsReady = true;
Troubleshooting.LogTroubleshooting(this, isInterfaceLoaded);
@@ -373,18 +373,20 @@ namespace Dalamud
Log.Error(ex, "Plugin unload failed.");
}
- this.Framework.Dispose();
- this.ClientState.Dispose();
+ this.DalamudUi?.Dispose();
- this.unloadSignal.Dispose();
+ this.Framework?.Dispose();
+ this.ClientState?.Dispose();
- this.WinSock2.Dispose();
+ this.unloadSignal?.Dispose();
- this.SigScanner.Dispose();
+ this.WinSock2?.Dispose();
- this.Data.Dispose();
+ this.SigScanner?.Dispose();
- this.AntiDebug.Dispose();
+ this.Data?.Dispose();
+
+ this.AntiDebug?.Dispose();
Log.Debug("Dalamud::Dispose() OK!");
}
diff --git a/Dalamud/Interface/DalamudChangelogWindow.cs b/Dalamud/Interface/DalamudChangelogWindow.cs
index 29da9a9e3..9e854ed32 100644
--- a/Dalamud/Interface/DalamudChangelogWindow.cs
+++ b/Dalamud/Interface/DalamudChangelogWindow.cs
@@ -2,35 +2,32 @@ using System;
using System.Diagnostics;
using System.Linq;
using System.Numerics;
+using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
using ImGuiNET;
using Lumina.Data.Parsing.Layer;
namespace Dalamud.Interface {
- class DalamudChangelogWindow : IDisposable {
+ class DalamudChangelogWindow : Window {
private readonly Dalamud dalamud;
private string assemblyVersion = Util.AssemblyVersion;
- private const bool WarrantsChangelog = true;
+ public const bool WarrantsChangelog = true;
private const string ChangeLog =
@"* Various behind-the-scenes changes to improve stability
* Faster startup times
If you note any issues or need help, please make sure to ask on our discord server.";
- public DalamudChangelogWindow(Dalamud dalamud) {
+ public DalamudChangelogWindow(Dalamud dalamud)
+ : base("What's new in XIVLauncher?", ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoResize)
+ {
this.dalamud = dalamud;
+
+ this.Namespace = "DalamudChangelogWindow";
}
- public bool Draw() {
- var doDraw = true;
-
- if (!WarrantsChangelog)
- return false;
-
- ImGui.PushID("DalamudChangelogWindow");
- ImGui.Begin("What's new in XIVLauncher?", ref doDraw, ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoResize);
-
+ public override void Draw() {
ImGui.Text($"The in-game addon has been updated to version D{this.assemblyVersion}.");
ImGui.Dummy(new Vector2(10, 10) * ImGui.GetIO().FontGlobalScale);
@@ -84,18 +81,10 @@ If you note any issues or need help, please make sure to ask on our discord serv
ImGui.Dummy(new Vector2(20, 0) * ImGui.GetIO().FontGlobalScale);
ImGui.SameLine();
- if (ImGui.Button("Close")) {
- doDraw = false;
+ if (ImGui.Button("Close"))
+ {
+ this.IsOpen = false;
}
-
- ImGui.End();
- ImGui.PopID();
-
- return doDraw;
- }
-
- public void Dispose() {
-
}
}
}
diff --git a/Dalamud/Interface/DalamudCreditsWindow.cs b/Dalamud/Interface/DalamudCreditsWindow.cs
index 791c65f5a..25adcd493 100644
--- a/Dalamud/Interface/DalamudCreditsWindow.cs
+++ b/Dalamud/Interface/DalamudCreditsWindow.cs
@@ -1,13 +1,16 @@
using System;
+using System.IO;
using System.Linq;
using System.Numerics;
using Dalamud.Game.Internal;
+using Dalamud.Interface.Windowing;
using ImGuiNET;
using ImGuiScene;
+using Serilog;
namespace Dalamud.Interface
{
- class DalamudCreditsWindow : IDisposable {
+ class DalamudCreditsWindow : Window, IDisposable {
private const string CreditsTextTempl = @"
Dalamud
A FFXIV Hooking Framework
@@ -101,39 +104,50 @@ Thank you for using XIVLauncher and Dalamud!
private string creditsText;
- public DalamudCreditsWindow(Dalamud dalamud, TextureWrap logoTexture, Framework framework) {
+ public DalamudCreditsWindow(Dalamud dalamud)
+ : base("Dalamud Credits", ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoResize, true)
+ {
this.dalamud = dalamud;
- this.logoTexture = logoTexture;
- this.framework = framework;
-
- framework.Gui.SetBgm(132);
+ this.logoTexture = this.dalamud.InterfaceManager.LoadImage(
+ Path.Combine(this.dalamud.AssetDirectory.FullName, "UIRes", "logo.png"));
+ this.framework = dalamud.Framework;
var pluginCredits = dalamud.PluginManager.Plugins.Where(x => x.Definition != null).Aggregate(string.Empty, (current, plugin) => current + $"{plugin.Definition.Name} by {plugin.Definition.Author}\n");
this.creditsText =
string.Format(CreditsTextTempl, typeof(Dalamud).Assembly.GetName().Version, pluginCredits);
+
+ this.Size = new Vector2(500, 400);
+ this.SizeCondition = ImGuiCond.Always;
+
+ this.PositionCondition = ImGuiCond.Always;
+
+ this.BgAlpha = 0.5f;
+ }
+
+ public override void OnOpen()
+ {
+ base.OnOpen();
+
+ this.framework.Gui.SetBgm(132);
+ }
+
+ public override void OnClose()
+ {
+ base.OnClose();
+
+ this.framework.Gui.SetBgm(9999);
}
public void Dispose() {
this.logoTexture.Dispose();
}
- public bool Draw() {
- var windowSize = new Vector2(500, 400) * ImGui.GetIO().FontGlobalScale;
- ImGui.SetNextWindowSize(windowSize, ImGuiCond.Always);
-
- var screenSize = ImGui.GetIO().DisplaySize;
- ImGui.SetNextWindowPos(new Vector2((screenSize.X / 2) - windowSize.X /2, (screenSize.Y / 2) - windowSize.Y / 2), ImGuiCond.Always);
+ public override void Draw() {
+ var screenSize = ImGui.GetMainViewport().Size;
+ var windowSize = ImGui.GetWindowSize();
- var isOpen = true;
-
- ImGui.SetNextWindowBgAlpha(0.5f);
-
- if (!ImGui.Begin("Dalamud Credits", ref isOpen, ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.NoResize))
- {
- ImGui.End();
- return false;
- }
+ this.Position = new Vector2((screenSize.X / 2) - windowSize.X / 2, (screenSize.Y / 2) - windowSize.Y / 2);
ImGui.BeginChild("scrolling", new Vector2(0, 0), false, ImGuiWindowFlags.NoScrollbar);
@@ -151,7 +165,7 @@ Thank you for using XIVLauncher and Dalamud!
foreach (var creditsLine in this.creditsText.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None)) {
var lineLenX = ImGui.CalcTextSize(creditsLine).X;
-
+
ImGui.Dummy(new Vector2((windowX / 2) - lineLenX / 2, 0f));
ImGui.SameLine();
ImGui.TextUnformatted(creditsLine);
@@ -159,16 +173,16 @@ Thank you for using XIVLauncher and Dalamud!
ImGui.PopStyleVar();
- if (ImGui.GetScrollY() < ImGui.GetScrollMaxY() - 0.2f)
- ImGui.SetScrollY(ImGui.GetScrollY() + 0.2f);
+ var curY = ImGui.GetScrollY();
+ var maxY = ImGui.GetScrollMaxY();
+
+ if (curY < maxY - 1)
+ {
+ Log.Information($"{ImGui.GetScrollY()} {ImGui.GetScrollMaxY()}");
+ ImGui.SetScrollY(curY + 1);
+ }
ImGui.EndChild();
- ImGui.End();
-
- if (!isOpen)
- this.framework.Gui.SetBgm(9999);
-
- return isOpen;
}
}
}
diff --git a/Dalamud/Interface/DalamudDataWindow.cs b/Dalamud/Interface/DalamudDataWindow.cs
index 6fab7e594..cab0a21ab 100644
--- a/Dalamud/Interface/DalamudDataWindow.cs
+++ b/Dalamud/Interface/DalamudDataWindow.cs
@@ -11,6 +11,7 @@ using Dalamud.Game.ClientState.Actors.Types.NonPlayer;
using Dalamud.Game.ClientState.Structs.JobGauge;
using Dalamud.Game.Internal;
using Dalamud.Game.Internal.Gui.Addon;
+using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
using ImGuiNET;
using Newtonsoft.Json;
@@ -21,7 +22,7 @@ namespace Dalamud.Interface
///
/// Class responsible for drawing the data/debug window.
///
- internal class DalamudDataWindow
+ internal class DalamudDataWindow : Window
{
private readonly Dalamud dalamud;
@@ -53,24 +54,22 @@ namespace Dalamud.Interface
///
/// The Dalamud instance to access data of.
public DalamudDataWindow(Dalamud dalamud)
+ : base("Dalamud Data")
{
this.dalamud = dalamud;
+ this.Size = new Vector2(500, 500);
+ this.SizeCondition = ImGuiCond.FirstUseEver;
+
this.Load();
}
///
/// Draw the window via ImGui.
///
- /// Whether or not the window is open.
- public bool Draw()
+ public override void Draw()
{
this.copyButtonIndex = 0;
- ImGui.SetNextWindowSize(new Vector2(500, 500), ImGuiCond.FirstUseEver);
-
- var isOpen = true;
-
- ImGui.Begin("Dalamud Data", ref isOpen);
// Main window
if (ImGui.Button("Force Reload"))
@@ -285,9 +284,6 @@ namespace Dalamud.Interface
ImGui.PopStyleVar();
ImGui.EndChild();
- ImGui.End();
-
- return isOpen;
}
private void DrawActorTable() {
diff --git a/Dalamud/Interface/DalamudInterface.cs b/Dalamud/Interface/DalamudInterface.cs
index bf1d24821..ba254fe03 100644
--- a/Dalamud/Interface/DalamudInterface.cs
+++ b/Dalamud/Interface/DalamudInterface.cs
@@ -3,9 +3,11 @@ using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Numerics;
+using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using CheapLoc;
+using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
using ImGuiNET;
using Serilog;
@@ -16,7 +18,7 @@ namespace Dalamud.Interface
///
/// Class handling Dalamud core interface.
///
- internal class DalamudInterface
+ internal class DalamudInterface : IDisposable
{
private readonly Dalamud dalamud;
@@ -30,21 +32,15 @@ namespace Dalamud.Interface
private bool isImguiDrawDevMenu = false;
#endif
- private bool isImguiDrawLogWindow = false;
- private bool isImguiDrawDataWindow = false;
- private bool isImguiDrawPluginWindow = false;
- private bool isImguiDrawCreditsWindow = false;
- private bool isImguiDrawSettingsWindow = false;
- private bool isImguiDrawPluginStatWindow = false;
- private bool isImguiDrawChangelogWindow = false;
+ private readonly DalamudLogWindow logWindow;
+ private readonly DalamudDataWindow dataWindow;
+ private readonly DalamudCreditsWindow creditsWindow;
+ private readonly DalamudSettingsWindow settingsWindow;
+ private readonly PluginInstallerWindow pluginWindow;
+ private readonly DalamudPluginStatWindow pluginStatWindow;
+ private readonly DalamudChangelogWindow changelogWindow;
- private DalamudLogWindow logWindow;
- private DalamudDataWindow dataWindow;
- private DalamudCreditsWindow creditsWindow;
- private DalamudSettingsWindow settingsWindow;
- private PluginInstallerWindow pluginWindow;
- private DalamudPluginStatWindow pluginStatWindow;
- private DalamudChangelogWindow changelogWindow;
+ private readonly WindowSystem windowSystem = new WindowSystem("DalamudCore");
///
/// Initializes a new instance of the class.
@@ -53,6 +49,51 @@ namespace Dalamud.Interface
public DalamudInterface(Dalamud dalamud)
{
this.dalamud = dalamud;
+
+ this.logWindow = new DalamudLogWindow(this.dalamud.CommandManager, this.dalamud.Configuration)
+ {
+ IsOpen = false,
+ };
+ this.windowSystem.AddWindow(this.logWindow);
+
+ this.dataWindow = new DalamudDataWindow(this.dalamud)
+ {
+ IsOpen = false,
+ };
+ this.windowSystem.AddWindow(this.dataWindow);
+
+ this.creditsWindow = new DalamudCreditsWindow(this.dalamud)
+ {
+ IsOpen = false,
+ };
+ this.windowSystem.AddWindow(this.creditsWindow);
+
+ this.settingsWindow = new DalamudSettingsWindow(this.dalamud)
+ {
+ IsOpen = false,
+ };
+ this.windowSystem.AddWindow(this.settingsWindow);
+
+ this.pluginWindow = new PluginInstallerWindow(this.dalamud, this.dalamud.StartInfo.GameVersion)
+ {
+ IsOpen = false,
+ };
+ this.windowSystem.AddWindow(this.pluginWindow);
+
+ this.pluginStatWindow = new DalamudPluginStatWindow(this.dalamud.PluginManager)
+ {
+ IsOpen = false,
+ };
+ this.windowSystem.AddWindow(this.pluginStatWindow);
+
+ this.changelogWindow = new DalamudChangelogWindow(this.dalamud)
+ {
+ IsOpen = false,
+ };
+ this.windowSystem.AddWindow(this.changelogWindow);
+
+ Log.Information("[DUI] Windows added");
+
if (dalamud.Configuration.LogOpenAtStartup)
this.OpenLog();
}
@@ -111,8 +152,7 @@ namespace Dalamud.Interface
if (ImGui.MenuItem("Open Log window"))
{
- this.logWindow = new DalamudLogWindow(this.dalamud.CommandManager, this.dalamud.Configuration);
- this.isImguiDrawLogWindow = true;
+ this.OpenLog();
}
if (ImGui.BeginMenu("Set log level..."))
@@ -137,8 +177,7 @@ namespace Dalamud.Interface
if (ImGui.MenuItem("Open Data window"))
{
- this.dataWindow = new DalamudDataWindow(this.dalamud);
- this.isImguiDrawDataWindow = true;
+ this.OpenData();
}
if (ImGui.MenuItem("Open Credits window"))
@@ -202,19 +241,14 @@ namespace Dalamud.Interface
{
if (ImGui.MenuItem("Open Plugin installer"))
{
- this.pluginWindow = new PluginInstallerWindow(this.dalamud, this.dalamud.StartInfo.GameVersion);
- this.isImguiDrawPluginWindow = true;
+ this.OpenPluginInstaller();
}
ImGui.Separator();
if (ImGui.MenuItem("Open Plugin Stats"))
{
- if (!this.isImguiDrawPluginStatWindow)
- {
- this.pluginStatWindow = new DalamudPluginStatWindow(this.dalamud.PluginManager);
- this.isImguiDrawPluginStatWindow = true;
- }
+ OpenPluginStats();
}
if (ImGui.MenuItem("Print plugin info"))
@@ -291,63 +325,10 @@ namespace Dalamud.Interface
if (this.dalamud.Framework.Gui.GameUiHidden)
return;
- if (this.isImguiDrawLogWindow)
- {
- this.isImguiDrawLogWindow = this.logWindow != null && this.logWindow.Draw();
-
- if (this.isImguiDrawLogWindow == false)
- {
- this.logWindow?.Dispose();
- this.logWindow = null;
- }
- }
-
- if (this.isImguiDrawDataWindow)
- {
- this.isImguiDrawDataWindow = this.dataWindow != null && this.dataWindow.Draw();
- }
-
- if (this.isImguiDrawPluginWindow)
- {
- this.isImguiDrawPluginWindow = this.pluginWindow != null && this.pluginWindow.Draw();
-
- if (!this.isImguiDrawPluginWindow)
- this.pluginWindow = null;
- }
-
- if (this.isImguiDrawCreditsWindow)
- {
- this.isImguiDrawCreditsWindow = this.creditsWindow != null && this.creditsWindow.Draw();
-
- if (this.isImguiDrawCreditsWindow == false)
- {
- this.creditsWindow?.Dispose();
- this.creditsWindow = null;
- }
- }
-
- if (this.isImguiDrawSettingsWindow)
- {
- this.isImguiDrawSettingsWindow = this.settingsWindow != null && this.settingsWindow.Draw();
- }
+ this.windowSystem.Draw();
if (this.isImguiDrawDemoWindow)
ImGui.ShowDemoWindow();
-
- if (this.isImguiDrawPluginStatWindow)
- {
- this.isImguiDrawPluginStatWindow = this.pluginStatWindow != null && this.pluginStatWindow.Draw();
- if (!this.isImguiDrawPluginStatWindow)
- {
- this.pluginStatWindow?.Dispose();
- this.pluginStatWindow = null;
- }
- }
-
- if (this.isImguiDrawChangelogWindow)
- {
- this.isImguiDrawChangelogWindow = this.changelogWindow != null && this.changelogWindow.Draw();
- }
}
///
@@ -355,8 +336,7 @@ namespace Dalamud.Interface
///
internal void OpenPluginInstaller()
{
- this.pluginWindow ??= new PluginInstallerWindow(this.dalamud, this.dalamud.StartInfo.GameVersion);
- this.isImguiDrawPluginWindow ^= true;
+ this.pluginWindow.IsOpen ^= true;
}
///
@@ -364,8 +344,7 @@ namespace Dalamud.Interface
///
internal void OpenChangelog()
{
- this.changelogWindow = new DalamudChangelogWindow(this.dalamud);
- this.isImguiDrawChangelogWindow = true;
+ this.changelogWindow.IsOpen ^= true;
}
///
@@ -373,8 +352,7 @@ namespace Dalamud.Interface
///
internal void OpenSettings()
{
- this.settingsWindow = new DalamudSettingsWindow(this.dalamud);
- this.isImguiDrawSettingsWindow ^= true;
+ this.settingsWindow.IsOpen ^= true;
}
///
@@ -382,8 +360,15 @@ namespace Dalamud.Interface
///
internal void OpenLog()
{
- this.logWindow = new DalamudLogWindow(this.dalamud.CommandManager, this.dalamud.Configuration);
- this.isImguiDrawLogWindow = true;
+ this.logWindow.IsOpen ^= true;
+ }
+
+ ///
+ /// Open the data window.
+ ///
+ internal void OpenData()
+ {
+ this.dataWindow.IsOpen ^= true;
}
///
@@ -391,11 +376,24 @@ namespace Dalamud.Interface
///
internal void OpenCredits()
{
- var logoGraphic =
- this.dalamud.InterfaceManager.LoadImage(
- Path.Combine(this.dalamud.AssetDirectory.FullName, "UIRes", "logo.png"));
- this.creditsWindow = new DalamudCreditsWindow(this.dalamud, logoGraphic, this.dalamud.Framework);
- this.isImguiDrawCreditsWindow = true;
+ this.creditsWindow.IsOpen ^= true;
+ }
+
+ ///
+ /// Open the stats window.
+ ///
+ internal void OpenPluginStats()
+ {
+ this.pluginStatWindow.IsOpen ^= true;
+ }
+
+ public void Dispose()
+ {
+ this.windowSystem.RemoveAllWindows();
+
+ this.dalamud?.Dispose();
+ this.logWindow?.Dispose();
+ this.creditsWindow?.Dispose();
}
}
}
diff --git a/Dalamud/Interface/DalamudLogWindow.cs b/Dalamud/Interface/DalamudLogWindow.cs
index 6dbebdb6d..3a3c11ad1 100644
--- a/Dalamud/Interface/DalamudLogWindow.cs
+++ b/Dalamud/Interface/DalamudLogWindow.cs
@@ -7,13 +7,14 @@ using System.Threading.Tasks;
using Dalamud.Configuration;
using Dalamud.Game.Command;
+using Dalamud.Interface.Windowing;
using ImGuiNET;
using Serilog;
using Serilog.Events;
namespace Dalamud.Interface
{
- class DalamudLogWindow : IDisposable {
+ class DalamudLogWindow : Window, IDisposable {
private readonly CommandManager commandManager;
private readonly DalamudConfiguration configuration;
private bool autoScroll;
@@ -24,12 +25,17 @@ namespace Dalamud.Interface
private string commandText = string.Empty;
- public DalamudLogWindow(CommandManager commandManager, DalamudConfiguration configuration) {
+ public DalamudLogWindow(CommandManager commandManager, DalamudConfiguration configuration)
+ : base("Dalamud LOG")
+ {
this.commandManager = commandManager;
this.configuration = configuration;
this.autoScroll = configuration.LogAutoScroll;
this.openAtStartup = configuration.LogOpenAtStartup;
SerilogEventSink.Instance.OnLogLine += Serilog_OnLogLine;
+
+ this.Size = new Vector2(500, 400);
+ this.SizeCondition = ImGuiCond.FirstUseEver;
}
public void Dispose() {
@@ -64,17 +70,7 @@ namespace Dalamud.Interface
}
}
- public bool Draw() {
- ImGui.SetNextWindowSize(new Vector2(500, 400), ImGuiCond.FirstUseEver);
-
- var isOpen = true;
-
- if (!ImGui.Begin("Dalamud LOG", ref isOpen, ImGuiWindowFlags.NoCollapse))
- {
- ImGui.End();
- return false;
- }
-
+ public override void Draw() {
// Options menu
if (ImGui.BeginPopup("Options"))
{
@@ -130,9 +126,6 @@ namespace Dalamud.Interface
ImGui.SetScrollHereY(1.0f);
ImGui.EndChild();
- ImGui.End();
-
- return isOpen;
}
}
}
diff --git a/Dalamud/Interface/DalamudPluginStatWindow.cs b/Dalamud/Interface/DalamudPluginStatWindow.cs
index 78b6c4f0b..f37102083 100644
--- a/Dalamud/Interface/DalamudPluginStatWindow.cs
+++ b/Dalamud/Interface/DalamudPluginStatWindow.cs
@@ -3,23 +3,23 @@ using System.Linq;
using System.Reflection;
using Dalamud.Game.Internal;
using Dalamud.Hooking;
+using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
using ImGuiNET;
namespace Dalamud.Interface {
- internal class DalamudPluginStatWindow : IDisposable {
+ internal class DalamudPluginStatWindow : Window {
private readonly PluginManager pluginManager;
private bool showDalamudHooks;
- public DalamudPluginStatWindow(PluginManager pluginManager) {
+ public DalamudPluginStatWindow(PluginManager pluginManager)
+ : base("Plugin Statistics###DalamudPluginStatWindow")
+ {
this.pluginManager = pluginManager;
}
- public bool Draw() {
- bool doDraw = true;
- ImGui.PushID("DalamudPluginStatWindow");
- ImGui.Begin("Plugin Statistics", ref doDraw);
+ public override void Draw() {
ImGui.BeginTabBar("Stat Tabs");
if (ImGui.BeginTabItem("Draw times")) {
@@ -188,15 +188,6 @@ namespace Dalamud.Interface {
}
ImGui.EndTabBar();
-
- ImGui.End();
- ImGui.PopID();
-
- return doDraw;
- }
-
- public void Dispose() {
-
}
}
}
diff --git a/Dalamud/Interface/DalamudSettingsWindow.cs b/Dalamud/Interface/DalamudSettingsWindow.cs
index 353256507..6f43c5d86 100644
--- a/Dalamud/Interface/DalamudSettingsWindow.cs
+++ b/Dalamud/Interface/DalamudSettingsWindow.cs
@@ -8,16 +8,23 @@ using System.Windows.Forms.VisualStyles;
using CheapLoc;
using Dalamud.Configuration;
using Dalamud.Game.Text;
+using Dalamud.Interface.Windowing;
using ImGuiNET;
+using Serilog;
namespace Dalamud.Interface
{
- internal class DalamudSettingsWindow {
+ internal class DalamudSettingsWindow : Window {
private readonly Dalamud dalamud;
- public DalamudSettingsWindow(Dalamud dalamud) {
+ public DalamudSettingsWindow(Dalamud dalamud)
+ : base(Loc.Localize("DalamudSettingsHeader", "Dalamud Settings") + "###XlSettings2", ImGuiWindowFlags.NoCollapse)
+ {
this.dalamud = dalamud;
+ this.Size = new Vector2(740, 500);
+ this.SizeCondition = ImGuiCond.FirstUseEver;
+
this.dalamudMessagesChatType = this.dalamud.Configuration.GeneralChatType;
this.doCfTaskBarFlash = this.dalamud.Configuration.DutyFinderTaskbarFlash;
@@ -35,8 +42,10 @@ namespace Dalamud.Interface
this.autoUpdatePlugins = this.dalamud.Configuration.AutoUpdatePlugins;
this.languages = Localization.ApplicableLangCodes.Prepend("en").ToArray();
- try {
- if (string.IsNullOrEmpty(this.dalamud.Configuration.LanguageOverride)) {
+ try
+ {
+ if (string.IsNullOrEmpty(this.dalamud.Configuration.LanguageOverride))
+ {
var currentUiLang = CultureInfo.CurrentUICulture;
if (Localization.ApplicableLangCodes.Any(x => currentUiLang.TwoLetterISOLanguageName == x))
@@ -44,31 +53,62 @@ namespace Dalamud.Interface
else
this.langIndex = 0;
}
- else {
+ else
+ {
this.langIndex = Array.IndexOf(this.languages, this.dalamud.Configuration.LanguageOverride);
}
- } catch (Exception) {
+ }
+ catch (Exception)
+ {
this.langIndex = 0;
}
- try {
+ try
+ {
List locLanguagesList = new List();
string locLanguage;
- foreach (var language in this.languages) {
- if (language != "ko") {
+ foreach (var language in this.languages)
+ {
+ if (language != "ko")
+ {
locLanguage = CultureInfo.GetCultureInfo(language).NativeName;
locLanguagesList.Add(char.ToUpper(locLanguage[0]) + locLanguage.Substring(1));
- } else {
+ }
+ else
+ {
locLanguagesList.Add("Korean");
}
}
this.locLanguages = locLanguagesList.ToArray();
}
- catch (Exception) {
+ catch (Exception)
+ {
this.locLanguages = this.languages; // Languages not localized, only codes.
}
}
+ public override void OnOpen()
+ {
+ base.OnOpen();
+
+ Log.Information("OnOpen start");
+
+ Log.Information("OnOpen end");
+ }
+
+ public override void OnClose()
+ {
+ base.OnClose();
+
+ Log.Information("OnClose start");
+
+ ImGui.GetIO().FontGlobalScale = this.dalamud.Configuration.GlobalUiScale;
+ this.thirdRepoList = this.dalamud.Configuration.ThirdRepoList.Select(x => x.Clone()).ToList();
+
+ Log.Information("OnClose end");
+
+ }
+
private string[] languages;
private string[] locLanguages;
private int langIndex;
@@ -100,16 +140,7 @@ namespace Dalamud.Interface
#endregion
- public bool Draw() {
- ImGui.SetNextWindowSize(new Vector2(740, 500) * ImGui.GetIO().FontGlobalScale, ImGuiCond.FirstUseEver);
-
- var isOpen = true;
-
- if (!ImGui.Begin(Loc.Localize("DalamudSettingsHeader", "Dalamud Settings") + "###XlSettings2", ref isOpen, ImGuiWindowFlags.NoCollapse)) {
- ImGui.End();
- return false;
- }
-
+ public override void Draw() {
var windowSize = ImGui.GetWindowSize();
ImGui.BeginChild("scrolling", new Vector2(windowSize.X - 5 - (5 * ImGui.GetIO().FontGlobalScale), windowSize.Y - 35 - (35 * ImGui.GetIO().FontGlobalScale)), false, ImGuiWindowFlags.HorizontalScrollbar);
@@ -299,22 +330,16 @@ namespace Dalamud.Interface
ImGui.EndChild();
- if (!isOpen) {
- ImGui.GetIO().FontGlobalScale = this.dalamud.Configuration.GlobalUiScale;
- this.thirdRepoList = this.dalamud.Configuration.ThirdRepoList.Select(x => x.Clone()).ToList();
- }
if (ImGui.Button(Loc.Localize("Save", "Save"))) {
Save();
}
+
ImGui.SameLine();
+
if (ImGui.Button(Loc.Localize("SaveAndClose", "Save and Close"))) {
Save();
- isOpen = false;
+ this.IsOpen = false;
}
-
- ImGui.End();
-
- return isOpen;
}
private void Save() {
diff --git a/Dalamud/Interface/ImGuiHelpers.cs b/Dalamud/Interface/ImGuiHelpers.cs
index 7cedd1a12..c74fd1c14 100644
--- a/Dalamud/Interface/ImGuiHelpers.cs
+++ b/Dalamud/Interface/ImGuiHelpers.cs
@@ -1,5 +1,6 @@
using System.Numerics;
using ImGuiNET;
+using Serilog;
namespace Dalamud.Interface
{
@@ -32,6 +33,8 @@ namespace Dalamud.Interface
return mainViewportId;
}
+ public static Vector2 MainWindowPos { get; set; }
+
///
/// Create a dummy scaled by the global Dalamud scale.
///
@@ -52,6 +55,7 @@ namespace Dalamud.Interface
internal static void NewFrame()
{
GlobalScale = ImGui.GetIO().FontGlobalScale;
+ MainWindowPos = ImGui.GetMainViewport().Pos;
}
}
}
diff --git a/Dalamud/Plugin/PluginInstallerWindow.cs b/Dalamud/Plugin/PluginInstallerWindow.cs
index 6d6e36028..497acdb37 100644
--- a/Dalamud/Plugin/PluginInstallerWindow.cs
+++ b/Dalamud/Plugin/PluginInstallerWindow.cs
@@ -7,6 +7,7 @@ using System.Threading.Tasks;
using CheapLoc;
using Dalamud.Interface;
+using Dalamud.Interface.Windowing;
using ImGuiNET;
using Serilog;
@@ -15,7 +16,7 @@ namespace Dalamud.Plugin
///
/// Class responsible for drawing the plugin installer.
///
- internal class PluginInstallerWindow
+ internal class PluginInstallerWindow : Window
{
private readonly Dalamud dalamud;
private readonly Vector4 colorGrey = new Vector4(0.70f, 0.70f, 0.70f, 1.00f);
@@ -45,10 +46,16 @@ namespace Dalamud.Plugin
/// The relevant Dalamud instance.
/// The version of the game.
public PluginInstallerWindow(Dalamud dalamud, string gameVersion)
+ : base(
+ Loc.Localize("InstallerHeader", "Plugin Installer") + (dalamud.Configuration.DoPluginTest ? " (TESTING)" : string.Empty) + "###XlPluginInstaller",
+ ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoScrollbar)
{
this.dalamud = dalamud;
this.gameVersion = gameVersion;
+ this.Size = new Vector2(810, 520);
+ this.SizeCondition = ImGuiCond.Always;
+
if (this.dalamud.PluginRepository.State != PluginRepository.InitializationState.InProgress)
this.dalamud.PluginRepository.ReloadPluginMasterAsync();
}
@@ -71,18 +78,8 @@ namespace Dalamud.Plugin
///
/// Draw the plugin installer view ImGui.
///
- /// Whether or not the plugin installer window is open.
- public bool Draw()
+ public override void Draw()
{
- var windowOpen = true;
-
- ImGui.SetNextWindowSize(new Vector2(810, 520) * ImGui.GetIO().FontGlobalScale);
-
- ImGui.Begin(
- Loc.Localize("InstallerHeader", "Plugin Installer") + (this.dalamud.Configuration.DoPluginTest ? " (TESTING)" : string.Empty) + "###XlPluginInstaller",
- ref windowOpen,
- ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoScrollbar);
-
ImGui.SetCursorPosY(ImGui.GetCursorPosY() - (5 * ImGui.GetIO().FontGlobalScale));
var descriptionText = Loc.Localize("InstallerHint", "This window allows you to install and remove in-game plugins.\nThey are made by third-party developers.");
ImGui.Text(descriptionText);
@@ -224,7 +221,7 @@ namespace Dalamud.Plugin
ImGui.SameLine(ImGui.GetWindowWidth() - ImGui.CalcTextSize(closeText).X - (16 * ImGui.GetIO().FontGlobalScale));
if (ImGui.Button(closeText))
{
- windowOpen = false;
+ this.IsOpen = false;
this.dalamud.Configuration.Save();
}
@@ -269,10 +266,6 @@ namespace Dalamud.Plugin
ImGui.OpenPopup(Loc.Localize("InstallerError", "Installer failed"));
this.errorModalOnNextFrame = false;
}
-
- ImGui.End();
-
- return windowOpen;
}
private void RefetchPlugins()