From a3f59a6d9fa68ea1152c645670ffd783678d1950 Mon Sep 17 00:00:00 2001 From: goat Date: Sat, 1 Feb 2020 20:02:05 +0900 Subject: [PATCH] feat: add Data window --- Dalamud/Dalamud.cs | 13 ++++ Dalamud/Interface/DalamudDataWindow.cs | 83 ++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 Dalamud/Interface/DalamudDataWindow.cs diff --git a/Dalamud/Dalamud.cs b/Dalamud/Dalamud.cs index 2113c06ea..a93d42c00 100644 --- a/Dalamud/Dalamud.cs +++ b/Dalamud/Dalamud.cs @@ -158,10 +158,12 @@ namespace Dalamud { #endif private bool isImguiDrawLogWindow = false; + private bool isImguiDrawDataWindow = false; private bool neverDrawWelcome = false; private DalamudLogWindow logWindow; + private DalamudDataWindow dataWindow; private void BuildDalamudUi() { @@ -172,11 +174,17 @@ namespace Dalamud { if (ImGui.BeginMenu("Dalamud")) { ImGui.MenuItem("Draw Dalamud dev menu", "", ref this.isImguiDrawDevMenu); + ImGui.Separator(); if (ImGui.MenuItem("Open Log window")) { this.logWindow = new DalamudLogWindow(); this.isImguiDrawLogWindow = true; } + if (ImGui.MenuItem("Open Data window")) + { + this.dataWindow = new DalamudDataWindow(this.Data); + this.isImguiDrawDataWindow = true; + } ImGui.MenuItem("Draw ImGui demo", "", ref this.isImguiDrawDemoWindow); ImGui.Separator(); if (ImGui.MenuItem("Unload Dalamud")) @@ -214,6 +222,11 @@ namespace Dalamud { } } + if (this.isImguiDrawDataWindow) + { + this.isImguiDrawDataWindow = this.dataWindow != null && this.dataWindow.Draw(); + } + if (this.isImguiDrawDemoWindow) ImGui.ShowDemoWindow(); diff --git a/Dalamud/Interface/DalamudDataWindow.cs b/Dalamud/Interface/DalamudDataWindow.cs new file mode 100644 index 000000000..cdb7f19ec --- /dev/null +++ b/Dalamud/Interface/DalamudDataWindow.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Text; +using System.Threading.Tasks; +using Dalamud.Data; +using ImGuiNET; +using Newtonsoft.Json; + +namespace Dalamud.Interface +{ + class DalamudDataWindow { + private DataManager dataMgr; + + private bool wasReady; + private string serverOpString; + private string cfcString; + + private int currentKind; + + public DalamudDataWindow(DataManager dataMgr) { + this.dataMgr = dataMgr; + + Load(); + } + + private void Load() { + if (this.dataMgr.IsDataReady) + { + this.serverOpString = JsonConvert.SerializeObject(this.dataMgr.ServerOpCodes, Formatting.Indented); + this.cfcString = JsonConvert.SerializeObject(this.dataMgr.ContentFinderCondition, Formatting.Indented); + this.wasReady = true; + } + } + + public bool Draw() + { + ImGui.SetNextWindowSize(new Vector2(500, 500), ImGuiCond.Always); + + var isOpen = true; + + if (!ImGui.Begin("Dalamud Data", ref isOpen, ImGuiWindowFlags.NoCollapse)) + { + ImGui.End(); + return false; + } + + // Main window + if (ImGui.Button("Force Reload")) + Load(); + ImGui.SameLine(); + var copy = ImGui.Button("Copy all"); + ImGui.SameLine(); + ImGui.Combo("Data kind", ref currentKind, new[] {"ServerOpCode", "ContentFinderCondition"}, 2); + + ImGui.BeginChild("scrolling", new Vector2(0, 0), false, ImGuiWindowFlags.HorizontalScrollbar); + + if (copy) + ImGui.LogToClipboard(); + + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new Vector2(0, 0)); + + if (this.wasReady) { + switch (currentKind) { + case 0: ImGui.TextUnformatted(this.serverOpString); + break; + case 1: ImGui.TextUnformatted(this.cfcString); + break; + } + } else { + ImGui.TextUnformatted("Data not ready."); + } + + ImGui.PopStyleVar(); + + ImGui.EndChild(); + ImGui.End(); + + return isOpen; + } + } +}