diff --git a/TitanClassic/TitanClassic.toc b/TitanClassic/TitanClassic.toc index 4293b5e..348f2de 100644 --- a/TitanClassic/TitanClassic.toc +++ b/TitanClassic/TitanClassic.toc @@ -1,7 +1,7 @@ -## Interface: 11403 -## Title: Titan Panel Classic |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic |cff00aa001.3.3.11404|r ## Author: Titan Panel Development Team -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## 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 dcb9c35..cdac1cb 100755 --- a/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu.toc +++ b/TitanClassic/libs/!LibUIDropDownMenu/!LibUIDropDownMenu.toc @@ -1,7 +1,7 @@ -## Interface: 80100 +## Interface: 100105 ## Title: Lib: UIDropDownMenu ## Notes: A Replacement for standard UIDropDownMenu -## Version: v2.00.8010028833 +## Version: v4.21.10010550587 ## X-Category: Libraries ## X-Website: https://www.wowace.com/projects/libuidropdownmenu ## OptionalDeps: LibStub @@ -9,4 +9,4 @@ #@no-lib-strip@ LibStub\LibStub.lua #@end-no-lib-strip@ -LibUIDropDownMenu\LibUIDropDownMenu.xml +LibUIDropDownMenu\LibUIDropDownMenu.lua diff --git a/TitanClassic/libs/!LibUIDropDownMenu/Docs/Readme.txt b/TitanClassic/libs/!LibUIDropDownMenu/Docs/Readme.txt index 7e23b95..53674f6 100755 --- a/TitanClassic/libs/!LibUIDropDownMenu/Docs/Readme.txt +++ b/TitanClassic/libs/!LibUIDropDownMenu/Docs/Readme.txt @@ -1,3 +1,5 @@ +$Id: Readme.txt 64 2020-11-18 13:13:15Z arithmandar $ + == About == Standard UIDropDownMenu global functions using protected frames and causing taints when used by third-party addons. But it is possible to avoid taints by using same @@ -11,11 +13,61 @@ and functions renamed to: * functions: "L_" added at the start == How to use it (for addon developer) == -* Embed LibUIDropDownMenu to your addon, you can specify to the folder to - LibUIDropDownMenu\LibUIDropDownMenu if you feel this keep the folder cleaner. -* Add LibUIDropDownMenu.xml to your toc or your embeds.xml / libs.xml. -* If your addon doesn't embed LibStub, you will need it. -* Like ordinal code for UIDropDownMenu with "L_" instead. +=== Initial Preparation === +Assuming your addon is using all the UIDropDownMenu functions from the WoW's +built in function calls, then it is suggested that you have below preparation +in your lua codes: + local LibDD = LibStub:GetLibrary("LibUIDropDownMenu-4.0") + +=== Function Call Replacement === +Depends on which UIDropDownMenu's function calls you have used in your addon, +you will need below similar replacement: + + UIDropDownMenu_Initialize => LibDD:UIDropDownMenu_Initialize + UIDropDownMenu_CreateInfo => LibDD:UIDropDownMenu_CreateInfo + UIDropDownMenu_AddButton => LibDD:UIDropDownMenu_AddButton + + UIDropDownMenu_AddSeparator => LibDD:UIDropDownMenu_AddSeparator + UIDropDownMenu_AddSpace=> LibDD:UIDropDownMenu_AddSpace + + UIDropDownMenu_SetSelectedValue => LibDD:UIDropDownMenu_SetSelectedValue + UIDropDownMenu_SetSelectedName=> LibDD:UIDropDownMenu_SetSelectedName + + UIDropDownMenu_SetSelectedID => LibDD:UIDropDownMenu_SetSelectedID + UIDropDownMenu_SetWidth => LibDD:UIDropDownMenu_SetWidth + + CloseDropDownMenus => LibDD:CloseDropDownMenus + +=== Creating new UIDropDownMenu === +Traditionally you will either create a new frame in your lua codes or with +XML by setting the frame to inherit from "UIDropDownMenuTemplate". + +By using this library, you will need to create your menu from like below: + local frame = LibDD:Create_UIDropDownMenu("MyDropDownMenu", parent_frame) + +== Button Name == +As you (the developers) might be aware that at some point you might need to +manipulate the dropdowns by accessing the button names. For example, you have +multiple levels of menus and you would like to hide or show some level's menu +button. In that case, you need to make sure you also revise the button name +used in your original codes when you are migrating to use LibUIDropDownMenu. + + "L_DropDownList"..i + +Example: + + for i = 1, L_UIDROPDOWNMENU_MAXLEVELS, 1 do + dropDownList = _G["L_DropDownList"..i]; + if ( i >= L_UIDROPDOWNMENU_MENU_LEVEL or frame ~= L_UIDROPDOWNMENU_OPEN_MENU ) then + dropDownList.numButtons = 0; + dropDownList.maxWidth = 0; + for j=1, L_UIDROPDOWNMENU_MAXBUTTONS, 1 do + button = _G["L_DropDownList"..i.."Button"..j]; + button:Hide(); + end + dropDownList:Hide(); + end + end == Constants == * L_UIDROPDOWNMENU_MINBUTTONS @@ -32,60 +84,60 @@ and functions renamed to: * L_OPEN_DROPDOWNMENUS == Functions == -* L_EasyMenu -* L_EasyMenu_Initialize - -* L_UIDropDownMenuDelegate_OnAttributeChanged -* L_UIDropDownMenu_InitializeHelper -* L_UIDropDownMenu_Initialize -* L_UIDropDownMenu_SetInitializeFunction -* L_UIDropDownMenu_RefreshDropDownSize -* L_UIDropDownMenu_OnUpdate -* L_UIDropDownMenu_StartCounting -* L_UIDropDownMenu_StopCounting -* L_UIDropDownMenu_CheckAddCustomFrame -* L_UIDropDownMenu_CreateInfo -* L_UIDropDownMenu_CreateFrames -* L_UIDropDownMenu_AddSeparator -* L_UIDropDownMenu_AddButton -* L_UIDropDownMenu_AddSeparator -* L_UIDropDownMenu_GetMaxButtonWidth -* L_UIDropDownMenu_GetButtonWidth -* L_UIDropDownMenu_Refresh -* L_UIDropDownMenu_RefreshAll -* L_UIDropDownMenu_RegisterCustomFrame -* L_UIDropDownMenu_SetIconImage -* L_UIDropDownMenu_SetSelectedName -* L_UIDropDownMenu_SetSelectedValue -* L_UIDropDownMenu_SetSelectedID -* L_UIDropDownMenu_GetSelectedName -* L_UIDropDownMenu_GetSelectedID -* L_UIDropDownMenu_GetSelectedValue -* L_UIDropDownMenuButton_OnClick -* L_HideDropDownMenu -* L_ToggleDropDownMenu -* L_CloseDropDownMenus -* L_UIDropDownMenu_OnHide -* L_UIDropDownMenu_SetWidth -* L_UIDropDownMenu_SetButtonWidth -* L_UIDropDownMenu_SetText -* L_UIDropDownMenu_GetText -* L_UIDropDownMenu_ClearAll -* L_UIDropDownMenu_JustifyText -* L_UIDropDownMenu_SetAnchor -* L_UIDropDownMenu_GetCurrentDropDown -* L_UIDropDownMenuButton_GetChecked -* L_UIDropDownMenuButton_GetName -* L_UIDropDownMenuButton_OpenColorPicker -* L_UIDropDownMenu_DisableButton -* L_UIDropDownMenu_EnableButton -* L_UIDropDownMenu_SetButtonText -* L_UIDropDownMenu_SetButtonNotClickable -* L_UIDropDownMenu_SetButtonClickable -* L_UIDropDownMenu_DisableDropDown -* L_UIDropDownMenu_EnableDropDown -* L_UIDropDownMenu_IsEnabled -* L_UIDropDownMenu_GetValue +* lib:EasyMenu +* lib:EasyMenu_Initialize + +* lib:UIDropDownMenuDelegate_OnAttributeChanged +* lib:UIDropDownMenu_InitializeHelper +* lib:UIDropDownMenu_Initialize +* lib:UIDropDownMenu_SetInitializeFunction +* lib:UIDropDownMenu_RefreshDropDownSize +* lib:UIDropDownMenu_OnUpdate +* lib:UIDropDownMenu_StartCounting +* lib:UIDropDownMenu_StopCounting +* lib:UIDropDownMenu_CheckAddCustomFrame +* lib:UIDropDownMenu_CreateInfo +* lib:UIDropDownMenu_CreateFrames +* lib:UIDropDownMenu_AddSeparator +* lib:UIDropDownMenu_AddButton +* lib:UIDropDownMenu_AddSeparator +* lib:UIDropDownMenu_GetMaxButtonWidth +* lib:UIDropDownMenu_GetButtonWidth +* lib:UIDropDownMenu_Refresh +* lib:UIDropDownMenu_RefreshAll +* lib:UIDropDownMenu_RegisterCustomFrame +* lib:UIDropDownMenu_SetIconImage +* lib:UIDropDownMenu_SetSelectedName +* lib:UIDropDownMenu_SetSelectedValue +* lib:UIDropDownMenu_SetSelectedID +* lib:UIDropDownMenu_GetSelectedName +* lib:UIDropDownMenu_GetSelectedID +* lib:UIDropDownMenu_GetSelectedValue +* lib:UIDropDownMenuButton_OnClick +* lib:HideDropDownMenu +* lib:ToggleDropDownMenu +* lib:CloseDropDownMenus +* lib:UIDropDownMenu_OnHide +* lib:UIDropDownMenu_SetWidth +* lib:UIDropDownMenu_SetButtonWidth +* lib:UIDropDownMenu_SetText +* lib:UIDropDownMenu_GetText +* lib:UIDropDownMenu_ClearAll +* lib:UIDropDownMenu_JustifyText +* lib:UIDropDownMenu_SetAnchor +* lib:UIDropDownMenu_GetCurrentDropDown +* lib:UIDropDownMenuButton_GetChecked +* lib:UIDropDownMenuButton_GetName +* lib:UIDropDownMenuButton_OpenColorPicker +* lib:UIDropDownMenu_DisableButton +* lib:UIDropDownMenu_EnableButton +* lib:UIDropDownMenu_SetButtonText +* lib:UIDropDownMenu_SetButtonNotClickable +* lib:UIDropDownMenu_SetButtonClickable +* lib:UIDropDownMenu_DisableDropDown +* lib:UIDropDownMenu_EnableDropDown +* lib:UIDropDownMenu_IsEnabled +* lib:UIDropDownMenu_GetValue == List of button attributes == * info.text = [STRING] -- The text of the button diff --git a/TitanClassic/libs/!LibUIDropDownMenu/Docs/Revision.txt b/TitanClassic/libs/!LibUIDropDownMenu/Docs/Revision.txt index 5b8596c..65875da 100755 --- a/TitanClassic/libs/!LibUIDropDownMenu/Docs/Revision.txt +++ b/TitanClassic/libs/!LibUIDropDownMenu/Docs/Revision.txt @@ -1,7 +1,162 @@ -$Id: Revision.txt 41 2018-12-26 17:41:59Z arith $ +$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 + +v4.04.9000538556 (2021/06/14) +----------------------------- +- Allowing dropdown frame to be wihout a name (nil) given (for an anonymous frame) +- Added timeout for classic (both classic era and TBC) so that dropdown menu will auto-hide when mouse is away (thanks to DahkCeles) + +v4.03.9000538556 (2021/05/19) +----------------------------- +- Added codes for fixing Tainting UIMenus and CloseMenus() (thanks to DahkCeles) + +v4.02.9000538556 (2021/05/19) +----------------------------- +- Supported WoW Classic 2.5.1 (38707) + +v4.01.9000236639 (2020/12/14) +----------------------------- +- Fixed issues that classic server doesn't have UIDropDownMenu_HandleGlobalMouseEvent() + +v4.00.9000236639 (2020/11/22) +----------------------------- +- Toc update to support WoW 9.0.2 +- LibUIDropDownMenu + - Set major version to 4.0 + - Migrate all global functions to be under library tables + - Insert "L_DropDownList1" and "L_DropDownList2" to global UIMenus + - UIDropDownMenu_HandleGlobalMouseEvent (thanks to SLOKnightFall) +- LibEasyMenu + - Move function calls to under LibUIDropDownMenu and under library tables +- LibUIDropDownMenuTemplates + - Move codes to under LibUIDropDownMenu so that thet can de under one single library + +v3.02.9000136272.01 (2020/10/20) +----------------------------- +- Fixed version detection while setting ColorSwatch's backdrop template. It should now be correctly detecting the retail (as well as ShadowLands) version + +v3.02.9000136272 (2020/10/18) +----------------------------- +- Update to sync with 9.0.1 build 36272 +- ToC update to support WoW 9.0.1 + +v3.01.9000135522 (2020/09/07) +----------------------------- +- Updated Backdrop's handling + +v3.00.9000135522 (2020/08/19) +----------------------------- +- Shadowlands support and backward compatibility for both WoW classic and BFA + +v2.01.8020031429 (2019/08/12) +----------------------------- +- Update to sync with 8.2.0 build 31429 +- ToC update + v2.00.8010028833 (2018/12/27) ----------------------------- - Migrate template to Lua function call diff --git a/TitanClassic/libs/!LibUIDropDownMenu/LibStub/LibStub.toc b/TitanClassic/libs/!LibUIDropDownMenu/LibStub/LibStub.toc index acd0f7e..bf625c3 100755 --- a/TitanClassic/libs/!LibUIDropDownMenu/LibStub/LibStub.toc +++ b/TitanClassic/libs/!LibUIDropDownMenu/LibStub/LibStub.toc @@ -1,4 +1,4 @@ -## Interface: 80000 +## Interface: 90005 ## Title: Lib: LibStub ## Notes: Universal Library Stub ## Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel diff --git a/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenu.lua b/TitanClassic/libs/!LibUIDropDownMenu/LibUIDropDownMenu/LibUIDropDownMenu.lua index d6ba8d5..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) @@ -130,10 +309,23 @@ local function create_MenuButton(name, parent) 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 @@ -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,56 +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 BACKDROP_TOOLTIP_16_16_5555 = { - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", - tile = true, - tileEdge = true, - tileSize = 16, - edgeSize = 16, - insets = { left = 5, right = 5, top = 5, bottom = 5 }, -}; - -local function creatre_DropDownList(name, parent) + 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, + tileSize = 16, + edgeSize = 16, + insets = { left = 5, right = 5, top = 5, bottom = 5 }, + } + 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 + fbd.backdropInfo = BACKDROP_DIALOG_DARK + f.Backdrop = 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) + local fmb = _G[name.."MenuBackdrop"] or CreateFrame("Frame", name.."MenuBackdrop", f, TooltipBackdropTemplateMixin and "TooltipBackdropTemplate" or nil) fmb:SetAllPoints() - fmb:SetBackdrop(BACKDROP_TOOLTIP_16_16_5555) + 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) @@ -413,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) @@ -438,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() @@ -459,26 +561,18 @@ 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 @@ -528,6 +622,7 @@ local function create_DropDownMenu(name, parent) 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) @@ -575,9 +670,9 @@ 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) @@ -610,14 +705,23 @@ 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 @@ -694,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); @@ -739,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 @@ -755,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 @@ -787,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) @@ -889,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; @@ -925,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); @@ -975,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; @@ -989,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; @@ -999,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; @@ -1010,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; @@ -1061,7 +1219,7 @@ 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 @@ -1082,6 +1240,11 @@ 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); @@ -1094,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"); @@ -1131,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); @@ -1156,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) @@ -1214,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 @@ -1377,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]; @@ -1403,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 @@ -1414,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 @@ -1529,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 - dropDownFrame.menuList = menuList; + if (WoWClassicEra or WoWClassicTBC or WoWWOTLKC) then + dropDownFrame.menuList = menuList; + end + 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(); @@ -1558,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 @@ -1622,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 @@ -1657,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 @@ -1685,19 +1912,39 @@ do 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 @@ -1741,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 @@ -1791,11 +2038,19 @@ function lib:UIDropDownMenuButton_OpenColorPicker(self, 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) @@ -1815,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) @@ -1917,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 @@ -1932,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 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 @@ -<!-- $Id: LibUIDropDownMenuTemplates.xml 64 2020-11-18 13:13:15Z arithmandar $ --> -<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ -..\FrameXML\UI.xsd"> - <Include file="LibUIDropDownMenuTemplates.lua"/> -<!-- - <Frame name="L_UIDropDownCustomMenuEntryTemplate" enableMouse="true" hidden="true" mixin="L_UIDropDownCustomMenuEntryMixin" virtual="true/"> - - <Button name="ColorSwatchTemplate" virtual="true"> - <Size x="16" y="16"/> - <Layers> - <Layer level="BACKGROUND" textureSubLevel="-3"> - <Texture name="$parentSwatchBg" parentKey="SwatchBg" texelSnappingBias="0.0" snapToPixelGrid="false"> - <Size x="14" y="14"/> - <Anchors> - <Anchor point="CENTER"/> - </Anchors> - <Color color="HIGHLIGHT_FONT_COLOR"/> - </Texture> - </Layer> - <Layer level="BACKGROUND" textureSubLevel="-2"> - <Texture parentKey="InnerBorder" texelSnappingBias="0.0" snapToPixelGrid="false"> - <Size x="12" y="12"/> - <Anchors> - <Anchor point="CENTER"/> - </Anchors> - <Color color="BLACK_FONT_COLOR"/> - </Texture> - </Layer> - <Layer level="BACKGROUND" textureSubLevel="-1"> - <Texture parentKey="Color" texelSnappingBias="0.0" snapToPixelGrid="false"> - <Size x="10" y="10"/> - <Anchors> - <Anchor point="CENTER"/> - </Anchors> - <Color color="HIGHLIGHT_FONT_COLOR"/> - </Texture> - </Layer> - </Layers> - <Scripts> - <OnShow inherit="prepend"> - PixelUtil.SetSize(self.SwatchBg, 14, 14); - PixelUtil.SetSize(self.InnerBorder, 12, 12); - PixelUtil.SetSize(self.Color, 10, 10); - </OnShow> - </Scripts> - </Button> - <Button name="L_UIDropDownMenuButtonTemplate" virtual="true"> - <Size x="100" y="16"/> - <Layers> - <Layer level="BACKGROUND"> - <Texture name="$parentHighlight" parentKey="Highlight" file="Interface\QuestFrame\UI-QuestTitleHighlight" alphaMode="ADD" setAllPoints="true" hidden="true"/> - </Layer> - <Layer level="ARTWORK"> - <Texture name="$parentCheck" file="Interface\Common\UI-DropDownRadioChecks"> - <Size x="16" y="16"/> - <Anchors> - <Anchor point="LEFT"> - <Offset x="0" y="0"/> - </Anchor> - </Anchors> - <TexCoords left="0" right="0.5" top="0.5" bottom="1.0"/> - </Texture> - <Texture name="$parentUnCheck" file="Interface\Common\UI-DropDownRadioChecks"> - <Size x="16" y="16"/> - <Anchors> - <Anchor point="LEFT"> - <Offset x="0" y="0"/> - </Anchor> - </Anchors> - <TexCoords left="0.5" right="1.0" top="0.5" bottom="1.0"/> - </Texture> - <Texture parentKey="Icon" name="$parentIcon" hidden="true"> - <Size> - <AbsDimension x="16" y="16"/> - </Size> - <Anchors> - <Anchor point="RIGHT"> - <Offset x="0" y="0"/> - </Anchor> - </Anchors> - </Texture> - </Layer> - </Layers> - <Frames> - <Button name="$parentColorSwatch" hidden="true"> - <Size> - <AbsDimension x="16" y="16"/> - </Size> - <Anchors> - <Anchor point="RIGHT"> - <Offset> - <AbsDimension x="-6" y="0"/> - </Offset> - </Anchor> - </Anchors> - <Layers> - <Layer level="BACKGROUND"> - <Texture name="$parentSwatchBg"> - <Size> - <AbsDimension x="14" y="14"/> - </Size> - <Anchors> - <Anchor point="CENTER"> - <Offset> - <AbsDimension x="0" y="0"/> - </Offset> - </Anchor> - </Anchors> - <Color r="1.0" g="1.0" b="1.0"/> - </Texture> - </Layer> - </Layers> - <Scripts> - <OnClick> - CloseMenus(); - L_UIDropDownMenuButton_OpenColorPicker(self:GetParent()); - </OnClick> - <OnEnter> - L_CloseDropDownMenus(self:GetParent():GetParent():GetID() + 1); - _G[self:GetName().."SwatchBg"]:SetVertexColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b); - L_UIDropDownMenu_StopCounting(self:GetParent():GetParent()); - </OnEnter> - <OnLeave> - _G[self:GetName().."SwatchBg"]:SetVertexColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b); - L_UIDropDownMenu_StartCounting(self:GetParent():GetParent()); - </OnLeave> - </Scripts> - <NormalTexture name="$parentNormalTexture" file="Interface\ChatFrame\ChatFrameColorSwatch"/> - </Button> - <Button name="$parentExpandArrow" hidden="true" motionScriptsWhileDisabled="true"> - <Size> - <AbsDimension x="16" y="16"/> - </Size> - <Anchors> - <Anchor point="RIGHT"> - <Offset> - <AbsDimension x="0" y="0"/> - </Offset> - </Anchor> - </Anchors> - <Scripts> - <OnClick> - L_ToggleDropDownMenu(self:GetParent():GetParent():GetID() + 1, self:GetParent().value, nil, nil, nil, nil, self:GetParent().menuList, self); - </OnClick> - <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 - - L_UIDropDownMenu_StopCounting(self:GetParent():GetParent()); - </OnEnter> - <OnLeave> - L_UIDropDownMenu_StartCounting(self:GetParent():GetParent()); - </OnLeave> - </Scripts> - <NormalTexture file="Interface\ChatFrame\ChatFrameExpandArrow"/> - </Button> - <Button name="$parentInvisibleButton" hidden="true" parentKey="invisibleButton"> - <Anchors> - <Anchor point="TOPLEFT"/> - <Anchor point="BOTTOMLEFT"/> - <Anchor point="RIGHT" relativeTo="$parentColorSwatch" relativePoint="LEFT"> - <Offset> - <AbsDimension x="0" y="0"/> - </Offset> - </Anchor> - </Anchors> - <Scripts> - <OnEnter function="L_UIDropDownMenuButtonInvisibleButton_OnEnter"/> - <OnLeave function="L_UIDropDownMenuButtonInvisibleButton_OnLeave"/> - </Scripts> - </Button> - </Frames> - <Scripts> - <OnLoad> - self:SetFrameLevel(self:GetParent():GetFrameLevel()+2); - </OnLoad> - <OnClick> - L_UIDropDownMenuButton_OnClick(self, button, down); - </OnClick> - <OnEnter function="L_UIDropDownMenuButton_OnEnter"/> - <OnLeave function="L_UIDropDownMenuButton_OnLeave"/> - <OnEnable> - self.invisibleButton:Hide(); - </OnEnable> - <OnDisable> - self.invisibleButton:Show(); - </OnDisable> - </Scripts> - <ButtonText name="$parentNormalText"> - <Anchors> - <Anchor point="LEFT"> - <Offset x="-5" y="0"/> - </Anchor> - </Anchors> - </ButtonText> - <NormalFont style="GameFontHighlightSmallLeft"/> - <HighlightFont style="GameFontHighlightSmallLeft"/> - <DisabledFont style="GameFontDisableSmallLeft"/> - </Button> - <Button name="L_UIDropDownListTemplate" hidden="true" frameStrata="DIALOG" enableMouse="true" virtual="true"> - <Frames> - <Frame name="$parentBackdrop" setAllPoints="true"> - <Backdrop bgFile="Interface\DialogFrame\UI-DialogBox-Background-Dark" edgeFile="Interface\DialogFrame\UI-DialogBox-Border" tile="true"> - <BackgroundInsets> - <AbsInset left="11" right="11" top="11" bottom="9"/> - </BackgroundInsets> - <TileSize> - <AbsValue val="32"/> - </TileSize> - <EdgeSize> - <AbsValue val="32"/> - </EdgeSize> - </Backdrop> - </Frame> - <Frame name="$parentMenuBackdrop" setAllPoints="true"> - <Backdrop bgFile="Interface\Tooltips\UI-Tooltip-Background" edgeFile="Interface\Tooltips\UI-Tooltip-Border" tile="true"> - <EdgeSize> - <AbsValue val="16"/> - </EdgeSize> - <TileSize> - <AbsValue val="16"/> - </TileSize> - <BackgroundInsets> - <AbsInset left="5" right="4" top="4" bottom="4"/> - </BackgroundInsets> - </Backdrop> - <Scripts> - <OnLoad> - self:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b); - self:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b); - </OnLoad> - </Scripts> - </Frame> - <Button name="$parentButton1" inherits="L_UIDropDownMenuButtonTemplate" id="1"/> - </Frames> - <Scripts> - <OnClick> - self:Hide(); - </OnClick> - <OnEnter> - L_UIDropDownMenu_StopCounting(self, motion); - </OnEnter> - <OnLeave> - L_UIDropDownMenu_StartCounting(self, motion); - </OnLeave> - <OnUpdate> - L_UIDropDownMenu_OnUpdate(self, elapsed); - </OnUpdate> - <OnShow> - for i=1, L_UIDROPDOWNMENU_MAXBUTTONS do - if (not self.noResize) then - _G[self:GetName().."Button"..i]:SetWidth(self.maxWidth); - end - end - if (not self.noResize) then - self:SetWidth(self.maxWidth+25); - end - self.showTimer = nil; - if ( self:GetID() > 1 ) then - self.parent = _G["L_DropDownList"..(self:GetID() - 1)]; - end - </OnShow> - <OnHide> - L_UIDropDownMenu_OnHide(self); - </OnHide> - </Scripts> - </Button> - <Frame name="L_UIDropDownMenuTemplate" virtual="true"> - <Size> - <AbsDimension x="40" y="32"/> - </Size> - <Layers> - <Layer level="ARTWORK"> - <Texture name="$parentLeft" parentKey="Left" file="Interface\Glues\CharacterCreate\CharacterCreate-LabelFrame"> - <Size> - <AbsDimension x="25" y="64"/> - </Size> - <Anchors> - <Anchor point="TOPLEFT"> - <Offset> - <AbsDimension x="0" y="17"/> - </Offset> - </Anchor> - </Anchors> - <TexCoords left="0" right="0.1953125" top="0" bottom="1"/> - </Texture> - <Texture name="$parentMiddle" parentKey="Middle" file="Interface\Glues\CharacterCreate\CharacterCreate-LabelFrame"> - <Size> - <AbsDimension x="115" y="64"/> - </Size> - <Anchors> - <Anchor point="LEFT" relativeKey="$parent.Left" relativePoint="RIGHT"/> - </Anchors> - <TexCoords left="0.1953125" right="0.8046875" top="0" bottom="1"/> - </Texture> - <Texture name="$parentRight" parentKey="Right" file="Interface\Glues\CharacterCreate\CharacterCreate-LabelFrame"> - <Size> - <AbsDimension x="25" y="64"/> - </Size> - <Anchors> - <Anchor point="LEFT" relativeKey="$parent.Middle" relativePoint="RIGHT"/> - </Anchors> - <TexCoords left="0.8046875" right="1" top="0" bottom="1"/> - </Texture> - <FontString parentKey="Text" name="$parentText" inherits="GameFontHighlightSmall" wordwrap="false" justifyH="RIGHT"> - <Size> - <AbsDimension x="0" y="10"/> - </Size> - <Anchors> - <Anchor point="RIGHT" relativeKey="$parent.Right"> - <Offset> - <AbsDimension x="-43" y="2"/> - </Offset> - </Anchor> - </Anchors> - </FontString> - </Layer> - <Layer level="OVERLAY"> - <Texture parentKey="Icon" name="$parentIcon" hidden="true"> - <Size> - <AbsDimension x="16" y="16"/> - </Size> - <Anchors> - <Anchor point="LEFT"> - <Offset x="30" y="2"/> - </Anchor> - </Anchors> - </Texture> - </Layer> - </Layers> - <Frames> - <Button parentKey="Button" name="$parentButton" motionScriptsWhileDisabled="true" > - <Size> - <AbsDimension x="24" y="24"/> - </Size> - <Anchors> - <Anchor point="TOPRIGHT" relativeKey="$parent.Right"> - <Offset> - <AbsDimension x="-16" y="-18"/> - </Offset> - </Anchor> - </Anchors> - <Scripts> - <OnEnter> - local parent = self:GetParent(); - local myscript = parent:GetScript("OnEnter"); - if(myscript ~= nil) then - myscript(parent); - end - </OnEnter> - <OnLeave> - local parent = self:GetParent(); - local myscript = parent:GetScript("OnLeave"); - if(myscript ~= nil) then - myscript(parent); - end - </OnLeave> - <OnClick> - L_ToggleDropDownMenu(nil, nil, self:GetParent()); - PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON); - </OnClick> - </Scripts> - <NormalTexture name="$parentNormalTexture" parentKey="NormalTexture" file="Interface\ChatFrame\UI-ChatIcon-ScrollDown-Up"> - <Size> - <AbsDimension x="24" y="24"/> - </Size> - <Anchors> - <Anchor point="RIGHT"/> - </Anchors> - </NormalTexture> - <PushedTexture name="$parentPushedTexture" parentKey="PushedTexture" file="Interface\ChatFrame\UI-ChatIcon-ScrollDown-Down"> - <Size> - <AbsDimension x="24" y="24"/> - </Size> - <Anchors> - <Anchor point="RIGHT"/> - </Anchors> - </PushedTexture> - <DisabledTexture name="$parentDisabledTexture" parentKey="DisabledTexture" file="Interface\ChatFrame\UI-ChatIcon-ScrollDown-Disabled"> - <Size> - <AbsDimension x="24" y="24"/> - </Size> - <Anchors> - <Anchor point="RIGHT"/> - </Anchors> - </DisabledTexture> - <HighlightTexture name="$parentHighlightTexture" parentKey="HighlightTexture" file="Interface\Buttons\UI-Common-MouseHilight" alphaMode="ADD"> - <Size> - <AbsDimension x="24" y="24"/> - </Size> - <Anchors> - <Anchor point="RIGHT"/> - </Anchors> - </HighlightTexture> - </Button> - </Frames> - <Scripts> - <OnHide> - L_CloseDropDownMenus(); - </OnHide> - </Scripts> - </Frame> ---> -</Ui> 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)<tostring(two) end -- compare names return o1<o2 end) - + for i = 1, #sortTbl do local k = sortTbl[i] local v = refTbl[k] @@ -327,7 +320,7 @@ local function keybindingValidateFunc(text) return s end --- handle() - selfrecursing function that processes input->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/README.md b/TitanClassic/libs/README.md new file mode 100755 index 0000000..e608c06 --- /dev/null +++ b/TitanClassic/libs/README.md @@ -0,0 +1,26 @@ +Ace3 - AddOn development framework +================================== + +Ace3 is a comprehensive framework for WoW AddOn development to streamline many of the common tasks in developing addons. This includes lifecycles, saved variables, configuration, event handling, network communications, and more. + +Documentation +------------- + +A basic introduction to usage can be found here: +https://www.wowace.com/projects/ace3/pages/getting-started + +Documentation can be found here: +https://www.wowace.com/addons/ace3/pages/ + +Resources +--------- +A development repository is available on GitHub: +https://github.com/WoWUIDev/Ace3 + +Please note that the CurseForge/WoWAce SVN repository remains the primary authority, and what should be used in .pkgmeta to reference Ace3. + +.pkgmeta reference: +Base Path: https://repos.wowace.com/wow/ace3/trunk +Example for AceAddon-3.0: https://repos.wowace.com/wow/ace3/trunk/AceAddon-3.0 + +It is recommended to reference the specific Ace3 libraries you are using directly, instead of pulling in the entire package. diff --git a/TitanClassic/libs/changelog.txt b/TitanClassic/libs/changelog.txt index 3a7599d..cf9b1b9 100755 --- a/TitanClassic/libs/changelog.txt +++ b/TitanClassic/libs/changelog.txt @@ -1,3 +1,58 @@ +Ace3 Release - Revision r1309 (July 12th, 2023) +----------------------------------------------- +- AceDB-3.0: Fixed an issue due to a region change on the PTR +- AceDBOptions-3.0: Updated locale strings + +Ace3 Release - Revision r1294 (October 22nd, 2022) +-------------------------------------------------- +- Ace3 should be fully supported on WoW 10.0 +- AceGUI-3.0: TabGroup: Fixes for WoW 10.0 template changes +- AceConfigDialog-3.0: New Settings panel integration for WoW 10.0 + +Ace3 Release - Revision r1281 (September 21st, 2022) +-------------------------------------------------- +- AceGUI-3.0: Preliminary support for WoW 10.0 +- AceGUI-3.0: MultiLineEditBox: Fixed an issue with mouse interactivity on re-cycled editboxes in certain circumstances +- AceGUI-3.0: Label: Use font objects to allow font fallback mechanics to be used + +Ace3 Release - Revision r1259 (February 23rd, 2022) +-------------------------------------------------- +- AceGUI-3.0: Dropdown: Fix double click sound on toggling the dropdown (Issue #575) +- AceConfigDialog-3.0: Fix width number multiplier on multiselects (Issue #584) + +Ace3 Release - Revision r1252 (May 17th, 2021) +-------------------------------------------------- +- AceConfigDialog-3.0: Increased the frame level of dialogs to allow other addons to draw below them +- AceConfigDialog-3.0: The validation/confirmation popup is now opaque and not click-through, to avoid accidentally activating options below it +- AceHook-3.0: Allow UnhookAll to be used without embedding (Fixes #558) + +Ace3 Release - Revision r1241 (October 13th, 2020) +-------------------------------------------------- +- AceAddon-3.0: Suppress more Blizzard addon load events from activating Ace3 addons "too early", causing loading issues. +- AceGUI-3.0: Updated for Backdrop changes in WoW 9.0 +- AceGUI-3.0: Re-structured widget releasing to avoid recursive release in some circumstances +- AceGUI-3.0: Label: Anchors are being refreshed when the font is changed (Ticket #540) +- AceGUI-3.0: Dropdown: Initialize the widget with an empty list so that AddItem can be used on a fresh dropdown (Ticket #542) + +Ace3 Release - Revision r1227 (August 12th, 2019) +------------------------------------------------- +- AceConfigDialog-3.0: Fixed an issue with a missing template on WoW Classic (Ticket #517) + +Ace3 Release - Revision r1224 (August 1st, 2019) +------------------------------------------------ +- AceConfigDialog-3.0: Replace use of StaticPopup with a custom frame to minimize taint +- AceGUI-3.0: Ensure the OnLeave callback on various widgets still fires when its being released while visible (Ticket #505) +- AceGUI-3.0: Various fixes for anchoring problems in WoW 8.2 (Ticket #512, and other reports) + +Ace3 Release - Revision r1214 (June 26th, 2019) +----------------------------------------------- +- AceConfigDialog-3.0: Exposed "select" type sorting control through a new "sorting" config table member +- AceConfigDialog-3.0: Clear existing anchors on the GameTooltip before re-anchoring it for 8.2 compatibility +- AceConfigDialog-3.0: Improved options table sorting algorithm to produce a stable result in certain edge cases (Ticket #501) +- AceConfigRegistry-3.0: Added missing custom controls entries for all types added in the last release (Ticket #494) +- AceGUI-3.0: ColorPicker: Removed usage of Show/HideUIPanel for WoW 8.2 compatibiliy +- AceGUI-3.0: DropDown: Improved dropdown sorting algorithm to support tables with mixed string and numeric keys + Ace3 Release - Revision r1200 (January 24th, 2019) -------------------------------------------------- - Cleanup for WoW 8.0 improvements @@ -186,7 +241,7 @@ Ace3 Release - Revision r900 (December 8th, 2009) - AceGUI-3.0: TreeGroup: Allow iconCoords to be passed for the tree elements. (Ticket #59) - AceGUI-3.0: Slider: Add a more visible backdrop/border around the manual input area (Ticket #98, #46) - AceGUI-3.0: Allow displaying a image in front of the checkbox label. (Ticket #82) -- AceConfig-3.0: Added an experimental "descStyle" member to all option table nodes that allows you to control the way the description is presented. +- AceConfig-3.0: Added an experimental "descStyle" member to all option table nodes that allows you to control the way the description is presented. Supported values are "tooltip" for the old behaviour, and "inline" for a inline display of the description, pending support in AceGUI-3.0 widgets. - AceConfigCmd-3.0: Properly parse functions and methods supplied for the "hidden" option table member. (Ticket #96) - AceConfigDialog-3.0: Fix the unpacking of the basepath arguments when internally calling :Open (Ticket #90) @@ -405,4 +460,4 @@ Ace3 Beta - Revision 60545 (Feb 7th, 2008) Ace3 Beta - Revision 60163 (Feb 3rd, 2008) --------------------------------------------- -- Initial Beta release \ No newline at end of file +- Initial Beta release diff --git a/TitanClassicAmmo/TitanClassicAmmo.toc b/TitanClassicAmmo/TitanClassicAmmo.toc index 456387a..150719c 100644 --- a/TitanClassicAmmo/TitanClassicAmmo.toc +++ b/TitanClassicAmmo/TitanClassicAmmo.toc @@ -1,10 +1,10 @@ -## Interface: 11403 -## Title: Titan Panel Classic [|cffeda55fAmmo|r] |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic [|cffeda55fAmmo|r] |cff00aa001.3.3.11404|r ## Notes: Adds an ammo monitor to Titan Panel ## Author: Titan Panel Development Team (http://www.titanpanel.org) ## SavedVariables: ## OptionalDeps: ## Dependencies: TitanClassic -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## X-Child-Of: TitanClassic TitanClassicAmmo.xml \ No newline at end of file diff --git a/TitanClassicBag/TitanClassicBag.toc b/TitanClassicBag/TitanClassicBag.toc index 735b6da..cae2a88 100644 --- a/TitanClassicBag/TitanClassicBag.toc +++ b/TitanClassicBag/TitanClassicBag.toc @@ -1,10 +1,10 @@ -## Interface: 11403 -## Title: Titan Panel Classic [|cffeda55fBag|r] |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic [|cffeda55fBag|r] |cff00aa001.3.3.11404|r ## Notes: Adds bag and free slot information to Titan Panel ## Author: Titan Panel Development Team (http://www.titanpanel.org) ## SavedVariables: ## OptionalDeps: ## Dependencies: TitanClassic -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## X-Child-Of: TitanClassic TitanClassicBag.xml diff --git a/TitanClassicClock/TitanClassicClock.toc b/TitanClassicClock/TitanClassicClock.toc index 7ff2cd2..c1d9125 100644 --- a/TitanClassicClock/TitanClassicClock.toc +++ b/TitanClassicClock/TitanClassicClock.toc @@ -1,10 +1,10 @@ -## Interface: 11403 -## Title: Titan Panel Classic [|cffeda55fClock|r] |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic [|cffeda55fClock|r] |cff00aa001.3.3.11404|r ## Notes: Adds a clock to Titan Panel ## Author: Titan Panel Development Team (http://www.titanpanel.org) ## SavedVariables: ## OptionalDeps: ## Dependencies: TitanClassic -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## X-Child-Of: TitanClassic TitanClassicClock.xml diff --git a/TitanClassicGold/TitanClassicGold.toc b/TitanClassicGold/TitanClassicGold.toc index 23ed10a..a8bfd83 100644 --- a/TitanClassicGold/TitanClassicGold.toc +++ b/TitanClassicGold/TitanClassicGold.toc @@ -1,10 +1,10 @@ -## Interface: 11403 -## Title: Titan Panel Classic [|cffeda55fGold|r] |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic [|cffeda55fGold|r] |cff00aa001.3.3.11404|r ## Notes: Keeps track of all gold held by a player's toons on a per server/faction basis. ## Author: Titan Panel Development Team (http://www.titanpanel.org) ## SavedVariables: GoldSave ## OptionalDeps: ## Dependencies: TitanClassic -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## X-Child-Of: TitanClassic TitanClassicGold.xml diff --git a/TitanClassicLocation/TitanClassicLocation.toc b/TitanClassicLocation/TitanClassicLocation.toc index 49f18db..500b374 100644 --- a/TitanClassicLocation/TitanClassicLocation.toc +++ b/TitanClassicLocation/TitanClassicLocation.toc @@ -1,10 +1,10 @@ -## Interface: 11403 -## Title: Titan Panel Classic [|cffeda55fLocation|r] |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic [|cffeda55fLocation|r] |cff00aa001.3.3.11404|r ## Notes: Adds coordinates and location information to Titan Panel ## Author: Titan Panel Development Team (http://www.titanpanel.org) ## SavedVariables: ## OptionalDeps: ## Dependencies: TitanClassic -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## X-Child-Of: TitanClassic TitanClassicLocation.xml diff --git a/TitanClassicLootType/TitanClassicLootType.toc b/TitanClassicLootType/TitanClassicLootType.toc index c9b6ab6..4edeaa1 100644 --- a/TitanClassicLootType/TitanClassicLootType.toc +++ b/TitanClassicLootType/TitanClassicLootType.toc @@ -1,10 +1,10 @@ -## Interface: 11403 -## Title: Titan Panel Classic [|cffeda55fLootType|r] |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic [|cffeda55fLootType|r] |cff00aa001.3.3.11404|r ## Notes: Adds group loot and instance difficulty information to Titan Panel ## Author: Titan Panel Development Team (http://www.titanpanel.org) ## SavedVariables: TitanClassicLootTypeSaved ## OptionalDeps: ## Dependencies: TitanClassic -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## X-Child-Of: TitanClassic TitanClassicLootType.xml diff --git a/TitanClassicPerformance/TitanClassicPerformance.toc b/TitanClassicPerformance/TitanClassicPerformance.toc index f9ca115..6c15ba2 100644 --- a/TitanClassicPerformance/TitanClassicPerformance.toc +++ b/TitanClassicPerformance/TitanClassicPerformance.toc @@ -1,10 +1,10 @@ -## Interface: 11403 -## Title: Titan Panel Classic [|cffeda55fPerformance|r] |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic [|cffeda55fPerformance|r] |cff00aa001.3.3.11404|r ## Notes: Adds FPS and Garbage collection information to Titan Panel ## Author: Titan Panel Development Team (http://www.titanpanel.org) ## SavedVariables: ## OptionalDeps: ## Dependencies: TitanClassic -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## X-Child-Of: TitanClassic TitanClassicPerformance.xml diff --git a/TitanClassicRegen/TitanClassicRegen.toc b/TitanClassicRegen/TitanClassicRegen.toc index 5f4ece1..e17de9f 100644 --- a/TitanClassicRegen/TitanClassicRegen.toc +++ b/TitanClassicRegen/TitanClassicRegen.toc @@ -1,10 +1,10 @@ -## Interface: 11403 -## Title: Titan Panel Classic [|cffeda55fRegen|r] |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic [|cffeda55fRegen|r] |cff00aa001.3.3.11404|r ## Notes: Adds a regen monitor to Titan panel to show HP/MANA regen ## Author: Titan Panel Development Team (http://www.titanpanel.org) ## SavedVariables: ## OptionalDeps: ## Dependencies: TitanClassic -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## X-Child-Of: TitanClassic TitanClassicRegen.xml \ No newline at end of file diff --git a/TitanClassicRepair/TitanClassicRepair.toc b/TitanClassicRepair/TitanClassicRepair.toc index 315ad68..ac6268a 100644 --- a/TitanClassicRepair/TitanClassicRepair.toc +++ b/TitanClassicRepair/TitanClassicRepair.toc @@ -1,10 +1,10 @@ -## Interface: 11403 -## Title: Titan Panel Classic [|cffeda55fRepair|r] |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic [|cffeda55fRepair|r] |cff00aa001.3.3.11404|r ## Notes: Provides a configurable durability display. Also adds the ability to auto repair items and inventory at vendors ## Author: Titan Panel Development Team (http://www.titanpanel.org) ## SavedVariables: ## OptionalDeps: ## Dependencies: TitanClassic -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## X-Child-Of: TitanClassic TitanClassicRepair.xml diff --git a/TitanClassicVolume/TitanClassicVolume.toc b/TitanClassicVolume/TitanClassicVolume.toc index 8364f11..75cb532 100644 --- a/TitanClassicVolume/TitanClassicVolume.toc +++ b/TitanClassicVolume/TitanClassicVolume.toc @@ -1,10 +1,10 @@ -## Interface: 11403 -## Title: Titan Panel Classic [|cffeda55fVolume|r] |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic [|cffeda55fVolume|r] |cff00aa001.3.3.11404|r ## Notes: Adds a volume control icon on your Titan Bar ## Author: Titan Panel Development Team (http://www.titanpanel.org) ## SavedVariables: ## OptionalDeps: ## Dependencies: TitanClassic -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## X-Child-Of: TitanClassic TitanClassicVolume.xml diff --git a/TitanClassicXP/TitanClassicXP.toc b/TitanClassicXP/TitanClassicXP.toc index 4453bba..751a8f9 100644 --- a/TitanClassicXP/TitanClassicXP.toc +++ b/TitanClassicXP/TitanClassicXP.toc @@ -1,10 +1,10 @@ -## Interface: 11403 -## Title: Titan Panel Classic [|cffeda55fXP|r] |cff00aa001.3.2.11403|r +## Interface: 11404 +## Title: Titan Panel Classic [|cffeda55fXP|r] |cff00aa001.3.3.11404|r ## Notes: Adds information to Titan Panel about XP earned and time to level ## Author: Titan Panel Development Team (http://www.titanpanel.org) ## SavedVariables: ## OptionalDeps: ## Dependencies: TitanClassic -## Version: 1.3.2.11403 +## Version: 1.3.3.11404 ## X-Child-Of: TitanClassic TitanClassicXP.xml