Add a Toggle Main Window button to the QDB

This commit is contained in:
Exter-N 2026-02-19 22:22:02 +01:00
parent 6b7039f743
commit 85bd351d9b
3 changed files with 62 additions and 34 deletions

View file

@ -24,6 +24,7 @@ public enum QdbButtons
ReapplyAutomation = 0x40, ReapplyAutomation = 0x40,
ResetSettings = 0x80, ResetSettings = 0x80,
RevertAdvancedCustomization = 0x100, RevertAdvancedCustomization = 0x100,
ToggleMainWindow = 0x200,
} }
public sealed class DesignQuickBar : Window, IDisposable public sealed class DesignQuickBar : Window, IDisposable
@ -45,6 +46,8 @@ public sealed class DesignQuickBar : Window, IDisposable
private int _numButtons; private int _numButtons;
private readonly StringBuilder _tooltipBuilder = new(512); private readonly StringBuilder _tooltipBuilder = new(512);
public event Action? ToggleMainWindow;
public DesignQuickBar(Configuration.Configuration config, QuickDesignCombo designCombo, StateManager stateManager, IKeyState keyState, public DesignQuickBar(Configuration.Configuration config, QuickDesignCombo designCombo, StateManager stateManager, IKeyState keyState,
ActorObjectManager objects, AutoDesignApplier autoDesignApplier, PenumbraService penumbra) ActorObjectManager objects, AutoDesignApplier autoDesignApplier, PenumbraService penumbra)
: base("Glamourer Quick Bar", WindowFlags.NoDecoration | WindowFlags.NoDocking) : base("Glamourer Quick Bar", WindowFlags.NoDecoration | WindowFlags.NoDocking)
@ -77,38 +80,41 @@ public sealed class DesignQuickBar : Window, IDisposable
public override void PreDraw() public override void PreDraw()
{ {
Flags = GetFlags; Flags = GetFlags;
UpdateWidth();
_style.Push(ImStyleDouble.WindowPadding, new Vector2(Im.Style.GlobalScale * 4)) _style.Push(ImStyleDouble.WindowPadding, new Vector2(Im.Style.GlobalScale * 4))
.Push(ImStyleSingle.WindowBorderThickness, 0); .Push(ImStyleSingle.WindowBorderThickness, 0);
_style.Push(ImGuiColor.WindowBackground, ColorId.QuickDesignBg.Value()) _style.Push(ImGuiColor.WindowBackground, ColorId.QuickDesignBg.Value())
.Push(ImGuiColor.Button, ColorId.QuickDesignButton.Value()) .Push(ImGuiColor.Button, ColorId.QuickDesignButton.Value())
.Push(ImGuiColor.FrameBackground, ColorId.QuickDesignFrame.Value()); .Push(ImGuiColor.FrameBackground, ColorId.QuickDesignFrame.Value());
UpdateWidth();
} }
public override void PostDraw() public override void PostDraw()
=> _style.Dispose(); => _style.Dispose();
public void DrawAtEnd(float yPos) public void DrawAtEnd(float yPos, bool mainWindow)
{ {
var width = UpdateWidth(); var numButtons = CalculateButtonCount(mainWindow);
var width = CalculateWidth(numButtons, mainWindow);
Im.Cursor.Position = new Vector2(Im.ContentRegion.Maximum.X - width, yPos - Im.Style.GlobalScale); Im.Cursor.Position = new Vector2(Im.ContentRegion.Maximum.X - width, yPos - Im.Style.GlobalScale);
Draw(); Draw(Im.ContentRegion.Available.X, numButtons, mainWindow);
} }
public override void Draw() public override void Draw()
=> Draw(Im.ContentRegion.Available.X); => Draw(Im.ContentRegion.Available.X, _numButtons, false);
private void Draw(float width) private void Draw(float width, int numButtons, bool mainWindow)
{ {
using var group = Im.Group(); using var group = Im.Group();
var spacing = Im.Style.ItemInnerSpacing; var spacing = Im.Style.ItemInnerSpacing;
using var style = ImStyleDouble.ItemSpacing.Push(spacing); using var style = ImStyleDouble.ItemSpacing.Push(spacing);
var buttonSize = new Vector2(Im.Style.FrameHeight); var buttonSize = new Vector2(Im.Style.FrameHeight);
PrepareButtons(); PrepareButtons();
DrawToggleMainWindowButton(buttonSize, mainWindow);
if (_config.QdbButtons.HasFlag(QdbButtons.ApplyDesign)) if (_config.QdbButtons.HasFlag(QdbButtons.ApplyDesign))
{ {
var comboSize = width - _numButtons * (buttonSize.X + spacing.X); var comboSize = width - numButtons * (buttonSize.X + spacing.X);
_designCombo.Draw(StringU8.Empty, comboSize); _designCombo.Draw(StringU8.Empty, comboSize);
Im.Line.Same(); Im.Line.Same();
DrawApplyButton(buttonSize); DrawApplyButton(buttonSize);
@ -485,6 +491,16 @@ public sealed class DesignQuickBar : Window, IDisposable
} }
} }
private void DrawToggleMainWindowButton(Vector2 buttonSize, bool mainWindow)
{
if (mainWindow || !_config.QdbButtons.HasFlag(QdbButtons.ToggleMainWindow))
return;
if (ImEx.Icon.Button(FontAwesomeIcon.TheaterMasks.Icon(), "Toggle Glamourer's main window."u8, ToggleMainWindow is null, buttonSize))
ToggleMainWindow?.Invoke();
Im.Line.Same();
}
private (bool, ActorIdentifier, ActorData, ActorState?) ResolveTarget(AwesomeIcon icon, Vector2 buttonSize, int available) private (bool, ActorIdentifier, ActorData, ActorState?) ResolveTarget(AwesomeIcon icon, Vector2 buttonSize, int available)
{ {
var enumerator = _tooltipBuilder.GetChunks(); var enumerator = _tooltipBuilder.GetChunks();
@ -516,44 +532,51 @@ public sealed class DesignQuickBar : Window, IDisposable
return _keyState[key.Hotkey] && key.Modifiers.IsActive(); return _keyState[key.Hotkey] && key.Modifiers.IsActive();
} }
private float UpdateWidth() private int CalculateButtonCount(bool mainWindow)
{ {
_numButtons = 0; var numButtons = 0;
if (_config.QdbButtons.HasFlag(QdbButtons.RevertAll)) if (_config.QdbButtons.HasFlag(QdbButtons.RevertAll))
++_numButtons; ++numButtons;
if (_config.EnableAutoDesigns) if (_config.EnableAutoDesigns)
{ {
if (_config.QdbButtons.HasFlag(QdbButtons.RevertAutomation)) if (_config.QdbButtons.HasFlag(QdbButtons.RevertAutomation))
++_numButtons; ++numButtons;
if (_config.QdbButtons.HasFlag(QdbButtons.ReapplyAutomation)) if (_config.QdbButtons.HasFlag(QdbButtons.ReapplyAutomation))
++_numButtons; ++numButtons;
} }
if (_config.QdbButtons.HasFlag(QdbButtons.RevertAdvancedCustomization)) if (_config.QdbButtons.HasFlag(QdbButtons.RevertAdvancedCustomization))
++_numButtons; ++numButtons;
if (_config.QdbButtons.HasFlag(QdbButtons.RevertAdvancedDyes)) if (_config.QdbButtons.HasFlag(QdbButtons.RevertAdvancedDyes))
++_numButtons; ++numButtons;
if (_config.QdbButtons.HasFlag(QdbButtons.RevertCustomize)) if (_config.QdbButtons.HasFlag(QdbButtons.RevertCustomize))
++_numButtons; ++numButtons;
if (_config.QdbButtons.HasFlag(QdbButtons.RevertEquip)) if (_config.QdbButtons.HasFlag(QdbButtons.RevertEquip))
++_numButtons; ++numButtons;
if (_config.UseTemporarySettings && _config.QdbButtons.HasFlag(QdbButtons.ResetSettings)) if (_config.UseTemporarySettings && _config.QdbButtons.HasFlag(QdbButtons.ResetSettings))
++_numButtons; ++numButtons;
if (_config.QdbButtons.HasFlag(QdbButtons.ApplyDesign)) if (_config.QdbButtons.HasFlag(QdbButtons.ApplyDesign))
{ ++numButtons;
++_numButtons; if (!mainWindow && _config.QdbButtons.HasFlag(QdbButtons.ToggleMainWindow))
Size = new Vector2((7 + _numButtons) * Im.Style.FrameHeight + _numButtons * Im.Style.ItemInnerSpacing.X, ++numButtons;
Im.Style.FrameHeight);
}
else
{
Size = new Vector2(
_numButtons * Im.Style.FrameHeight
+ (_numButtons - 1) * Im.Style.ItemInnerSpacing.X
+ Im.Style.WindowPadding.X * 2,
Im.Style.FrameHeight);
}
return Size.Value.X; return numButtons;
}
private float CalculateWidth(int numButtons, bool mainWindow)
{
var content = _config.QdbButtons.HasFlag(QdbButtons.ApplyDesign)
? (7 + numButtons) * Im.Style.FrameHeight + numButtons * Im.Style.ItemInnerSpacing.X
: numButtons * Im.Style.FrameHeight + (numButtons - 1) * Im.Style.ItemInnerSpacing.X;
var padding = mainWindow ? 0 : Im.Style.WindowPadding.X * 2;
return content + padding;
}
private void UpdateWidth()
{
_numButtons = CalculateButtonCount(false);
var width = CalculateWidth(_numButtons, false);
Size = new Vector2(width, Im.Style.FrameHeight);
} }
} }

View file

@ -32,6 +32,7 @@ public sealed class MainWindow : Window, IDisposable
IsOpen = _config.OpenWindowAtStart; IsOpen = _config.OpenWindowAtStart;
_penumbra.DrawSettingsSection += _mainTabBar.Settings.DrawPenumbraIntegrationSettings; _penumbra.DrawSettingsSection += _mainTabBar.Settings.DrawPenumbraIntegrationSettings;
_quickBar.ToggleMainWindow += Toggle;
} }
public void OpenSettings() public void OpenSettings()
@ -49,7 +50,10 @@ public sealed class MainWindow : Window, IDisposable
} }
public void Dispose() public void Dispose()
=> _penumbra.DrawSettingsSection -= _mainTabBar.Settings.DrawPenumbraIntegrationSettings; {
_penumbra.DrawSettingsSection -= _mainTabBar.Settings.DrawPenumbraIntegrationSettings;
_quickBar.ToggleMainWindow -= Toggle;
}
public override void Draw() public override void Draw()
{ {
@ -74,7 +78,7 @@ public sealed class MainWindow : Window, IDisposable
{ {
_mainTabBar.Draw(); _mainTabBar.Draw();
if (_config.ShowQuickBarInTabs) if (_config.ShowQuickBarInTabs)
_quickBar.DrawAtEnd(yPos); _quickBar.DrawAtEnd(yPos, true);
} }
} }

View file

@ -302,6 +302,7 @@ public sealed class SettingsTab(
private readonly (StringU8, QdbButtons)[] _columns = private readonly (StringU8, QdbButtons)[] _columns =
[ [
(new StringU8("Toggle Main Window"u8), QdbButtons.ToggleMainWindow),
(new StringU8("Apply Design"u8), QdbButtons.ApplyDesign), (new StringU8("Apply Design"u8), QdbButtons.ApplyDesign),
(new StringU8("Revert All"u8), QdbButtons.RevertAll), (new StringU8("Revert All"u8), QdbButtons.RevertAll),
(new StringU8("Revert to Auto"u8), QdbButtons.RevertAutomation), (new StringU8("Revert to Auto"u8), QdbButtons.RevertAutomation),
@ -325,7 +326,7 @@ public sealed class SettingsTab(
private void DrawQuickDesignBoxes() private void DrawQuickDesignBoxes()
{ {
var showAuto = config.EnableAutoDesigns; var showAuto = config.EnableAutoDesigns;
var numColumns = 9 - (showAuto ? 0 : 2) - (config.UseTemporarySettings ? 0 : 1); var numColumns = 10 - (showAuto ? 0 : 2) - (config.UseTemporarySettings ? 0 : 1);
Im.Line.New(); Im.Line.New();
Im.Text("Show the Following Buttons in the Quick Design Bar:"u8); Im.Text("Show the Following Buttons in the Quick Design Bar:"u8);
Im.Dummy(Vector2.Zero); Im.Dummy(Vector2.Zero);