From c9379d765f2b6766bb9c7522129316ec69c56b02 Mon Sep 17 00:00:00 2001 From: HonorGoG Date: Tue, 22 Aug 2023 21:13:54 -0700 Subject: [PATCH] - Updated toc to 1.5.10.30402 for release. - Updated Ace3 and LibUIDropDownMenu libraries. --- TitanClassic/TitanClassic.toc | 4 +- .../!LibUIDropDownMenu/!LibUIDropDownMenu-BCC.toc | 12 + .../!LibUIDropDownMenu-Classic.toc | 12 + .../!LibUIDropDownMenu-WOTLKC.toc | 12 + .../libs/!LibUIDropDownMenu/!LibUIDropDownMenu.toc | 4 +- .../libs/!LibUIDropDownMenu/Docs/Revision.txt | 102 ++- .../LibUIDropDownMenu/LibUIDropDownMenu.lua | 810 +++++++++++++------- .../LibUIDropDownMenuTemplates.lua | 126 --- .../LibUIDropDownMenuTemplates.xml | 412 ---------- TitanClassic/libs/Ace3.lua | 4 +- TitanClassic/libs/Ace3.toc | 3 +- TitanClassic/libs/Ace3_TBC.toc | 28 + TitanClassic/libs/Ace3_Vanilla.toc | 28 + TitanClassic/libs/Ace3_Wrath.toc | 28 + TitanClassic/libs/AceAddon-3.0/AceAddon-3.0.lua | 171 ++--- TitanClassic/libs/AceConfig-3.0/AceConfig-3.0.lua | 4 +- .../AceConfigCmd-3.0/AceConfigCmd-3.0.lua | 165 ++-- .../AceConfigDialog-3.0/AceConfigDialog-3.0.lua | 490 +++++++----- .../AceConfigRegistry-3.0.lua | 48 +- TitanClassic/libs/AceGUI-3.0/AceGUI-3.0.lua | 92 ++- .../widgets/AceGUIContainer-BlizOptionsGroup.lua | 9 +- .../widgets/AceGUIContainer-DropDownGroup.lua | 2 +- .../AceGUI-3.0/widgets/AceGUIContainer-Frame.lua | 18 +- .../widgets/AceGUIContainer-InlineGroup.lua | 2 +- .../widgets/AceGUIContainer-TabGroup.lua | 202 ++++- .../widgets/AceGUIContainer-TreeGroup.lua | 28 +- .../AceGUI-3.0/widgets/AceGUIContainer-Window.lua | 14 +- .../AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua | 20 +- .../widgets/AceGUIWidget-ColorPicker.lua | 4 - .../widgets/AceGUIWidget-DropDown-Items.lua | 8 +- .../AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua | 13 +- .../AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua | 4 - .../AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua | 6 +- .../libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua | 16 +- .../widgets/AceGUIWidget-MultiLineEditBox.lua | 19 +- .../AceGUI-3.0/widgets/AceGUIWidget-Slider.lua | 26 +- TitanClassic/libs/AceHook-3.0/AceHook-3.0.lua | 89 ++- TitanClassic/libs/AceLocale-3.0/AceLocale-3.0.lua | 10 +- TitanClassic/libs/AceTimer-3.0/AceTimer-3.0.lua | 12 +- TitanClassic/libs/CHANGES.txt | 107 ++- .../CallbackHandler-1.0/CallbackHandler-1.0.lua | 74 +- TitanClassic/libs/LibStub/LibStub.lua | 10 +- TitanClassic/libs/Libs/AceGUI-3.0/AceGUI-3.0.lua | 505 ++++++++---- .../widgets/AceGUIContainer-BlizOptionsGroup.lua | 9 +- .../widgets/AceGUIContainer-DropDownGroup.lua | 6 +- .../AceGUI-3.0/widgets/AceGUIContainer-Frame.lua | 37 +- .../widgets/AceGUIContainer-InlineGroup.lua | 4 +- .../widgets/AceGUIContainer-ScrollFrame.lua | 33 +- .../widgets/AceGUIContainer-TabGroup.lua | 239 +++++- .../widgets/AceGUIContainer-TreeGroup.lua | 126 +-- .../AceGUI-3.0/widgets/AceGUIContainer-Window.lua | 129 ++-- .../AceGUI-3.0/widgets/AceGUIWidget-Button.lua | 6 +- .../AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua | 67 +- .../widgets/AceGUIWidget-ColorPicker.lua | 26 +- .../widgets/AceGUIWidget-DropDown-Items.lua | 160 ++-- .../AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua | 255 +++--- .../AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua | 26 +- .../AceGUI-3.0/widgets/AceGUIWidget-Heading.lua | 4 +- .../Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua | 4 +- .../widgets/AceGUIWidget-InteractiveLabel.lua | 9 +- .../AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua | 8 +- .../Libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua | 45 +- .../widgets/AceGUIWidget-MultiLineEditBox.lua | 29 +- .../AceGUI-3.0/widgets/AceGUIWidget-Slider.lua | 35 +- .../CallbackHandler-1.0/CallbackHandler-1.0.lua | 83 +- .../CallbackHandler-1.0/CallbackHandler-1.0.xml | 2 +- TitanClassic/libs/Libs/LibStub/LibStub.lua | 10 +- TitanClassic/libs/Libs/LibStub/LibStub.toc | 13 - TitanClassic/libs/README.md | 26 + TitanClassic/libs/changelog.txt | 59 +- TitanClassicAmmo/TitanClassicAmmo.toc | 4 +- TitanClassicBag/TitanClassicBag.toc | 4 +- TitanClassicClock/TitanClassicClock.toc | 4 +- TitanClassicGold/TitanClassicGold.toc | 4 +- TitanClassicLocation/TitanClassicLocation.toc | 4 +- TitanClassicLootType/TitanClassicLootType.toc | 4 +- .../TitanClassicPerformance.toc | 4 +- TitanClassicRegen/TitanClassicRegen.toc | 4 +- TitanClassicRepair/TitanClassicRepair.toc | 4 +- TitanClassicVolume/TitanClassicVolume.toc | 4 +- TitanClassicXP/TitanClassicXP.toc | 4 +- 81 files changed, 2965 insertions(+), 2282 deletions(-) create mode 100755 TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-BCC.toc create mode 100755 TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-Classic.toc create mode 100755 TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-WOTLKC.toc delete mode 100755 TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenuTemplates.lua delete mode 100755 TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenuTemplates.xml create mode 100755 TitanClassic/libs/Ace3_TBC.toc create mode 100755 TitanClassic/libs/Ace3_Vanilla.toc create mode 100755 TitanClassic/libs/Ace3_Wrath.toc mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/AceGUI-3.0.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/AceGUI-3.0.xml mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-SimpleGroup.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua mode change 100644 => 100755 TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua mode change 100644 => 100755 TitanClassic/libs/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua mode change 100644 => 100755 TitanClassic/libs/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml mode change 100644 => 100755 TitanClassic/libs/Libs/LibStub/LibStub.lua delete mode 100644 TitanClassic/libs/Libs/LibStub/LibStub.toc create mode 100755 TitanClassic/libs/README.md diff --git a/TitanClassic/TitanClassic.toc b/TitanClassic/TitanClassic.toc index 54711cc..e82e055 100644 --- a/TitanClassic/TitanClassic.toc +++ b/TitanClassic/TitanClassic.toc @@ -1,7 +1,7 @@ ## Interface: 30402 -## Title: Titan Panel Classic |cff00aa001.5.9.30402|r +## Title: Titan Panel Classic |cff00aa001.5.10.30402|r ## Author: Titan Panel Development Team -## Version: 1.5.9.30402 +## Version: 1.5.10.30402 ## SavedVariables: TitanAll, TitanSettings, TitanSkins, ServerTimeOffsets, ServerHourFormat ## OptionalDeps: Ace3, AceGUI-3.0-SharedMediaWidgets, LibSharedMedia-3.0, LibQTip-1.0, !LibUIDropDownMenu ## Notes: Adds a display bar on the top and/or bottom of the screen. Allows users to show and control information/launcher plugins. diff --git a/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-BCC.toc b/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-BCC.toc new file mode 100755 index 0000000..ff36bbd --- /dev/null +++ b/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-BCC.toc @@ -0,0 +1,12 @@ +## Interface: 20504 +## Title: Lib: UIDropDownMenu +## Notes: A Replacement for standard UIDropDownMenu +## Version: v4.21.10010550587 +## X-Category: Libraries +## X-Website: https://www.wowace.com/projects/libuidropdownmenu +## OptionalDeps: LibStub + +#@no-lib-strip@ +LibStub\LibStub.lua +#@end-no-lib-strip@ +LibUIDropDownMenu\LibUIDropDownMenu.lua diff --git a/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-Classic.toc b/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-Classic.toc new file mode 100755 index 0000000..e956a6c --- /dev/null +++ b/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-Classic.toc @@ -0,0 +1,12 @@ +## Interface: 11403 +## Title: Lib: UIDropDownMenu +## Notes: A Replacement for standard UIDropDownMenu +## Version: v4.21.10010550587 +## X-Category: Libraries +## X-Website: https://www.wowace.com/projects/libuidropdownmenu +## OptionalDeps: LibStub + +#@no-lib-strip@ +LibStub\LibStub.lua +#@end-no-lib-strip@ +LibUIDropDownMenu\LibUIDropDownMenu.lua diff --git a/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-WOTLKC.toc b/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-WOTLKC.toc new file mode 100755 index 0000000..0906c3d --- /dev/null +++ b/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu-WOTLKC.toc @@ -0,0 +1,12 @@ +## Interface: 30402 +## Title: Lib: UIDropDownMenu +## Notes: A Replacement for standard UIDropDownMenu +## Version: v4.21.10010550587 +## X-Category: Libraries +## X-Website: https://www.wowace.com/projects/libuidropdownmenu +## OptionalDeps: LibStub + +#@no-lib-strip@ +LibStub\LibStub.lua +#@end-no-lib-strip@ +LibUIDropDownMenu\LibUIDropDownMenu.lua diff --git a/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu.toc b/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu.toc index 160ceb4..cdac1cb 100755 --- a/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu.toc +++ b/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu.toc @@ -1,7 +1,7 @@ -## Interface: 90005 +## Interface: 100105 ## Title: Lib: UIDropDownMenu ## Notes: A Replacement for standard UIDropDownMenu -## Version: v4.05.9000538556 +## Version: v4.21.10010550587 ## X-Category: Libraries ## X-Website: https://www.wowace.com/projects/libuidropdownmenu ## OptionalDeps: LibStub diff --git a/TitanClassic/libs/!LibUIDropDownMenu/Docs/Revision.txt b/TitanClassic/libs/!LibUIDropDownMenu/Docs/Revision.txt index 42ab569..65875da 100755 --- a/TitanClassic/libs/!LibUIDropDownMenu/Docs/Revision.txt +++ b/TitanClassic/libs/!LibUIDropDownMenu/Docs/Revision.txt @@ -1,8 +1,106 @@ -$Id: Revision.txt 78 2021-06-14 08:29:17Z arithmandar $ +$Id: Revision.txt 123 2023-07-29 01:42:12Z arithmandar $ Revision History: ================= +v4.21.10010550587 (2023/07/29) +------------------------------ +- Toc update to support WoW 10.1.5 / 3.4.2 +- function sync with build 50587 + +v4.20.10000748520 (2023/03/20) +------------------------------ +- Toc update to support WoW 10.0.7 + +v4.19.10000047936 (2023/02/05) +------------------------------ +- Toc update to support WoW 10.0.5 / 3.4.1 + +v4.18.10000046801 (2022/11/29) +------------------------------ +- Replace SetBackdrop with backdropInfo + +v4.17.10000046801 (2022/11/29) +------------------------------ +- update backdrop template to DialogBorderDarkTemplate + - update BACKDROP_DIALOG_DARK.insets.bottom to 11 +- update menubackdrop template to TooltipBackdropTemplate + +v4.16.10000046689 (2022/11/18) +------------------------------ +- Fixing tagging error + +v4.15.10000046689 (2022/11/18) +------------------------------ +- Toc update to support WoW 10.0.2 +- Updated lib:UIDropDownMenu_JustifyText() + +v4.14.10000046455 (2022/11/04) +------------------------------ +- minor bug fix for menu icon onclick + +v4.13.10000046366 (2022/11/03) +----------------------------- +- Toc update to support WoW 10.0.0 +- function sync with build 46366 + +v4.12.9020745161 (2022/08/23) +----------------------------- +- Classic ToC update to support WoW 1.14.3 +- Release for WOLTKC + +v4.11.9020745114 (2022/08/17) +----------------------------- +- Toc update to support WoW 9.2.7 +- Added support for Wrath of the Lich King Classic (WoW 3.4.0) + +v4.10.9020542423 (2022/07/17) +----------------------------- +- Toc update to support WoW 9.2.5 +- function sync with build 44232 +- Fixed: Global Mouse Down making menu not toggle properly from the button (TeeloJubeithos) + +v4.09.9020042698 (2022/03/23) +----------------------------- +- BCC ToC update to support WoW 2.5.4 + +v4.09.9020042488 (2022/02/28) +----------------------------- +- Fixed issue while in Classic or BCC in counting maximum buttons + +v4.08.9020042423 (2022/02/23) +----------------------------- +- Toc update to support WoW 9.2.0 +- function sync with build 42423 + +v4.07.9020042277 (2022/02/13) +----------------------------- +- function sync with build 42277 +- enhanced the auto hide feature in ClassicEra and Classic TBC + +v4.07.9020042257 (2022/02/10) +----------------------------- +- function sync with build 42257 +- BCC ToC update to support WoW 2.5.3 +- Classic ToC update to support WoW 1.14.2 + +v4.07.9020042174 (2022/02/09) +----------------------------- +- Support multiple ToC +- BCC ToC update to support WoW 2.5.3 +- Classic ToC update to support WoW 1.14.1 + +v4.07.9020042069 (2022/01/26) +----------------------------- +- Toc update to support WoW 9.1.5 +- function sync with build 42069 +- fixed the issue that backdrop was not properly set + +v4.06.9010039185 (2021/06/30) +----------------------------- +- Toc update to support WoW 9.1.0 +- function sync with build 39185 + v4.05.9000538556 (2021/06/14) ----------------------------- - Rework on dropdown menu's audo-hide @@ -26,7 +124,7 @@ v4.01.9000236639 (2020/12/14) v4.00.9000236639 (2020/11/22) ----------------------------- -- Toc update to suppport WoW 9.0.2 +- Toc update to support WoW 9.0.2 - LibUIDropDownMenu - Set major version to 4.0 - Migrate all global functions to be under library tables diff --git a/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenu.lua b/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenu.lua index cbbddc9..6617c58 100755 --- a/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenu.lua +++ b/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenu.lua @@ -1,4 +1,4 @@ --- $Id: LibUIDropDownMenu.lua 78 2021-06-14 08:29:17Z arithmandar $ +-- $Id: LibUIDropDownMenu.lua 123 2023-07-29 01:42:12Z arithmandar $ -- ---------------------------------------------------------------------------- -- Localized Lua globals. -- ---------------------------------------------------------------------------- @@ -18,7 +18,7 @@ local GameTooltip_SetTitle, GameTooltip_AddInstructionLine, GameTooltip_AddNorma -- ---------------------------------------------------------------------------- local MAJOR_VERSION = "LibUIDropDownMenu-4.0" -local MINOR_VERSION = 90000 + tonumber(("$Rev: 78 $"):match("%d+")) +local MINOR_VERSION = 90000 + tonumber(("$Rev: 123 $"):match("%d+")) local LibStub = _G.LibStub @@ -27,17 +27,22 @@ local lib = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION) if not lib then return end -- Determine WoW TOC Version -local WoWClassicEra, WoWClassicTBC, WoWRetail -local wowtocversion = select(4, GetBuildInfo()) -if wowtocversion < 20000 then +local WoWClassicEra, WoWClassicTBC, WoWWOTLKC, WoWRetail +local wowversion = select(4, GetBuildInfo()) +if wowversion < 20000 then WoWClassicEra = true -elseif wowtocversion > 19999 and wowtocversion < 90000 then +elseif wowversion < 30000 then WoWClassicTBC = true -else +elseif wowversion < 40000 then + WoWWOTLKC = true +elseif wowversion > 90000 then WoWRetail = true + +else + -- n/a end -if WoWClassicEra or WoWClassicTBC then +if WoWClassicEra or WoWClassicTBC or WoWWOTLKC then GameTooltip = _G.GameTooltip tooltip = GameTooltip else -- Retail @@ -47,8 +52,9 @@ else -- Retail end -- ////////////////////////////////////////////////////////////// +L_UIDROPDOWNMENU_MINBUTTONS = 8; -- classic only L_UIDROPDOWNMENU_MAXBUTTONS = 1; -L_UIDROPDOWNMENU_MAXLEVELS = 2; +L_UIDROPDOWNMENU_MAXLEVELS = 3; L_UIDROPDOWNMENU_BUTTON_HEIGHT = 16; L_UIDROPDOWNMENU_BORDER_HEIGHT = 15; -- The current open menu @@ -63,10 +69,14 @@ L_UIDROPDOWNMENU_MENU_VALUE = nil; L_UIDROPDOWNMENU_SHOW_TIME = 2; -- Default dropdown text height L_UIDROPDOWNMENU_DEFAULT_TEXT_HEIGHT = nil; +-- For Classic checkmarks, this is the additional padding that we give to the button text. +L_UIDROPDOWNMENU_CLASSIC_CHECK_PADDING = 4; +-- Default dropdown width padding +L_UIDROPDOWNMENU_DEFAULT_WIDTH_PADDING = 25; -- List of open menus L_OPEN_DROPDOWNMENUS = {}; -local L_DropDownList1, L_DropDownList2 +local L_DropDownList1, L_DropDownList2, L_DropDownList3 local delegateFrame = CreateFrame("FRAME"); delegateFrame:SetScript("OnAttributeChanged", function(self, attribute, value) @@ -104,9 +114,178 @@ function lib:UIDropDownMenu_InitializeHelper(frame) end frame:SetHeight(L_UIDROPDOWNMENU_BUTTON_HEIGHT * 2); end + +function lib:UIDropDownMenuButton_ShouldShowIconTooltip(self) + if self.Icon and (self.iconTooltipTitle or self.iconTooltipText) and (self.icon or self.mouseOverIcon) then + return GetMouseFocus() == self.Icon; + end + return false; +end + + -- ////////////////////////////////////////////////////////////// -- L_UIDropDownMenuButtonTemplate local function create_MenuButton(name, parent) + -- UIDropDownMenuButton Scripts BEGIN + local function button_OnEnter(self) + if ( self.hasArrow ) then + local level = self:GetParent():GetID() + 1; + local listFrame = _G["L_DropDownList"..level]; + if ( not listFrame or not listFrame:IsShown() or select(2, listFrame:GetPoint(1)) ~= self ) then + lib:ToggleDropDownMenu(self:GetParent():GetID() + 1, self.value, nil, nil, nil, nil, self.menuList, self, nil, self.menuListDisplayMode); + end + else + lib:CloseDropDownMenus(self:GetParent():GetID() + 1); + end + self.Highlight:Show(); + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + lib:UIDropDownMenu_StopCounting(self:GetParent()); + end + -- To check: do we need special handle for classic since there is no UIDropDownMenuButton_ShouldShowIconTooltip()? + -- if ( self.tooltipTitle and not self.noTooltipWhileEnabled ) then + if ( self.tooltipTitle and not self.noTooltipWhileEnabled and not lib:UIDropDownMenuButton_ShouldShowIconTooltip(self)) then + if ( self.tooltipOnButton ) then + tooltip:SetOwner(self, "ANCHOR_RIGHT"); + GameTooltip_SetTitle(tooltip, self.tooltipTitle); + if self.tooltipInstruction then + GameTooltip_AddInstructionLine(tooltip, self.tooltipInstruction); + end + if self.tooltipText then + GameTooltip_AddNormalLine(tooltip, self.tooltipText, true); + end + if self.tooltipWarning then + GameTooltip_AddColoredLine(tooltip, self.tooltipWarning, RED_FONT_COLOR, true); + end + if self.tooltipBackdropStyle then + SharedTooltip_SetBackdropStyle(tooltip, self.tooltipBackdropStyle); + end + tooltip:Show(); + end + end + + if ( self.mouseOverIcon ~= nil ) then + self.Icon:SetTexture(self.mouseOverIcon); + self.Icon:Show(); + end + if (WoWRetail) then + GetValueOrCallFunction(self, "funcOnEnter", self); + end + end + + local function button_OnLeave(self) + self.Highlight:Hide(); + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + lib:UIDropDownMenu_StartCounting(self:GetParent()); + end + + tooltip:Hide(); + + if ( self.mouseOverIcon ~= nil ) then + if ( self.icon ~= nil ) then + self.Icon:SetTexture(self.icon); + else + self.Icon:Hide(); + end + end + + if (WoWRetail) then + GetValueOrCallFunction(self, "funcOnLeave", self); + end + end + + local function button_OnClick(self, button) + local checked = self.checked; + if ( type (checked) == "function" ) then + checked = checked(self); + end + + if ( self.keepShownOnClick ) then + if not self.notCheckable then + if ( checked ) then + _G[self:GetName().."Check"]:Hide(); + _G[self:GetName().."UnCheck"]:Show(); + checked = false; + else + _G[self:GetName().."Check"]:Show(); + _G[self:GetName().."UnCheck"]:Hide(); + checked = true; + end + end + else + self:GetParent():Hide(); + end + + if ( type (self.checked) ~= "function" ) then + self.checked = checked; + end + + -- saving this here because func might use a dropdown, changing this self's attributes + local playSound = true; + if ( self.noClickSound ) then + playSound = false; + end + + local func = self.func; + if ( func ) then + func(self, self.arg1, self.arg2, checked, button); + else + return; + end + + if ( playSound ) then + PlaySound(SOUNDKIT.U_CHAT_SCROLL_BUTTON); + end + end + -- UIDropDownMenuButton Scripts END + + -- UIDropDownMenuButtonIcon Script BEGIN + local function icon_OnClick(self, button) + local button = self:GetParent() + if not button then + return + end + button_OnClick(self, button) + end + + local function icon_OnEnter(self) + local button = self:GetParent(); + if not button then + return; + end + + local shouldShowIconTooltip = lib:UIDropDownMenuButton_ShouldShowIconTooltip(button); + + if shouldShowIconTooltip then + tooltip:SetOwner(button, "ANCHOR_RIGHT"); + if button.iconTooltipTitle then + GameTooltip_SetTitle(tooltip, button.iconTooltipTitle); + end + if button.iconTooltipText then + GameTooltip_AddNormalLine(tooltip, button.iconTooltipText, true); + end + if button.iconTooltipBackdropStyle then + SharedTooltip_SetBackdropStyle(tooltip, button.iconTooltipBackdropStyle); + end + tooltip:Show(); + end + button_OnEnter(button); + end + + local function icon_OnLeave(self) + local button = self:GetParent(); + if not button then + return; + end + + button_OnLeave(button); + end + local function icon_OnMouseUp(self, button) + if ( button == "LeftButton" ) then + icon_OnClick(self, button) + end + end + -- UIDropDownMenuButtonIcon Script END + local f = CreateFrame("Button", name, parent or nil) f:SetWidth(100) f:SetHeight(16) @@ -117,7 +296,7 @@ local function create_MenuButton(name, parent) f.Highlight:SetBlendMode("ADD") f.Highlight:SetAllPoints() f.Highlight:Hide() - + f.Check = f:CreateTexture(name.."Check", "ARTWORK") f.Check:SetTexture("Interface\\Common\\UI-DropDownRadioChecks") f.Check:SetSize(16, 16) @@ -129,12 +308,25 @@ local function create_MenuButton(name, parent) f.UnCheck:SetSize(16, 16) f.UnCheck:SetPoint("LEFT", f, 0, 0) f.UnCheck:SetTexCoord(0.5, 1, 0.5, 1) - - f.Icon = f:CreateTexture(name.."Icon", "ARTWORK") - f.Icon:SetSize(16, 16) - f.Icon:SetPoint("RIGHT", f, 0, 0) - f.Icon:Hide() - + + local fIcon + fIcon = f:CreateTexture(name.."Icon", "ARTWORK") + fIcon:SetSize(16, 16) + fIcon:SetPoint("RIGHT", f, 0, 0) + fIcon:Hide() + if (WoWRetail) then + fIcon:SetScript("OnEnter", function(self) + icon_OnEnter(self) + end) + fIcon:SetScript("OnLeave", function(self) + icon_OnLeave(self) + end) + fIcon:SetScript("OnMouseUp", function(self, button) + icon_OnMouseUp(self, button) + end) + end + f.Icon = fIcon + -- ColorSwatch local fcw fcw = CreateFrame("Button", name.."ColorSwatch", f, BackdropTemplateMixin and DropDownMenuButtonMixin and "BackdropTemplate,ColorSwatchTemplate" or BackdropTemplateMixin and "BackdropTemplate" or nil) @@ -166,7 +358,7 @@ local function create_MenuButton(name, parent) lib:UIDropDownMenu_StartCounting(self:GetParent():GetParent()) end) f.ColorSwatch = fcw - + -- ExpandArrow local fea = CreateFrame("Button", name.."ExpandArrow", f) @@ -206,6 +398,9 @@ local function create_MenuButton(name, parent) fib:SetPoint("BOTTOMLEFT", f, 0, 0) fib:SetPoint("RIGHT", fcw, "LEFT", 0, 0) fib:SetScript("OnEnter", function(self, motion) + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + lib:UIDropDownMenu_StopCounting(self:GetParent():GetParent()); + end lib:CloseDropDownMenus(self:GetParent():GetParent():GetID() + 1); local parent = self:GetParent(); if ( parent.tooltipTitle and parent.tooltipWhileDisabled) then @@ -221,115 +416,23 @@ local function create_MenuButton(name, parent) if parent.tooltipWarning then GameTooltip_AddColoredLine(tooltip, parent.tooltipWarning, RED_FONT_COLOR, true); end + if parent.tooltipBackdropStyle then + SharedTooltip_SetBackdropStyle(tooltip, parent.tooltipBackdropStyle); + end tooltip:Show(); end end end) fib:SetScript("OnLeave", function(self, motion) - lib:UIDropDownMenu_StartCounting(self:GetParent():GetParent()); + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + lib:UIDropDownMenu_StartCounting(self:GetParent():GetParent()); + end tooltip:Hide(); end) f.invisibleButton = fib - -- UIDropDownMenuButton Scripts - local function button_OnEnter(self) - if ( self.hasArrow ) then - local level = self:GetParent():GetID() + 1; - local listFrame = _G["L_DropDownList"..level]; - if ( not listFrame or not listFrame:IsShown() or select(2, listFrame:GetPoint()) ~= self ) then - lib:ToggleDropDownMenu(self:GetParent():GetID() + 1, self.value, nil, nil, nil, nil, self.menuList, self); - end - else - lib:CloseDropDownMenus(self:GetParent():GetID() + 1); - end - self.Highlight:Show(); - lib:UIDropDownMenu_StopCounting(self:GetParent()); - - if ( self.tooltipTitle and not self.noTooltipWhileEnabled ) then - if ( self.tooltipOnButton ) then - tooltip:SetOwner(self, "ANCHOR_RIGHT"); - GameTooltip_SetTitle(tooltip, self.tooltipTitle); - if self.tooltipText then - GameTooltip_AddNormalLine(tooltip, self.tooltipText, true); - end - tooltip:Show(); - end - end - - if ( self.mouseOverIcon ~= nil ) then - self.Icon:SetTexture(self.mouseOverIcon); - self.Icon:Show(); - end - if WoWRetail then - GetValueOrCallFunction(self, "funcOnEnter", self); - end - end - - local function button_OnLeave(self) - self.Highlight:Hide(); - lib:UIDropDownMenu_StartCounting(self:GetParent()); - - tooltip:Hide(); - - if ( self.mouseOverIcon ~= nil ) then - if ( self.icon ~= nil ) then - self.Icon:SetTexture(self.icon); - else - self.Icon:Hide(); - end - end - - if WoWRetail then - GetValueOrCallFunction(self, "funcOnLeave", self); - end - end - - local function button_OnClick(self) - local checked = self.checked; - if ( type (checked) == "function" ) then - checked = checked(self); - end - - if ( self.keepShownOnClick ) then - if not self.notCheckable then - if ( checked ) then - _G[self:GetName().."Check"]:Hide(); - _G[self:GetName().."UnCheck"]:Show(); - checked = false; - else - _G[self:GetName().."Check"]:Show(); - _G[self:GetName().."UnCheck"]:Hide(); - checked = true; - end - end - else - self:GetParent():Hide(); - end - - if ( type (self.checked) ~= "function" ) then - self.checked = checked; - end - - -- saving this here because func might use a dropdown, changing this self's attributes - local playSound = true; - if ( self.noClickSound ) then - playSound = false; - end - - local func = self.func; - if ( func ) then - func(self, self.arg1, self.arg2, checked); - else - return; - end - - if ( playSound ) then - PlaySound(SOUNDKIT.U_CHAT_SCROLL_BUTTON); - end - end - - f:SetScript("OnClick", function(self, button, down) - button_OnClick(self, button, down) + f:SetScript("OnClick", function(self, button) + button_OnClick(self, button) end) f:SetScript("OnEnter", function(self, motion) button_OnEnter(self) @@ -356,57 +459,60 @@ end -- ////////////////////////////////////////////////////////////// -- L_UIDropDownListTemplate -local BACKDROP_DIALOG_DARK = { +local function creatre_DropDownList(name, parent) + -- This has been removed from Backdrop.lua, so we added the definition here. + local BACKDROP_DIALOG_DARK = { bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background-Dark", edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, + tileEdge = true, tileSize = 32, edgeSize = 32, - insets = { left = 11, right = 12, top = 12, bottom = 9, }, -} -local back_drop_info = - { - bgFile="Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile="Interface\\Tooltips\\UI-Tooltip-Border", + insets = { left = 11, right = 12, top = 12, bottom = 11, }, + } + local BACKDROP_TOOLTIP_16_16_5555 = { + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileEdge = true, - insets = { left = 1, right = 1, top = 1, bottom = 1 }, - tileSize = 8, - edgeSize = 8, + tileSize = 16, + edgeSize = 16, + insets = { left = 5, right = 5, top = 5, bottom = 5 }, } - -local function creatre_DropDownList(name, parent) + local f = _G[name] or CreateFrame("Button", name) f:SetParent(parent or nil) f:Hide() f:SetFrameStrata("DIALOG") f:EnableMouse(true) - - --local fbd = _G[name.."Border"] or CreateFrame("Frame", name.."Border", f, BackdropTemplateMixin and "DialogBorderDarkTemplate" or nil) - local fbd = _G[name.."Border"] or CreateFrame("Frame", name.."Border", f, BackdropTemplateMixin and "BackdropTemplate" or nil) + + local fbd = _G[name.."Backdrop"] or CreateFrame("Frame", name.."Backdrop", f, BackdropTemplateMixin and "DialogBorderDarkTemplate" or nil) fbd:SetAllPoints() - fbd:SetBackdrop(BACKDROP_DIALOG_DARK) - f.Border = fbd - - --local fmb = _G[name.."MenuBackdrop"] or CreateFrame("Frame", name.."MenuBackdrop", f, BackdropTemplateMixin and "TooltipBackdropTemplate" or nil) - local fmb = _G[name.."MenuBackdrop"] or CreateFrame("Frame", name.."MenuBackdrop", f, BackdropTemplateMixin and "BackdropTemplate" or nil) + fbd.backdropInfo = BACKDROP_DIALOG_DARK + f.Backdrop = fbd + + local fmb = _G[name.."MenuBackdrop"] or CreateFrame("Frame", name.."MenuBackdrop", f, TooltipBackdropTemplateMixin and "TooltipBackdropTemplate" or nil) fmb:SetAllPoints() - fmb:SetBackdrop(back_drop_info) + fmb.backdropInfo = BACKDROP_TOOLTIP_16_16_5555 fmb:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b) fmb:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b) f.MenuBackdrop = fmb - - f.Button1 = _G[name.."Button1"] or create_MenuButton(name.."Button1", f) + + f.Button1 = _G[name.."Button1"] or create_MenuButton(name.."Button1", f) -- to replace the inherits of "UIDropDownMenuButtonTemplate" f.Button1:SetID(1) - + f:SetScript("OnClick", function(self) self:Hide() end) f:SetScript("OnEnter", function(self, motion) - lib:UIDropDownMenu_StopCounting(self, motion) + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + lib:UIDropDownMenu_StopCounting(self, motion) + end end) f:SetScript("OnLeave", function(self, motion) - lib:UIDropDownMenu_StartCounting(self, motion) + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + lib:UIDropDownMenu_StartCounting(self, motion) + end end) -- If dropdown is visible then see if its timer has expired, if so hide the frame f:SetScript("OnUpdate", function(self, elapsed) @@ -414,14 +520,16 @@ local function creatre_DropDownList(name, parent) lib:UIDropDownMenu_RefreshDropDownSize(self); self.shouldRefresh = false; end - if ( not self.showTimer or not self.isCounting ) then - return; - elseif ( self.showTimer < 0 ) then - self:Hide(); - self.showTimer = nil; - self.isCounting = nil; - else - self.showTimer = self.showTimer - elapsed; + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + if ( not self.showTimer or not self.isCounting ) then + return; + elseif ( self.showTimer < 0 ) then + self:Hide(); + self.showTimer = nil; + self.isCounting = nil; + else + self.showTimer = self.showTimer - elapsed; + end end end) f:SetScript("OnShow", function(self) @@ -439,20 +547,13 @@ local function creatre_DropDownList(name, parent) if (not self.noResize) then self:SetWidth(self.maxWidth+25); end - self.showTimer = nil; + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + self.showTimer = nil; + end if ( self:GetID() > 1 ) then self.parent = _G["L_DropDownList"..(self:GetID() - 1)]; end ---[[ - -- codes by DahkCeles - if (WoWClassicEra or WoWClassicTBC) then - self.hideTimer = self.hideTimer or C_Timer.NewTicker(L_UIDROPDOWNMENU_SHOW_TIME, function() - if (GetMouseFocus() ~= self) then - self:Hide(); - end - end) - end -]] + EventRegistry:TriggerEvent("UIDropDownMenu.Show", self); end) f:SetScript("OnHide", function(self) local id = self:GetID() @@ -460,28 +561,20 @@ local function creatre_DropDownList(name, parent) self.onHide(id+1); self.onHide = nil; end + if ( self.baseFrameStrata ) then + self:SetFrameStrata(self.baseFrameStrata); + self.baseFrameStrata = nil; + end lib:CloseDropDownMenus(id+1); L_OPEN_DROPDOWNMENUS[id] = nil; if (id == 1) then L_UIDROPDOWNMENU_OPEN_MENU = nil; end - if self.customFrames then - for index, frame in ipairs(self.customFrames) do - frame:Hide(); - end - - self.customFrames = nil; - end ---[[ - -- codes by DahkCeles - if (self.hideTimer) then - self.hideTimer:Cancel(); - self.hideTimer = nil; - end -]] + lib:UIDropDownMenu_ClearCustomFrames(self); + EventRegistry:TriggerEvent("UIDropDownMenu.Hide"); end) - + return f end @@ -495,70 +588,71 @@ local function create_DropDownMenu(name, parent) else f = CreateFrame("Frame", name, parent or nil) end - + if not name then name = "" end - + f:SetSize(40, 32) - + f.Left = f:CreateTexture(name.."Left", "ARTWORK") f.Left:SetTexture("Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame") f.Left:SetSize(25, 64) f.Left:SetPoint("TOPLEFT", f, 0, 17) f.Left:SetTexCoord(0, 0.1953125, 0, 1) - + f.Middle = f:CreateTexture(name.."Middle", "ARTWORK") f.Middle:SetTexture("Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame") f.Middle:SetSize(115, 64) f.Middle:SetPoint("LEFT", f.Left, "RIGHT") f.Middle:SetTexCoord(0.1953125, 0.8046875, 0, 1) - + f.Right = f:CreateTexture(name.."Right", "ARTWORK") f.Right:SetTexture("Interface\\Glues\\CharacterCreate\\CharacterCreate-LabelFrame") f.Right:SetSize(25, 64) f.Right:SetPoint("LEFT", f.Middle, "RIGHT") f.Right:SetTexCoord(0.8046875, 1, 0, 1) - + f.Text = f:CreateFontString(name.."Text", "ARTWORK", "GameFontHighlightSmall") f.Text:SetWordWrap(false) f.Text:SetJustifyH("RIGHT") f.Text:SetSize(0, 10) f.Text:SetPoint("RIGHT", f.Right, -43, 2) - + f.Icon = f:CreateTexture(name.."Icon", "OVERLAY") f.Icon:Hide() f.Icon:SetSize(16, 16) f.Icon:SetPoint("LEFT", 30, 2) - + + -- // UIDropDownMenuButtonScriptTemplate f.Button = CreateFrame("Button", name.."Button", f) f.Button:SetMotionScriptsWhileDisabled(true) f.Button:SetSize(24, 24) f.Button:SetPoint("TOPRIGHT", f.Right, -16, -18) - + f.Button.NormalTexture = f.Button:CreateTexture(name.."NormalTexture") f.Button.NormalTexture:SetTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Up") f.Button.NormalTexture:SetSize(24, 24) f.Button.NormalTexture:SetPoint("RIGHT", f.Button, 0, 0) f.Button:SetNormalTexture(f.Button.NormalTexture) - + f.Button.PushedTexture = f.Button:CreateTexture(name.."PushedTexture") f.Button.PushedTexture:SetTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Down") f.Button.PushedTexture:SetSize(24, 24) f.Button.PushedTexture:SetPoint("RIGHT", f.Button, 0, 0) f.Button:SetPushedTexture(f.Button.PushedTexture) - + f.Button.DisabledTexture = f.Button:CreateTexture(name.."DisabledTexture") f.Button.DisabledTexture:SetTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Disabled") f.Button.DisabledTexture:SetSize(24, 24) f.Button.DisabledTexture:SetPoint("RIGHT", f.Button, 0, 0) f.Button:SetDisabledTexture(f.Button.DisabledTexture) - + f.Button.HighlightTexture = f.Button:CreateTexture(name.."HighlightTexture") f.Button.HighlightTexture:SetTexture("Interface\\Buttons\\UI-Common-MouseHilight") f.Button.HighlightTexture:SetSize(24, 24) f.Button.HighlightTexture:SetPoint("RIGHT", f.Button, 0, 0) f.Button.HighlightTexture:SetBlendMode("ADD") f.Button:SetHighlightTexture(f.Button.HighlightTexture) - + -- Button Script f.Button:SetScript("OnEnter", function(self, motion) local parent = self:GetParent() @@ -576,17 +670,17 @@ local function create_DropDownMenu(name, parent) end) f.Button:SetScript("OnMouseDown", function(self, button) if self:IsEnabled() then - local parent = self:GetParent() - lib:ToggleDropDownMenu(nil, nil, parent) - PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON) + local parent = self:GetParent() + lib:ToggleDropDownMenu(nil, nil, parent) + PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON) end end) - + -- UIDropDownMenu Script f:SetScript("OnHide", function(self) lib:CloseDropDownMenus() end) - + return f end -- End of frame templates @@ -603,7 +697,7 @@ local function create_DropDownButtons() L_DropDownList1:SetSize(180, 10) local _, fontHeight, _ = _G["L_DropDownList1Button1NormalText"]:GetFont() L_UIDROPDOWNMENU_DEFAULT_TEXT_HEIGHT = fontHeight - + L_DropDownList2 = creatre_DropDownList("L_DropDownList2") L_DropDownList2:SetToplevel(true) L_DropDownList2:SetFrameStrata("FULLSCREEN_DIALOG") @@ -611,19 +705,28 @@ local function create_DropDownButtons() L_DropDownList2:SetID(2) L_DropDownList2:SetSize(180, 10) + L_DropDownList3 = creatre_DropDownList("L_DropDownList3") + L_DropDownList3:SetToplevel(true) + L_DropDownList3:SetFrameStrata("FULLSCREEN_DIALOG") + L_DropDownList3:Hide() + L_DropDownList3:SetID(3) + L_DropDownList3:SetSize(180, 10) + -- UIParent integration; since we customize the name of DropDownList, we need to add it to golbal UIMenus table. --tinsert(UIMenus, "L_DropDownList1"); --tinsert(UIMenus, "L_DropDownList2"); - + --tinsert(UIMenus, "L_DropDownList3"); + -- Alternative by Dahk Celes (DDC) that avoids tainting UIMenus and CloseMenus() hooksecurefunc("CloseMenus", function() L_DropDownList1:Hide() L_DropDownList2:Hide() + L_DropDownList3:Hide() end) end do - if lib then + if lib then create_DropDownButtons() end end @@ -695,6 +798,10 @@ function lib:UIDropDownMenu_SetDisplayMode(frame, displayMode) end end +function lib:UIDropDownMenu_SetFrameStrata(frame, frameStrata) + frame.listFrameStrata = frameStrata; +end + function lib:UIDropDownMenu_RefreshDropDownSize(self) self.maxWidth = lib:UIDropDownMenu_GetMaxButtonWidth(self); self:SetWidth(self.maxWidth + 25); @@ -740,6 +847,7 @@ info.isTitle = [nil, true] -- If it's a title the button is disabled and the f info.disabled = [nil, true] -- Disable the button and show an invisible button that still traps the mouseover event so menu doesn't time out info.tooltipWhileDisabled = [nil, 1] -- Show the tooltip, even when the button is disabled. info.hasArrow = [nil, true] -- Show the expand arrow for multilevel menus +info.arrowXOffset = [nil, NUMBER] -- Number of pixels to shift the button's icon to the left or right (positive numbers shift right, negative numbers shift left). info.hasColorSwatch = [nil, true] -- Show color swatch or not, for color selection info.r = [1 - 255] -- Red color value of the color swatch info.g = [1 - 255] -- Green color value of the color swatch @@ -756,20 +864,31 @@ info.owner = [Frame] -- Dropdown frame that "owns" the current dropdownlist info.keepShownOnClick = [nil, 1] -- Don't hide the dropdownlist after a button is clicked info.tooltipTitle = [nil, STRING] -- Title of the tooltip shown on mouseover info.tooltipText = [nil, STRING] -- Text of the tooltip shown on mouseover +info.tooltipWarning = [nil, STRING] -- Warning-style text of the tooltip shown on mouseover +info.tooltipInstruction = [nil, STRING] -- Instruction-style text of the tooltip shown on mouseover info.tooltipOnButton = [nil, 1] -- Show the tooltip attached to the button instead of as a Newbie tooltip. +info.tooltipBackdropStyle = [nil, TABLE] -- Optional Backdrop style of the tooltip shown on mouseover info.justifyH = [nil, "CENTER"] -- Justify button text info.arg1 = [ANYTHING] -- This is the first argument used by info.func info.arg2 = [ANYTHING] -- This is the second argument used by info.func info.fontObject = [FONT] -- font object replacement for Normal and Highlight -info.menuTable = [TABLE] -- This contains an array of info tables to be displayed as a child menu +info.menuList = [TABLE] -- This contains an array of info tables to be displayed as a child menu +info.menuListDisplayMode = [nil, "MENU"] -- If menuList is set, show the sub drop down with an override display mode. info.noClickSound = [nil, 1] -- Set to 1 to suppress the sound when clicking the button. The sound only plays if .func is set. info.padding = [nil, NUMBER] -- Number of pixels to pad the text on the right side +info.topPadding = [nil, NUMBER] -- Extra spacing between buttons. info.leftPadding = [nil, NUMBER] -- Number of pixels to pad the button on the left side info.minWidth = [nil, NUMBER] -- Minimum width for this line info.customFrame = frame -- Allows this button to be a completely custom frame, should inherit from UIDropDownCustomMenuEntryTemplate and override appropriate methods. info.icon = [TEXTURE] -- An icon for the button. +info.iconXOffset = [nil, NUMBER] -- Number of pixels to shift the button's icon to the left or right (positive numbers shift right, negative numbers shift left). +info.iconTooltipTitle = [nil, STRING] -- Title of the tooltip shown on icon mouseover +info.iconTooltipText = [nil, STRING] -- Text of the tooltip shown on icon mouseover +info.iconTooltipBackdropStyle = [nil, TABLE] -- Optional Backdrop style of the tooltip shown on icon mouseover info.mouseOverIcon = [TEXTURE] -- An override icon when a button is moused over. info.ignoreAsMenuSelection [nil, true] -- Never set the menu text/icon to this, even when this button is checked +info.registerForRightClick [nil, true] -- Register dropdown buttons for right clicks +info.registerForAnyClick [nil, true] -- Register dropdown buttons for any clicks ]] -- Create (return) empty table @@ -788,6 +907,7 @@ function lib:UIDropDownMenu_CreateFrames(level, index) newList:SetID(L_UIDROPDOWNMENU_MAXLEVELS); newList:SetWidth(180) newList:SetHeight(10) +-- for i = WoWRetail and 1 or (L_UIDROPDOWNMENU_MINBUTTONS+1), L_UIDROPDOWNMENU_MAXBUTTONS do for i=1, L_UIDROPDOWNMENU_MAXBUTTONS do --local newButton = CreateFrame("Button", "L_DropDownList"..L_UIDROPDOWNMENU_MAXLEVELS.."Button"..i, newList, "L_UIDropDownMenuButtonTemplate"); local newButton = create_MenuButton("L_DropDownList"..L_UIDROPDOWNMENU_MAXLEVELS.."Button"..i, newList) @@ -890,6 +1010,14 @@ function lib:UIDropDownMenu_AddButton(info, level) invisibleButton:Hide(); button:Enable(); + if ( info.registerForAnyClick ) then + button:RegisterForClicks("AnyUp"); + elseif ( info.registerForRightClick ) then + button:RegisterForClicks("LeftButtonUp", "RightButtonUp"); + else + button:RegisterForClicks("LeftButtonUp"); + end + -- If not clickable then disable the button and set it white if ( info.notClickable ) then info.disabled = true; @@ -926,9 +1054,19 @@ function lib:UIDropDownMenu_AddButton(info, level) -- Set icon if ( info.icon or info.mouseOverIcon ) then icon:SetSize(16,16); - icon:SetTexture(info.icon); - icon:ClearAllPoints(); - icon:SetPoint("RIGHT"); + if (WoWRetail) then + if(info.icon and C_Texture.GetAtlasInfo(info.icon)) then + icon:SetAtlas(info.icon); + else + icon:SetTexture(info.icon); + end + icon:ClearAllPoints(); + icon:SetPoint("RIGHT", info.iconXOffset or 0, 0); + else + icon:SetTexture(info.icon); + icon:ClearAllPoints(); + icon:SetPoint("RIGHT"); + end if ( info.tCoordLeft ) then icon:SetTexCoord(info.tCoordLeft, info.tCoordRight, info.tCoordTop, info.tCoordBottom); @@ -976,6 +1114,12 @@ function lib:UIDropDownMenu_AddButton(info, level) button.func = info.func; button.funcOnEnter = info.funcOnEnter; button.funcOnLeave = info.funcOnLeave; + if (WoWRetail) then + button.iconXOffset = info.iconXOffset; + button.ignoreAsMenuSelection = info.ignoreAsMenuSelection; + else + button.classicChecks = info.classicChecks; + end button.owner = info.owner; button.hasOpacity = info.hasOpacity; button.opacity = info.opacity; @@ -990,9 +1134,11 @@ function lib:UIDropDownMenu_AddButton(info, level) button.arg1 = info.arg1; button.arg2 = info.arg2; button.hasArrow = info.hasArrow; + button.arrowXOffset = info.arrowXOffset; button.hasColorSwatch = info.hasColorSwatch; button.notCheckable = info.notCheckable; button.menuList = info.menuList; + button.menuListDisplayMode = info.menuListDisplayMode; button.tooltipWhileDisabled = info.tooltipWhileDisabled; button.noTooltipWhileEnabled = info.noTooltipWhileEnabled; button.tooltipOnButton = info.tooltipOnButton; @@ -1000,9 +1146,18 @@ function lib:UIDropDownMenu_AddButton(info, level) button.padding = info.padding; button.icon = info.icon; button.mouseOverIcon = info.mouseOverIcon; - button.ignoreAsMenuSelection = info.ignoreAsMenuSelection; + if (WoWRetail) then + button.tooltipBackdropStyle = info.tooltipBackdropStyle; + button.iconTooltipTitle = info.iconTooltipTitle; + button.iconTooltipText = info.iconTooltipText; + button.iconTooltipBackdropStyle = info.iconTooltipBackdropStyle; + button.iconXOffset = info.iconXOffset; + button.ignoreAsMenuSelection = info.ignoreAsMenuSelection; + else + button.classicChecks = info.classicChecks; + end - if ( info.value ) then + if ( info.value ~= nil ) then button.value = info.value; elseif ( info.text ) then button.value = info.text; @@ -1011,12 +1166,14 @@ function lib:UIDropDownMenu_AddButton(info, level) end local expandArrow = _G[listFrameName.."Button"..index.."ExpandArrow"]; + expandArrow:SetPoint("RIGHT", info.arrowXOffset or 0, 0); expandArrow:SetShown(info.hasArrow); expandArrow:SetEnabled(not info.disabled); -- If not checkable move everything over to the left to fill in the gap where the check would be local xPos = 5; - local yPos = -((button:GetID() - 1) * L_UIDROPDOWNMENU_BUTTON_HEIGHT) - L_UIDROPDOWNMENU_BORDER_HEIGHT; + local buttonHeight = (info.topPadding or 0) + L_UIDROPDOWNMENU_BUTTON_HEIGHT; + local yPos = -((button:GetID() - 1) * buttonHeight) - L_UIDROPDOWNMENU_BORDER_HEIGHT; local displayInfo = normalText; if (info.iconOnly) then displayInfo = icon; @@ -1062,14 +1219,14 @@ function lib:UIDropDownMenu_AddButton(info, level) if ( button:GetID() == lib:UIDropDownMenu_GetSelectedID(frame) ) then info.checked = 1; end - elseif ( lib:UIDropDownMenu_GetSelectedValue(frame) ) then + elseif ( lib:UIDropDownMenu_GetSelectedValue(frame) ~= nil ) then if ( button.value == lib:UIDropDownMenu_GetSelectedValue(frame) ) then info.checked = 1; end end end - if not info.notCheckable then + if not info.notCheckable then local check = _G[listFrameName.."Button"..index.."Check"]; local uncheck = _G[listFrameName.."Button"..index.."UnCheck"]; if ( info.disabled ) then @@ -1083,11 +1240,16 @@ function lib:UIDropDownMenu_AddButton(info, level) uncheck:SetDesaturated(false); uncheck:SetAlpha(1); end - + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + check:SetSize(16,16); + uncheck:SetSize(16,16); + normalText:SetPoint("LEFT", check, "RIGHT", 0, 0); + end + if info.customCheckIconAtlas or info.customCheckIconTexture then check:SetTexCoord(0, 1, 0, 1); uncheck:SetTexCoord(0, 1, 0, 1); - + if info.customCheckIconAtlas then check:SetAtlas(info.customCheckIconAtlas); uncheck:SetAtlas(info.customUncheckIconAtlas or info.customCheckIconAtlas); @@ -1095,6 +1257,17 @@ function lib:UIDropDownMenu_AddButton(info, level) check:SetTexture(info.customCheckIconTexture); uncheck:SetTexture(info.customUncheckIconTexture or info.customCheckIconTexture); end + elseif info.classicChecks then + check:SetTexCoord(0, 1, 0, 1); + uncheck:SetTexCoord(0, 1, 0, 1); + + check:SetSize(24,24); + uncheck:SetSize(24,24); + + check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check"); + uncheck:SetTexture(""); + + normalText:SetPoint("LEFT", check, "RIGHT", L_UIDROPDOWNMENU_CLASSIC_CHECK_PADDING, 0); elseif info.isNotRadio then check:SetTexCoord(0.0, 0.5, 0.0, 0.5); check:SetTexture("Interface\\Common\\UI-DropDownRadioChecks"); @@ -1132,7 +1305,7 @@ function lib:UIDropDownMenu_AddButton(info, level) -- If has a colorswatch, show it and vertex color it local colorSwatch = _G[listFrameName.."Button"..index.."ColorSwatch"]; if ( info.hasColorSwatch ) then - if (WoWClassicEra or WoWClassicTBC) then + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then _G["L_DropDownList"..level.."Button"..index.."ColorSwatch".."NormalTexture"]:SetVertexColor(info.r, info.g, info.b); else _G["L_DropDownList"..level.."Button"..index.."ColorSwatch"].Color:SetVertexColor(info.r, info.g, info.b); @@ -1157,8 +1330,22 @@ function lib:UIDropDownMenu_AddButton(info, level) listFrame.maxWidth = width; end - -- Set the height of the listframe - listFrame:SetHeight((index * L_UIDROPDOWNMENU_BUTTON_HEIGHT) + (L_UIDROPDOWNMENU_BORDER_HEIGHT * 2)); + if (WoWRetail) then + local customFrameCount = listFrame.customFrames and #listFrame.customFrames or 0; + local height = ((index - customFrameCount) * buttonHeight) + (L_UIDROPDOWNMENU_BORDER_HEIGHT * 2); + for frameIndex = 1, customFrameCount do + local frame = listFrame.customFrames[frameIndex]; + height = height + frame:GetPreferredEntryHeight(); + end + + -- Set the height of the listframe + listFrame:SetHeight(height); + else + -- Set the height of the listframe + listFrame:SetHeight((index * L_UIDROPDOWNMENU_BUTTON_HEIGHT) + (L_UIDROPDOWNMENU_BORDER_HEIGHT * 2)); + end + + return button; end function lib:UIDropDownMenu_CheckAddCustomFrame(self, button, info) @@ -1215,6 +1402,9 @@ function lib:UIDropDownMenu_GetButtonWidth(button) -- Add padding for the icon width = width + 10; end + if ( button.classicChecks ) then + width = width + L_UIDROPDOWNMENU_CLASSIC_CHECK_PADDING; + end else return minWidth; end @@ -1235,7 +1425,7 @@ end function lib:UIDropDownMenu_Refresh(frame, useValue, dropdownLevel) local maxWidth = 0; - local somethingChecked = nil; + local somethingChecked = nil; if ( not dropdownLevel ) then dropdownLevel = L_UIDROPDOWNMENU_MENU_LEVEL; end @@ -1378,6 +1568,14 @@ function lib:UIDropDownMenu_GetSelectedID(frame) return frame.selectedID; else -- If no explicit selectedID then try to send the id of a selected value or name +--[[ local maxNum; + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + maxNum = L_UIDROPDOWNMENU_MAXBUTTONS + else + local listFrame = _G["L_DropDownList"..L_UIDROPDOWNMENU_MENU_LEVEL]; + maxNum = listFrame.numButtons + end + for i=1, maxNum do]] local listFrame = _G["L_DropDownList"..L_UIDROPDOWNMENU_MENU_LEVEL]; for i=1, listFrame.numButtons do local button = _G["L_DropDownList"..L_UIDROPDOWNMENU_MENU_LEVEL.."Button"..i]; @@ -1404,7 +1602,7 @@ function lib:HideDropDownMenu(level) listFrame:Hide(); end -function lib:ToggleDropDownMenu(level, value, dropDownFrame, anchorName, xOffset, yOffset, menuList, button, autoHideDelay) +function lib:ToggleDropDownMenu(level, value, dropDownFrame, anchorName, xOffset, yOffset, menuList, button, autoHideDelay, overrideDisplayMode) if ( not level ) then level = 1; end @@ -1415,6 +1613,10 @@ function lib:ToggleDropDownMenu(level, value, dropDownFrame, anchorName, xOffset L_UIDROPDOWNMENU_MENU_VALUE = value; local listFrameName = "L_DropDownList"..level; local listFrame = _G[listFrameName]; + if (WoWRetail) then + lib:UIDropDownMenu_ClearCustomFrames(listFrame); + end + local tempFrame; local point, relativePoint, relativeTo; if ( not dropDownFrame ) then @@ -1530,22 +1732,33 @@ function lib:ToggleDropDownMenu(level, value, dropDownFrame, anchorName, xOffset listFrame:SetPoint(point, anchorFrame, relativePoint, 0, 0); end - -- Change list box appearance depending on display mode - if ( dropDownFrame and dropDownFrame.displayMode == "MENU" ) then - _G[listFrameName.."Border"]:Hide(); - _G[listFrameName.."MenuBackdrop"]:Show(); - else - _G[listFrameName.."Border"]:Show(); + if dropDownFrame.hideBackdrops then + _G[listFrameName.."Backdrop"]:Hide(); _G[listFrameName.."MenuBackdrop"]:Hide(); + else + -- Change list box appearance depending on display mode + local displayMode = overrideDisplayMode or (dropDownFrame and dropDownFrame.displayMode) or nil; + if ( displayMode == "MENU" ) then + _G[listFrameName.."Backdrop"]:Hide(); + _G[listFrameName.."MenuBackdrop"]:Show(); + else + _G[listFrameName.."Backdrop"]:Show(); + _G[listFrameName.."MenuBackdrop"]:Hide(); + end + end + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + dropDownFrame.menuList = menuList; end - dropDownFrame.menuList = menuList; + lib:UIDropDownMenu_Initialize(dropDownFrame, dropDownFrame.initialize, nil, level, menuList); -- If no items in the drop down don't show it if ( listFrame.numButtons == 0 ) then return; end - listFrame.onShow = dropDownFrame.listFrameOnShow; + if (WoWRetail) then + listFrame.onShow = dropDownFrame.listFrameOnShow; + end -- Check to see if the dropdownlist is off the screen, if it is anchor it to the top of the dropdown button listFrame:Show(); @@ -1559,6 +1772,11 @@ function lib:ToggleDropDownMenu(level, value, dropDownFrame, anchorName, xOffset listFrame.onHide = dropDownFrame.onHide; + -- Set the listframe frameStrata + if dropDownFrame.listFrameStrata then + listFrame.baseFrameStrata = listFrame:GetFrameStrata(); + listFrame:SetFrameStrata(dropDownFrame.listFrameStrata); + end -- We just move level 1 enough to keep it on the screen. We don't necessarily change the anchors. if ( level == 1 ) then @@ -1623,9 +1841,11 @@ function lib:ToggleDropDownMenu(level, value, dropDownFrame, anchorName, xOffset listFrame:SetPoint(point, anchorFrame, relativePoint, xOffset, yOffset); end - if ( autoHideDelay and tonumber(autoHideDelay)) then - listFrame.showTimer = autoHideDelay; - listFrame.isCounting = 1; + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + if ( autoHideDelay and tonumber(autoHideDelay)) then + listFrame.showTimer = autoHideDelay; + listFrame.isCounting = 1; + end end end end @@ -1645,7 +1865,7 @@ end local function containsMouse() local result = false - + for i = 1, L_UIDROPDOWNMENU_MAXLEVELS do local dropdown = _G["L_DropDownList"..i]; if dropdown:IsShown() and dropdown:IsMouseOver() then @@ -1658,7 +1878,13 @@ local function containsMouse() result = true; end end - + -- TeeloJubeithos: + -- If the menu is open, and you click the button to close it, + -- the Global Mouse Down triggers to close it, but then the MouseDown for the button triggers to open it back up again. + -- I fixed this by adding a filter to the global mouse down check, don't count it if the mouse is still over the DropDownMenu's Button + if L_UIDROPDOWNMENU_OPEN_MENU and L_UIDROPDOWNMENU_OPEN_MENU.Button:IsMouseOver() then + result = true; + end return result; end @@ -1679,26 +1905,46 @@ end -- hooking UIDropDownMenu_HandleGlobalMouseEvent do if lib and WoWRetail then - hooksecurefunc("UIDropDownMenu_HandleGlobalMouseEvent", function(button, event) - lib:UIDropDownMenu_HandleGlobalMouseEvent(button, event) + hooksecurefunc("UIDropDownMenu_HandleGlobalMouseEvent", function(button, event) + lib:UIDropDownMenu_HandleGlobalMouseEvent(button, event) end) end end +function lib:UIDropDownMenu_ClearCustomFrames(self) + if self.customFrames then + for index, frame in ipairs(self.customFrames) do + frame:Hide(); + end + + self.customFrames = nil; + end +end + +function lib:UIDropDownMenu_MatchTextWidth(frame, minWidth, maxWidth) + local frameName = frame:GetName(); + local newWidth = GetChild(frame, frameName, "Text"):GetUnboundedStringWidth() + L_UIDROPDOWNMENU_DEFAULT_WIDTH_PADDING; + + if minWidth or maxWidth then + newWidth = Clamp(newWidth, minWidth or newWidth, maxWidth or newWidth); + end + + lib:UIDropDownMenu_SetWidth(frame, newWidth); +end + function lib:UIDropDownMenu_SetWidth(frame, width, padding) local frameName = frame:GetName(); GetChild(frame, frameName, "Middle"):SetWidth(width); - local defaultPadding = 25; if ( padding ) then frame:SetWidth(width + padding); else - frame:SetWidth(width + defaultPadding + defaultPadding); + frame:SetWidth(width + L_UIDROPDOWNMENU_DEFAULT_WIDTH_PADDING + L_UIDROPDOWNMENU_DEFAULT_WIDTH_PADDING); end if ( padding ) then GetChild(frame, frameName, "Text"):SetWidth(width); else - GetChild(frame, frameName, "Text"):SetWidth(width - defaultPadding); + GetChild(frame, frameName, "Text"):SetWidth(width - L_UIDROPDOWNMENU_DEFAULT_WIDTH_PADDING); end frame.noResize = 1; end @@ -1742,18 +1988,18 @@ function lib:UIDropDownMenu_ClearAll(frame) end end -function lib:UIDropDownMenu_JustifyText(frame, justification, customXOffset) +function lib:UIDropDownMenu_JustifyText(frame, justification, customXOffset, customYOffset) local frameName = frame:GetName(); local text = GetChild(frame, frameName, "Text"); text:ClearAllPoints(); if ( justification == "LEFT" ) then - text:SetPoint("LEFT", GetChild(frame, frameName, "Left"), "LEFT", customXOffset or 27, 2); + text:SetPoint("LEFT", GetChild(frame, frameName, "Left"), "LEFT", customXOffset or 27, customYOffset or 2); text:SetJustifyH("LEFT"); elseif ( justification == "RIGHT" ) then - text:SetPoint("RIGHT", GetChild(frame, frameName, "Right"), "RIGHT", customXOffset or -43, 2); + text:SetPoint("RIGHT", GetChild(frame, frameName, "Right"), "RIGHT", customXOffset or -43, customYOffset or 2); text:SetJustifyH("RIGHT"); elseif ( justification == "CENTER" ) then - text:SetPoint("CENTER", GetChild(frame, frameName, "Middle"), "CENTER", customXOffset or -5, 2); + text:SetPoint("CENTER", GetChild(frame, frameName, "Middle"), "CENTER", customXOffset or -5, customYOffset or 2); text:SetJustifyH("CENTER"); end end @@ -1788,15 +2034,23 @@ function lib:UIDropDownMenuButton_OpenColorPicker(self, button) button = self; end L_UIDROPDOWNMENU_MENU_VALUE = button.value; - lib:OpenColorPicker(button); + lib:OpenColorPicker(button); end function lib:UIDropDownMenu_DisableButton(level, id) - _G["L_DropDownList"..level.."Button"..id]:Disable(); + lib:UIDropDownMenu_SetDropdownButtonEnabled(_G["DropDownList"..level.."Button"..id], false); end function lib:UIDropDownMenu_EnableButton(level, id) - _G["L_DropDownList"..level.."Button"..id]:Enable(); + lib:UIDropDownMenu_SetDropdownButtonEnabled(_G["DropDownList"..level.."Button"..id], true); +end + +function lib:UIDropDownMenu_SetDropdownButtonEnabled(button, enabled) + if enabled then + button:Enable(); + else + button:Disable(); + end end function lib:UIDropDownMenu_SetButtonText(level, id, text, colorCode) @@ -1816,28 +2070,62 @@ function lib:UIDropDownMenu_SetButtonClickable(level, id) _G["L_DropDownList"..level.."Button"..id]:SetDisabledFontObject(GameFontDisableSmallLeft); end + function lib:UIDropDownMenu_DisableDropDown(dropDown) - local dropDownName = dropDown:GetName(); - local label = GetChild(dropDown, dropDownName, "Label"); - if label then - label:SetVertexColor(GRAY_FONT_COLOR:GetRGB()); - end - GetChild(dropDown, dropDownName, "Icon"):SetVertexColor(GRAY_FONT_COLOR:GetRGB()); - GetChild(dropDown, dropDownName, "Text"):SetVertexColor(GRAY_FONT_COLOR:GetRGB()); - GetChild(dropDown, dropDownName, "Button"):Disable(); - dropDown.isDisabled = 1; + lib:UIDropDownMenu_SetDropDownEnabled(dropDown, false, disabledtooltip); end function lib:UIDropDownMenu_EnableDropDown(dropDown) + lib:UIDropDownMenu_SetDropDownEnabled(dropDown, true); +end + +function lib:UIDropDownMenu_SetDropDownEnabled(dropDown, enabled, disabledtooltip) local dropDownName = dropDown:GetName(); local label = GetChild(dropDown, dropDownName, "Label"); if label then - label:SetVertexColor(NORMAL_FONT_COLOR:GetRGB()); + label:SetVertexColor((enabled and NORMAL_FONT_COLOR or GRAY_FONT_COLOR):GetRGB()); + end + + local icon = GetChild(dropDown, dropDownName, "Icon"); + if icon then + icon:SetVertexColor((enabled and HIGHLIGHT_FONT_COLOR or GRAY_FONT_COLOR):GetRGB()); + end + + local text = GetChild(dropDown, dropDownName, "Text"); + if text then + text:SetVertexColor((enabled and HIGHLIGHT_FONT_COLOR or GRAY_FONT_COLOR):GetRGB()); + end + + local button = GetChild(dropDown, dropDownName, "Button"); + if button then + button:SetEnabled(enabled); + + -- Clear any previously set disabledTooltip (it will be reset below if needed). + if button:GetMotionScriptsWhileDisabled() then + button:SetMotionScriptsWhileDisabled(false); + button:SetScript("OnEnter", nil); + button:SetScript("OnLeave", nil); + end + end + + if enabled then + dropDown.isDisabled = nil; + else + dropDown.isDisabled = 1; + + if button then + if disabledTooltip then + button:SetMotionScriptsWhileDisabled(true); + button:SetScript("OnEnter", function() + GameTooltip:SetOwner(button, "ANCHOR_RIGHT"); + GameTooltip_AddErrorLine(GameTooltip, disabledTooltip); + GameTooltip:Show(); + end); + + button:SetScript("OnLeave", GameTooltip_Hide); + end + end end - GetChild(dropDown, dropDownName, "Icon"):SetVertexColor(HIGHLIGHT_FONT_COLOR:GetRGB()); - GetChild(dropDown, dropDownName, "Text"):SetVertexColor(HIGHLIGHT_FONT_COLOR:GetRGB()); - GetChild(dropDown, dropDownName, "Button"):Enable(); - dropDown.isDisabled = nil; end function lib:UIDropDownMenu_IsEnabled(dropDown) @@ -1918,14 +2206,14 @@ function lib.DropDownExpandArrowMixin:OnEnter() if self:IsEnabled() then local listFrame = _G["L_DropDownList"..level]; if ( not listFrame or not listFrame:IsShown() or select(2, listFrame:GetPoint()) ~= self ) then - lib:ToggleDropDownMenu(level, self:GetParent().value, nil, nil, nil, nil, self:GetParent().menuList, self); + lib:ToggleDropDownMenu(level, self:GetParent().value, nil, nil, nil, nil, self:GetParent().menuList, self, nil, self:GetParent().menuListDisplayMode); end end end function lib.DropDownExpandArrowMixin:OnMouseDown(button) if self:IsEnabled() then - lib:ToggleDropDownMenu(self:GetParent():GetParent():GetID() + 1, self:GetParent().value, nil, nil, nil, nil, self:GetParent().menuList, self); + lib:ToggleDropDownMenu(self:GetParent():GetParent():GetID() + 1, self:GetParent().value, nil, nil, nil, nil, self:GetParent().menuList, self, nil, self:GetParent().menuListDisplayMode); PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON); end end @@ -1933,10 +2221,13 @@ end lib.UIDropDownCustomMenuEntryMixin = {}; function lib.UIDropDownCustomMenuEntryMixin:GetPreferredEntryWidth() - -- NOTE: Only width is currently supported, dropdown menus size vertically based on how many buttons are present. return self:GetWidth(); end +function lib.UIDropDownCustomMenuEntryMixin:GetPreferredEntryHeight() + return self:GetHeight(); +end + function lib.UIDropDownCustomMenuEntryMixin:OnSetOwningButton() -- for derived objects to implement end @@ -1965,7 +2256,7 @@ function lib:Create_UIDropDownCustomMenuEntry(name, parent) local f = _G[name] or CreateFrame("Frame", name, parent or nil) f:EnableMouse(true) f:Hide() - + -- I am not 100% sure if below works for replacing the mixins f:SetScript("GetPreferredEntryWidth", function(self) return self:GetWidth() @@ -1984,7 +2275,7 @@ function lib:Create_UIDropDownCustomMenuEntry(name, parent) f:SetScript("GetContextData", function(self) return self.contextData end) - + return f end @@ -2034,3 +2325,4 @@ end function lib:EasyMenu_Initialize( frame, level, menuList ) easyMenu_Initialize( frame, level, menuList ) end + diff --git a/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenuTemplates.lua b/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenuTemplates.lua deleted file mode 100755 index 28c8b8f..0000000 --- a/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenuTemplates.lua +++ /dev/null @@ -1,126 +0,0 @@ --- $Id: LibUIDropDownMenuTemplates.lua 64 2020-11-18 13:13:15Z arithmandar $ --- ---------------------------------------------------------------------------- --- Localized Lua globals. --- ---------------------------------------------------------------------------- ---[[local _G = getfenv(0) --- ---------------------------------------------------------------------------- -local MAJOR_VERSION = "LibUIDropDownMenuTemplates-3.0" -local MINOR_VERSION = 90000 + tonumber(("$Rev: 64 $"):match("%d+")) - -local LibStub = _G.LibStub -if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end -local Lib = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION) -if not Lib then return end - --- Custom dropdown buttons are instantiated by some external system. --- When calling L_UIDropDownMenu_AddButton that system sets info.customFrame to the instance of the frame it wants to place on the menu. --- The dropdown menu creates its button for the entry as it normally would, but hides all elements. The custom frame is then anchored --- to that button and assumes responsibility for all relevant dropdown menu operations. --- The hidden button will request a size that it should become from the custom frame. - -L_DropDownMenuButtonMixin = {} - -function L_DropDownMenuButtonMixin:OnEnter(...) - ExecuteFrameScript(self:GetParent(), "OnEnter", ...); -end - -function L_DropDownMenuButtonMixin:OnLeave(...) - ExecuteFrameScript(self:GetParent(), "OnLeave", ...); -end - -function L_DropDownMenuButtonMixin:OnMouseDown(button) - if self:IsEnabled() then - L_ToggleDropDownMenu(nil, nil, self:GetParent()); - PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON); - end -end - -L_LargeDropDownMenuButtonMixin = CreateFromMixins(L_DropDownMenuButtonMixin); - -function L_LargeDropDownMenuButtonMixin:OnMouseDown(button) - if self:IsEnabled() then - local parent = self:GetParent(); - L_ToggleDropDownMenu(nil, nil, parent, parent, -8, 8); - PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON); - end -end - -L_DropDownExpandArrowMixin = {}; - -function L_DropDownExpandArrowMixin:OnEnter() - local level = self:GetParent():GetParent():GetID() + 1; - - L_CloseDropDownMenus(level); - - if self:IsEnabled() then - local listFrame = _G["L_DropDownList"..level]; - if ( not listFrame or not listFrame:IsShown() or select(2, listFrame:GetPoint()) ~= self ) then - L_ToggleDropDownMenu(level, self:GetParent().value, nil, nil, nil, nil, self:GetParent().menuList, self); - end - end -end - -function L_DropDownExpandArrowMixin:OnMouseDown(button) - if self:IsEnabled() then - L_ToggleDropDownMenu(self:GetParent():GetParent():GetID() + 1, self:GetParent().value, nil, nil, nil, nil, self:GetParent().menuList, self); - end -end - -L_UIDropDownCustomMenuEntryMixin = {}; - -function L_UIDropDownCustomMenuEntryMixin:GetPreferredEntryWidth() - -- NOTE: Only width is currently supported, dropdown menus size vertically based on how many buttons are present. - return self:GetWidth(); -end - -function L_UIDropDownCustomMenuEntryMixin:OnSetOwningButton() - -- for derived objects to implement -end - -function L_UIDropDownCustomMenuEntryMixin:SetOwningButton(button) - self:SetParent(button:GetParent()); - self.owningButton = button; - self:OnSetOwningButton(); -end - -function L_UIDropDownCustomMenuEntryMixin:GetOwningDropdown() - return self.owningButton:GetParent(); -end - -function L_UIDropDownCustomMenuEntryMixin:SetContextData(contextData) - self.contextData = contextData; -end - -function L_UIDropDownCustomMenuEntryMixin:GetContextData() - return self.contextData; -end - --- ////////////////////////////////////////////////////////////// --- L_UIDropDownCustomMenuEntryTemplate -function L_Create_UIDropDownCustomMenuEntry(name, parent) - local f = _G[name] or CreateFrame("Frame", name, parent or nil) - f:EnableMouse(true) - f:Hide() - - -- I am not 100% sure if below works for replacing the mixins - f:SetScript("GetPreferredEntryWidth", function(self) - return self:GetWidth() - end) - f:SetScript("SetOwningButton", function(self, button) - self:SetParent(button:GetParent()) - self.owningButton = button - self:OnSetOwningButton() - end) - f:SetScript("GetOwningDropdown", function(self) - return self.owningButton:GetParent() - end) - f:SetScript("SetContextData", function(self, contextData) - self.contextData = contextData - end) - f:SetScript("GetContextData", function(self) - return self.contextData - end) - - return f -end -]] diff --git a/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenuTemplates.xml b/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenuTemplates.xml deleted file mode 100755 index bf89718..0000000 --- a/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenuTemplates.xml +++ /dev/null @@ -1,412 +0,0 @@ - - - - - diff --git a/TitanClassic/libs/Ace3.lua b/TitanClassic/libs/Ace3.lua index fb0a3fa..aef37e7 100755 --- a/TitanClassic/libs/Ace3.lua +++ b/TitanClassic/libs/Ace3.lua @@ -60,14 +60,14 @@ function Ace3:Open() self:Print("No Configs are Registered") return end - + if not frame then frame = gui:Create("Frame") frame:ReleaseChildren() frame:SetTitle("Ace3 Options") frame:SetLayout("FILL") frame:SetCallback("OnClose", frameOnClose) - + select = gui:Create("DropdownGroup") select:SetGroupList(configs) select:SetCallback("OnGroupSelected", ConfigSelected) diff --git a/TitanClassic/libs/Ace3.toc b/TitanClassic/libs/Ace3.toc index 0d3e5ce..480dfbc 100755 --- a/TitanClassic/libs/Ace3.toc +++ b/TitanClassic/libs/Ace3.toc @@ -1,4 +1,4 @@ -## Interface: 80100 +## Interface: 100105 ## Title: Lib: Ace3 ## Notes: AddOn development framework @@ -6,6 +6,7 @@ ## X-Website: http://www.wowace.com ## X-Category: Library ## X-License: Limited BSD +## Version: Release-r1309 LibStub\LibStub.lua CallbackHandler-1.0\CallbackHandler-1.0.xml diff --git a/TitanClassic/libs/Ace3_TBC.toc b/TitanClassic/libs/Ace3_TBC.toc new file mode 100755 index 0000000..2abd467 --- /dev/null +++ b/TitanClassic/libs/Ace3_TBC.toc @@ -0,0 +1,28 @@ +## Interface: 20504 + +## Title: Lib: Ace3 +## Notes: AddOn development framework +## Author: Ace3 Development Team +## X-Website: http://www.wowace.com +## X-Category: Library +## X-License: Limited BSD +## Version: Release-r1309 + +LibStub\LibStub.lua +CallbackHandler-1.0\CallbackHandler-1.0.xml +AceAddon-3.0\AceAddon-3.0.xml +AceEvent-3.0\AceEvent-3.0.xml +AceTimer-3.0\AceTimer-3.0.xml +AceBucket-3.0\AceBucket-3.0.xml +AceHook-3.0\AceHook-3.0.xml +AceDB-3.0\AceDB-3.0.xml +AceDBOptions-3.0\AceDBOptions-3.0.xml +AceLocale-3.0\AceLocale-3.0.xml +AceConsole-3.0\AceConsole-3.0.xml +AceGUI-3.0\AceGUI-3.0.xml +AceConfig-3.0\AceConfig-3.0.xml +AceComm-3.0\AceComm-3.0.xml +AceTab-3.0\AceTab-3.0.xml +AceSerializer-3.0\AceSerializer-3.0.xml + +Ace3.lua diff --git a/TitanClassic/libs/Ace3_Vanilla.toc b/TitanClassic/libs/Ace3_Vanilla.toc new file mode 100755 index 0000000..5af2a11 --- /dev/null +++ b/TitanClassic/libs/Ace3_Vanilla.toc @@ -0,0 +1,28 @@ +## Interface: 11403 + +## Title: Lib: Ace3 +## Notes: AddOn development framework +## Author: Ace3 Development Team +## X-Website: http://www.wowace.com +## X-Category: Library +## X-License: Limited BSD +## Version: Release-r1309 + +LibStub\LibStub.lua +CallbackHandler-1.0\CallbackHandler-1.0.xml +AceAddon-3.0\AceAddon-3.0.xml +AceEvent-3.0\AceEvent-3.0.xml +AceTimer-3.0\AceTimer-3.0.xml +AceBucket-3.0\AceBucket-3.0.xml +AceHook-3.0\AceHook-3.0.xml +AceDB-3.0\AceDB-3.0.xml +AceDBOptions-3.0\AceDBOptions-3.0.xml +AceLocale-3.0\AceLocale-3.0.xml +AceConsole-3.0\AceConsole-3.0.xml +AceGUI-3.0\AceGUI-3.0.xml +AceConfig-3.0\AceConfig-3.0.xml +AceComm-3.0\AceComm-3.0.xml +AceTab-3.0\AceTab-3.0.xml +AceSerializer-3.0\AceSerializer-3.0.xml + +Ace3.lua diff --git a/TitanClassic/libs/Ace3_Wrath.toc b/TitanClassic/libs/Ace3_Wrath.toc new file mode 100755 index 0000000..0b56640 --- /dev/null +++ b/TitanClassic/libs/Ace3_Wrath.toc @@ -0,0 +1,28 @@ +## Interface: 30402 + +## Title: Lib: Ace3 +## Notes: AddOn development framework +## Author: Ace3 Development Team +## X-Website: http://www.wowace.com +## X-Category: Library +## X-License: Limited BSD +## Version: Release-r1309 + +LibStub\LibStub.lua +CallbackHandler-1.0\CallbackHandler-1.0.xml +AceAddon-3.0\AceAddon-3.0.xml +AceEvent-3.0\AceEvent-3.0.xml +AceTimer-3.0\AceTimer-3.0.xml +AceBucket-3.0\AceBucket-3.0.xml +AceHook-3.0\AceHook-3.0.xml +AceDB-3.0\AceDB-3.0.xml +AceDBOptions-3.0\AceDBOptions-3.0.xml +AceLocale-3.0\AceLocale-3.0.xml +AceConsole-3.0\AceConsole-3.0.xml +AceGUI-3.0\AceGUI-3.0.xml +AceConfig-3.0\AceConfig-3.0.xml +AceComm-3.0\AceComm-3.0.xml +AceTab-3.0\AceTab-3.0.xml +AceSerializer-3.0\AceSerializer-3.0.xml + +Ace3.lua diff --git a/TitanClassic/libs/AceAddon-3.0/AceAddon-3.0.lua b/TitanClassic/libs/AceAddon-3.0/AceAddon-3.0.lua index b338695..0ea93d1 100755 --- a/TitanClassic/libs/AceAddon-3.0/AceAddon-3.0.lua +++ b/TitanClassic/libs/AceAddon-3.0/AceAddon-3.0.lua @@ -6,31 +6,31 @@ -- * **OnEnable** which gets called during the PLAYER_LOGIN event, when most of the data provided by the game is already present. -- * **OnDisable**, which is only called when your addon is manually being disabled. -- @usage --- -- A small (but complete) addon, that doesn't do anything, +-- -- A small (but complete) addon, that doesn't do anything, -- -- but shows usage of the callbacks. -- local MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon") --- +-- -- function MyAddon:OnInitialize() --- -- do init tasks here, like loading the Saved Variables, +-- -- do init tasks here, like loading the Saved Variables, -- -- or setting up slash commands. -- end --- +-- -- function MyAddon:OnEnable() -- -- Do more initialization here, that really enables the use of your addon. --- -- Register Events, Hook functions, Create Frames, Get information from +-- -- Register Events, Hook functions, Create Frames, Get information from -- -- the game that wasn't available in OnInitialize -- end -- -- function MyAddon:OnDisable() -- -- Unhook, Unregister Events, Hide frames that you created. --- -- You would probably only use an OnDisable if you want to +-- -- You would probably only use an OnDisable if you want to -- -- build a "standby" mode, or be able to toggle modules on/off. -- end -- @class file -- @name AceAddon-3.0.lua --- @release $Id: AceAddon-3.0.lua 1084 2013-04-27 20:14:11Z nevcairiel $ +-- @release $Id: AceAddon-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ -local MAJOR, MINOR = "AceAddon-3.0", 12 +local MAJOR, MINOR = "AceAddon-3.0", 13 local AceAddon, oldminor = LibStub:NewLibrary(MAJOR, MINOR) if not AceAddon then return end -- No Upgrade needed. @@ -49,10 +49,6 @@ local select, pairs, next, type, unpack = select, pairs, next, type, unpack local loadstring, assert, error = loadstring, assert, error local setmetatable, getmetatable, rawset, rawget = setmetatable, getmetatable, rawset, rawget --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: LibStub, IsLoggedIn, geterrorhandler - --[[ xpcall safecall implementation ]] @@ -62,43 +58,12 @@ local function errorhandler(err) return geterrorhandler()(err) end -local function CreateDispatcher(argCount) - local code = [[ - local xpcall, eh = ... - local method, ARGS - local function call() return method(ARGS) end - - local function dispatch(func, ...) - method = func - if not method then return end - ARGS = ... - return xpcall(call, eh) - end - - return dispatch - ]] - - local ARGS = {} - for i = 1, argCount do ARGS[i] = "arg"..i end - code = code:gsub("ARGS", tconcat(ARGS, ", ")) - return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(xpcall, errorhandler) -end - -local Dispatchers = setmetatable({}, {__index=function(self, argCount) - local dispatcher = CreateDispatcher(argCount) - rawset(self, argCount, dispatcher) - return dispatcher -end}) -Dispatchers[0] = function(func) - return xpcall(func, errorhandler) -end - local function safecall(func, ...) -- we check to see if the func is passed is actually a function here and don't error when it isn't -- this safecall is used for optional functions like OnInitialize OnEnable etc. When they are not -- present execution should continue without hinderance if type(func) == "function" then - return Dispatchers[select('#', ...)](func, ...) + return xpcall(func, errorhandler, ...) end end @@ -106,7 +71,7 @@ end local Enable, Disable, EnableModule, DisableModule, Embed, NewModule, GetModule, GetName, SetDefaultModuleState, SetDefaultModuleLibraries, SetEnabledState, SetDefaultModulePrototype -- used in the addon metatable -local function addontostring( self ) return self.name end +local function addontostring( self ) return self.name end -- Check if the addon is queued for initialization local function queuedForInitialization(addon) @@ -119,14 +84,14 @@ local function queuedForInitialization(addon) end --- Create a new AceAddon-3.0 addon. --- Any libraries you specified will be embeded, and the addon will be scheduled for +-- Any libraries you specified will be embeded, and the addon will be scheduled for -- its OnInitialize and OnEnable callbacks. -- The final addon object, with all libraries embeded, will be returned. -- @paramsig [object ,]name[, lib, ...] -- @param object Table to use as a base for the addon (optional) -- @param name Name of the addon object to create -- @param lib List of libraries to embed into the addon --- @usage +-- @usage -- -- Create a simple addon object -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon", "AceEvent-3.0") -- @@ -146,10 +111,10 @@ function AceAddon:NewAddon(objectorname, ...) if type(name)~="string" then error(("Usage: NewAddon([object,] name, [lib, lib, lib, ...]): 'name' - string expected got '%s'."):format(type(name)), 2) end - if self.addons[name] then + if self.addons[name] then error(("Usage: NewAddon([object,] name, [lib, lib, lib, ...]): 'name' - Addon '%s' already exists."):format(name), 2) end - + object = object or {} object.name = name @@ -159,7 +124,7 @@ function AceAddon:NewAddon(objectorname, ...) for k, v in pairs(oldmeta) do addonmeta[k] = v end end addonmeta.__tostring = addontostring - + setmetatable( object, addonmeta ) self.addons[name] = object object.modules = {} @@ -167,7 +132,7 @@ function AceAddon:NewAddon(objectorname, ...) object.defaultModuleLibraries = {} Embed( object ) -- embed NewModule, GetModule methods self:EmbedLibraries(object, select(i,...)) - + -- add to queue of addons to be initialized upon ADDON_LOADED tinsert(self.initializequeue, object) return object @@ -178,7 +143,7 @@ end -- Throws an error if the addon object cannot be found (except if silent is set). -- @param name unique name of the addon object -- @param silent if true, the addon is optional, silently return nil if its not found --- @usage +-- @usage -- -- Get the Addon -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") function AceAddon:GetAddon(name, silent) @@ -233,7 +198,7 @@ end -- @paramsig name[, silent] -- @param name unique name of the module -- @param silent if true, the module is optional, silently return nil if its not found (optional) --- @usage +-- @usage -- -- Get the Addon -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") -- -- Get the Module @@ -256,23 +221,23 @@ local function IsModuleTrue(self) return true end -- @param name unique name of the module -- @param prototype object to derive this module from, methods and values from this table will be mixed into the module (optional) -- @param lib List of libraries to embed into the addon --- @usage +-- @usage -- -- Create a module with some embeded libraries -- MyModule = MyAddon:NewModule("MyModule", "AceEvent-3.0", "AceHook-3.0") --- +-- -- -- Create a module with a prototype -- local prototype = { OnEnable = function(self) print("OnEnable called!") end } -- MyModule = MyAddon:NewModule("MyModule", prototype, "AceEvent-3.0", "AceHook-3.0") function NewModule(self, name, prototype, ...) if type(name) ~= "string" then error(("Usage: NewModule(name, [prototype, [lib, lib, lib, ...]): 'name' - string expected got '%s'."):format(type(name)), 2) end if type(prototype) ~= "string" and type(prototype) ~= "table" and type(prototype) ~= "nil" then error(("Usage: NewModule(name, [prototype, [lib, lib, lib, ...]): 'prototype' - table (prototype), string (lib) or nil expected got '%s'."):format(type(prototype)), 2) end - + if self.modules[name] then error(("Usage: NewModule(name, [prototype, [lib, lib, lib, ...]): 'name' - Module '%s' already exists."):format(name), 2) end - + -- modules are basically addons. We treat them as such. They will be added to the initializequeue properly as well. -- NewModule can only be called after the parent addon is present thus the modules will be initialized after their parent is. local module = AceAddon:NewAddon(fmt("%s_%s", self.name or tostring(self), name)) - + module.IsModule = IsModuleTrue module:SetEnabledState(self.defaultModuleState) module.moduleName = name @@ -287,24 +252,24 @@ function NewModule(self, name, prototype, ...) if not prototype or type(prototype) == "string" then prototype = self.defaultModulePrototype or nil end - + if type(prototype) == "table" then local mt = getmetatable(module) mt.__index = prototype setmetatable(module, mt) -- More of a Base class type feel. end - + safecall(self.OnModuleCreated, self, module) -- Was in Ace2 and I think it could be a cool thing to have handy. self.modules[name] = module tinsert(self.orderedModules, module) - + return module end --- Returns the real name of the addon or module, without any prefix. -- @name //addon//:GetName --- @paramsig --- @usage +-- @paramsig +-- @usage -- print(MyAddon:GetName()) -- -- prints "MyAddon" function GetName(self) @@ -316,8 +281,8 @@ end -- and enabling all modules of the addon (unless explicitly disabled).\\ -- :Enable() also sets the internal `enableState` variable to true -- @name //addon//:Enable --- @paramsig --- @usage +-- @paramsig +-- @usage -- -- Enable MyModule -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") -- MyModule = MyAddon:GetModule("MyModule") @@ -337,8 +302,8 @@ end -- and disabling all modules of the addon.\\ -- :Disable() also sets the internal `enableState` variable to false -- @name //addon//:Disable --- @paramsig --- @usage +-- @paramsig +-- @usage -- -- Disable MyAddon -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") -- MyAddon:Disable() @@ -351,7 +316,7 @@ end -- Short-hand function that retrieves the module via `:GetModule` and calls `:Enable` on the module object. -- @name //addon//:EnableModule -- @paramsig name --- @usage +-- @usage -- -- Enable MyModule using :GetModule -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") -- MyModule = MyAddon:GetModule("MyModule") @@ -369,7 +334,7 @@ end -- Short-hand function that retrieves the module via `:GetModule` and calls `:Disable` on the module object. -- @name //addon//:DisableModule -- @paramsig name --- @usage +-- @usage -- -- Disable MyModule using :GetModule -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") -- MyModule = MyAddon:GetModule("MyModule") @@ -388,7 +353,7 @@ end -- @name //addon//:SetDefaultModuleLibraries -- @paramsig lib[, lib, ...] -- @param lib List of libraries to embed into the addon --- @usage +-- @usage -- -- Create the addon object -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon") -- -- Configure default libraries for modules (all modules need AceEvent-3.0) @@ -407,7 +372,7 @@ end -- @name //addon//:SetDefaultModuleState -- @paramsig state -- @param state Default state for new modules, true for enabled, false for disabled --- @usage +-- @usage -- -- Create the addon object -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon") -- -- Set the default state to "disabled" @@ -427,7 +392,7 @@ end -- @name //addon//:SetDefaultModulePrototype -- @paramsig prototype -- @param prototype Default prototype for the new modules (table) --- @usage +-- @usage -- -- Define a prototype -- local prototype = { OnEnable = function(self) print("OnEnable called!") end } -- -- Set the default prototype @@ -459,8 +424,8 @@ end --- Return an iterator of all modules associated to the addon. -- @name //addon//:IterateModules --- @paramsig --- @usage +-- @paramsig +-- @usage -- -- Enable all modules -- for name, module in MyAddon:IterateModules() do -- module:Enable() @@ -469,13 +434,13 @@ local function IterateModules(self) return pairs(self.modules) end -- Returns an iterator of all embeds in the addon -- @name //addon//:IterateEmbeds --- @paramsig +-- @paramsig local function IterateEmbeds(self) return pairs(AceAddon.embeds[self]) end --- Query the enabledState of an addon. -- @name //addon//:IsEnabled --- @paramsig --- @usage +-- @paramsig +-- @usage -- if MyAddon:IsEnabled() then -- MyAddon:Disable() -- end @@ -520,20 +485,20 @@ end -- - Initialize the addon after creation. -- This function is only used internally during the ADDON_LOADED event --- It will call the **OnInitialize** function on the addon object (if present), +-- It will call the **OnInitialize** function on the addon object (if present), -- and the **OnEmbedInitialize** function on all embeded libraries. --- +-- -- **Note:** Do not call this function manually, unless you're absolutely sure that you know what you are doing. -- @param addon addon object to intialize function AceAddon:InitializeAddon(addon) safecall(addon.OnInitialize, addon) - + local embeds = self.embeds[addon] for i = 1, #embeds do local lib = LibStub:GetLibrary(embeds[i], true) if lib then safecall(lib.OnEmbedInitialize, lib, addon) end end - + -- we don't call InitializeAddon on modules specifically, this is handled -- from the event handler and only done _once_ end @@ -541,7 +506,7 @@ end -- - Enable the addon after creation. -- Note: This function is only used internally during the PLAYER_LOGIN event, or during ADDON_LOADED, -- if IsLoggedIn() already returns true at that point, e.g. for LoD Addons. --- It will call the **OnEnable** function on the addon object (if present), +-- It will call the **OnEnable** function on the addon object (if present), -- and the **OnEmbedEnable** function on all embeded libraries.\\ -- This function does not toggle the enable state of the addon itself, and will return early if the addon is disabled. -- @@ -551,12 +516,12 @@ end function AceAddon:EnableAddon(addon) if type(addon) == "string" then addon = AceAddon:GetAddon(addon) end if self.statuses[addon.name] or not addon.enabledState then return false end - + -- set the statuses first, before calling the OnEnable. this allows for Disabling of the addon in OnEnable. self.statuses[addon.name] = true - + safecall(addon.OnEnable, addon) - + -- make sure we're still enabled before continueing if self.statuses[addon.name] then local embeds = self.embeds[addon] @@ -564,7 +529,7 @@ function AceAddon:EnableAddon(addon) local lib = LibStub:GetLibrary(embeds[i], true) if lib then safecall(lib.OnEmbedEnable, lib, addon) end end - + -- enable possible modules. local modules = addon.orderedModules for i = 1, #modules do @@ -576,24 +541,24 @@ end -- - Disable the addon -- Note: This function is only used internally. --- It will call the **OnDisable** function on the addon object (if present), +-- It will call the **OnDisable** function on the addon object (if present), -- and the **OnEmbedDisable** function on all embeded libraries.\\ -- This function does not toggle the enable state of the addon itself, and will return early if the addon is still enabled. -- --- **Note:** Do not call this function manually, unless you're absolutely sure that you know what you are doing. +-- **Note:** Do not call this function manually, unless you're absolutely sure that you know what you are doing. -- Use :Disable on the addon itself instead. -- @param addon addon object to enable function AceAddon:DisableAddon(addon) if type(addon) == "string" then addon = AceAddon:GetAddon(addon) end if not self.statuses[addon.name] then return false end - + -- set statuses first before calling OnDisable, this allows for aborting the disable in OnDisable. self.statuses[addon.name] = false - + safecall( addon.OnDisable, addon ) - + -- make sure we're still disabling... - if not self.statuses[addon.name] then + if not self.statuses[addon.name] then local embeds = self.embeds[addon] for i = 1, #embeds do local lib = LibStub:GetLibrary(embeds[i], true) @@ -605,12 +570,12 @@ function AceAddon:DisableAddon(addon) self:DisableAddon(modules[i]) end end - + return not self.statuses[addon.name] -- return true if we're disabled end --- Get an iterator over all registered addons. --- @usage +-- @usage -- -- Print a list of all installed AceAddon's -- for name, addon in AceAddon:IterateAddons() do -- print("Addon: " .. name) @@ -618,7 +583,7 @@ end function AceAddon:IterateAddons() return pairs(self.addons) end --- Get an iterator over the internal status registry. --- @usage +-- @usage -- -- Print a list of all enabled addons -- for name, status in AceAddon:IterateAddonStatus() do -- if status then @@ -632,10 +597,20 @@ function AceAddon:IterateAddonStatus() return pairs(self.statuses) end function AceAddon:IterateEmbedsOnAddon(addon) return pairs(self.embeds[addon]) end function AceAddon:IterateModulesOfAddon(addon) return pairs(addon.modules) end +-- Blizzard AddOns which can load very early in the loading process and mess with Ace3 addon loading +local BlizzardEarlyLoadAddons = { + Blizzard_DebugTools = true, + Blizzard_TimeManager = true, + Blizzard_BattlefieldMap = true, + Blizzard_MapCanvas = true, + Blizzard_SharedMapDataProviders = true, + Blizzard_CombatLog = true, +} + -- Event Handling local function onEvent(this, event, arg1) - -- 2011-08-17 nevcairiel - ignore the load event of Blizzard_DebugTools, so a potential startup error isn't swallowed up - if (event == "ADDON_LOADED" and arg1 ~= "Blizzard_DebugTools") or event == "PLAYER_LOGIN" then + -- 2020-08-28 nevcairiel - ignore the load event of Blizzard addons which occur early in the loading process + if (event == "ADDON_LOADED" and (arg1 == nil or not BlizzardEarlyLoadAddons[arg1])) or event == "PLAYER_LOGIN" then -- if a addon loads another addon, recursion could happen here, so we need to validate the table on every iteration while(#AceAddon.initializequeue > 0) do local addon = tremove(AceAddon.initializequeue, 1) @@ -644,7 +619,7 @@ local function onEvent(this, event, arg1) AceAddon:InitializeAddon(addon) tinsert(AceAddon.enablequeue, addon) end - + if IsLoggedIn() then while(#AceAddon.enablequeue > 0) do local addon = tremove(AceAddon.enablequeue, 1) diff --git a/TitanClassic/libs/AceConfig-3.0/AceConfig-3.0.lua b/TitanClassic/libs/AceConfig-3.0/AceConfig-3.0.lua index c2ac7cc..aae348b 100755 --- a/TitanClassic/libs/AceConfig-3.0/AceConfig-3.0.lua +++ b/TitanClassic/libs/AceConfig-3.0/AceConfig-3.0.lua @@ -3,7 +3,7 @@ -- as well as associate it with a slash command. -- @class file -- @name AceConfig-3.0 --- @release $Id: AceConfig-3.0.lua 1161 2017-08-12 14:30:16Z funkydude $ +-- @release $Id: AceConfig-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ --[[ AceConfig-3.0 @@ -45,7 +45,7 @@ local pcall, error, type, pairs = pcall, error, type, pairs function AceConfig:RegisterOptionsTable(appName, options, slashcmd) local ok,msg = pcall(cfgreg.RegisterOptionsTable, self, appName, options) if not ok then error(msg, 2) end - + if slashcmd then if type(slashcmd) == "table" then for _,cmd in pairs(slashcmd) do diff --git a/TitanClassic/libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.lua b/TitanClassic/libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.lua index 7902fd1..a4240ce 100755 --- a/TitanClassic/libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.lua +++ b/TitanClassic/libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.lua @@ -1,7 +1,7 @@ --- AceConfigCmd-3.0 handles access to an options table through the "command line" interface via the ChatFrames. -- @class file -- @name AceConfigCmd-3.0 --- @release $Id: AceConfigCmd-3.0.lua 1161 2017-08-12 14:30:16Z funkydude $ +-- @release $Id: AceConfigCmd-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ --[[ AceConfigCmd-3.0 @@ -37,17 +37,10 @@ local error, assert = error, assert -- WoW APIs local _G = _G --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: LibStub, SELECTED_CHAT_FRAME, DEFAULT_CHAT_FRAME - - local L = setmetatable({}, { -- TODO: replace with proper locale __index = function(self,k) return k end }) - - local function print(msg) (SELECTED_CHAT_FRAME or DEFAULT_CHAT_FRAME):AddMessage(msg) end @@ -63,7 +56,7 @@ local funcmsg = "expected function or member name" -- pickfirstset() - picks the first non-nil value and returns it -local function pickfirstset(...) +local function pickfirstset(...) for i=1,select("#",...) do if select(i,...)~=nil then return select(i,...) @@ -120,7 +113,7 @@ local function callfunction(info, tab, methodtype, ...) info.arg = tab.arg info.option = tab info.type = tab.type - + if type(method)=="function" then return method(info, ...) else @@ -131,7 +124,7 @@ end -- do_final() - do the final step (set/execute) along with validation and confirmation local function do_final(info, inputpos, tab, methodtype, ...) - if info.validate then + if info.validate then local res = callmethod(info,inputpos,tab,"validate",...) if type(res)=="string" then usererr(info, inputpos, "'"..strsub(info.input, inputpos).."' - "..res) @@ -139,7 +132,7 @@ local function do_final(info, inputpos, tab, methodtype, ...) end end -- console ignores .confirm - + callmethod(info,inputpos,tab,methodtype, ...) end @@ -152,8 +145,8 @@ local function getparam(info, inputpos, tab, depth, paramname, types, errormsg) if val~=nil then if val==false then val=nil - elseif not types[type(val)] then - err(info, inputpos, "'" .. paramname.. "' - "..errormsg) + elseif not types[type(val)] then + err(info, inputpos, "'" .. paramname.. "' - "..errormsg) end info[paramname] = val info[paramname.."_at"] = depth @@ -166,13 +159,13 @@ end local dummytable={} local function iterateargs(tab) - if not tab.plugins then - return pairs(tab.args) + if not tab.plugins then + return pairs(tab.args) end - + local argtabkey,argtab=next(tab.plugins) local v - + return function(_, k) while argtab do k,v = next(argtab, k) @@ -206,18 +199,18 @@ local function showhelp(info, inputpos, tab, depth, noHead) if not noHead then print("|cff33ff99"..info.appName.."|r: Arguments to |cffffff78/"..info[0].."|r "..strsub(info.input,1,inputpos-1)..":") end - + local sortTbl = {} -- [1..n]=name local refTbl = {} -- [name]=tableref - + for k,v in iterateargs(tab) do if not refTbl[k] then -- a plugin overriding something in .args tinsert(sortTbl, k) refTbl[k] = v end end - - tsort(sortTbl, function(one, two) + + tsort(sortTbl, function(one, two) local o1 = refTbl[one].order or 100 local o2 = refTbl[two].order or 100 if type(o1) == "function" or type(o1) == "string" then @@ -240,7 +233,7 @@ local function showhelp(info, inputpos, tab, depth, noHead) if o1==o2 then return tostring(one)optiontable +-- handle() - selfrecursing function that processes input->optiontable -- - depth - starts at 0 -- - retfalse - return false rather than produce error if a match is not found (used by inlined groups) @@ -346,16 +339,16 @@ local function handle(info, inputpos, tab, depth, retfalse) local oldfunc,oldfunc_at = getparam(info,inputpos,tab,depth,"func",functypes,funcmsg) local oldvalidate,oldvalidate_at = getparam(info,inputpos,tab,depth,"validate",functypes,funcmsg) --local oldconfirm,oldconfirm_at = getparam(info,inputpos,tab,depth,"confirm",functypes,funcmsg) - + ------------------------------------------------------------------- -- Act according to .type of this table - + if tab.type=="group" then ------------ group -------------------------------------------- - + if type(tab.args)~="table" then err(info, inputpos) end if tab.plugins and type(tab.plugins)~="table" then err(info,inputpos) end - + -- grab next arg from input local _,nextpos,arg = (info.input):find(" *([^ ]+) *", inputpos) if not arg then @@ -363,11 +356,11 @@ local function handle(info, inputpos, tab, depth, retfalse) return end nextpos=nextpos+1 - + -- loop .args and try to find a key with a matching name for k,v in iterateargs(tab) do if not(type(k)=="string" and type(v)=="table" and type(v.type)=="string") then err(info,inputpos, "options table child '"..tostring(k).."' is malformed") end - + -- is this child an inline group? if so, traverse into it if v.type=="group" and pickfirstset(v.cmdInline, v.inline, false) then info[depth+1] = k @@ -383,8 +376,8 @@ local function handle(info, inputpos, tab, depth, retfalse) return handle(info,nextpos,v,depth+1) end end - - -- no match + + -- no match if retfalse then -- restore old infotable members and return false to indicate failure info.handler,info.handler_at = oldhandler,oldhandler_at @@ -395,40 +388,40 @@ local function handle(info, inputpos, tab, depth, retfalse) --info.confirm,info.confirm_at = oldconfirm,oldconfirm_at return false end - + -- couldn't find the command, display error usererr(info, inputpos, "'"..arg.."' - " .. L["unknown argument"]) return end - - local str = strsub(info.input,inputpos); - + + local strInput = strsub(info.input,inputpos); + if tab.type=="execute" then ------------ execute -------------------------------------------- do_final(info, inputpos, tab, "func") - - + + elseif tab.type=="input" then ------------ input -------------------------------------------- - + local res = true if tab.pattern then - if not(type(tab.pattern)=="string") then err(info, inputpos, "'pattern' - expected a string") end - if not strmatch(str, tab.pattern) then - usererr(info, inputpos, "'"..str.."' - " .. L["invalid input"]) + if type(tab.pattern)~="string" then err(info, inputpos, "'pattern' - expected a string") end + if not strmatch(strInput, tab.pattern) then + usererr(info, inputpos, "'"..strInput.."' - " .. L["invalid input"]) return end end - - do_final(info, inputpos, tab, "set", str) - - + do_final(info, inputpos, tab, "set", strInput) + + + elseif tab.type=="toggle" then ------------ toggle -------------------------------------------- local b - local str = strtrim(strlower(str)) + local str = strtrim(strlower(strInput)) if str=="" then b = callmethod(info, inputpos, tab, "get") @@ -444,7 +437,7 @@ local function handle(info, inputpos, tab, depth, retfalse) else b = not b end - + elseif str==L["on"] then b = true elseif str==L["off"] then @@ -459,15 +452,15 @@ local function handle(info, inputpos, tab, depth, retfalse) end return end - + do_final(info, inputpos, tab, "set", b) - + elseif tab.type=="range" then ------------ range -------------------------------------------- - local val = tonumber(str) + local val = tonumber(strInput) if not val then - usererr(info, inputpos, "'"..str.."' - "..L["expected number"]) + usererr(info, inputpos, "'"..strInput.."' - "..L["expected number"]) return end if type(info.step)=="number" then @@ -481,21 +474,21 @@ local function handle(info, inputpos, tab, depth, retfalse) usererr(info, inputpos, val.." - "..format(L["must be equal to or lower than %s"], tostring(info.max)) ) return end - + do_final(info, inputpos, tab, "set", val) - + elseif tab.type=="select" then ------------ select ------------------------------------ - local str = strtrim(strlower(str)) - + local str = strtrim(strlower(strInput)) + local values = tab.values if type(values) == "function" or type(values) == "string" then info.values = values values = callmethod(info, inputpos, tab, "values") info.values = nil end - + if str == "" then local b = callmethod(info, inputpos, tab, "get") local fmt = "|cffffff78- [%s]|r %s" @@ -512,7 +505,7 @@ local function handle(info, inputpos, tab, depth, retfalse) end local ok - for k,v in pairs(values) do + for k,v in pairs(values) do if strlower(k)==str then str = k -- overwrite with key (in case of case mismatches) ok = true @@ -523,20 +516,20 @@ local function handle(info, inputpos, tab, depth, retfalse) usererr(info, inputpos, "'"..str.."' - "..L["unknown selection"]) return end - + do_final(info, inputpos, tab, "set", str) - + elseif tab.type=="multiselect" then ------------ multiselect ------------------------------------------- - local str = strtrim(strlower(str)) - + local str = strtrim(strlower(strInput)) + local values = tab.values if type(values) == "function" or type(values) == "string" then info.values = values values = callmethod(info, inputpos, tab, "values") info.values = nil end - + if str == "" then local fmt = "|cffffff78- [%s]|r %s" local fmt_sel = "|cffffff78- [%s]|r %s |cffff0000*|r" @@ -550,7 +543,7 @@ local function handle(info, inputpos, tab, depth, retfalse) end return end - + --build a table of the selections, checking that they exist --parse for =on =off =default in the process --table will be key = true for options that should toggle, key = [on|off|default] for options to be set @@ -559,25 +552,25 @@ local function handle(info, inputpos, tab, depth, retfalse) --parse option=on etc local opt, val = v:match('(.+)=(.+)') --get option if toggling - if not opt then - opt = v + if not opt then + opt = v end - + --check that the opt is valid local ok - for k,v in pairs(values) do + for k in pairs(values) do if strlower(k)==opt then opt = k -- overwrite with key (in case of case mismatches) ok = true break end end - + if not ok then usererr(info, inputpos, "'"..opt.."' - "..L["unknown selection"]) return end - + --check that if val was supplied it is valid if val then if val == L["on"] or val == L["off"] or (tab.tristate and val == L["default"]) then @@ -596,14 +589,14 @@ local function handle(info, inputpos, tab, depth, retfalse) sels[opt] = true end end - + for opt, val in pairs(sels) do local newval - + if (val == true) then --toggle the option local b = callmethod(info, inputpos, tab, "get", opt) - + if tab.tristate then --cycle in true, nil, false order if b then @@ -627,28 +620,28 @@ local function handle(info, inputpos, tab, depth, retfalse) newval = nil end end - + do_final(info, inputpos, tab, "set", opt, newval) end - - + + elseif tab.type=="color" then ------------ color -------------------------------------------- - local str = strtrim(strlower(str)) + local str = strtrim(strlower(strInput)) if str == "" then --TODO: Show current value return end - + local r, g, b, a - + local hasAlpha = tab.hasAlpha if type(hasAlpha) == "function" or type(hasAlpha) == "string" then info.hasAlpha = hasAlpha hasAlpha = callmethod(info, inputpos, tab, 'hasAlpha') info.hasAlpha = nil end - + if hasAlpha then if str:len() == 8 and str:find("^%x*$") then --parse a hex string @@ -662,7 +655,7 @@ local function handle(info, inputpos, tab, depth, retfalse) usererr(info, inputpos, format(L["'%s' - expected 'RRGGBBAA' or 'r g b a'."], str)) return end - + if r >= 0.0 and r <= 1.0 and g >= 0.0 and g <= 1.0 and b >= 0.0 and b <= 1.0 and a >= 0.0 and a <= 1.0 then --values are valid elseif r >= 0 and r <= 255 and g >= 0 and g <= 255 and b >= 0 and b <= 255 and a >= 0 and a <= 255 then @@ -701,12 +694,12 @@ local function handle(info, inputpos, tab, depth, retfalse) usererr(info, inputpos, format(L["'%s' - values must all be either in the range 0-1 or 0-255."], str)) end end - + do_final(info, inputpos, tab, "set", r,g,b,a) elseif tab.type=="keybinding" then ------------ keybinding -------------------------------------------- - local str = strtrim(strlower(str)) + local str = strtrim(strlower(strInput)) if str == "" then --TODO: Show current value return @@ -737,7 +730,7 @@ end -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon", "AceConsole-3.0") -- -- Use AceConsole-3.0 to register a Chat Command -- MyAddon:RegisterChatCommand("mychat", "ChatCommand") --- +-- -- -- Show the GUI if no input is supplied, otherwise handle the chat input. -- function MyAddon:ChatCommand(input) -- -- Assuming "MyOptions" is the appName of a valid options table @@ -754,7 +747,7 @@ function AceConfigCmd:HandleCommand(slashcmd, appName, input) error([[Usage: HandleCommand("slashcmd", "appName", "input"): 'appName' - no options table "]]..tostring(appName)..[[" has been registered]], 2) end local options = assert( optgetter("cmd", MAJOR) ) - + local info = { -- Don't try to recycle this, it gets handed off to callbacks and whatnot [0] = slashcmd, appName = appName, @@ -765,7 +758,7 @@ function AceConfigCmd:HandleCommand(slashcmd, appName, input) uiType = "cmd", uiName = MAJOR, } - + handle(info, 1, options, 0) -- (info, inputpos, table, depth) end diff --git a/TitanClassic/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua b/TitanClassic/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua index 81885ae..146bb7c 100755 --- a/TitanClassic/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua +++ b/TitanClassic/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua @@ -1,13 +1,13 @@ --- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables. -- @class file -- @name AceConfigDialog-3.0 --- @release $Id: AceConfigDialog-3.0.lua 1197 2019-01-21 23:41:10Z nevcairiel $ +-- @release $Id: AceConfigDialog-3.0.lua 1296 2022-11-04 18:50:10Z nevcairiel $ local LibStub = LibStub local gui = LibStub("AceGUI-3.0") local reg = LibStub("AceConfigRegistry-3.0") -local MAJOR, MINOR = "AceConfigDialog-3.0", 69 +local MAJOR, MINOR = "AceConfigDialog-3.0", 86 local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR) if not AceConfigDialog then return end @@ -15,25 +15,20 @@ if not AceConfigDialog then return end AceConfigDialog.OpenFrames = AceConfigDialog.OpenFrames or {} AceConfigDialog.Status = AceConfigDialog.Status or {} AceConfigDialog.frame = AceConfigDialog.frame or CreateFrame("Frame") +AceConfigDialog.tooltip = AceConfigDialog.tooltip or CreateFrame("GameTooltip", "AceConfigDialogTooltip", UIParent, "GameTooltipTemplate") AceConfigDialog.frame.apps = AceConfigDialog.frame.apps or {} AceConfigDialog.frame.closing = AceConfigDialog.frame.closing or {} AceConfigDialog.frame.closeAllOverride = AceConfigDialog.frame.closeAllOverride or {} -- Lua APIs -local tinsert, tsort, tremove = table.insert, table.sort, table.remove +local tinsert, tsort, tremove, wipe = table.insert, table.sort, table.remove, table.wipe local strmatch, format = string.match, string.format local error = error -local pairs, next, select, type, unpack, wipe, ipairs = pairs, next, select, type, unpack, wipe, ipairs +local pairs, next, select, type, unpack, ipairs = pairs, next, select, type, unpack, ipairs local tostring, tonumber = tostring, tonumber local math_min, math_max, math_floor = math.min, math.max, math.floor --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: NORMAL_FONT_COLOR, GameTooltip, StaticPopupDialogs, ACCEPT, CANCEL, StaticPopup_Show --- GLOBALS: PlaySound, GameFontHighlight, GameFontHighlightSmall, GameFontHighlightLarge --- GLOBALS: CloseSpecialWindows, InterfaceOptions_AddCategory, geterrorhandler - local emptyTbl = {} --[[ @@ -56,18 +51,18 @@ local width_multiplier = 170 --[[ Group Types Tree - All Descendant Groups will all become nodes on the tree, direct child options will appear above the tree - - Descendant Groups with inline=true and thier children will not become nodes + - Descendant Groups with inline=true and thier children will not become nodes Tab - Direct Child Groups will become tabs, direct child options will appear above the tab control - - Grandchild groups will default to inline unless specified otherwise + - Grandchild groups will default to inline unless specified otherwise Select- Same as Tab but with entries in a dropdown rather than tabs Inline Groups - - Will not become nodes of a select group, they will be effectivly part of thier parent group seperated by a border - - If declared on a direct child of a root node of a select group, they will appear above the group container control - - When a group is displayed inline, all descendants will also be inline members of the group + - Will not become nodes of a select group, they will be effectivly part of thier parent group seperated by a border + - If declared on a direct child of a root node of a select group, they will appear above the group container control + - When a group is displayed inline, all descendants will also be inline members of the group ]] @@ -152,6 +147,7 @@ local stringIsLiteral = { width = true, image = true, fontSize = true, + tooltipHyperlink = true } --Is Never a function or method @@ -168,11 +164,11 @@ local allIsLiteral = { local function GetOptionsMemberValue(membername, option, options, path, appName, ...) --get definition for the member local inherits = isInherited[membername] - + --get the member of the option, traversing the tree if it can be inherited local member - + if inherits then local group = options if group[membername] ~= nil then @@ -187,22 +183,21 @@ local function GetOptionsMemberValue(membername, option, options, path, appName, else member = option[membername] end - + --check if we need to call a functon, or if we have a literal value if ( not allIsLiteral[membername] ) and ( type(member) == "function" or ((not stringIsLiteral[membername]) and type(member) == "string") ) then --We have a function to call local info = new() --traverse the options table, picking up the handler and filling the info with the path - local handler local group = options - handler = group.handler or handler - + local handler = group.handler + for i = 1, #path do group = GetSubOption(group, path[i]) info[i] = path[i] handler = group.handler or handler end - + info.options = options info.appName = appName info[0] = appName @@ -212,8 +207,8 @@ local function GetOptionsMemberValue(membername, option, options, path, appName, info.type = option.type info.uiType = "dialog" info.uiName = MAJOR - - local a, b, c ,d + + local a, b, c ,d --using 4 returns for the get of a color type, increase if a type needs more if type(member) == "function" then --Call the function @@ -230,8 +225,8 @@ local function GetOptionsMemberValue(membername, option, options, path, appName, return a,b,c,d else --The value isnt a function to call, return it - return member - end + return member + end end --[[calls an options function that could be inherited, method name or function ref @@ -296,7 +291,7 @@ local function compareOptions(a,b) return NameA:upper() < NameB:upper() end if OrderA < 0 then - if OrderB > 0 then + if OrderB >= 0 then return false end else @@ -315,7 +310,7 @@ end local function BuildSortedOptionsTable(group, keySort, opts, options, path, appName) tempOrders = new() tempNames = new() - + if group.plugins then for plugin, t in pairs(group.plugins) do for k, v in pairs(t) do @@ -331,7 +326,7 @@ local function BuildSortedOptionsTable(group, keySort, opts, options, path, appN end end end - + for k, v in pairs(group.args) do if not opts[k] then tinsert(keySort, k) @@ -362,7 +357,7 @@ local function DelTree(tree) end local function CleanUserData(widget, event) - + local user = widget:GetUserDataTable() if user.path then @@ -402,7 +397,7 @@ end -- - Gets a status table for the given appname and options path. -- @param appName The application name as given to `:RegisterOptionsTable()` -- @param path The path to the options (a table with all group keys) --- @return +-- @return function AceConfigDialog:GetStatusTable(appName, path) local status = self.Status @@ -436,7 +431,7 @@ end function AceConfigDialog:SelectGroup(appName, ...) local path = new() - + local app = reg:GetOptionsTable(appName) if not app then error(("%s isn't registed with AceConfigRegistry, unable to open config"):format(appName), 2) @@ -448,9 +443,9 @@ function AceConfigDialog:SelectGroup(appName, ...) status.groups = {} end status = status.groups - local treevalue - local treestatus - + local treevalue + local treestatus + for n = 1, select("#",...) do local key = select(n, ...) @@ -477,12 +472,12 @@ function AceConfigDialog:SelectGroup(appName, ...) --the selected group will be overwritten if a child is the final target but still needs to be open treestatus.selected = treevalue treestatus.groups[treevalue] = true - + end - + --move to the next group in the path group = GetSubOption(group, key) - if not group then + if not group then break end tinsert(path, key) @@ -492,10 +487,10 @@ function AceConfigDialog:SelectGroup(appName, ...) end status = status.groups end - + del(path) reg:NotifyChange(appName) -end +end local function OptionOnMouseOver(widget, event) --show a tooltip/set the status bar to the desc text @@ -504,107 +499,160 @@ local function OptionOnMouseOver(widget, event) local options = user.options local path = user.path local appName = user.appName + local tooltip = AceConfigDialog.tooltip + + tooltip:SetOwner(widget.frame, "ANCHOR_TOPRIGHT") + + local tooltipHyperlink = GetOptionsMemberValue("tooltipHyperlink", opt, options, path, appName) + if tooltipHyperlink then + tooltip:SetHyperlink(tooltipHyperlink) + tooltip:Show() + return + end - GameTooltip:SetOwner(widget.frame, "ANCHOR_TOPRIGHT") local name = GetOptionsMemberValue("name", opt, options, path, appName) local desc = GetOptionsMemberValue("desc", opt, options, path, appName) local usage = GetOptionsMemberValue("usage", opt, options, path, appName) local descStyle = opt.descStyle - + if descStyle and descStyle ~= "tooltip" then return end - - GameTooltip:SetText(name, 1, .82, 0, true) - + + tooltip:SetText(name, 1, .82, 0, true) + if opt.type == "multiselect" then - GameTooltip:AddLine(user.text, 0.5, 0.5, 0.8, true) - end + tooltip:AddLine(user.text, 0.5, 0.5, 0.8, true) + end if type(desc) == "string" then - GameTooltip:AddLine(desc, 1, 1, 1, true) + tooltip:AddLine(desc, 1, 1, 1, true) end if type(usage) == "string" then - GameTooltip:AddLine("Usage: "..usage, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, true) + tooltip:AddLine("Usage: "..usage, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, true) end - GameTooltip:Show() + tooltip:Show() end local function OptionOnMouseLeave(widget, event) - GameTooltip:Hide() + AceConfigDialog.tooltip:Hide() end local function GetFuncName(option) - local type = option.type - if type == "execute" then + if option.type == "execute" then return "func" else return "set" end end +do + local frame = AceConfigDialog.popup + if not frame or oldminor < 81 then + frame = CreateFrame("Frame", nil, UIParent) + AceConfigDialog.popup = frame + frame:Hide() + frame:SetPoint("CENTER", UIParent, "CENTER") + frame:SetSize(320, 72) + frame:EnableMouse(true) -- Do not allow click-through on the frame + frame:SetFrameStrata("TOOLTIP") + frame:SetFrameLevel(100) -- Lots of room to draw under it + frame:SetScript("OnKeyDown", function(self, key) + if key == "ESCAPE" then + self:SetPropagateKeyboardInput(false) + if self.cancel:IsShown() then + self.cancel:Click() + else -- Showing a validation error + self:Hide() + end + else + self:SetPropagateKeyboardInput(true) + end + end) + + local border = CreateFrame("Frame", nil, frame, "DialogBorderOpaqueTemplate") + border:SetAllPoints(frame) + frame:SetFixedFrameStrata(true) + frame:SetFixedFrameLevel(true) + + local text = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlight") + text:SetSize(290, 0) + text:SetPoint("TOP", 0, -16) + frame.text = text + + local function newButton(newText) + local button = CreateFrame("Button", nil, frame) + button:SetSize(128, 21) + button:SetNormalFontObject(GameFontNormal) + button:SetHighlightFontObject(GameFontHighlight) + button:SetNormalTexture(130763) -- "Interface\\Buttons\\UI-DialogBox-Button-Up" + button:GetNormalTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875) + button:SetPushedTexture(130761) -- "Interface\\Buttons\\UI-DialogBox-Button-Down" + button:GetPushedTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875) + button:SetHighlightTexture(130762) -- "Interface\\Buttons\\UI-DialogBox-Button-Highlight" + button:GetHighlightTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875) + button:SetText(newText) + return button + end + + local accept = newButton(ACCEPT) + accept:SetPoint("BOTTOMRIGHT", frame, "BOTTOM", -6, 16) + frame.accept = accept + + local cancel = newButton(CANCEL) + cancel:SetPoint("LEFT", accept, "RIGHT", 13, 0) + frame.cancel = cancel + end +end local function confirmPopup(appName, rootframe, basepath, info, message, func, ...) - if not StaticPopupDialogs["ACECONFIGDIALOG30_CONFIRM_DIALOG"] then - StaticPopupDialogs["ACECONFIGDIALOG30_CONFIRM_DIALOG"] = {} - end - local t = StaticPopupDialogs["ACECONFIGDIALOG30_CONFIRM_DIALOG"] - for k in pairs(t) do - t[k] = nil - end - t.text = message - t.button1 = ACCEPT - t.button2 = CANCEL - t.preferredIndex = STATICPOPUP_NUMDIALOGS - local dialog, oldstrata - t.OnAccept = function() - safecall(func, unpack(t)) - if dialog and oldstrata then - dialog:SetFrameStrata(oldstrata) - end + local frame = AceConfigDialog.popup + frame:Show() + frame.text:SetText(message) + -- From StaticPopup.lua + -- local height = 32 + text:GetHeight() + 2; + -- height = height + 6 + accept:GetHeight() + -- We add 32 + 2 + 6 + 21 (button height) == 61 + local height = 61 + frame.text:GetHeight() + frame:SetHeight(height) + + frame.accept:ClearAllPoints() + frame.accept:SetPoint("BOTTOMRIGHT", frame, "BOTTOM", -6, 16) + frame.cancel:Show() + + local t = {...} + local tCount = select("#", ...) + frame.accept:SetScript("OnClick", function(self) + safecall(func, unpack(t, 1, tCount)) -- Manually set count as unpack() stops on nil (bug with #table) AceConfigDialog:Open(appName, rootframe, unpack(basepath or emptyTbl)) + frame:Hide() + self:SetScript("OnClick", nil) + frame.cancel:SetScript("OnClick", nil) del(info) - end - t.OnCancel = function() - if dialog and oldstrata then - dialog:SetFrameStrata(oldstrata) - end + end) + frame.cancel:SetScript("OnClick", function(self) AceConfigDialog:Open(appName, rootframe, unpack(basepath or emptyTbl)) + frame:Hide() + self:SetScript("OnClick", nil) + frame.accept:SetScript("OnClick", nil) del(info) - end - for i = 1, select("#", ...) do - t[i] = select(i, ...) or false - end - t.timeout = 0 - t.whileDead = 1 - t.hideOnEscape = 1 - - dialog = StaticPopup_Show("ACECONFIGDIALOG30_CONFIRM_DIALOG") - if dialog then - oldstrata = dialog:GetFrameStrata() - dialog:SetFrameStrata("TOOLTIP") - end + end) end local function validationErrorPopup(message) - if not StaticPopupDialogs["ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG"] then - StaticPopupDialogs["ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG"] = {} - end - local t = StaticPopupDialogs["ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG"] - t.text = message - t.button1 = OKAY - t.preferredIndex = STATICPOPUP_NUMDIALOGS - local dialog, oldstrata - t.OnAccept = function() - if dialog and oldstrata then - dialog:SetFrameStrata(oldstrata) - end - end - t.timeout = 0 - t.whileDead = 1 - t.hideOnEscape = 1 - - dialog = StaticPopup_Show("ACECONFIGDIALOG30_VALIDATION_ERROR_DIALOG") - if dialog then - oldstrata = dialog:GetFrameStrata() - dialog:SetFrameStrata("TOOLTIP") - end + local frame = AceConfigDialog.popup + frame:Show() + frame.text:SetText(message) + -- From StaticPopup.lua + -- local height = 32 + text:GetHeight() + 2; + -- height = height + 6 + accept:GetHeight() + -- We add 32 + 2 + 6 + 21 (button height) == 61 + local height = 61 + frame.text:GetHeight() + frame:SetHeight(height) + + frame.accept:ClearAllPoints() + frame.accept:SetPoint("BOTTOM", frame, "BOTTOM", 0, 16) + frame.cancel:Hide() + + frame.accept:SetScript("OnClick", function() + frame:Hide() + end) end local function ActivateControl(widget, event, ...) @@ -627,7 +675,7 @@ local function ActivateControl(widget, event, ...) if group[funcname] ~= nil then func = group[funcname] end - handler = group.handler or handler + handler = group.handler confirm = group.confirm validate = group.validate for i = 1, #path do @@ -675,7 +723,7 @@ local function ActivateControl(widget, event, ...) end end end - + local success if validated and option.type ~= "execute" then if type(validate) == "string" then @@ -690,8 +738,7 @@ local function ActivateControl(widget, event, ...) if not success then validated = false end end end - - local rootframe = user.rootframe + if not validated or type(validated) == "string" then if not validated then if usage then @@ -706,8 +753,8 @@ local function ActivateControl(widget, event, ...) end -- show validate message - if rootframe.SetStatusText then - rootframe:SetStatusText(validated) + if user.rootframe.SetStatusText then + user.rootframe:SetStatusText(validated) else validationErrorPopup(validated) end @@ -715,7 +762,7 @@ local function ActivateControl(widget, event, ...) del(info) return true else - + local confirmText = option.confirmText --call confirm func/method if type(confirm) == "string" then @@ -744,22 +791,22 @@ local function ActivateControl(widget, event, ...) if type(confirm) == "boolean" then if confirm then if not confirmText then - local name, desc = option.name, option.desc - if type(name) == "function" then - name = name(info) + local option_name, desc = option.name, option.desc + if type(option_name) == "function" then + option_name = option_name(info) end if type(desc) == "function" then desc = desc(info) end - confirmText = name + confirmText = option_name if desc then confirmText = confirmText.." - "..desc end end - + local iscustom = user.rootframe:GetUserData("iscustom") local rootframe - + if iscustom then rootframe = user.rootframe end @@ -796,7 +843,7 @@ local function ActivateControl(widget, event, ...) --full refresh of the frame, some controls dont cause this on all events if option.type == "color" then if event == "OnValueConfirmed" then - + if iscustom then AceConfigDialog:Open(user.appName, user.rootframe, unpack(basepath)) else @@ -857,7 +904,7 @@ end local function MultiControlOnClosed(widget, event, ...) local user = widget:GetUserDataTable() - if user.valuechanged then + if user.valuechanged and not widget:IsReleasing() then local iscustom = user.rootframe:GetUserData("iscustom") local basepath = user.rootframe:GetUserData("basepath") or emptyTbl if iscustom then @@ -1049,6 +1096,10 @@ local function CreateControl(userControlType, fallbackControlType) return control end +local function sortTblAsStrings(x,y) + return tostring(x) < tostring(y) -- Support numbers as keys +end + --[[ options - root of the options table being fed container - widget that controls will be placed in @@ -1079,7 +1130,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin else GroupContainer = gui:Create("SimpleGroup") end - + GroupContainer.width = "fill" GroupContainer:SetLayout("flow") container:AddChild(GroupContainer) @@ -1088,14 +1139,12 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin else --Control to feed local control - - local name = GetOptionsMemberValue("name", v, options, path, appName) - + if v.type == "execute" then - + local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName) local image, width, height = GetOptionsMemberValue("image",v, options, path, appName) - + local iconControl = type(image) == "string" or type(image) == "number" control = CreateControl(v.dialogControl or v.control, iconControl and "Icon" or "Button") if iconControl then @@ -1125,7 +1174,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin elseif v.type == "input" then control = CreateControl(v.dialogControl or v.control, v.multiline and "MultiLineEditBox" or "EditBox") - + if v.multiline and control.SetNumLines then control:SetNumLines(tonumber(v.multiline) or 4) end @@ -1144,15 +1193,15 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin local value = GetOptionsMemberValue("get",v, options, path, appName) control:SetValue(value) control:SetCallback("OnValueChanged",ActivateControl) - + if v.descStyle == "inline" then local desc = GetOptionsMemberValue("desc", v, options, path, appName) control:SetDescription(desc) end - + local image = GetOptionsMemberValue("image", v, options, path, appName) local imageCoords = GetOptionsMemberValue("imageCoords", v, options, path, appName) - + if type(image) == "string" or type(image) == "number" then if type(imageCoords) == "table" then control:SetImage(image, unpack(imageCoords)) @@ -1175,6 +1224,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin elseif v.type == "select" then local values = GetOptionsMemberValue("values", v, options, path, appName) + local sorting = GetOptionsMemberValue("sorting", v, options, path, appName) if v.style == "radio" then local disabled = CheckOptionDisabled(v, options, path, appName) local width = GetOptionsMemberValue("width",v,options,path,appName) @@ -1185,12 +1235,14 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin control:PauseLayout() local optionValue = GetOptionsMemberValue("get",v, options, path, appName) - local t = {} - for value, text in pairs(values) do - t[#t+1]=value + if not sorting then + sorting = {} + for value, text in pairs(values) do + sorting[#sorting+1]=value + end + tsort(sorting, sortTblAsStrings) end - tsort(t) - for k, value in ipairs(t) do + for _, value in ipairs(sorting) do local text = values[value] local radio = gui:Create("CheckBox") radio:SetLabel(text) @@ -1224,7 +1276,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin itemType = nil end control:SetLabel(name) - control:SetList(values, nil, itemType) + control:SetList(values, sorting, itemType) local value = GetOptionsMemberValue("get",v, options, path, appName) if not values[value] then value = nil @@ -1236,7 +1288,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin elseif v.type == "multiselect" then local values = GetOptionsMemberValue("values", v, options, path, appName) local disabled = CheckOptionDisabled(v, options, path, appName) - + local valuesort = new() if values then for value, text in pairs(values) do @@ -1244,7 +1296,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin end end tsort(valuesort) - + local controlType = v.dialogControl or v.control if controlType then control = gui:Create(controlType) @@ -1272,8 +1324,8 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin control:SetWidth(width_multiplier) end --check:SetTriState(v.tristate) - for i = 1, #valuesort do - local key = valuesort[i] + for s = 1, #valuesort do + local key = valuesort[s] local value = GetOptionsMemberValue("get",v, options, path, appName, key) control:SetItemValue(key,value) end @@ -1285,8 +1337,8 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin control:PauseLayout() local width = GetOptionsMemberValue("width",v,options,path,appName) - for i = 1, #valuesort do - local value = valuesort[i] + for s = 1, #valuesort do + local value = valuesort[s] local text = values[value] local check = gui:Create("CheckBox") check:SetLabel(text) @@ -1303,7 +1355,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin elseif width == "half" then check:SetWidth(width_multiplier / 2) elseif (type(width) == "number") then - control:SetWidth(width_multiplier * width) + check:SetWidth(width_multiplier * width) elseif width == "full" then check.width = "fill" else @@ -1313,9 +1365,9 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin control:ResumeLayout() control:DoLayout() - + end - + del(valuesort) elseif v.type == "color" then @@ -1340,7 +1392,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin elseif v.type == "description" then control = CreateControl(v.dialogControl or v.control, "Label") control:SetText(name) - + local fontSize = GetOptionsMemberValue("fontSize",v, options, path, appName) if fontSize == "medium" then control:SetFontObject(GameFontHighlight) @@ -1349,10 +1401,10 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin else -- small or invalid control:SetFontObject(GameFontHighlightSmall) end - + local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName) local image, width, height = GetOptionsMemberValue("image",v, options, path, appName) - + if type(image) == "string" or type(image) == "number" then if not width then width = GetOptionsMemberValue("imageWidth",v, options, path, appName) @@ -1373,8 +1425,8 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin end control:SetImageSize(width, height) end - local width = GetOptionsMemberValue("width",v,options,path,appName) - control.width = not width and "fill" + local controlWidth = GetOptionsMemberValue("width",v,options,path,appName) + control.width = not controlWidth and "fill" end --Common Init @@ -1401,7 +1453,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin InjectInfo(control, options, v, path, rootframe, appName) container:AddChild(control) end - + end end tremove(path) @@ -1426,7 +1478,8 @@ local function TreeOnButtonEnter(widget, event, uniquevalue, button) local option = user.option local path = user.path local appName = user.appName - + local tooltip = AceConfigDialog.tooltip + local feedpath = new() for i = 1, #path do feedpath[i] = path[i] @@ -1441,49 +1494,50 @@ local function TreeOnButtonEnter(widget, event, uniquevalue, button) local name = GetOptionsMemberValue("name", group, options, feedpath, appName) local desc = GetOptionsMemberValue("desc", group, options, feedpath, appName) - - GameTooltip:SetOwner(button, "ANCHOR_NONE") + + tooltip:SetOwner(button, "ANCHOR_NONE") + tooltip:ClearAllPoints() if widget.type == "TabGroup" then - GameTooltip:SetPoint("BOTTOM",button,"TOP") + tooltip:SetPoint("BOTTOM",button,"TOP") else - GameTooltip:SetPoint("LEFT",button,"RIGHT") + tooltip:SetPoint("LEFT",button,"RIGHT") end - GameTooltip:SetText(name, 1, .82, 0, true) - + tooltip:SetText(name, 1, .82, 0, true) + if type(desc) == "string" then - GameTooltip:AddLine(desc, 1, 1, 1, true) + tooltip:AddLine(desc, 1, 1, 1, true) end - - GameTooltip:Show() + + tooltip:Show() end local function TreeOnButtonLeave(widget, event, value, button) - GameTooltip:Hide() + AceConfigDialog.tooltip:Hide() end local function GroupExists(appName, options, path, uniquevalue) if not uniquevalue then return false end - + local feedpath = new() local temppath = new() for i = 1, #path do feedpath[i] = path[i] end - + BuildPath(feedpath, ("\001"):split(uniquevalue)) - + local group = options for i = 1, #feedpath do local v = feedpath[i] temppath[i] = v group = GetSubOption(group, v) - - if not group or group.type ~= "group" or CheckOptionHidden(group, options, temppath, appName) then + + if not group or group.type ~= "group" or CheckOptionHidden(group, options, temppath, appName) then del(feedpath) del(temppath) - return false + return false end end del(feedpath) @@ -1602,7 +1656,7 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR tab:SetCallback("OnGroupSelected", GroupSelected) tab:SetCallback("OnTabEnter", TreeOnButtonEnter) tab:SetCallback("OnTabLeave", TreeOnButtonLeave) - + local status = AceConfigDialog:GetStatusTable(appName, path) if not status.groups then status.groups = {} @@ -1622,34 +1676,34 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR break end end - + container:AddChild(tab) elseif grouptype == "select" then - local select = gui:Create("DropdownGroup") - select:SetTitle(name) - InjectInfo(select, options, group, path, rootframe, appName) - select:SetCallback("OnGroupSelected", GroupSelected) + local selectGroup = gui:Create("DropdownGroup") + selectGroup:SetTitle(name) + InjectInfo(selectGroup, options, group, path, rootframe, appName) + selectGroup:SetCallback("OnGroupSelected", GroupSelected) local status = AceConfigDialog:GetStatusTable(appName, path) if not status.groups then status.groups = {} end - select:SetStatusTable(status.groups) + selectGroup:SetStatusTable(status.groups) local grouplist, orderlist = BuildSelect(group, options, path, appName) - select:SetGroupList(grouplist, orderlist) - select:SetUserData("grouplist", grouplist) - select:SetUserData("orderlist", orderlist) + selectGroup:SetGroupList(grouplist, orderlist) + selectGroup:SetUserData("grouplist", grouplist) + selectGroup:SetUserData("orderlist", orderlist) local firstgroup = orderlist[1] if firstgroup then - select:SetGroup((GroupExists(appName, options, path,status.groups.selected) and status.groups.selected) or firstgroup) + selectGroup:SetGroup((GroupExists(appName, options, path,status.groups.selected) and status.groups.selected) or firstgroup) end - - select.width = "fill" - select.height = "fill" - container:AddChild(select) + selectGroup.width = "fill" + selectGroup.height = "fill" + + container:AddChild(selectGroup) --assume tree group by default --if parenttype is tree then this group is already a node on that tree @@ -1657,14 +1711,14 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR local tree = gui:Create("TreeGroup") InjectInfo(tree, options, group, path, rootframe, appName) tree:EnableButtonTooltips(false) - + tree.width = "fill" tree.height = "fill" tree:SetCallback("OnGroupSelected", GroupSelected) tree:SetCallback("OnButtonEnter", TreeOnButtonEnter) tree:SetCallback("OnButtonLeave", TreeOnButtonLeave) - + local status = AceConfigDialog:GetStatusTable(appName, path) if not status.groups then status.groups = {} @@ -1705,7 +1759,7 @@ local function RefreshOnUpdate(this) end this.closing[appName] = nil end - + if this.closeAll then for k, v in pairs(AceConfigDialog.OpenFrames) do if not this.closeAllOverride[k] then @@ -1715,7 +1769,7 @@ local function RefreshOnUpdate(this) this.closeAll = nil wipe(this.closeAllOverride) end - + for appName in pairs(this.apps) do if AceConfigDialog.OpenFrames[appName] then local user = AceConfigDialog.OpenFrames[appName]:GetUserDataTable() @@ -1800,10 +1854,10 @@ function AceConfigDialog:Open(appName, container, ...) local options = app("dialog", MAJOR) local f - + local path = new() local name = GetOptionsMemberValue("name", options, options, path, appName) - + --If an optional path is specified add it to the path table before feeding the options --as container is optional as well it may contain the first element of the path if type(container) == "string" then @@ -1813,7 +1867,7 @@ function AceConfigDialog:Open(appName, container, ...) for n = 1, select("#",...) do tinsert(path, (select(n, ...))) end - + local option = options if type(container) == "table" and container.type == "BlizOptionsGroup" and #path > 0 then for i = 1, #path do @@ -1821,7 +1875,7 @@ function AceConfigDialog:Open(appName, container, ...) end name = format("%s - %s", name, GetOptionsMemberValue("name", option, options, path, appName)) end - + --if a container is given feed into that if container then f = container @@ -1877,13 +1931,13 @@ end -- convert pre-39 BlizOptions structure to the new format if oldminor and oldminor < 39 and AceConfigDialog.BlizOptions then local old = AceConfigDialog.BlizOptions - local new = {} + local newOpt = {} for key, widget in pairs(old) do local appName = widget:GetUserData("appName") - if not new[appName] then new[appName] = {} end - new[appName][key] = widget + if not newOpt[appName] then newOpt[appName] = {} end + newOpt[appName][key] = widget end - AceConfigDialog.BlizOptions = new + AceConfigDialog.BlizOptions = newOpt else AceConfigDialog.BlizOptions = AceConfigDialog.BlizOptions or {} end @@ -1915,23 +1969,23 @@ end -- @param name A descriptive name to display in the options tree (defaults to appName) -- @param parent The parent to use in the interface options tree. -- @param ... The path in the options table to feed into the interface options panel. --- @return The reference to the frame registered into the Interface Options. +-- @return The reference to the frame registered into the Interface Options. +-- @return The category ID to pass to Settings.OpenToCategory (or InterfaceOptionsFrame_OpenToCategory) function AceConfigDialog:AddToBlizOptions(appName, name, parent, ...) local BlizOptions = AceConfigDialog.BlizOptions - + local key = appName for n = 1, select("#", ...) do key = key.."\001"..select(n, ...) end - + if not BlizOptions[appName] then BlizOptions[appName] = {} end - + if not BlizOptions[appName][key] then local group = gui:Create("BlizOptionsGroup") BlizOptions[appName][key] = group - group:SetName(name or appName, parent) group:SetTitle(name or appName) group:SetUserData("appName", appName) @@ -1944,8 +1998,30 @@ function AceConfigDialog:AddToBlizOptions(appName, name, parent, ...) end group:SetCallback("OnShow", FeedToBlizPanel) group:SetCallback("OnHide", ClearBlizPanel) - InterfaceOptions_AddCategory(group.frame) - return group.frame + if Settings and Settings.RegisterCanvasLayoutCategory then + local categoryName = name or appName + if parent then + local category = Settings.GetCategory(parent) + if not category then + error(("The parent category '%s' was not found"):format(parent), 2) + end + local subcategory = Settings.RegisterCanvasLayoutSubcategory(category, group.frame, categoryName) + + -- force the generated ID to be used for subcategories, as these can have very simple names like "Profiles" + group:SetName(subcategory.ID, parent) + else + local category = Settings.RegisterCanvasLayoutCategory(group.frame, categoryName) + -- using appName here would be cleaner, but would not be 100% compatible + -- but for top-level categories it should be fine, as these are typically addon names + category.ID = categoryName + group:SetName(categoryName, parent) + Settings.RegisterAddOnCategory(category) + end + else + group:SetName(name or appName, parent) + InterfaceOptions_AddCategory(group.frame) + end + return group.frame, group.frame.name else error(("%s has already been added to the Blizzard Options Window with the given path"):format(appName), 2) end diff --git a/TitanClassic/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua b/TitanClassic/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua index e7a6d76..175224d 100755 --- a/TitanClassic/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua +++ b/TitanClassic/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua @@ -4,14 +4,14 @@ -- * Valid **uiTypes**: "cmd", "dropdown", "dialog". This is verified by the library at call time. \\ -- * The **uiName** field is expected to contain the full name of the calling addon, including version, e.g. "FooBar-1.0". This is verified by the library at call time.\\ -- * The **appName** field is the options table name as given at registration time \\ --- +-- -- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName". -- @class file -- @name AceConfigRegistry-3.0 --- @release $Id: AceConfigRegistry-3.0.lua 1169 2018-02-27 16:18:28Z nevcairiel $ +-- @release $Id: AceConfigRegistry-3.0.lua 1296 2022-11-04 18:50:10Z nevcairiel $ local CallbackHandler = LibStub("CallbackHandler-1.0") -local MAJOR, MINOR = "AceConfigRegistry-3.0", 18 +local MAJOR, MINOR = "AceConfigRegistry-3.0", 21 local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR) if not AceConfigRegistry then return end @@ -33,7 +33,7 @@ local error, assert = error, assert AceConfigRegistry.validated = { - -- list of options table names ran through :ValidateOptionsTable automatically. + -- list of options table names ran through :ValidateOptionsTable automatically. -- CLEARED ON PURPOSE, since newer versions may have newer validators cmd = {}, dropdown = {}, @@ -59,7 +59,6 @@ local optstring={["nil"]=true,["string"]=true, _="string"} local optstringfunc={["nil"]=true,["string"]=true,["function"]=true, _="string or funcref"} local optstringnumberfunc={["nil"]=true,["string"]=true,["number"]=true,["function"]=true, _="string, number or funcref"} local optnumber={["nil"]=true,["number"]=true, _="number"} -local optmethod={["nil"]=true,["string"]=true,["function"]=true, _="methodname or funcref"} local optmethodfalse={["nil"]=true,["string"]=true,["function"]=true,["boolean"]={[false]=true}, _="methodname, funcref or false"} local optmethodnumber={["nil"]=true,["string"]=true,["function"]=true,["number"]=true, _="methodname, funcref or number"} local optmethodtable={["nil"]=true,["string"]=true,["function"]=true,["table"]=true, _="methodname, funcref or table"} @@ -84,6 +83,7 @@ local basekeys={ dialogHidden=optmethodbool, dropdownHidden=optmethodbool, cmdHidden=optmethodbool, + tooltipHyperlink=optstringfunc, icon=optstringnumberfunc, iconCoords=optmethodtable, handler=opttable, @@ -95,13 +95,20 @@ local basekeys={ } local typedkeys={ - header={}, + header={ + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, + }, description={ image=optstringnumberfunc, imageCoords=optmethodtable, imageHeight=optnumber, imageWidth=optnumber, fontSize=optstringfunc, + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, group={ args=istable, @@ -118,6 +125,9 @@ local typedkeys={ imageCoords=optmethodtable, imageHeight=optnumber, imageWidth=optnumber, + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, input={ pattern=optstring, @@ -131,6 +141,9 @@ local typedkeys={ tristate=optbool, image=optstringnumberfunc, imageCoords=optmethodtable, + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, tristate={ }, @@ -142,12 +155,16 @@ local typedkeys={ step=optnumber, bigStep=optnumber, isPercent=optbool, + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, select={ values=ismethodtable, + sorting=optmethodtable, style={ - ["nil"]=true, - ["string"]={dropdown=true,radio=true}, + ["nil"]=true, + ["string"]={dropdown=true,radio=true}, _="string: 'dropdown' or 'radio'" }, control=optstring, @@ -165,9 +182,14 @@ local typedkeys={ }, color={ hasAlpha=optmethodbool, + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, keybinding={ - -- TODO + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, } @@ -204,13 +226,13 @@ local function validate(options,errlvl,...) if type(options.type)~="string" then err(".type: expected a string, got a "..type(options.type), errlvl,...) end - + -- get type and 'typedkeys' member local tk = typedkeys[options.type] if not tk then err(".type: unknown type '"..options.type.."'", errlvl,...) end - + -- make sure that all options[] are known parameters for k,v in pairs(options) do if not (tk[k] or basekeys[k]) then @@ -303,7 +325,7 @@ function AceConfigRegistry:RegisterOptionsTable(appName, options, skipValidation AceConfigRegistry:ValidateOptionsTable(options, appName, errlvl) -- upgradable AceConfigRegistry.validated[uiType][appName] = true end - return options + return options end elseif type(options)=="function" then AceConfigRegistry.tables[appName] = function(uiType, uiName, errlvl) @@ -341,7 +363,7 @@ function AceConfigRegistry:GetOptionsTable(appName, uiType, uiName) if not f then return nil end - + if uiType then return f(uiType,uiName,1) -- get the table for us else diff --git a/TitanClassic/libs/AceGUI-3.0/AceGUI-3.0.lua b/TitanClassic/libs/AceGUI-3.0/AceGUI-3.0.lua index 3c376c7..7d9a2cf 100755 --- a/TitanClassic/libs/AceGUI-3.0/AceGUI-3.0.lua +++ b/TitanClassic/libs/AceGUI-3.0/AceGUI-3.0.lua @@ -24,7 +24,7 @@ -- f:AddChild(btn) -- @class file -- @name AceGUI-3.0 --- @release $Id: AceGUI-3.0.lua 1247 2021-01-23 23:16:39Z funkehdude $ +-- @release $Id: AceGUI-3.0.lua 1288 2022-09-25 14:19:00Z funkehdude $ local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 41 local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR) @@ -35,17 +35,11 @@ local tinsert, wipe = table.insert, table.wipe local select, pairs, next, type = select, pairs, next, type local error, assert = error, assert local setmetatable, rawget = setmetatable, rawget -local math_max = math.max +local math_max, math_min, math_ceil = math.max, math.min, math.ceil -- WoW APIs local UIParent = UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: geterrorhandler, LibStub - ---local con = LibStub("AceConsole-3.0",true) - AceGUI.WidgetRegistry = AceGUI.WidgetRegistry or {} AceGUI.LayoutRegistry = AceGUI.LayoutRegistry or {} AceGUI.WidgetBase = AceGUI.WidgetBase or {} @@ -94,38 +88,38 @@ do AceGUI.objPools = AceGUI.objPools or {} local objPools = AceGUI.objPools --Returns a new instance, if none are available either returns a new table or calls the given contructor - function newWidget(type) - if not WidgetRegistry[type] then + function newWidget(widgetType) + if not WidgetRegistry[widgetType] then error("Attempt to instantiate unknown widget type", 2) end - if not objPools[type] then - objPools[type] = {} + if not objPools[widgetType] then + objPools[widgetType] = {} end - local newObj = next(objPools[type]) + local newObj = next(objPools[widgetType]) if not newObj then - newObj = WidgetRegistry[type]() - newObj.AceGUIWidgetVersion = WidgetVersions[type] + newObj = WidgetRegistry[widgetType]() + newObj.AceGUIWidgetVersion = WidgetVersions[widgetType] else - objPools[type][newObj] = nil + objPools[widgetType][newObj] = nil -- if the widget is older then the latest, don't even try to reuse it -- just forget about it, and grab a new one. - if not newObj.AceGUIWidgetVersion or newObj.AceGUIWidgetVersion < WidgetVersions[type] then - return newWidget(type) + if not newObj.AceGUIWidgetVersion or newObj.AceGUIWidgetVersion < WidgetVersions[widgetType] then + return newWidget(widgetType) end end return newObj end -- Releases an instance to the Pool - function delWidget(obj,type) - if not objPools[type] then - objPools[type] = {} + function delWidget(obj,widgetType) + if not objPools[widgetType] then + objPools[widgetType] = {} end - if objPools[type][obj] then + if objPools[widgetType][obj] then error("Attempt to Release Widget that is already released", 2) end - objPools[type][obj] = true + objPools[widgetType][obj] = true end end @@ -141,9 +135,9 @@ end -- OnAcquire function on it, before returning. -- @param type The type of the widget. -- @return The newly created widget. -function AceGUI:Create(type) - if WidgetRegistry[type] then - local widget = newWidget(type) +function AceGUI:Create(widgetType) + if WidgetRegistry[widgetType] then + local widget = newWidget(widgetType) if rawget(widget, "Acquire") then widget.OnAcquire = widget.Acquire @@ -161,7 +155,7 @@ function AceGUI:Create(type) if widget.OnAcquire then widget:OnAcquire() else - error(("Widget type %s doesn't supply an OnAcquire Function"):format(type)) + error(("Widget type %s doesn't supply an OnAcquire Function"):format(widgetType)) end -- Set the default Layout ("List") safecall(widget.SetLayout, widget, "List") @@ -589,25 +583,25 @@ AceGUI.counts = AceGUI.counts or {} -- This is used by widgets that require a named frame, e.g. when a Blizzard -- Template requires it. -- @param type The widget type -function AceGUI:GetNextWidgetNum(type) - if not self.counts[type] then - self.counts[type] = 0 +function AceGUI:GetNextWidgetNum(widgetType) + if not self.counts[widgetType] then + self.counts[widgetType] = 0 end - self.counts[type] = self.counts[type] + 1 - return self.counts[type] + self.counts[widgetType] = self.counts[widgetType] + 1 + return self.counts[widgetType] end --- Return the number of created widgets for this type. -- In contrast to GetNextWidgetNum, the number is not incremented. --- @param type The widget type -function AceGUI:GetWidgetCount(type) - return self.counts[type] or 0 +-- @param widgetType The widget type +function AceGUI:GetWidgetCount(widgetType) + return self.counts[widgetType] or 0 end --- Return the version of the currently registered widget type. --- @param type The widget type -function AceGUI:GetWidgetVersion(type) - return WidgetVersions[type] +-- @param widgetType The widget type +function AceGUI:GetWidgetVersion(widgetType) + return WidgetVersions[widgetType] end ------------- @@ -770,7 +764,6 @@ AceGUI:RegisterLayout("Flow", usedwidth = 0 rowstart = frame - rowstartoffset = frameoffset if child.DoLayout then child:DoLayout() @@ -813,7 +806,8 @@ local GetCellAlign = function (dir, tableObj, colObj, cellObj, cell, child) or colObj and (colObj["align" .. dir] or colObj.align) or tableObj["align" .. dir] or tableObj.align or "CENTERLEFT" - local child, cell, val = child or 0, cell or 0, nil + local val + child, cell = child or 0, cell or 0 if type(fn) == "string" then fn = fn:lower() @@ -827,7 +821,7 @@ local GetCellAlign = function (dir, tableObj, colObj, cellObj, cell, child) val = fn end - return fn, max(0, min(val, cell)) + return fn, math_max(0, math_min(val, cell)) end -- Get width or height for multiple cells combined @@ -836,7 +830,7 @@ local GetCellDimension = function (dir, laneDim, from, to, space) for cell=from,to do dim = dim + (laneDim[cell] or 0) end - return dim + max(0, to - from) * (space or 0) + return dim + math_max(0, to - from) * (space or 0) end --[[ Options @@ -882,7 +876,7 @@ AceGUI:RegisterLayout("Table", repeat n = n + 1 local col = (n - 1) % #cols + 1 - local row = ceil(n / #cols) + local row = math_ceil(n / #cols) local rowspan = rowspans[col] local cell = rowspan and rowspan.child or child local cellObj = cell:GetUserData("cell") @@ -898,7 +892,7 @@ AceGUI:RegisterLayout("Table", end -- Colspan - local colspan = max(0, min((cellObj and cellObj.colspan or 1) - 1, #cols - col)) + local colspan = math_max(0, math_min((cellObj and cellObj.colspan or 1) - 1, #cols - col)) n = n + colspan -- Place the cell @@ -915,7 +909,7 @@ AceGUI:RegisterLayout("Table", end end - local rows = ceil(n / #cols) + local rows = math_ceil(n / #cols) -- Determine fixed size cols and collect weights local extantH, totalWeight = totalH, 0 @@ -940,16 +934,16 @@ AceGUI:RegisterLayout("Table", f:ClearAllPoints() local childH = f:GetWidth() or 0 - laneH[col] = max(laneH[col], childH - GetCellDimension("H", laneH, colStart[child], col - 1, spaceH)) + laneH[col] = math_max(laneH[col], childH - GetCellDimension("H", laneH, colStart[child], col - 1, spaceH)) end end - laneH[col] = max(colObj.min or colObj[1] or 0, min(laneH[col], colObj.max or colObj[2] or laneH[col])) + laneH[col] = math_max(colObj.min or colObj[1] or 0, math_min(laneH[col], colObj.max or colObj[2] or laneH[col])) else -- Rel./Abs. width laneH[col] = colObj.width < 1 and colObj.width * totalH or colObj.width end - extantH = max(0, extantH - laneH[col]) + extantH = math_max(0, extantH - laneH[col]) end end @@ -988,7 +982,7 @@ AceGUI:RegisterLayout("Table", child:DoLayout() end - rowV = max(rowV, (f:GetHeight() or 0) - GetCellDimension("V", laneV, rowStart[child], row - 1, spaceV)) + rowV = math_max(rowV, (f:GetHeight() or 0) - GetCellDimension("V", laneV, rowStart[child], row - 1, spaceV)) end end diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua index 200fc71..bf1eae7 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua @@ -2,7 +2,7 @@ BlizOptionsGroup Container Simple container widget for the integration of AceGUI into the Blizzard Interface Options -------------------------------------------------------------------------------]] -local Type, Version = "BlizOptionsGroup", 21 +local Type, Version = "BlizOptionsGroup", 26 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -99,7 +99,7 @@ local methods = { Constructor -------------------------------------------------------------------------------]] local function Constructor() - local frame = CreateFrame("Frame") + local frame = CreateFrame("Frame", nil, InterfaceOptionsFramePanelContainer) frame:Hide() -- support functions for the Blizzard Interface Options @@ -108,6 +108,11 @@ local function Constructor() frame.default = default frame.refresh = refresh + -- 10.0 support function aliases (cancel has been removed) + frame.OnCommit = okay + frame.OnDefault = default + frame.OnRefresh = refresh + frame:SetScript("OnHide", OnHide) frame:SetScript("OnShow", OnShow) diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua index c4c6092..2322e3d 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua @@ -125,7 +125,7 @@ local function Constructor() dropdown.frame:Show() dropdown:SetLabel("") - local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) + local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") border:SetPoint("TOPLEFT", 0, -26) border:SetPoint("BOTTOMRIGHT", 0, 3) border:SetBackdrop(PaneBackdrop) diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua index b9581d6..ca90890 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua @@ -1,7 +1,7 @@ --[[----------------------------------------------------------------------------- Frame Container -------------------------------------------------------------------------------]] -local Type, Version = "Frame", 28 +local Type, Version = "Frame", 30 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -13,10 +13,6 @@ local wipe = table.wipe local PlaySound = PlaySound local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: CLOSE - --[[----------------------------------------------------------------------------- Scripts -------------------------------------------------------------------------------]] @@ -180,7 +176,7 @@ local PaneBackdrop = { } local function Constructor() - local frame = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil) + local frame = CreateFrame("Frame", nil, UIParent, "BackdropTemplate") frame:Hide() frame:EnableMouse(true) @@ -190,7 +186,11 @@ local function Constructor() frame:SetFrameLevel(100) -- Lots of room to draw under it frame:SetBackdrop(FrameBackdrop) frame:SetBackdropColor(0, 0, 0, 1) - frame:SetMinResize(400, 200) + if frame.SetResizeBounds then -- WoW 10.0 + frame:SetResizeBounds(400, 200) + else + frame:SetMinResize(400, 200) + end frame:SetToplevel(true) frame:SetScript("OnShow", Frame_OnShow) frame:SetScript("OnHide", Frame_OnClose) @@ -203,7 +203,7 @@ local function Constructor() closebutton:SetWidth(100) closebutton:SetText(CLOSE) - local statusbg = CreateFrame("Button", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) + local statusbg = CreateFrame("Button", nil, frame, "BackdropTemplate") statusbg:SetPoint("BOTTOMLEFT", 15, 15) statusbg:SetPoint("BOTTOMRIGHT", -132, 15) statusbg:SetHeight(24) @@ -271,7 +271,7 @@ local function Constructor() line2:SetHeight(8) line2:SetPoint("BOTTOMRIGHT", -8, 8) line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border - local x = 0.1 * 8/17 + x = 0.1 * 8/17 line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) local sizer_s = CreateFrame("Frame", nil, frame) diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua index 26db900..04b4d5d 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua @@ -75,7 +75,7 @@ local function Constructor() titletext:SetJustifyH("LEFT") titletext:SetHeight(18) - local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) + local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") border:SetPoint("TOPLEFT", 0, -17) border:SetPoint("BOTTOMRIGHT", -1, 3) border:SetBackdrop(PaneBackdrop) diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua index 0649c06..8a5756f 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua @@ -2,7 +2,7 @@ TabGroup Container Container that uses tabs on top to switch between groups. -------------------------------------------------------------------------------]] -local Type, Version = "TabGroup", 37 +local Type, Version = "TabGroup", 38 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -14,10 +14,6 @@ local PlaySound = PlaySound local CreateFrame, UIParent = CreateFrame, UIParent local _G = _G --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: PanelTemplates_TabResize, PanelTemplates_SetDisabledTabState, PanelTemplates_SelectTab, PanelTemplates_DeselectTab - -- local upvalue storage used by BuildTabs local widths = {} local rowwidths = {} @@ -26,6 +22,143 @@ local rowends = {} --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] + +local function PanelTemplates_TabResize(tab, padding, absoluteSize, minWidth, maxWidth, absoluteTextSize) + local tabName = tab:GetName(); + + local buttonMiddle = tab.Middle or tab.middleTexture or _G[tabName.."Middle"]; + local buttonMiddleDisabled = tab.MiddleDisabled or (tabName and _G[tabName.."MiddleDisabled"]); + local left = tab.Left or tab.leftTexture or _G[tabName.."Left"]; + local sideWidths = 2 * left:GetWidth(); + local tabText = tab.Text or _G[tab:GetName().."Text"]; + local highlightTexture = tab.HighlightTexture or (tabName and _G[tabName.."HighlightTexture"]); + + local width, tabWidth; + local textWidth; + if ( absoluteTextSize ) then + textWidth = absoluteTextSize; + else + tabText:SetWidth(0); + textWidth = tabText:GetWidth(); + end + -- If there's an absolute size specified then use it + if ( absoluteSize ) then + if ( absoluteSize < sideWidths) then + width = 1; + tabWidth = sideWidths + else + width = absoluteSize - sideWidths; + tabWidth = absoluteSize + end + tabText:SetWidth(width); + else + -- Otherwise try to use padding + if ( padding ) then + width = textWidth + padding; + else + width = textWidth + 24; + end + -- If greater than the maxWidth then cap it + if ( maxWidth and width > maxWidth ) then + if ( padding ) then + width = maxWidth + padding; + else + width = maxWidth + 24; + end + tabText:SetWidth(width); + else + tabText:SetWidth(0); + end + if (minWidth and width < minWidth) then + width = minWidth; + end + tabWidth = width + sideWidths; + end + + if ( buttonMiddle ) then + buttonMiddle:SetWidth(width); + end + if ( buttonMiddleDisabled ) then + buttonMiddleDisabled:SetWidth(width); + end + + tab:SetWidth(tabWidth); + + if ( highlightTexture ) then + highlightTexture:SetWidth(tabWidth); + end +end + +local function PanelTemplates_DeselectTab(tab) + local name = tab:GetName(); + + local left = tab.Left or _G[name.."Left"]; + local middle = tab.Middle or _G[name.."Middle"]; + local right = tab.Right or _G[name.."Right"]; + left:Show(); + middle:Show(); + right:Show(); + --tab:UnlockHighlight(); + tab:Enable(); + local text = tab.Text or _G[name.."Text"]; + text:SetPoint("CENTER", tab, "CENTER", (tab.deselectedTextX or 0), (tab.deselectedTextY or 2)); + + local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"]; + local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"]; + local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"]; + leftDisabled:Hide(); + middleDisabled:Hide(); + rightDisabled:Hide(); +end + +local function PanelTemplates_SelectTab(tab) + local name = tab:GetName(); + + local left = tab.Left or _G[name.."Left"]; + local middle = tab.Middle or _G[name.."Middle"]; + local right = tab.Right or _G[name.."Right"]; + left:Hide(); + middle:Hide(); + right:Hide(); + --tab:LockHighlight(); + tab:Disable(); + tab:SetDisabledFontObject(GameFontHighlightSmall); + local text = tab.Text or _G[name.."Text"]; + text:SetPoint("CENTER", tab, "CENTER", (tab.selectedTextX or 0), (tab.selectedTextY or -3)); + + local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"]; + local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"]; + local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"]; + leftDisabled:Show(); + middleDisabled:Show(); + rightDisabled:Show(); + + if GameTooltip:IsOwned(tab) then + GameTooltip:Hide(); + end +end + +local function PanelTemplates_SetDisabledTabState(tab) + local name = tab:GetName(); + local left = tab.Left or _G[name.."Left"]; + local middle = tab.Middle or _G[name.."Middle"]; + local right = tab.Right or _G[name.."Right"]; + left:Show(); + middle:Show(); + right:Show(); + --tab:UnlockHighlight(); + tab:Disable(); + tab.text = tab:GetText(); + -- Gray out text + tab:SetDisabledFontObject(GameFontDisableSmall); + local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"]; + local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"]; + local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"]; + leftDisabled:Hide(); + middleDisabled:Hide(); + rightDisabled:Hide(); +end + local function UpdateTabLook(frame) if frame.disabled then PanelTemplates_SetDisabledTabState(frame) @@ -103,11 +236,64 @@ local methods = { ["CreateTab"] = function(self, id) local tabname = ("AceGUITabGroup%dTab%d"):format(self.num, id) - local tab = CreateFrame("Button", tabname, self.border, "OptionsFrameTabButtonTemplate") + local tab = CreateFrame("Button", tabname, self.border) + tab:SetSize(115, 24) + tab.deselectedTextY = -3 + tab.selectedTextY = -2 + + tab.LeftDisabled = tab:CreateTexture(tabname .. "LeftDisabled", "BORDER") + tab.LeftDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab") + tab.LeftDisabled:SetSize(20, 24) + tab.LeftDisabled:SetPoint("BOTTOMLEFT", 0, -3) + tab.LeftDisabled:SetTexCoord(0, 0.15625, 0, 1.0) + + tab.MiddleDisabled = tab:CreateTexture(tabname .. "MiddleDisabled", "BORDER") + tab.MiddleDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab") + tab.MiddleDisabled:SetSize(88, 24) + tab.MiddleDisabled:SetPoint("LEFT", tab.LeftDisabled, "RIGHT") + tab.MiddleDisabled:SetTexCoord(0.15625, 0.84375, 0, 1.0) + + tab.RightDisabled = tab:CreateTexture(tabname .. "RightDisabled", "BORDER") + tab.RightDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab") + tab.RightDisabled:SetSize(20, 24) + tab.RightDisabled:SetPoint("LEFT", tab.MiddleDisabled, "RIGHT") + tab.RightDisabled:SetTexCoord(0.84375, 1.0, 0, 1.0) + + tab.Left = tab:CreateTexture(tabname .. "Left", "BORDER") + tab.Left:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab") + tab.Left:SetSize(20, 24) + tab.Left:SetPoint("TOPLEFT") + tab.Left:SetTexCoord(0, 0.15625, 0, 1.0) + + tab.Middle = tab:CreateTexture(tabname .. "Middle", "BORDER") + tab.Middle:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab") + tab.Middle:SetSize(88, 24) + tab.Middle:SetPoint("LEFT", tab.Left, "RIGHT") + tab.Middle:SetTexCoord(0.15625, 0.84375, 0, 1.0) + + tab.Right = tab:CreateTexture(tabname .. "Right", "BORDER") + tab.Right:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab") + tab.Right:SetSize(20, 24) + tab.Right:SetPoint("LEFT", tab.Middle, "RIGHT") + tab.Right:SetTexCoord(0.84375, 1.0, 0, 1.0) + + tab.Text = tab:CreateFontString(tabname .. "Text") + tab:SetFontString(tab.Text) + + tab:SetNormalFontObject(GameFontNormalSmall) + tab:SetHighlightFontObject(GameFontHighlightSmall) + tab:SetDisabledFontObject(GameFontHighlightSmall) + tab:SetHighlightTexture("Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight", "ADD") + tab.HighlightTexture = tab:GetHighlightTexture() + tab.HighlightTexture:ClearAllPoints() + tab.HighlightTexture:SetPoint("LEFT", tab, "LEFT", 10, -4) + tab.HighlightTexture:SetPoint("RIGHT", tab, "RIGHT", -10, -4) + _G[tabname .. "HighlightTexture"] = tab.HighlightTexture + tab.obj = self tab.id = id - tab.text = _G[tabname .. "Text"] + tab.text = tab.Text -- compat tab.text:ClearAllPoints() tab.text:SetPoint("LEFT", 14, -3) tab.text:SetPoint("RIGHT", -12, -3) @@ -316,7 +502,7 @@ local function Constructor() titletext:SetHeight(18) titletext:SetText("") - local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) + local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") border:SetPoint("TOPLEFT", 1, -27) border:SetPoint("BOTTOMRIGHT", -1, 3) border:SetBackdrop(PaneBackdrop) diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua index c09c5ec..ca9b2df 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua @@ -2,22 +2,18 @@ TreeGroup Container Container that uses a tree control to switch between groups. -------------------------------------------------------------------------------]] -local Type, Version = "TreeGroup", 45 +local Type, Version = "TreeGroup", 47 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end -- Lua APIs local next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type -local math_min, math_max, floor = math.min, math.max, floor +local math_min, math_max, floor = math.min, math.max, math.floor local select, tremove, unpack, tconcat = select, table.remove, unpack, table.concat -- WoW APIs local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: FONT_COLOR_CODE_CLOSE - -- Recycling functions local new, del do @@ -567,7 +563,11 @@ local methods = { if maxtreewidth > 100 and status.treewidth > maxtreewidth then self:SetTreeWidth(maxtreewidth, status.treesizable) end - treeframe:SetMaxResize(maxtreewidth, 1600) + if treeframe.SetResizeBounds then + treeframe:SetResizeBounds(100, 1, maxtreewidth, 1600) + else + treeframe:SetMaxResize(maxtreewidth, 1600) + end end, ["OnHeightSet"] = function(self, height) @@ -637,7 +637,7 @@ local function Constructor() local num = AceGUI:GetNextWidgetNum(Type) local frame = CreateFrame("Frame", nil, UIParent) - local treeframe = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) + local treeframe = CreateFrame("Frame", nil, frame, "BackdropTemplate") treeframe:SetPoint("TOPLEFT") treeframe:SetPoint("BOTTOMLEFT") treeframe:SetWidth(DEFAULT_TREE_WIDTH) @@ -646,13 +646,17 @@ local function Constructor() treeframe:SetBackdropColor(0.1, 0.1, 0.1, 0.5) treeframe:SetBackdropBorderColor(0.4, 0.4, 0.4) treeframe:SetResizable(true) - treeframe:SetMinResize(100, 1) - treeframe:SetMaxResize(400, 1600) + if treeframe.SetResizeBounds then -- WoW 10.0 + treeframe:SetResizeBounds(100, 1, 400, 1600) + else + treeframe:SetMinResize(100, 1) + treeframe:SetMaxResize(400, 1600) + end treeframe:SetScript("OnUpdate", FirstFrameUpdate) treeframe:SetScript("OnSizeChanged", Tree_OnSizeChanged) treeframe:SetScript("OnMouseWheel", Tree_OnMouseWheel) - local dragger = CreateFrame("Frame", nil, treeframe, BackdropTemplateMixin and "BackdropTemplate" or nil) + local dragger = CreateFrame("Frame", nil, treeframe, "BackdropTemplate") dragger:SetWidth(8) dragger:SetPoint("TOP", treeframe, "TOPRIGHT") dragger:SetPoint("BOTTOM", treeframe, "BOTTOMRIGHT") @@ -677,7 +681,7 @@ local function Constructor() scrollbg:SetAllPoints(scrollbar) scrollbg:SetColorTexture(0,0,0,0.4) - local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) + local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") border:SetPoint("TOPLEFT", treeframe, "TOPRIGHT") border:SetPoint("BOTTOMRIGHT") border:SetBackdrop(PaneBackdrop) diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua index a9192b3..5729bfd 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua @@ -7,10 +7,6 @@ local pairs, assert, type = pairs, assert, type local PlaySound = PlaySound local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: GameFontNormal - ---------------- -- Main Frame -- ---------------- @@ -21,7 +17,7 @@ local CreateFrame, UIParent = CreateFrame, UIParent ]] do local Type = "Window" - local Version = 6 + local Version = 8 local function frameOnShow(this) this.obj:Fire("OnShow") @@ -186,7 +182,11 @@ do frame:SetScript("OnShow",frameOnShow) frame:SetScript("OnHide",frameOnClose) - frame:SetMinResize(240,240) + if frame.SetResizeBounds then -- WoW 10.0 + frame:SetResizeBounds(240,240) + else + frame:SetMinResize(240,240) + end frame:SetToplevel(true) local titlebg = frame:CreateTexture(nil, "BACKGROUND") @@ -300,7 +300,7 @@ do line2:SetHeight(8) line2:SetPoint("BOTTOMRIGHT", -8, 8) line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border - local x = 0.1 * 8/17 + x = 0.1 * 8/17 line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) local sizer_s = CreateFrame("Frame",nil,frame) diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua index d2adb88..6e64292 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua @@ -12,10 +12,6 @@ local select, pairs = select, pairs local PlaySound = PlaySound local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: SetDesaturation, GameFontHighlight - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] @@ -199,14 +195,14 @@ local methods = { ["SetDescription"] = function(self, desc) if desc then if not self.desc then - local desc = self.frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") - desc:ClearAllPoints() - desc:SetPoint("TOPLEFT", self.checkbg, "TOPRIGHT", 5, -21) - desc:SetWidth(self.frame.width - 30) - desc:SetPoint("RIGHT", self.frame, "RIGHT", -30, 0) - desc:SetJustifyH("LEFT") - desc:SetJustifyV("TOP") - self.desc = desc + local f = self.frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") + f:ClearAllPoints() + f:SetPoint("TOPLEFT", self.checkbg, "TOPRIGHT", 5, -21) + f:SetWidth(self.frame.width - 30) + f:SetPoint("RIGHT", self.frame, "RIGHT", -30, 0) + f:SetJustifyH("LEFT") + f:SetJustifyV("TOP") + self.desc = f end self.desc:Show() --self.text:SetFontObject(GameFontNormal) diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua index f4cab66..699d583 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua @@ -11,10 +11,6 @@ local pairs = pairs -- WoW APIs local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: ColorPickerFrame, OpacitySliderFrame - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua index 9dd4b60..0ad94f8 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua @@ -1,4 +1,4 @@ ---[[ $Id: AceGUIWidget-DropDown-Items.lua 1202 2019-05-15 23:11:22Z nevcairiel $ ]]-- +--[[ $Id: AceGUIWidget-DropDown-Items.lua 1272 2022-08-29 15:56:35Z nevcairiel $ ]]-- local AceGUI = LibStub("AceGUI-3.0") @@ -41,7 +41,7 @@ local ItemBase = { -- NOTE: The ItemBase version is added to each item's version number -- to ensure proper updates on ItemBase changes. -- Use at least 1000er steps. - version = 1000, + version = 2000, counter = 0, } @@ -178,7 +178,7 @@ function ItemBase.Create(type) highlight:Hide() self.highlight = highlight - local check = frame:CreateTexture("OVERLAY") + local check = frame:CreateTexture(nil, "OVERLAY") check:SetWidth(16) check:SetHeight(16) check:SetPoint("LEFT",frame,"LEFT",3,-1) @@ -186,7 +186,7 @@ function ItemBase.Create(type) check:Hide() self.check = check - local sub = frame:CreateTexture("OVERLAY") + local sub = frame:CreateTexture(nil, "OVERLAY") sub:SetWidth(16) sub:SetHeight(16) sub:SetPoint("RIGHT",frame,"RIGHT",-3,-1) diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua index 94c5ded..3d8dd11 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua @@ -1,4 +1,4 @@ ---[[ $Id: AceGUIWidget-DropDown.lua 1239 2020-09-20 10:22:02Z nevcairiel $ ]]-- +--[[ $Id: AceGUIWidget-DropDown.lua 1284 2022-09-25 09:15:30Z nevcairiel $ ]]-- local AceGUI = LibStub("AceGUI-3.0") -- Lua APIs @@ -11,10 +11,6 @@ local PlaySound = PlaySound local UIParent, CreateFrame = UIParent, CreateFrame local _G = _G --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: CLOSE - local function fixlevels(parent,...) local i = 1 local child = select(i, ...) @@ -253,7 +249,7 @@ do local function Constructor() local count = AceGUI:GetNextWidgetNum(widgetType) - local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil) + local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent, "BackdropTemplate") local self = {} self.count = count self.type = widgetType @@ -304,7 +300,7 @@ do scrollFrame.obj = self itemFrame.obj = self - local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame, BackdropTemplateMixin and "BackdropTemplate" or nil) + local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame, "BackdropTemplate") slider:SetOrientation("VERTICAL") slider:SetHitRectInsets(0, 0, -10, 0) slider:SetBackdrop(sliderBackdrop) @@ -351,7 +347,7 @@ end do local widgetType = "Dropdown" - local widgetVersion = 35 + local widgetVersion = 36 --[[ Static data ]]-- @@ -376,7 +372,6 @@ do local function Dropdown_TogglePullout(this) local self = this.obj - PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON if self.open then self.open = nil self.pullout:Close() diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua index cc1b6a3..85a32a0 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua @@ -14,10 +14,6 @@ local GetCursorInfo, ClearCursor, GetSpellInfo = GetCursorInfo, ClearCursor, Get local CreateFrame, UIParent = CreateFrame, UIParent local _G = _G --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: AceGUIEditBoxInsertLink, ChatFontNormal, OKAY - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua index b195e0c..96f7e5b 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua @@ -13,10 +13,6 @@ local pairs = pairs local IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown = IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: NOT_BOUND - --[[----------------------------------------------------------------------------- Scripts -------------------------------------------------------------------------------]] @@ -214,7 +210,7 @@ local function Constructor() label:SetJustifyH("CENTER") label:SetHeight(18) - local msgframe = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil) + local msgframe = CreateFrame("Frame", nil, UIParent, "BackdropTemplate") msgframe:SetHeight(30) msgframe:SetBackdrop(ControlBackdrop) msgframe:SetBackdropColor(0,0,0) diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua index 2cce725..6bbcf3b 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua @@ -2,7 +2,7 @@ Label Widget Displays text and optionally an icon. -------------------------------------------------------------------------------]] -local Type, Version = "Label", 27 +local Type, Version = "Label", 28 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -12,10 +12,6 @@ local max, select, pairs = math.max, select, pairs -- WoW APIs local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: GameFontHighlightSmall - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] @@ -129,12 +125,16 @@ local methods = { end, ["SetFont"] = function(self, font, height, flags) - self.label:SetFont(font, height, flags) - UpdateImageAnchor(self) + if not self.fontObject then + self.fontObject = CreateFont("AceGUI30LabelFont" .. AceGUI:GetNextWidgetNum(Type)) + end + self.fontObject:SetFont(font, height, flags) + self:SetFontObject(self.fontObject) end, ["SetFontObject"] = function(self, font) - self:SetFont((font or GameFontHighlightSmall):GetFont()) + self.label:SetFontObject(font or GameFontHighlightSmall) + UpdateImageAnchor(self) end, ["SetImageSize"] = function(self, width, height) diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua index cfcb500..c33a986 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua @@ -1,4 +1,4 @@ -local Type, Version = "MultiLineEditBox", 29 +local Type, Version = "MultiLineEditBox", 32 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -10,10 +10,6 @@ local GetCursorInfo, GetSpellInfo, ClearCursor = GetCursorInfo, GetSpellInfo, Cl local CreateFrame, UIParent = CreateFrame, UIParent local _G = _G --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: ACCEPT, ChatFontNormal - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] @@ -145,6 +141,14 @@ local function OnVerticalScroll(self, offset) editBox:SetHitRectInsets(0, 0, offset, editBox:GetHeight() - offset - self:GetHeight()) end +local function OnScrollRangeChanged(self, xrange, yrange) + if yrange == 0 then + self.obj.editBox:SetHitRectInsets(0, 0, 0, 0) + else + OnVerticalScroll(self, self:GetVerticalScroll()) + end +end + local function OnShowFocus(frame) frame.obj.editBox:SetFocus() frame:SetScript("OnShow", nil) @@ -257,8 +261,6 @@ local methods = { ["SetCursorPosition"] = function(self, ...) return self.editBox:SetCursorPosition(...) end, - - } --[[----------------------------------------------------------------------------- @@ -297,7 +299,7 @@ local function Constructor() text:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -5, 1) text:SetJustifyV("MIDDLE") - local scrollBG = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) + local scrollBG = CreateFrame("Frame", nil, frame, "BackdropTemplate") scrollBG:SetBackdrop(backdrop) scrollBG:SetBackdropColor(0, 0, 0) scrollBG:SetBackdropBorderColor(0.4, 0.4, 0.4) @@ -321,6 +323,7 @@ local function Constructor() scrollFrame:SetScript("OnReceiveDrag", OnReceiveDrag) scrollFrame:SetScript("OnSizeChanged", OnSizeChanged) scrollFrame:HookScript("OnVerticalScroll", OnVerticalScroll) + scrollFrame:HookScript("OnScrollRangeChanged", OnScrollRangeChanged) local editBox = CreateFrame("EditBox", ("%s%dEdit"):format(Type, widgetNum), scrollFrame) editBox:SetAllPoints() diff --git a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua index ea655b6..8989608 100755 --- a/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua +++ b/TitanClassic/libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua @@ -14,10 +14,6 @@ local tonumber, pairs = tonumber, pairs local PlaySound = PlaySound local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: GameFontHighlightSmall - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] @@ -31,13 +27,13 @@ local function UpdateText(self) end local function UpdateLabels(self) - local min, max = (self.min or 0), (self.max or 100) + local min_value, max_value = (self.min or 0), (self.max or 100) if self.ispercent then - self.lowtext:SetFormattedText("%s%%", (min * 100)) - self.hightext:SetFormattedText("%s%%", (max * 100)) + self.lowtext:SetFormattedText("%s%%", (min_value * 100)) + self.hightext:SetFormattedText("%s%%", (max_value * 100)) else - self.lowtext:SetText(min) - self.hightext:SetText(max) + self.lowtext:SetText(min_value) + self.hightext:SetText(max_value) end end @@ -175,13 +171,13 @@ local methods = { self.label:SetText(text) end, - ["SetSliderValues"] = function(self, min, max, step) + ["SetSliderValues"] = function(self, min_value, max_value, step) local frame = self.slider frame.setup = true - self.min = min - self.max = max + self.min = min_value + self.max = max_value self.step = step - frame:SetMinMaxValues(min or 0,max or 100) + frame:SetMinMaxValues(min_value or 0,max_value or 100) UpdateLabels(self) frame:SetValueStep(step or 1) if self.value then @@ -225,7 +221,7 @@ local function Constructor() label:SetJustifyH("CENTER") label:SetHeight(15) - local slider = CreateFrame("Slider", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) + local slider = CreateFrame("Slider", nil, frame, "BackdropTemplate") slider:SetOrientation("HORIZONTAL") slider:SetHeight(15) slider:SetHitRectInsets(0, 0, -10, 0) @@ -247,7 +243,7 @@ local function Constructor() local hightext = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") hightext:SetPoint("TOPRIGHT", slider, "BOTTOMRIGHT", -2, 3) - local editbox = CreateFrame("EditBox", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) + local editbox = CreateFrame("EditBox", nil, frame, "BackdropTemplate") editbox:SetAutoFocus(false) editbox:SetFontObject(GameFontHighlightSmall) editbox:SetPoint("TOP", slider, "BOTTOM") diff --git a/TitanClassic/libs/AceHook-3.0/AceHook-3.0.lua b/TitanClassic/libs/AceHook-3.0/AceHook-3.0.lua index ad91467..6bfc798 100755 --- a/TitanClassic/libs/AceHook-3.0/AceHook-3.0.lua +++ b/TitanClassic/libs/AceHook-3.0/AceHook-3.0.lua @@ -2,15 +2,15 @@ -- Using AceHook-3.0 is recommended when you need to unhook your hooks again, so the hook chain isn't broken -- when you manually restore the original function. -- --- **AceHook-3.0** can be embeded into your addon, either explicitly by calling AceHook:Embed(MyAddon) or by +-- **AceHook-3.0** can be embeded into your addon, either explicitly by calling AceHook:Embed(MyAddon) or by -- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object -- and can be accessed directly, without having to explicitly call AceHook itself.\\ -- It is recommended to embed AceHook, otherwise you'll have to specify a custom `self` on all calls you -- make into AceHook. -- @class file -- @name AceHook-3.0 --- @release $Id: AceHook-3.0.lua 1118 2014-10-12 08:21:54Z nevcairiel $ -local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 8 +-- @release $Id: AceHook-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ +local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 9 local AceHook, oldminor = LibStub:NewLibrary(ACEHOOK_MAJOR, ACEHOOK_MINOR) if not AceHook then return end -- No upgrade needed @@ -117,14 +117,14 @@ function donothing() end function hook(self, obj, method, handler, script, secure, raw, forceSecure, usage) if not handler then handler = method end - + -- These asserts make sure AceHooks's devs play by the rules. assert(not script or type(script) == "boolean") assert(not secure or type(secure) == "boolean") assert(not raw or type(raw) == "boolean") assert(not forceSecure or type(forceSecure) == "boolean") assert(usage) - + -- Error checking Battery! if obj and type(obj) ~= "table" then error(format("%s: 'object' - nil or table expected got %s", usage, type(obj)), 3) @@ -146,8 +146,8 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag error(format("Cannot hook secure script %q; Use SecureHookScript(obj, method, [handler]) instead.", method), 3) end else - local issecure - if obj then + local issecure + if obj then issecure = onceSecure[obj] and onceSecure[obj][method] or issecurevariable(obj, method) else issecure = onceSecure[method] or issecurevariable(method) @@ -165,21 +165,21 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag end end end - + local uid if obj then uid = registry[self][obj] and registry[self][obj][method] else uid = registry[self][method] end - + if uid then if actives[uid] then -- Only two sane choices exist here. We either a) error 100% of the time or b) always unhook and then hook -- choice b would likely lead to odd debuging conditions or other mysteries so we're going with a. error(format("Attempting to rehook already active hook %s.", method)) end - + if handlers[uid] == handler then -- turn on a decative hook, note enclosures break this ability, small memory leak actives[uid] = true return @@ -195,9 +195,8 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag registry[self][method] = nil end handlers[uid], actives[uid], scripts[uid] = nil, nil, nil - uid = nil end - + local orig if script then orig = obj:GetScript(method) or donothing @@ -206,13 +205,13 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag else orig = _G[method] end - + if not orig then error(format("%s: Attempting to hook a non existing target", usage), 3) end - + uid = createHook(self, handler, orig, secure, not (raw or secure)) - + if obj then self.hooks[obj] = self.hooks[obj] or {} registry[self][obj] = registry[self][obj] or {} @@ -221,7 +220,7 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag if not secure then self.hooks[obj][method] = orig end - + if script then if not secure then obj:SetScript(method, uid) @@ -237,7 +236,7 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag end else registry[self][method] = uid - + if not secure then _G[method] = uid self.hooks[method] = orig @@ -245,8 +244,8 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag hooksecurefunc(method, uid) end end - - actives[uid], handlers[uid], scripts[uid] = true, handler, script and true or nil + + actives[uid], handlers[uid], scripts[uid] = true, handler, script and true or nil end --- Hook a function or a method on an object. @@ -262,7 +261,7 @@ end -- @usage -- -- create an addon with AceHook embeded -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("HookDemo", "AceHook-3.0") --- +-- -- function MyAddon:OnEnable() -- -- Hook ActionButton_UpdateHotkeys, overwriting the secure status -- self:Hook("ActionButton_UpdateHotkeys", true) @@ -275,12 +274,12 @@ function AceHook:Hook(object, method, handler, hookSecure) if type(object) == "string" then method, handler, hookSecure, object = object, method, handler, nil end - + if handler == true then handler, hookSecure = nil, true end - hook(self, object, method, handler, false, false, false, hookSecure or false, "Usage: Hook([object], method, [handler], [hookSecure])") + hook(self, object, method, handler, false, false, false, hookSecure or false, "Usage: Hook([object], method, [handler], [hookSecure])") end --- RawHook a function or a method on an object. @@ -297,7 +296,7 @@ end -- @usage -- -- create an addon with AceHook embeded -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("HookDemo", "AceHook-3.0") --- +-- -- function MyAddon:OnEnable() -- -- Hook ActionButton_UpdateHotkeys, overwriting the secure status -- self:RawHook("ActionButton_UpdateHotkeys", true) @@ -314,11 +313,11 @@ function AceHook:RawHook(object, method, handler, hookSecure) if type(object) == "string" then method, handler, hookSecure, object = object, method, handler, nil end - + if handler == true then handler, hookSecure = nil, true end - + hook(self, object, method, handler, false, false, true, hookSecure or false, "Usage: RawHook([object], method, [handler], [hookSecure])") end @@ -337,7 +336,7 @@ function AceHook:SecureHook(object, method, handler) if type(object) == "string" then method, handler, object = object, method, nil end - + hook(self, object, method, handler, false, true, false, false, "Usage: SecureHook([object], method, [handler])") end @@ -354,9 +353,9 @@ end -- @usage -- -- create an addon with AceHook embeded -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("HookDemo", "AceHook-3.0") --- +-- -- function MyAddon:OnEnable() --- -- Hook the OnShow of FriendsFrame +-- -- Hook the OnShow of FriendsFrame -- self:HookScript(FriendsFrame, "OnShow", "FriendsFrameOnShow") -- end -- @@ -380,9 +379,9 @@ end -- @usage -- -- create an addon with AceHook embeded -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("HookDemo", "AceHook-3.0") --- +-- -- function MyAddon:OnEnable() --- -- Hook the OnShow of FriendsFrame +-- -- Hook the OnShow of FriendsFrame -- self:RawHookScript(FriendsFrame, "OnShow", "FriendsFrameOnShow") -- end -- @@ -420,54 +419,54 @@ function AceHook:Unhook(obj, method) if type(obj) == "string" then method, obj = obj, nil end - + if obj and type(obj) ~= "table" then error(format("%s: 'obj' - expecting nil or table got %s", usage, type(obj)), 2) end if type(method) ~= "string" then error(format("%s: 'method' - expeting string got %s", usage, type(method)), 2) end - + local uid if obj then uid = registry[self][obj] and registry[self][obj][method] else uid = registry[self][method] end - + if not uid or not actives[uid] then -- Declining to error on an unneeded unhook since the end effect is the same and this would just be annoying. return false end - + actives[uid], handlers[uid] = nil, nil - + if obj then registry[self][obj][method] = nil registry[self][obj] = next(registry[self][obj]) and registry[self][obj] or nil - + -- if the hook reference doesnt exist, then its a secure hook, just bail out and dont do any unhooking if not self.hooks[obj] or not self.hooks[obj][method] then return true end - + if scripts[uid] and obj:GetScript(method) == uid then -- unhooks scripts - obj:SetScript(method, self.hooks[obj][method] ~= donothing and self.hooks[obj][method] or nil) + obj:SetScript(method, self.hooks[obj][method] ~= donothing and self.hooks[obj][method] or nil) scripts[uid] = nil elseif obj and self.hooks[obj] and self.hooks[obj][method] and obj[method] == uid then -- unhooks methods obj[method] = self.hooks[obj][method] end - + self.hooks[obj][method] = nil self.hooks[obj] = next(self.hooks[obj]) and self.hooks[obj] or nil else registry[self][method] = nil - + -- if self.hooks[method] doesn't exist, then this is a SecureHook, just bail out if not self.hooks[method] then return true end - + if self.hooks[method] and _G[method] == uid then -- unhooks functions _G[method] = self.hooks[method] end - + self.hooks[method] = nil end return true @@ -478,10 +477,10 @@ function AceHook:UnhookAll() for key, value in pairs(registry[self]) do if type(key) == "table" then for method in pairs(value) do - self:Unhook(key, method) + AceHook.Unhook(self, key, method) end else - self:Unhook(key) + AceHook.Unhook(self, key) end end end @@ -501,7 +500,7 @@ function AceHook:IsHooked(obj, method) return true, handlers[registry[self][obj][method]] end end - + return false, nil end diff --git a/TitanClassic/libs/AceLocale-3.0/AceLocale-3.0.lua b/TitanClassic/libs/AceLocale-3.0/AceLocale-3.0.lua index 2ecc0cb..e67f82c 100755 --- a/TitanClassic/libs/AceLocale-3.0/AceLocale-3.0.lua +++ b/TitanClassic/libs/AceLocale-3.0/AceLocale-3.0.lua @@ -1,7 +1,7 @@ --- **AceLocale-3.0** manages localization in addons, allowing for multiple locale to be registered with fallback to the base locale for untranslated strings. -- @class file -- @name AceLocale-3.0 --- @release $Id: AceLocale-3.0.lua 1035 2011-07-09 03:20:13Z kaelten $ +-- @release $Id: AceLocale-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ local MAJOR,MINOR = "AceLocale-3.0", 6 local AceLocale, oldminor = LibStub:NewLibrary(MAJOR, MINOR) @@ -12,10 +12,6 @@ if not AceLocale then return end -- no upgrade needed local assert, tostring, error = assert, tostring, error local getmetatable, setmetatable, rawset, rawget = getmetatable, setmetatable, rawset, rawget --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: GAME_LOCALE, geterrorhandler - local gameLocale = GetLocale() if gameLocale == "enGB" then gameLocale = "enUS" @@ -93,7 +89,7 @@ local writedefaultproxy = setmetatable({}, { function AceLocale:NewLocale(application, locale, isDefault, silent) -- GAME_LOCALE allows translators to test translations of addons without having that wow client installed - local gameLocale = GAME_LOCALE or gameLocale + local activeGameLocale = GAME_LOCALE or gameLocale local app = AceLocale.apps[application] @@ -111,7 +107,7 @@ function AceLocale:NewLocale(application, locale, isDefault, silent) AceLocale.appnames[app] = application end - if locale ~= gameLocale and not isDefault then + if locale ~= activeGameLocale and not isDefault then return -- nop, we don't need these translations end diff --git a/TitanClassic/libs/AceTimer-3.0/AceTimer-3.0.lua b/TitanClassic/libs/AceTimer-3.0/AceTimer-3.0.lua index 7d89500..c337398 100755 --- a/TitanClassic/libs/AceTimer-3.0/AceTimer-3.0.lua +++ b/TitanClassic/libs/AceTimer-3.0/AceTimer-3.0.lua @@ -15,7 +15,7 @@ -- make into AceTimer. -- @class file -- @name AceTimer-3.0 --- @release $Id: AceTimer-3.0.lua 1170 2018-03-29 17:38:58Z funkydude $ +-- @release $Id: AceTimer-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ local MAJOR, MINOR = "AceTimer-3.0", 17 -- Bump minor on changes local AceTimer, oldminor = LibStub:NewLibrary(MAJOR, MINOR) @@ -47,7 +47,7 @@ local function new(self, loop, func, delay, ...) activeTimers[timer] = timer -- Create new timer closure to wrap the "timer" object - timer.callback = function() + timer.callback = function() if not timer.cancelled then if type(timer.func) == "string" then -- We manually set the unpack count to prevent issues with an arg set that contains nil and ends with nil @@ -61,11 +61,11 @@ local function new(self, loop, func, delay, ...) -- Compensate delay to get a perfect average delay, even if individual times don't match up perfectly -- due to fps differences local time = GetTime() - local delay = timer.delay - (time - timer.ends) + local ndelay = timer.delay - (time - timer.ends) -- Ensure the delay doesn't go below the threshold - if delay < 0.01 then delay = 0.01 end - C_TimerAfter(delay, timer.callback) - timer.ends = time + delay + if ndelay < 0.01 then ndelay = 0.01 end + C_TimerAfter(ndelay, timer.callback) + timer.ends = time + ndelay else activeTimers[timer.handle or timer] = nil end diff --git a/TitanClassic/libs/CHANGES.txt b/TitanClassic/libs/CHANGES.txt index f709a8c..b7a6f2d 100755 --- a/TitanClassic/libs/CHANGES.txt +++ b/TitanClassic/libs/CHANGES.txt @@ -1,8 +1,109 @@ ------------------------------------------------------------------------ -r102 | funkydude | 2018-07-17 19:25:42 +0000 (Tue, 17 Jul 2018) | 1 line +r1308 | nevcairiel | 2023-07-12 10:15:09 +0000 (Wed, 12 Jul 2023) | 1 line Changed paths: - M /trunk/LibSharedMedia-3.0.toc + M /trunk + M /trunk/changelog.txt -bump version +Update changelog +------------------------------------------------------------------------ +r1307 | funkehdude | 2023-07-12 02:24:07 +0000 (Wed, 12 Jul 2023) | 1 line +Changed paths: + M /trunk/Ace3.toc + +bump toc +------------------------------------------------------------------------ +r1306 | nevcairiel | 2023-06-23 14:55:09 +0000 (Fri, 23 Jun 2023) | 9 lines +Changed paths: + M /trunk + M /trunk/.luacheckrc + M /trunk/AceDB-3.0/AceDB-3.0.lua + +AceDB-3.0: Add fallbacks for region names + +PTRs now return region 72, instead of extending the table fallback to +GetCurrentRegionName(), and an absolute fallback if even that fails, so +AceDB does not error out on loading. + +GetCurrentRegionName() could be used as the primary source, instead of +the look-up table, however we need to confirm first that the region keys +would remain stable. +------------------------------------------------------------------------ +r1305 | funkehdude | 2023-06-21 11:59:15 +0000 (Wed, 21 Jun 2023) | 1 line +Changed paths: + M /trunk/Ace3_Wrath.toc + +bump wrath toc +------------------------------------------------------------------------ +r1304 | nevcairiel | 2023-05-19 19:50:10 +0000 (Fri, 19 May 2023) | 1 line +Changed paths: + M /trunk + M /trunk/AceDBOptions-3.0/AceDBOptions-3.0.lua + +AceDBOptions-3.0: Minor locale fixes for russian +------------------------------------------------------------------------ +r1303 | nevcairiel | 2023-05-16 15:05:10 +0000 (Tue, 16 May 2023) | 3 lines +Changed paths: + M /trunk + M /trunk/AceDBOptions-3.0/AceDBOptions-3.0.lua + +AceDBOptions-3.0: Update locale strings + +Fixes WoWAce #629 +------------------------------------------------------------------------ +r1302 | nevcairiel | 2023-05-03 07:00:09 +0000 (Wed, 03 May 2023) | 1 line +Changed paths: + M /trunk + M /trunk/Ace3.toc + +Update TOC for 10.1 +------------------------------------------------------------------------ +r1301 | funkehdude | 2023-03-22 02:53:32 +0000 (Wed, 22 Mar 2023) | 1 line +Changed paths: + M /trunk/Ace3.toc + +bump toc +------------------------------------------------------------------------ +r1300 | funkehdude | 2023-01-28 00:06:37 +0000 (Sat, 28 Jan 2023) | 1 line +Changed paths: + M /trunk/Ace3.toc + +bump toc +------------------------------------------------------------------------ +r1299 | funkehdude | 2023-01-22 03:36:39 +0000 (Sun, 22 Jan 2023) | 1 line +Changed paths: + M /trunk/Ace3_Wrath.toc + +bump toc +------------------------------------------------------------------------ +r1298 | nevcairiel | 2022-12-12 15:10:10 +0000 (Mon, 12 Dec 2022) | 1 line +Changed paths: + M /trunk + M /trunk/.luacheckrc + M /trunk/CallbackHandler-1.0/CallbackHandler-1.0.lua + +Update CallbackHandler to rev 8 +------------------------------------------------------------------------ +r1297 | funkehdude | 2022-11-15 01:19:09 +0000 (Tue, 15 Nov 2022) | 1 line +Changed paths: + M /trunk/Ace3.toc + +bump toc +------------------------------------------------------------------------ +r1296 | nevcairiel | 2022-11-04 18:50:10 +0000 (Fri, 04 Nov 2022) | 4 lines +Changed paths: + M /trunk + M /trunk/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua + M /trunk/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua + +AceConfigDialog-3.0: Add support for displaying items on hover in GameTooltip + +This adds a new element to the config table, "tooltipHyperlink", which +will be used to fill the tooltip when hovering over the element. +------------------------------------------------------------------------ +r1295 | funkehdude | 2022-10-26 01:18:39 +0000 (Wed, 26 Oct 2022) | 1 line +Changed paths: + M /trunk/Ace3.toc + +bump toc ------------------------------------------------------------------------ diff --git a/TitanClassic/libs/CallbackHandler-1.0/CallbackHandler-1.0.lua b/TitanClassic/libs/CallbackHandler-1.0/CallbackHandler-1.0.lua index e0fe1af..01287bd 100755 --- a/TitanClassic/libs/CallbackHandler-1.0/CallbackHandler-1.0.lua +++ b/TitanClassic/libs/CallbackHandler-1.0/CallbackHandler-1.0.lua @@ -1,5 +1,5 @@ ---[[ $Id: CallbackHandler-1.0.lua 14 2010-08-09 00:43:38Z mikk $ ]] -local MAJOR, MINOR = "CallbackHandler-1.0", 6 +--[[ $Id: CallbackHandler-1.0.lua 1298 2022-12-12 15:10:10Z nevcairiel $ ]] +local MAJOR, MINOR = "CallbackHandler-1.0", 8 local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR) if not CallbackHandler then return end -- No upgrade needed @@ -7,56 +7,20 @@ if not CallbackHandler then return end -- No upgrade needed local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end} -- Lua APIs -local tconcat = table.concat -local assert, error, loadstring = assert, error, loadstring -local setmetatable, rawset, rawget = setmetatable, rawset, rawget +local securecallfunction, error = securecallfunction, error +local setmetatable, rawget = setmetatable, rawget local next, select, pairs, type, tostring = next, select, pairs, type, tostring --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: geterrorhandler -local xpcall = xpcall - -local function errorhandler(err) - return geterrorhandler()(err) +local function Dispatch(handlers, ...) + local index, method = next(handlers) + if not method then return end + repeat + securecallfunction(method, ...) + index, method = next(handlers, index) + until not method end -local function CreateDispatcher(argCount) - local code = [[ - local next, xpcall, eh = ... - - local method, ARGS - local function call() method(ARGS) end - - local function dispatch(handlers, ...) - local index - index, method = next(handlers) - if not method then return end - local OLD_ARGS = ARGS - ARGS = ... - repeat - xpcall(call, eh) - index, method = next(handlers, index) - until not method - ARGS = OLD_ARGS - end - - return dispatch - ]] - - local ARGS, OLD_ARGS = {}, {} - for i = 1, argCount do ARGS[i], OLD_ARGS[i] = "arg"..i, "old_arg"..i end - code = code:gsub("OLD_ARGS", tconcat(OLD_ARGS, ", ")):gsub("ARGS", tconcat(ARGS, ", ")) - return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(next, xpcall, errorhandler) -end - -local Dispatchers = setmetatable({}, {__index=function(self, argCount) - local dispatcher = CreateDispatcher(argCount) - rawset(self, argCount, dispatcher) - return dispatcher -end}) - -------------------------------------------------------------------------- -- CallbackHandler:New -- @@ -65,9 +29,7 @@ end}) -- UnregisterName - name of the callback unregistration API, default "UnregisterCallback" -- UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API. -function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName, OnUsed, OnUnused) - -- TODO: Remove this after beta has gone out - assert(not OnUsed and not OnUnused, "ACE-80: OnUsed/OnUnused are deprecated. Callbacks are now done to registry.OnUsed and registry.OnUnused") +function CallbackHandler.New(_self, target, RegisterName, UnregisterName, UnregisterAllName) RegisterName = RegisterName or "RegisterCallback" UnregisterName = UnregisterName or "UnregisterCallback" @@ -89,19 +51,19 @@ function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAll local oldrecurse = registry.recurse registry.recurse = oldrecurse + 1 - Dispatchers[select('#', ...) + 1](events[eventname], eventname, ...) + Dispatch(events[eventname], eventname, ...) registry.recurse = oldrecurse if registry.insertQueue and oldrecurse==0 then -- Something in one of our callbacks wanted to register more callbacks; they got queued - for eventname,callbacks in pairs(registry.insertQueue) do - local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten. - for self,func in pairs(callbacks) do - events[eventname][self] = func + for event,callbacks in pairs(registry.insertQueue) do + local first = not rawget(events, event) or not next(events[event]) -- test for empty before. not test for one member after. that one member may have been overwritten. + for object,func in pairs(callbacks) do + events[event][object] = func -- fire OnUsed callback? if first and registry.OnUsed then - registry.OnUsed(registry, target, eventname) + registry.OnUsed(registry, target, event) first = nil end end diff --git a/TitanClassic/libs/LibStub/LibStub.lua b/TitanClassic/libs/LibStub/LibStub.lua index cfc97de..7a442e2 100755 --- a/TitanClassic/libs/LibStub/LibStub.lua +++ b/TitanClassic/libs/LibStub/LibStub.lua @@ -7,24 +7,24 @@ if not LibStub or LibStub.minor < LIBSTUB_MINOR then LibStub = LibStub or {libs = {}, minors = {} } _G[LIBSTUB_MAJOR] = LibStub LibStub.minor = LIBSTUB_MINOR - + function LibStub:NewLibrary(major, minor) assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)") - minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.") - + minor = assert(tonumber(string.match(minor, "%d+")), "Minor version must either be a number or contain a number.") + local oldminor = self.minors[major] if oldminor and oldminor >= minor then return nil end self.minors[major], self.libs[major] = minor, self.libs[major] or {} return self.libs[major], oldminor end - + function LibStub:GetLibrary(major, silent) if not self.libs[major] and not silent then error(("Cannot find a library instance of %q."):format(tostring(major)), 2) end return self.libs[major], self.minors[major] end - + function LibStub:IterateLibraries() return pairs(self.libs) end setmetatable(LibStub, { __call = LibStub.GetLibrary }) end diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/AceGUI-3.0.lua b/TitanClassic/libs/Libs/AceGUI-3.0/AceGUI-3.0.lua old mode 100644 new mode 100755 index 5ebb35d..7d9a2cf --- a/TitanClassic/libs/Libs/AceGUI-3.0/AceGUI-3.0.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/AceGUI-3.0.lua @@ -1,6 +1,6 @@ --- **AceGUI-3.0** provides access to numerous widgets which can be used to create GUIs. -- AceGUI is used by AceConfigDialog to create the option GUIs, but you can use it by itself --- to create any custom GUI. There are more extensive examples in the test suite in the Ace3 +-- to create any custom GUI. There are more extensive examples in the test suite in the Ace3 -- stand-alone distribution. -- -- **Note**: When using AceGUI-3.0 directly, please do not modify the frames of the widgets directly, @@ -24,34 +24,29 @@ -- f:AddChild(btn) -- @class file -- @name AceGUI-3.0 --- @release $Id: AceGUI-3.0.lua 1102 2013-10-25 14:15:23Z nevcairiel $ -local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 34 +-- @release $Id: AceGUI-3.0.lua 1288 2022-09-25 14:19:00Z funkehdude $ +local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 41 local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR) if not AceGUI then return end -- No upgrade needed -- Lua APIs -local tconcat, tremove, tinsert = table.concat, table.remove, table.insert +local tinsert, wipe = table.insert, table.wipe local select, pairs, next, type = select, pairs, next, type -local error, assert, loadstring = error, assert, loadstring -local setmetatable, rawget, rawset = setmetatable, rawget, rawset -local math_max = math.max +local error, assert = error, assert +local setmetatable, rawget = setmetatable, rawget +local math_max, math_min, math_ceil = math.max, math.min, math.ceil -- WoW APIs local UIParent = UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: geterrorhandler, LibStub - ---local con = LibStub("AceConsole-3.0",true) - AceGUI.WidgetRegistry = AceGUI.WidgetRegistry or {} AceGUI.LayoutRegistry = AceGUI.LayoutRegistry or {} AceGUI.WidgetBase = AceGUI.WidgetBase or {} AceGUI.WidgetContainerBase = AceGUI.WidgetContainerBase or {} AceGUI.WidgetVersions = AceGUI.WidgetVersions or {} - +AceGUI.tooltip = AceGUI.tooltip or CreateFrame("GameTooltip", "AceGUITooltip", UIParent, "GameTooltipTemplate") + -- local upvalues local WidgetRegistry = AceGUI.WidgetRegistry local LayoutRegistry = AceGUI.LayoutRegistry @@ -66,39 +61,10 @@ local function errorhandler(err) return geterrorhandler()(err) end -local function CreateDispatcher(argCount) - local code = [[ - local xpcall, eh = ... - local method, ARGS - local function call() return method(ARGS) end - - local function dispatch(func, ...) - method = func - if not method then return end - ARGS = ... - return xpcall(call, eh) - end - - return dispatch - ]] - - local ARGS = {} - for i = 1, argCount do ARGS[i] = "arg"..i end - code = code:gsub("ARGS", tconcat(ARGS, ", ")) - return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(xpcall, errorhandler) -end - -local Dispatchers = setmetatable({}, {__index=function(self, argCount) - local dispatcher = CreateDispatcher(argCount) - rawset(self, argCount, dispatcher) - return dispatcher -end}) -Dispatchers[0] = function(func) - return xpcall(func, errorhandler) -end - local function safecall(func, ...) - return Dispatchers[select("#", ...)](func, ...) + if func then + return xpcall(func, errorhandler, ...) + end end -- Recycling functions @@ -108,7 +74,7 @@ do -- Internal Storage of the objects changed, from an array table -- to a hash table, and additionally we introduced versioning on -- the widgets which would discard all widgets from a pre-29 version - -- anyway, so we just clear the storage now, and don't try to + -- anyway, so we just clear the storage now, and don't try to -- convert the storage tables to the new format. -- This should generally not cause *many* widgets to end up in trash, -- since once dialogs are opened, all addons should be loaded already @@ -118,42 +84,42 @@ do if oldminor and oldminor < 29 and AceGUI.objPools then AceGUI.objPools = nil end - + AceGUI.objPools = AceGUI.objPools or {} local objPools = AceGUI.objPools --Returns a new instance, if none are available either returns a new table or calls the given contructor - function newWidget(type) - if not WidgetRegistry[type] then + function newWidget(widgetType) + if not WidgetRegistry[widgetType] then error("Attempt to instantiate unknown widget type", 2) end - - if not objPools[type] then - objPools[type] = {} + + if not objPools[widgetType] then + objPools[widgetType] = {} end - - local newObj = next(objPools[type]) + + local newObj = next(objPools[widgetType]) if not newObj then - newObj = WidgetRegistry[type]() - newObj.AceGUIWidgetVersion = WidgetVersions[type] + newObj = WidgetRegistry[widgetType]() + newObj.AceGUIWidgetVersion = WidgetVersions[widgetType] else - objPools[type][newObj] = nil + objPools[widgetType][newObj] = nil -- if the widget is older then the latest, don't even try to reuse it -- just forget about it, and grab a new one. - if not newObj.AceGUIWidgetVersion or newObj.AceGUIWidgetVersion < WidgetVersions[type] then - return newWidget(type) + if not newObj.AceGUIWidgetVersion or newObj.AceGUIWidgetVersion < WidgetVersions[widgetType] then + return newWidget(widgetType) end end return newObj end -- Releases an instance to the Pool - function delWidget(obj,type) - if not objPools[type] then - objPools[type] = {} + function delWidget(obj,widgetType) + if not objPools[widgetType] then + objPools[widgetType] = {} end - if objPools[type][obj] then + if objPools[widgetType][obj] then error("Attempt to Release Widget that is already released", 2) end - objPools[type][obj] = true + objPools[widgetType][obj] = true end end @@ -169,9 +135,9 @@ end -- OnAcquire function on it, before returning. -- @param type The type of the widget. -- @return The newly created widget. -function AceGUI:Create(type) - if WidgetRegistry[type] then - local widget = newWidget(type) +function AceGUI:Create(widgetType) + if WidgetRegistry[widgetType] then + local widget = newWidget(widgetType) if rawget(widget, "Acquire") then widget.OnAcquire = widget.Acquire @@ -180,16 +146,16 @@ function AceGUI:Create(type) widget.OnAcquire = widget.Aquire widget.Aquire = nil end - + if rawget(widget, "Release") then - widget.OnRelease = rawget(widget, "Release") + widget.OnRelease = rawget(widget, "Release") widget.Release = nil end - + if widget.OnAcquire then widget:OnAcquire() else - error(("Widget type %s doesn't supply an OnAcquire Function"):format(type)) + error(("Widget type %s doesn't supply an OnAcquire Function"):format(widgetType)) end -- Set the default Layout ("List") safecall(widget.SetLayout, widget, "List") @@ -204,7 +170,10 @@ end -- If this widget is a Container-Widget, all of its Child-Widgets will be releases as well. -- @param widget The widget to release function AceGUI:Release(widget) + if widget.isQueuedForRelease then return end + widget.isQueuedForRelease = true safecall(widget.PauseLayout, widget) + widget.frame:Hide() widget:Fire("OnRelease") safecall(widget.ReleaseChildren, widget) @@ -233,9 +202,26 @@ function AceGUI:Release(widget) widget.content.width = nil widget.content.height = nil end + widget.isQueuedForRelease = nil delWidget(widget, widget.type) end +--- Check if a widget is currently in the process of being released +-- This function check if this widget, or any of its parents (in which case it'll be released shortly as well) +-- are currently being released. This allows addon to handle any callbacks accordingly. +-- @param widget The widget to check +function AceGUI:IsReleasing(widget) + if widget.isQueuedForRelease then + return true + end + + if widget.parent and widget.parent.AceGUIWidgetVersion then + return AceGUI:IsReleasing(widget.parent) + end + + return false +end + ----------- -- Focus -- ----------- @@ -267,18 +253,18 @@ end --[[ Widgets must provide the following functions OnAcquire() - Called when the object is acquired, should set everything to a default hidden state - + And the following members frame - the frame or derivitive object that will be treated as the widget for size and anchoring purposes type - the type of the object, same as the name given to :RegisterWidget() - + Widgets contain a table called userdata, this is a safe place to store data associated with the wigdet It will be cleared automatically when a widget is released Placing values directly into a widget object should be avoided - + If the Widget can act as a container for other Widgets the following content - frame or derivitive that children will be anchored to - + The Widget can supply the following Optional Members :OnRelease() - Called when the object is Released, should remove any additional anchors and clear any data :OnWidthSet(width) - Called when the width of the widget is changed @@ -294,21 +280,21 @@ end -- Widget Base Template -- -------------------------- do - local WidgetBase = AceGUI.WidgetBase - + local WidgetBase = AceGUI.WidgetBase + WidgetBase.SetParent = function(self, parent) local frame = self.frame frame:SetParent(nil) frame:SetParent(parent.content) self.parent = parent end - + WidgetBase.SetCallback = function(self, name, func) if type(func) == "function" then self.events[name] = func end end - + WidgetBase.Fire = function(self, name, ...) if self.events[name] then local success, ret = safecall(self.events[name], self, name, ...) @@ -317,7 +303,7 @@ do end end end - + WidgetBase.SetWidth = function(self, width) self.frame:SetWidth(width) self.frame.width = width @@ -325,7 +311,7 @@ do self:OnWidthSet(width) end end - + WidgetBase.SetRelativeWidth = function(self, width) if width <= 0 or width > 1 then error(":SetRelativeWidth(width): Invalid relative width.", 2) @@ -333,7 +319,7 @@ do self.relWidth = width self.width = "relative" end - + WidgetBase.SetHeight = function(self, height) self.frame:SetHeight(height) self.frame.height = height @@ -341,7 +327,7 @@ do self:OnHeightSet(height) end end - + --[[ WidgetBase.SetRelativeHeight = function(self, height) if height <= 0 or height > 1 then error(":SetRelativeHeight(height): Invalid relative height.", 2) @@ -353,47 +339,51 @@ do WidgetBase.IsVisible = function(self) return self.frame:IsVisible() end - + WidgetBase.IsShown= function(self) return self.frame:IsShown() end - + WidgetBase.Release = function(self) AceGUI:Release(self) end - + + WidgetBase.IsReleasing = function(self) + return AceGUI:IsReleasing(self) + end + WidgetBase.SetPoint = function(self, ...) return self.frame:SetPoint(...) end - + WidgetBase.ClearAllPoints = function(self) return self.frame:ClearAllPoints() end - + WidgetBase.GetNumPoints = function(self) return self.frame:GetNumPoints() end - + WidgetBase.GetPoint = function(self, ...) return self.frame:GetPoint(...) - end - + end + WidgetBase.GetUserDataTable = function(self) return self.userdata end - + WidgetBase.SetUserData = function(self, key, value) self.userdata[key] = value end - + WidgetBase.GetUserData = function(self, key) return self.userdata[key] end - + WidgetBase.IsFullHeight = function(self) return self.height == "fill" end - + WidgetBase.SetFullHeight = function(self, isFull) if isFull then self.height = "fill" @@ -401,11 +391,11 @@ do self.height = nil end end - + WidgetBase.IsFullWidth = function(self) return self.width == "fill" end - + WidgetBase.SetFullWidth = function(self, isFull) if isFull then self.width = "fill" @@ -413,29 +403,29 @@ do self.width = nil end end - + -- local function LayoutOnUpdate(this) -- this:SetScript("OnUpdate",nil) -- this.obj:PerformLayout() -- end - + local WidgetContainerBase = AceGUI.WidgetContainerBase - + WidgetContainerBase.PauseLayout = function(self) self.LayoutPaused = true end - + WidgetContainerBase.ResumeLayout = function(self) self.LayoutPaused = nil end - + WidgetContainerBase.PerformLayout = function(self) if self.LayoutPaused then return end safecall(self.LayoutFunc, self.content, self.children) end - + --call this function to layout, makes sure layed out objects get a frame to get sizes etc WidgetContainerBase.DoLayout = function(self) self:PerformLayout() @@ -443,7 +433,7 @@ do -- self.frame:SetScript("OnUpdate", LayoutOnUpdate) -- end end - + WidgetContainerBase.AddChild = function(self, child, beforeWidget) if beforeWidget then local siblingIndex = 1 @@ -451,7 +441,7 @@ do if widget == beforeWidget then break end - siblingIndex = siblingIndex + 1 + siblingIndex = siblingIndex + 1 end tinsert(self.children, siblingIndex, child) else @@ -461,7 +451,7 @@ do child.frame:Show() self:DoLayout() end - + WidgetContainerBase.AddChildren = function(self, ...) for i = 1, select("#", ...) do local child = select(i, ...) @@ -471,7 +461,7 @@ do end self:DoLayout() end - + WidgetContainerBase.ReleaseChildren = function(self) local children = self.children for i = 1,#children do @@ -479,7 +469,7 @@ do children[i] = nil end end - + WidgetContainerBase.SetLayout = function(self, Layout) self.LayoutFunc = AceGUI:GetLayout(Layout) end @@ -503,7 +493,7 @@ do end end end - + local function ContentResize(this) if this:GetWidth() and this:GetHeight() then this.width = this:GetWidth() @@ -515,7 +505,7 @@ do setmetatable(WidgetContainerBase, {__index=WidgetBase}) --One of these function should be called on each Widget Instance as part of its creation process - + --- Register a widget-class as a container for newly created widgets. -- @param widget The widget class function AceGUI:RegisterAsContainer(widget) @@ -531,7 +521,7 @@ do widget:SetLayout("List") return widget end - + --- Register a widget-class as a widget. -- @param widget The widget class function AceGUI:RegisterAsWidget(widget) @@ -558,11 +548,11 @@ end -- @param Version The version of the widget function AceGUI:RegisterWidgetType(Name, Constructor, Version) assert(type(Constructor) == "function") - assert(type(Version) == "number") - + assert(type(Version) == "number") + local oldVersion = WidgetVersions[Name] if oldVersion and oldVersion >= Version then return end - + WidgetVersions[Name] = Version WidgetRegistry[Name] = Constructor end @@ -593,25 +583,25 @@ AceGUI.counts = AceGUI.counts or {} -- This is used by widgets that require a named frame, e.g. when a Blizzard -- Template requires it. -- @param type The widget type -function AceGUI:GetNextWidgetNum(type) - if not self.counts[type] then - self.counts[type] = 0 +function AceGUI:GetNextWidgetNum(widgetType) + if not self.counts[widgetType] then + self.counts[widgetType] = 0 end - self.counts[type] = self.counts[type] + 1 - return self.counts[type] + self.counts[widgetType] = self.counts[widgetType] + 1 + return self.counts[widgetType] end --- Return the number of created widgets for this type. -- In contrast to GetNextWidgetNum, the number is not incremented. --- @param type The widget type -function AceGUI:GetWidgetCount(type) - return self.counts[type] or 0 +-- @param widgetType The widget type +function AceGUI:GetWidgetCount(widgetType) + return self.counts[widgetType] or 0 end --- Return the version of the currently registered widget type. --- @param type The widget type -function AceGUI:GetWidgetVersion(type) - return WidgetVersions[type] +-- @param widgetType The widget type +function AceGUI:GetWidgetVersion(widgetType) + return WidgetVersions[widgetType] end ------------- @@ -631,7 +621,7 @@ AceGUI:RegisterLayout("List", local width = content.width or content:GetWidth() or 0 for i = 1, #children do local child = children[i] - + local frame = child.frame frame:ClearAllPoints() frame:Show() @@ -640,22 +630,22 @@ AceGUI:RegisterLayout("List", else frame:SetPoint("TOPLEFT", children[i-1].frame, "BOTTOMLEFT") end - + if child.width == "fill" then child:SetWidth(width) frame:SetPoint("RIGHT", content) - + if child.DoLayout then child:DoLayout() end elseif child.width == "relative" then child:SetWidth(width * child.relWidth) - + if child.DoLayout then child:DoLayout() end end - + height = height + (frame.height or frame:GetHeight() or 0) end safecall(content.obj.LayoutFinished, content.obj, nil, height) @@ -667,6 +657,7 @@ AceGUI:RegisterLayout("Fill", if children[1] then children[1]:SetWidth(content:GetWidth() or 0) children[1]:SetHeight(content:GetHeight() or 0) + children[1].frame:ClearAllPoints() children[1].frame:SetAllPoints(content) children[1].frame:Show() safecall(content.obj.LayoutFinished, content.obj, nil, children[1].frame:GetHeight()) @@ -690,19 +681,17 @@ AceGUI:RegisterLayout("Flow", --height of the current row local rowheight = 0 local rowoffset = 0 - local lastrowoffset - + local width = content.width or content:GetWidth() or 0 - + --control at the start of the row local rowstart local rowstartoffset - local lastrowstart local isfullheight - + local frameoffset local lastframeoffset - local oversize + local oversize for i = 1, #children do local child = children[i] oversize = nil @@ -710,17 +699,17 @@ AceGUI:RegisterLayout("Flow", local frameheight = frame.height or frame:GetHeight() or 0 local framewidth = frame.width or frame:GetWidth() or 0 lastframeoffset = frameoffset - -- HACK: Why did we set a frameoffset of (frameheight / 2) ? + -- HACK: Why did we set a frameoffset of (frameheight / 2) ? -- That was moving all widgets half the widgets size down, is that intended? -- Actually, it seems to be neccessary for many cases, we'll leave it in for now. -- If widgets seem to anchor weirdly with this, provide a valid alignoffset for them. -- TODO: Investigate moar! frameoffset = child.alignoffset or (frameheight / 2) - + if child.width == "relative" then framewidth = width * child.relWidth end - + frame:Show() frame:ClearAllPoints() if i == 1 then @@ -759,11 +748,11 @@ AceGUI:RegisterLayout("Flow", else --handles cases where the new height is higher than either control because of the offsets --math.max(rowheight-rowoffset+frameoffset, frameheight-frameoffset+rowoffset) - + --offset is always the larger of the two offsets rowoffset = math_max(rowoffset, frameoffset) rowheight = math_max(rowheight, rowoffset + (frameheight / 2)) - + frame:SetPoint("TOPLEFT", children[i-1].frame, "TOPRIGHT", 0, frameoffset - lastframeoffset) usedwidth = framewidth + usedwidth end @@ -772,11 +761,10 @@ AceGUI:RegisterLayout("Flow", if child.width == "fill" then safelayoutcall(child, "SetWidth", width) frame:SetPoint("RIGHT", content) - + usedwidth = 0 rowstart = frame - rowstartoffset = frameoffset - + if child.DoLayout then child:DoLayout() end @@ -785,7 +773,7 @@ AceGUI:RegisterLayout("Flow", rowstartoffset = rowoffset elseif child.width == "relative" then safelayoutcall(child, "SetWidth", width * child.relWidth) - + if child.DoLayout then child:DoLayout() end @@ -794,20 +782,239 @@ AceGUI:RegisterLayout("Flow", frame:SetPoint("RIGHT", content) end end - + if child.height == "fill" then frame:SetPoint("BOTTOM", content) isfullheight = true end end - + --anchor the last row, if its full height needs a special case since its height has just been changed by the anchor if isfullheight then rowstart:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -height) elseif rowstart then rowstart:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -(height + (rowoffset - rowstartoffset) + 3)) end - + height = height + rowheight + 3 safecall(content.obj.LayoutFinished, content.obj, nil, height) end) + +-- Get alignment method and value. Possible alignment methods are a callback, a number, "start", "middle", "end", "fill" or "TOPLEFT", "BOTTOMRIGHT" etc. +local GetCellAlign = function (dir, tableObj, colObj, cellObj, cell, child) + local fn = cellObj and (cellObj["align" .. dir] or cellObj.align) + or colObj and (colObj["align" .. dir] or colObj.align) + or tableObj["align" .. dir] or tableObj.align + or "CENTERLEFT" + local val + child, cell = child or 0, cell or 0 + + if type(fn) == "string" then + fn = fn:lower() + fn = dir == "V" and (fn:sub(1, 3) == "top" and "start" or fn:sub(1, 6) == "bottom" and "end" or fn:sub(1, 6) == "center" and "middle") + or dir == "H" and (fn:sub(-4) == "left" and "start" or fn:sub(-5) == "right" and "end" or fn:sub(-6) == "center" and "middle") + or fn + val = (fn == "start" or fn == "fill") and 0 or fn == "end" and cell - child or (cell - child) / 2 + elseif type(fn) == "function" then + val = fn(child or 0, cell, dir) + else + val = fn + end + + return fn, math_max(0, math_min(val, cell)) +end + +-- Get width or height for multiple cells combined +local GetCellDimension = function (dir, laneDim, from, to, space) + local dim = 0 + for cell=from,to do + dim = dim + (laneDim[cell] or 0) + end + return dim + math_max(0, to - from) * (space or 0) +end + +--[[ Options +============ +Container: + - columns ({col, col, ...}): Column settings. "col" can be a number (<= 0: content width, <1: rel. width, <10: weight, >=10: abs. width) or a table with column setting. + - space, spaceH, spaceV: Overall, horizontal and vertical spacing between cells. + - align, alignH, alignV: Overall, horizontal and vertical cell alignment. See GetCellAlign() for possible values. +Columns: + - width: Fixed column width (nil or <=0: content width, <1: rel. width, >=1: abs. width). + - min or 1: Min width for content based width + - max or 2: Max width for content based width + - weight: Flexible column width. The leftover width after accounting for fixed-width columns is distributed to weighted columns according to their weights. + - align, alignH, alignV: Overwrites the container setting for alignment. +Cell: + - colspan: Makes a cell span multiple columns. + - rowspan: Makes a cell span multiple rows. + - align, alignH, alignV: Overwrites the container and column setting for alignment. +]] +AceGUI:RegisterLayout("Table", + function (content, children) + local obj = content.obj + obj:PauseLayout() + + local tableObj = obj:GetUserData("table") + local cols = tableObj.columns + local spaceH = tableObj.spaceH or tableObj.space or 0 + local spaceV = tableObj.spaceV or tableObj.space or 0 + local totalH = (content:GetWidth() or content.width or 0) - spaceH * (#cols - 1) + + -- We need to reuse these because layout events can come in very frequently + local layoutCache = obj:GetUserData("layoutCache") + if not layoutCache then + layoutCache = {{}, {}, {}, {}, {}, {}} + obj:SetUserData("layoutCache", layoutCache) + end + local t, laneH, laneV, rowspans, rowStart, colStart = unpack(layoutCache) + + -- Create the grid + local n, slotFound = 0 + for i,child in ipairs(children) do + if child:IsShown() then + repeat + n = n + 1 + local col = (n - 1) % #cols + 1 + local row = math_ceil(n / #cols) + local rowspan = rowspans[col] + local cell = rowspan and rowspan.child or child + local cellObj = cell:GetUserData("cell") + slotFound = not rowspan + + -- Rowspan + if not rowspan and cellObj and cellObj.rowspan then + rowspan = {child = child, from = row, to = row + cellObj.rowspan - 1} + rowspans[col] = rowspan + end + if rowspan and i == #children then + rowspan.to = row + end + + -- Colspan + local colspan = math_max(0, math_min((cellObj and cellObj.colspan or 1) - 1, #cols - col)) + n = n + colspan + + -- Place the cell + if not rowspan or rowspan.to == row then + t[n] = cell + rowStart[cell] = rowspan and rowspan.from or row + colStart[cell] = col + + if rowspan then + rowspans[col] = nil + end + end + until slotFound + end + end + + local rows = math_ceil(n / #cols) + + -- Determine fixed size cols and collect weights + local extantH, totalWeight = totalH, 0 + for col,colObj in ipairs(cols) do + laneH[col] = 0 + + if type(colObj) == "number" then + colObj = {[colObj >= 1 and colObj < 10 and "weight" or "width"] = colObj} + cols[col] = colObj + end + + if colObj.weight then + -- Weight + totalWeight = totalWeight + (colObj.weight or 1) + else + if not colObj.width or colObj.width <= 0 then + -- Content width + for row=1,rows do + local child = t[(row - 1) * #cols + col] + if child then + local f = child.frame + f:ClearAllPoints() + local childH = f:GetWidth() or 0 + + laneH[col] = math_max(laneH[col], childH - GetCellDimension("H", laneH, colStart[child], col - 1, spaceH)) + end + end + + laneH[col] = math_max(colObj.min or colObj[1] or 0, math_min(laneH[col], colObj.max or colObj[2] or laneH[col])) + else + -- Rel./Abs. width + laneH[col] = colObj.width < 1 and colObj.width * totalH or colObj.width + end + extantH = math_max(0, extantH - laneH[col]) + end + end + + -- Determine sizes based on weight + local scale = totalWeight > 0 and extantH / totalWeight or 0 + for col,colObj in pairs(cols) do + if colObj.weight then + laneH[col] = scale * colObj.weight + end + end + + -- Arrange children + for row=1,rows do + local rowV = 0 + + -- Horizontal placement and sizing + for col=1,#cols do + local child = t[(row - 1) * #cols + col] + if child then + local colObj = cols[colStart[child]] + local cellObj = child:GetUserData("cell") + local offsetH = GetCellDimension("H", laneH, 1, colStart[child] - 1, spaceH) + (colStart[child] == 1 and 0 or spaceH) + local cellH = GetCellDimension("H", laneH, colStart[child], col, spaceH) + + local f = child.frame + f:ClearAllPoints() + local childH = f:GetWidth() or 0 + + local alignFn, align = GetCellAlign("H", tableObj, colObj, cellObj, cellH, childH) + f:SetPoint("LEFT", content, offsetH + align, 0) + if child:IsFullWidth() or alignFn == "fill" or childH > cellH then + f:SetPoint("RIGHT", content, "LEFT", offsetH + align + cellH, 0) + end + + if child.DoLayout then + child:DoLayout() + end + + rowV = math_max(rowV, (f:GetHeight() or 0) - GetCellDimension("V", laneV, rowStart[child], row - 1, spaceV)) + end + end + + laneV[row] = rowV + + -- Vertical placement and sizing + for col=1,#cols do + local child = t[(row - 1) * #cols + col] + if child then + local colObj = cols[colStart[child]] + local cellObj = child:GetUserData("cell") + local offsetV = GetCellDimension("V", laneV, 1, rowStart[child] - 1, spaceV) + (rowStart[child] == 1 and 0 or spaceV) + local cellV = GetCellDimension("V", laneV, rowStart[child], row, spaceV) + + local f = child.frame + local childV = f:GetHeight() or 0 + + local alignFn, align = GetCellAlign("V", tableObj, colObj, cellObj, cellV, childV) + if child:IsFullHeight() or alignFn == "fill" then + f:SetHeight(cellV) + end + f:SetPoint("TOP", content, 0, -(offsetV + align)) + end + end + end + + -- Calculate total height + local totalV = GetCellDimension("V", laneV, 1, #laneV, spaceV) + + -- Cleanup + for _,v in pairs(layoutCache) do wipe(v) end + + safecall(obj.LayoutFinished, obj, nil, totalV) + obj:ResumeLayout() + end) diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/AceGUI-3.0.xml b/TitanClassic/libs/Libs/AceGUI-3.0/AceGUI-3.0.xml old mode 100644 new mode 100755 diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua old mode 100644 new mode 100755 index 200fc71..bf1eae7 --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua @@ -2,7 +2,7 @@ BlizOptionsGroup Container Simple container widget for the integration of AceGUI into the Blizzard Interface Options -------------------------------------------------------------------------------]] -local Type, Version = "BlizOptionsGroup", 21 +local Type, Version = "BlizOptionsGroup", 26 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -99,7 +99,7 @@ local methods = { Constructor -------------------------------------------------------------------------------]] local function Constructor() - local frame = CreateFrame("Frame") + local frame = CreateFrame("Frame", nil, InterfaceOptionsFramePanelContainer) frame:Hide() -- support functions for the Blizzard Interface Options @@ -108,6 +108,11 @@ local function Constructor() frame.default = default frame.refresh = refresh + -- 10.0 support function aliases (cancel has been removed) + frame.OnCommit = okay + frame.OnDefault = default + frame.OnRefresh = refresh + frame:SetScript("OnHide", OnHide) frame:SetScript("OnShow", OnShow) diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua old mode 100644 new mode 100755 index 18e49cb..2322e3d --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua @@ -2,7 +2,7 @@ DropdownGroup Container Container controlled by a dropdown on the top. -------------------------------------------------------------------------------]] -local Type, Version = "DropdownGroup", 21 +local Type, Version = "DropdownGroup", 22 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -125,7 +125,7 @@ local function Constructor() dropdown.frame:Show() dropdown:SetLabel("") - local border = CreateFrame("Frame", nil, frame) + local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") border:SetPoint("TOPLEFT", 0, -26) border:SetPoint("BOTTOMRIGHT", 0, 3) border:SetBackdrop(PaneBackdrop) @@ -150,7 +150,7 @@ local function Constructor() widget[method] = func end dropdown.parentgroup = widget - + return AceGUI:RegisterAsContainer(widget) end diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua old mode 100644 new mode 100755 index bb93cc5..ca90890 --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua @@ -1,7 +1,7 @@ --[[----------------------------------------------------------------------------- Frame Container -------------------------------------------------------------------------------]] -local Type, Version = "Frame", 24 +local Type, Version = "Frame", 30 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -13,18 +13,18 @@ local wipe = table.wipe local PlaySound = PlaySound local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: CLOSE - --[[----------------------------------------------------------------------------- Scripts -------------------------------------------------------------------------------]] local function Button_OnClick(frame) - PlaySound("gsTitleOptionExit") + PlaySound(799) -- SOUNDKIT.GS_TITLE_OPTION_EXIT frame.obj:Hide() end +local function Frame_OnShow(frame) + frame.obj:Fire("OnShow") +end + local function Frame_OnClose(frame) frame.obj:Fire("OnClose") end @@ -79,6 +79,7 @@ local methods = { ["OnAcquire"] = function(self) self.frame:SetParent(UIParent) self.frame:SetFrameStrata("FULLSCREEN_DIALOG") + self.frame:SetFrameLevel(100) -- Lots of room to draw under it self:SetTitle() self:SetStatusText() self:ApplyStatus() @@ -175,17 +176,23 @@ local PaneBackdrop = { } local function Constructor() - local frame = CreateFrame("Frame", nil, UIParent) + local frame = CreateFrame("Frame", nil, UIParent, "BackdropTemplate") frame:Hide() frame:EnableMouse(true) frame:SetMovable(true) frame:SetResizable(true) frame:SetFrameStrata("FULLSCREEN_DIALOG") + frame:SetFrameLevel(100) -- Lots of room to draw under it frame:SetBackdrop(FrameBackdrop) frame:SetBackdropColor(0, 0, 0, 1) - frame:SetMinResize(400, 200) + if frame.SetResizeBounds then -- WoW 10.0 + frame:SetResizeBounds(400, 200) + else + frame:SetMinResize(400, 200) + end frame:SetToplevel(true) + frame:SetScript("OnShow", Frame_OnShow) frame:SetScript("OnHide", Frame_OnClose) frame:SetScript("OnMouseDown", Frame_OnMouseDown) @@ -196,7 +203,7 @@ local function Constructor() closebutton:SetWidth(100) closebutton:SetText(CLOSE) - local statusbg = CreateFrame("Button", nil, frame) + local statusbg = CreateFrame("Button", nil, frame, "BackdropTemplate") statusbg:SetPoint("BOTTOMLEFT", 15, 15) statusbg:SetPoint("BOTTOMRIGHT", -132, 15) statusbg:SetHeight(24) @@ -214,7 +221,7 @@ local function Constructor() statustext:SetText("") local titlebg = frame:CreateTexture(nil, "OVERLAY") - titlebg:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header") + titlebg:SetTexture(131080) -- Interface\\DialogFrame\\UI-DialogBox-Header titlebg:SetTexCoord(0.31, 0.67, 0, 0.63) titlebg:SetPoint("TOP", 0, 12) titlebg:SetWidth(100) @@ -230,14 +237,14 @@ local function Constructor() titletext:SetPoint("TOP", titlebg, "TOP", 0, -14) local titlebg_l = frame:CreateTexture(nil, "OVERLAY") - titlebg_l:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header") + titlebg_l:SetTexture(131080) -- Interface\\DialogFrame\\UI-DialogBox-Header titlebg_l:SetTexCoord(0.21, 0.31, 0, 0.63) titlebg_l:SetPoint("RIGHT", titlebg, "LEFT") titlebg_l:SetWidth(30) titlebg_l:SetHeight(40) local titlebg_r = frame:CreateTexture(nil, "OVERLAY") - titlebg_r:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header") + titlebg_r:SetTexture(131080) -- Interface\\DialogFrame\\UI-DialogBox-Header titlebg_r:SetTexCoord(0.67, 0.77, 0, 0.63) titlebg_r:SetPoint("LEFT", titlebg, "RIGHT") titlebg_r:SetWidth(30) @@ -255,7 +262,7 @@ local function Constructor() line1:SetWidth(14) line1:SetHeight(14) line1:SetPoint("BOTTOMRIGHT", -8, 8) - line1:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") + line1:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border local x = 0.1 * 14/17 line1:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) @@ -263,8 +270,8 @@ local function Constructor() line2:SetWidth(8) line2:SetHeight(8) line2:SetPoint("BOTTOMRIGHT", -8, 8) - line2:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") - local x = 0.1 * 8/17 + line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border + x = 0.1 * 8/17 line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) local sizer_s = CreateFrame("Frame", nil, frame) diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua old mode 100644 new mode 100755 index 1a330ef..04b4d5d --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua @@ -2,7 +2,7 @@ InlineGroup Container Simple container widget that creates a visible "box" with an optional title. -------------------------------------------------------------------------------]] -local Type, Version = "InlineGroup", 21 +local Type, Version = "InlineGroup", 22 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -75,7 +75,7 @@ local function Constructor() titletext:SetJustifyH("LEFT") titletext:SetHeight(18) - local border = CreateFrame("Frame", nil, frame) + local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") border:SetPoint("TOPLEFT", 0, -17) border:SetPoint("BOTTOMRIGHT", -1, 3) border:SetBackdrop(PaneBackdrop) diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua old mode 100644 new mode 100755 index 1695f48..be6052f --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua @@ -2,15 +2,13 @@ ScrollFrame Container Plain container that scrolls its content and doesn't grow in height. -------------------------------------------------------------------------------]] -local Type, Version = "ScrollFrame", 24 +local Type, Version = "ScrollFrame", 26 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end -local IsLegion = select(4, GetBuildInfo()) >= 70000 - -- Lua APIs local pairs, assert, type = pairs, assert, type -local min, max, floor, abs = math.min, math.max, math.floor, math.abs +local min, max, floor = math.min, math.max, math.floor -- WoW APIs local CreateFrame, UIParent = CreateFrame, UIParent @@ -42,7 +40,7 @@ end Methods -------------------------------------------------------------------------------]] local methods = { - ["OnAcquire"] = function(self) + ["OnAcquire"] = function(self) self:SetScroll(0) self.scrollframe:SetScript("OnUpdate", FixScrollOnUpdate) end, @@ -55,7 +53,7 @@ local methods = { self.scrollframe:SetPoint("BOTTOMRIGHT") self.scrollbar:Hide() self.scrollBarShown = nil - self.content.height, self.content.width = nil, nil + self.content.height, self.content.width, self.content.original_width = nil, nil, nil end, ["SetScroll"] = function(self, value) @@ -79,7 +77,7 @@ local methods = { ["MoveScroll"] = function(self, value) local status = self.status or self.localstatus local height, viewheight = self.scrollframe:GetHeight(), self.content:GetHeight() - + if self.scrollBarShown then local diff = height - viewheight local delta = 1 @@ -96,7 +94,6 @@ local methods = { local status = self.status or self.localstatus local height, viewheight = self.scrollframe:GetHeight(), self.content:GetHeight() local offset = status.offset or 0 - local curvalue = self.scrollbar:GetValue() -- Give us a margin of error of 2 pixels to stop some conditions that i would blame on floating point inaccuracys -- No-one is going to miss 2 pixels at the bottom of the frame, anyhow! if viewheight < height + 2 then @@ -105,6 +102,9 @@ local methods = { self.scrollbar:Hide() self.scrollbar:SetValue(0) self.scrollframe:SetPoint("BOTTOMRIGHT") + if self.content.original_width then + self.content.width = self.content.original_width + end self:DoLayout() end else @@ -112,6 +112,9 @@ local methods = { self.scrollBarShown = true self.scrollbar:Show() self.scrollframe:SetPoint("BOTTOMRIGHT", -20, 0) + if self.content.original_width then + self.content.width = self.content.original_width - 20 + end self:DoLayout() end local value = (offset / (viewheight - height) * 1000) @@ -130,6 +133,11 @@ local methods = { ["LayoutFinished"] = function(self, width, height) self.content:SetHeight(height or 0 + 20) + + -- update the scrollframe + self:FixScroll() + + -- schedule another update when everything has "settled" self.scrollframe:SetScript("OnUpdate", FixScrollOnUpdate) end, @@ -143,7 +151,8 @@ local methods = { ["OnWidthSet"] = function(self, width) local content = self.content - content.width = width + content.width = width - (self.scrollBarShown and 20 or 0) + content.original_width = width end, ["OnHeightSet"] = function(self, height) @@ -178,11 +187,7 @@ local function Constructor() local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND") scrollbg:SetAllPoints(scrollbar) - if IsLegion then - scrollbg:SetColorTexture(0, 0, 0, 0.4) - else - scrollbg:SetTexture(0, 0, 0, 0.4) - end + scrollbg:SetColorTexture(0, 0, 0, 0.4) --Container Support local content = CreateFrame("Frame", nil, scrollframe) diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-SimpleGroup.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-SimpleGroup.lua old mode 100644 new mode 100755 diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua old mode 100644 new mode 100755 index ab63f31..8a5756f --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua @@ -2,22 +2,18 @@ TabGroup Container Container that uses tabs on top to switch between groups. -------------------------------------------------------------------------------]] -local Type, Version = "TabGroup", 35 +local Type, Version = "TabGroup", 38 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end -- Lua APIs -local pairs, ipairs, assert, type, wipe = pairs, ipairs, assert, type, wipe +local pairs, ipairs, assert, type, wipe = pairs, ipairs, assert, type, table.wipe -- WoW APIs local PlaySound = PlaySound local CreateFrame, UIParent = CreateFrame, UIParent local _G = _G --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: PanelTemplates_TabResize, PanelTemplates_SetDisabledTabState, PanelTemplates_SelectTab, PanelTemplates_DeselectTab - -- local upvalue storage used by BuildTabs local widths = {} local rowwidths = {} @@ -26,6 +22,143 @@ local rowends = {} --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] + +local function PanelTemplates_TabResize(tab, padding, absoluteSize, minWidth, maxWidth, absoluteTextSize) + local tabName = tab:GetName(); + + local buttonMiddle = tab.Middle or tab.middleTexture or _G[tabName.."Middle"]; + local buttonMiddleDisabled = tab.MiddleDisabled or (tabName and _G[tabName.."MiddleDisabled"]); + local left = tab.Left or tab.leftTexture or _G[tabName.."Left"]; + local sideWidths = 2 * left:GetWidth(); + local tabText = tab.Text or _G[tab:GetName().."Text"]; + local highlightTexture = tab.HighlightTexture or (tabName and _G[tabName.."HighlightTexture"]); + + local width, tabWidth; + local textWidth; + if ( absoluteTextSize ) then + textWidth = absoluteTextSize; + else + tabText:SetWidth(0); + textWidth = tabText:GetWidth(); + end + -- If there's an absolute size specified then use it + if ( absoluteSize ) then + if ( absoluteSize < sideWidths) then + width = 1; + tabWidth = sideWidths + else + width = absoluteSize - sideWidths; + tabWidth = absoluteSize + end + tabText:SetWidth(width); + else + -- Otherwise try to use padding + if ( padding ) then + width = textWidth + padding; + else + width = textWidth + 24; + end + -- If greater than the maxWidth then cap it + if ( maxWidth and width > maxWidth ) then + if ( padding ) then + width = maxWidth + padding; + else + width = maxWidth + 24; + end + tabText:SetWidth(width); + else + tabText:SetWidth(0); + end + if (minWidth and width < minWidth) then + width = minWidth; + end + tabWidth = width + sideWidths; + end + + if ( buttonMiddle ) then + buttonMiddle:SetWidth(width); + end + if ( buttonMiddleDisabled ) then + buttonMiddleDisabled:SetWidth(width); + end + + tab:SetWidth(tabWidth); + + if ( highlightTexture ) then + highlightTexture:SetWidth(tabWidth); + end +end + +local function PanelTemplates_DeselectTab(tab) + local name = tab:GetName(); + + local left = tab.Left or _G[name.."Left"]; + local middle = tab.Middle or _G[name.."Middle"]; + local right = tab.Right or _G[name.."Right"]; + left:Show(); + middle:Show(); + right:Show(); + --tab:UnlockHighlight(); + tab:Enable(); + local text = tab.Text or _G[name.."Text"]; + text:SetPoint("CENTER", tab, "CENTER", (tab.deselectedTextX or 0), (tab.deselectedTextY or 2)); + + local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"]; + local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"]; + local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"]; + leftDisabled:Hide(); + middleDisabled:Hide(); + rightDisabled:Hide(); +end + +local function PanelTemplates_SelectTab(tab) + local name = tab:GetName(); + + local left = tab.Left or _G[name.."Left"]; + local middle = tab.Middle or _G[name.."Middle"]; + local right = tab.Right or _G[name.."Right"]; + left:Hide(); + middle:Hide(); + right:Hide(); + --tab:LockHighlight(); + tab:Disable(); + tab:SetDisabledFontObject(GameFontHighlightSmall); + local text = tab.Text or _G[name.."Text"]; + text:SetPoint("CENTER", tab, "CENTER", (tab.selectedTextX or 0), (tab.selectedTextY or -3)); + + local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"]; + local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"]; + local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"]; + leftDisabled:Show(); + middleDisabled:Show(); + rightDisabled:Show(); + + if GameTooltip:IsOwned(tab) then + GameTooltip:Hide(); + end +end + +local function PanelTemplates_SetDisabledTabState(tab) + local name = tab:GetName(); + local left = tab.Left or _G[name.."Left"]; + local middle = tab.Middle or _G[name.."Middle"]; + local right = tab.Right or _G[name.."Right"]; + left:Show(); + middle:Show(); + right:Show(); + --tab:UnlockHighlight(); + tab:Disable(); + tab.text = tab:GetText(); + -- Gray out text + tab:SetDisabledFontObject(GameFontDisableSmall); + local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"]; + local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"]; + local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"]; + leftDisabled:Hide(); + middleDisabled:Hide(); + rightDisabled:Hide(); +end + local function UpdateTabLook(frame) if frame.disabled then PanelTemplates_SetDisabledTabState(frame) @@ -63,7 +196,7 @@ Scripts -------------------------------------------------------------------------------]] local function Tab_OnClick(frame) if not (frame.selected or frame.disabled) then - PlaySound("igCharacterInfoTab") + PlaySound(841) -- SOUNDKIT.IG_CHARACTER_INFO_TAB frame.obj:SelectTab(frame.value) end end @@ -103,11 +236,64 @@ local methods = { ["CreateTab"] = function(self, id) local tabname = ("AceGUITabGroup%dTab%d"):format(self.num, id) - local tab = CreateFrame("Button", tabname, self.border, "OptionsFrameTabButtonTemplate") + local tab = CreateFrame("Button", tabname, self.border) + tab:SetSize(115, 24) + tab.deselectedTextY = -3 + tab.selectedTextY = -2 + + tab.LeftDisabled = tab:CreateTexture(tabname .. "LeftDisabled", "BORDER") + tab.LeftDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab") + tab.LeftDisabled:SetSize(20, 24) + tab.LeftDisabled:SetPoint("BOTTOMLEFT", 0, -3) + tab.LeftDisabled:SetTexCoord(0, 0.15625, 0, 1.0) + + tab.MiddleDisabled = tab:CreateTexture(tabname .. "MiddleDisabled", "BORDER") + tab.MiddleDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab") + tab.MiddleDisabled:SetSize(88, 24) + tab.MiddleDisabled:SetPoint("LEFT", tab.LeftDisabled, "RIGHT") + tab.MiddleDisabled:SetTexCoord(0.15625, 0.84375, 0, 1.0) + + tab.RightDisabled = tab:CreateTexture(tabname .. "RightDisabled", "BORDER") + tab.RightDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab") + tab.RightDisabled:SetSize(20, 24) + tab.RightDisabled:SetPoint("LEFT", tab.MiddleDisabled, "RIGHT") + tab.RightDisabled:SetTexCoord(0.84375, 1.0, 0, 1.0) + + tab.Left = tab:CreateTexture(tabname .. "Left", "BORDER") + tab.Left:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab") + tab.Left:SetSize(20, 24) + tab.Left:SetPoint("TOPLEFT") + tab.Left:SetTexCoord(0, 0.15625, 0, 1.0) + + tab.Middle = tab:CreateTexture(tabname .. "Middle", "BORDER") + tab.Middle:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab") + tab.Middle:SetSize(88, 24) + tab.Middle:SetPoint("LEFT", tab.Left, "RIGHT") + tab.Middle:SetTexCoord(0.15625, 0.84375, 0, 1.0) + + tab.Right = tab:CreateTexture(tabname .. "Right", "BORDER") + tab.Right:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab") + tab.Right:SetSize(20, 24) + tab.Right:SetPoint("LEFT", tab.Middle, "RIGHT") + tab.Right:SetTexCoord(0.84375, 1.0, 0, 1.0) + + tab.Text = tab:CreateFontString(tabname .. "Text") + tab:SetFontString(tab.Text) + + tab:SetNormalFontObject(GameFontNormalSmall) + tab:SetHighlightFontObject(GameFontHighlightSmall) + tab:SetDisabledFontObject(GameFontHighlightSmall) + tab:SetHighlightTexture("Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight", "ADD") + tab.HighlightTexture = tab:GetHighlightTexture() + tab.HighlightTexture:ClearAllPoints() + tab.HighlightTexture:SetPoint("LEFT", tab, "LEFT", 10, -4) + tab.HighlightTexture:SetPoint("RIGHT", tab, "RIGHT", -10, -4) + _G[tabname .. "HighlightTexture"] = tab.HighlightTexture + tab.obj = self tab.id = id - tab.text = _G[tabname .. "Text"] + tab.text = tab.Text -- compat tab.text:ClearAllPoints() tab.text:SetPoint("LEFT", 14, -3) tab.text:SetPoint("RIGHT", -12, -3) @@ -161,22 +347,21 @@ local methods = { self.tablist = tabs self:BuildTabs() end, - + ["BuildTabs"] = function(self) local hastitle = (self.titletext:GetText() and self.titletext:GetText() ~= "") - local status = self.status or self.localstatus local tablist = self.tablist local tabs = self.tabs - + if not tablist then return end - + local width = self.frame.width or self.frame:GetWidth() or 0 - + wipe(widths) wipe(rowwidths) wipe(rowends) - + --Place Text into tabs and get thier initial width for i, v in ipairs(tablist) do local tab = tabs[i] @@ -184,19 +369,19 @@ local methods = { tab = self:CreateTab(i) tabs[i] = tab end - + tab:Show() tab:SetText(v.text) tab:SetDisabled(v.disabled) tab.value = v.value - + widths[i] = tab:GetWidth() - 6 --tabs are anchored 10 pixels from the right side of the previous one to reduce spacing, but add a fixed 4px padding for the text end - + for i = (#tablist)+1, #tabs, 1 do tabs[i]:Hide() end - + --First pass, find the minimum number of rows needed to hold all tabs and the initial tab layout local numtabs = #tablist local numrows = 1 @@ -214,7 +399,7 @@ local methods = { end rowwidths[numrows] = usedwidth + 10 --first tab in each row takes up an extra 10px rowends[numrows] = #tablist - + --Fix for single tabs being left on the last row, move a tab from the row above if applicable if numrows > 1 then --if the last row has only one tab @@ -245,22 +430,22 @@ local methods = { tab:SetPoint("LEFT", tabs[tabno-1], "RIGHT", -10, 0) end end - + -- equal padding for each tab to fill the available width, -- if the used space is above 75% already - -- the 18 pixel is the typical width of a scrollbar, so we can have a tab group inside a scrolling frame, + -- the 18 pixel is the typical width of a scrollbar, so we can have a tab group inside a scrolling frame, -- and not have the tabs jump around funny when switching between tabs that need scrolling and those that don't local padding = 0 if not (numrows == 1 and rowwidths[1] < width*0.75 - 18) then padding = (width - rowwidths[row]) / (endtab - starttab+1) end - + for i = starttab, endtab do PanelTemplates_TabResize(tabs[i], padding + 4, nil, nil, width, tabs[i]:GetFontString():GetStringWidth()) end starttab = endtab + 1 end - + self.borderoffset = (hastitle and 17 or 10)+((numrows)*20) self.border:SetPoint("TOPLEFT", 1, -self.borderoffset) end, @@ -286,7 +471,7 @@ local methods = { content:SetHeight(contentheight) content.height = contentheight end, - + ["LayoutFinished"] = function(self, width, height) if self.noAutoHeight then return end self:SetHeight((height or 0) + (self.borderoffset + 23)) @@ -317,7 +502,7 @@ local function Constructor() titletext:SetHeight(18) titletext:SetText("") - local border = CreateFrame("Frame", nil, frame) + local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") border:SetPoint("TOPLEFT", 1, -27) border:SetPoint("BOTTOMRIGHT", -1, 3) border:SetBackdrop(PaneBackdrop) @@ -343,7 +528,7 @@ local function Constructor() for method, func in pairs(methods) do widget[method] = func end - + return AceGUI:RegisterAsContainer(widget) end diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua old mode 100644 new mode 100755 index 98a2080..ca9b2df --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua @@ -2,24 +2,18 @@ TreeGroup Container Container that uses a tree control to switch between groups. -------------------------------------------------------------------------------]] -local Type, Version = "TreeGroup", 40 +local Type, Version = "TreeGroup", 47 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end -local IsLegion = select(4, GetBuildInfo()) >= 70000 - -- Lua APIs local next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type -local math_min, math_max, floor = math.min, math.max, floor +local math_min, math_max, floor = math.min, math.max, math.floor local select, tremove, unpack, tconcat = select, table.remove, unpack, table.concat -- WoW APIs local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: GameTooltip, FONT_COLOR_CODE_CLOSE - -- Recycling functions local new, del do @@ -36,7 +30,7 @@ do function del(t) for k in pairs(t) do t[k] = nil - end + end pool[t] = true end end @@ -59,7 +53,6 @@ end local function UpdateButton(button, treeline, selected, canExpand, isExpanded) local self = button.obj local toggle = button.toggle - local frame = self.frame local text = treeline.text or "" local icon = treeline.icon local iconCoords = treeline.iconCoords @@ -67,7 +60,7 @@ local function UpdateButton(button, treeline, selected, canExpand, isExpanded) local value = treeline.value local uniquevalue = treeline.uniquevalue local disabled = treeline.disabled - + button.treeline = treeline button.value = value button.uniquevalue = uniquevalue @@ -78,8 +71,6 @@ local function UpdateButton(button, treeline, selected, canExpand, isExpanded) button:UnlockHighlight() button.selected = false end - local normalTexture = button:GetNormalTexture() - local line = button.line button.level = level if ( level == 1 ) then button:SetNormalFontObject("GameFontNormal") @@ -90,7 +81,7 @@ local function UpdateButton(button, treeline, selected, canExpand, isExpanded) button:SetHighlightFontObject("GameFontHighlightSmall") button.text:SetPoint("LEFT", (icon and 16 or 0) + 8 * level, 2) end - + if disabled then button:EnableMouse(false) button.text:SetText("|cff808080"..text..FONT_COLOR_CODE_CLOSE) @@ -98,27 +89,27 @@ local function UpdateButton(button, treeline, selected, canExpand, isExpanded) button.text:SetText(text) button:EnableMouse(true) end - + if icon then button.icon:SetTexture(icon) button.icon:SetPoint("LEFT", 8 * level, (level == 1) and 0 or 1) else button.icon:SetTexture(nil) end - + if iconCoords then button.icon:SetTexCoord(unpack(iconCoords)) else button.icon:SetTexCoord(0, 1, 0, 1) end - + if canExpand then if not isExpanded then - toggle:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-UP") - toggle:SetPushedTexture("Interface\\Buttons\\UI-PlusButton-DOWN") + toggle:SetNormalTexture(130838) -- Interface\\Buttons\\UI-PlusButton-UP + toggle:SetPushedTexture(130836) -- Interface\\Buttons\\UI-PlusButton-DOWN else - toggle:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-UP") - toggle:SetPushedTexture("Interface\\Buttons\\UI-MinusButton-DOWN") + toggle:SetNormalTexture(130821) -- Interface\\Buttons\\UI-MinusButton-UP + toggle:SetPushedTexture(130820) -- Interface\\Buttons\\UI-MinusButton-DOWN end toggle:Show() else @@ -164,7 +155,7 @@ end local function FirstFrameUpdate(frame) local self = frame.obj frame:SetScript("OnUpdate", nil) - self:RefreshTree() + self:RefreshTree(nil, true) end local function BuildUniqueValue(...) @@ -201,7 +192,6 @@ end local function Button_OnDoubleClick(button) local self = button.obj - local status = self.status or self.localstatus local status = (self.status or self.localstatus).groups status[button.uniquevalue] = not status[button.uniquevalue] self:RefreshTree() @@ -212,11 +202,13 @@ local function Button_OnEnter(frame) self:Fire("OnButtonEnter", frame.uniquevalue, frame) if self.enabletooltips then - GameTooltip:SetOwner(frame, "ANCHOR_NONE") - GameTooltip:SetPoint("LEFT",frame,"RIGHT") - GameTooltip:SetText(frame.text:GetText() or "", 1, .82, 0, true) + local tooltip = AceGUI.tooltip + tooltip:SetOwner(frame, "ANCHOR_NONE") + tooltip:ClearAllPoints() + tooltip:SetPoint("LEFT",frame,"RIGHT") + tooltip:SetText(frame.text:GetText() or "", 1, .82, 0, true) - GameTooltip:Show() + tooltip:Show() end end @@ -225,7 +217,7 @@ local function Button_OnLeave(frame) self:Fire("OnButtonLeave", frame.uniquevalue, frame) if self.enabletooltips then - GameTooltip:Hide() + AceGUI.tooltip:Hide() end end @@ -271,18 +263,19 @@ end local function Dragger_OnMouseUp(frame) local treeframe = frame:GetParent() local self = treeframe.obj - local frame = treeframe:GetParent() + local treeframeParent = treeframe:GetParent() treeframe:StopMovingOrSizing() --treeframe:SetScript("OnUpdate", nil) treeframe:SetUserPlaced(false) --Without this :GetHeight will get stuck on the current height, causing the tree contents to not resize treeframe:SetHeight(0) - treeframe:SetPoint("TOPLEFT", frame, "TOPLEFT",0,0) - treeframe:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT",0,0) - + treeframe:ClearAllPoints() + treeframe:SetPoint("TOPLEFT", treeframeParent, "TOPLEFT",0,0) + treeframe:SetPoint("BOTTOMLEFT", treeframeParent, "BOTTOMLEFT",0,0) + local status = self.status or self.localstatus status.treewidth = treeframe:GetWidth() - + treeframe.obj:Fire("OnTreeResize",treeframe:GetWidth()) -- recalculate the content width treeframe.obj:OnWidthSet(status.fullwidth) @@ -302,6 +295,8 @@ local methods = { ["OnRelease"] = function(self) self.status = nil + self.tree = nil + self.frame:SetScript("OnUpdate", nil) for k, v in pairs(self.localstatus) do if k == "groups" then for k2 in pairs(v) do @@ -365,8 +360,8 @@ local methods = { --sets the tree to be displayed ["SetTree"] = function(self, tree, filter) self.filter = filter - if tree then - assert(type(tree) == "table") + if tree then + assert(type(tree) == "table") end self.tree = tree self:RefreshTree() @@ -374,8 +369,7 @@ local methods = { ["BuildLevel"] = function(self, tree, level, parent) local groups = (self.status or self.localstatus).groups - local hasChildren = self.hasChildren - + for i, v in ipairs(tree) do if v.children then if not self.filter or ShouldDisplayLevel(v.children) then @@ -390,8 +384,8 @@ local methods = { end end, - ["RefreshTree"] = function(self,scrollToSelection) - local buttons = self.buttons + ["RefreshTree"] = function(self,scrollToSelection,fromOnUpdate) + local buttons = self.buttons local lines = self.lines for i, v in ipairs(buttons) do @@ -412,7 +406,7 @@ local methods = { local tree = self.tree local treeframe = self.treeframe - + status.scrollToSelection = status.scrollToSelection or scrollToSelection -- needs to be cached in case the control hasn't been drawn yet (code bails out below) self:BuildLevel(tree, 1) @@ -422,8 +416,13 @@ local methods = { local maxlines = (floor(((self.treeframe:GetHeight()or 0) - 20 ) / 18)) if maxlines <= 0 then return end + if self.frame:GetParent() == UIParent and not fromOnUpdate then + self.frame:SetScript("OnUpdate", FirstFrameUpdate) + return + end + local first, last - + scrollToSelection = status.scrollToSelection status.scrollToSelection = nil @@ -499,9 +498,9 @@ local methods = { button:Show() buttonnum = buttonnum + 1 end - + end, - + ["SetSelected"] = function(self, value) local status = self.status or self.localstatus if status.selected ~= value then @@ -551,20 +550,24 @@ local methods = { local treeframe = self.treeframe local status = self.status or self.localstatus status.fullwidth = width - + local contentwidth = width - status.treewidth - 20 if contentwidth < 0 then contentwidth = 0 end content:SetWidth(contentwidth) content.width = contentwidth - + local maxtreewidth = math_min(400, width - 50) - + if maxtreewidth > 100 and status.treewidth > maxtreewidth then self:SetTreeWidth(maxtreewidth, status.treesizable) end - treeframe:SetMaxResize(maxtreewidth, 1600) + if treeframe.SetResizeBounds then + treeframe:SetResizeBounds(100, 1, maxtreewidth, 1600) + else + treeframe:SetMaxResize(maxtreewidth, 1600) + end end, ["OnHeightSet"] = function(self, height) @@ -586,16 +589,16 @@ local methods = { treewidth = DEFAULT_TREE_WIDTH else resizable = false - treewidth = DEFAULT_TREE_WIDTH + treewidth = DEFAULT_TREE_WIDTH end end self.treeframe:SetWidth(treewidth) self.dragger:EnableMouse(resizable) - + local status = self.status or self.localstatus status.treewidth = treewidth status.treesizable = resizable - + -- recalculate the content width if status.fullwidth then self:OnWidthSet(status.fullwidth) @@ -626,7 +629,7 @@ local PaneBackdrop = { local DraggerBackdrop = { bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = nil, - tile = true, tileSize = 16, edgeSize = 0, + tile = true, tileSize = 16, edgeSize = 1, insets = { left = 3, right = 3, top = 7, bottom = 7 } } @@ -634,7 +637,7 @@ local function Constructor() local num = AceGUI:GetNextWidgetNum(Type) local frame = CreateFrame("Frame", nil, UIParent) - local treeframe = CreateFrame("Frame", nil, frame) + local treeframe = CreateFrame("Frame", nil, frame, "BackdropTemplate") treeframe:SetPoint("TOPLEFT") treeframe:SetPoint("BOTTOMLEFT") treeframe:SetWidth(DEFAULT_TREE_WIDTH) @@ -643,13 +646,17 @@ local function Constructor() treeframe:SetBackdropColor(0.1, 0.1, 0.1, 0.5) treeframe:SetBackdropBorderColor(0.4, 0.4, 0.4) treeframe:SetResizable(true) - treeframe:SetMinResize(100, 1) - treeframe:SetMaxResize(400, 1600) + if treeframe.SetResizeBounds then -- WoW 10.0 + treeframe:SetResizeBounds(100, 1, 400, 1600) + else + treeframe:SetMinResize(100, 1) + treeframe:SetMaxResize(400, 1600) + end treeframe:SetScript("OnUpdate", FirstFrameUpdate) treeframe:SetScript("OnSizeChanged", Tree_OnSizeChanged) treeframe:SetScript("OnMouseWheel", Tree_OnMouseWheel) - local dragger = CreateFrame("Frame", nil, treeframe) + local dragger = CreateFrame("Frame", nil, treeframe, "BackdropTemplate") dragger:SetWidth(8) dragger:SetPoint("TOP", treeframe, "TOPRIGHT") dragger:SetPoint("BOTTOM", treeframe, "BOTTOMRIGHT") @@ -672,14 +679,9 @@ local function Constructor() local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND") scrollbg:SetAllPoints(scrollbar) + scrollbg:SetColorTexture(0,0,0,0.4) - if IsLegion then - scrollbg:SetColorTexture(0,0,0,0.4) - else - scrollbg:SetTexture(0,0,0,0.4) - end - - local border = CreateFrame("Frame",nil,frame) + local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") border:SetPoint("TOPLEFT", treeframe, "TOPRIGHT") border:SetPoint("BOTTOMRIGHT") border:SetBackdrop(PaneBackdrop) diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua old mode 100644 new mode 100755 index 33ed7d8..5729bfd --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua @@ -7,10 +7,6 @@ local pairs, assert, type = pairs, assert, type local PlaySound = PlaySound local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: GameFontNormal - ---------------- -- Main Frame -- ---------------- @@ -21,26 +17,30 @@ local CreateFrame, UIParent = CreateFrame, UIParent ]] do local Type = "Window" - local Version = 4 + local Version = 8 + + local function frameOnShow(this) + this.obj:Fire("OnShow") + end local function frameOnClose(this) this.obj:Fire("OnClose") end - + local function closeOnClick(this) - PlaySound("gsTitleOptionExit") + PlaySound(799) -- SOUNDKIT.GS_TITLE_OPTION_EXIT this.obj:Hide() end - + local function frameOnMouseDown(this) AceGUI:ClearFocus() end - + local function titleOnMouseDown(this) this:GetParent():StartMoving() AceGUI:ClearFocus() end - + local function frameOnMouseUp(this) local frame = this:GetParent() frame:StopMovingOrSizing() @@ -51,22 +51,22 @@ do status.top = frame:GetTop() status.left = frame:GetLeft() end - + local function sizerseOnMouseDown(this) this:GetParent():StartSizing("BOTTOMRIGHT") AceGUI:ClearFocus() end - + local function sizersOnMouseDown(this) this:GetParent():StartSizing("BOTTOM") AceGUI:ClearFocus() end - + local function sizereOnMouseDown(this) this:GetParent():StartSizing("RIGHT") AceGUI:ClearFocus() end - + local function sizerOnMouseUp(this) this:GetParent():StopMovingOrSizing() end @@ -74,19 +74,19 @@ do local function SetTitle(self,title) self.titletext:SetText(title) end - + local function SetStatusText(self,text) -- self.statustext:SetText(text) end - + local function Hide(self) self.frame:Hide() end - + local function Show(self) self.frame:Show() end - + local function OnAcquire(self) self.frame:SetParent(UIParent) self.frame:SetFrameStrata("FULLSCREEN_DIALOG") @@ -94,21 +94,21 @@ do self:EnableResize(true) self:Show() end - + local function OnRelease(self) self.status = nil for k in pairs(self.localstatus) do self.localstatus[k] = nil end end - + -- called to set an external table to store status in local function SetStatusTable(self, status) assert(type(status) == "table") self.status = status self:ApplyStatus() end - + local function ApplyStatus(self) local status = self.status or self.localstatus local frame = self.frame @@ -121,7 +121,7 @@ do frame:SetPoint("CENTER",UIParent,"CENTER") end end - + local function OnWidthSet(self, width) local content = self.content local contentwidth = width - 34 @@ -131,8 +131,8 @@ do content:SetWidth(contentwidth) content.width = contentwidth end - - + + local function OnHeightSet(self, height) local content = self.content local contentheight = height - 57 @@ -142,19 +142,19 @@ do content:SetHeight(contentheight) content.height = contentheight end - + local function EnableResize(self, state) local func = state and "Show" or "Hide" self.sizer_se[func](self.sizer_se) self.sizer_s[func](self.sizer_s) self.sizer_e[func](self.sizer_e) end - + local function Constructor() local frame = CreateFrame("Frame",nil,UIParent) local self = {} self.type = "Window" - + self.Hide = Hide self.Show = Show self.SetTitle = SetTitle @@ -166,9 +166,9 @@ do self.OnWidthSet = OnWidthSet self.OnHeightSet = OnHeightSet self.EnableResize = EnableResize - + self.localstatus = {} - + self.frame = frame frame.obj = self frame:SetWidth(700) @@ -179,90 +179,95 @@ do frame:SetResizable(true) frame:SetFrameStrata("FULLSCREEN_DIALOG") frame:SetScript("OnMouseDown", frameOnMouseDown) - + + frame:SetScript("OnShow",frameOnShow) frame:SetScript("OnHide",frameOnClose) - frame:SetMinResize(240,240) + if frame.SetResizeBounds then -- WoW 10.0 + frame:SetResizeBounds(240,240) + else + frame:SetMinResize(240,240) + end frame:SetToplevel(true) local titlebg = frame:CreateTexture(nil, "BACKGROUND") - titlebg:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Title-Background]]) + titlebg:SetTexture(251966) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Title-Background titlebg:SetPoint("TOPLEFT", 9, -6) titlebg:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT", -28, -24) - + local dialogbg = frame:CreateTexture(nil, "BACKGROUND") - dialogbg:SetTexture([[Interface\Tooltips\UI-Tooltip-Background]]) + dialogbg:SetTexture(137056) -- Interface\\Tooltips\\UI-Tooltip-Background dialogbg:SetPoint("TOPLEFT", 8, -24) dialogbg:SetPoint("BOTTOMRIGHT", -6, 8) dialogbg:SetVertexColor(0, 0, 0, .75) - + local topleft = frame:CreateTexture(nil, "BORDER") - topleft:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + topleft:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border topleft:SetWidth(64) topleft:SetHeight(64) topleft:SetPoint("TOPLEFT") topleft:SetTexCoord(0.501953125, 0.625, 0, 1) - + local topright = frame:CreateTexture(nil, "BORDER") - topright:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + topright:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border topright:SetWidth(64) topright:SetHeight(64) topright:SetPoint("TOPRIGHT") topright:SetTexCoord(0.625, 0.75, 0, 1) - + local top = frame:CreateTexture(nil, "BORDER") - top:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + top:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border top:SetHeight(64) top:SetPoint("TOPLEFT", topleft, "TOPRIGHT") top:SetPoint("TOPRIGHT", topright, "TOPLEFT") top:SetTexCoord(0.25, 0.369140625, 0, 1) - + local bottomleft = frame:CreateTexture(nil, "BORDER") - bottomleft:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + bottomleft:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border bottomleft:SetWidth(64) bottomleft:SetHeight(64) bottomleft:SetPoint("BOTTOMLEFT") bottomleft:SetTexCoord(0.751953125, 0.875, 0, 1) - + local bottomright = frame:CreateTexture(nil, "BORDER") - bottomright:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + bottomright:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border bottomright:SetWidth(64) bottomright:SetHeight(64) bottomright:SetPoint("BOTTOMRIGHT") bottomright:SetTexCoord(0.875, 1, 0, 1) - + local bottom = frame:CreateTexture(nil, "BORDER") - bottom:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + bottom:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border bottom:SetHeight(64) bottom:SetPoint("BOTTOMLEFT", bottomleft, "BOTTOMRIGHT") bottom:SetPoint("BOTTOMRIGHT", bottomright, "BOTTOMLEFT") bottom:SetTexCoord(0.376953125, 0.498046875, 0, 1) - + local left = frame:CreateTexture(nil, "BORDER") - left:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + left:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border left:SetWidth(64) left:SetPoint("TOPLEFT", topleft, "BOTTOMLEFT") left:SetPoint("BOTTOMLEFT", bottomleft, "TOPLEFT") left:SetTexCoord(0.001953125, 0.125, 0, 1) - + local right = frame:CreateTexture(nil, "BORDER") - right:SetTexture([[Interface\PaperDollInfoFrame\UI-GearManager-Border]]) + right:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border right:SetWidth(64) right:SetPoint("TOPRIGHT", topright, "BOTTOMRIGHT") right:SetPoint("BOTTOMRIGHT", bottomright, "TOPRIGHT") right:SetTexCoord(0.1171875, 0.2421875, 0, 1) - + local close = CreateFrame("Button", nil, frame, "UIPanelCloseButton") close:SetPoint("TOPRIGHT", 2, 1) close:SetScript("OnClick", closeOnClick) self.closebutton = close close.obj = self - + local titletext = frame:CreateFontString(nil, "ARTWORK") titletext:SetFontObject(GameFontNormal) titletext:SetPoint("TOPLEFT", 12, -8) titletext:SetPoint("TOPRIGHT", -32, -8) self.titletext = titletext - + local title = CreateFrame("Button", nil, frame) title:SetPoint("TOPLEFT", titlebg) title:SetPoint("BOTTOMRIGHT", titlebg) @@ -270,7 +275,7 @@ do title:SetScript("OnMouseDown",titleOnMouseDown) title:SetScript("OnMouseUp", frameOnMouseUp) self.title = title - + local sizer_se = CreateFrame("Frame",nil,frame) sizer_se:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",0,0) sizer_se:SetWidth(25) @@ -285,7 +290,7 @@ do line1:SetWidth(14) line1:SetHeight(14) line1:SetPoint("BOTTOMRIGHT", -8, 8) - line1:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") + line1:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border local x = 0.1 * 14/17 line1:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) @@ -294,8 +299,8 @@ do line2:SetWidth(8) line2:SetHeight(8) line2:SetPoint("BOTTOMRIGHT", -8, 8) - line2:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") - local x = 0.1 * 8/17 + line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border + x = 0.1 * 8/17 line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) local sizer_s = CreateFrame("Frame",nil,frame) @@ -306,7 +311,7 @@ do sizer_s:SetScript("OnMouseDown",sizersOnMouseDown) sizer_s:SetScript("OnMouseUp", sizerOnMouseUp) self.sizer_s = sizer_s - + local sizer_e = CreateFrame("Frame",nil,frame) sizer_e:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",0,25) sizer_e:SetPoint("TOPRIGHT",frame,"TOPRIGHT",0,0) @@ -315,17 +320,17 @@ do sizer_e:SetScript("OnMouseDown",sizereOnMouseDown) sizer_e:SetScript("OnMouseUp", sizerOnMouseUp) self.sizer_e = sizer_e - + --Container Support local content = CreateFrame("Frame",nil,frame) self.content = content content.obj = self content:SetPoint("TOPLEFT",frame,"TOPLEFT",12,-32) content:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-12,13) - + AceGUI:RegisterAsContainer(self) - return self + return self end - + AceGUI:RegisterWidgetType(Type,Constructor,Version) end diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua old mode 100644 new mode 100755 index dbcad18..8e650ce --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua @@ -2,7 +2,7 @@ Button Widget Graphical Button. -------------------------------------------------------------------------------]] -local Type, Version = "Button", 23 +local Type, Version = "Button", 24 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -18,7 +18,7 @@ Scripts -------------------------------------------------------------------------------]] local function Button_OnClick(frame, ...) AceGUI:ClearFocus() - PlaySound("igMainMenuOption") + PlaySound(852) -- SOUNDKIT.IG_MAINMENU_OPTION frame.obj:Fire("OnClick", ...) end @@ -51,7 +51,7 @@ local methods = { self:SetWidth(self.text:GetStringWidth() + 30) end end, - + ["SetAutoWidth"] = function(self, autoWidth) self.autoWidth = autoWidth if self.autoWidth then diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua old mode 100644 new mode 100755 index 284ea8c..6e64292 --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua @@ -1,7 +1,7 @@ --[[----------------------------------------------------------------------------- Checkbox Widget -------------------------------------------------------------------------------]] -local Type, Version = "CheckBox", 22 +local Type, Version = "CheckBox", 26 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -12,10 +12,6 @@ local select, pairs = select, pairs local PlaySound = PlaySound local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: SetDesaturation, GameFontHighlight - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] @@ -26,7 +22,7 @@ local function AlignImage(self) self.text:SetPoint("LEFT", self.checkbg, "RIGHT") self.text:SetPoint("RIGHT") else - self.text:SetPoint("LEFT", self.image,"RIGHT", 1, 0) + self.text:SetPoint("LEFT", self.image, "RIGHT", 1, 0) self.text:SetPoint("RIGHT") end end @@ -60,9 +56,9 @@ local function CheckBox_OnMouseUp(frame) self:ToggleChecked() if self.checked then - PlaySound("igMainMenuOptionCheckBoxOn") + PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON else -- for both nil and false (tristate) - PlaySound("igMainMenuOptionCheckBoxOff") + PlaySound(857) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_OFF end self:Fire("OnValueChanged", self.checked) @@ -91,7 +87,7 @@ local methods = { if self.desc then self.desc:SetWidth(width - 30) if self.desc:GetText() and self.desc:GetText() ~= "" then - self:SetHeight(28 + self.desc:GetHeight()) + self:SetHeight(28 + self.desc:GetStringHeight()) end end end, @@ -119,20 +115,20 @@ local methods = { end end, - ["SetValue"] = function(self,value) + ["SetValue"] = function(self, value) local check = self.check self.checked = value if value then - SetDesaturation(self.check, false) - self.check:Show() + SetDesaturation(check, false) + check:Show() else --Nil is the unknown tristate value if self.tristate and value == nil then - SetDesaturation(self.check, true) - self.check:Show() + SetDesaturation(check, true) + check:Show() else - SetDesaturation(self.check, false) - self.check:Hide() + SetDesaturation(check, false) + check:Hide() end end self:SetDisabled(self.disabled) @@ -155,21 +151,21 @@ local methods = { local size if type == "radio" then size = 16 - checkbg:SetTexture("Interface\\Buttons\\UI-RadioButton") + checkbg:SetTexture(130843) -- Interface\\Buttons\\UI-RadioButton checkbg:SetTexCoord(0, 0.25, 0, 1) - check:SetTexture("Interface\\Buttons\\UI-RadioButton") + check:SetTexture(130843) -- Interface\\Buttons\\UI-RadioButton check:SetTexCoord(0.25, 0.5, 0, 1) check:SetBlendMode("ADD") - highlight:SetTexture("Interface\\Buttons\\UI-RadioButton") + highlight:SetTexture(130843) -- Interface\\Buttons\\UI-RadioButton highlight:SetTexCoord(0.5, 0.75, 0, 1) else size = 24 - checkbg:SetTexture("Interface\\Buttons\\UI-CheckBox-Up") + checkbg:SetTexture(130755) -- Interface\\Buttons\\UI-CheckBox-Up checkbg:SetTexCoord(0, 1, 0, 1) - check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") + check:SetTexture(130751) -- Interface\\Buttons\\UI-CheckBox-Check check:SetTexCoord(0, 1, 0, 1) check:SetBlendMode("BLEND") - highlight:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight") + highlight:SetTexture(130753) -- Interface\\Buttons\\UI-CheckBox-Highlight highlight:SetTexCoord(0, 1, 0, 1) end checkbg:SetHeight(size) @@ -199,18 +195,19 @@ local methods = { ["SetDescription"] = function(self, desc) if desc then if not self.desc then - local desc = self.frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") - desc:ClearAllPoints() - desc:SetPoint("TOPLEFT", self.checkbg, "TOPRIGHT", 5, -21) - desc:SetWidth(self.frame.width - 30) - desc:SetJustifyH("LEFT") - desc:SetJustifyV("TOP") - self.desc = desc + local f = self.frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") + f:ClearAllPoints() + f:SetPoint("TOPLEFT", self.checkbg, "TOPRIGHT", 5, -21) + f:SetWidth(self.frame.width - 30) + f:SetPoint("RIGHT", self.frame, "RIGHT", -30, 0) + f:SetJustifyH("LEFT") + f:SetJustifyV("TOP") + self.desc = f end self.desc:Show() --self.text:SetFontObject(GameFontNormal) self.desc:SetText(desc) - self:SetHeight(28 + self.desc:GetHeight()) + self:SetHeight(28 + self.desc:GetStringHeight()) else if self.desc then self.desc:SetText("") @@ -220,11 +217,11 @@ local methods = { self:SetHeight(24) end end, - + ["SetImage"] = function(self, path, ...) local image = self.image image:SetTexture(path) - + if image:GetTexture() then local n = select("#", ...) if n == 4 or n == 8 then @@ -254,11 +251,11 @@ local function Constructor() checkbg:SetWidth(24) checkbg:SetHeight(24) checkbg:SetPoint("TOPLEFT") - checkbg:SetTexture("Interface\\Buttons\\UI-CheckBox-Up") + checkbg:SetTexture(130755) -- Interface\\Buttons\\UI-CheckBox-Up local check = frame:CreateTexture(nil, "OVERLAY") check:SetAllPoints(checkbg) - check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") + check:SetTexture(130751) -- Interface\\Buttons\\UI-CheckBox-Check local text = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight") text:SetJustifyH("LEFT") @@ -267,7 +264,7 @@ local function Constructor() text:SetPoint("RIGHT") local highlight = frame:CreateTexture(nil, "HIGHLIGHT") - highlight:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight") + highlight:SetTexture(130753) -- Interface\\Buttons\\UI-CheckBox-Highlight highlight:SetBlendMode("ADD") highlight:SetAllPoints(checkbg) diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua old mode 100644 new mode 100755 index 8e5f3ae..699d583 --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua @@ -1,22 +1,16 @@ --[[----------------------------------------------------------------------------- ColorPicker Widget -------------------------------------------------------------------------------]] -local Type, Version = "ColorPicker", 23 +local Type, Version = "ColorPicker", 25 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end -local IsLegion = select(4, GetBuildInfo()) >= 70000 - -- Lua APIs local pairs = pairs -- WoW APIs local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: ShowUIPanel, HideUIPanel, ColorPickerFrame, OpacitySliderFrame - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] @@ -49,7 +43,7 @@ local function Control_OnLeave(frame) end local function ColorSwatch_OnClick(frame) - HideUIPanel(ColorPickerFrame) + ColorPickerFrame:Hide() local self = frame.obj if not self.disabled then ColorPickerFrame:SetFrameStrata("FULLSCREEN_DIALOG") @@ -79,7 +73,7 @@ local function ColorSwatch_OnClick(frame) ColorCallback(self, r, g, b, a, true) end - ShowUIPanel(ColorPickerFrame) + ColorPickerFrame:Show() end AceGUI:ClearFocus() end @@ -142,24 +136,22 @@ local function Constructor() local colorSwatch = frame:CreateTexture(nil, "OVERLAY") colorSwatch:SetWidth(19) colorSwatch:SetHeight(19) - colorSwatch:SetTexture("Interface\\ChatFrame\\ChatFrameColorSwatch") + colorSwatch:SetTexture(130939) -- Interface\\ChatFrame\\ChatFrameColorSwatch colorSwatch:SetPoint("LEFT") local texture = frame:CreateTexture(nil, "BACKGROUND") + colorSwatch.background = texture texture:SetWidth(16) texture:SetHeight(16) - if IsLegion then - texture:SetColorTexture(1, 1, 1) - else - texture:SetTexture(1, 1, 1) - end + texture:SetColorTexture(1, 1, 1) texture:SetPoint("CENTER", colorSwatch) texture:Show() local checkers = frame:CreateTexture(nil, "BACKGROUND") + colorSwatch.checkers = checkers checkers:SetWidth(14) checkers:SetHeight(14) - checkers:SetTexture("Tileset\\Generic\\Checkers") + checkers:SetTexture(188523) -- Tileset\\Generic\\Checkers checkers:SetTexCoord(.25, 0, 0.5, .25) checkers:SetDesaturated(true) checkers:SetVertexColor(1, 1, 1, 0.75) @@ -174,7 +166,7 @@ local function Constructor() text:SetPoint("RIGHT") --local highlight = frame:CreateTexture(nil, "HIGHLIGHT") - --highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") + --highlight:SetTexture(136810) -- Interface\\QuestFrame\\UI-QuestTitleHighlight --highlight:SetBlendMode("ADD") --highlight:SetAllPoints(frame) diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua old mode 100644 new mode 100755 index 9e5e4f5..0ad94f8 --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua @@ -1,9 +1,7 @@ ---[[ $Id: AceGUIWidget-DropDown-Items.lua 1137 2016-05-15 10:57:36Z nevcairiel $ ]]-- +--[[ $Id: AceGUIWidget-DropDown-Items.lua 1272 2022-08-29 15:56:35Z nevcairiel $ ]]-- local AceGUI = LibStub("AceGUI-3.0") -local IsLegion = select(4, GetBuildInfo()) >= 70000 - -- Lua APIs local select, assert = select, assert @@ -35,7 +33,7 @@ end -- ItemBase is the base "class" for all dropdown items. -- Each item has to use ItemBase.Create(widgetType) to --- create an initial 'self' value. +-- create an initial 'self' value. -- ItemBase will add common functions and ui event handlers. -- Be sure to keep basic usage when you override functions. @@ -43,7 +41,7 @@ local ItemBase = { -- NOTE: The ItemBase version is added to each item's version number -- to ensure proper updates on ItemBase changes. -- Use at least 1000er steps. - version = 1000, + version = 2000, counter = 0, } @@ -54,7 +52,7 @@ function ItemBase.Frame_OnEnter(this) self.highlight:Show() end self:Fire("OnEnter") - + if self.specialOnEnter then self.specialOnEnter(self) end @@ -62,10 +60,10 @@ end function ItemBase.Frame_OnLeave(this) local self = this.obj - + self.highlight:Hide() self:Fire("OnLeave") - + if self.specialOnLeave then self.specialOnLeave(self) end @@ -91,7 +89,7 @@ end -- Do not call this method directly function ItemBase.SetPullout(self, pullout) self.pullout = pullout - + self.frame:SetParent(nil) self.frame:SetParent(pullout.itemFrame) self.parent = pullout.itemFrame @@ -157,12 +155,12 @@ function ItemBase.Create(type) self.frame = frame frame.obj = self self.type = type - + self.useHighlight = true - + frame:SetHeight(17) frame:SetFrameStrata("FULLSCREEN_DIALOG") - + local text = frame:CreateFontString(nil,"OVERLAY","GameFontNormalSmall") text:SetTextColor(1,1,1) text:SetJustifyH("LEFT") @@ -171,7 +169,7 @@ function ItemBase.Create(type) self.text = text local highlight = frame:CreateTexture(nil, "OVERLAY") - highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") + highlight:SetTexture(136810) -- Interface\\QuestFrame\\UI-QuestTitleHighlight highlight:SetBlendMode("ADD") highlight:SetHeight(14) highlight:ClearAllPoints() @@ -180,40 +178,40 @@ function ItemBase.Create(type) highlight:Hide() self.highlight = highlight - local check = frame:CreateTexture("OVERLAY") + local check = frame:CreateTexture(nil, "OVERLAY") check:SetWidth(16) check:SetHeight(16) check:SetPoint("LEFT",frame,"LEFT",3,-1) - check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") + check:SetTexture(130751) -- Interface\\Buttons\\UI-CheckBox-Check check:Hide() self.check = check - local sub = frame:CreateTexture("OVERLAY") + local sub = frame:CreateTexture(nil, "OVERLAY") sub:SetWidth(16) sub:SetHeight(16) sub:SetPoint("RIGHT",frame,"RIGHT",-3,-1) - sub:SetTexture("Interface\\ChatFrame\\ChatFrameExpandArrow") + sub:SetTexture(130940) -- Interface\\ChatFrame\\ChatFrameExpandArrow sub:Hide() - self.sub = sub - + self.sub = sub + frame:SetScript("OnEnter", ItemBase.Frame_OnEnter) frame:SetScript("OnLeave", ItemBase.Frame_OnLeave) - + self.OnAcquire = ItemBase.OnAcquire self.OnRelease = ItemBase.OnRelease - + self.SetPullout = ItemBase.SetPullout self.GetText = ItemBase.GetText self.SetText = ItemBase.SetText self.SetDisabled = ItemBase.SetDisabled - + self.SetPoint = ItemBase.SetPoint self.Show = ItemBase.Show self.Hide = ItemBase.Hide - + self.SetOnLeave = ItemBase.SetOnLeave self.SetOnEnter = ItemBase.SetOnEnter - + return self end @@ -225,20 +223,20 @@ end --[[ Template for items: - + -- Item: -- do local widgetType = "Dropdown-Item-" local widgetVersion = 1 - + local function Constructor() local self = ItemBase.Create(widgetType) - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end --]] @@ -249,25 +247,25 @@ end do local widgetType = "Dropdown-Item-Header" local widgetVersion = 1 - + local function OnEnter(this) local self = this.obj self:Fire("OnEnter") - + if self.specialOnEnter then self.specialOnEnter(self) end end - + local function OnLeave(this) local self = this.obj self:Fire("OnLeave") - + if self.specialOnLeave then self.specialOnLeave(self) end end - + -- exported, override local function SetDisabled(self, disabled) ItemBase.SetDisabled(self, disabled) @@ -275,21 +273,21 @@ do self.text:SetTextColor(1, 1, 0) end end - + local function Constructor() local self = ItemBase.Create(widgetType) - + self.SetDisabled = SetDisabled - + self.frame:SetScript("OnEnter", OnEnter) self.frame:SetScript("OnLeave", OnLeave) - + self.text:SetTextColor(1, 1, 0) - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end @@ -298,7 +296,7 @@ end do local widgetType = "Dropdown-Item-Execute" local widgetVersion = 1 - + local function Frame_OnClick(this, button) local self = this.obj if self.disabled then return end @@ -307,16 +305,16 @@ do self.pullout:Close() end end - + local function Constructor() local self = ItemBase.Create(widgetType) - + self.frame:SetScript("OnClick", Frame_OnClick) - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end @@ -325,8 +323,8 @@ end -- Does not close the pullout on click. do local widgetType = "Dropdown-Item-Toggle" - local widgetVersion = 3 - + local widgetVersion = 4 + local function UpdateToggle(self) if self.value then self.check:Show() @@ -334,49 +332,49 @@ do self.check:Hide() end end - + local function OnRelease(self) ItemBase.OnRelease(self) self:SetValue(nil) end - + local function Frame_OnClick(this, button) local self = this.obj if self.disabled then return end self.value = not self.value if self.value then - PlaySound("igMainMenuOptionCheckBoxOn") + PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON else - PlaySound("igMainMenuOptionCheckBoxOff") + PlaySound(857) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_OFF end UpdateToggle(self) self:Fire("OnValueChanged", self.value) end - + -- exported local function SetValue(self, value) self.value = value UpdateToggle(self) end - + -- exported local function GetValue(self) return self.value end - + local function Constructor() local self = ItemBase.Create(widgetType) - + self.frame:SetScript("OnClick", Frame_OnClick) - + self.SetValue = SetValue self.GetValue = GetValue self.OnRelease = OnRelease - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end @@ -386,55 +384,55 @@ end do local widgetType = "Dropdown-Item-Menu" local widgetVersion = 2 - + local function OnEnter(this) local self = this.obj self:Fire("OnEnter") - + if self.specialOnEnter then self.specialOnEnter(self) end - + self.highlight:Show() - + if not self.disabled and self.submenu then self.submenu:Open("TOPLEFT", self.frame, "TOPRIGHT", self.pullout:GetRightBorderWidth(), 0, self.frame:GetFrameLevel() + 100) end end - + local function OnHide(this) local self = this.obj if self.submenu then self.submenu:Close() end end - + -- exported local function SetMenu(self, menu) assert(menu.type == "Dropdown-Pullout") self.submenu = menu end - + -- exported local function CloseMenu(self) self.submenu:Close() end - + local function Constructor() local self = ItemBase.Create(widgetType) - + self.sub:Show() - + self.frame:SetScript("OnEnter", OnEnter) self.frame:SetScript("OnHide", OnHide) - + self.SetMenu = SetMenu self.CloseMenu = CloseMenu - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end @@ -443,35 +441,31 @@ end do local widgetType = "Dropdown-Item-Separator" local widgetVersion = 2 - + -- exported, override local function SetDisabled(self, disabled) ItemBase.SetDisabled(self, disabled) self.useHighlight = false end - + local function Constructor() local self = ItemBase.Create(widgetType) - + self.SetDisabled = SetDisabled - + local line = self.frame:CreateTexture(nil, "OVERLAY") line:SetHeight(1) - if IsLegion then - line:SetColorTexture(.5, .5, .5) - else - line:SetTexture(.5, .5, .5) - end + line:SetColorTexture(.5, .5, .5) line:SetPoint("LEFT", self.frame, "LEFT", 10, 0) line:SetPoint("RIGHT", self.frame, "RIGHT", -10, 0) - + self.text:Hide() - + self.useHighlight = false - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua old mode 100644 new mode 100755 index d2b0f15..3d8dd11 --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua @@ -1,9 +1,9 @@ ---[[ $Id: AceGUIWidget-DropDown.lua 1116 2014-10-12 08:15:46Z nevcairiel $ ]]-- +--[[ $Id: AceGUIWidget-DropDown.lua 1284 2022-09-25 09:15:30Z nevcairiel $ ]]-- local AceGUI = LibStub("AceGUI-3.0") -- Lua APIs local min, max, floor = math.min, math.max, math.floor -local select, pairs, ipairs, type = select, pairs, ipairs, type +local select, pairs, ipairs, type, tostring = select, pairs, ipairs, type, tostring local tsort = table.sort -- WoW APIs @@ -11,10 +11,6 @@ local PlaySound = PlaySound local UIParent, CreateFrame = UIParent, CreateFrame local _G = _G --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: CLOSE - local function fixlevels(parent,...) local i = 1 local child = select(i, ...) @@ -39,10 +35,10 @@ end do local widgetType = "Dropdown-Pullout" - local widgetVersion = 3 - + local widgetVersion = 5 + --[[ Static data ]]-- - + local backdrop = { bgFile = "Interface\\ChatFrame\\ChatFrameBackground", edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", @@ -60,9 +56,9 @@ do local defaultWidth = 200 local defaultMaxHeight = 600 - + --[[ UI Event Handlers ]]-- - + -- HACK: This should be no part of the pullout, but there -- is no other 'clean' way to response to any item-OnEnter -- Used to close Submenus when an other item is entered @@ -74,22 +70,22 @@ do end end end - + -- See the note in Constructor() for each scroll related function local function OnMouseWheel(this, value) this.obj:MoveScroll(value) end - + local function OnScrollValueChanged(this, value) this.obj:SetScroll(value) end - + local function OnSizeChanged(this) this.obj:FixScroll() end - + --[[ Exported methods ]]-- - + -- exported local function SetScroll(self, value) local status = self.scrollStatus @@ -106,9 +102,9 @@ do child:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, offset) child:SetPoint("TOPRIGHT", frame, "TOPRIGHT", self.slider:IsShown() and -12 or 0, offset) status.offset = offset - status.scrollvalue = value + status.scrollvalue = value end - + -- exported local function MoveScroll(self, value) local status = self.scrollStatus @@ -127,7 +123,7 @@ do self.slider:SetValue(min(max(status.scrollvalue + delta*(1000/(diff/45)),0), 1000)) end end - + -- exported local function FixScroll(self) local status = self.scrollStatus @@ -140,7 +136,7 @@ do child:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, offset) self.slider:SetValue(0) else - self.slider:Show() + self.slider:Show() local value = (offset / (viewheight - height) * 1000) if value > 1000 then value = 1000 end self.slider:SetValue(value) @@ -153,68 +149,63 @@ do end end end - + -- exported, AceGUI callback local function OnAcquire(self) self.frame:SetParent(UIParent) --self.itemFrame:SetToplevel(true) end - + -- exported, AceGUI callback local function OnRelease(self) self:Clear() self.frame:ClearAllPoints() self.frame:Hide() end - + -- exported local function AddItem(self, item) self.items[#self.items + 1] = item - + local h = #self.items * 16 self.itemFrame:SetHeight(h) self.frame:SetHeight(min(h + 34, self.maxHeight)) -- +34: 20 for scrollFrame placement (10 offset) and +14 for item placement - + item.frame:SetPoint("LEFT", self.itemFrame, "LEFT") item.frame:SetPoint("RIGHT", self.itemFrame, "RIGHT") - + item:SetPullout(self) item:SetOnEnter(OnEnter) end - + -- exported - local function Open(self, point, relFrame, relPoint, x, y) + local function Open(self, point, relFrame, relPoint, x, y) local items = self.items local frame = self.frame local itemFrame = self.itemFrame - + frame:SetPoint(point, relFrame, relPoint, x, y) - + local height = 8 for i, item in pairs(items) do - if i == 1 then - item:SetPoint("TOP", itemFrame, "TOP", 0, -2) - else - item:SetPoint("TOP", items[i-1].frame, "BOTTOM", 0, 1) - end - + item:SetPoint("TOP", itemFrame, "TOP", 0, -2 + (i - 1) * -16) item:Show() - + height = height + 16 end itemFrame:SetHeight(height) fixstrata("TOOLTIP", frame, frame:GetChildren()) frame:Show() self:Fire("OnOpen") - end - + end + -- exported local function Close(self) self.frame:Hide() self:Fire("OnClose") - end - + end + -- exported local function Clear(self) local items = self.items @@ -222,18 +213,18 @@ do AceGUI:Release(item) items[i] = nil end - end - + end + -- exported local function IterateItems(self) return ipairs(self.items) end - + -- exported local function SetHideOnLeave(self, val) self.hideOnLeave = val end - + -- exported local function SetMaxHeight(self, height) self.maxHeight = height or defaultMaxHeight @@ -243,28 +234,28 @@ do self.frame:SetHeight(self.itemFrame:GetHeight() + 34) -- see :AddItem end end - + -- exported local function GetRightBorderWidth(self) return 6 + (self.slider:IsShown() and 12 or 0) end - + -- exported local function GetLeftBorderWidth(self) return 6 end - + --[[ Constructor ]]-- - + local function Constructor() local count = AceGUI:GetNextWidgetNum(widgetType) - local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent) + local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent, "BackdropTemplate") local self = {} self.count = count self.type = widgetType self.frame = frame frame.obj = self - + self.OnAcquire = OnAcquire self.OnRelease = OnRelease @@ -278,38 +269,38 @@ do self.SetScroll = SetScroll self.MoveScroll = MoveScroll self.FixScroll = FixScroll - + self.SetMaxHeight = SetMaxHeight self.GetRightBorderWidth = GetRightBorderWidth self.GetLeftBorderWidth = GetLeftBorderWidth - + self.items = {} - + self.scrollStatus = { scrollvalue = 0, } - + self.maxHeight = defaultMaxHeight - + frame:SetBackdrop(backdrop) frame:SetBackdropColor(0, 0, 0) frame:SetFrameStrata("FULLSCREEN_DIALOG") frame:SetClampedToScreen(true) frame:SetWidth(defaultWidth) - frame:SetHeight(self.maxHeight) + frame:SetHeight(self.maxHeight) --frame:SetToplevel(true) - + -- NOTE: The whole scroll frame code is copied from the AceGUI-3.0 widget ScrollFrame local scrollFrame = CreateFrame("ScrollFrame", nil, frame) local itemFrame = CreateFrame("Frame", nil, scrollFrame) - + self.scrollFrame = scrollFrame self.itemFrame = itemFrame - + scrollFrame.obj = self itemFrame.obj = self - - local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame) + + local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame, "BackdropTemplate") slider:SetOrientation("VERTICAL") slider:SetHitRectInsets(0, 0, -10, 0) slider:SetBackdrop(sliderBackdrop) @@ -318,7 +309,7 @@ do slider:SetFrameStrata("FULLSCREEN_DIALOG") self.slider = slider slider.obj = self - + scrollFrame:SetScrollChild(itemFrame) scrollFrame:SetPoint("TOPLEFT", frame, "TOPLEFT", 6, -12) scrollFrame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -6, 12) @@ -327,46 +318,46 @@ do scrollFrame:SetScript("OnSizeChanged", OnSizeChanged) scrollFrame:SetToplevel(true) scrollFrame:SetFrameStrata("FULLSCREEN_DIALOG") - + itemFrame:SetPoint("TOPLEFT", scrollFrame, "TOPLEFT", 0, 0) itemFrame:SetPoint("TOPRIGHT", scrollFrame, "TOPRIGHT", -12, 0) itemFrame:SetHeight(400) itemFrame:SetToplevel(true) itemFrame:SetFrameStrata("FULLSCREEN_DIALOG") - + slider:SetPoint("TOPLEFT", scrollFrame, "TOPRIGHT", -16, 0) slider:SetPoint("BOTTOMLEFT", scrollFrame, "BOTTOMRIGHT", -16, 0) slider:SetScript("OnValueChanged", OnScrollValueChanged) slider:SetMinMaxValues(0, 1000) slider:SetValueStep(1) slider:SetValue(0) - + scrollFrame:Show() itemFrame:Show() slider:Hide() - + self:FixScroll() - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion) end do local widgetType = "Dropdown" - local widgetVersion = 30 - + local widgetVersion = 36 + --[[ Static data ]]-- - + --[[ UI event handler ]]-- - + local function Control_OnEnter(this) this.obj.button:LockHighlight() this.obj:Fire("OnEnter") end - + local function Control_OnLeave(this) this.obj.button:UnlockHighlight() this.obj:Fire("OnLeave") @@ -378,10 +369,9 @@ do self.pullout:Close() end end - + local function Dropdown_TogglePullout(this) local self = this.obj - PlaySound("igMainMenuOptionCheckBoxOn") -- missleading name, but the Blizzard code uses this sound if self.open then self.open = nil self.pullout:Close() @@ -393,17 +383,17 @@ do AceGUI:SetFocus(self) end end - + local function OnPulloutOpen(this) local self = this.userdata.obj local value = self.value - + if not self.multiselect then for i, item in this:IterateItems() do item:SetValue(item.userdata.value == value) end end - + self.open = true self:Fire("OnOpened") end @@ -413,7 +403,7 @@ do self.open = nil self:Fire("OnClosed") end - + local function ShowMultiText(self) local text for i, widget in self.pullout:IterateItems() do @@ -429,10 +419,10 @@ do end self:SetText(text) end - + local function OnItemValueChanged(this, event, checked) local self = this.userdata.obj - + if self.multiselect then self:Fire("OnValueChanged", this.userdata.value, checked) ShowMultiText(self) @@ -443,14 +433,14 @@ do else this:SetValue(true) end - if self.open then + if self.open then self.pullout:Close() end end end - + --[[ Exported methods ]]-- - + -- exported, AceGUI callback local function OnAcquire(self) local pullout = AceGUI:Create("Dropdown-Pullout") @@ -460,13 +450,14 @@ do pullout:SetCallback("OnOpen", OnPulloutOpen) self.pullout.frame:SetFrameLevel(self.frame:GetFrameLevel() + 1) fixlevels(self.pullout.frame, self.pullout.frame:GetChildren()) - + self:SetHeight(44) self:SetWidth(200) self:SetLabel() self:SetPulloutWidth(nil) + self.list = {} end - + -- exported, AceGUI callback local function OnRelease(self) if self.open then @@ -474,20 +465,20 @@ do end AceGUI:Release(self.pullout) self.pullout = nil - + self:SetText("") self:SetDisabled(false) self:SetMultiselect(false) - + self.value = nil self.list = nil self.open = nil self.hasClose = nil - + self.frame:ClearAllPoints() self.frame:Hide() end - + -- exported local function SetDisabled(self, disabled) self.disabled = disabled @@ -503,19 +494,19 @@ do self.text:SetTextColor(1,1,1) end end - + -- exported local function ClearFocus(self) if self.open then self.pullout:Close() end end - + -- exported local function SetText(self, text) self.text:SetText(text or "") end - + -- exported local function SetLabel(self, text) if text and text ~= "" then @@ -532,20 +523,18 @@ do self.alignoffset = 12 end end - + -- exported local function SetValue(self, value) - if self.list then - self:SetText(self.list[value] or "") - end + self:SetText(self.list[value] or "") self.value = value end - + -- exported local function GetValue(self) return self.value end - + -- exported local function SetItemValue(self, item, value) if not self.multiselect then return end @@ -558,7 +547,7 @@ do end ShowMultiText(self) end - + -- exported local function SetItemDisabled(self, item, disabled) for i, widget in self.pullout:IterateItems() do @@ -567,7 +556,7 @@ do end end end - + local function AddListItem(self, value, text, itemType) if not itemType then itemType = "Dropdown-Item-Toggle" end local exists = AceGUI:GetWidgetVersion(itemType) @@ -580,7 +569,7 @@ do item:SetCallback("OnValueChanged", OnItemValueChanged) self.pullout:AddItem(item) end - + local function AddCloseButton(self) if not self.hasClose then local close = AceGUI:Create("Dropdown-Item-Execute") @@ -589,21 +578,29 @@ do self.hasClose = true end end - + -- exported local sortlist = {} + local function sortTbl(x,y) + local num1, num2 = tonumber(x), tonumber(y) + if num1 and num2 then -- numeric comparison, either two numbers or numeric strings + return num1 < num2 + else -- compare everything else tostring'ed + return tostring(x) < tostring(y) + end + end local function SetList(self, list, order, itemType) - self.list = list + self.list = list or {} self.pullout:Clear() self.hasClose = nil if not list then return end - + if type(order) ~= "table" then for v in pairs(list) do sortlist[#sortlist + 1] = v end - tsort(sortlist) - + tsort(sortlist, sortTbl) + for i, key in ipairs(sortlist) do AddListItem(self, key, list[key], itemType) sortlist[i] = nil @@ -618,15 +615,13 @@ do AddCloseButton(self) end end - + -- exported local function AddItem(self, value, text, itemType) - if self.list then - self.list[value] = text - AddListItem(self, value, text, itemType) - end + self.list[value] = text + AddListItem(self, value, text, itemType) end - + -- exported local function SetMultiselect(self, multi) self.multiselect = multi @@ -635,23 +630,23 @@ do AddCloseButton(self) end end - + -- exported local function GetMultiselect(self) return self.multiselect end - + local function SetPulloutWidth(self, width) self.pulloutWidth = width end - + --[[ Constructor ]]-- - + local function Constructor() local count = AceGUI:GetNextWidgetNum(widgetType) local frame = CreateFrame("Frame", nil, UIParent) local dropdown = CreateFrame("Frame", "AceGUI30DropDown"..count, frame, "UIDropDownMenuTemplate") - + local self = {} self.type = widgetType self.frame = frame @@ -659,10 +654,10 @@ do self.count = count frame.obj = self dropdown.obj = self - + self.OnRelease = OnRelease self.OnAcquire = OnAcquire - + self.ClearFocus = ClearFocus self.SetText = SetText @@ -677,9 +672,9 @@ do self.SetItemValue = SetItemValue self.SetItemDisabled = SetItemDisabled self.SetPulloutWidth = SetPulloutWidth - + self.alignoffset = 26 - + frame:SetScript("OnHide",Dropdown_OnHide) dropdown:ClearAllPoints() @@ -690,10 +685,10 @@ do local left = _G[dropdown:GetName() .. "Left"] local middle = _G[dropdown:GetName() .. "Middle"] local right = _G[dropdown:GetName() .. "Right"] - + middle:ClearAllPoints() right:ClearAllPoints() - + middle:SetPoint("LEFT", left, "RIGHT", 0, 0) middle:SetPoint("RIGHT", right, "LEFT", 0, 0) right:SetPoint("TOPRIGHT", dropdown, "TOPRIGHT", 0, 17) @@ -704,7 +699,7 @@ do button:SetScript("OnEnter",Control_OnEnter) button:SetScript("OnLeave",Control_OnLeave) button:SetScript("OnClick",Dropdown_TogglePullout) - + local button_cover = CreateFrame("BUTTON",nil,self.frame) self.button_cover = button_cover button_cover.obj = self @@ -713,14 +708,14 @@ do button_cover:SetScript("OnEnter",Control_OnEnter) button_cover:SetScript("OnLeave",Control_OnLeave) button_cover:SetScript("OnClick",Dropdown_TogglePullout) - + local text = _G[dropdown:GetName() .. "Text"] self.text = text text.obj = self text:ClearAllPoints() text:SetPoint("RIGHT", right, "RIGHT" ,-43, 2) text:SetPoint("LEFT", left, "LEFT", 25, 2) - + local label = frame:CreateFontString(nil,"OVERLAY","GameFontNormalSmall") label:SetPoint("TOPLEFT",frame,"TOPLEFT",0,0) label:SetPoint("TOPRIGHT",frame,"TOPRIGHT",0,0) @@ -732,6 +727,6 @@ do AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion) -end +end diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua old mode 100644 new mode 100755 index 6d16f37..85a32a0 --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua @@ -1,7 +1,7 @@ --[[----------------------------------------------------------------------------- EditBox Widget -------------------------------------------------------------------------------]] -local Type, Version = "EditBox", 26 +local Type, Version = "EditBox", 28 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -14,10 +14,6 @@ local GetCursorInfo, ClearCursor, GetSpellInfo = GetCursorInfo, ClearCursor, Get local CreateFrame, UIParent = CreateFrame, UIParent local _G = _G --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: AceGUIEditBoxInsertLink, ChatFontNormal, OKAY - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] @@ -73,7 +69,7 @@ local function EditBox_OnEnterPressed(frame) local value = frame:GetText() local cancel = self:Fire("OnEnterPressed", value) if not cancel then - PlaySound("igMainMenuOptionCheckBoxOn") + PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON HideButton(self) end end @@ -81,23 +77,21 @@ end local function EditBox_OnReceiveDrag(frame) local self = frame.obj local type, id, info = GetCursorInfo() + local name if type == "item" then - self:SetText(info) - self:Fire("OnEnterPressed", info) - ClearCursor() + name = info elseif type == "spell" then - local name = GetSpellInfo(id, info) - self:SetText(name) - self:Fire("OnEnterPressed", name) - ClearCursor() + name = GetSpellInfo(id, info) elseif type == "macro" then - local name = GetMacroInfo(id) + name = GetMacroInfo(id) + end + if name then self:SetText(name) self:Fire("OnEnterPressed", name) ClearCursor() + HideButton(self) + AceGUI:ClearFocus() end - HideButton(self) - AceGUI:ClearFocus() end local function EditBox_OnTextChanged(frame) diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua old mode 100644 new mode 100755 index bf8b2c0..670cd4e --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Heading.lua @@ -51,14 +51,14 @@ local function Constructor() left:SetHeight(8) left:SetPoint("LEFT", 3, 0) left:SetPoint("RIGHT", label, "LEFT", -5, 0) - left:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") + left:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border left:SetTexCoord(0.81, 0.94, 0.5, 1) local right = frame:CreateTexture(nil, "BACKGROUND") right:SetHeight(8) right:SetPoint("RIGHT", -3, 0) right:SetPoint("LEFT", label, "RIGHT", 5, 0) - right:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border") + right:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border right:SetTexCoord(0.81, 0.94, 0.5, 1) local widget = { diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua old mode 100644 new mode 100755 index fdba650..092697e --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua @@ -56,7 +56,7 @@ local methods = { ["SetImage"] = function(self, path, ...) local image = self.image image:SetTexture(path) - + if image:GetTexture() then local n = select("#", ...) if n == 4 or n == 8 then @@ -118,7 +118,7 @@ local function Constructor() local highlight = frame:CreateTexture(nil, "HIGHLIGHT") highlight:SetAllPoints(image) - highlight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight") + highlight:SetTexture(136580) -- Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight highlight:SetTexCoord(0, 1, 0.23, 0.77) highlight:SetBlendMode("ADD") diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua old mode 100644 new mode 100755 index e1388a1..76a2cf9 --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua @@ -1,20 +1,13 @@ --[[----------------------------------------------------------------------------- InteractiveLabel Widget -------------------------------------------------------------------------------]] -local Type, Version = "InteractiveLabel", 20 +local Type, Version = "InteractiveLabel", 21 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end -- Lua APIs local select, pairs = select, pairs --- WoW APIs -local CreateFrame, UIParent = CreateFrame, UIParent - --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: GameFontHighlightSmall - --[[----------------------------------------------------------------------------- Scripts -------------------------------------------------------------------------------]] diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua old mode 100644 new mode 100755 index e77023a..96f7e5b --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua @@ -2,7 +2,7 @@ Keybinding Widget Set Keybindings in the Config UI. -------------------------------------------------------------------------------]] -local Type, Version = "Keybinding", 25 +local Type, Version = "Keybinding", 26 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -13,10 +13,6 @@ local pairs = pairs local IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown = IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: NOT_BOUND - --[[----------------------------------------------------------------------------- Scripts -------------------------------------------------------------------------------]] @@ -214,7 +210,7 @@ local function Constructor() label:SetJustifyH("CENTER") label:SetHeight(18) - local msgframe = CreateFrame("Frame", nil, UIParent) + local msgframe = CreateFrame("Frame", nil, UIParent, "BackdropTemplate") msgframe:SetHeight(30) msgframe:SetBackdrop(ControlBackdrop) msgframe:SetBackdropColor(0,0,0) diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua old mode 100644 new mode 100755 index 9a181c5..6bbcf3b --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua @@ -2,7 +2,7 @@ Label Widget Displays text and optionally an icon. -------------------------------------------------------------------------------]] -local Type, Version = "Label", 23 +local Type, Version = "Label", 28 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -12,10 +12,6 @@ local max, select, pairs = math.max, select, pairs -- WoW APIs local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: GameFontHighlightSmall - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] @@ -39,25 +35,30 @@ local function UpdateImageAnchor(self) label:SetPoint("TOP", image, "BOTTOM") label:SetPoint("LEFT") label:SetWidth(width) - height = image:GetHeight() + label:GetHeight() + height = image:GetHeight() + label:GetStringHeight() else -- image on the left image:SetPoint("TOPLEFT") - if image:GetHeight() > label:GetHeight() then + if image:GetHeight() > label:GetStringHeight() then label:SetPoint("LEFT", image, "RIGHT", 4, 0) else label:SetPoint("TOPLEFT", image, "TOPRIGHT", 4, 0) end label:SetWidth(width - imagewidth - 4) - height = max(image:GetHeight(), label:GetHeight()) + height = max(image:GetHeight(), label:GetStringHeight()) end else -- no image shown label:SetPoint("TOPLEFT") label:SetWidth(width) - height = label:GetHeight() + height = label:GetStringHeight() + end + + -- avoid zero-height labels, since they can used as spacers + if not height or height == 0 then + height = 1 end - + self.resizing = true frame:SetHeight(height) frame.height = height @@ -78,6 +79,8 @@ local methods = { self:SetImageSize(16, 16) self:SetColor() self:SetFontObject() + self:SetJustifyH("LEFT") + self:SetJustifyV("TOP") -- reset the flag self.resizing = nil @@ -106,7 +109,7 @@ local methods = { ["SetImage"] = function(self, path, ...) local image = self.image image:SetTexture(path) - + if image:GetTexture() then self.imageshown = true local n = select("#", ...) @@ -122,11 +125,16 @@ local methods = { end, ["SetFont"] = function(self, font, height, flags) - self.label:SetFont(font, height, flags) + if not self.fontObject then + self.fontObject = CreateFont("AceGUI30LabelFont" .. AceGUI:GetNextWidgetNum(Type)) + end + self.fontObject:SetFont(font, height, flags) + self:SetFontObject(self.fontObject) end, ["SetFontObject"] = function(self, font) - self:SetFont((font or GameFontHighlightSmall):GetFont()) + self.label:SetFontObject(font or GameFontHighlightSmall) + UpdateImageAnchor(self) end, ["SetImageSize"] = function(self, width, height) @@ -134,6 +142,14 @@ local methods = { self.image:SetHeight(height) UpdateImageAnchor(self) end, + + ["SetJustifyH"] = function(self, justifyH) + self.label:SetJustifyH(justifyH) + end, + + ["SetJustifyV"] = function(self, justifyV) + self.label:SetJustifyV(justifyV) + end, } --[[----------------------------------------------------------------------------- @@ -144,9 +160,6 @@ local function Constructor() frame:Hide() local label = frame:CreateFontString(nil, "BACKGROUND", "GameFontHighlightSmall") - label:SetJustifyH("LEFT") - label:SetJustifyV("TOP") - local image = frame:CreateTexture(nil, "BACKGROUND") -- create widget diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua old mode 100644 new mode 100755 index c9b0d86..c33a986 --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua @@ -1,4 +1,4 @@ -local Type, Version = "MultiLineEditBox", 28 +local Type, Version = "MultiLineEditBox", 32 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -10,10 +10,6 @@ local GetCursorInfo, GetSpellInfo, ClearCursor = GetCursorInfo, GetSpellInfo, Cl local CreateFrame, UIParent = CreateFrame, UIParent local _G = _G --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: ACCEPT, ChatFontNormal - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] @@ -145,6 +141,14 @@ local function OnVerticalScroll(self, offset) editBox:SetHitRectInsets(0, 0, offset, editBox:GetHeight() - offset - self:GetHeight()) end +local function OnScrollRangeChanged(self, xrange, yrange) + if yrange == 0 then + self.obj.editBox:SetHitRectInsets(0, 0, 0, 0) + else + OnVerticalScroll(self, self:GetVerticalScroll()) + end +end + local function OnShowFocus(frame) frame.obj.editBox:SetFocus() frame:SetScript("OnShow", nil) @@ -233,7 +237,7 @@ local methods = { end Layout(self) end, - + ["ClearFocus"] = function(self) self.editBox:ClearFocus() self.frame:SetScript("OnShow", nil) @@ -253,12 +257,10 @@ local methods = { ["GetCursorPosition"] = function(self) return self.editBox:GetCursorPosition() end, - + ["SetCursorPosition"] = function(self, ...) return self.editBox:SetCursorPosition(...) end, - - } --[[----------------------------------------------------------------------------- @@ -273,7 +275,7 @@ local backdrop = { local function Constructor() local frame = CreateFrame("Frame", nil, UIParent) frame:Hide() - + local widgetNum = AceGUI:GetNextWidgetNum(Type) local label = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall") @@ -290,14 +292,14 @@ local function Constructor() button:SetText(ACCEPT) button:SetScript("OnClick", OnClick) button:Disable() - + local text = button:GetFontString() text:ClearAllPoints() text:SetPoint("TOPLEFT", button, "TOPLEFT", 5, -5) text:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -5, 1) text:SetJustifyV("MIDDLE") - local scrollBG = CreateFrame("Frame", nil, frame) + local scrollBG = CreateFrame("Frame", nil, frame, "BackdropTemplate") scrollBG:SetBackdrop(backdrop) scrollBG:SetBackdropColor(0, 0, 0) scrollBG:SetBackdropBorderColor(0.4, 0.4, 0.4) @@ -321,6 +323,7 @@ local function Constructor() scrollFrame:SetScript("OnReceiveDrag", OnReceiveDrag) scrollFrame:SetScript("OnSizeChanged", OnSizeChanged) scrollFrame:HookScript("OnVerticalScroll", OnVerticalScroll) + scrollFrame:HookScript("OnScrollRangeChanged", OnScrollRangeChanged) local editBox = CreateFrame("EditBox", ("%s%dEdit"):format(Type, widgetNum), scrollFrame) editBox:SetAllPoints() @@ -339,7 +342,7 @@ local function Constructor() editBox:SetScript("OnTextChanged", OnTextChanged) editBox:SetScript("OnTextSet", OnTextSet) editBox:SetScript("OnEditFocusGained", OnEditFocusGained) - + scrollFrame:SetScrollChild(editBox) diff --git a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua old mode 100644 new mode 100755 index 4a17767..8989608 --- a/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua +++ b/TitanClassic/libs/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua @@ -2,7 +2,7 @@ Slider Widget Graphical Slider, like, for Range values. -------------------------------------------------------------------------------]] -local Type, Version = "Slider", 21 +local Type, Version = "Slider", 23 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -14,10 +14,6 @@ local tonumber, pairs = tonumber, pairs local PlaySound = PlaySound local CreateFrame, UIParent = CreateFrame, UIParent --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: GameFontHighlightSmall - --[[----------------------------------------------------------------------------- Support functions -------------------------------------------------------------------------------]] @@ -31,13 +27,13 @@ local function UpdateText(self) end local function UpdateLabels(self) - local min, max = (self.min or 0), (self.max or 100) + local min_value, max_value = (self.min or 0), (self.max or 100) if self.ispercent then - self.lowtext:SetFormattedText("%s%%", (min * 100)) - self.hightext:SetFormattedText("%s%%", (max * 100)) + self.lowtext:SetFormattedText("%s%%", (min_value * 100)) + self.hightext:SetFormattedText("%s%%", (max_value * 100)) else - self.lowtext:SetText(min) - self.hightext:SetText(max) + self.lowtext:SetText(min_value) + self.hightext:SetText(max_value) end end @@ -57,10 +53,9 @@ local function Frame_OnMouseDown(frame) AceGUI:ClearFocus() end -local function Slider_OnValueChanged(frame) +local function Slider_OnValueChanged(frame, newvalue) local self = frame.obj if not frame.setup then - local newvalue = frame:GetValue() if self.step and self.step > 0 then local min_value = self.min or 0 newvalue = floor((newvalue - min_value) / self.step + 0.5) * self.step + min_value @@ -106,9 +101,9 @@ local function EditBox_OnEnterPressed(frame) else value = tonumber(value) end - + if value then - PlaySound("igMainMenuOptionCheckBoxOn") + PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON self.slider:SetValue(value) self:Fire("OnMouseUp", value) end @@ -176,13 +171,13 @@ local methods = { self.label:SetText(text) end, - ["SetSliderValues"] = function(self, min, max, step) + ["SetSliderValues"] = function(self, min_value, max_value, step) local frame = self.slider frame.setup = true - self.min = min - self.max = max + self.min = min_value + self.max = max_value self.step = step - frame:SetMinMaxValues(min or 0,max or 100) + frame:SetMinMaxValues(min_value or 0,max_value or 100) UpdateLabels(self) frame:SetValueStep(step or 1) if self.value then @@ -226,7 +221,7 @@ local function Constructor() label:SetJustifyH("CENTER") label:SetHeight(15) - local slider = CreateFrame("Slider", nil, frame) + local slider = CreateFrame("Slider", nil, frame, "BackdropTemplate") slider:SetOrientation("HORIZONTAL") slider:SetHeight(15) slider:SetHitRectInsets(0, 0, -10, 0) @@ -248,7 +243,7 @@ local function Constructor() local hightext = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") hightext:SetPoint("TOPRIGHT", slider, "BOTTOMRIGHT", -2, 3) - local editbox = CreateFrame("EditBox", nil, frame) + local editbox = CreateFrame("EditBox", nil, frame, "BackdropTemplate") editbox:SetAutoFocus(false) editbox:SetFontObject(GameFontHighlightSmall) editbox:SetPoint("TOP", slider, "BOTTOM") diff --git a/TitanClassic/libs/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua b/TitanClassic/libs/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua old mode 100644 new mode 100755 index 5a495f6..01287bd --- a/TitanClassic/libs/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua +++ b/TitanClassic/libs/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua @@ -1,61 +1,26 @@ ---[[ $Id: CallbackHandler-1.0.lua 3 2008-09-29 16:54:20Z nevcairiel $ ]] -local MAJOR, MINOR = "CallbackHandler-1.0", 3 +--[[ $Id: CallbackHandler-1.0.lua 1298 2022-12-12 15:10:10Z nevcairiel $ ]] +local MAJOR, MINOR = "CallbackHandler-1.0", 8 local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR) if not CallbackHandler then return end -- No upgrade needed local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end} -local type = type -local pcall = pcall -local pairs = pairs -local assert = assert -local concat = table.concat -local loadstring = loadstring -local next = next -local select = select -local type = type -local xpcall = xpcall - -local function errorhandler(err) - return geterrorhandler()(err) -end - -local function CreateDispatcher(argCount) - local code = [[ - local next, xpcall, eh = ... - - local method, ARGS - local function call() method(ARGS) end - - local function dispatch(handlers, ...) - local index - index, method = next(handlers) - if not method then return end - local OLD_ARGS = ARGS - ARGS = ... - repeat - xpcall(call, eh) - index, method = next(handlers, index) - until not method - ARGS = OLD_ARGS - end +-- Lua APIs +local securecallfunction, error = securecallfunction, error +local setmetatable, rawget = setmetatable, rawget +local next, select, pairs, type, tostring = next, select, pairs, type, tostring - return dispatch - ]] - local ARGS, OLD_ARGS = {}, {} - for i = 1, argCount do ARGS[i], OLD_ARGS[i] = "arg"..i, "old_arg"..i end - code = code:gsub("OLD_ARGS", concat(OLD_ARGS, ", ")):gsub("ARGS", concat(ARGS, ", ")) - return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(next, xpcall, errorhandler) +local function Dispatch(handlers, ...) + local index, method = next(handlers) + if not method then return end + repeat + securecallfunction(method, ...) + index, method = next(handlers, index) + until not method end -local Dispatchers = setmetatable({}, {__index=function(self, argCount) - local dispatcher = CreateDispatcher(argCount) - rawset(self, argCount, dispatcher) - return dispatcher -end}) - -------------------------------------------------------------------------- -- CallbackHandler:New -- @@ -64,9 +29,7 @@ end}) -- UnregisterName - name of the callback unregistration API, default "UnregisterCallback" -- UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API. -function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName, OnUsed, OnUnused) - -- TODO: Remove this after beta has gone out - assert(not OnUsed and not OnUnused, "ACE-80: OnUsed/OnUnused are deprecated. Callbacks are now done to registry.OnUsed and registry.OnUnused") +function CallbackHandler.New(_self, target, RegisterName, UnregisterName, UnregisterAllName) RegisterName = RegisterName or "RegisterCallback" UnregisterName = UnregisterName or "UnregisterCallback" @@ -88,19 +51,19 @@ function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAll local oldrecurse = registry.recurse registry.recurse = oldrecurse + 1 - Dispatchers[select('#', ...) + 1](events[eventname], eventname, ...) + Dispatch(events[eventname], eventname, ...) registry.recurse = oldrecurse if registry.insertQueue and oldrecurse==0 then -- Something in one of our callbacks wanted to register more callbacks; they got queued - for eventname,callbacks in pairs(registry.insertQueue) do - local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten. - for self,func in pairs(callbacks) do - events[eventname][self] = func + for event,callbacks in pairs(registry.insertQueue) do + local first = not rawget(events, event) or not next(events[event]) -- test for empty before. not test for one member after. that one member may have been overwritten. + for object,func in pairs(callbacks) do + events[event][object] = func -- fire OnUsed callback? if first and registry.OnUsed then - registry.OnUsed(registry, target, eventname) + registry.OnUsed(registry, target, event) first = nil end end @@ -146,9 +109,9 @@ function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAll regfunc = function(...) self[method](self,...) end end else - -- function ref with self=object or self="addonId" - if type(self)~="table" and type(self)~="string" then - error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string expected.", 2) + -- function ref with self=object or self="addonId" or self=thread + if type(self)~="table" and type(self)~="string" and type(self)~="thread" then + error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string or thread expected.", 2) end if select("#",...)>=1 then -- this is not the same as testing for arg==nil! diff --git a/TitanClassic/libs/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml b/TitanClassic/libs/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml old mode 100644 new mode 100755 index 1aad3a2..a5b22a7 --- a/TitanClassic/libs/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml +++ b/TitanClassic/libs/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml @@ -1,4 +1,4 @@