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,
ResetSettings = 0x80,
RevertAdvancedCustomization = 0x100,
ToggleMainWindow = 0x200,
}
public sealed class DesignQuickBar : Window, IDisposable
@ -45,6 +46,8 @@ public sealed class DesignQuickBar : Window, IDisposable
private int _numButtons;
private readonly StringBuilder _tooltipBuilder = new(512);
public event Action? ToggleMainWindow;
public DesignQuickBar(Configuration.Configuration config, QuickDesignCombo designCombo, StateManager stateManager, IKeyState keyState,
ActorObjectManager objects, AutoDesignApplier autoDesignApplier, PenumbraService penumbra)
: base("Glamourer Quick Bar", WindowFlags.NoDecoration | WindowFlags.NoDocking)
@ -77,38 +80,41 @@ public sealed class DesignQuickBar : Window, IDisposable
public override void PreDraw()
{
Flags = GetFlags;
UpdateWidth();
_style.Push(ImStyleDouble.WindowPadding, new Vector2(Im.Style.GlobalScale * 4))
.Push(ImStyleSingle.WindowBorderThickness, 0);
_style.Push(ImGuiColor.WindowBackground, ColorId.QuickDesignBg.Value())
.Push(ImGuiColor.Button, ColorId.QuickDesignButton.Value())
.Push(ImGuiColor.FrameBackground, ColorId.QuickDesignFrame.Value());
UpdateWidth();
}
public override void PostDraw()
=> _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);
Draw();
Draw(Im.ContentRegion.Available.X, numButtons, mainWindow);
}
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();
var spacing = Im.Style.ItemInnerSpacing;
using var style = ImStyleDouble.ItemSpacing.Push(spacing);
var buttonSize = new Vector2(Im.Style.FrameHeight);
PrepareButtons();
DrawToggleMainWindowButton(buttonSize, mainWindow);
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);
Im.Line.Same();
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)
{
var enumerator = _tooltipBuilder.GetChunks();
@ -516,44 +532,51 @@ public sealed class DesignQuickBar : Window, IDisposable
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))
++_numButtons;
++numButtons;
if (_config.EnableAutoDesigns)
{
if (_config.QdbButtons.HasFlag(QdbButtons.RevertAutomation))
++_numButtons;
++numButtons;
if (_config.QdbButtons.HasFlag(QdbButtons.ReapplyAutomation))
++_numButtons;
++numButtons;
}
if (_config.QdbButtons.HasFlag(QdbButtons.RevertAdvancedCustomization))
++_numButtons;
++numButtons;
if (_config.QdbButtons.HasFlag(QdbButtons.RevertAdvancedDyes))
++_numButtons;
++numButtons;
if (_config.QdbButtons.HasFlag(QdbButtons.RevertCustomize))
++_numButtons;
++numButtons;
if (_config.QdbButtons.HasFlag(QdbButtons.RevertEquip))
++_numButtons;
++numButtons;
if (_config.UseTemporarySettings && _config.QdbButtons.HasFlag(QdbButtons.ResetSettings))
++_numButtons;
++numButtons;
if (_config.QdbButtons.HasFlag(QdbButtons.ApplyDesign))
{
++_numButtons;
Size = new Vector2((7 + _numButtons) * Im.Style.FrameHeight + _numButtons * Im.Style.ItemInnerSpacing.X,
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);
}
++numButtons;
if (!mainWindow && _config.QdbButtons.HasFlag(QdbButtons.ToggleMainWindow))
++numButtons;
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;
_penumbra.DrawSettingsSection += _mainTabBar.Settings.DrawPenumbraIntegrationSettings;
_quickBar.ToggleMainWindow += Toggle;
}
public void OpenSettings()
@ -49,7 +50,10 @@ public sealed class MainWindow : Window, IDisposable
}
public void Dispose()
=> _penumbra.DrawSettingsSection -= _mainTabBar.Settings.DrawPenumbraIntegrationSettings;
{
_penumbra.DrawSettingsSection -= _mainTabBar.Settings.DrawPenumbraIntegrationSettings;
_quickBar.ToggleMainWindow -= Toggle;
}
public override void Draw()
{
@ -74,7 +78,7 @@ public sealed class MainWindow : Window, IDisposable
{
_mainTabBar.Draw();
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 =
[
(new StringU8("Toggle Main Window"u8), QdbButtons.ToggleMainWindow),
(new StringU8("Apply Design"u8), QdbButtons.ApplyDesign),
(new StringU8("Revert All"u8), QdbButtons.RevertAll),
(new StringU8("Revert to Auto"u8), QdbButtons.RevertAutomation),
@ -325,7 +326,7 @@ public sealed class SettingsTab(
private void DrawQuickDesignBoxes()
{
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.Text("Show the Following Buttons in the Quick Design Bar:"u8);
Im.Dummy(Vector2.Zero);