local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB --Cache global variables --Lua functions local _G = _G local pairs, assert = pairs, assert local getn, tremove, tContains, tinsert, wipe = table.getn, tremove, tContains, tinsert, table.wipe local lower = string.lower --WoW API / Variables local CreateFrame = CreateFrame local UnitIsDeadOrGhost, InCinematic = UnitIsDeadOrGhost, InCinematic local GetBindingFromClick, RunBinding = GetBindingFromClick, RunBinding local PurchaseSlot, GetBankSlotCost = PurchaseSlot, GetBankSlotCost local MoneyFrame_Update = MoneyFrame_Update local SetCVar, DisableAddOn = SetCVar, DisableAddOn local ReloadUI, PlaySound, StopMusic = ReloadUI, PlaySound, StopMusic local StaticPopup_Resize = StaticPopup_Resize E.PopupDialogs = {} E.StaticPopup_DisplayedFrames = {} E.PopupDialogs["ELVUI_UPDATE_AVAILABLE"] = { text = L["ElvUI is five or more revisions out of date. You can download the newest version from https://github.com/ElvUI-Vanilla/ElvUI/"], hasEditBox = 1, OnShow = function() this.editBox:SetAutoFocus(false) this.editBox.width = this.editBox:GetWidth() E:Width(this.editBox, 220) this.editBox:SetText("https://github.com/ElvUI-Vanilla/ElvUI") this.editBox:HighlightText() end, OnHide = function() E:Width(this.editBox, this.editBox.width or 50) this.editBox.width = nil end, hideOnEscape = 1, button1 = OKAY, OnAccept = E.noop, EditBoxOnEnterPressed = function() this:GetParent():Hide() end, EditBoxOnEscapePressed = function() this:GetParent():Hide() end, EditBoxOnTextChanged = function() if this:GetText() ~= "https://github.com/ElvUI-Vanilla/ElvUI" then this:SetText("https://github.com/ElvUI-Vanilla/ElvUI") end this:HighlightText() this:ClearFocus() end, OnEditFocusGained = function() this:HighlightText() end, showAlert = 1 } E.PopupDialogs["CLIQUE_ADVERT"] = { text = L["Using the healer layout it is highly recommended you download the addon Clique if you wish to have the click-to-heal function."], button1 = YES, OnAccept = E.noop, showAlert = 1 } E.PopupDialogs["CONFIRM_LOSE_BINDING_CHANGES"] = { text = CONFIRM_LOSE_BINDING_CHANGES, button1 = OKAY, button2 = CANCEL, OnAccept = function() E:GetModule("ActionBars"):ChangeBindingProfile() E:GetModule("ActionBars").bindingsChanged = nil end, OnCancel = function() if ElvUIBindPopupWindowCheckButton:GetChecked() then ElvUIBindPopupWindowCheckButton:SetChecked() else ElvUIBindPopupWindowCheckButton:SetChecked(1) end end, timeout = 0, whileDead = 1, showAlert = 1 } E.PopupDialogs["TUKUI_ELVUI_INCOMPATIBLE"] = { text = L["Oh lord, you have got ElvUI and Tukui both enabled at the same time. Select an addon to disable."], OnAccept = function() DisableAddOn("ElvUI") ReloadUI() end, OnCancel = function() DisableAddOn("Tukui") ReloadUI() end, button1 = "ElvUI", button2 = "Tukui", timeout = 0, whileDead = 1, hideOnEscape = false } E.PopupDialogs["DISABLE_INCOMPATIBLE_ADDON"] = { text = L["Do you swear not to post in technical support about something not working without first disabling the addon/module combination first?"], OnAccept = function() E.global.ignoreIncompatible = true end, OnCancel = function() E:StaticPopup_Hide("DISABLE_INCOMPATIBLE_ADDON") E:StaticPopup_Show("INCOMPATIBLE_ADDON", E.PopupDialogs["INCOMPATIBLE_ADDON"].addon, E.PopupDialogs["INCOMPATIBLE_ADDON"].module) end, button1 = L["I Swear"], button2 = DECLINE, timeout = 0, whileDead = 1, hideOnEscape = false } E.PopupDialogs["INCOMPATIBLE_ADDON"] = { text = L["INCOMPATIBLE_ADDON"], OnAccept = function() DisableAddOn(E.PopupDialogs["INCOMPATIBLE_ADDON"].addon) ReloadUI() end, OnCancel = function() E.private[lower(E.PopupDialogs["INCOMPATIBLE_ADDON"].module)].enable = false ReloadUI() end, button3 = L["Disable Warning"], OnAlt = function () E:StaticPopup_Hide("INCOMPATIBLE_ADDON") E:StaticPopup_Show("DISABLE_INCOMPATIBLE_ADDON") end, timeout = 0, whileDead = 1, hideOnEscape = false } E.PopupDialogs["PIXELPERFECT_CHANGED"] = { text = L["You have changed the Thin Border Theme option. You will have to complete the installation process to remove any graphical bugs."], button1 = ACCEPT, OnAccept = E.noop, timeout = 0, whileDead = 1, hideOnEscape = false } E.PopupDialogs["CONFIGAURA_SET"] = { text = L["Because of the mass confusion caused by the new aura system I've implemented a new step to the installation process. This is optional. If you like how your auras are setup go to the last step and click finished to not be prompted again. If for some reason you are prompted repeatedly please restart your game."], button1 = ACCEPT, OnAccept = E.noop, timeout = 0, whileDead = 1, hideOnEscape = false } E.PopupDialogs["QUEUE_TAINT"] = { text = L["You have changed your UIScale, however you still have the AutoScale option enabled in ElvUI. Press accept if you would like to disable the Auto Scale option."], button1 = ACCEPT, button2 = CANCEL, OnAccept = ReloadUI, timeout = 0, whileDead = 1, hideOnEscape = false } E.PopupDialogs["FAILED_UISCALE"] = { text = L["You have changed your UIScale, however you still have the AutoScale option enabled in ElvUI. Press accept if you would like to disable the Auto Scale option."], button1 = ACCEPT, button2 = CANCEL, OnAccept = function() E.global.general.autoScale = false ReloadUI() end, timeout = 0, whileDead = 1, hideOnEscape = false } E.PopupDialogs["CONFIG_RL"] = { text = L["One or more of the changes you have made require a ReloadUI."], button1 = ACCEPT, button2 = CANCEL, OnAccept = ReloadUI, timeout = 0, whileDead = 1, hideOnEscape = false } E.PopupDialogs["GLOBAL_RL"] = { text = L["One or more of the changes you have made will effect all characters using this addon. You will have to reload the user interface to see the changes you have made."], button1 = ACCEPT, button2 = CANCEL, OnAccept = ReloadUI, timeout = 0, whileDead = 1, hideOnEscape = false } E.PopupDialogs["PRIVATE_RL"] = { text = L["A setting you have changed will change an option for this character only. This setting that you have changed will be uneffected by changing user profiles. Changing this setting requires that you reload your User Interface."], button1 = ACCEPT, button2 = CANCEL, OnAccept = ReloadUI, timeout = 0, whileDead = 1, hideOnEscape = false } E.PopupDialogs["KEYBIND_MODE"] = { text = L["Hover your mouse over any actionbutton or spellbook button to bind it. Press the escape key or right click to clear the current actionbutton's keybinding."], button1 = L["Save"], button2 = L["Discard"], OnAccept = function() E:GetModule("ActionBars"):DeactivateBindMode(true) end, OnCancel = function() E:GetModule("ActionBars"):DeactivateBindMode(false) end, timeout = 0, whileDead = 1, hideOnEscape = false } E.PopupDialogs["DELETE_GRAYS"] = { text = L["Are you sure you want to delete all your gray items?"], button1 = YES, button2 = NO, OnAccept = function() E:GetModule("Bags"):VendorGrays(true) end, OnShow = function() MoneyFrame_Update(this:GetName().."MoneyFrame", E.PopupDialogs["DELETE_GRAYS"].Money) end, timeout = 0, whileDead = 1, hideOnEscape = false, hasMoneyFrame = 1 } E.PopupDialogs["BUY_BANK_SLOT"] = { text = CONFIRM_BUY_BANK_SLOT, button1 = YES, button2 = NO, OnAccept = PurchaseSlot, OnShow = function() MoneyFrame_Update(this:GetName().."MoneyFrame", GetBankSlotCost()) end, hasMoneyFrame = 1, timeout = 0, hideOnEscape = 1 } E.PopupDialogs["CANNOT_BUY_BANK_SLOT"] = { text = L["Can't buy anymore slots!"], button1 = ACCEPT, timeout = 0, whileDead = 1 } E.PopupDialogs["NO_BANK_BAGS"] = { text = L["You must purchase a bank slot first!"], button1 = ACCEPT, timeout = 0, whileDead = 1 } E.PopupDialogs["RESETUI_CHECK"] = { text = L["Are you sure you want to reset every mover back to it's default position?"], button1 = ACCEPT, button2 = CANCEL, OnAccept = function() E:ResetAllUI() end, timeout = 0, whileDead = 1 } E.PopupDialogs["HARLEM_SHAKE"] = { text = L["ElvUI needs to perform database optimizations please be patient."], button1 = OKAY, OnAccept = function() if E.isMassiveShaking then E:StopHarlemShake() else E:BeginHarlemShake() return true end end, timeout = 0, whileDead = 1 } E.PopupDialogs["HELLO_KITTY"] = { text = L["ElvUI needs to perform database optimizations please be patient."], button1 = OKAY, OnAccept = function() E:SetupHelloKitty() end, timeout = 0, whileDead = 1 } E.PopupDialogs["HELLO_KITTY_END"] = { text = L["Do you enjoy the new ElvUI?"], button1 = L["Yes, Keep Changes!"], button2 = L["No, Revert Changes!"], OnAccept = function() E:Print(L["Type /hellokitty to revert to old settings."]) StopMusic() SetCVar("Sound_EnableAllSound", E.oldEnableAllSound) SetCVar("Sound_EnableMusic", E.oldEnableMusic) end, OnCancel = function() E:RestoreHelloKitty() StopMusic() SetCVar("Sound_EnableAllSound", E.oldEnableAllSound) SetCVar("Sound_EnableMusic", E.oldEnableMusic) end, timeout = 0, whileDead = 1 } E.PopupDialogs["DISBAND_RAID"] = { text = L["Are you sure you want to disband the group?"], button1 = ACCEPT, button2 = CANCEL, OnAccept = function() E:GetModule("Misc"):DisbandRaidGroup() end, timeout = 0, whileDead = 1 } E.PopupDialogs["CONFIRM_LOOT_DISTRIBUTION"] = { text = CONFIRM_LOOT_DISTRIBUTION, button1 = YES, button2 = NO, timeout = 0, hideOnEscape = 1 } E.PopupDialogs["RESET_PROFILE_PROMPT"] = { text = L["Are you sure you want to reset all the settings on this profile?"], button1 = YES, button2 = NO, timeout = 0, hideOnEscape = 1, OnAccept = function() E:ResetProfile() end } E.PopupDialogs["APPLY_FONT_WARNING"] = { text = L["Are you sure you want to apply this font to all ElvUI elements?"], OnAccept = function() local font = E.db.general.font local fontSize = E.db.general.fontSize E.db.bags.itemLevelFont = font E.db.bags.itemLevelFontSize = fontSize E.db.bags.countFont = font E.db.bags.countFontSize = fontSize E.db.nameplates.font = font E.db.nameplates.fontSize = fontSize E.db.actionbar.font = font E.db.actionbar.fontSize = fontSize E.db.auras.font = font E.db.auras.fontSize = fontSize E.db.chat.font = font E.db.chat.fontSize = fontSize E.db.chat.tabFont = font E.db.chat.tapFontSize = fontSize E.db.datatexts.font = font E.db.datatexts.fontSize = fontSize E.db.tooltip.font = font E.db.tooltip.fontSize = fontSize E.db.tooltip.headerFontSize = fontSize E.db.tooltip.textFontSize = fontSize E.db.tooltip.smallTextFontSize = fontSize E.db.tooltip.healthBar.font = font E.db.tooltip.healthBar.fontSize = fontSize E.db.unitframe.font = font E.db.unitframe.fontSize = fontSize E.db.unitframe.units.party.rdebuffs.font = font E.db.unitframe.units.raid.rdebuffs.font = font E.db.unitframe.units.raid40.rdebuffs.font = font E:UpdateAll(true) end, OnCancel = function() E:StaticPopup_Hide("APPLY_FONT_WARNING") end, button1 = YES, button2 = CANCEL, timeout = 0, whileDead = 1, hideOnEscape = false } local MAX_STATIC_POPUPS = 4 function E:StaticPopup_OnShow() PlaySound("igMainMenuOpen") local dialog = E.PopupDialogs[this.which] local OnShow = dialog.OnShow if OnShow then OnShow(this.data) end if dialog.enterClicksFirstButton then this:SetScript("OnKeyDown", E.StaticPopup_OnKeyDown) end end function E:StaticPopup_EscapePressed() local closed = nil for _, frame in pairs(E.StaticPopup_DisplayedFrames) do if frame:IsShown() and frame.hideOnEscape then local standardDialog = E.PopupDialogs[frame.which] if standardDialog then local OnCancel = standardDialog.OnCancel local noCancelOnEscape = standardDialog.noCancelOnEscape if OnCancel and not noCancelOnEscape then OnCancel(frame, frame.data, "clicked") end frame:Hide() else E:StaticPopupSpecial_Hide(frame) end closed = 1 end end return closed end function E:StaticPopupSpecial_Hide(frame) frame:Hide() E:StaticPopup_CollapseTable() end function E:StaticPopup_CollapseTable() local displayedFrames = E.StaticPopup_DisplayedFrames local index = getn(displayedFrames) while((index >= 1) and (not displayedFrames[index]:IsShown())) do tremove(displayedFrames, index) index = index - 1 end end function E:StaticPopup_SetUpPosition(dialog) if not tContains(E.StaticPopup_DisplayedFrames, dialog) then local lastFrame = E.StaticPopup_DisplayedFrames[getn(E.StaticPopup_DisplayedFrames)] if lastFrame then dialog:SetPoint("TOP", lastFrame, "BOTTOM", 0, -4) else dialog:SetPoint("TOP", E.UIParent, "TOP", 0, -100) end tinsert(E.StaticPopup_DisplayedFrames, dialog) end end function E:StaticPopupSpecial_Show(frame) if frame.exclusive then E:StaticPopup_HideExclusive() end E:StaticPopup_SetUpPosition(frame) frame:Show() end function E:StaticPopupSpecial_Hide(frame) frame:Hide() E:StaticPopup_CollapseTable() end function E:StaticPopup_IsLastDisplayedFrame(frame) for i = getn(E.StaticPopup_DisplayedFrames), 1, -1 do local popup = E.StaticPopup_DisplayedFrames[i] if popup:IsShown() then return frame == popup end end return false end function E:StaticPopup_OnKeyDown(key) if GetBindingFromClick(key) == "TOGGLEGAMEMENU" then return E:StaticPopup_EscapePressed() elseif GetBindingFromClick(key) == "SCREENSHOT" then RunBinding("SCREENSHOT") return end local dialog = E.PopupDialogs[this.which] if dialog then if arg1 == "ENTER" and dialog.enterClicksFirstButton then local frameName = this:GetName() local button local i = 1 while true do button = _G[frameName.."Button"..i] if button then if button:IsShown() then E:StaticPopup_OnClick(this, i) return end i = i + 1 else break end end end end end function E:StaticPopup_OnHide() PlaySound("igMainMenuClose") E:StaticPopup_CollapseTable() local dialog = E.PopupDialogs[this.which] local OnHide = dialog.OnHide if OnHide then OnHide(this.data) end if dialog.enterClicksFirstButton then this:SetScript("OnKeyDown", nil) end end function E:StaticPopup_OnUpdate() if this.timeleft and this.timeleft > 0 then local which = this.which local timeleft = this.timeleft - arg1 if timeleft <= 0 then if not E.PopupDialogs[which].timeoutInformationalOnly then this.timeleft = 0 local OnCancel = E.PopupDialogs[which].OnCancel if OnCancel then OnCancel(this.data, "timeout") end this:Hide() end return end this.timeleft = timeleft end if this.startDelay then local which = this.which local timeleft = this.startDelay - arg1 if timeleft <= 0 then this.startDelay = nil local text = _G[this:GetName().."Text"] text:SetText(format(E.PopupDialogs[which].text, text.text_arg1, text.text_arg2)) local button1 = _G[this:GetName().."Button1"] button1:Enable() StaticPopup_Resize(this, which) return end this.startDelay = timeleft end local onUpdate = E.PopupDialogs[this.which].OnUpdate if onUpdate then onUpdate(arg1, this) end end function E:StaticPopup_OnClick(index) if not self:IsShown() then return end local which = self.which local info = E.PopupDialogs[which] if not info then return nil end local hide = true if index == 1 then local OnAccept = info.OnAccept if OnAccept then hide = not OnAccept(self, self.data, self.data2) end elseif index == 3 then local OnAlt = info.OnAlt if OnAlt then OnAlt(self, self.data, "clicked") end else local OnCancel = info.OnCancel if OnCancel then hide = not OnCancel(self, self.data, "clicked") end end if hide and (which == self.which) and (index ~= 3 or not info.noCloseOnAlt) then self:Hide() end end function E:StaticPopup_EditBoxOnEnterPressed() local EditBoxOnEnterPressed, which, dialog local parent = this:GetParent() if parent.which then which = parent.which dialog = parent elseif parent:GetParent().which then which = parent:GetParent().which dialog = parent:GetParent() end EditBoxOnEnterPressed = E.PopupDialogs[which].EditBoxOnEnterPressed if EditBoxOnEnterPressed then EditBoxOnEnterPressed(this, dialog.data) end end function E:StaticPopup_EditBoxOnEscapePressed() local EditBoxOnEscapePressed = E.PopupDialogs[this:GetParent().which].EditBoxOnEscapePressed if EditBoxOnEscapePressed then EditBoxOnEscapePressed(this, this:GetParent().data) end end function E:StaticPopup_EditBoxOnTextChanged(userInput) local EditBoxOnTextChanged = E.PopupDialogs[this:GetParent().which].EditBoxOnTextChanged if EditBoxOnTextChanged then EditBoxOnTextChanged(this, this:GetParent().data) end end function E:StaticPopup_FindVisible(which, data) local info = E.PopupDialogs[which] if not info then return nil end for index = 1, MAX_STATIC_POPUPS, 1 do local frame = _G["ElvUI_StaticPopup"..index] if (frame:IsShown() and (frame.which == which) and (not info.multiple or (frame.data == data))) then return frame end end return nil end function E:StaticPopup_Resize(dialog, which) local info = E.PopupDialogs[which] if not info then return nil end local name = dialog:GetName() local text = _G[name.."Text"] local editBox = _G[name.."EditBox"] local button1 = _G[name.."Button1"] local maxHeightSoFar, maxWidthSoFar = (dialog.maxHeightSoFar or 0), (dialog.maxWidthSoFar or 0) local width = 320 if dialog.numButtons == 3 then width = 440 elseif info.showAlert or info.showAlertGear or info.closeButton then width = 420 elseif info.editBoxWidth and info.editBoxWidth > 260 then width = width + (info.editBoxWidth - 260) end if width > maxWidthSoFar then E:Width(dialog, width) dialog.maxWidthSoFar = width end local height = 32 + text:GetHeight() + 8 + button1:GetHeight() if info.hasEditBox then height = height + 8 + editBox:GetHeight() elseif info.hasMoneyFrame then height = height + 16 end if height > maxHeightSoFar then E:Height(dialog, height) dialog.maxHeightSoFar = height end end function E:StaticPopup_OnEvent() self.maxHeightSoFar = 0 E:StaticPopup_Resize(self, self.which) end local tempButtonLocs = {} function E:StaticPopup_Show(which, text_arg1, text_arg2, data) local info = E.PopupDialogs[which] if not info then return nil end if UnitIsDeadOrGhost("player") and not info.whileDead then if info.OnCancel then info.OnCancel() end return nil end if InCinematic() and not info.interruptCinematic then if info.OnCancel then info.OnCancel() end return nil end if info.cancels then for index = 1, MAX_STATIC_POPUPS, 1 do local frame = _G["ElvUI_StaticPopup"..index] if (frame:IsShown() and (frame.which == info.cancels)) then frame:Hide() local OnCancel = E.PopupDialogs[frame.which].OnCancel if OnCancel then OnCancel(frame, frame.data, "override") end end end end local dialog = nil dialog = E:StaticPopup_FindVisible(which, data) if dialog then if not info.noCancelOnReuse then local OnCancel = info.OnCancel if OnCancel then OnCancel(dialog, dialog.data, "override") end end dialog:Hide() end if not dialog then local index = 1 if info.preferredIndex then index = info.preferredIndex end for i = index, MAX_STATIC_POPUPS do local frame = _G["ElvUI_StaticPopup"..i] if not frame:IsShown() then dialog = frame break end end if not dialog and info.preferredIndex then for i = 1, info.preferredIndex do local frame = _G["ElvUI_StaticPopup"..i] if not frame:IsShown() then dialog = frame break end end end end if not dialog then if info.OnCancel then info.OnCancel() end return nil end dialog.maxHeightSoFar, dialog.maxWidthSoFar = 0, 0 local name = dialog:GetName() local text = _G[name.."Text"] text:SetText(format(info.text, text_arg1, text_arg2)) if info.closeButton then local closeButton = _G[name.."CloseButton"] if info.closeButtonIsHide then closeButton:SetNormalTexture("Interface\\Buttons\\UI-Panel-HideButton-Up") closeButton:SetPushedTexture("Interface\\Buttons\\UI-Panel-HideButton-Down") else closeButton:SetNormalTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Up") closeButton:SetPushedTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Down") end closeButton:Show() else _G[name.."CloseButton"]:Hide() end local editBox = _G[name.."EditBox"] if info.hasEditBox then editBox:Show() if info.maxLetters then editBox:SetMaxLetters(info.maxLetters) end if info.maxBytes then editBox:SetMaxBytes(info.maxBytes) end editBox:SetText("") if info.editBoxWidth then E:Width(editBox, info.editBoxWidth) else E:Width(editBox, 130) end else editBox:Hide() end if info.hasMoneyFrame then _G[name.."MoneyFrame"]:Show() else _G[name.."MoneyFrame"]:Hide() end dialog.which = which dialog.timeleft = info.timeout dialog.hideOnEscape = info.hideOnEscape dialog.exclusive = info.exclusive dialog.enterClicksFirstButton = info.enterClicksFirstButton dialog.data = data local button1 = _G[name.."Button1"] local button2 = _G[name.."Button2"] do assert(getn(tempButtonLocs) == 0) tinsert(tempButtonLocs, button1) tinsert(tempButtonLocs, button2) for i = getn(tempButtonLocs), 1, -1 do if info["button"..i] then tempButtonLocs[i]:SetText(info["button"..i]) end tempButtonLocs[i]:Hide() tempButtonLocs[i]:ClearAllPoints() if not (info["button"..i] and (not info["DisplayButton"..i] or info["DisplayButton"..i](dialog))) then tremove(tempButtonLocs, i) end end local numButtons = getn(tempButtonLocs) dialog.numButtons = numButtons if numButtons == 2 then tempButtonLocs[1]:SetPoint("BOTTOMRIGHT", dialog, "BOTTOM", -6, 16) elseif numButtons == 1 then tempButtonLocs[1]:SetPoint("BOTTOM", dialog, "BOTTOM", 0, 16) end for i = 1, numButtons do if i > 1 then tempButtonLocs[i]:SetPoint("LEFT", tempButtonLocs[i-1], "RIGHT", 13, 0) end local width = tempButtonLocs[i]:GetTextWidth() if width > 110 then E:Width(tempButtonLocs[i], width + 20) else E:Width(tempButtonLocs[i], 120) end tempButtonLocs[i]:Enable() tempButtonLocs[i]:Show() end wipe(tempButtonLocs) table.setn(tempButtonLocs, 0) end local alertIcon = _G[name.."AlertIcon"] if info.showAlert then alertIcon:SetTexture("Interface\\DialogFrame\\DialogAlertIcon") alertIcon:SetPoint("LEFT", 24, 0) alertIcon:Show() elseif info.showAlertGear then alertIcon:SetTexture("Interface\\DialogFrame\\DialogAlertIcon") alertIcon:SetPoint("LEFT", 24, 0) alertIcon:Show() else alertIcon:SetTexture() alertIcon:Hide() end if info.StartDelay then dialog.startDelay = info.StartDelay() button1:Disable() else dialog.startDelay = nil button1:Enable() end E:StaticPopup_SetUpPosition(dialog) dialog:Show() E:StaticPopup_Resize(dialog, which) if info.sound then PlaySound(info.sound) end return dialog end function E:StaticPopup_Hide(which, data) for index = 1, MAX_STATIC_POPUPS, 1 do local dialog = _G["ElvUI_StaticPopup"..index] if ((dialog.which == which) and (not data or (data == dialog.data))) then dialog:Hide() end end end function E:Contruct_StaticPopups() E.StaticPopupFrames = {} local S = self:GetModule("Skins") for index = 1, MAX_STATIC_POPUPS do E.StaticPopupFrames[index] = CreateFrame("Frame", "ElvUI_StaticPopup"..index, E.UIParent, "StaticPopupTemplate") E.StaticPopupFrames[index]:SetID(index) E.StaticPopupFrames[index]:SetScript("OnShow", E.StaticPopup_OnShow) E.StaticPopupFrames[index]:SetScript("OnHide", E.StaticPopup_OnHide) E.StaticPopupFrames[index]:SetScript("OnUpdate", E.StaticPopup_OnUpdate) E.StaticPopupFrames[index]:SetScript("OnEvent", E.StaticPopup_OnEvent) local name = E.StaticPopupFrames[index]:GetName() for i = 1, 2 do local button = _G[name.."Button"..i] S:HandleButton(button) button:SetScript("OnClick", function() E.StaticPopup_OnClick(this:GetParent(), this:GetID()) end) E.StaticPopupFrames[index]["button"..i] = button end _G[name.."EditBox"]:SetScript("OnEnterPressed", E.StaticPopup_EditBoxOnEnterPressed) _G[name.."EditBox"]:SetScript("OnEscapePressed", E.StaticPopup_EditBoxOnEscapePressed) _G[name.."EditBox"]:SetScript("OnTextChanged", E.StaticPopup_EditBoxOnTextChanged) E:SetTemplate(E.StaticPopupFrames[index], "Transparent") E.StaticPopupFrames[index].text = _G[name.."Text"] E.StaticPopupFrames[index].editBox = _G[name.."EditBox"] _G[name.."EditBox"]:DisableDrawLayer("BACKGROUND") S:HandleEditBox(_G[name.."EditBox"]) S:HandleEditBox(_G[name.."MoneyInputFrameGold"]) S:HandleEditBox(_G[name.."MoneyInputFrameSilver"]) S:HandleEditBox(_G[name.."MoneyInputFrameCopper"]) _G[name.."EditBox"].backdrop:SetPoint("TOPLEFT", -2, -4) _G[name.."EditBox"].backdrop:SetPoint("BOTTOMRIGHT", 2, 4) end E:SecureHook("StaticPopup_Resize", "StaticPopup_SetUpPosition") E:SecureHook("StaticPopup_OnHide", "StaticPopup_CollapseTable") end