Add floating option for recipenote and synthhelper windows
This commit is contained in:
@@ -94,6 +94,9 @@ public class Configuration : IPluginConfiguration
|
|||||||
public bool ShowOptimalMacroStat { get; set; } = true;
|
public bool ShowOptimalMacroStat { get; set; } = true;
|
||||||
public int SynthHelperStepCount { get; set; } = 5;
|
public int SynthHelperStepCount { get; set; } = 5;
|
||||||
|
|
||||||
|
public bool PinSynthHelperToWindow { get; set; } = true;
|
||||||
|
public bool PinRecipeNoteToWindow { get; set; } = true;
|
||||||
|
|
||||||
public MacroCopyConfiguration MacroCopy { get; set; } = new();
|
public MacroCopyConfiguration MacroCopy { get; set; } = new();
|
||||||
|
|
||||||
public void AddMacro(Macro macro)
|
public void AddMacro(Macro macro)
|
||||||
|
|||||||
@@ -36,11 +36,16 @@ namespace Craftimizer.Windows;
|
|||||||
|
|
||||||
public sealed unsafe class RecipeNote : Window, IDisposable
|
public sealed unsafe class RecipeNote : Window, IDisposable
|
||||||
{
|
{
|
||||||
private const ImGuiWindowFlags WindowFlags = ImGuiWindowFlags.NoDecoration
|
private const ImGuiWindowFlags WindowFlagsPinned = WindowFlagsFloating
|
||||||
| ImGuiWindowFlags.AlwaysAutoResize
|
| ImGuiWindowFlags.NoDecoration
|
||||||
| ImGuiWindowFlags.NoSavedSettings
|
| ImGuiWindowFlags.NoSavedSettings;
|
||||||
| ImGuiWindowFlags.NoFocusOnAppearing
|
|
||||||
| ImGuiWindowFlags.NoNavFocus;
|
private const ImGuiWindowFlags WindowFlagsFloating =
|
||||||
|
ImGuiWindowFlags.AlwaysAutoResize
|
||||||
|
| ImGuiWindowFlags.NoFocusOnAppearing;
|
||||||
|
|
||||||
|
private const string WindowNamePinned = "Craftimizer Crafting Log Helper###CraftimizerRecipeNote";
|
||||||
|
private const string WindowNameFloating = $"{WindowNamePinned}Floating";
|
||||||
|
|
||||||
public enum CraftableStatus
|
public enum CraftableStatus
|
||||||
{
|
{
|
||||||
@@ -72,7 +77,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
private IDalamudTextureWrap NoManipulationBadge { get; }
|
private IDalamudTextureWrap NoManipulationBadge { get; }
|
||||||
private IFontHandle AxisFont { get; }
|
private IFontHandle AxisFont { get; }
|
||||||
|
|
||||||
public RecipeNote() : base("Craftimizer RecipeNote", WindowFlags)
|
public RecipeNote() : base(WindowNamePinned)
|
||||||
{
|
{
|
||||||
ExpertBadge = Service.IconManager.GetAssemblyTexture("Graphics.expert_badge.png");
|
ExpertBadge = Service.IconManager.GetAssemblyTexture("Graphics.expert_badge.png");
|
||||||
CollectibleBadge = Service.IconManager.GetAssemblyTexture("Graphics.collectible_badge.png");
|
CollectibleBadge = Service.IconManager.GetAssemblyTexture("Graphics.collectible_badge.png");
|
||||||
@@ -92,6 +97,17 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
MaximumSize = new(10000, 10000)
|
MaximumSize = new(10000, 10000)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TitleBarButtons = new()
|
||||||
|
{
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Icon = FontAwesomeIcon.Cog,
|
||||||
|
IconOffset = new(2.5f, 1),
|
||||||
|
Click = _ => Service.Plugin.OpenSettingsWindow(),
|
||||||
|
ShowTooltip = () => ImGuiUtils.Tooltip("Open Craftimizer Settings")
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
Service.WindowSystem.AddWindow(this);
|
Service.WindowSystem.AddWindow(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,15 +203,28 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
|
|
||||||
public override void PreDraw()
|
public override void PreDraw()
|
||||||
{
|
{
|
||||||
ref var unit = ref Addon->AtkUnitBase;
|
base.PreDraw();
|
||||||
var scale = unit.Scale;
|
|
||||||
var pos = new Vector2(unit.X, unit.Y);
|
|
||||||
var size = new Vector2(unit.WindowNode->AtkResNode.Width, unit.WindowNode->AtkResNode.Height) * scale;
|
|
||||||
|
|
||||||
var node = (AtkResNode*)Addon->Unk458; // unit.GetNodeById(59);
|
if (Service.Configuration.PinRecipeNoteToWindow)
|
||||||
var nodeParent = Addon->Unk258; // unit.GetNodeById(57);
|
{
|
||||||
|
ref var unit = ref Addon->AtkUnitBase;
|
||||||
|
var scale = unit.Scale;
|
||||||
|
var pos = new Vector2(unit.X, unit.Y);
|
||||||
|
var size = new Vector2(unit.WindowNode->AtkResNode.Width, unit.WindowNode->AtkResNode.Height) * scale;
|
||||||
|
|
||||||
Position = ImGuiHelpers.MainViewport.Pos + pos + new Vector2(size.X, (nodeParent->Y + node->Y) * scale);
|
var node = (AtkResNode*)Addon->Unk458; // unit.GetNodeById(59);
|
||||||
|
var nodeParent = Addon->Unk258; // unit.GetNodeById(57);
|
||||||
|
|
||||||
|
Position = ImGuiHelpers.MainViewport.Pos + pos + new Vector2(size.X, (nodeParent->Y + node->Y) * scale);
|
||||||
|
Flags = WindowFlagsPinned;
|
||||||
|
WindowName = WindowNamePinned;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Position = null;
|
||||||
|
Flags = WindowFlagsFloating;
|
||||||
|
WindowName = WindowNameFloating;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Draw()
|
public override void Draw()
|
||||||
|
|||||||
@@ -183,6 +183,15 @@ public sealed class Settings : Window, IDisposable
|
|||||||
ref isDirty
|
ref isDirty
|
||||||
);
|
);
|
||||||
|
|
||||||
|
DrawOption(
|
||||||
|
"Pin Crafting Log Window",
|
||||||
|
"Pins the helper window to the right of your crafting log. Disabling this will " +
|
||||||
|
"allow you to move it around.",
|
||||||
|
Config.PinRecipeNoteToWindow,
|
||||||
|
v => Config.PinRecipeNoteToWindow = v,
|
||||||
|
ref isDirty
|
||||||
|
);
|
||||||
|
|
||||||
DrawOption(
|
DrawOption(
|
||||||
"Show Only One Macro Stat in Crafting Log",
|
"Show Only One Macro Stat in Crafting Log",
|
||||||
"Only one stat will be shown for a macro. If a craft will be finished, quality " +
|
"Only one stat will be shown for a macro. If a craft will be finished, quality " +
|
||||||
@@ -657,7 +666,16 @@ public sealed class Settings : Window, IDisposable
|
|||||||
var isDirty = false;
|
var isDirty = false;
|
||||||
|
|
||||||
DrawOption(
|
DrawOption(
|
||||||
"Disable when running macro",
|
"Pin Window",
|
||||||
|
"Pins the synthesis helper to the right of your synthesis window. Disabling this will " +
|
||||||
|
"allow you to move it around.",
|
||||||
|
Config.PinSynthHelperToWindow,
|
||||||
|
v => Config.PinSynthHelperToWindow = v,
|
||||||
|
ref isDirty
|
||||||
|
);
|
||||||
|
|
||||||
|
DrawOption(
|
||||||
|
"Disable When Running Macro",
|
||||||
"Disables itself when an in-game macro is running.",
|
"Disables itself when an in-game macro is running.",
|
||||||
Config.DisableSynthHelperOnMacro,
|
Config.DisableSynthHelperOnMacro,
|
||||||
v => Config.DisableSynthHelperOnMacro = v,
|
v => Config.DisableSynthHelperOnMacro = v,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Craftimizer.Simulator;
|
|||||||
using Craftimizer.Simulator.Actions;
|
using Craftimizer.Simulator.Actions;
|
||||||
using Craftimizer.Utils;
|
using Craftimizer.Utils;
|
||||||
using Dalamud.Game.ClientState.Conditions;
|
using Dalamud.Game.ClientState.Conditions;
|
||||||
|
using Dalamud.Interface;
|
||||||
using Dalamud.Interface.Colors;
|
using Dalamud.Interface.Colors;
|
||||||
using Dalamud.Interface.GameFonts;
|
using Dalamud.Interface.GameFonts;
|
||||||
using Dalamud.Interface.ManagedFontAtlas;
|
using Dalamud.Interface.ManagedFontAtlas;
|
||||||
@@ -31,11 +32,16 @@ namespace Craftimizer.Windows;
|
|||||||
|
|
||||||
public sealed unsafe class SynthHelper : Window, IDisposable
|
public sealed unsafe class SynthHelper : Window, IDisposable
|
||||||
{
|
{
|
||||||
private const ImGuiWindowFlags WindowFlags = ImGuiWindowFlags.NoDecoration
|
private const ImGuiWindowFlags WindowFlagsPinned = WindowFlagsFloating
|
||||||
| ImGuiWindowFlags.AlwaysAutoResize
|
| ImGuiWindowFlags.NoDecoration
|
||||||
| ImGuiWindowFlags.NoSavedSettings
|
| ImGuiWindowFlags.NoSavedSettings;
|
||||||
| ImGuiWindowFlags.NoFocusOnAppearing
|
|
||||||
| ImGuiWindowFlags.NoNavFocus;
|
private const ImGuiWindowFlags WindowFlagsFloating =
|
||||||
|
ImGuiWindowFlags.AlwaysAutoResize
|
||||||
|
| ImGuiWindowFlags.NoFocusOnAppearing;
|
||||||
|
|
||||||
|
private const string WindowNamePinned = "Craftimizer Synthesis Helper###CraftimizerSynthHelper";
|
||||||
|
private const string WindowNameFloating = $"{WindowNamePinned}Floating";
|
||||||
|
|
||||||
public AddonSynthesis* Addon { get; private set; }
|
public AddonSynthesis* Addon { get; private set; }
|
||||||
public RecipeData? RecipeData { get; private set; }
|
public RecipeData? RecipeData { get; private set; }
|
||||||
@@ -69,7 +75,7 @@ public sealed unsafe class SynthHelper : Window, IDisposable
|
|||||||
|
|
||||||
private IFontHandle AxisFont { get; }
|
private IFontHandle AxisFont { get; }
|
||||||
|
|
||||||
public SynthHelper() : base("Craftimizer SynthHelper", WindowFlags)
|
public SynthHelper() : base(WindowNamePinned)
|
||||||
{
|
{
|
||||||
AxisFont = Service.PluginInterface.UiBuilder.FontAtlas.NewGameFontHandle(new(GameFontFamilyAndSize.Axis14));
|
AxisFont = Service.PluginInterface.UiBuilder.FontAtlas.NewGameFontHandle(new(GameFontFamilyAndSize.Axis14));
|
||||||
|
|
||||||
@@ -86,6 +92,17 @@ public sealed unsafe class SynthHelper : Window, IDisposable
|
|||||||
MaximumSize = new(494, 10000)
|
MaximumSize = new(494, 10000)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TitleBarButtons = new()
|
||||||
|
{
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Icon = FontAwesomeIcon.Cog,
|
||||||
|
IconOffset = new(2.5f, 1),
|
||||||
|
Click = _ => Service.Plugin.OpenSettingsWindow(),
|
||||||
|
ShowTooltip = () => ImGuiUtils.Tooltip("Open Craftimizer Settings")
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
Service.WindowSystem.AddWindow(this);
|
Service.WindowSystem.AddWindow(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,14 +172,27 @@ public sealed unsafe class SynthHelper : Window, IDisposable
|
|||||||
|
|
||||||
public override void PreDraw()
|
public override void PreDraw()
|
||||||
{
|
{
|
||||||
ref var unit = ref Addon->AtkUnitBase;
|
base.PreDraw();
|
||||||
var scale = unit.Scale;
|
|
||||||
var pos = new Vector2(unit.X, unit.Y);
|
|
||||||
var size = new Vector2(unit.WindowNode->AtkResNode.Width, unit.WindowNode->AtkResNode.Height) * scale;
|
|
||||||
|
|
||||||
var offset = 5;
|
if (Service.Configuration.PinSynthHelperToWindow)
|
||||||
|
{
|
||||||
|
ref var unit = ref Addon->AtkUnitBase;
|
||||||
|
var scale = unit.Scale;
|
||||||
|
var pos = new Vector2(unit.X, unit.Y);
|
||||||
|
var size = new Vector2(unit.WindowNode->AtkResNode.Width, unit.WindowNode->AtkResNode.Height) * scale;
|
||||||
|
|
||||||
Position = ImGuiHelpers.MainViewport.Pos + pos + new Vector2(size.X, offset * scale);
|
var offset = 5;
|
||||||
|
|
||||||
|
Position = ImGuiHelpers.MainViewport.Pos + pos + new Vector2(size.X, offset * scale);
|
||||||
|
Flags = WindowFlagsPinned;
|
||||||
|
WindowName = WindowNamePinned;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Position = null;
|
||||||
|
Flags = WindowFlagsFloating;
|
||||||
|
WindowName = WindowNameFloating;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PostDraw()
|
public override void PostDraw()
|
||||||
|
|||||||
Reference in New Issue
Block a user