Add account manager, character reordering, and glue Lua console

Three features layered onto the Turtle WoW baseline:

- Account manager (AccountLogin.lua / .xml): saved-account list backed
  by Windows Credential Manager via ClassicAPI. Pass-through to
  LoginWithSavedAccount; per-account 'last used' timestamp; password
  field hides itself when the typed name matches a saved entry and a
  'Change password' button reveals it on demand.
- Character reordering (CharacterSelect.lua / .xml): drag-to-reorder
  the character list, persisted via ClassicAPI's
  GetSavedCharacterOrder / SetSavedCharacterOrder.
- Glue Lua console (GlueConsole.lua / .xml, new files): in-glue RunScript
  console reachable from the title and char-select screens.

Currently no key opens the console — the backtick binding was removed
pending a ClassicAPI EditBox arrow/key script handler (see TODO.md section 96).
This commit is contained in:
2026-06-22 23:32:54 -05:00
parent 13d77d77c9
commit e504f88167
6 changed files with 1940 additions and 266 deletions
+60 -24
View File
@@ -56,6 +56,12 @@
<OnDoubleClick>
CharacterSelectButton_OnDoubleClick();
</OnDoubleClick>
<OnMouseDown>
CharacterSelectButton_OnMouseDown();
</OnMouseDown>
<OnMouseUp>
CharacterSelectButton_OnMouseUp();
</OnMouseUp>
</Scripts>
<HighlightTexture file="Interface\Glues\CharacterSelect\Glue-CharacterSelect-Highlight" alphaMode="ADD">
<Size>
@@ -119,16 +125,52 @@
CharacterSelect_EnterWorld();
</OnClick>
</Scripts>
<NormalText>
<Anchors>
<Anchor point="CENTER">
<Offset>
<AbsDimension x="-1" y="3"/>
</Offset>
</Anchor>
</Anchors>
</NormalText>
</Button>
<CheckButton name="AutologinSaveCharacterButton">
<Size>
<AbsDimension x="20" y="20"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="CharSelectEnterWorldButton" relativePoint="RIGHT"/>
</Anchors>
<Layers>
<Layer level="ARTWORK">
<FontString inherits="GlueFontNormalSmall" text="Auto-login this character">
<Anchors>
<Anchor point="LEFT">
<Offset>
<AbsDimension x="24" y="0"/>
</Offset>
</Anchor>
</Anchors>
<FontHeight>
<AbsValue val="10"/>
</FontHeight>
<Shadow>
<Offset>
<AbsDimension x="1" y="-1"/>
</Offset>
<Color r="0" g="0" b="0"/>
</Shadow>
<Color r="1.0" g="0.78" b="0"/>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnClick>
if ( this:GetChecked() ) then
PlaySound("igMainMenuOptionCheckBoxOff");
else
PlaySound("igMainMenuOptionCheckBoxOn");
end
</OnClick>
</Scripts>
<NormalTexture file="Interface\Buttons\UI-CheckBox-Up"/>
<PushedTexture file="Interface\Buttons\UI-CheckBox-Down"/>
<HighlightTexture file="Interface\Buttons\UI-CheckBox-Highlight" alphaMode="ADD"/>
<CheckedTexture file="Interface\Buttons\UI-CheckBox-Check"/>
<DisabledCheckedTexture file="Interface\Buttons\UI-CheckBox-Check-Disabled"/>
</CheckButton>
<Button name="CharacterSelectRotateLeft">
<Size>
<AbsDimension x="50" y="50"/>
@@ -601,7 +643,7 @@
<Anchors>
<Anchor point="LEFT">
<Offset>
<AbsDimension x="12" y="4"/>
<AbsDimension x="12" y="10"/>
</Offset>
</Anchor>
</Anchors>
@@ -609,7 +651,7 @@
</Layer>
</Layers>
<Frames>
<Button name="CharacterDeleteButton1" inherits="GlueDialogButtonTemplate" id="1" text="CONFIRM">
<Button name="CharacterDeleteButton1" inherits="GlueDialogButtonTemplate" id="1" text="OKAY">
<Anchors>
<Anchor point="BOTTOMRIGHT" relativeTo="CharacterDeleteBackground" relativePoint="BOTTOM">
<Offset>
@@ -619,8 +661,7 @@
</Anchors>
<Scripts>
<OnClick>
DeleteCharacter(CharacterSelect.selectedIndex);
CharacterDeleteDialog:Hide();
CharacterSelect_DeleteCharacter();
PlaySound("gsTitleOptionOK");
</OnClick>
</Scripts>
@@ -690,11 +731,10 @@
else
CharacterDeleteButton1:Disable();
end
</OnTextChanged>
</OnTextChanged>
<OnEnterPressed>
if ( CharacterDeleteButton1:IsEnabled() == 1 ) then
DeleteCharacter(CharacterSelect.selectedIndex);
CharacterDeleteDialog:Hide();
CharacterSelect_DeleteCharacter();
end
</OnEnterPressed>
<OnEscapePressed>
@@ -771,7 +811,7 @@
<Anchors>
<Anchor point="LEFT">
<Offset>
<AbsDimension x="12" y="4"/>
<AbsDimension x="12" y="10"/>
</Offset>
</Anchor>
</Anchors>
@@ -779,7 +819,7 @@
</Layer>
</Layers>
<Frames>
<Button name="CharacterRenameButton1" inherits="GlueDialogButtonTemplate" id="1" text="CONFIRM">
<Button name="CharacterRenameButton1" inherits="GlueDialogButtonTemplate" id="1" text="OKAY">
<Anchors>
<Anchor point="BOTTOMRIGHT" relativeTo="CharacterRenameBackground" relativePoint="BOTTOM">
<Offset>
@@ -789,9 +829,7 @@
</Anchors>
<Scripts>
<OnClick>
if ( RenameCharacter(CharacterSelect.selectedIndex, CharacterRenameEditBox:GetText()) ) then
CharacterRenameDialog:Hide();
end
CharacterSelect_RenameCharacter();
</OnClick>
</Scripts>
</Button>
@@ -854,9 +892,7 @@
</Layers>
<Scripts>
<OnEnterPressed>
if ( RenameCharacter(CharacterSelect.selectedIndex, CharacterRenameEditBox:GetText()) ) then
CharacterRenameDialog:Hide();
end
CharacterSelect_RenameCharacter();
</OnEnterPressed>
<OnEscapePressed>
CharacterRenameDialog:Hide();