Initial release: HSUI v1.0.0.0 - HUD replacement with configurable hotbars
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,286 @@
|
||||
using HSUI.Config;
|
||||
using HSUI.Config.Tree;
|
||||
using Dalamud.Bindings.ImGui;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
|
||||
namespace HSUI.Helpers
|
||||
{
|
||||
public static class ImGuiHelper
|
||||
{
|
||||
public static void SetTooltip(string? message)
|
||||
{
|
||||
if (message == null) { return; }
|
||||
|
||||
if (ImGui.IsItemHovered())
|
||||
{
|
||||
ImGui.SetTooltip(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void DrawSeparator(int topSpacing, int bottomSpacing)
|
||||
{
|
||||
DrawSpacing(topSpacing);
|
||||
ImGui.Separator();
|
||||
DrawSpacing(bottomSpacing);
|
||||
}
|
||||
|
||||
public static void DrawSpacing(int spacingSize)
|
||||
{
|
||||
for (int i = 0; i < spacingSize; i++)
|
||||
{
|
||||
ImGui.NewLine();
|
||||
}
|
||||
}
|
||||
|
||||
public static void NewLineAndTab()
|
||||
{
|
||||
ImGui.NewLine();
|
||||
Tab();
|
||||
}
|
||||
|
||||
public static void Tab()
|
||||
{
|
||||
ImGui.Text(" ");
|
||||
ImGui.SameLine();
|
||||
}
|
||||
|
||||
public static Node? DrawExportResetContextMenu(Node node, bool canExport, bool canReset)
|
||||
{
|
||||
Node? nodeToReset = null;
|
||||
|
||||
if (ImGui.BeginPopupContextItem("ResetContextMenu"))
|
||||
{
|
||||
if (canExport && ImGui.Selectable("Export"))
|
||||
{
|
||||
var exportString = node.GetBase64String();
|
||||
ImGui.SetClipboardText(exportString ?? "");
|
||||
}
|
||||
|
||||
if (canReset && ImGui.Selectable("Reset"))
|
||||
{
|
||||
ImGui.CloseCurrentPopup();
|
||||
nodeToReset = node;
|
||||
}
|
||||
|
||||
ImGui.EndPopup();
|
||||
}
|
||||
|
||||
return nodeToReset;
|
||||
}
|
||||
|
||||
public static (bool, bool) DrawConfirmationModal(string title, string message)
|
||||
{
|
||||
return DrawConfirmationModal(title, new string[] { message });
|
||||
}
|
||||
|
||||
public static (bool, bool) DrawConfirmationModal(string title, IEnumerable<string> textLines)
|
||||
{
|
||||
ConfigurationManager.Instance.ShowingModalWindow = true;
|
||||
|
||||
bool didConfirm = false;
|
||||
bool didClose = false;
|
||||
|
||||
ImGui.OpenPopup(title + " ##HSUI");
|
||||
|
||||
Vector2 center = ImGui.GetMainViewport().GetCenter();
|
||||
ImGui.SetNextWindowPos(center, ImGuiCond.Appearing, new Vector2(0.5f, 0.5f));
|
||||
|
||||
bool p_open = true; // i've no idea what this is used for
|
||||
|
||||
if (ImGui.BeginPopupModal(title + " ##HSUI", ref p_open, ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoMove))
|
||||
{
|
||||
float width = 300;
|
||||
float height = Math.Min((ImGui.CalcTextSize(" ").Y + 5) * textLines.Count(), 240);
|
||||
|
||||
ImGui.BeginChild("confirmation_modal_message", new Vector2(width, height), false);
|
||||
foreach (string text in textLines)
|
||||
{
|
||||
ImGui.Text(text);
|
||||
}
|
||||
ImGui.EndChild();
|
||||
|
||||
ImGui.NewLine();
|
||||
|
||||
if (ImGui.Button("OK", new Vector2(width / 2f - 5, 24)))
|
||||
{
|
||||
ImGui.CloseCurrentPopup();
|
||||
didConfirm = true;
|
||||
didClose = true;
|
||||
}
|
||||
|
||||
ImGui.SetItemDefaultFocus();
|
||||
ImGui.SameLine();
|
||||
if (ImGui.Button("Cancel", new Vector2(width / 2f - 5, 24)))
|
||||
{
|
||||
ImGui.CloseCurrentPopup();
|
||||
didClose = true;
|
||||
}
|
||||
|
||||
ImGui.EndPopup();
|
||||
}
|
||||
// close button on nav
|
||||
else
|
||||
{
|
||||
didClose = true;
|
||||
}
|
||||
|
||||
if (didClose)
|
||||
{
|
||||
ConfigurationManager.Instance.ShowingModalWindow = false;
|
||||
}
|
||||
|
||||
return (didConfirm, didClose);
|
||||
}
|
||||
|
||||
public static bool DrawErrorModal(string message)
|
||||
{
|
||||
ConfigurationManager.Instance.ShowingModalWindow = true;
|
||||
|
||||
bool didClose = false;
|
||||
ImGui.OpenPopup("Error ##HSUI");
|
||||
|
||||
Vector2 center = ImGui.GetMainViewport().GetCenter();
|
||||
ImGui.SetNextWindowPos(center, ImGuiCond.Appearing, new Vector2(0.5f, 0.5f));
|
||||
|
||||
bool p_open = true; // i've no idea what this is used for
|
||||
if (ImGui.BeginPopupModal("Error ##HSUI", ref p_open, ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoMove))
|
||||
{
|
||||
ImGui.Text(message);
|
||||
ImGui.NewLine();
|
||||
|
||||
var textSize = ImGui.CalcTextSize(message).X;
|
||||
|
||||
if (ImGui.Button("OK", new Vector2(textSize, 24)))
|
||||
{
|
||||
ImGui.CloseCurrentPopup();
|
||||
didClose = true;
|
||||
}
|
||||
|
||||
ImGui.EndPopup();
|
||||
}
|
||||
// close button on nav
|
||||
else
|
||||
{
|
||||
didClose = true;
|
||||
}
|
||||
|
||||
if (didClose)
|
||||
{
|
||||
ConfigurationManager.Instance.ShowingModalWindow = false;
|
||||
}
|
||||
|
||||
return didClose;
|
||||
}
|
||||
|
||||
public static (bool, bool) DrawInputModal(string title, string message, ref string value)
|
||||
{
|
||||
ConfigurationManager.Instance.ShowingModalWindow = true;
|
||||
|
||||
bool didConfirm = false;
|
||||
bool didClose = false;
|
||||
|
||||
ImGui.OpenPopup(title + " ##HSUI");
|
||||
|
||||
Vector2 center = ImGui.GetMainViewport().GetCenter();
|
||||
ImGui.SetNextWindowPos(center, ImGuiCond.Appearing, new Vector2(0.5f, 0.5f));
|
||||
|
||||
bool p_open = true; // i've no idea what this is used for
|
||||
|
||||
if (ImGui.BeginPopupModal(title + " ##HSUI", ref p_open, ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoMove))
|
||||
{
|
||||
var textSize = ImGui.CalcTextSize(message).X;
|
||||
|
||||
ImGui.Text(message);
|
||||
|
||||
ImGui.PushItemWidth(textSize);
|
||||
ImGui.InputText("", ref value, 64);
|
||||
|
||||
ImGui.NewLine();
|
||||
if (ImGui.Button("OK", new Vector2(textSize / 2f - 5, 24)))
|
||||
{
|
||||
ImGui.CloseCurrentPopup();
|
||||
didConfirm = true;
|
||||
didClose = true;
|
||||
}
|
||||
|
||||
ImGui.SetItemDefaultFocus();
|
||||
ImGui.SameLine();
|
||||
if (ImGui.Button("Cancel", new Vector2(textSize / 2f - 5, 24)))
|
||||
{
|
||||
ImGui.CloseCurrentPopup();
|
||||
didClose = true;
|
||||
}
|
||||
|
||||
ImGui.EndPopup();
|
||||
}
|
||||
// close button on nav
|
||||
else
|
||||
{
|
||||
didClose = true;
|
||||
}
|
||||
|
||||
if (didClose)
|
||||
{
|
||||
ConfigurationManager.Instance.ShowingModalWindow = false;
|
||||
}
|
||||
|
||||
return (didConfirm, didClose);
|
||||
}
|
||||
|
||||
public static string? DrawTextTagsList(string name, ref string searchText)
|
||||
{
|
||||
string? selectedTag = null;
|
||||
|
||||
ImGui.SetNextWindowSize(new(200, 300));
|
||||
|
||||
if (ImGui.BeginPopup(name, ImGuiWindowFlags.NoMove))
|
||||
{
|
||||
if (!ImGui.IsAnyItemActive() && !ImGui.IsAnyItemFocused() && !ImGui.IsMouseClicked(ImGuiMouseButton.Left))
|
||||
{
|
||||
ImGui.SetKeyboardFocusHere(0);
|
||||
}
|
||||
|
||||
// search
|
||||
ImGui.InputText("", ref searchText, 64);
|
||||
|
||||
List<string> keys = new List<string>();
|
||||
keys.AddRange(TextTagsHelper.TextTags.Keys);
|
||||
keys.AddRange(TextTagsHelper.ExpTags.Keys);
|
||||
keys.AddRange(TextTagsHelper.CharaTextTags.Keys);
|
||||
|
||||
foreach (string key in keys)
|
||||
{
|
||||
if (searchText.Length > 0 && !key.Contains(searchText))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// tag
|
||||
if (ImGui.Selectable(key))
|
||||
{
|
||||
selectedTag = key;
|
||||
searchText = "";
|
||||
}
|
||||
|
||||
// help tooltip
|
||||
if (ImGui.IsItemHovered() && Plugin.ObjectTable.LocalPlayer != null)
|
||||
{
|
||||
string formattedText = TextTagsHelper.FormattedText(key, Plugin.ObjectTable.LocalPlayer);
|
||||
|
||||
if (formattedText.Length > 0)
|
||||
{
|
||||
ImGui.SetTooltip("Example: " + formattedText);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.EndPopup();
|
||||
}
|
||||
|
||||
return selectedTag;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user